diff --git a/.classpath b/.classpath index 6d739bfc..6ea45b44 100644 --- a/.classpath +++ b/.classpath @@ -1,7 +1,6 @@ - @@ -28,8 +27,9 @@ - - + + + diff --git a/.gitignore b/.gitignore index 70f2d42e..f80b1387 100644 --- a/.gitignore +++ b/.gitignore @@ -47,7 +47,26 @@ clientdata/ # SWG Client Folders footprint/ interiorlayout/ -quest/ +clientdata/quest/ + +# PSWG Object Databases +odb/building/je.info.* +odb/creature/je.info.* +odb/doids/je.info.* +odb/guild/je.info.* +odb/mails/je.info.* +odb/oids/je.info.* +odb/chatRooms/je.info.* +odb/resourcehistory/je.info.* +odb/resourceroots/je.info.* +odb/resources/je.info.* +<<<<<<< HEAD +odb/auction/je.info.* +odb/swgobjects/je.info.* +======= +odb/auction/je.info.* +odb/bounties/je.info.* +>>>>>>> 12ca3ae66170fcfe09d848a7eea529041b9af5ad # External tool builders .externalToolBuilders/ @@ -199,4 +218,4 @@ pip-log.txt ############# ## PyCharm ############# -.idea \ No newline at end of file +.idea diff --git a/README.md b/README.md index 783721b1..ff4c8504 100644 --- a/README.md +++ b/README.md @@ -12,8 +12,8 @@ The Engine(NGEngine) is a closed source library and is only licensed for use wit Requirements for Building the Core: ======== -- JDK 7 -- An IDE like Eclipse Juno +- JDK 8 +- A Java 8 compatible IDE like Eclipse Kepler (https://wiki.eclipse.org/JDT/Eclipse_Java_8_Support_For_Kepler) - A valid Star Wars Galaxies Installation with the final patch - Postgresql server (www.postgresql.org) - TRE Explorer(http://forum.modsource.org/index.php?PHPSESSID=bf02fd8244123807f4716c1686abb59f&action=dlattach;topic=33.0;attach=49) @@ -43,8 +43,11 @@ Then export the following folders to your clientdata folder(should be located in - object - quest - snapshot +- string - terrain +Export the same folders from sku1_client.toc, sku2_client.toc and sku3_client.toc to avoid errors with kashyyyk. + Now you're ready to run the core! Contributing and Submitting patches diff --git a/lib/mbassador-1.1.7.jar b/lib/mbassador-1.1.7.jar deleted file mode 100644 index c7ae2c11..00000000 Binary files a/lib/mbassador-1.1.7.jar and /dev/null differ diff --git a/lib/mbassador-1.1.9.jar b/lib/mbassador-1.1.9.jar new file mode 100644 index 00000000..ff742d1c Binary files /dev/null and b/lib/mbassador-1.1.9.jar differ diff --git a/motd.txt b/motd.txt new file mode 100644 index 00000000..8d8e4743 --- /dev/null +++ b/motd.txt @@ -0,0 +1 @@ +Welcome to the ProjectSWG TestCenter! \ No newline at end of file diff --git a/nge - old.backup b/nge - old.backup new file mode 100644 index 00000000..7e15eff9 --- /dev/null +++ b/nge - old.backup @@ -0,0 +1,1028 @@ +-- +-- PostgreSQL database dump +-- + +-- Dumped from database version 9.2.2 +-- Dumped by pg_dump version 9.2.2 +-- Started on 2013-11-24 10:56:35 + +SET statement_timeout = 0; +SET client_encoding = 'UTF8'; +SET standard_conforming_strings = on; +SET check_function_bodies = false; +SET client_min_messages = warning; + +-- +-- TOC entry 2040 (class 0 OID 0) +-- Dependencies: 6 +-- Name: SCHEMA "public"; Type: COMMENT; Schema: -; Owner: postgres +-- + +COMMENT ON SCHEMA "public" IS 'standard public schema'; + + +-- +-- TOC entry 189 (class 3079 OID 11727) +-- Name: plpgsql; Type: EXTENSION; Schema: -; Owner: +-- + +CREATE EXTENSION IF NOT EXISTS "plpgsql" WITH SCHEMA "pg_catalog"; + + +-- +-- TOC entry 2042 (class 0 OID 0) +-- Dependencies: 189 +-- Name: EXTENSION "plpgsql"; Type: COMMENT; Schema: -; Owner: +-- + +COMMENT ON EXTENSION "plpgsql" IS 'PL/pgSQL procedural language'; + + +-- +-- TOC entry 188 (class 3079 OID 16598) +-- Name: adminpack; Type: EXTENSION; Schema: -; Owner: +-- + +CREATE EXTENSION IF NOT EXISTS "adminpack" WITH SCHEMA "pg_catalog"; + + +-- +-- TOC entry 2043 (class 0 OID 0) +-- Dependencies: 188 +-- Name: EXTENSION "adminpack"; Type: COMMENT; Schema: -; Owner: +-- + +COMMENT ON EXTENSION "adminpack" IS 'administrative functions for PostgreSQL'; + + +SET search_path = "public", pg_catalog; + +-- +-- TOC entry 575 (class 1247 OID 16733) +-- Name: reservation_type; Type: TYPE; Schema: public; Owner: nge +-- + +CREATE TYPE "reservation_type" AS ENUM ( + 'name_declined_fictionally_reserved', + 'name_declined_developer', + 'name_declined_profane' +); + + +ALTER TYPE "public"."reservation_type" OWNER TO "nge"; + +SET default_tablespace = ''; + +SET default_with_oids = false; + +-- +-- TOC entry 168 (class 1259 OID 16607) +-- Name: accounts; Type: TABLE; Schema: public; Owner: postgres; Tablespace: +-- + +CREATE TABLE "accounts" ( + "id" integer NOT NULL, + "user" character varying(16) NOT NULL, + "pass" character varying(34) NOT NULL, + "email" character varying(32) NOT NULL +); + + +ALTER TABLE "public"."accounts" OWNER TO "postgres"; + +-- +-- TOC entry 169 (class 1259 OID 16610) +-- Name: accounts_id_seq; Type: SEQUENCE; Schema: public; Owner: postgres +-- + +CREATE SEQUENCE "accounts_id_seq" + START WITH 1 + INCREMENT BY 1 + NO MINVALUE + NO MAXVALUE + CACHE 1; + + +ALTER TABLE "public"."accounts_id_seq" OWNER TO "postgres"; + +-- +-- TOC entry 2044 (class 0 OID 0) +-- Dependencies: 169 +-- Name: accounts_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: postgres +-- + +ALTER SEQUENCE "accounts_id_seq" OWNED BY "accounts"."id"; + + +-- +-- TOC entry 170 (class 1259 OID 16612) +-- Name: characters; Type: TABLE; Schema: public; Owner: postgres; Tablespace: +-- + +CREATE TABLE "characters" ( + "id" bigint NOT NULL, + "firstName" character varying(16) NOT NULL, + "lastName" character varying, + "accountId" integer NOT NULL, + "galaxyId" integer NOT NULL, + "statusId" integer NOT NULL, + "appearance" integer, + "gmflag" boolean +); + + +ALTER TABLE "public"."characters" OWNER TO "postgres"; + +-- +-- TOC entry 171 (class 1259 OID 16618) +-- Name: characters_id_seq; Type: SEQUENCE; Schema: public; Owner: postgres +-- + +CREATE SEQUENCE "characters_id_seq" + START WITH 1 + INCREMENT BY 1 + NO MINVALUE + NO MAXVALUE + CACHE 1; + + +ALTER TABLE "public"."characters_id_seq" OWNER TO "postgres"; + +-- +-- TOC entry 2045 (class 0 OID 0) +-- Dependencies: 171 +-- Name: characters_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: postgres +-- + +ALTER SEQUENCE "characters_id_seq" OWNED BY "characters"."id"; + + +-- +-- TOC entry 172 (class 1259 OID 16620) +-- Name: connectionServers; Type: TABLE; Schema: public; Owner: postgres; Tablespace: +-- + +CREATE TABLE "connectionServers" ( + "id" integer NOT NULL, + "address" character varying(40) NOT NULL, + "port" integer NOT NULL, + "galaxyId" integer NOT NULL, + "statusId" integer, + "pingPort" integer +); + + +ALTER TABLE "public"."connectionServers" OWNER TO "postgres"; + +-- +-- TOC entry 173 (class 1259 OID 16623) +-- Name: connectionServers_id_seq; Type: SEQUENCE; Schema: public; Owner: postgres +-- + +CREATE SEQUENCE "connectionServers_id_seq" + START WITH 1 + INCREMENT BY 1 + NO MINVALUE + NO MAXVALUE + CACHE 1; + + +ALTER TABLE "public"."connectionServers_id_seq" OWNER TO "postgres"; + +-- +-- TOC entry 2046 (class 0 OID 0) +-- Dependencies: 173 +-- Name: connectionServers_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: postgres +-- + +ALTER SEQUENCE "connectionServers_id_seq" OWNED BY "connectionServers"."id"; + + +-- +-- TOC entry 174 (class 1259 OID 16625) +-- Name: fictionallyreservednames; Type: TABLE; Schema: public; Owner: postgres; Tablespace: +-- + +CREATE TABLE "fictionallyreservednames" ( + "id" integer NOT NULL, + "firstName" character varying +); + + +ALTER TABLE "public"."fictionallyreservednames" OWNER TO "postgres"; + +-- +-- TOC entry 175 (class 1259 OID 16631) +-- Name: fictionallyreservednames_id_seq; Type: SEQUENCE; Schema: public; Owner: postgres +-- + +CREATE SEQUENCE "fictionallyreservednames_id_seq" + START WITH 1 + INCREMENT BY 1 + NO MINVALUE + NO MAXVALUE + CACHE 1; + + +ALTER TABLE "public"."fictionallyreservednames_id_seq" OWNER TO "postgres"; + +-- +-- TOC entry 2047 (class 0 OID 0) +-- Dependencies: 175 +-- Name: fictionallyreservednames_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: postgres +-- + +ALTER SEQUENCE "fictionallyreservednames_id_seq" OWNED BY "fictionallyreservednames"."id"; + + +-- +-- TOC entry 176 (class 1259 OID 16633) +-- Name: galaxies; Type: TABLE; Schema: public; Owner: postgres; Tablespace: +-- + +CREATE TABLE "galaxies" ( + "id" integer NOT NULL, + "name" character varying(30) NOT NULL +); + + +ALTER TABLE "public"."galaxies" OWNER TO "postgres"; + +-- +-- TOC entry 177 (class 1259 OID 16636) +-- Name: galaxies_id_seq; Type: SEQUENCE; Schema: public; Owner: postgres +-- + +CREATE SEQUENCE "galaxies_id_seq" + START WITH 1 + INCREMENT BY 1 + NO MINVALUE + NO MAXVALUE + CACHE 1; + + +ALTER TABLE "public"."galaxies_id_seq" OWNER TO "postgres"; + +-- +-- TOC entry 2048 (class 0 OID 0) +-- Dependencies: 177 +-- Name: galaxies_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: postgres +-- + +ALTER SEQUENCE "galaxies_id_seq" OWNED BY "galaxies"."id"; + + +-- +-- TOC entry 178 (class 1259 OID 16638) +-- Name: highestid; Type: TABLE; Schema: public; Owner: postgres; Tablespace: +-- + +CREATE TABLE "highestid" ( + "id" bigint NOT NULL +); + + +ALTER TABLE "public"."highestid" OWNER TO "postgres"; + +-- +-- TOC entry 179 (class 1259 OID 16641) +-- Name: profanenames; Type: TABLE; Schema: public; Owner: postgres; Tablespace: +-- + +CREATE TABLE "profanenames" ( + "id" integer NOT NULL, + "firstName" character varying +); + + +ALTER TABLE "public"."profanenames" OWNER TO "postgres"; + +-- +-- TOC entry 180 (class 1259 OID 16647) +-- Name: profanenames_id_seq; Type: SEQUENCE; Schema: public; Owner: postgres +-- + +CREATE SEQUENCE "profanenames_id_seq" + START WITH 1 + INCREMENT BY 1 + NO MINVALUE + NO MAXVALUE + CACHE 1; + + +ALTER TABLE "public"."profanenames_id_seq" OWNER TO "postgres"; + +-- +-- TOC entry 2049 (class 0 OID 0) +-- Dependencies: 180 +-- Name: profanenames_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: postgres +-- + +ALTER SEQUENCE "profanenames_id_seq" OWNED BY "profanenames"."id"; + + +-- +-- TOC entry 185 (class 1259 OID 16739) +-- Name: reservednames; Type: TABLE; Schema: public; Owner: nge; Tablespace: +-- + +CREATE TABLE "reservednames" ( + "id" integer NOT NULL, + "pattern" character varying, + "type" "reservation_type" DEFAULT 'name_declined_profane'::"reservation_type" NOT NULL, + "match_firstname" boolean DEFAULT true NOT NULL, + "match_lastname" boolean DEFAULT true NOT NULL, + "match_both_names" boolean DEFAULT false +); + + +ALTER TABLE "public"."reservednames" OWNER TO "nge"; + +-- +-- TOC entry 186 (class 1259 OID 16749) +-- Name: reservednames_id_seq; Type: SEQUENCE; Schema: public; Owner: nge +-- + +CREATE SEQUENCE "reservednames_id_seq" + START WITH 1 + INCREMENT BY 1 + NO MINVALUE + NO MAXVALUE + CACHE 1; + + +ALTER TABLE "public"."reservednames_id_seq" OWNER TO "nge"; + +-- +-- TOC entry 2051 (class 0 OID 0) +-- Dependencies: 186 +-- Name: reservednames_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: nge +-- + +ALTER SEQUENCE "reservednames_id_seq" OWNED BY "reservednames"."id"; + + +-- +-- TOC entry 181 (class 1259 OID 16651) +-- Name: reservedstaffnames; Type: TABLE; Schema: public; Owner: postgres; Tablespace: +-- + +CREATE TABLE "reservedstaffnames" ( + "id" integer NOT NULL, + "firstName" character varying +); + + +ALTER TABLE "public"."reservedstaffnames" OWNER TO "postgres"; + +-- +-- TOC entry 182 (class 1259 OID 16657) +-- Name: reservedstaffnames_id_seq; Type: SEQUENCE; Schema: public; Owner: postgres +-- + +CREATE SEQUENCE "reservedstaffnames_id_seq" + START WITH 1 + INCREMENT BY 1 + NO MINVALUE + NO MAXVALUE + CACHE 1; + + +ALTER TABLE "public"."reservedstaffnames_id_seq" OWNER TO "postgres"; + +-- +-- TOC entry 2053 (class 0 OID 0) +-- Dependencies: 182 +-- Name: reservedstaffnames_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: postgres +-- + +ALTER SEQUENCE "reservedstaffnames_id_seq" OWNED BY "reservedstaffnames"."id"; + + +-- +-- TOC entry 183 (class 1259 OID 16659) +-- Name: sessions; Type: TABLE; Schema: public; Owner: postgres; Tablespace: +-- + +CREATE TABLE "sessions" ( + "id" integer NOT NULL, + "key" "bytea" NOT NULL, + "accountId" integer NOT NULL, + "valid" timestamp with time zone DEFAULT "now"() NOT NULL +); + + +ALTER TABLE "public"."sessions" OWNER TO "postgres"; + +-- +-- TOC entry 184 (class 1259 OID 16666) +-- Name: sessions_id_seq; Type: SEQUENCE; Schema: public; Owner: postgres +-- + +CREATE SEQUENCE "sessions_id_seq" + START WITH 1 + INCREMENT BY 1 + NO MINVALUE + NO MAXVALUE + CACHE 1; + + +ALTER TABLE "public"."sessions_id_seq" OWNER TO "postgres"; + +-- +-- TOC entry 2054 (class 0 OID 0) +-- Dependencies: 184 +-- Name: sessions_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: postgres +-- + +ALTER SEQUENCE "sessions_id_seq" OWNED BY "sessions"."id"; + + +-- +-- TOC entry 187 (class 1259 OID 16752) +-- Name: temp_reserved_char_names; Type: TABLE; Schema: public; Owner: nge; Tablespace: +-- + +CREATE TABLE "temp_reserved_char_names" ( + "accountId" integer NOT NULL, + "firstName" character varying(16) +); + + +ALTER TABLE "public"."temp_reserved_char_names" OWNER TO "nge"; + +-- +-- TOC entry 2055 (class 0 OID 0) +-- Dependencies: 187 +-- Name: TABLE "temp_reserved_char_names"; Type: COMMENT; Schema: public; Owner: nge +-- + +COMMENT ON TABLE "temp_reserved_char_names" IS 'this table is for temporary reservations.'; + + +-- +-- TOC entry 1982 (class 2604 OID 16668) +-- Name: id; Type: DEFAULT; Schema: public; Owner: postgres +-- + +ALTER TABLE ONLY "accounts" ALTER COLUMN "id" SET DEFAULT "nextval"('"accounts_id_seq"'::"regclass"); + + +-- +-- TOC entry 1983 (class 2604 OID 16669) +-- Name: id; Type: DEFAULT; Schema: public; Owner: postgres +-- + +ALTER TABLE ONLY "connectionServers" ALTER COLUMN "id" SET DEFAULT "nextval"('"connectionServers_id_seq"'::"regclass"); + + +-- +-- TOC entry 1984 (class 2604 OID 16670) +-- Name: id; Type: DEFAULT; Schema: public; Owner: postgres +-- + +ALTER TABLE ONLY "fictionallyreservednames" ALTER COLUMN "id" SET DEFAULT "nextval"('"fictionallyreservednames_id_seq"'::"regclass"); + + +-- +-- TOC entry 1985 (class 2604 OID 16671) +-- Name: id; Type: DEFAULT; Schema: public; Owner: postgres +-- + +ALTER TABLE ONLY "galaxies" ALTER COLUMN "id" SET DEFAULT "nextval"('"galaxies_id_seq"'::"regclass"); + + +-- +-- TOC entry 1986 (class 2604 OID 16672) +-- Name: id; Type: DEFAULT; Schema: public; Owner: postgres +-- + +ALTER TABLE ONLY "profanenames" ALTER COLUMN "id" SET DEFAULT "nextval"('"profanenames_id_seq"'::"regclass"); + + +-- +-- TOC entry 1994 (class 2604 OID 16751) +-- Name: id; Type: DEFAULT; Schema: public; Owner: nge +-- + +ALTER TABLE ONLY "reservednames" ALTER COLUMN "id" SET DEFAULT "nextval"('"reservednames_id_seq"'::"regclass"); + + +-- +-- TOC entry 1987 (class 2604 OID 16673) +-- Name: id; Type: DEFAULT; Schema: public; Owner: postgres +-- + +ALTER TABLE ONLY "reservedstaffnames" ALTER COLUMN "id" SET DEFAULT "nextval"('"reservedstaffnames_id_seq"'::"regclass"); + + +-- +-- TOC entry 1989 (class 2604 OID 16674) +-- Name: id; Type: DEFAULT; Schema: public; Owner: postgres +-- + +ALTER TABLE ONLY "sessions" ALTER COLUMN "id" SET DEFAULT "nextval"('"sessions_id_seq"'::"regclass"); + + +-- +-- TOC entry 2015 (class 0 OID 16607) +-- Dependencies: 168 +-- Data for Name: accounts; Type: TABLE DATA; Schema: public; Owner: postgres +-- + +INSERT INTO "accounts" VALUES (1, 'Light', 'password', 'test'); +INSERT INTO "accounts" VALUES (2, 'Darkk', 'Password1', 'xyz@x.de'); + + +-- +-- TOC entry 2056 (class 0 OID 0) +-- Dependencies: 169 +-- Name: accounts_id_seq; Type: SEQUENCE SET; Schema: public; Owner: postgres +-- + +SELECT pg_catalog.setval('"accounts_id_seq"', 2, true); + + +-- +-- TOC entry 2017 (class 0 OID 16612) +-- Dependencies: 170 +-- Data for Name: characters; Type: TABLE DATA; Schema: public; Owner: postgres +-- + +INSERT INTO "characters" VALUES (6521, 'Dhoemar', '', 2, 3, 1, 101601749, false); +INSERT INTO "characters" VALUES (7068, 'Nyess', 'Shethersan', 9261, 2, 1, 101601749, false); +INSERT INTO "characters" VALUES (8138, 'Ahdrim', 'Kaharean', 9261, 3, 1, 101601749, false); + + +-- +-- TOC entry 2057 (class 0 OID 0) +-- Dependencies: 171 +-- Name: characters_id_seq; Type: SEQUENCE SET; Schema: public; Owner: postgres +-- + +SELECT pg_catalog.setval('"characters_id_seq"', 4, true); + + +-- +-- TOC entry 2019 (class 0 OID 16620) +-- Dependencies: 172 +-- Data for Name: connectionServers; Type: TABLE DATA; Schema: public; Owner: postgres +-- + +INSERT INTO "connectionServers" VALUES (2, '127.0.0.1', 44463, 2, 1, 44462); +INSERT INTO "connectionServers" VALUES (3, '172.16.0.208', 44463, 3, 2, 44462); + + +-- +-- TOC entry 2058 (class 0 OID 0) +-- Dependencies: 173 +-- Name: connectionServers_id_seq; Type: SEQUENCE SET; Schema: public; Owner: postgres +-- + +SELECT pg_catalog.setval('"connectionServers_id_seq"', 2, true); + + +-- +-- TOC entry 2021 (class 0 OID 16625) +-- Dependencies: 174 +-- Data for Name: fictionallyreservednames; Type: TABLE DATA; Schema: public; Owner: postgres +-- + +INSERT INTO "fictionallyreservednames" VALUES (1, 'luke'); +INSERT INTO "fictionallyreservednames" VALUES (2, 'darth'); +INSERT INTO "fictionallyreservednames" VALUES (3, 'vader'); +INSERT INTO "fictionallyreservednames" VALUES (8, 'han solo'); +INSERT INTO "fictionallyreservednames" VALUES (9, 'darth vader'); +INSERT INTO "fictionallyreservednames" VALUES (7, 'solo'); +INSERT INTO "fictionallyreservednames" VALUES (6, 'han'); +INSERT INTO "fictionallyreservednames" VALUES (5, 'leia'); +INSERT INTO "fictionallyreservednames" VALUES (4, 'emperor'); + + +-- +-- TOC entry 2059 (class 0 OID 0) +-- Dependencies: 175 +-- Name: fictionallyreservednames_id_seq; Type: SEQUENCE SET; Schema: public; Owner: postgres +-- + +SELECT pg_catalog.setval('"fictionallyreservednames_id_seq"', 1, false); + + +-- +-- TOC entry 2023 (class 0 OID 16633) +-- Dependencies: 176 +-- Data for Name: galaxies; Type: TABLE DATA; Schema: public; Owner: postgres +-- + +INSERT INTO "galaxies" VALUES (2, 'Local Connection'); +INSERT INTO "galaxies" VALUES (3, 'VM'); + + +-- +-- TOC entry 2060 (class 0 OID 0) +-- Dependencies: 177 +-- Name: galaxies_id_seq; Type: SEQUENCE SET; Schema: public; Owner: postgres +-- + +SELECT pg_catalog.setval('"galaxies_id_seq"', 2, true); + + +-- +-- TOC entry 2025 (class 0 OID 16638) +-- Dependencies: 178 +-- Data for Name: highestid; Type: TABLE DATA; Schema: public; Owner: postgres +-- + +INSERT INTO "highestid" VALUES (8682); + + +-- +-- TOC entry 2026 (class 0 OID 16641) +-- Dependencies: 179 +-- Data for Name: profanenames; Type: TABLE DATA; Schema: public; Owner: postgres +-- + +INSERT INTO "profanenames" VALUES (1, 'anal'); +INSERT INTO "profanenames" VALUES (2, 'ass'); +INSERT INTO "profanenames" VALUES (3, 'asshole'); +INSERT INTO "profanenames" VALUES (4, 'biatch'); +INSERT INTO "profanenames" VALUES (5, 'bitch'); +INSERT INTO "profanenames" VALUES (6, 'cock'); +INSERT INTO "profanenames" VALUES (7, 'cocksucker'); +INSERT INTO "profanenames" VALUES (8, 'cum'); +INSERT INTO "profanenames" VALUES (9, 'cunt'); +INSERT INTO "profanenames" VALUES (10, 'dick'); +INSERT INTO "profanenames" VALUES (11, 'dumb'); +INSERT INTO "profanenames" VALUES (12, 'dumbass'); +INSERT INTO "profanenames" VALUES (13, 'fag'); +INSERT INTO "profanenames" VALUES (14, 'faggot'); +INSERT INTO "profanenames" VALUES (15, 'fuck'); +INSERT INTO "profanenames" VALUES (16, 'fuk'); +INSERT INTO "profanenames" VALUES (17, 'hater'); +INSERT INTO "profanenames" VALUES (18, 'hooker'); +INSERT INTO "profanenames" VALUES (19, 'jackoff'); +INSERT INTO "profanenames" VALUES (20, 'jizz'); +INSERT INTO "profanenames" VALUES (21, 'kunt'); +INSERT INTO "profanenames" VALUES (22, 'nazi'); +INSERT INTO "profanenames" VALUES (23, 'negro'); +INSERT INTO "profanenames" VALUES (24, 'nigga'); +INSERT INTO "profanenames" VALUES (25, 'nigger'); +INSERT INTO "profanenames" VALUES (26, 'nipple'); +INSERT INTO "profanenames" VALUES (27, 'nude'); +INSERT INTO "profanenames" VALUES (28, 'nudity'); +INSERT INTO "profanenames" VALUES (29, 'penis'); +INSERT INTO "profanenames" VALUES (30, 'pussy'); +INSERT INTO "profanenames" VALUES (31, 'rape'); +INSERT INTO "profanenames" VALUES (32, 'rapist'); +INSERT INTO "profanenames" VALUES (33, 'sex'); +INSERT INTO "profanenames" VALUES (34, 'shit'); +INSERT INTO "profanenames" VALUES (35, 'skank'); +INSERT INTO "profanenames" VALUES (36, 'slut'); +INSERT INTO "profanenames" VALUES (37, 'suck'); +INSERT INTO "profanenames" VALUES (38, 'sucks'); +INSERT INTO "profanenames" VALUES (39, 'sucker'); +INSERT INTO "profanenames" VALUES (40, 'tit'); +INSERT INTO "profanenames" VALUES (41, 'tits'); +INSERT INTO "profanenames" VALUES (42, 'twat'); +INSERT INTO "profanenames" VALUES (43, 'vagina'); +INSERT INTO "profanenames" VALUES (44, 'whore'); +INSERT INTO "profanenames" VALUES (45, 'wtf'); +INSERT INTO "profanenames" VALUES (46, 'piss'); +INSERT INTO "profanenames" VALUES (47, 'damn'); + + +-- +-- TOC entry 2061 (class 0 OID 0) +-- Dependencies: 180 +-- Name: profanenames_id_seq; Type: SEQUENCE SET; Schema: public; Owner: postgres +-- + +SELECT pg_catalog.setval('"profanenames_id_seq"', 1, false); + + +-- +-- TOC entry 2032 (class 0 OID 16739) +-- Dependencies: 185 +-- Data for Name: reservednames; Type: TABLE DATA; Schema: public; Owner: nge +-- + +INSERT INTO "reservednames" VALUES (81, 'anal$', 'name_declined_profane', true, true, false); +INSERT INTO "reservednames" VALUES (82, '^ass$', 'name_declined_profane', true, true, false); +INSERT INTO "reservednames" VALUES (83, '^ass\\s*hole$', 'name_declined_profane', true, true, true); +INSERT INTO "reservednames" VALUES (84, '^biatch$', 'name_declined_profane', true, true, false); +INSERT INTO "reservednames" VALUES (85, '^bitch$', 'name_declined_profane', true, true, false); +INSERT INTO "reservednames" VALUES (86, '^cock$', 'name_declined_profane', true, true, false); +INSERT INTO "reservednames" VALUES (87, '^cock\\s*sucker$', 'name_declined_profane', true, true, true); +INSERT INTO "reservednames" VALUES (88, '^cum$', 'name_declined_profane', true, true, false); +INSERT INTO "reservednames" VALUES (89, '^cunt$', 'name_declined_profane', true, true, false); +INSERT INTO "reservednames" VALUES (90, '^dick$', 'name_declined_profane', true, true, false); +INSERT INTO "reservednames" VALUES (91, '^dumb$', 'name_declined_profane', true, true, false); +INSERT INTO "reservednames" VALUES (92, '^dum\\s*bass?$', 'name_declined_profane', true, true, true); +INSERT INTO "reservednames" VALUES (93, '^fag$', 'name_declined_profane', true, true, false); +INSERT INTO "reservednames" VALUES (94, '^faggot$', 'name_declined_profane', true, true, false); +INSERT INTO "reservednames" VALUES (95, '^fuck$', 'name_declined_profane', true, true, false); +INSERT INTO "reservednames" VALUES (96, '^fuk$', 'name_declined_profane', true, true, false); +INSERT INTO "reservednames" VALUES (97, '^hater$', 'name_declined_profane', true, true, false); +INSERT INTO "reservednames" VALUES (98, '^hooker$', 'name_declined_profane', true, true, false); +INSERT INTO "reservednames" VALUES (99, '^jackoff$', 'name_declined_profane', true, true, false); +INSERT INTO "reservednames" VALUES (100, '^jizz$', 'name_declined_profane', true, true, false); +INSERT INTO "reservednames" VALUES (101, '^kunt$', 'name_declined_profane', true, true, false); +INSERT INTO "reservednames" VALUES (102, '^nazi$', 'name_declined_profane', true, true, false); +INSERT INTO "reservednames" VALUES (103, '^negro$', 'name_declined_profane', true, true, false); +INSERT INTO "reservednames" VALUES (104, '^nigga$', 'name_declined_profane', true, true, false); +INSERT INTO "reservednames" VALUES (105, '^nigger$', 'name_declined_profane', true, true, false); +INSERT INTO "reservednames" VALUES (106, '^nipple$', 'name_declined_profane', true, true, false); +INSERT INTO "reservednames" VALUES (107, '^nude$', 'name_declined_profane', true, true, false); +INSERT INTO "reservednames" VALUES (108, '^nudity$', 'name_declined_profane', true, true, false); +INSERT INTO "reservednames" VALUES (109, '^penis$', 'name_declined_profane', true, true, false); +INSERT INTO "reservednames" VALUES (110, '^pussy$', 'name_declined_profane', true, true, false); +INSERT INTO "reservednames" VALUES (111, '^rape$', 'name_declined_profane', true, true, false); +INSERT INTO "reservednames" VALUES (112, '^rapist$', 'name_declined_profane', true, true, false); +INSERT INTO "reservednames" VALUES (113, '^sex$', 'name_declined_profane', true, true, false); +INSERT INTO "reservednames" VALUES (114, '^shit$', 'name_declined_profane', true, true, false); +INSERT INTO "reservednames" VALUES (115, '^skank$', 'name_declined_profane', true, true, false); +INSERT INTO "reservednames" VALUES (116, '^slut$', 'name_declined_profane', true, true, false); +INSERT INTO "reservednames" VALUES (117, '^suck$', 'name_declined_profane', true, true, false); +INSERT INTO "reservednames" VALUES (118, '^sucks$', 'name_declined_profane', true, true, false); +INSERT INTO "reservednames" VALUES (119, '^sucker$', 'name_declined_profane', true, true, false); +INSERT INTO "reservednames" VALUES (120, '^tit$', 'name_declined_profane', true, true, false); +INSERT INTO "reservednames" VALUES (121, '^tits$', 'name_declined_profane', true, true, false); +INSERT INTO "reservednames" VALUES (122, '^twat$', 'name_declined_profane', true, true, false); +INSERT INTO "reservednames" VALUES (123, '^vagina$', 'name_declined_profane', true, true, false); +INSERT INTO "reservednames" VALUES (124, '^whore$', 'name_declined_profane', true, true, false); +INSERT INTO "reservednames" VALUES (125, '^wtf$', 'name_declined_profane', true, true, false); +INSERT INTO "reservednames" VALUES (126, '^piss$', 'name_declined_profane', true, true, false); +INSERT INTO "reservednames" VALUES (127, '^damn$', 'name_declined_profane', true, true, false); +INSERT INTO "reservednames" VALUES (128, '^luke$', 'name_declined_fictionally_reserved', true, false, false); +INSERT INTO "reservednames" VALUES (129, '^darth$', 'name_declined_fictionally_reserved', true, false, false); +INSERT INTO "reservednames" VALUES (130, '^vader$', 'name_declined_fictionally_reserved', false, true, false); +INSERT INTO "reservednames" VALUES (131, '^han$', 'name_declined_fictionally_reserved', true, false, false); +INSERT INTO "reservednames" VALUES (132, '^solo$', 'name_declined_fictionally_reserved', false, true, false); +INSERT INTO "reservednames" VALUES (133, '^leia$', 'name_declined_fictionally_reserved', true, false, false); +INSERT INTO "reservednames" VALUES (134, '^emperor$ ', 'name_declined_fictionally_reserved', true, false, false); +INSERT INTO "reservednames" VALUES (135, '^notcho67$', 'name_declined_developer', true, false, false); +INSERT INTO "reservednames" VALUES (136, '^mulligan$', 'name_declined_developer', true, false, false); +INSERT INTO "reservednames" VALUES (137, '^bitsnbytes$', 'name_declined_developer', true, false, false); +INSERT INTO "reservednames" VALUES (138, '^farstar_medic$', 'name_declined_developer', true, false, false); +INSERT INTO "reservednames" VALUES (139, '^ilikenwf$', 'name_declined_developer', true, false, false); +INSERT INTO "reservednames" VALUES (140, '^joshlarson$', 'name_declined_developer', true, false, false); +INSERT INTO "reservednames" VALUES (141, '^sweetcake$', 'name_declined_developer', true, false, false); +INSERT INTO "reservednames" VALUES (142, '^skorpios$', 'name_declined_developer', true, false, false); +INSERT INTO "reservednames" VALUES (143, '^telsia$', 'name_declined_developer', true, false, false); +INSERT INTO "reservednames" VALUES (144, '^fingies$', 'name_declined_developer', true, false, false); +INSERT INTO "reservednames" VALUES (145, '^niypi$', 'name_declined_developer', true, false, false); +INSERT INTO "reservednames" VALUES (146, '^caelen$', 'name_declined_developer', true, false, false); +INSERT INTO "reservednames" VALUES (147, '^light$', 'name_declined_developer', true, false, false); +INSERT INTO "reservednames" VALUES (149, '^mcurt$', 'name_declined_developer', true, false, false); +INSERT INTO "reservednames" VALUES (150, '^peej$', 'name_declined_developer', true, false, false); +INSERT INTO "reservednames" VALUES (151, '^synge$', 'name_declined_developer', true, false, false); +INSERT INTO "reservednames" VALUES (152, '^timm$', 'name_declined_developer', true, false, false); +INSERT INTO "reservednames" VALUES (153, '^treeku$', 'name_declined_developer', true, false, false); +INSERT INTO "reservednames" VALUES (154, '^wefi$', 'name_declined_developer', true, false, false); +INSERT INTO "reservednames" VALUES (155, '^royalguard$', 'name_declined_developer', true, false, false); +INSERT INTO "reservednames" VALUES (156, '^estouk$', 'name_declined_developer', true, false, false); +INSERT INTO "reservednames" VALUES (157, '^atheenah$', 'name_declined_developer', true, false, false); +INSERT INTO "reservednames" VALUES (158, '^cable$', 'name_declined_developer', true, false, false); +INSERT INTO "reservednames" VALUES (159, '^oblitrator$', 'name_declined_developer', true, false, false); +INSERT INTO "reservednames" VALUES (160, '^katarn$ ', 'name_declined_fictionally_reserved', true, true, false); +INSERT INTO "reservednames" VALUES (161, '^boba$ ', 'name_declined_fictionally_reserved', true, true, false); +INSERT INTO "reservednames" VALUES (162, '^fett$ ', 'name_declined_fictionally_reserved', true, true, false); +INSERT INTO "reservednames" VALUES (163, '^sidious$ ', 'name_declined_fictionally_reserved', true, true, false); +INSERT INTO "reservednames" VALUES (164, '^tarkin$ ', 'name_declined_fictionally_reserved', true, true, false); +INSERT INTO "reservednames" VALUES (165, '^dooku$ ', 'name_declined_fictionally_reserved', true, true, false); +INSERT INTO "reservednames" VALUES (166, '^skywalker$ ', 'name_declined_fictionally_reserved', true, true, false); +INSERT INTO "reservednames" VALUES (167, '^organa$ ', 'name_declined_fictionally_reserved', true, true, false); +INSERT INTO "reservednames" VALUES (168, '^windu$ ', 'name_declined_fictionally_reserved', true, true, false); +INSERT INTO "reservednames" VALUES (169, '^yoda$ ', 'name_declined_fictionally_reserved', true, true, false); +INSERT INTO "reservednames" VALUES (170, '^obi\\s*wan$', 'name_declined_fictionally_reserved', true, true, true); +INSERT INTO "reservednames" VALUES (171, '^mara\\s*jade$', 'name_declined_fictionally_reserved', true, true, true); +INSERT INTO "reservednames" VALUES (172, '^old\\s*man$', 'name_declined_developer', false, false, true); +INSERT INTO "reservednames" VALUES (173, '^tit\\s*ties$', 'name_declined_profane', true, true, true); +INSERT INTO "reservednames" VALUES (174, '^hjal$', 'name_declined_developer', true, true, false); +INSERT INTO "reservednames" VALUES (175, '^t\\s*squarred$', 'name_declined_developer', true, true, false); +INSERT INTO "reservednames" VALUES (176, '^pex$', 'name_declined_developer', true, true, false); +INSERT INTO "reservednames" VALUES (177, '^qui\\s*gon$', 'name_declined_fictionally_reserved', true, true, true); +INSERT INTO "reservednames" VALUES (178, '^corran\\s*horn$', 'name_declined_fictionally_reserved', true, true, true); +INSERT INTO "reservednames" VALUES (179, '^Ahsoka$', 'name_declined_fictionally_reserved', true, true, false); +INSERT INTO "reservednames" VALUES (180, '^wat\\s*to$', 'name_declined_fictionally_reserved', true, true, false); +INSERT INTO "reservednames" VALUES (181, '^sunrider$', 'name_declined_fictionally_reserved', true, true, false); +INSERT INTO "reservednames" VALUES (182, '^bondara$', 'name_declined_fictionally_reserved', true, true, false); +INSERT INTO "reservednames" VALUES (183, '^jeff\\s*freeman$', 'name_declined_developer', false, false, true); +INSERT INTO "reservednames" VALUES (184, '^adept\\s*strain$', 'name_declined_developer', true, true, true); +INSERT INTO "reservednames" VALUES (185, '^bnar$', 'name_declined_fictionally_reserved', true, true, false); +INSERT INTO "reservednames" VALUES (186, '^revan$', 'name_declined_fictionally_reserved', true, true, false); +INSERT INTO "reservednames" VALUES (187, '^malak$', 'name_declined_fictionally_reserved', true, true, false); +INSERT INTO "reservednames" VALUES (188, '^kreia$', 'name_declined_fictionally_reserved', true, true, false); +INSERT INTO "reservednames" VALUES (189, '^traya$', 'name_declined_fictionally_reserved', true, true, false); +INSERT INTO "reservednames" VALUES (190, '^schnie\\s*del$', 'name_declined_profane', true, true, true); +INSERT INTO "reservednames" VALUES (191, '^möp\\s*se$', 'name_declined_profane', true, true, true); +INSERT INTO "reservednames" VALUES (192, '^schwanz$', 'name_declined_profane', true, true, true); +INSERT INTO "reservednames" VALUES (193, '^muschi$', 'name_declined_profane', true, true, true); +INSERT INTO "reservednames" VALUES (194, '^fotze$', 'name_declined_profane', true, true, true); +INSERT INTO "reservednames" VALUES (195, '^jar\\s*jar$', 'name_declined_fictionally_reserved', true, true, true); +INSERT INTO "reservednames" VALUES (196, '^arsch\\s*loch$', 'name_declined_profane', true, true, true); +INSERT INTO "reservednames" VALUES (197, '^fick\\s*en$', 'name_declined_profane', true, true, true); +INSERT INTO "reservednames" VALUES (198, '^fik\\s*ken$', 'name_declined_profane', true, true, true); +INSERT INTO "reservednames" VALUES (199, '^fic\\s*ken$', 'name_declined_profane', true, true, true); +INSERT INTO "reservednames" VALUES (200, '^ja\\s*bba$', 'name_declined_fictionally_reserved', true, true, true); +INSERT INTO "reservednames" VALUES (201, '^arsch$', 'name_declined_profane', true, true, false); +INSERT INTO "reservednames" VALUES (202, '^jab\\s*ba$', 'name_declined_fictionally_reserved', true, true, true); +INSERT INTO "reservednames" VALUES (203, '^jabb\\s*a$', 'name_declined_fictionally_reserved', true, true, true); +INSERT INTO "reservednames" VALUES (148, '^master\\s*idler$', 'name_declined_developer', false, false, false); +INSERT INTO "reservednames" VALUES (204, '^gief$', 'name_declined_developer', true, false, false); +INSERT INTO "reservednames" VALUES (205, '^server$', 'name_declined_developer', true, false, false); + + +-- +-- TOC entry 2062 (class 0 OID 0) +-- Dependencies: 186 +-- Name: reservednames_id_seq; Type: SEQUENCE SET; Schema: public; Owner: nge +-- + +SELECT pg_catalog.setval('"reservednames_id_seq"', 205, true); + + +-- +-- TOC entry 2028 (class 0 OID 16651) +-- Dependencies: 181 +-- Data for Name: reservedstaffnames; Type: TABLE DATA; Schema: public; Owner: postgres +-- + +INSERT INTO "reservedstaffnames" VALUES (5, 'notcho67'); +INSERT INTO "reservedstaffnames" VALUES (6, 'mulligan'); +INSERT INTO "reservedstaffnames" VALUES (7, 'bitsnbytes'); +INSERT INTO "reservedstaffnames" VALUES (9, 'farstar_medic'); +INSERT INTO "reservedstaffnames" VALUES (10, 'ilikenwf'); +INSERT INTO "reservedstaffnames" VALUES (11, 'joshlarson'); +INSERT INTO "reservedstaffnames" VALUES (25, 'abbs'); +INSERT INTO "reservedstaffnames" VALUES (1, 'skorpios'); +INSERT INTO "reservedstaffnames" VALUES (2, 'telsia'); +INSERT INTO "reservedstaffnames" VALUES (3, 'fingies'); +INSERT INTO "reservedstaffnames" VALUES (4, 'niypi'); +INSERT INTO "reservedstaffnames" VALUES (8, 'caelen'); +INSERT INTO "reservedstaffnames" VALUES (12, 'light'); +INSERT INTO "reservedstaffnames" VALUES (13, 'master idler'); +INSERT INTO "reservedstaffnames" VALUES (14, 'mcurt'); +INSERT INTO "reservedstaffnames" VALUES (15, 'peej'); +INSERT INTO "reservedstaffnames" VALUES (16, 'synge'); +INSERT INTO "reservedstaffnames" VALUES (17, 'timm'); +INSERT INTO "reservedstaffnames" VALUES (18, 'treeku'); +INSERT INTO "reservedstaffnames" VALUES (19, 'wefi'); +INSERT INTO "reservedstaffnames" VALUES (20, 'royalguard'); +INSERT INTO "reservedstaffnames" VALUES (21, 'estouk'); +INSERT INTO "reservedstaffnames" VALUES (22, 'atheenah'); +INSERT INTO "reservedstaffnames" VALUES (23, 'cable'); +INSERT INTO "reservedstaffnames" VALUES (24, 'oblitrator'); + + +-- +-- TOC entry 2063 (class 0 OID 0) +-- Dependencies: 182 +-- Name: reservedstaffnames_id_seq; Type: SEQUENCE SET; Schema: public; Owner: postgres +-- + +SELECT pg_catalog.setval('"reservedstaffnames_id_seq"', 1, false); + + +SELECT pg_catalog.setval('"sessions_id_seq"', 1, true); + +-- +-- TOC entry 2034 (class 0 OID 16752) +-- Dependencies: 187 +-- Data for Name: temp_reserved_char_names; Type: TABLE DATA; Schema: public; Owner: nge +-- + +INSERT INTO "temp_reserved_char_names" VALUES (2, 'testchar'); +INSERT INTO "temp_reserved_char_names" VALUES (3, 'testchar2'); + + +-- +-- TOC entry 1996 (class 2606 OID 16676) +-- Name: accounts_pkey; Type: CONSTRAINT; Schema: public; Owner: postgres; Tablespace: +-- + +ALTER TABLE ONLY "accounts" + ADD CONSTRAINT "accounts_pkey" PRIMARY KEY ("id"); + + +-- +-- TOC entry 1998 (class 2606 OID 16678) +-- Name: characters_pkey; Type: CONSTRAINT; Schema: public; Owner: postgres; Tablespace: +-- + +ALTER TABLE ONLY "characters" + ADD CONSTRAINT "characters_pkey" PRIMARY KEY ("id"); + + +-- +-- TOC entry 2000 (class 2606 OID 16680) +-- Name: connectionServers_pkey; Type: CONSTRAINT; Schema: public; Owner: postgres; Tablespace: +-- + +ALTER TABLE ONLY "connectionServers" + ADD CONSTRAINT "connectionServers_pkey" PRIMARY KEY ("id"); + + +-- +-- TOC entry 2002 (class 2606 OID 16682) +-- Name: fictionallyreservednames_pkey; Type: CONSTRAINT; Schema: public; Owner: postgres; Tablespace: +-- + +ALTER TABLE ONLY "fictionallyreservednames" + ADD CONSTRAINT "fictionallyreservednames_pkey" PRIMARY KEY ("id"); + + +-- +-- TOC entry 2004 (class 2606 OID 16684) +-- Name: galaxies_pkey; Type: CONSTRAINT; Schema: public; Owner: postgres; Tablespace: +-- + +ALTER TABLE ONLY "galaxies" + ADD CONSTRAINT "galaxies_pkey" PRIMARY KEY ("id"); + + +-- +-- TOC entry 2006 (class 2606 OID 16686) +-- Name: id; Type: CONSTRAINT; Schema: public; Owner: postgres; Tablespace: +-- + +ALTER TABLE ONLY "highestid" + ADD CONSTRAINT "id" PRIMARY KEY ("id"); + + +-- +-- TOC entry 2008 (class 2606 OID 16688) +-- Name: profanenames_pkey; Type: CONSTRAINT; Schema: public; Owner: postgres; Tablespace: +-- + +ALTER TABLE ONLY "profanenames" + ADD CONSTRAINT "profanenames_pkey" PRIMARY KEY ("id"); + + +-- +-- TOC entry 2010 (class 2606 OID 16690) +-- Name: reservedstaffnames_pkey; Type: CONSTRAINT; Schema: public; Owner: postgres; Tablespace: +-- + +ALTER TABLE ONLY "reservedstaffnames" + ADD CONSTRAINT "reservedstaffnames_pkey" PRIMARY KEY ("id"); + + +-- +-- TOC entry 2012 (class 2606 OID 16692) +-- Name: sessions_pkey; Type: CONSTRAINT; Schema: public; Owner: postgres; Tablespace: +-- + +ALTER TABLE ONLY "sessions" + ADD CONSTRAINT "sessions_pkey" PRIMARY KEY ("id"); + + +-- +-- TOC entry 2014 (class 2606 OID 16756) +-- Name: temp_reserved_char_names_primary; Type: CONSTRAINT; Schema: public; Owner: nge; Tablespace: +-- + +ALTER TABLE ONLY "temp_reserved_char_names" + ADD CONSTRAINT "temp_reserved_char_names_primary" PRIMARY KEY ("accountId"); + + +-- +-- TOC entry 2041 (class 0 OID 0) +-- Dependencies: 6 +-- Name: public; Type: ACL; Schema: -; Owner: postgres +-- + +REVOKE ALL ON SCHEMA "public" FROM PUBLIC; +REVOKE ALL ON SCHEMA "public" FROM "postgres"; +GRANT ALL ON SCHEMA "public" TO "postgres"; +GRANT ALL ON SCHEMA "public" TO PUBLIC; + + +-- +-- TOC entry 2050 (class 0 OID 0) +-- Dependencies: 185 +-- Name: reservednames; Type: ACL; Schema: public; Owner: nge +-- + +REVOKE ALL ON TABLE "reservednames" FROM PUBLIC; +REVOKE ALL ON TABLE "reservednames" FROM "nge"; +GRANT ALL ON TABLE "reservednames" TO "nge"; + + +-- +-- TOC entry 2052 (class 0 OID 0) +-- Dependencies: 186 +-- Name: reservednames_id_seq; Type: ACL; Schema: public; Owner: nge +-- + +REVOKE ALL ON SEQUENCE "reservednames_id_seq" FROM PUBLIC; +REVOKE ALL ON SEQUENCE "reservednames_id_seq" FROM "nge"; +GRANT ALL ON SEQUENCE "reservednames_id_seq" TO "nge"; + + +-- Completed on 2013-11-24 10:56:37 + +-- +-- PostgreSQL database dump complete +-- + diff --git a/nge.backup b/nge.backup index 049637b4..1a761380 100644 Binary files a/nge.backup and b/nge.backup differ diff --git a/nge.cfg b/nge.cfg index 328f9018..b11b4219 100644 --- a/nge.cfg +++ b/nge.cfg @@ -11,3 +11,5 @@ DB.URL=localhost DB.PASS=nge GALAXY_ID=2 GALAXY_NAME=Local Connection +XPMULTIPLIER=1.0 +MAXNUMBEROFCHARACTERS=2 diff --git a/ngengine_public.jar b/ngengine_public.jar index 326b2a85..079df450 100644 Binary files a/ngengine_public.jar and b/ngengine_public.jar differ diff --git a/odb/WipeAllOdbFolders_ONLY_EXECUTE_IN_ODB_FOLDER.bat b/odb/WipeAllOdbFolders_ONLY_EXECUTE_IN_ODB_FOLDER.bat new file mode 100644 index 00000000..6fa1c55b --- /dev/null +++ b/odb/WipeAllOdbFolders_ONLY_EXECUTE_IN_ODB_FOLDER.bat @@ -0,0 +1,35 @@ +:: Odb file wiper by Charon +:: Use at your own risk! +:: Do NOT execute outside the odb folder +:: because it deletes files in subfolders! + +@echo off +cls +setlocal EnableDelayedExpansion + +for %%* in (.) do set CurrDirName=%%~n* + +if "%CurrDirName%" == "eclipse" ( + echo You are running this script from inside Eclipse ^^! + echo You must execute it via windows in the odb folder ONLY ^^! + echo Terminating for your own data safety. + pause + EXIT +) + +if NOT "%CurrDirName%" == "odb" ( + echo You are not executing this file from the odb folder^^! + echo Terminating for your own data safety. + pause + EXIT +) + +set /a count=0 + +for /d %%d in (*) do ( + set /a count+=1 + @echo !count!. %%d + del "%%d\*.*" /s/q + echo. 2>%%d\placeholder.txt +) +setlocal DisableDelayedExpansion \ No newline at end of file diff --git a/odb/auction/placeholder.txt b/odb/auction/placeholder.txt new file mode 100644 index 00000000..e69de29b diff --git a/odb/bounties/placeholder.txt b/odb/bounties/placeholder.txt new file mode 100644 index 00000000..e69de29b diff --git a/odb/building/placeholder.txt b/odb/building/placeholder.txt new file mode 100644 index 00000000..e69de29b diff --git a/odb/chatRooms/placeholder.txt b/odb/chatRooms/placeholder.txt new file mode 100644 index 00000000..e69de29b diff --git a/odb/doids/placeholder.txt b/odb/doids/placeholder.txt new file mode 100644 index 00000000..e69de29b diff --git a/odb/oids/placeholder.txt b/odb/oids/placeholder.txt new file mode 100644 index 00000000..e69de29b diff --git a/odb/resourcehistory/placeholder.txt b/odb/resourcehistory/placeholder.txt new file mode 100644 index 00000000..e69de29b diff --git a/odb/resourceroots/placeholder.txt b/odb/resourceroots/placeholder.txt new file mode 100644 index 00000000..e69de29b diff --git a/odb/resources/placeholder.txt b/odb/resources/placeholder.txt new file mode 100644 index 00000000..e69de29b diff --git a/odb/swgobjects/placeholder.txt b/odb/swgobjects/placeholder.txt new file mode 100644 index 00000000..e69de29b diff --git a/options.cfg b/options.cfg index 6b6462d7..03abf4cf 100644 --- a/options.cfg +++ b/options.cfg @@ -1 +1,7 @@ LOAD.SNAPSHOT_OBJECTS=1 +LOAD.BUILDOUT_OBJECTS=1 +#LOAD.BUILDOUT_ONLY_FOR="dantooine" +LOAD.RESOURCE.SYSTEM=1 + +# Misc +CLEAN.ODB.FOLDERS=0 \ No newline at end of file diff --git a/scripts/buffs/armor_break.py b/scripts/buffs/armor_break.py new file mode 100644 index 00000000..f0a2f58e --- /dev/null +++ b/scripts/buffs/armor_break.py @@ -0,0 +1,14 @@ +import sys + +def setup(core, actor, buff): + return + +def add(core, actor, buff): + actor.addSkillMod('expertise_innate_reduction_all_player', 6 * buff.getStacks()) + actor.addSkillMod('expertise_innate_reduction_all_mob', 600 * buff.getStacks()) + return + +def remove(core, actor, buff): + actor.deductSkillMod('expertise_innate_reduction_all_mob', 600 * buff.getStacks()) + actor.deductSkillMod('expertise_innate_reduction_all_player', 6 * buff.getStacks()) + return diff --git a/scripts/buffs/bh_armor_sprint_1.py b/scripts/buffs/bh_armor_sprint_1.py new file mode 100644 index 00000000..5f39a64d --- /dev/null +++ b/scripts/buffs/bh_armor_sprint_1.py @@ -0,0 +1,16 @@ +import sys + +def setup(core, actor, buff): + return + +def add(core, actor, buff): + core.skillModService.addSkillMod(actor, 'movement', 6) + core.skillModService.addSkillMod(actor, 'movement_resist_snare', 100) + + return + +def remove(core, actor, buff): + core.skillModService.deductSkillMod(actor, 'movement', 6) + core.skillModService.deductSkillMod(actor, 'movement_resist_snare', 100) + + return diff --git a/scripts/buffs/bh_cover_1.py b/scripts/buffs/bh_cover_1.py new file mode 100644 index 00000000..0b7e2859 --- /dev/null +++ b/scripts/buffs/bh_cover_1.py @@ -0,0 +1,17 @@ +import sys + +def setup(core, actor, buff): + return + +def add(core, actor, buff): + core.skillModService.addSkillMod(actor, 'expertise_damage_all', 10) + core.skillModService.addSkillMod(actor, 'expertise_glancing_blow_ranged', 40) + actor.setRadarVisible(False) + return + +def remove(core, actor, buff): + core.skillModService.deductSkillMod(actor, 'expertise_damage_all', 10) + core.skillModService.deductSkillMod(actor, 'expertise_glancing_blow_ranged', 40) + actor.setRadarVisible(True) + return + \ No newline at end of file diff --git a/scripts/buffs/bh_power_sprint.py b/scripts/buffs/bh_power_sprint.py new file mode 100644 index 00000000..e7550d0d --- /dev/null +++ b/scripts/buffs/bh_power_sprint.py @@ -0,0 +1,16 @@ +import sys + +def setup(core, actor, buff): + return + +def add(core, actor, buff): + core.skillModService.addSkillMod(actor, 'movement', 6) + core.skillModService.addSkillMod(actor, 'movement_resist_snare', 100) + + return + +def remove(core, actor, buff): + core.skillModService.deductSkillMod(actor, 'movement', 6) + core.skillModService.deductSkillMod(actor, 'movement_resist_snare', 100) + + return \ No newline at end of file diff --git a/scripts/buffs/bh_prescience.py b/scripts/buffs/bh_prescience.py index e09c02e5..c60417a0 100644 --- a/scripts/buffs/bh_prescience.py +++ b/scripts/buffs/bh_prescience.py @@ -2,7 +2,10 @@ import sys def setup(core, actor, buff): return + +def add(core, actor, buff): + return -def removeBuff(core, actor, buff): +def remove(core, actor, buff): return \ No newline at end of file diff --git a/scripts/buffs/bh_return_fire_1.py b/scripts/buffs/bh_return_fire_1.py new file mode 100644 index 00000000..95612d87 --- /dev/null +++ b/scripts/buffs/bh_return_fire_1.py @@ -0,0 +1,15 @@ +import sys + +def setup(core, actor, buff): + buff.setDuration(buff.getDuration()+(actor.getSkillModBase('expertise_buff_duration_line_bh_return_fire'))) + return + +def add(core, actor, buff): + core.skillModService.addSkillMod(actor, 'expertise_bh_return_fire_1', 1) + + return + +def remove(core, actor, buff): + core.skillModService.deductSkillMod(actor, 'expertise_bh_return_fire_1', 1) + return + \ No newline at end of file diff --git a/scripts/buffs/bh_shields.py b/scripts/buffs/bh_shields.py new file mode 100644 index 00000000..36115d7f --- /dev/null +++ b/scripts/buffs/bh_shields.py @@ -0,0 +1,12 @@ +import sys + +def setup(core, actor, buff): + return + +def add(core, actor, buff): + core.skillModService.addSkillMod(actor, 'combat_divide_damage_taken', 1) + return + +def remove(core, actor, buff): + core.skillModService.deductSkillMod(actor, 'combat_divide_damage_taken', 1) + return \ No newline at end of file diff --git a/scripts/buffs/bh_shields_charged.py b/scripts/buffs/bh_shields_charged.py new file mode 100644 index 00000000..d66644af --- /dev/null +++ b/scripts/buffs/bh_shields_charged.py @@ -0,0 +1,13 @@ +import sys + +def setup(core, actor, buff): + return + +def add(core, actor, buff): + core.skillModService.addSkillMod(actor, 'combat_multiply_damage_given', 1) + return + +def remove(core, actor, buff): + core.skillModService.deductSkillMod(actor, 'combat_multiply_damage_given', 1) + return + \ No newline at end of file diff --git a/scripts/buffs/bleeding.py b/scripts/buffs/bleeding.py index e09c02e5..c60417a0 100644 --- a/scripts/buffs/bleeding.py +++ b/scripts/buffs/bleeding.py @@ -2,7 +2,10 @@ import sys def setup(core, actor, buff): return + +def add(core, actor, buff): + return -def removeBuff(core, actor, buff): +def remove(core, actor, buff): return \ No newline at end of file diff --git a/scripts/buffs/buildabuff_inspiration.py b/scripts/buffs/buildabuff_inspiration.py new file mode 100644 index 00000000..35a49556 --- /dev/null +++ b/scripts/buffs/buildabuff_inspiration.py @@ -0,0 +1,30 @@ +from resources.common import BuffBuilder +import sys + +def setup(core, actor, buff): + return + +def add(core, actor, buff): + + buffWorkshop = actor.getAttachment('buffWorkshop') + + if buffWorkshop is None: + return + + attached = actor.getAttachment('inspireDuration') + + buff.setDuration(float(actor.getAttachment('inspireDuration') * 60)) + + for BuffItem in buffWorkshop: + core.skillModService.addSkillMod(actor, BuffItem.getSkillName(), BuffItem.getAffectAmount()) + + return + +def remove(core, actor, buff): + if actor.getAttachment('buffWorkshop') is not None: + + for BuffItem in actor.getAttachment('buffWorkshop'): + core.skillModService.deductSkillMod(actor, BuffItem.getSkillName(), BuffItem.getAffectAmount()) + + actor.setAttachment('buffWorkshop', None) + return \ No newline at end of file diff --git a/scripts/buffs/co_base_of_operations.py b/scripts/buffs/co_base_of_operations.py new file mode 100644 index 00000000..8c8eb346 --- /dev/null +++ b/scripts/buffs/co_base_of_operations.py @@ -0,0 +1,15 @@ +import sys + +def setup(core, actor, buff): + return + +def add(core, actor, buff): + core.skillModService.addSkillMod(actor, 'expertise_innate_protection_all', 1000) + core.skillModService.addSkillMod(actor, 'expertise_critical_niche_all', 5) + return + +def remove(core, actor, buff): + core.skillModService.deductSkillMod(actor, 'expertise_innate_protection_all', 1000) + core.skillModService.deductSkillMod(actor, 'expertise_critical_niche_all', 5) + return + \ No newline at end of file diff --git a/scripts/buffs/co_first_aid_training.py b/scripts/buffs/co_first_aid_training.py new file mode 100644 index 00000000..8679678c --- /dev/null +++ b/scripts/buffs/co_first_aid_training.py @@ -0,0 +1,13 @@ +import sys + +def setup(core, actor, buff): + return + +def add(core, actor, buff): + core.skillModService.addSkillMod(actor, 'expertise_healing_all', 20) + return + +def remove(core, actor, buff): + core.skillModService.deductSkillMod(actor, 'expertise_healing_all', 20) + return + \ No newline at end of file diff --git a/scripts/buffs/co_position_secured.py b/scripts/buffs/co_position_secured.py new file mode 100644 index 00000000..0885ccd9 --- /dev/null +++ b/scripts/buffs/co_position_secured.py @@ -0,0 +1,53 @@ +import sys + +def setup(core, actor, buff): + return + +def add(core, actor, buff): + + actor.setSpeedMultiplierMod(0) + + core.skillModService.addSkillMod(actor, 'precision_modified', 200) + core.skillModService.addSkillMod(actor, 'strength_modified', 200) + + if actor.getSkillMod('expertise_action_line_co_imp_pos_sec'): + core.skillModService.addSkillMod(actor, 'expertise_action_all', actor.getSkillMod('expertise_action_line_co_imp_pos_sec').getBase()) + #if actor.getSkillMod('expertise_co_pos_secured_line_burst_fire_proc'): + if actor.getSkillMod('expertise_co_pos_secured_line_burst_fire_devastation_bonus'): + core.skillModService.addSkillMod(actor, 'expertise_devastation_bonus', actor.getSkillMod('expertise_co_pos_secured_line_burst_fire_devastation_bonus').getBase() * 10) + if actor.getSkillMod('expertise_co_pos_secured_line_critical'): + core.skillModService.addSkillMod(actor, 'display_only_critical', actor.getSkillMod('expertise_co_pos_secured_line_critical').getBase() * 100) + if actor.getSkillMod('expertise_co_pos_secured_line_protection'): + core.skillModService.addSkillMod(actor, 'display_only_expertise_critical_hit_reduction', actor.getSkillMod('expertise_co_pos_secured_line_protection').getBase() * 100) + + if actor.hasSkill('expertise_co_base_of_operations_1'): + core.buffService.addBuffToCreature(actor, 'co_base_of_operations') + + return + +def remove(core, actor, buff): + + actor.setSpeedMultiplierMod(1) + + core.skillModService.deductSkillMod(actor, 'precision_modified', 200) + core.skillModService.deductSkillMod(actor, 'strength_modified', 200) + + if actor.getSkillMod('expertise_action_line_co_imp_pos_sec'): + core.skillModService.deductSkillMod(actor, 'expertise_action_all', actor.getSkillMod('expertise_action_line_co_imp_pos_sec').getBase()) + #if actor.getSkillMod('expertise_co_pos_secured_line_burst_fire_proc'): + if actor.getSkillMod('expertise_co_pos_secured_line_burst_fire_devastation_bonus'): + core.skillModService.deductSkillMod(actor, 'expertise_devastation_bonus', actor.getSkillMod('expertise_co_pos_secured_line_burst_fire_devastation_bonus').getBase() * 10) + if actor.getSkillMod('expertise_co_pos_secured_line_critical'): + core.skillModService.deductSkillMod(actor, 'display_only_critical', actor.getSkillMod('expertise_co_pos_secured_line_critical').getBase() * 100) + if actor.getSkillMod('expertise_co_pos_secured_line_protection'): + core.skillModService.deductSkillMod(actor, 'display_only_expertise_critical_hit_reduction', actor.getSkillMod('expertise_co_pos_secured_line_protection').getBase() * 100) + + if actor.hasSkill('expertise_co_base_of_operations_1'): + if actor.getGroupId() != 0 and core.objectService.getObject(actor.getGroupId()): + group = core.objectService.getObject(actor.getGroupId()) + for member in group.getMemberList(): + core.buffService.removeBuffFromCreature(member, member.getBuffByName('co_base_of_operations')) + else: + core.buffService.removeBuffFromCreature(actor, actor.getBuffByName('co_base_of_operations')) + + return \ No newline at end of file diff --git a/scripts/buffs/co_stand_fast.py b/scripts/buffs/co_stand_fast.py new file mode 100644 index 00000000..8f8be535 --- /dev/null +++ b/scripts/buffs/co_stand_fast.py @@ -0,0 +1,21 @@ +import sys + +def setup(core, actor, buff): + if actor.getSkillMod('expertise_buff_duration_line_co_stand_fast'): + buff.setDuration(buff.getDuration() + actor.getSkillMod('expertise_buff_duration_line_co_stand_fast').getBase()) + return + +def add(core, actor, buff): + if actor.getSkillMod('expertise_damage_decrease_percentage'): + core.skillModService.addSkillMod(actor, 'damage_decrease_percentage', (60 + actor.getSkillMod('expertise_damage_decrease_percentage').getBase()) / 2) + else: + core.skillModService.addSkillMod(actor, 'damage_decrease_percentage', 60 / 2) + + return + +def remove(core, actor, buff): + if actor.getSkillMod('expertise_damage_decrease_percentage'): + core.skillModService.deductSkillMod(actor, 'damage_decrease_percentage', (60 + actor.getSkillMod('expertise_damage_decrease_percentage').getBase()) / 2) + else: + core.skillModService.deductSkillMod(actor, 'damage_decrease_percentage', 60 / 2) + return \ No newline at end of file diff --git a/scripts/buffs/en_action_regen.py b/scripts/buffs/en_action_regen.py new file mode 100644 index 00000000..850186d0 --- /dev/null +++ b/scripts/buffs/en_action_regen.py @@ -0,0 +1,13 @@ +import sys + +def setup(core, actor, buff): + return + +def add(core, actor, buff): + core.skillModService.addSkillMod(actor, 'expertise_action_weapon_melee', 60) + + return + +def remove(core, actor, buff): + core.skillModService.deductSkillMod(actor, 'expertise_action_weapon_melee', 60) + return \ No newline at end of file diff --git a/scripts/buffs/en_debuff_thrill.py b/scripts/buffs/en_debuff_thrill.py new file mode 100644 index 00000000..9a25438b --- /dev/null +++ b/scripts/buffs/en_debuff_thrill.py @@ -0,0 +1,13 @@ +import sys + +def setup(core, actor, buff): + return + +def add(core, actor, buff): + core.skillModService.addSkillMod(actor, 'critical_hit_vulnerable', 2) + + return + +def remove(core, actor, buff): + core.skillModService.deductSkillMod(actor, 'critical_hit_vulnerable', 2) + return \ No newline at end of file diff --git a/scripts/buffs/en_debuff_thrill_1.py b/scripts/buffs/en_debuff_thrill_1.py new file mode 100644 index 00000000..cbcb2ac4 --- /dev/null +++ b/scripts/buffs/en_debuff_thrill_1.py @@ -0,0 +1,13 @@ +import sys + +def setup(core, actor, buff): + return + +def add(core, actor, buff): + core.skillModService.addSkillMod(actor, 'critical_hit_vulnerable', 4) + + return + +def remove(core, actor, buff): + core.skillModService.deductSkillMod(actor, 'critical_hit_vulnerable', 4) + return \ No newline at end of file diff --git a/scripts/buffs/en_debuff_thrill_2.py b/scripts/buffs/en_debuff_thrill_2.py new file mode 100644 index 00000000..6b887e82 --- /dev/null +++ b/scripts/buffs/en_debuff_thrill_2.py @@ -0,0 +1,13 @@ +import sys + +def setup(core, actor, buff): + return + +def add(core, actor, buff): + core.skillModService.addSkillMod(actor, 'critical_hit_vulnerable', 6) + + return + +def remove(core, actor, buff): + core.skillModService.deductSkillMod(actor, 'critical_hit_vulnerable', 6) + return \ No newline at end of file diff --git a/scripts/buffs/en_spiral_kick_snare.py b/scripts/buffs/en_spiral_kick_snare.py new file mode 100644 index 00000000..2ee81fe9 --- /dev/null +++ b/scripts/buffs/en_spiral_kick_snare.py @@ -0,0 +1,12 @@ +import sys + +def setup(core, actor, buff): + return + +def add(core, actor, buff): + core.skillModService.deductSkillMod(actor, 'movement', 5) + return + +def remove(core, actor, buff): + core.skillModService.addSkillMod(actor, 'movement', 5) + return \ No newline at end of file diff --git a/scripts/buffs/en_sprint.py b/scripts/buffs/en_sprint.py new file mode 100644 index 00000000..288b25b1 --- /dev/null +++ b/scripts/buffs/en_sprint.py @@ -0,0 +1,15 @@ +import sys + +def setup(core, actor, buff): + return + +def add(core, actor, buff): + core.skillModService.addSkillMod(actor, 'movement_resist_snare', 100) + core.skillModService.addSkillMod(actor, 'movement', 5) + return + +def remove(core, actor, buff): + core.skillModService.deductSkillMod(actor, 'movement', 5) + core.skillModService.deductSkillMod(actor, 'movement_resist_snare', 100) + return + \ No newline at end of file diff --git a/scripts/buffs/en_sweeping_pirouette_root.py b/scripts/buffs/en_sweeping_pirouette_root.py new file mode 100644 index 00000000..42418564 --- /dev/null +++ b/scripts/buffs/en_sweeping_pirouette_root.py @@ -0,0 +1,12 @@ +import sys + +def setup(core, actor, buff): + return + +def add(core, actor, buff): + core.skillModService.deductSkillMod(actor, 'movement', 10) + return + +def remove(core, actor, buff): + core.skillModService.addSkillMod(actor, 'movement', 10) + return \ No newline at end of file diff --git a/scripts/buffs/en_unhealthy_fixation_debuff.py b/scripts/buffs/en_unhealthy_fixation_debuff.py new file mode 100644 index 00000000..7dfe77af --- /dev/null +++ b/scripts/buffs/en_unhealthy_fixation_debuff.py @@ -0,0 +1,12 @@ +import sys + +def setup(core, actor, buff): + return + +def add(core, actor, buff): + core.skillModService.deductSkillMod(actor, 'en_unhealthy_stun', 1) + return + +def remove(core, actor, buff): + core.skillModService.addSkillMod(actor, 'en_unhealthy_stun', 1) + return \ No newline at end of file diff --git a/scripts/buffs/en_void_dance_buff.py b/scripts/buffs/en_void_dance_buff.py new file mode 100644 index 00000000..3197e246 --- /dev/null +++ b/scripts/buffs/en_void_dance_buff.py @@ -0,0 +1,13 @@ +import sys + +def setup(core, actor, buff): + return + +def add(core, actor, buff): + core.skillModService.addSkillMod(actor, 'expertise_glancing_blow_all', 60) + + return + +def remove(core, actor, buff): + core.skillModService.deductSkillMod(actor, 'expertise_glancing_blow_all', 60) + return \ No newline at end of file diff --git a/scripts/buffs/en_void_dance_buff_1.py b/scripts/buffs/en_void_dance_buff_1.py new file mode 100644 index 00000000..6a37025d --- /dev/null +++ b/scripts/buffs/en_void_dance_buff_1.py @@ -0,0 +1,13 @@ +import sys + +def setup(core, actor, buff): + return + +def add(core, actor, buff): + core.skillModService.addSkillMod(actor, 'expertise_glancing_blow_all', 65) + + return + +def remove(core, actor, buff): + core.skillModService.deductSkillMod(actor, 'expertise_glancing_blow_all', 65) + return \ No newline at end of file diff --git a/scripts/buffs/en_void_dance_buff_2.py b/scripts/buffs/en_void_dance_buff_2.py new file mode 100644 index 00000000..bcd31db8 --- /dev/null +++ b/scripts/buffs/en_void_dance_buff_2.py @@ -0,0 +1,13 @@ +import sys + +def setup(core, actor, buff): + return + +def add(core, actor, buff): + core.skillModService.addSkillMod(actor, 'expertise_glancing_blow_all', 70) + + return + +def remove(core, actor, buff): + core.skillModService.deductSkillMod(actor, 'expertise_glancing_blow_all', 70) + return \ No newline at end of file diff --git a/scripts/buffs/en_void_dance_buff_3.py b/scripts/buffs/en_void_dance_buff_3.py new file mode 100644 index 00000000..e2d98d20 --- /dev/null +++ b/scripts/buffs/en_void_dance_buff_3.py @@ -0,0 +1,13 @@ +import sys + +def setup(core, actor, buff): + return + +def add(core, actor, buff): + core.skillModService.addSkillMod(actor, 'expertise_glancing_blow_all', 75) + + return + +def remove(core, actor, buff): + core.skillModService.deductSkillMod(actor, 'expertise_glancing_blow_all', 75) + return \ No newline at end of file diff --git a/scripts/buffs/flawless_bead_1.py b/scripts/buffs/flawless_bead_1.py index 84123a88..9d402987 100644 --- a/scripts/buffs/flawless_bead_1.py +++ b/scripts/buffs/flawless_bead_1.py @@ -2,6 +2,9 @@ import sys def setup(core, actor, buff): return + +def add(core, actor, buff): + return -def removeBuff(core, actor, buff): +def remove(core, actor, buff): return \ No newline at end of file diff --git a/scripts/buffs/flawless_bead_2.py b/scripts/buffs/flawless_bead_2.py index 84123a88..9d402987 100644 --- a/scripts/buffs/flawless_bead_2.py +++ b/scripts/buffs/flawless_bead_2.py @@ -2,6 +2,9 @@ import sys def setup(core, actor, buff): return + +def add(core, actor, buff): + return -def removeBuff(core, actor, buff): +def remove(core, actor, buff): return \ No newline at end of file diff --git a/scripts/buffs/flawless_bead_3.py b/scripts/buffs/flawless_bead_3.py index 84123a88..9d402987 100644 --- a/scripts/buffs/flawless_bead_3.py +++ b/scripts/buffs/flawless_bead_3.py @@ -2,6 +2,9 @@ import sys def setup(core, actor, buff): return + +def add(core, actor, buff): + return -def removeBuff(core, actor, buff): +def remove(core, actor, buff): return \ No newline at end of file diff --git a/scripts/buffs/fs_ae_dm_cc_0.py b/scripts/buffs/fs_ae_dm_cc_0.py index 493481d7..2ee81fe9 100644 --- a/scripts/buffs/fs_ae_dm_cc_0.py +++ b/scripts/buffs/fs_ae_dm_cc_0.py @@ -1,10 +1,12 @@ import sys def setup(core, actor, buff): - actor.setSpeedMultiplierBase(0.5) + return + +def add(core, actor, buff): + core.skillModService.deductSkillMod(actor, 'movement', 5) return -def removeBuff(core, actor, buff): - actor.setSpeedMultiplierBase(1) - return - \ No newline at end of file +def remove(core, actor, buff): + core.skillModService.addSkillMod(actor, 'movement', 5) + return \ No newline at end of file diff --git a/scripts/buffs/fs_ae_dm_cc_1.py b/scripts/buffs/fs_ae_dm_cc_1.py index 493481d7..2ee81fe9 100644 --- a/scripts/buffs/fs_ae_dm_cc_1.py +++ b/scripts/buffs/fs_ae_dm_cc_1.py @@ -1,10 +1,12 @@ import sys def setup(core, actor, buff): - actor.setSpeedMultiplierBase(0.5) + return + +def add(core, actor, buff): + core.skillModService.deductSkillMod(actor, 'movement', 5) return -def removeBuff(core, actor, buff): - actor.setSpeedMultiplierBase(1) - return - \ No newline at end of file +def remove(core, actor, buff): + core.skillModService.addSkillMod(actor, 'movement', 5) + return \ No newline at end of file diff --git a/scripts/buffs/fs_ae_dm_cc_2.py b/scripts/buffs/fs_ae_dm_cc_2.py index 493481d7..2ee81fe9 100644 --- a/scripts/buffs/fs_ae_dm_cc_2.py +++ b/scripts/buffs/fs_ae_dm_cc_2.py @@ -1,10 +1,12 @@ import sys def setup(core, actor, buff): - actor.setSpeedMultiplierBase(0.5) + return + +def add(core, actor, buff): + core.skillModService.deductSkillMod(actor, 'movement', 5) return -def removeBuff(core, actor, buff): - actor.setSpeedMultiplierBase(1) - return - \ No newline at end of file +def remove(core, actor, buff): + core.skillModService.addSkillMod(actor, 'movement', 5) + return \ No newline at end of file diff --git a/scripts/buffs/fs_ae_dm_cc_3.py b/scripts/buffs/fs_ae_dm_cc_3.py index 493481d7..2ee81fe9 100644 --- a/scripts/buffs/fs_ae_dm_cc_3.py +++ b/scripts/buffs/fs_ae_dm_cc_3.py @@ -1,10 +1,12 @@ import sys def setup(core, actor, buff): - actor.setSpeedMultiplierBase(0.5) + return + +def add(core, actor, buff): + core.skillModService.deductSkillMod(actor, 'movement', 5) return -def removeBuff(core, actor, buff): - actor.setSpeedMultiplierBase(1) - return - \ No newline at end of file +def remove(core, actor, buff): + core.skillModService.addSkillMod(actor, 'movement', 5) + return \ No newline at end of file diff --git a/scripts/buffs/fs_ae_dm_cc_4.py b/scripts/buffs/fs_ae_dm_cc_4.py index 493481d7..2ee81fe9 100644 --- a/scripts/buffs/fs_ae_dm_cc_4.py +++ b/scripts/buffs/fs_ae_dm_cc_4.py @@ -1,10 +1,12 @@ import sys def setup(core, actor, buff): - actor.setSpeedMultiplierBase(0.5) + return + +def add(core, actor, buff): + core.skillModService.deductSkillMod(actor, 'movement', 5) return -def removeBuff(core, actor, buff): - actor.setSpeedMultiplierBase(1) - return - \ No newline at end of file +def remove(core, actor, buff): + core.skillModService.addSkillMod(actor, 'movement', 5) + return \ No newline at end of file diff --git a/scripts/buffs/fs_ae_dm_cc_5.py b/scripts/buffs/fs_ae_dm_cc_5.py index 493481d7..2ee81fe9 100644 --- a/scripts/buffs/fs_ae_dm_cc_5.py +++ b/scripts/buffs/fs_ae_dm_cc_5.py @@ -1,10 +1,12 @@ import sys def setup(core, actor, buff): - actor.setSpeedMultiplierBase(0.5) + return + +def add(core, actor, buff): + core.skillModService.deductSkillMod(actor, 'movement', 5) return -def removeBuff(core, actor, buff): - actor.setSpeedMultiplierBase(1) - return - \ No newline at end of file +def remove(core, actor, buff): + core.skillModService.addSkillMod(actor, 'movement', 5) + return \ No newline at end of file diff --git a/scripts/buffs/fs_ae_dm_cc_6.py b/scripts/buffs/fs_ae_dm_cc_6.py index 493481d7..2ee81fe9 100644 --- a/scripts/buffs/fs_ae_dm_cc_6.py +++ b/scripts/buffs/fs_ae_dm_cc_6.py @@ -1,10 +1,12 @@ import sys def setup(core, actor, buff): - actor.setSpeedMultiplierBase(0.5) + return + +def add(core, actor, buff): + core.skillModService.deductSkillMod(actor, 'movement', 5) return -def removeBuff(core, actor, buff): - actor.setSpeedMultiplierBase(1) - return - \ No newline at end of file +def remove(core, actor, buff): + core.skillModService.addSkillMod(actor, 'movement', 5) + return \ No newline at end of file diff --git a/scripts/buffs/fs_buff_ca_1.py b/scripts/buffs/fs_buff_ca_1.py index 5fb1239f..837e11f7 100644 --- a/scripts/buffs/fs_buff_ca_1.py +++ b/scripts/buffs/fs_buff_ca_1.py @@ -1,12 +1,15 @@ import sys def setup(core, actor, buff): + return + +def add(core, actor, buff): actor.playEffectObject('appearance/pt_sokan_focus.prt', 'fs_buff_ca_1') core.skillModService.addSkillMod(actor, 'expertise_focus', 1) return -def removeBuff(core, actor, buff): +def remove(core, actor, buff): core.skillModService.deductSkillMod(actor, 'expertise_focus', 1) return \ No newline at end of file diff --git a/scripts/buffs/fs_buff_def_1_1.py b/scripts/buffs/fs_buff_def_1_1.py index 0d7ad4dd..743dc69b 100644 --- a/scripts/buffs/fs_buff_def_1_1.py +++ b/scripts/buffs/fs_buff_def_1_1.py @@ -1,12 +1,15 @@ import sys def setup(core, actor, buff): + return + +def add(core, actor, buff): actor.playEffectObject('appearance/pt_force_avoid_incapacitation.prt', 'fs_buff_def_1_1') core.skillModService.addSkillMod(actor, 'expertise_stance', 1) return -def removeBuff(core, actor, buff): +def remove(core, actor, buff): core.skillModService.deductSkillMod(actor, 'expertise_stance', 1) return \ No newline at end of file diff --git a/scripts/buffs/fs_dm_cc_crit_1.py b/scripts/buffs/fs_dm_cc_crit_1.py index 493481d7..df2109d8 100644 --- a/scripts/buffs/fs_dm_cc_crit_1.py +++ b/scripts/buffs/fs_dm_cc_crit_1.py @@ -1,10 +1,13 @@ import sys def setup(core, actor, buff): + return + +def add(core, actor, buff): actor.setSpeedMultiplierBase(0.5) return -def removeBuff(core, actor, buff): +def remove(core, actor, buff): actor.setSpeedMultiplierBase(1) return \ No newline at end of file diff --git a/scripts/buffs/fs_dm_cc_crit_2.py b/scripts/buffs/fs_dm_cc_crit_2.py index 493481d7..df2109d8 100644 --- a/scripts/buffs/fs_dm_cc_crit_2.py +++ b/scripts/buffs/fs_dm_cc_crit_2.py @@ -1,10 +1,13 @@ import sys def setup(core, actor, buff): + return + +def add(core, actor, buff): actor.setSpeedMultiplierBase(0.5) return -def removeBuff(core, actor, buff): +def remove(core, actor, buff): actor.setSpeedMultiplierBase(1) return \ No newline at end of file diff --git a/scripts/buffs/fs_dm_cc_crit_3.py b/scripts/buffs/fs_dm_cc_crit_3.py index 493481d7..df2109d8 100644 --- a/scripts/buffs/fs_dm_cc_crit_3.py +++ b/scripts/buffs/fs_dm_cc_crit_3.py @@ -1,10 +1,13 @@ import sys def setup(core, actor, buff): + return + +def add(core, actor, buff): actor.setSpeedMultiplierBase(0.5) return -def removeBuff(core, actor, buff): +def remove(core, actor, buff): actor.setSpeedMultiplierBase(1) return \ No newline at end of file diff --git a/scripts/buffs/fs_dm_cc_crit_4.py b/scripts/buffs/fs_dm_cc_crit_4.py index 493481d7..df2109d8 100644 --- a/scripts/buffs/fs_dm_cc_crit_4.py +++ b/scripts/buffs/fs_dm_cc_crit_4.py @@ -1,10 +1,13 @@ import sys def setup(core, actor, buff): + return + +def add(core, actor, buff): actor.setSpeedMultiplierBase(0.5) return -def removeBuff(core, actor, buff): +def remove(core, actor, buff): actor.setSpeedMultiplierBase(1) return \ No newline at end of file diff --git a/scripts/buffs/fs_dm_cc_crit_5.py b/scripts/buffs/fs_dm_cc_crit_5.py index 493481d7..df2109d8 100644 --- a/scripts/buffs/fs_dm_cc_crit_5.py +++ b/scripts/buffs/fs_dm_cc_crit_5.py @@ -1,10 +1,13 @@ import sys def setup(core, actor, buff): + return + +def add(core, actor, buff): actor.setSpeedMultiplierBase(0.5) return -def removeBuff(core, actor, buff): +def remove(core, actor, buff): actor.setSpeedMultiplierBase(1) return \ No newline at end of file diff --git a/scripts/buffs/fs_force_run.py b/scripts/buffs/fs_force_run.py index f691d76f..52fa68f4 100644 --- a/scripts/buffs/fs_force_run.py +++ b/scripts/buffs/fs_force_run.py @@ -1,9 +1,11 @@ import sys -def setup(core, actor, buff): +def setup(core, actor, buff): buff.setDuration(buff.getDuration()+(actor.getSkillModBase('expertise_buff_duration_line_fs_force_run'))) - actor.playEffectObject('clienteffect/pl_force_run.cef', 'fs_force_run') - actor.playEffectObject('appearance/pt_force_speed.prt', 'fs_force_run') + return + +def add(core, actor, buff): + actor.playEffectObject('clienteffect/pl_force_run.cef', '') actor.setSpeedMultiplierBase(actor.getSpeedMultiplierBase() + 2.5 + (2.5 * (actor.getSkillModBase('expertise_movement_buff_fs_force_run')) / 100)) core.skillModService.addSkillMod(actor, 'slope_move', 5) core.skillModService.addSkillMod(actor, 'movement_resist_snare', 100) @@ -14,7 +16,7 @@ def setup(core, actor, buff): return -def removeBuff(core, actor, buff): +def remove(core, actor, buff): actor.stopEffectObject('fs_force_run') actor.setSpeedMultiplierBase(actor.getSpeedMultiplierBase() - 2.5 - (2.5 * (actor.getSkillModBase('expertise_movement_buff_fs_force_run')) / 100)) core.skillModService.deductSkillMod(actor, 'slope_move', 5) diff --git a/scripts/buffs/fs_force_throw.py b/scripts/buffs/fs_force_throw.py index f20ef882..2ee81fe9 100644 --- a/scripts/buffs/fs_force_throw.py +++ b/scripts/buffs/fs_force_throw.py @@ -1,11 +1,12 @@ import sys def setup(core, actor, buff): - core.skillModService.addSkillMod(actor, 'movement', float(-0.5)) - + return + +def add(core, actor, buff): + core.skillModService.deductSkillMod(actor, 'movement', 5) return -def removeBuff(core, actor, buff): - core.skillModService.deductSkillMod(actor, 'movement', float(-0.5)) - return - \ No newline at end of file +def remove(core, actor, buff): + core.skillModService.addSkillMod(actor, 'movement', 5) + return \ No newline at end of file diff --git a/scripts/buffs/fs_saber_reflect.py b/scripts/buffs/fs_saber_reflect.py index cba5694e..815b8b7d 100644 --- a/scripts/buffs/fs_saber_reflect.py +++ b/scripts/buffs/fs_saber_reflect.py @@ -1,11 +1,14 @@ import sys def setup(core, actor, buff): + return + +def add(core, actor, buff): core.skillModService.addSkillMod(actor, 'expertise_saber_block', 1) return -def removeBuff(core, actor, buff): +def remove(core, actor, buff): core.skillModService.deductSkillMod(actor, 'expertise_saber_block', 1) return \ No newline at end of file diff --git a/scripts/buffs/invis_fs_buff_invis_1.py b/scripts/buffs/invis_fs_buff_invis_1.py index e09c02e5..84ef0058 100644 --- a/scripts/buffs/invis_fs_buff_invis_1.py +++ b/scripts/buffs/invis_fs_buff_invis_1.py @@ -2,7 +2,14 @@ import sys def setup(core, actor, buff): return - -def removeBuff(core, actor, buff): + +def add(core, actor, buff): + actor.setInStealth(True) + actor.setRadarVisible(False) return - \ No newline at end of file + +def remove(core, actor, buff): + actor.setInStealth(False) + actor.setRadarVisible(True) + return + diff --git a/scripts/buffs/invis_sp_buff_invis_1.py b/scripts/buffs/invis_sp_buff_invis_1.py new file mode 100644 index 00000000..9192dba7 --- /dev/null +++ b/scripts/buffs/invis_sp_buff_invis_1.py @@ -0,0 +1,26 @@ +import sys + +def setup(core, actor, buff): + return + +def add(core, actor, buff): + actor.playEffectObject('clienteffect/npe_smoke_bomb.cef', '') + actor.setInStealth(True) + actor.setRadarVisible(False) + + core.combatService.endCombat(actor) + + if actor.getSkillMod('expertise_sp_without_a_trace_1'): + core.buffService.addBuffToCreature(actor, 'invis_sp_buff_invis_notrace_1') + + return + +def remove(core, actor, buff): + actor.setInStealth(False) + actor.setRadarVisible(True) + + if actor.getSkillMod('expertise_sp_without_a_trace_1'): + core.buffService.removeBuffFromCreature(actor, 'invis_sp_buff_invis_notrace_1') + + return + diff --git a/scripts/buffs/invis_sp_buff_invis_notrace_1.py b/scripts/buffs/invis_sp_buff_invis_notrace_1.py new file mode 100644 index 00000000..11b5dbd0 --- /dev/null +++ b/scripts/buffs/invis_sp_buff_invis_notrace_1.py @@ -0,0 +1,22 @@ +import sys + +def setup(core, actor, buff): + return + +def add(core, actor, buff): + actor.setInStealth(True) + actor.setRadarVisible(False) + + if actor.getSkillMod('expertise_sp_covert_mastery_1'): + core.skillModService.addSkillMod(actor, 'sp_covert_mastery') + + return + +def remove(core, actor, buff): + actor.setInStealth(False) + actor.setRadarVisible(True) + + if actor.getSkillMod('expertise_sp_covert_mastery_1'): + core.skillModService.deductSkillMod(actor, 'sp_covert_mastery') + + return diff --git a/scripts/buffs/invis_sp_buff_stealth_1.py b/scripts/buffs/invis_sp_buff_stealth_1.py new file mode 100644 index 00000000..1b30ee83 --- /dev/null +++ b/scripts/buffs/invis_sp_buff_stealth_1.py @@ -0,0 +1,14 @@ +import sys + +def setup(core, actor, buff): + return + +def add(core, actor, buff): + actor.setInStealth(True) + actor.setRadarVisible(False) + return + +def remove(core, actor, buff): + actor.setInStealth(False) + actor.setRadarVisible(True) + return diff --git a/scripts/buffs/me_buff_action_1.py b/scripts/buffs/me_buff_action_1.py index 32ae828b..7cd3cf3c 100644 --- a/scripts/buffs/me_buff_action_1.py +++ b/scripts/buffs/me_buff_action_1.py @@ -1,10 +1,15 @@ import sys def setup(core, actor, buff): + if actor.getSkillMod('expertise_buff_duration_line_me_enhance'): + buff.setDuration(buff.getDuration()+(actor.getSkillModBase('expertise_buff_duration_line_me_enhance'))) + return + +def add(core, actor, buff): core.skillModService.addSkillMod(actor, 'stamina_modified', 35) return -def removeBuff(core, actor, buff): +def remove(core, actor, buff): core.skillModService.deductSkillMod(actor, 'stamina_modified', 35) return \ No newline at end of file diff --git a/scripts/buffs/me_buff_action_2.py b/scripts/buffs/me_buff_action_2.py index e49831fc..0d1a1718 100644 --- a/scripts/buffs/me_buff_action_2.py +++ b/scripts/buffs/me_buff_action_2.py @@ -1,10 +1,15 @@ import sys def setup(core, actor, buff): + if actor.getSkillMod('expertise_buff_duration_line_me_enhance'): + buff.setDuration(buff.getDuration()+(actor.getSkillModBase('expertise_buff_duration_line_me_enhance'))) + return + +def add(core, actor, buff): core.skillModService.addSkillMod(actor, 'stamina_modified', 80) return -def removeBuff(core, actor, buff): +def remove(core, actor, buff): core.skillModService.deductSkillMod(actor, 'stamina_modified', 80) return \ No newline at end of file diff --git a/scripts/buffs/me_buff_action_3.py b/scripts/buffs/me_buff_action_3.py index ce6d1523..625808f2 100644 --- a/scripts/buffs/me_buff_action_3.py +++ b/scripts/buffs/me_buff_action_3.py @@ -1,10 +1,15 @@ import sys def setup(core, actor, buff): + if actor.getSkillMod('expertise_buff_duration_line_me_enhance'): + buff.setDuration(buff.getDuration()+(actor.getSkillModBase('expertise_buff_duration_line_me_enhance'))) + return + +def add(core, actor, buff): core.skillModService.addSkillMod(actor, 'stamina_modified', 250) return -def removeBuff(core, actor, buff): +def remove(core, actor, buff): core.skillModService.deductSkillMod(actor, 'stamina_modified', 250) return \ No newline at end of file diff --git a/scripts/buffs/me_buff_agility_1.py b/scripts/buffs/me_buff_agility_1.py index f050bc50..cc0368a7 100644 --- a/scripts/buffs/me_buff_agility_1.py +++ b/scripts/buffs/me_buff_agility_1.py @@ -1,10 +1,15 @@ import sys def setup(core, actor, buff): + if actor.getSkillMod('expertise_buff_duration_line_me_enhance'): + buff.setDuration(buff.getDuration()+(actor.getSkillModBase('expertise_buff_duration_line_me_enhance'))) + return + +def add(core, actor, buff): core.skillModService.addSkillMod(actor, 'agility_modified', 15) return -def removeBuff(core, actor, buff): +def remove(core, actor, buff): core.skillModService.deductSkillMod(actor, 'agility_modified', 15) return \ No newline at end of file diff --git a/scripts/buffs/me_buff_agility_2.py b/scripts/buffs/me_buff_agility_2.py index 780c1277..47ae13c6 100644 --- a/scripts/buffs/me_buff_agility_2.py +++ b/scripts/buffs/me_buff_agility_2.py @@ -1,10 +1,15 @@ import sys def setup(core, actor, buff): + if actor.getSkillMod('expertise_buff_duration_line_me_enhance'): + buff.setDuration(buff.getDuration()+(actor.getSkillModBase('expertise_buff_duration_line_me_enhance'))) + return + +def add(core, actor, buff): core.skillModService.addSkillMod(actor, 'agility_modified', 45) return -def removeBuff(core, actor, buff): +def remove(core, actor, buff): core.skillModService.deductSkillMod(actor, 'agility_modified', 45) return \ No newline at end of file diff --git a/scripts/buffs/me_buff_agility_3.py b/scripts/buffs/me_buff_agility_3.py index d33b9f7a..83686069 100644 --- a/scripts/buffs/me_buff_agility_3.py +++ b/scripts/buffs/me_buff_agility_3.py @@ -1,10 +1,15 @@ import sys def setup(core, actor, buff): + if actor.getSkillMod('expertise_buff_duration_line_me_enhance'): + buff.setDuration(buff.getDuration()+(actor.getSkillModBase('expertise_buff_duration_line_me_enhance'))) + return + +def add(core, actor, buff): core.skillModService.addSkillMod(actor, 'agility_modified', 80) return -def removeBuff(core, actor, buff): +def remove(core, actor, buff): core.skillModService.deductSkillMod(actor, 'agility_modified', 80) return \ No newline at end of file diff --git a/scripts/buffs/me_buff_health.py b/scripts/buffs/me_buff_health.py index 7a5a8676..f5396585 100644 --- a/scripts/buffs/me_buff_health.py +++ b/scripts/buffs/me_buff_health.py @@ -1,10 +1,15 @@ import sys def setup(core, actor, buff): + if actor.getSkillMod('expertise_buff_duration_line_me_enhance'): + buff.setDuration(buff.getDuration()+(actor.getSkillModBase('expertise_buff_duration_line_me_enhance'))) + return + +def add(core, actor, buff): core.skillModService.addSkillMod(actor, 'constitution_modified', 80) return -def removeBuff(core, actor, buff): +def remove(core, actor, buff): core.skillModService.deductSkillMod(actor, 'constitution_modified', 80) return \ No newline at end of file diff --git a/scripts/buffs/me_buff_health_0.py b/scripts/buffs/me_buff_health_0.py index 7a850d74..513dabb4 100644 --- a/scripts/buffs/me_buff_health_0.py +++ b/scripts/buffs/me_buff_health_0.py @@ -1,10 +1,15 @@ import sys def setup(core, actor, buff): + if actor.getSkillMod('expertise_buff_duration_line_me_enhance'): + buff.setDuration(buff.getDuration()+(actor.getSkillModBase('expertise_buff_duration_line_me_enhance'))) + return + +def add(core, actor, buff): core.skillModService.addSkillMod(actor, 'constitution_modified', 35) return -def removeBuff(core, actor, buff): +def remove(core, actor, buff): core.skillModService.deductSkillMod(actor, 'constitution_modified', 35) return \ No newline at end of file diff --git a/scripts/buffs/me_buff_health_2.py b/scripts/buffs/me_buff_health_2.py index a6e1381b..4c0a9502 100644 --- a/scripts/buffs/me_buff_health_2.py +++ b/scripts/buffs/me_buff_health_2.py @@ -1,10 +1,15 @@ import sys def setup(core, actor, buff): + if actor.getSkillMod('expertise_buff_duration_line_me_enhance'): + buff.setDuration(buff.getDuration()+(actor.getSkillModBase('expertise_buff_duration_line_me_enhance'))) + return + +def add(core, actor, buff): core.skillModService.addSkillMod(actor, 'constitution_modified', 250) return -def removeBuff(core, actor, buff): +def remove(core, actor, buff): core.skillModService.deductSkillMod(actor, 'constitution_modified', 250) return \ No newline at end of file diff --git a/scripts/buffs/me_buff_melee_gb_1.py b/scripts/buffs/me_buff_melee_gb_1.py index 69c881a6..9819dcb3 100644 --- a/scripts/buffs/me_buff_melee_gb_1.py +++ b/scripts/buffs/me_buff_melee_gb_1.py @@ -1,11 +1,16 @@ import sys def setup(core, actor, buff): + if actor.getSkillMod('expertise_buff_duration_line_me_enhance'): + buff.setDuration(buff.getDuration()+(actor.getSkillModBase('expertise_buff_duration_line_me_enhance'))) + return + +def add(core, actor, buff): core.skillModService.addSkillMod(actor, 'display_only_block', 1000) core.skillModService.addSkillMod(actor, 'combat_block_value', 200) return -def removeBuff(core, actor, buff): +def remove(core, actor, buff): core.skillModService.deductSkillMod(actor, 'display_only_block', 1000) core.skillModService.deductSkillMod(actor, 'combat_block_value', 200) return diff --git a/scripts/buffs/me_buff_precision_1.py b/scripts/buffs/me_buff_precision_1.py index 6e0b34c6..6b24b151 100644 --- a/scripts/buffs/me_buff_precision_1.py +++ b/scripts/buffs/me_buff_precision_1.py @@ -1,10 +1,15 @@ import sys def setup(core, actor, buff): + if actor.getSkillMod('expertise_buff_duration_line_me_enhance'): + buff.setDuration(buff.getDuration()+(actor.getSkillModBase('expertise_buff_duration_line_me_enhance'))) + return + +def add(core, actor, buff): core.skillModService.addSkillMod(actor, 'precision_modified', 15) return -def removeBuff(core, actor, buff): +def remove(core, actor, buff): core.skillModService.deductSkillMod(actor, 'precision_modified', 15) return \ No newline at end of file diff --git a/scripts/buffs/me_buff_precision_2.py b/scripts/buffs/me_buff_precision_2.py index 38bb1839..b3c2aab5 100644 --- a/scripts/buffs/me_buff_precision_2.py +++ b/scripts/buffs/me_buff_precision_2.py @@ -1,10 +1,15 @@ import sys def setup(core, actor, buff): + if actor.getSkillMod('expertise_buff_duration_line_me_enhance'): + buff.setDuration(buff.getDuration()+(actor.getSkillModBase('expertise_buff_duration_line_me_enhance'))) + return + +def add(core, actor, buff): core.skillModService.addSkillMod(actor, 'precision_modified', 45) return -def removeBuff(core, actor, buff): +def remove(core, actor, buff): core.skillModService.deductSkillMod(actor, 'precision_modified', 45) return \ No newline at end of file diff --git a/scripts/buffs/me_buff_precision_3.py b/scripts/buffs/me_buff_precision_3.py index 19d4b742..40899ffb 100644 --- a/scripts/buffs/me_buff_precision_3.py +++ b/scripts/buffs/me_buff_precision_3.py @@ -1,10 +1,15 @@ import sys def setup(core, actor, buff): + if actor.getSkillMod('expertise_buff_duration_line_me_enhance'): + buff.setDuration(buff.getDuration()+(actor.getSkillModBase('expertise_buff_duration_line_me_enhance'))) + return + +def add(core, actor, buff): core.skillModService.addSkillMod(actor, 'precision_modified', 80) return -def removeBuff(core, actor, buff): +def remove(core, actor, buff): core.skillModService.deductSkillMod(actor, 'precision_modified', 80) return \ No newline at end of file diff --git a/scripts/buffs/me_buff_ranged_gb_1.py b/scripts/buffs/me_buff_ranged_gb_1.py index 2bde9ec4..ce5770a8 100644 --- a/scripts/buffs/me_buff_ranged_gb_1.py +++ b/scripts/buffs/me_buff_ranged_gb_1.py @@ -1,10 +1,15 @@ import sys def setup(core, actor, buff): + if actor.getSkillMod('expertise_buff_duration_line_me_enhance'): + buff.setDuration(buff.getDuration()+(actor.getSkillModBase('expertise_buff_duration_line_me_enhance'))) + return + +def add(core, actor, buff): core.skillModService.addSkillMod(actor, 'display_only_dodge', 500) return -def removeBuff(core, actor, buff): +def remove(core, actor, buff): core.skillModService.deductSkillMod(actor, 'display_only_dodge', 500) return \ No newline at end of file diff --git a/scripts/buffs/me_buff_strength_1.py b/scripts/buffs/me_buff_strength_1.py index df521dbc..fa50d073 100644 --- a/scripts/buffs/me_buff_strength_1.py +++ b/scripts/buffs/me_buff_strength_1.py @@ -1,10 +1,15 @@ import sys def setup(core, actor, buff): + if actor.getSkillMod('expertise_buff_duration_line_me_enhance'): + buff.setDuration(buff.getDuration()+(actor.getSkillModBase('expertise_buff_duration_line_me_enhance'))) + return + +def add(core, actor, buff): core.skillModService.addSkillMod(actor, 'strength_modified', 15) return -def removeBuff(core, actor, buff): +def remove(core, actor, buff): core.skillModService.deductSkillMod(actor, 'strength_modified', 15) return \ No newline at end of file diff --git a/scripts/buffs/me_buff_strength_2.py b/scripts/buffs/me_buff_strength_2.py index 26b3b2cd..5f8f02d2 100644 --- a/scripts/buffs/me_buff_strength_2.py +++ b/scripts/buffs/me_buff_strength_2.py @@ -1,10 +1,15 @@ import sys def setup(core, actor, buff): + if actor.getSkillMod('expertise_buff_duration_line_me_enhance'): + buff.setDuration(buff.getDuration()+(actor.getSkillModBase('expertise_buff_duration_line_me_enhance'))) + return + +def add(core, actor, buff): core.skillModService.addSkillMod(actor, 'strength_modified', 45) return -def removeBuff(core, actor, buff): +def remove(core, actor, buff): core.skillModService.deductSkillMod(actor, 'strength_modified', 45) return \ No newline at end of file diff --git a/scripts/buffs/me_buff_strength_3.py b/scripts/buffs/me_buff_strength_3.py index 7eb580c9..fcba94f9 100644 --- a/scripts/buffs/me_buff_strength_3.py +++ b/scripts/buffs/me_buff_strength_3.py @@ -1,10 +1,15 @@ import sys def setup(core, actor, buff): + if actor.getSkillMod('expertise_buff_duration_line_me_enhance'): + buff.setDuration(buff.getDuration()+(actor.getSkillModBase('expertise_buff_duration_line_me_enhance'))) + return + +def add(core, actor, buff): core.skillModService.addSkillMod(actor, 'strength_modified', 80) return -def removeBuff(core, actor, buff): +def remove(core, actor, buff): core.skillModService.deductSkillMod(actor, 'strength_modified', 80) return \ No newline at end of file diff --git a/scripts/buffs/me_burst_1.py b/scripts/buffs/me_burst_1.py new file mode 100644 index 00000000..82f6065b --- /dev/null +++ b/scripts/buffs/me_burst_1.py @@ -0,0 +1,16 @@ +import sys + +def setup(core, actor, buff): + return + +def add(core, actor, buff): + core.skillModService.deductSkillMod(actor, 'expertise_critical_niche_all', 3) + core.skillModService.addSkillMod(actor, 'strikethrough_vulnerable', 5) + core.skillModService.addSkillMod(actor, 'critical_hit_vulnerable', 5) + return + +def remove(core, actor, buff): + core.skillModService.addSkillMod(actor, 'expertise_critical_niche_all', 3) + core.skillModService.deductSkillMod(actor, 'strikethrough_vulnerable', 5) + core.skillModService.deductSkillMod(actor, 'critical_hit_vulnerable', 5) + return \ No newline at end of file diff --git a/scripts/buffs/me_cranial_smash_1.py b/scripts/buffs/me_cranial_smash_1.py new file mode 100644 index 00000000..3daa6068 --- /dev/null +++ b/scripts/buffs/me_cranial_smash_1.py @@ -0,0 +1,15 @@ +import sys + +def setup(core, actor, buff): + return + +def add(core, actor, buff): + core.skillModService.addSkillMod(actor, 'combat_divide_damage_dealt', 10) + core.skillModService.deductSkillMod(actor, 'movement', 5) + return + +def remove(core, actor, buff): + core.skillModService.addSkillMod(actor, 'movement', 5) + core.skillModService.deductSkillMod(actor, 'combat_divide_damage_dealt', 10) + return + \ No newline at end of file diff --git a/scripts/buffs/me_cure_affliction_1.py b/scripts/buffs/me_cure_affliction_1.py new file mode 100644 index 00000000..b071a958 --- /dev/null +++ b/scripts/buffs/me_cure_affliction_1.py @@ -0,0 +1,15 @@ +import sys + +def setup(core, actor, buff): + return + +def add(core, actor, buff): + core.skillModService.addSkillMod(actor, 'dot_reduction_all', 5) + core.skillModService.addSkillMod(actor, 'dot_resist_all', 100) + return + +def remove(core, actor, buff): + core.skillModService.deductSkillMod(actor, 'dot_reduction_all', 5) + core.skillModService.deductSkillMod(actor, 'dot_resist_all', 100) + return + \ No newline at end of file diff --git a/scripts/buffs/me_doom.py b/scripts/buffs/me_doom.py new file mode 100644 index 00000000..fe90deb5 --- /dev/null +++ b/scripts/buffs/me_doom.py @@ -0,0 +1,12 @@ +import sys + +def setup(core, actor, buff): + return + +def add(core, actor, buff): + core.skillModService.addSkillMod(actor, 'me_doom', 1) + return + +def remove(core, actor, buff): + core.skillModService.deductSkillMod(actor, 'me_doom', 1) + return \ No newline at end of file diff --git a/scripts/buffs/me_electrolyte_drain_1.py b/scripts/buffs/me_electrolyte_drain_1.py new file mode 100644 index 00000000..2ee81fe9 --- /dev/null +++ b/scripts/buffs/me_electrolyte_drain_1.py @@ -0,0 +1,12 @@ +import sys + +def setup(core, actor, buff): + return + +def add(core, actor, buff): + core.skillModService.deductSkillMod(actor, 'movement', 5) + return + +def remove(core, actor, buff): + core.skillModService.addSkillMod(actor, 'movement', 5) + return \ No newline at end of file diff --git a/scripts/buffs/me_evasion_1.py b/scripts/buffs/me_evasion_1.py new file mode 100644 index 00000000..723b5ad5 --- /dev/null +++ b/scripts/buffs/me_evasion_1.py @@ -0,0 +1,19 @@ +import sys + +def setup(core, actor, buff): + return + +def add(core, actor, buff): + core.skillModService.addSkillMod(actor, 'expertise_dodge', 35) + core.skillModService.addSkillMod(actor, 'display_only_evasion', 5000) + core.skillModService.addSkillMod(actor, 'combat_evasion_value', 50) + + core.combatService.endCombat(actor) + return + +def remove(core, actor, buff): + core.skillModService.deductSkillMod(actor, 'expertise_dodge', 35) + core.skillModService.deductSkillMod(actor, 'display_only_evasion', 5000) + core.skillModService.deductSkillMod(actor, 'combat_evasion_value', 50) + return + \ No newline at end of file diff --git a/scripts/buffs/me_rheumatic_calamity_1.py b/scripts/buffs/me_rheumatic_calamity_1.py index e09c02e5..8870a12b 100644 --- a/scripts/buffs/me_rheumatic_calamity_1.py +++ b/scripts/buffs/me_rheumatic_calamity_1.py @@ -2,7 +2,12 @@ import sys def setup(core, actor, buff): return + +def add(core, actor, buff): + core.skillModService.deductSkillMod(actor, 'action_burn', 65) + return -def removeBuff(core, actor, buff): +def remove(core, actor, buff): + core.skillModService.deductSkillMod(actor, 'action_burn', 65) return \ No newline at end of file diff --git a/scripts/buffs/me_serotonin_boost_1.py b/scripts/buffs/me_serotonin_boost_1.py new file mode 100644 index 00000000..2c931a78 --- /dev/null +++ b/scripts/buffs/me_serotonin_boost_1.py @@ -0,0 +1,12 @@ +import sys + +def setup(core, actor, buff): + return + +def add(core, actor, buff): + core.skillModService.addSkillMod(actor, 'debuff_purge', 1) + return + +def remove(core, actor, buff): + core.skillModService.deductSkillMod(actor, 'debuff_purge', 1) + return \ No newline at end of file diff --git a/scripts/buffs/me_serotonin_purge_1.py b/scripts/buffs/me_serotonin_purge_1.py new file mode 100644 index 00000000..c5540781 --- /dev/null +++ b/scripts/buffs/me_serotonin_purge_1.py @@ -0,0 +1,12 @@ +import sys + +def setup(core, actor, buff): + return + +def add(core, actor, buff): + core.skillModService.addSkillMod(actor, 'buff_purge', 1) + return + +def remove(core, actor, buff): + core.skillModService.deductSkillMod(actor, 'buff_purge', 1) + return \ No newline at end of file diff --git a/scripts/buffs/me_stasis_1.py b/scripts/buffs/me_stasis_1.py index 1539e280..ad96199e 100644 --- a/scripts/buffs/me_stasis_1.py +++ b/scripts/buffs/me_stasis_1.py @@ -1,11 +1,14 @@ import sys def setup(core, actor, buff): + return + +def add(core, actor, buff): actor.playEffectObject('clienteffect/medic_stasis.cef', 'me_stasis_1') - actor.setSpeedMultiplierBase(0.2) + core.skillModService.deductSkillMod(actor, 'movement', 8) return -def removeBuff(core, actor, buff): - actor.setSpeedMultiplierBase(1) +def remove(core, actor, buff): + core.skillModService.addSkillMod(actor, 'movement', 8) return \ No newline at end of file diff --git a/scripts/buffs/me_stasis_self_1.py b/scripts/buffs/me_stasis_self_1.py index 6341cb4c..cfb0b3f3 100644 --- a/scripts/buffs/me_stasis_self_1.py +++ b/scripts/buffs/me_stasis_self_1.py @@ -1,11 +1,14 @@ import sys def setup(core, actor, buff): + return + +def add(core, actor, buff): actor.playEffectObject('clienteffect/medic_stasis.cef', 'me_stasis_self_1') actor.setSpeedMultiplierBase(0.2) return -def removeBuff(core, actor, buff): +def remove(core, actor, buff): actor.setSpeedMultiplierBase(1) return \ No newline at end of file diff --git a/scripts/buffs/me_thyroid_rupture_1.py b/scripts/buffs/me_thyroid_rupture_1.py index 03b1fba8..fcafd14c 100644 --- a/scripts/buffs/me_thyroid_rupture_1.py +++ b/scripts/buffs/me_thyroid_rupture_1.py @@ -1,9 +1,12 @@ import sys def setup(core, actor, buff): + return + +def add(core, actor, buff): core.skillModService.addSkillMod(actor, 'combat_divide_damage_dealt', 25) return -def removeBuff(core, actor, buff): +def remove(core, actor, buff): core.skillModService.deductSkillMod(actor, 'combat_divide_damage_dealt', 25) return \ No newline at end of file diff --git a/scripts/buffs/of_adv_paint_debuff_1.py b/scripts/buffs/of_adv_paint_debuff_1.py index 7f6894de..54bbaa4e 100644 --- a/scripts/buffs/of_adv_paint_debuff_1.py +++ b/scripts/buffs/of_adv_paint_debuff_1.py @@ -1,10 +1,13 @@ import sys def setup(core, actor, buff): + return + +def add(core, actor, buff): core.skillModService.addSkillMod(actor, 'critical_damage_vulnerability', 3) return -def removeBuff(core, actor, buff): +def remove(core, actor, buff): core.skillModService.deductSkillMod(actor, 'critical_damage_vulnerability', 3) return \ No newline at end of file diff --git a/scripts/buffs/of_adv_paint_debuff_2.py b/scripts/buffs/of_adv_paint_debuff_2.py index 92f239c0..2a7c28ce 100644 --- a/scripts/buffs/of_adv_paint_debuff_2.py +++ b/scripts/buffs/of_adv_paint_debuff_2.py @@ -1,10 +1,13 @@ import sys def setup(core, actor, buff): + return + +def add(core, actor, buff): core.skillModService.addSkillMod(actor, 'critical_damage_vulnerability', 4) return -def removeBuff(core, actor, buff): +def remove(core, actor, buff): core.skillModService.deductSkillMod(actor, 'critical_damage_vulnerability', 4) return \ No newline at end of file diff --git a/scripts/buffs/of_adv_paint_debuff_3.py b/scripts/buffs/of_adv_paint_debuff_3.py index 58fe704f..18dc8a8c 100644 --- a/scripts/buffs/of_adv_paint_debuff_3.py +++ b/scripts/buffs/of_adv_paint_debuff_3.py @@ -1,10 +1,13 @@ import sys def setup(core, actor, buff): + return + +def add(core, actor, buff): core.skillModService.addSkillMod(actor, 'critical_damage_vulnerability', 5) return -def removeBuff(core, actor, buff): +def remove(core, actor, buff): core.skillModService.deductSkillMod(actor, 'critical_damage_vulnerability', 5) return \ No newline at end of file diff --git a/scripts/buffs/of_adv_paint_debuff_4.py b/scripts/buffs/of_adv_paint_debuff_4.py index f41ae124..ec98f8ea 100644 --- a/scripts/buffs/of_adv_paint_debuff_4.py +++ b/scripts/buffs/of_adv_paint_debuff_4.py @@ -1,10 +1,13 @@ import sys def setup(core, actor, buff): + return + +def add(core, actor, buff): core.skillModService.addSkillMod(actor, 'critical_damage_vulnerability', 6) return -def removeBuff(core, actor, buff): +def remove(core, actor, buff): core.skillModService.deductSkillMod(actor, 'critical_damage_vulnerability', 6) return \ No newline at end of file diff --git a/scripts/buffs/of_adv_paint_debuff_5.py b/scripts/buffs/of_adv_paint_debuff_5.py index d31be060..e8fc48e0 100644 --- a/scripts/buffs/of_adv_paint_debuff_5.py +++ b/scripts/buffs/of_adv_paint_debuff_5.py @@ -1,10 +1,13 @@ import sys def setup(core, actor, buff): + return + +def add(core, actor, buff): core.skillModService.addSkillMod(actor, 'critical_damage_vulnerability', 7) return -def removeBuff(core, actor, buff): +def remove(core, actor, buff): core.skillModService.deductSkillMod(actor, 'critical_damage_vulnerability', 7) return \ No newline at end of file diff --git a/scripts/buffs/of_adv_paint_debuff_6.py b/scripts/buffs/of_adv_paint_debuff_6.py index 84ffe9ed..739acd40 100644 --- a/scripts/buffs/of_adv_paint_debuff_6.py +++ b/scripts/buffs/of_adv_paint_debuff_6.py @@ -1,10 +1,13 @@ import sys def setup(core, actor, buff): + return + +def add(core, actor, buff): core.skillModService.addSkillMod(actor, 'critical_damage_vulnerability', 8) return -def removeBuff(core, actor, buff): +def remove(core, actor, buff): core.skillModService.deductSkillMod(actor, 'critical_damage_vulnerability', 8) return \ No newline at end of file diff --git a/scripts/buffs/of_adv_paint_debuff_7.py b/scripts/buffs/of_adv_paint_debuff_7.py index 231f4a1b..32276a5f 100644 --- a/scripts/buffs/of_adv_paint_debuff_7.py +++ b/scripts/buffs/of_adv_paint_debuff_7.py @@ -1,10 +1,13 @@ import sys def setup(core, actor, buff): + return + +def add(core, actor, buff): core.skillModService.addSkillMod(actor, 'critical_damage_vulnerability', 9) return -def removeBuff(core, actor, buff): +def remove(core, actor, buff): core.skillModService.deductSkillMod(actor, 'critical_damage_vulnerability', 9) return \ No newline at end of file diff --git a/scripts/buffs/of_adv_paint_debuff_8.py b/scripts/buffs/of_adv_paint_debuff_8.py index 65e1c826..7af4032c 100644 --- a/scripts/buffs/of_adv_paint_debuff_8.py +++ b/scripts/buffs/of_adv_paint_debuff_8.py @@ -1,10 +1,13 @@ import sys def setup(core, actor, buff): + return + +def add(core, actor, buff): core.skillModService.addSkillMod(actor, 'critical_damage_vulnerability', 10) return -def removeBuff(core, actor, buff): +def remove(core, actor, buff): core.skillModService.deductSkillMod(actor, 'critical_damage_vulnerability', 10) return \ No newline at end of file diff --git a/scripts/buffs/of_adv_paint_expose_1.py b/scripts/buffs/of_adv_paint_expose_1.py index e3583535..cf3db901 100644 --- a/scripts/buffs/of_adv_paint_expose_1.py +++ b/scripts/buffs/of_adv_paint_expose_1.py @@ -1,12 +1,15 @@ import sys def setup(core, actor, buff): + return + +def add(core, actor, buff): core.skillModService.addSkillMod(actor, 'stealth_divisor', 15) core.skillModService.addSkillMod(actor, 'expertise_damage_line_vulnerability_of_buff_def', 3) core.skillModService.addSkillMod(actor, 'expertise_damage_line_vulnerability_of_dm', 3) return -def removeBuff(core, actor, buff): +def remove(core, actor, buff): core.skillModService.deductSkillMod(actor, 'stealth_divisor', 15) core.skillModService.deductSkillMod(actor, 'expertise_damage_line_vulnerability_of_buff_def', 3) core.skillModService.deductSkillMod(actor, 'expertise_damage_line_vulnerability_of_dm', 3) diff --git a/scripts/buffs/of_adv_paint_expose_2.py b/scripts/buffs/of_adv_paint_expose_2.py index 07ed0966..cb86a0d8 100644 --- a/scripts/buffs/of_adv_paint_expose_2.py +++ b/scripts/buffs/of_adv_paint_expose_2.py @@ -1,12 +1,15 @@ import sys def setup(core, actor, buff): + return + +def add(core, actor, buff): core.skillModService.addSkillMod(actor, 'stealth_divisor', 20) core.skillModService.addSkillMod(actor, 'expertise_damage_line_vulnerability_of_buff_def', 4) core.skillModService.addSkillMod(actor, 'expertise_damage_line_vulnerability_of_dm', 4) return -def removeBuff(core, actor, buff): +def remove(core, actor, buff): core.skillModService.deductSkillMod(actor, 'stealth_divisor', 20) core.skillModService.deductSkillMod(actor, 'expertise_damage_line_vulnerability_of_buff_def', 4) core.skillModService.deductSkillMod(actor, 'expertise_damage_line_vulnerability_of_dm', 4) diff --git a/scripts/buffs/of_adv_paint_expose_3.py b/scripts/buffs/of_adv_paint_expose_3.py index 4ab6e431..7a7d18af 100644 --- a/scripts/buffs/of_adv_paint_expose_3.py +++ b/scripts/buffs/of_adv_paint_expose_3.py @@ -1,12 +1,15 @@ import sys def setup(core, actor, buff): + return + +def add(core, actor, buff): core.skillModService.addSkillMod(actor, 'stealth_divisor', 25) core.skillModService.addSkillMod(actor, 'expertise_damage_line_vulnerability_of_buff_def', 5) core.skillModService.addSkillMod(actor, 'expertise_damage_line_vulnerability_of_dm', 5) return -def removeBuff(core, actor, buff): +def remove(core, actor, buff): core.skillModService.deductSkillMod(actor, 'stealth_divisor', 25) core.skillModService.deductSkillMod(actor, 'expertise_damage_line_vulnerability_of_buff_def', 5) core.skillModService.deductSkillMod(actor, 'expertise_damage_line_vulnerability_of_dm', 5) diff --git a/scripts/buffs/of_adv_paint_expose_4.py b/scripts/buffs/of_adv_paint_expose_4.py index df8fae5c..3716ee92 100644 --- a/scripts/buffs/of_adv_paint_expose_4.py +++ b/scripts/buffs/of_adv_paint_expose_4.py @@ -1,12 +1,15 @@ import sys def setup(core, actor, buff): + return + +def add(core, actor, buff): core.skillModService.addSkillMod(actor, 'stealth_divisor', 30) core.skillModService.addSkillMod(actor, 'expertise_damage_line_vulnerability_of_buff_def', 6) core.skillModService.addSkillMod(actor, 'expertise_damage_line_vulnerability_of_dm', 6) return -def removeBuff(core, actor, buff): +def remove(core, actor, buff): core.skillModService.deductSkillMod(actor, 'stealth_divisor', 30) core.skillModService.deductSkillMod(actor, 'expertise_damage_line_vulnerability_of_buff_def', 6) core.skillModService.deductSkillMod(actor, 'expertise_damage_line_vulnerability_of_dm', 6) diff --git a/scripts/buffs/of_adv_paint_expose_5.py b/scripts/buffs/of_adv_paint_expose_5.py index d22f46f0..210f262d 100644 --- a/scripts/buffs/of_adv_paint_expose_5.py +++ b/scripts/buffs/of_adv_paint_expose_5.py @@ -1,12 +1,15 @@ import sys def setup(core, actor, buff): + return + +def add(core, actor, buff): core.skillModService.addSkillMod(actor, 'stealth_divisor', 35) core.skillModService.addSkillMod(actor, 'expertise_damage_line_vulnerability_of_buff_def', 7) core.skillModService.addSkillMod(actor, 'expertise_damage_line_vulnerability_of_dm', 7) return -def removeBuff(core, actor, buff): +def remove(core, actor, buff): core.skillModService.deductSkillMod(actor, 'stealth_divisor', 35) core.skillModService.deductSkillMod(actor, 'expertise_damage_line_vulnerability_of_buff_def', 7) core.skillModService.deductSkillMod(actor, 'expertise_damage_line_vulnerability_of_dm', 7) diff --git a/scripts/buffs/of_adv_paint_expose_6.py b/scripts/buffs/of_adv_paint_expose_6.py index 4e3af368..d58904ce 100644 --- a/scripts/buffs/of_adv_paint_expose_6.py +++ b/scripts/buffs/of_adv_paint_expose_6.py @@ -1,12 +1,15 @@ import sys def setup(core, actor, buff): + return + +def add(core, actor, buff): core.skillModService.addSkillMod(actor, 'stealth_divisor', 40) core.skillModService.addSkillMod(actor, 'expertise_damage_line_vulnerability_of_buff_def', 8) core.skillModService.addSkillMod(actor, 'expertise_damage_line_vulnerability_of_dm', 8) return -def removeBuff(core, actor, buff): +def remove(core, actor, buff): core.skillModService.deductSkillMod(actor, 'stealth_divisor', 40) core.skillModService.deductSkillMod(actor, 'expertise_damage_line_vulnerability_of_buff_def', 8) core.skillModService.deductSkillMod(actor, 'expertise_damage_line_vulnerability_of_dm', 8) diff --git a/scripts/buffs/of_adv_paint_expose_7.py b/scripts/buffs/of_adv_paint_expose_7.py index 46e42ba4..c83c4950 100644 --- a/scripts/buffs/of_adv_paint_expose_7.py +++ b/scripts/buffs/of_adv_paint_expose_7.py @@ -1,12 +1,15 @@ import sys def setup(core, actor, buff): + return + +def add(core, actor, buff): core.skillModService.addSkillMod(actor, 'stealth_divisor', 45) core.skillModService.addSkillMod(actor, 'expertise_damage_line_vulnerability_of_buff_def', 9) core.skillModService.addSkillMod(actor, 'expertise_damage_line_vulnerability_of_dm', 9) return -def removeBuff(core, actor, buff): +def remove(core, actor, buff): core.skillModService.deductSkillMod(actor, 'stealth_divisor', 45) core.skillModService.deductSkillMod(actor, 'expertise_damage_line_vulnerability_of_buff_def', 9) core.skillModService.deductSkillMod(actor, 'expertise_damage_line_vulnerability_of_dm', 9) diff --git a/scripts/buffs/of_adv_paint_expose_8.py b/scripts/buffs/of_adv_paint_expose_8.py index ff43fe6c..38a00bf2 100644 --- a/scripts/buffs/of_adv_paint_expose_8.py +++ b/scripts/buffs/of_adv_paint_expose_8.py @@ -1,12 +1,15 @@ import sys def setup(core, actor, buff): + return + +def add(core, actor, buff): core.skillModService.addSkillMod(actor, 'stealth_divisor', 50) core.skillModService.addSkillMod(actor, 'expertise_damage_line_vulnerability_of_buff_def', 10) core.skillModService.addSkillMod(actor, 'expertise_damage_line_vulnerability_of_dm', 10) return -def removeBuff(core, actor, buff): +def remove(core, actor, buff): core.skillModService.deductSkillMod(actor, 'stealth_divisor', 50) core.skillModService.deductSkillMod(actor, 'expertise_damage_line_vulnerability_of_buff_def', 10) core.skillModService.deductSkillMod(actor, 'expertise_damage_line_vulnerability_of_dm', 10) diff --git a/scripts/buffs/of_ae_dm_cc_1.py b/scripts/buffs/of_ae_dm_cc_1.py index 620bbaaa..2ee81fe9 100644 --- a/scripts/buffs/of_ae_dm_cc_1.py +++ b/scripts/buffs/of_ae_dm_cc_1.py @@ -1,9 +1,12 @@ import sys def setup(core, actor, buff): - core.skillModService.addSkillMod(actor, 'movement', -5) + return + +def add(core, actor, buff): + core.skillModService.deductSkillMod(actor, 'movement', 5) return -def removeBuff(core, actor, buff): - core.skillModService.deductSkillMod(actor, 'movement', 15) +def remove(core, actor, buff): + core.skillModService.addSkillMod(actor, 'movement', 5) return \ No newline at end of file diff --git a/scripts/buffs/of_ae_dm_cc_2.py b/scripts/buffs/of_ae_dm_cc_2.py index 620bbaaa..2ee81fe9 100644 --- a/scripts/buffs/of_ae_dm_cc_2.py +++ b/scripts/buffs/of_ae_dm_cc_2.py @@ -1,9 +1,12 @@ import sys def setup(core, actor, buff): - core.skillModService.addSkillMod(actor, 'movement', -5) + return + +def add(core, actor, buff): + core.skillModService.deductSkillMod(actor, 'movement', 5) return -def removeBuff(core, actor, buff): - core.skillModService.deductSkillMod(actor, 'movement', 15) +def remove(core, actor, buff): + core.skillModService.addSkillMod(actor, 'movement', 5) return \ No newline at end of file diff --git a/scripts/buffs/of_ae_dm_cc_3.py b/scripts/buffs/of_ae_dm_cc_3.py index 620bbaaa..2ee81fe9 100644 --- a/scripts/buffs/of_ae_dm_cc_3.py +++ b/scripts/buffs/of_ae_dm_cc_3.py @@ -1,9 +1,12 @@ import sys def setup(core, actor, buff): - core.skillModService.addSkillMod(actor, 'movement', -5) + return + +def add(core, actor, buff): + core.skillModService.deductSkillMod(actor, 'movement', 5) return -def removeBuff(core, actor, buff): - core.skillModService.deductSkillMod(actor, 'movement', 15) +def remove(core, actor, buff): + core.skillModService.addSkillMod(actor, 'movement', 5) return \ No newline at end of file diff --git a/scripts/buffs/of_buff_def_1.py b/scripts/buffs/of_buff_def_1.py index dd15adaf..01f17ada 100644 --- a/scripts/buffs/of_buff_def_1.py +++ b/scripts/buffs/of_buff_def_1.py @@ -1,11 +1,17 @@ import sys def setup(core, actor, buff): + if actor.getSkillMod('expertise_aura_maintain'): + buff.setDuration(-1) + + return + +def add(core, actor, buff): core.skillModService.addSkillMod(actor, 'expertise_dodge', 1) core.skillModService.addSkillMod(actor, 'constitution_modified', 5) return -def removeBuff(core, actor, buff): +def remove(core, actor, buff): core.skillModService.deductSkillMod(actor, 'expertise_dodge', 1) core.skillModService.deductSkillMod(actor, 'constitution_modified', 5) return \ No newline at end of file diff --git a/scripts/buffs/of_buff_def_2.py b/scripts/buffs/of_buff_def_2.py index d819404b..7536841f 100644 --- a/scripts/buffs/of_buff_def_2.py +++ b/scripts/buffs/of_buff_def_2.py @@ -1,11 +1,17 @@ import sys def setup(core, actor, buff): + if actor.getSkillMod('expertise_aura_maintain'): + buff.setDuration(-1) + + return + +def add(core, actor, buff): core.skillModService.addSkillMod(actor, 'expertise_dodge', 2) core.skillModService.addSkillMod(actor, 'constitution_modified', 10) return -def removeBuff(core, actor, buff): +def remove(core, actor, buff): core.skillModService.deductSkillMod(actor, 'expertise_dodge', 2) core.skillModService.deductSkillMod(actor, 'constitution_modified', 10) return \ No newline at end of file diff --git a/scripts/buffs/of_buff_def_3.py b/scripts/buffs/of_buff_def_3.py index d18a3633..dd577237 100644 --- a/scripts/buffs/of_buff_def_3.py +++ b/scripts/buffs/of_buff_def_3.py @@ -1,11 +1,17 @@ import sys def setup(core, actor, buff): + if actor.getSkillMod('expertise_aura_maintain'): + buff.setDuration(-1) + + return + +def add(core, actor, buff): core.skillModService.addSkillMod(actor, 'expertise_dodge', 2) core.skillModService.addSkillMod(actor, 'constitution_modified', 20) return -def removeBuff(core, actor, buff): +def remove(core, actor, buff): core.skillModService.deductSkillMod(actor, 'expertise_dodge', 2) core.skillModService.deductSkillMod(actor, 'constitution_modified', 20) return \ No newline at end of file diff --git a/scripts/buffs/of_buff_def_4.py b/scripts/buffs/of_buff_def_4.py index b115ce6b..6a650b41 100644 --- a/scripts/buffs/of_buff_def_4.py +++ b/scripts/buffs/of_buff_def_4.py @@ -1,12 +1,18 @@ import sys def setup(core, actor, buff): + if actor.getSkillMod('expertise_aura_maintain'): + buff.setDuration(-1) + + return + +def add(core, actor, buff): core.skillModService.addSkillMod(actor, 'expertise_dodge', 2) core.skillModService.addSkillMod(actor, 'constitution_modified', 20) core.skillModService.addSkillMod(actor, 'combat_critical_hit_reduction', 5) return -def removeBuff(core, actor, buff): +def remove(core, actor, buff): core.skillModService.deductSkillMod(actor, 'expertise_dodge', 2) core.skillModService.deductSkillMod(actor, 'constitution_modified', 20) core.skillModService.deductSkillMod(actor, 'combat_critical_hit_reduction', 5) diff --git a/scripts/buffs/of_buff_def_5.py b/scripts/buffs/of_buff_def_5.py index 5c6ff8eb..0dfd361a 100644 --- a/scripts/buffs/of_buff_def_5.py +++ b/scripts/buffs/of_buff_def_5.py @@ -1,12 +1,18 @@ import sys def setup(core, actor, buff): + if actor.getSkillMod('expertise_aura_maintain'): + buff.setDuration(-1) + + return + +def add(core, actor, buff): core.skillModService.addSkillMod(actor, 'expertise_dodge', 3) core.skillModService.addSkillMod(actor, 'constitution_modified', 25) core.skillModService.addSkillMod(actor, 'combat_critical_hit_reduction', 6) return -def removeBuff(core, actor, buff): +def remove(core, actor, buff): core.skillModService.deductSkillMod(actor, 'expertise_dodge', 3) core.skillModService.deductSkillMod(actor, 'constitution_modified', 25) core.skillModService.deductSkillMod(actor, 'combat_critical_hit_reduction', 6) diff --git a/scripts/buffs/of_buff_def_6.py b/scripts/buffs/of_buff_def_6.py index b8a4b168..06dac062 100644 --- a/scripts/buffs/of_buff_def_6.py +++ b/scripts/buffs/of_buff_def_6.py @@ -1,12 +1,18 @@ import sys def setup(core, actor, buff): + if actor.getSkillMod('expertise_aura_maintain'): + buff.setDuration(-1) + + return + +def add(core, actor, buff): core.skillModService.addSkillMod(actor, 'expertise_dodge', 3) core.skillModService.addSkillMod(actor, 'constitution_modified', 35) core.skillModService.addSkillMod(actor, 'combat_critical_hit_reduction', 7) return -def removeBuff(core, actor, buff): +def remove(core, actor, buff): core.skillModService.deductSkillMod(actor, 'expertise_dodge', 3) core.skillModService.deductSkillMod(actor, 'constitution_modified', 35) core.skillModService.deductSkillMod(actor, 'combat_critical_hit_reduction', 7) diff --git a/scripts/buffs/of_buff_def_7.py b/scripts/buffs/of_buff_def_7.py index 77bdd6b4..b18cd574 100644 --- a/scripts/buffs/of_buff_def_7.py +++ b/scripts/buffs/of_buff_def_7.py @@ -1,12 +1,18 @@ import sys def setup(core, actor, buff): + if actor.getSkillMod('expertise_aura_maintain'): + buff.setDuration(-1) + + return + +def add(core, actor, buff): core.skillModService.addSkillMod(actor, 'expertise_dodge', 4) core.skillModService.addSkillMod(actor, 'constitution_modified', 50) core.skillModService.addSkillMod(actor, 'combat_critical_hit_reduction', 8) return -def removeBuff(core, actor, buff): +def remove(core, actor, buff): core.skillModService.deductSkillMod(actor, 'expertise_dodge', 4) core.skillModService.deductSkillMod(actor, 'constitution_modified', 50) core.skillModService.deductSkillMod(actor, 'combat_critical_hit_reduction', 8) diff --git a/scripts/buffs/of_buff_def_8.py b/scripts/buffs/of_buff_def_8.py index e4b5ba0c..1b16cad6 100644 --- a/scripts/buffs/of_buff_def_8.py +++ b/scripts/buffs/of_buff_def_8.py @@ -1,12 +1,18 @@ import sys def setup(core, actor, buff): + if actor.getSkillMod('expertise_aura_maintain'): + buff.setDuration(-1) + + return + +def add(core, actor, buff): core.skillModService.addSkillMod(actor, 'expertise_dodge', 4) core.skillModService.addSkillMod(actor, 'constitution_modified', 60) core.skillModService.addSkillMod(actor, 'combat_critical_hit_reduction', 9) return -def removeBuff(core, actor, buff): +def remove(core, actor, buff): core.skillModService.deductSkillMod(actor, 'expertise_dodge', 4) core.skillModService.deductSkillMod(actor, 'constitution_modified', 60) core.skillModService.deductSkillMod(actor, 'combat_critical_hit_reduction', 9) diff --git a/scripts/buffs/of_buff_def_9.py b/scripts/buffs/of_buff_def_9.py index 6f5e35e7..ac342f70 100644 --- a/scripts/buffs/of_buff_def_9.py +++ b/scripts/buffs/of_buff_def_9.py @@ -1,12 +1,18 @@ import sys def setup(core, actor, buff): + if actor.getSkillMod('expertise_aura_maintain'): + buff.setDuration(-1) + + return + +def add(core, actor, buff): core.skillModService.addSkillMod(actor, 'expertise_dodge', 5) core.skillModService.addSkillMod(actor, 'constitution_modified', 70) core.skillModService.addSkillMod(actor, 'combat_critical_hit_reduction', 10) return -def removeBuff(core, actor, buff): +def remove(core, actor, buff): core.skillModService.deductSkillMod(actor, 'expertise_dodge', 5) core.skillModService.deductSkillMod(actor, 'constitution_modified', 70) core.skillModService.deductSkillMod(actor, 'combat_critical_hit_reduction', 10) diff --git a/scripts/buffs/of_cc_melee_1.py b/scripts/buffs/of_cc_melee_1.py index 620bbaaa..2ee81fe9 100644 --- a/scripts/buffs/of_cc_melee_1.py +++ b/scripts/buffs/of_cc_melee_1.py @@ -1,9 +1,12 @@ import sys def setup(core, actor, buff): - core.skillModService.addSkillMod(actor, 'movement', -5) + return + +def add(core, actor, buff): + core.skillModService.deductSkillMod(actor, 'movement', 5) return -def removeBuff(core, actor, buff): - core.skillModService.deductSkillMod(actor, 'movement', 15) +def remove(core, actor, buff): + core.skillModService.addSkillMod(actor, 'movement', 5) return \ No newline at end of file diff --git a/scripts/buffs/of_cc_melee_2.py b/scripts/buffs/of_cc_melee_2.py index 620bbaaa..2ee81fe9 100644 --- a/scripts/buffs/of_cc_melee_2.py +++ b/scripts/buffs/of_cc_melee_2.py @@ -1,9 +1,12 @@ import sys def setup(core, actor, buff): - core.skillModService.addSkillMod(actor, 'movement', -5) + return + +def add(core, actor, buff): + core.skillModService.deductSkillMod(actor, 'movement', 5) return -def removeBuff(core, actor, buff): - core.skillModService.deductSkillMod(actor, 'movement', 15) +def remove(core, actor, buff): + core.skillModService.addSkillMod(actor, 'movement', 5) return \ No newline at end of file diff --git a/scripts/buffs/of_cc_melee_3.py b/scripts/buffs/of_cc_melee_3.py index 620bbaaa..2ee81fe9 100644 --- a/scripts/buffs/of_cc_melee_3.py +++ b/scripts/buffs/of_cc_melee_3.py @@ -1,9 +1,12 @@ import sys def setup(core, actor, buff): - core.skillModService.addSkillMod(actor, 'movement', -5) + return + +def add(core, actor, buff): + core.skillModService.deductSkillMod(actor, 'movement', 5) return -def removeBuff(core, actor, buff): - core.skillModService.deductSkillMod(actor, 'movement', 15) +def remove(core, actor, buff): + core.skillModService.addSkillMod(actor, 'movement', 5) return \ No newline at end of file diff --git a/scripts/buffs/of_cc_melee_4.py b/scripts/buffs/of_cc_melee_4.py index 620bbaaa..2ee81fe9 100644 --- a/scripts/buffs/of_cc_melee_4.py +++ b/scripts/buffs/of_cc_melee_4.py @@ -1,9 +1,12 @@ import sys def setup(core, actor, buff): - core.skillModService.addSkillMod(actor, 'movement', -5) + return + +def add(core, actor, buff): + core.skillModService.deductSkillMod(actor, 'movement', 5) return -def removeBuff(core, actor, buff): - core.skillModService.deductSkillMod(actor, 'movement', 15) +def remove(core, actor, buff): + core.skillModService.addSkillMod(actor, 'movement', 5) return \ No newline at end of file diff --git a/scripts/buffs/of_cc_melee_5.py b/scripts/buffs/of_cc_melee_5.py index 620bbaaa..2ee81fe9 100644 --- a/scripts/buffs/of_cc_melee_5.py +++ b/scripts/buffs/of_cc_melee_5.py @@ -1,9 +1,12 @@ import sys def setup(core, actor, buff): - core.skillModService.addSkillMod(actor, 'movement', -5) + return + +def add(core, actor, buff): + core.skillModService.deductSkillMod(actor, 'movement', 5) return -def removeBuff(core, actor, buff): - core.skillModService.deductSkillMod(actor, 'movement', 15) +def remove(core, actor, buff): + core.skillModService.addSkillMod(actor, 'movement', 5) return \ No newline at end of file diff --git a/scripts/buffs/of_cc_melee_6.py b/scripts/buffs/of_cc_melee_6.py index 620bbaaa..2ee81fe9 100644 --- a/scripts/buffs/of_cc_melee_6.py +++ b/scripts/buffs/of_cc_melee_6.py @@ -1,9 +1,12 @@ import sys def setup(core, actor, buff): - core.skillModService.addSkillMod(actor, 'movement', -5) + return + +def add(core, actor, buff): + core.skillModService.deductSkillMod(actor, 'movement', 5) return -def removeBuff(core, actor, buff): - core.skillModService.deductSkillMod(actor, 'movement', 15) +def remove(core, actor, buff): + core.skillModService.addSkillMod(actor, 'movement', 5) return \ No newline at end of file diff --git a/scripts/buffs/of_cc_melee_7.py b/scripts/buffs/of_cc_melee_7.py index 620bbaaa..2ee81fe9 100644 --- a/scripts/buffs/of_cc_melee_7.py +++ b/scripts/buffs/of_cc_melee_7.py @@ -1,9 +1,12 @@ import sys def setup(core, actor, buff): - core.skillModService.addSkillMod(actor, 'movement', -5) + return + +def add(core, actor, buff): + core.skillModService.deductSkillMod(actor, 'movement', 5) return -def removeBuff(core, actor, buff): - core.skillModService.deductSkillMod(actor, 'movement', 15) +def remove(core, actor, buff): + core.skillModService.addSkillMod(actor, 'movement', 5) return \ No newline at end of file diff --git a/scripts/buffs/of_charge_1.py b/scripts/buffs/of_charge_1.py index 1edd38b5..104612e7 100644 --- a/scripts/buffs/of_charge_1.py +++ b/scripts/buffs/of_charge_1.py @@ -1,13 +1,18 @@ import sys def setup(core, actor, buff): + if actor.getSkillMod('expertise_buff_duration_line_of_group_buff'): + buff.setDuration(buff.getDuration() + actor.getSkillModBase('expertise_buff_duration_line_of_group_buff')) + return + +def add(core, actor, buff): core.skillModService.addSkillMod(actor, 'expertise_damage_all', 10) core.skillModService.addSkillMod(actor, 'expertise_action_all', 10) core.skillModService.addSkillMod(actor, 'movement_resist_snare', 100) core.skillModService.addSkillMod(actor, 'movement', 5) return -def removeBuff(core, actor, buff): +def remove(core, actor, buff): core.skillModService.deductSkillMod(actor, 'movement', 5) core.skillModService.deductSkillMod(actor, 'expertise_damage_all', 10) core.skillModService.deductSkillMod(actor, 'expertise_action_all', 10) diff --git a/scripts/buffs/of_deadeye_debuff.py b/scripts/buffs/of_deadeye_debuff.py index 533e3262..be22ec3e 100644 --- a/scripts/buffs/of_deadeye_debuff.py +++ b/scripts/buffs/of_deadeye_debuff.py @@ -1,11 +1,14 @@ import sys def setup(core, actor, buff): + return + +def add(core, actor, buff): core.skillModService.addSkillMod(actor, 'action_burn', 50) core.skillModService.addSkillMod(actor, 'glancing_blow_vulnerable', 30) return -def removeBuff(core, actor, buff): +def remove(core, actor, buff): core.skillModService.deductSkillMod(actor, 'action_burn', 50) core.skillModService.deductSkillMod(actor, 'glancing_blow_vulnerable', 30) return \ No newline at end of file diff --git a/scripts/buffs/of_deb_def_1.py b/scripts/buffs/of_deb_def_1.py index 5a4b5cff..13cdab58 100644 --- a/scripts/buffs/of_deb_def_1.py +++ b/scripts/buffs/of_deb_def_1.py @@ -1,12 +1,18 @@ import sys def setup(core, actor, buff): + if actor.getSkillMod('expertise_aura_maintain'): + if actor.getSkillModBase('expertise_aura_maintain') > 0: + buff.setDuration(-1) + return + +def add(core, actor, buff): core.skillModService.addSkillMod(actor, 'expertise_dodge', -2) core.skillModService.addSkillMod(actor, 'expertise_parry', -2) core.skillModService.addSkillMod(actor, 'critical_hit_vulnerable', 3) return -def removeBuff(core, actor, buff): +def remove(core, actor, buff): core.skillModService.deductSkillMod(actor, 'expertise_dodge', -2) core.skillModService.deductSkillMod(actor, 'expertise_parry', -2) core.skillModService.deductSkillMod(actor, 'critical_hit_vulnerable', 3) diff --git a/scripts/buffs/of_deb_def_2.py b/scripts/buffs/of_deb_def_2.py index 75c97f71..097ffe2b 100644 --- a/scripts/buffs/of_deb_def_2.py +++ b/scripts/buffs/of_deb_def_2.py @@ -1,12 +1,18 @@ import sys def setup(core, actor, buff): + if actor.getSkillMod('expertise_aura_maintain'): + if actor.getSkillModBase('expertise_aura_maintain') > 0: + buff.setDuration(-1) + return + +def add(core, actor, buff): core.skillModService.addSkillMod(actor, 'expertise_dodge', -3) core.skillModService.addSkillMod(actor, 'expertise_parry', -3) core.skillModService.addSkillMod(actor, 'critical_hit_vulnerable', 4) return -def removeBuff(core, actor, buff): +def remove(core, actor, buff): core.skillModService.deductSkillMod(actor, 'expertise_dodge', -3) core.skillModService.deductSkillMod(actor, 'expertise_parry', -3) core.skillModService.deductSkillMod(actor, 'critical_hit_vulnerable', 4) diff --git a/scripts/buffs/of_deb_def_3.py b/scripts/buffs/of_deb_def_3.py index 5b125b31..c3b28b0b 100644 --- a/scripts/buffs/of_deb_def_3.py +++ b/scripts/buffs/of_deb_def_3.py @@ -1,12 +1,18 @@ import sys def setup(core, actor, buff): + if actor.getSkillMod('expertise_aura_maintain'): + if actor.getSkillModBase('expertise_aura_maintain') > 0: + buff.setDuration(-1) + return + +def add(core, actor, buff): core.skillModService.addSkillMod(actor, 'expertise_dodge', -3) core.skillModService.addSkillMod(actor, 'expertise_parry', -3) core.skillModService.addSkillMod(actor, 'critical_hit_vulnerable', 5) return -def removeBuff(core, actor, buff): +def remove(core, actor, buff): core.skillModService.deductSkillMod(actor, 'expertise_dodge', -3) core.skillModService.deductSkillMod(actor, 'expertise_parry', -3) core.skillModService.deductSkillMod(actor, 'critical_hit_vulnerable', 5) diff --git a/scripts/buffs/of_deb_def_4.py b/scripts/buffs/of_deb_def_4.py index 056db66a..e93dde70 100644 --- a/scripts/buffs/of_deb_def_4.py +++ b/scripts/buffs/of_deb_def_4.py @@ -1,12 +1,18 @@ import sys def setup(core, actor, buff): + if actor.getSkillMod('expertise_aura_maintain'): + if actor.getSkillModBase('expertise_aura_maintain') > 0: + buff.setDuration(-1) + return + +def add(core, actor, buff): core.skillModService.addSkillMod(actor, 'expertise_dodge', -4) core.skillModService.addSkillMod(actor, 'expertise_parry', -4) core.skillModService.addSkillMod(actor, 'critical_hit_vulnerable', 4) return -def removeBuff(core, actor, buff): +def remove(core, actor, buff): core.skillModService.deductSkillMod(actor, 'expertise_dodge', -4) core.skillModService.deductSkillMod(actor, 'expertise_parry', -4) core.skillModService.deductSkillMod(actor, 'critical_hit_vulnerable', 4) diff --git a/scripts/buffs/of_deb_def_5.py b/scripts/buffs/of_deb_def_5.py index ec243e5b..233ec4dd 100644 --- a/scripts/buffs/of_deb_def_5.py +++ b/scripts/buffs/of_deb_def_5.py @@ -1,12 +1,18 @@ import sys def setup(core, actor, buff): + if actor.getSkillMod('expertise_aura_maintain'): + if actor.getSkillModBase('expertise_aura_maintain') > 0: + buff.setDuration(-1) + return + +def add(core, actor, buff): core.skillModService.addSkillMod(actor, 'expertise_dodge', -4) core.skillModService.addSkillMod(actor, 'expertise_parry', -4) core.skillModService.addSkillMod(actor, 'critical_hit_vulnerable', 5) return -def removeBuff(core, actor, buff): +def remove(core, actor, buff): core.skillModService.deductSkillMod(actor, 'expertise_dodge', -4) core.skillModService.deductSkillMod(actor, 'expertise_parry', -4) core.skillModService.deductSkillMod(actor, 'critical_hit_vulnerable', 5) diff --git a/scripts/buffs/of_deb_def_6.py b/scripts/buffs/of_deb_def_6.py index 3ebd39ea..cdb29995 100644 --- a/scripts/buffs/of_deb_def_6.py +++ b/scripts/buffs/of_deb_def_6.py @@ -1,12 +1,18 @@ import sys def setup(core, actor, buff): + if actor.getSkillMod('expertise_aura_maintain'): + if actor.getSkillModBase('expertise_aura_maintain') > 0: + buff.setDuration(-1) + return + +def add(core, actor, buff): core.skillModService.addSkillMod(actor, 'expertise_dodge', -5) core.skillModService.addSkillMod(actor, 'expertise_parry', -5) core.skillModService.addSkillMod(actor, 'critical_hit_vulnerable', 6) return -def removeBuff(core, actor, buff): +def remove(core, actor, buff): core.skillModService.deductSkillMod(actor, 'expertise_dodge', -5) core.skillModService.deductSkillMod(actor, 'expertise_parry', -5) core.skillModService.deductSkillMod(actor, 'critical_hit_vulnerable', 6) diff --git a/scripts/buffs/of_deb_def_7.py b/scripts/buffs/of_deb_def_7.py index 7503918d..9e9fedf5 100644 --- a/scripts/buffs/of_deb_def_7.py +++ b/scripts/buffs/of_deb_def_7.py @@ -1,12 +1,18 @@ import sys def setup(core, actor, buff): + if actor.getSkillMod('expertise_aura_maintain'): + if actor.getSkillModBase('expertise_aura_maintain') > 0: + buff.setDuration(-1) + return + +def add(core, actor, buff): core.skillModService.addSkillMod(actor, 'expertise_dodge', -6) core.skillModService.addSkillMod(actor, 'expertise_parry', -6) core.skillModService.addSkillMod(actor, 'critical_hit_vulnerable', 7) return -def removeBuff(core, actor, buff): +def remove(core, actor, buff): core.skillModService.deductSkillMod(actor, 'expertise_dodge', -6) core.skillModService.deductSkillMod(actor, 'expertise_parry', -6) core.skillModService.deductSkillMod(actor, 'critical_hit_vulnerable', 7) diff --git a/scripts/buffs/of_deb_def_8.py b/scripts/buffs/of_deb_def_8.py index bc8e5334..6016ba0d 100644 --- a/scripts/buffs/of_deb_def_8.py +++ b/scripts/buffs/of_deb_def_8.py @@ -1,12 +1,18 @@ import sys def setup(core, actor, buff): + if actor.getSkillMod('expertise_aura_maintain'): + if actor.getSkillModBase('expertise_aura_maintain') > 0: + buff.setDuration(-1) + return + +def add(core, actor, buff): core.skillModService.addSkillMod(actor, 'expertise_dodge', -7) core.skillModService.addSkillMod(actor, 'expertise_parry', -7) core.skillModService.addSkillMod(actor, 'critical_hit_vulnerable', 8) return -def removeBuff(core, actor, buff): +def remove(core, actor, buff): core.skillModService.deductSkillMod(actor, 'expertise_dodge', -7) core.skillModService.deductSkillMod(actor, 'expertise_parry', -7) core.skillModService.deductSkillMod(actor, 'critical_hit_vulnerable', 8) diff --git a/scripts/buffs/of_decap_bleed_1.py b/scripts/buffs/of_decap_bleed_1.py index 16152e90..ff8b7fcf 100644 --- a/scripts/buffs/of_decap_bleed_1.py +++ b/scripts/buffs/of_decap_bleed_1.py @@ -1,10 +1,13 @@ import sys def setup(core, actor, buff): + return + +def add(core, actor, buff): core.skillModService.addSkillMod(actor, 'dot_bleed', 18) return -def removeBuff(core, actor, buff): +def remove(core, actor, buff): core.skillModService.deductSkillMod(actor, 'dot_bleed', 18) return \ No newline at end of file diff --git a/scripts/buffs/of_decap_bleed_2.py b/scripts/buffs/of_decap_bleed_2.py index f34171fc..1cdbd89d 100644 --- a/scripts/buffs/of_decap_bleed_2.py +++ b/scripts/buffs/of_decap_bleed_2.py @@ -1,10 +1,13 @@ import sys def setup(core, actor, buff): + return + +def add(core, actor, buff): core.skillModService.addSkillMod(actor, 'dot_bleed', 25) return -def removeBuff(core, actor, buff): +def remove(core, actor, buff): core.skillModService.deductSkillMod(actor, 'dot_bleed', 25) return \ No newline at end of file diff --git a/scripts/buffs/of_decap_bleed_3.py b/scripts/buffs/of_decap_bleed_3.py index 01d777ca..13629ef6 100644 --- a/scripts/buffs/of_decap_bleed_3.py +++ b/scripts/buffs/of_decap_bleed_3.py @@ -1,10 +1,13 @@ import sys def setup(core, actor, buff): + return + +def add(core, actor, buff): core.skillModService.addSkillMod(actor, 'dot_bleed', 32) return -def removeBuff(core, actor, buff): +def remove(core, actor, buff): core.skillModService.deductSkillMod(actor, 'dot_bleed', 32) return \ No newline at end of file diff --git a/scripts/buffs/of_decap_bleed_4.py b/scripts/buffs/of_decap_bleed_4.py index 1e847dea..3e266371 100644 --- a/scripts/buffs/of_decap_bleed_4.py +++ b/scripts/buffs/of_decap_bleed_4.py @@ -1,10 +1,13 @@ import sys def setup(core, actor, buff): + return + +def add(core, actor, buff): core.skillModService.addSkillMod(actor, 'dot_bleed', 42) return -def removeBuff(core, actor, buff): +def remove(core, actor, buff): core.skillModService.deductSkillMod(actor, 'dot_bleed', 42) return \ No newline at end of file diff --git a/scripts/buffs/of_decap_bleed_5.py b/scripts/buffs/of_decap_bleed_5.py index 596a9457..22db45c2 100644 --- a/scripts/buffs/of_decap_bleed_5.py +++ b/scripts/buffs/of_decap_bleed_5.py @@ -1,10 +1,13 @@ import sys def setup(core, actor, buff): + return + +def add(core, actor, buff): core.skillModService.addSkillMod(actor, 'dot_bleed', 50) return -def removeBuff(core, actor, buff): +def remove(core, actor, buff): core.skillModService.deductSkillMod(actor, 'dot_bleed', 50) return \ No newline at end of file diff --git a/scripts/buffs/of_decap_bleed_6.py b/scripts/buffs/of_decap_bleed_6.py index 1e96e637..8bbabdd6 100644 --- a/scripts/buffs/of_decap_bleed_6.py +++ b/scripts/buffs/of_decap_bleed_6.py @@ -1,10 +1,13 @@ import sys def setup(core, actor, buff): + return + +def add(core, actor, buff): core.skillModService.addSkillMod(actor, 'dot_bleed', 60) return -def removeBuff(core, actor, buff): +def remove(core, actor, buff): core.skillModService.deductSkillMod(actor, 'dot_bleed', 60) return \ No newline at end of file diff --git a/scripts/buffs/of_dot_bomb_1.py b/scripts/buffs/of_dot_bomb_1.py index 9ab3d9f7..1534cc2e 100644 --- a/scripts/buffs/of_dot_bomb_1.py +++ b/scripts/buffs/of_dot_bomb_1.py @@ -1,10 +1,13 @@ import sys def setup(core, actor, buff): + return + +def add(core, actor, buff): core.skillModService.addSkillMod(actor, 'dot_fire', 200) return -def removeBuff(core, actor, buff): +def remove(core, actor, buff): core.skillModService.deductSkillMod(actor, 'dot_fire', 200) return \ No newline at end of file diff --git a/scripts/buffs/of_drillmaster_1.py b/scripts/buffs/of_drillmaster_1.py index 9dd26849..233744a6 100644 --- a/scripts/buffs/of_drillmaster_1.py +++ b/scripts/buffs/of_drillmaster_1.py @@ -1,12 +1,18 @@ import sys def setup(core, actor, buff): + if actor.getSkillMod('expertise_aura_maintain'): + if actor.getSkillModBase('expertise_aura_maintain') > 2: + buff.setDuration(-1) + return + +def add(core, actor, buff): core.skillModService.addSkillMod(actor, 'expertise_damage_all', 5) core.skillModService.addSkillMod(actor, 'expertise_action_all', 5) core.skillModService.addSkillMod(actor, 'expertise_damage_weapon_2', 5) return -def removeBuff(core, actor, buff): +def remove(core, actor, buff): core.skillModService.deductSkillMod(actor, 'expertise_damage_all', 5) core.skillModService.deductSkillMod(actor, 'expertise_action_all', 5) core.skillModService.deductSkillMod(actor, 'expertise_damage_weapon_2', 5) diff --git a/scripts/buffs/of_emergency_shield.py b/scripts/buffs/of_emergency_shield.py index 8b27d418..e4f367c3 100644 --- a/scripts/buffs/of_emergency_shield.py +++ b/scripts/buffs/of_emergency_shield.py @@ -1,11 +1,14 @@ import sys def setup(core, actor, buff): + return + +def add(core, actor, buff): core.skillModService.addSkillMod(actor, 'combat_divide_damage_taken', 75) core.skillModService.addSkillMod(actor, 'combat_divide_damage_dealt', 75) return -def removeBuff(core, actor, buff): +def remove(core, actor, buff): core.skillModService.deductSkillMod(actor, 'combat_divide_damage_taken', 75) core.skillModService.deductSkillMod(actor, 'combat_divide_damage_dealt', 75) return \ No newline at end of file diff --git a/scripts/buffs/of_firepower.py b/scripts/buffs/of_firepower.py index e7b0b129..9bf1f1fe 100644 --- a/scripts/buffs/of_firepower.py +++ b/scripts/buffs/of_firepower.py @@ -1,11 +1,14 @@ import sys def setup(core, actor, buff): + return + +def add(core, actor, buff): core.skillModService.addSkillMod(actor, 'expertise_damage_line_of_aoe', 125) core.skillModService.addSkillMod(actor, 'expertise_critical_line_of_aoe', 50) return -def removeBuff(core, actor, buff): +def remove(core, actor, buff): core.skillModService.deductSkillMod(actor, 'expertise_damage_line_of_aoe', 125) core.skillModService.deductSkillMod(actor, 'expertise_critical_line_of_aoe', 50) return \ No newline at end of file diff --git a/scripts/buffs/of_focus_fire_1.py b/scripts/buffs/of_focus_fire_1.py index c8e0d364..4e191992 100644 --- a/scripts/buffs/of_focus_fire_1.py +++ b/scripts/buffs/of_focus_fire_1.py @@ -1,12 +1,18 @@ import sys def setup(core, actor, buff): + if actor.getSkillMod('expertise_aura_maintain'): + if actor.getSkillModBase('expertise_aura_maintain') > 1: + buff.setDuration(-1) + return + +def add(core, actor, buff): core.skillModService.addSkillMod(actor, 'combat_strikethrough_value', 2) core.skillModService.addSkillMod(actor, 'expertise_critical_niche_all', 15) core.skillModService.addSkillMod(actor, 'expertise_strikethrough_chance', 2) return -def removeBuff(core, actor, buff): +def remove(core, actor, buff): core.skillModService.deductSkillMod(actor, 'combat_strikethrough_value', 2) core.skillModService.deductSkillMod(actor, 'expertise_critical_niche_all', 15) core.skillModService.deductSkillMod(actor, 'expertise_strikethrough_chance', 2) diff --git a/scripts/buffs/of_focus_fire_2.py b/scripts/buffs/of_focus_fire_2.py index 7803b873..60404f53 100644 --- a/scripts/buffs/of_focus_fire_2.py +++ b/scripts/buffs/of_focus_fire_2.py @@ -1,12 +1,18 @@ import sys def setup(core, actor, buff): + if actor.getSkillMod('expertise_aura_maintain'): + if actor.getSkillModBase('expertise_aura_maintain') > 1: + buff.setDuration(-1) + return + +def add(core, actor, buff): core.skillModService.addSkillMod(actor, 'combat_strikethrough_value', 3) core.skillModService.addSkillMod(actor, 'expertise_critical_niche_all', 20) core.skillModService.addSkillMod(actor, 'expertise_strikethrough_chance', 2) return -def removeBuff(core, actor, buff): +def remove(core, actor, buff): core.skillModService.deductSkillMod(actor, 'combat_strikethrough_value', 3) core.skillModService.deductSkillMod(actor, 'expertise_critical_niche_all', 20) core.skillModService.deductSkillMod(actor, 'expertise_strikethrough_chance', 2) diff --git a/scripts/buffs/of_focus_fire_3.py b/scripts/buffs/of_focus_fire_3.py index a4084512..3420c94c 100644 --- a/scripts/buffs/of_focus_fire_3.py +++ b/scripts/buffs/of_focus_fire_3.py @@ -1,12 +1,18 @@ import sys def setup(core, actor, buff): + if actor.getSkillMod('expertise_aura_maintain'): + if actor.getSkillModBase('expertise_aura_maintain') > 1: + buff.setDuration(-1) + return + +def add(core, actor, buff): core.skillModService.addSkillMod(actor, 'combat_strikethrough_value', 3) core.skillModService.addSkillMod(actor, 'expertise_critical_niche_all', 23) core.skillModService.addSkillMod(actor, 'expertise_strikethrough_chance', 3) return -def removeBuff(core, actor, buff): +def remove(core, actor, buff): core.skillModService.deductSkillMod(actor, 'combat_strikethrough_value', 3) core.skillModService.deductSkillMod(actor, 'expertise_critical_niche_all', 23) core.skillModService.deductSkillMod(actor, 'expertise_strikethrough_chance', 3) diff --git a/scripts/buffs/of_focus_fire_4.py b/scripts/buffs/of_focus_fire_4.py index 27402933..a95fb77f 100644 --- a/scripts/buffs/of_focus_fire_4.py +++ b/scripts/buffs/of_focus_fire_4.py @@ -1,12 +1,18 @@ import sys def setup(core, actor, buff): + if actor.getSkillMod('expertise_aura_maintain'): + if actor.getSkillModBase('expertise_aura_maintain') > 1: + buff.setDuration(-1) + return + +def add(core, actor, buff): core.skillModService.addSkillMod(actor, 'combat_strikethrough_value', 4) core.skillModService.addSkillMod(actor, 'expertise_critical_niche_all', 26) core.skillModService.addSkillMod(actor, 'expertise_strikethrough_chance', 3) return -def removeBuff(core, actor, buff): +def remove(core, actor, buff): core.skillModService.deductSkillMod(actor, 'combat_strikethrough_value', 4) core.skillModService.deductSkillMod(actor, 'expertise_critical_niche_all', 26) core.skillModService.deductSkillMod(actor, 'expertise_strikethrough_chance', 4) diff --git a/scripts/buffs/of_focus_fire_5.py b/scripts/buffs/of_focus_fire_5.py index 9cc90e8d..4d084789 100644 --- a/scripts/buffs/of_focus_fire_5.py +++ b/scripts/buffs/of_focus_fire_5.py @@ -1,12 +1,18 @@ import sys def setup(core, actor, buff): + if actor.getSkillMod('expertise_aura_maintain'): + if actor.getSkillModBase('expertise_aura_maintain') > 1: + buff.setDuration(-1) + return + +def add(core, actor, buff): core.skillModService.addSkillMod(actor, 'combat_strikethrough_value', 4) core.skillModService.addSkillMod(actor, 'expertise_critical_niche_all', 29) core.skillModService.addSkillMod(actor, 'expertise_strikethrough_chance', 4) return -def removeBuff(core, actor, buff): +def remove(core, actor, buff): core.skillModService.deductSkillMod(actor, 'combat_strikethrough_value', 4) core.skillModService.deductSkillMod(actor, 'expertise_critical_niche_all', 29) core.skillModService.deductSkillMod(actor, 'expertise_strikethrough_chance', 4) diff --git a/scripts/buffs/of_focus_fire_6.py b/scripts/buffs/of_focus_fire_6.py index 58879cbe..e091b13f 100644 --- a/scripts/buffs/of_focus_fire_6.py +++ b/scripts/buffs/of_focus_fire_6.py @@ -1,12 +1,18 @@ import sys def setup(core, actor, buff): + if actor.getSkillMod('expertise_aura_maintain'): + if actor.getSkillModBase('expertise_aura_maintain') > 1: + buff.setDuration(-1) + return + +def add(core, actor, buff): core.skillModService.addSkillMod(actor, 'combat_strikethrough_value', 5) core.skillModService.addSkillMod(actor, 'expertise_critical_niche_all', 32) core.skillModService.addSkillMod(actor, 'expertise_strikethrough_chance', 5) return -def removeBuff(core, actor, buff): +def remove(core, actor, buff): core.skillModService.deductSkillMod(actor, 'combat_strikethrough_value', 5) core.skillModService.deductSkillMod(actor, 'expertise_critical_niche_all', 32) core.skillModService.deductSkillMod(actor, 'expertise_strikethrough_chance', 5) diff --git a/scripts/buffs/of_inspiration_1.py b/scripts/buffs/of_inspiration_1.py index 6cd2da65..cbf0963e 100644 --- a/scripts/buffs/of_inspiration_1.py +++ b/scripts/buffs/of_inspiration_1.py @@ -1,11 +1,14 @@ import sys def setup(core, actor, buff): + return + +def add(core, actor, buff): core.skillModService.addSkillMod(actor, 'expertise_action_all', 5) core.skillModService.addSkillMod(actor, 'healing_action', 870) return -def removeBuff(core, actor, buff): +def remove(core, actor, buff): core.skillModService.deductSkillMod(actor, 'expertise_action_all', 870) core.skillModService.deductSkillMod(actor, 'healing_action', 870) return \ No newline at end of file diff --git a/scripts/buffs/of_inspiration_2.py b/scripts/buffs/of_inspiration_2.py index a26bbe86..1cf07e9c 100644 --- a/scripts/buffs/of_inspiration_2.py +++ b/scripts/buffs/of_inspiration_2.py @@ -1,11 +1,14 @@ import sys def setup(core, actor, buff): + return + +def add(core, actor, buff): core.skillModService.addSkillMod(actor, 'expertise_action_all', 5) core.skillModService.addSkillMod(actor, 'healing_action', 1111) return -def removeBuff(core, actor, buff): +def remove(core, actor, buff): core.skillModService.deductSkillMod(actor, 'expertise_action_all', 5) core.skillModService.deductSkillMod(actor, 'healing_action', 1111) return \ No newline at end of file diff --git a/scripts/buffs/of_inspiration_3.py b/scripts/buffs/of_inspiration_3.py index 337108a6..1162d3b3 100644 --- a/scripts/buffs/of_inspiration_3.py +++ b/scripts/buffs/of_inspiration_3.py @@ -1,11 +1,14 @@ import sys def setup(core, actor, buff): + return + +def add(core, actor, buff): core.skillModService.addSkillMod(actor, 'expertise_action_all', 5) core.skillModService.addSkillMod(actor, 'healing_action', 1532) return -def removeBuff(core, actor, buff): +def remove(core, actor, buff): core.skillModService.deductSkillMod(actor, 'expertise_action_all', 5) core.skillModService.deductSkillMod(actor, 'healing_action', 1532) return \ No newline at end of file diff --git a/scripts/buffs/of_inspiration_4.py b/scripts/buffs/of_inspiration_4.py index 5738cd3d..67879833 100644 --- a/scripts/buffs/of_inspiration_4.py +++ b/scripts/buffs/of_inspiration_4.py @@ -1,11 +1,14 @@ import sys def setup(core, actor, buff): + return + +def add(core, actor, buff): core.skillModService.addSkillMod(actor, 'expertise_action_all', 5) core.skillModService.addSkillMod(actor, 'healing_action', 1954) return -def removeBuff(core, actor, buff): +def remove(core, actor, buff): core.skillModService.deductSkillMod(actor, 'expertise_action_all', 5) core.skillModService.deductSkillMod(actor, 'healing_action', 1954) return \ No newline at end of file diff --git a/scripts/buffs/of_inspiration_5.py b/scripts/buffs/of_inspiration_5.py index 6ab7d9d3..f566e44a 100644 --- a/scripts/buffs/of_inspiration_5.py +++ b/scripts/buffs/of_inspiration_5.py @@ -1,11 +1,14 @@ import sys def setup(core, actor, buff): + return + +def add(core, actor, buff): core.skillModService.addSkillMod(actor, 'expertise_action_all', 5) core.skillModService.addSkillMod(actor, 'healing_action', 2374) return -def removeBuff(core, actor, buff): +def remove(core, actor, buff): core.skillModService.deductSkillMod(actor, 'expertise_action_all', 5) core.skillModService.deductSkillMod(actor, 'healing_action', 2374) return \ No newline at end of file diff --git a/scripts/buffs/of_inspiration_6.py b/scripts/buffs/of_inspiration_6.py index 9e7e9def..31bcc7df 100644 --- a/scripts/buffs/of_inspiration_6.py +++ b/scripts/buffs/of_inspiration_6.py @@ -1,11 +1,14 @@ import sys def setup(core, actor, buff): + return + +def add(core, actor, buff): core.skillModService.addSkillMod(actor, 'expertise_action_all', 5) core.skillModService.addSkillMod(actor, 'healing_action', 2800) return -def removeBuff(core, actor, buff): +def remove(core, actor, buff): core.skillModService.deductSkillMod(actor, 'expertise_action_all', 5) core.skillModService.deductSkillMod(actor, 'healing_action', 2800) return \ No newline at end of file diff --git a/scripts/buffs/of_last_words.py b/scripts/buffs/of_last_words.py index 9611d588..49c70490 100644 --- a/scripts/buffs/of_last_words.py +++ b/scripts/buffs/of_last_words.py @@ -1,13 +1,16 @@ import sys def setup(core, actor, buff): + return + +def add(core, actor, buff): core.skillModService.addSkillMod(actor, 'healing_health', 3500) core.skillModService.addSkillMod(actor, 'healing_action', 6000) core.skillModService.addSkillMod(actor, 'expertise_damage_all', 10) core.skillModService.addSkillMod(actor, 'expertise_action_all', 10) return -def removeBuff(core, actor, buff): +def remove(core, actor, buff): core.skillModService.deductSkillMod(actor, 'healing_health', 125) core.skillModService.deductSkillMod(actor, 'healing_action', 50) core.skillModService.deductSkillMod(actor, 'expertise_damage_all', 50) diff --git a/scripts/buffs/of_pistol_bleed.py b/scripts/buffs/of_pistol_bleed.py index 1e96e637..8bbabdd6 100644 --- a/scripts/buffs/of_pistol_bleed.py +++ b/scripts/buffs/of_pistol_bleed.py @@ -1,10 +1,13 @@ import sys def setup(core, actor, buff): + return + +def add(core, actor, buff): core.skillModService.addSkillMod(actor, 'dot_bleed', 60) return -def removeBuff(core, actor, buff): +def remove(core, actor, buff): core.skillModService.deductSkillMod(actor, 'dot_bleed', 60) return \ No newline at end of file diff --git a/scripts/buffs/of_purge_1.py b/scripts/buffs/of_purge_1.py index c41e52e8..21dd70e7 100644 --- a/scripts/buffs/of_purge_1.py +++ b/scripts/buffs/of_purge_1.py @@ -1,12 +1,15 @@ import sys def setup(core, actor, buff): + return + +def add(core, actor, buff): core.skillModService.addSkillMod(actor, 'dot_divisor_all', 50) core.skillModService.addSkillMod(actor, 'dot_resist_all', 100) return -def removeBuff(core, actor, buff): +def remove(core, actor, buff): core.skillModService.deductSkillMod(actor, 'dot_divisor_all', 50) core.skillModService.deductSkillMod(actor, 'dot_resist_all', 100) return \ No newline at end of file diff --git a/scripts/buffs/of_scatter_1.py b/scripts/buffs/of_scatter_1.py index ed252b06..8309302a 100644 --- a/scripts/buffs/of_scatter_1.py +++ b/scripts/buffs/of_scatter_1.py @@ -1,13 +1,18 @@ import sys def setup(core, actor, buff): + if actor.getSkillMod('expertise_buff_duration_line_of_group_buff'): + buff.setDuration(buff.getDuration() + actor.getSkillModBase('expertise_buff_duration_line_of_group_buff')) + return + +def add(core, actor, buff): core.skillModService.addSkillMod(actor, 'expertise_glancing_blow_all', 2) core.skillModService.addSkillMod(actor, 'movement_resist_snare', 15) core.skillModService.addSkillMod(actor, 'movement_resist_root', 2) core.skillModService.addSkillMod(actor, 'movement', 5) return -def removeBuff(core, actor, buff): +def remove(core, actor, buff): core.skillModService.deductSkillMod(actor, 'movement', 5) core.skillModService.deductSkillMod(actor, 'expertise_glancing_blow_all', 2) core.skillModService.deductSkillMod(actor, 'movement_resist_snare', 15) diff --git a/scripts/buffs/of_stimulator_1.py b/scripts/buffs/of_stimulator_1.py index f28888e7..492e64d7 100644 --- a/scripts/buffs/of_stimulator_1.py +++ b/scripts/buffs/of_stimulator_1.py @@ -1,9 +1,13 @@ import sys def setup(core, actor, buff): + return + +def add(core, actor, buff): core.skillModService.addSkillMod(actor, 'debuff_purge', 2) return -def removeBuff(core, actor, buff): +def remove(core, actor, buff): core.skillModService.deductSkillMod(actor, 'debuff_purge', 2) + return \ No newline at end of file diff --git a/scripts/buffs/of_vortex_bleed_1.py b/scripts/buffs/of_vortex_bleed_1.py index e1095bbc..188e61a7 100644 --- a/scripts/buffs/of_vortex_bleed_1.py +++ b/scripts/buffs/of_vortex_bleed_1.py @@ -1,9 +1,12 @@ import sys def setup(core, actor, buff): + return + +def add(core, actor, buff): core.skillModService.addSkillMod(actor, 'dot_bleed', 30) return -def removeBuff(core, actor, buff): +def remove(core, actor, buff): core.skillModService.deductSkillMod(actor, 'dot_bleed', 30) return \ No newline at end of file diff --git a/scripts/buffs/of_vortex_bleed_2.py b/scripts/buffs/of_vortex_bleed_2.py index cc0b1590..9a2bb14b 100644 --- a/scripts/buffs/of_vortex_bleed_2.py +++ b/scripts/buffs/of_vortex_bleed_2.py @@ -1,9 +1,12 @@ import sys def setup(core, actor, buff): + return + +def add(core, actor, buff): core.skillModService.addSkillMod(actor, 'dot_bleed', 44) return -def removeBuff(core, actor, buff): +def remove(core, actor, buff): core.skillModService.deductSkillMod(actor, 'dot_bleed', 44) return \ No newline at end of file diff --git a/scripts/buffs/of_vortex_bleed_3.py b/scripts/buffs/of_vortex_bleed_3.py index 12c3f4cd..711ac6ef 100644 --- a/scripts/buffs/of_vortex_bleed_3.py +++ b/scripts/buffs/of_vortex_bleed_3.py @@ -1,9 +1,12 @@ import sys def setup(core, actor, buff): + return + +def add(core, actor, buff): core.skillModService.addSkillMod(actor, 'dot_bleed', 58) return -def removeBuff(core, actor, buff): +def remove(core, actor, buff): core.skillModService.deductSkillMod(actor, 'dot_bleed', 58) return \ No newline at end of file diff --git a/scripts/buffs/of_vortex_bleed_4.py b/scripts/buffs/of_vortex_bleed_4.py index 9d2c2648..a6b25916 100644 --- a/scripts/buffs/of_vortex_bleed_4.py +++ b/scripts/buffs/of_vortex_bleed_4.py @@ -1,9 +1,12 @@ import sys def setup(core, actor, buff): + return + +def add(core, actor, buff): core.skillModService.addSkillMod(actor, 'dot_bleed', 72) return -def removeBuff(core, actor, buff): +def remove(core, actor, buff): core.skillModService.deductSkillMod(actor, 'dot_bleed', 72) return \ No newline at end of file diff --git a/scripts/buffs/of_vortex_bleed_5.py b/scripts/buffs/of_vortex_bleed_5.py index 760cc493..20f90a7f 100644 --- a/scripts/buffs/of_vortex_bleed_5.py +++ b/scripts/buffs/of_vortex_bleed_5.py @@ -1,9 +1,12 @@ import sys def setup(core, actor, buff): + return + +def add(core, actor, buff): core.skillModService.addSkillMod(actor, 'dot_bleed', 90) return -def removeBuff(core, actor, buff): +def remove(core, actor, buff): core.skillModService.deductSkillMod(actor, 'dot_bleed', 90) return \ No newline at end of file diff --git a/scripts/buffs/of_vortex_root.py b/scripts/buffs/of_vortex_root.py index 5048a0be..42418564 100644 --- a/scripts/buffs/of_vortex_root.py +++ b/scripts/buffs/of_vortex_root.py @@ -1,9 +1,12 @@ import sys def setup(core, actor, buff): - core.skillModService.addSkillMod(actor, 'movement', 0) + return + +def add(core, actor, buff): + core.skillModService.deductSkillMod(actor, 'movement', 10) return -def removeBuff(core, actor, buff): - core.skillModService.deductSkillMod(actor, 'movement', 10) +def remove(core, actor, buff): + core.skillModService.addSkillMod(actor, 'movement', 10) return \ No newline at end of file diff --git a/scripts/buffs/poisoned.py b/scripts/buffs/poisoned.py index e09c02e5..c60417a0 100644 --- a/scripts/buffs/poisoned.py +++ b/scripts/buffs/poisoned.py @@ -2,7 +2,10 @@ import sys def setup(core, actor, buff): return + +def add(core, actor, buff): + return -def removeBuff(core, actor, buff): +def remove(core, actor, buff): return \ No newline at end of file diff --git a/scripts/buffs/proc_old_dark_jedi_gift.py b/scripts/buffs/proc_old_dark_jedi_gift.py index e09c02e5..c60417a0 100644 --- a/scripts/buffs/proc_old_dark_jedi_gift.py +++ b/scripts/buffs/proc_old_dark_jedi_gift.py @@ -2,7 +2,10 @@ import sys def setup(core, actor, buff): return + +def add(core, actor, buff): + return -def removeBuff(core, actor, buff): +def remove(core, actor, buff): return \ No newline at end of file diff --git a/scripts/buffs/proc_old_light_jedi_gift.py b/scripts/buffs/proc_old_light_jedi_gift.py new file mode 100644 index 00000000..c60417a0 --- /dev/null +++ b/scripts/buffs/proc_old_light_jedi_gift.py @@ -0,0 +1,11 @@ +import sys + +def setup(core, actor, buff): + return + +def add(core, actor, buff): + return + +def remove(core, actor, buff): + return + \ No newline at end of file diff --git a/scripts/buffs/saberblock.py b/scripts/buffs/saberblock.py index 15962ce9..3386a66a 100644 --- a/scripts/buffs/saberblock.py +++ b/scripts/buffs/saberblock.py @@ -1,10 +1,13 @@ import sys def setup(core, actor, buff): + return + +def add(core, actor, buff): core.skillModService.addSkillMod(actor, 'display_only_parry', 1000 + (actor.getSkillModBase('expertise_saber_block') * 100)) return -def removeBuff(core, actor, buff): +def remove(core, actor, buff): core.skillModService.deductSkillMod(actor, 'display_only_parry', 1000 + (actor.getSkillModBase('expertise_saber_block') * 100)) return \ No newline at end of file diff --git a/scripts/buffs/set_bonus_bh_dps_1.py b/scripts/buffs/set_bonus_bh_dps_1.py deleted file mode 100644 index 58d3ed08..00000000 --- a/scripts/buffs/set_bonus_bh_dps_1.py +++ /dev/null @@ -1,9 +0,0 @@ -import sys - -def setup(core, actor, buff): - core.skillModService.addSkillMod(actor, 'expertise_action_line_dm', 5) - return - -def removeBuff(core, actor, buff): - core.skillModService.deductSkillMod(actor, 'expertise_action_line_dm', 5) - return \ No newline at end of file diff --git a/scripts/buffs/set_bonus_bh_dps_2.py b/scripts/buffs/set_bonus_bh_dps_2.py deleted file mode 100644 index cf463a7a..00000000 --- a/scripts/buffs/set_bonus_bh_dps_2.py +++ /dev/null @@ -1,11 +0,0 @@ -import sys - -def setup(core, actor, buff): - core.skillModService.addSkillMod(actor, 'expertise_action_line_dm', 5) - core.skillModService.addSkillMod(actor, 'expertise_buff_duration_line_bh_return_fire' , 5) - return - -def removeBuff(core, actor, buff): - core.skillModService.deductSkillMod(actor, 'expertise_action_line_dm', 5) - core.skillModService.deductSkillMod(actor, 'expertise_buff_duration_line_bh_return_fire' , 5) - return \ No newline at end of file diff --git a/scripts/buffs/set_bonus_bh_dps_3.py b/scripts/buffs/set_bonus_bh_dps_3.py deleted file mode 100644 index 06bcee28..00000000 --- a/scripts/buffs/set_bonus_bh_dps_3.py +++ /dev/null @@ -1,17 +0,0 @@ -import sys - -def setup(core, actor, buff): - core.skillModService.addSkillMod(actor, 'expertise_action_line_dm', 10) - core.skillModService.addSkillMod(actor, 'expertise_action_line_dm_crit', 10) - core.skillModService.addSkillMod(actor, 'expertise_buff_duration_line_bh_return_fire' , 10) - core.skillModService.addSkillMod(actor, 'expertise_cooldown_line_dm' , 10) - core.skillModService.addSkillMod(actor, 'expertise_cooldown_line_bh_return_fire' , 750) - return - -def removeBuff(core, actor, buff): - core.skillModService.deductSkillMod(actor, 'expertise_action_line_dm', 10) - core.skillModService.deductSkillMod(actor, 'expertise_action_line_dm_crit', 10) - core.skillModService.deductSkillMod(actor, 'expertise_buff_duration_line_bh_return_fire' , 10) - core.skillModService.deductSkillMod(actor, 'expertise_cooldown_line_dm' , 10) - core.skillModService.deductSkillMod(actor, 'expertise_cooldown_line_bh_return_fire' , 750) - return \ No newline at end of file diff --git a/scripts/buffs/set_bonus_bh_utility_a_1.py b/scripts/buffs/set_bonus_bh_utility_a_1.py deleted file mode 100644 index 4f9e42e4..00000000 --- a/scripts/buffs/set_bonus_bh_utility_a_1.py +++ /dev/null @@ -1,9 +0,0 @@ -import sys - -def setup(core, actor, buff): - core.skillModService.addSkillMod(actor, 'expertise_cooldown_line_bh_flawless_strike', 15) - return - -def removeBuff(core, actor, buff): - core.skillModService.deductSkillMod(actor, 'expertise_cooldown_line_bh_flawless_strike', 15) - return \ No newline at end of file diff --git a/scripts/buffs/set_bonus_bh_utility_a_2.py b/scripts/buffs/set_bonus_bh_utility_a_2.py deleted file mode 100644 index 4f9e42e4..00000000 --- a/scripts/buffs/set_bonus_bh_utility_a_2.py +++ /dev/null @@ -1,9 +0,0 @@ -import sys - -def setup(core, actor, buff): - core.skillModService.addSkillMod(actor, 'expertise_cooldown_line_bh_flawless_strike', 15) - return - -def removeBuff(core, actor, buff): - core.skillModService.deductSkillMod(actor, 'expertise_cooldown_line_bh_flawless_strike', 15) - return \ No newline at end of file diff --git a/scripts/buffs/set_bonus_bh_utility_a_3.py b/scripts/buffs/set_bonus_bh_utility_a_3.py deleted file mode 100644 index e98992f3..00000000 --- a/scripts/buffs/set_bonus_bh_utility_a_3.py +++ /dev/null @@ -1,10 +0,0 @@ -import sys - -def setup(core, actor, buff): - core.skillModService.addSkillMod(actor, 'expertise_cooldown_line_bh_flawless_strike', 30) - return - -def removeBuff(core, actor, buff): - core.skillModService.deductSkillMod(actor, 'expertise_cooldown_line_bh_flawless_strike', 30) - return - \ No newline at end of file diff --git a/scripts/buffs/set_bonus_bh_utility_b_1.py b/scripts/buffs/set_bonus_bh_utility_b_1.py deleted file mode 100644 index 0f4597fe..00000000 --- a/scripts/buffs/set_bonus_bh_utility_b_1.py +++ /dev/null @@ -1,9 +0,0 @@ -import sys - -def setup(core, actor, buff): - core.skillModService.addSkillMod(actor, 'fast_attack_line_dm_cc', 5) - return - -def removeBuff(core, actor, buff): - core.skillModService.deductSkillMod(actor, 'fast_attack_line_dm_cc', 5) - return \ No newline at end of file diff --git a/scripts/buffs/set_bonus_bh_utility_b_2.py b/scripts/buffs/set_bonus_bh_utility_b_2.py deleted file mode 100644 index 945c2883..00000000 --- a/scripts/buffs/set_bonus_bh_utility_b_2.py +++ /dev/null @@ -1,13 +0,0 @@ -import sys - -def setup(core, actor, buff): - core.skillModService.addSkillMod(actor, 'fast_attack_line_dm_cc', 10) - core.skillModService.addSkillMod(actor, 'bh_dire_root', 20) - core.skillModService.addSkillMod(actor, 'bh_dire_snare', 20) - return - -def removeBuff(core, actor, buff): - core.skillModService.deductSkillMod(actor, 'fast_attack_line_dm_cc', 10) - core.skillModService.deductSkillMod(actor, 'bh_dire_root', 20) - core.skillModService.deductSkillMod(actor, 'bh_dire_snare', 20) - return \ No newline at end of file diff --git a/scripts/buffs/set_bonus_bh_utility_b_3.py b/scripts/buffs/set_bonus_bh_utility_b_3.py deleted file mode 100644 index d136c4ec..00000000 --- a/scripts/buffs/set_bonus_bh_utility_b_3.py +++ /dev/null @@ -1,13 +0,0 @@ -import sys - -def setup(core, actor, buff): - core.skillModService.addSkillMod(actor, 'fast_attack_line_dm_cc', 35) - core.skillModService.addSkillMod(actor, 'bh_dire_root', 45) - core.skillModService.addSkillMod(actor, 'bh_dire_snare', 45) - return - -def removeBuff(core, actor, buff): - core.skillModService.deductSkillMod(actor, 'fast_attack_line_dm_cc', 35) - core.skillModService.deductSkillMod(actor, 'bh_dire_root', 45) - core.skillModService.deductSkillMod(actor, 'bh_dire_snare', 45) - return \ No newline at end of file diff --git a/scripts/buffs/set_bonus_hero_1.py b/scripts/buffs/set_bonus_hero_1.py deleted file mode 100644 index d84a60fc..00000000 --- a/scripts/buffs/set_bonus_hero_1.py +++ /dev/null @@ -1,9 +0,0 @@ -import sys - -def setup(core, actor, buff): - core.skillModService.addSkillMod(actor, 'stamina_modified', 60) - return - -def removeBuff(core, actor, buff): - core.skillModService.deductSkillMod(actor, 'stamina_modified', 60) - return \ No newline at end of file diff --git a/scripts/buffs/set_bonus_hero_2.py b/scripts/buffs/set_bonus_hero_2.py deleted file mode 100644 index 6c87d81e..00000000 --- a/scripts/buffs/set_bonus_hero_2.py +++ /dev/null @@ -1,11 +0,0 @@ -import sys - -def setup(core, actor, buff): - core.skillModService.addSkillMod(actor, 'stamina_modified', 90) - core.skillModService.addSkillMod(actor, 'agility_modified', 90) - return - -def removeBuff(core, actor, buff): - core.skillModService.deductSkillMod(actor, 'stamina_modified', 90) - core.skillModService.deductSkillMod(actor, 'agility_modified', 90) - return \ No newline at end of file diff --git a/scripts/buffs/set_bonus_hero_3.py b/scripts/buffs/set_bonus_hero_3.py deleted file mode 100644 index 11c03f31..00000000 --- a/scripts/buffs/set_bonus_hero_3.py +++ /dev/null @@ -1,13 +0,0 @@ -import sys - -def setup(core, actor, buff): - core.skillModService.addSkillMod(actor, 'stamina_modified', 150) - core.skillModService.addSkillMod(actor, 'agility_modified', 150) - core.skillModService.addSkillMod(actor, 'constitution_modified', 150) - return - -def removeBuff(core, actor, buff): - core.skillModService.deductSkillMod(actor, 'stamina_modified', 150) - core.skillModService.deductSkillMod(actor, 'agility_modified', 150) - core.skillModService.deductSkillMod(actor, 'constitution_modified', 150) - return \ No newline at end of file diff --git a/scripts/buffs/sm_ae_dm_cc_1.py b/scripts/buffs/sm_ae_dm_cc_1.py index 18da7f78..2ee81fe9 100644 --- a/scripts/buffs/sm_ae_dm_cc_1.py +++ b/scripts/buffs/sm_ae_dm_cc_1.py @@ -1,9 +1,12 @@ import sys def setup(core, actor, buff): - actor.setSpeedMultiplierBase(1) + return + +def add(core, actor, buff): + core.skillModService.deductSkillMod(actor, 'movement', 5) return -def removeBuff(core, actor, buff): - actor.setSpeedMultiplierBase(1) +def remove(core, actor, buff): + core.skillModService.addSkillMod(actor, 'movement', 5) return \ No newline at end of file diff --git a/scripts/buffs/sm_ae_dm_cc_2.py b/scripts/buffs/sm_ae_dm_cc_2.py index 18da7f78..2ee81fe9 100644 --- a/scripts/buffs/sm_ae_dm_cc_2.py +++ b/scripts/buffs/sm_ae_dm_cc_2.py @@ -1,9 +1,12 @@ import sys def setup(core, actor, buff): - actor.setSpeedMultiplierBase(1) + return + +def add(core, actor, buff): + core.skillModService.deductSkillMod(actor, 'movement', 5) return -def removeBuff(core, actor, buff): - actor.setSpeedMultiplierBase(1) +def remove(core, actor, buff): + core.skillModService.addSkillMod(actor, 'movement', 5) return \ No newline at end of file diff --git a/scripts/buffs/sm_ae_dm_cc_3.py b/scripts/buffs/sm_ae_dm_cc_3.py index 18da7f78..2ee81fe9 100644 --- a/scripts/buffs/sm_ae_dm_cc_3.py +++ b/scripts/buffs/sm_ae_dm_cc_3.py @@ -1,9 +1,12 @@ import sys def setup(core, actor, buff): - actor.setSpeedMultiplierBase(1) + return + +def add(core, actor, buff): + core.skillModService.deductSkillMod(actor, 'movement', 5) return -def removeBuff(core, actor, buff): - actor.setSpeedMultiplierBase(1) +def remove(core, actor, buff): + core.skillModService.addSkillMod(actor, 'movement', 5) return \ No newline at end of file diff --git a/scripts/buffs/sm_ae_dm_cc_4.py b/scripts/buffs/sm_ae_dm_cc_4.py index 18da7f78..2ee81fe9 100644 --- a/scripts/buffs/sm_ae_dm_cc_4.py +++ b/scripts/buffs/sm_ae_dm_cc_4.py @@ -1,9 +1,12 @@ import sys def setup(core, actor, buff): - actor.setSpeedMultiplierBase(1) + return + +def add(core, actor, buff): + core.skillModService.deductSkillMod(actor, 'movement', 5) return -def removeBuff(core, actor, buff): - actor.setSpeedMultiplierBase(1) +def remove(core, actor, buff): + core.skillModService.addSkillMod(actor, 'movement', 5) return \ No newline at end of file diff --git a/scripts/buffs/sm_ae_dm_cc_5.py b/scripts/buffs/sm_ae_dm_cc_5.py index 18da7f78..2ee81fe9 100644 --- a/scripts/buffs/sm_ae_dm_cc_5.py +++ b/scripts/buffs/sm_ae_dm_cc_5.py @@ -1,9 +1,12 @@ import sys def setup(core, actor, buff): - actor.setSpeedMultiplierBase(1) + return + +def add(core, actor, buff): + core.skillModService.deductSkillMod(actor, 'movement', 5) return -def removeBuff(core, actor, buff): - actor.setSpeedMultiplierBase(1) +def remove(core, actor, buff): + core.skillModService.addSkillMod(actor, 'movement', 5) return \ No newline at end of file diff --git a/scripts/buffs/sm_ae_dm_cc_6.py b/scripts/buffs/sm_ae_dm_cc_6.py index 18da7f78..2ee81fe9 100644 --- a/scripts/buffs/sm_ae_dm_cc_6.py +++ b/scripts/buffs/sm_ae_dm_cc_6.py @@ -1,9 +1,12 @@ import sys def setup(core, actor, buff): - actor.setSpeedMultiplierBase(1) + return + +def add(core, actor, buff): + core.skillModService.deductSkillMod(actor, 'movement', 5) return -def removeBuff(core, actor, buff): - actor.setSpeedMultiplierBase(1) +def remove(core, actor, buff): + core.skillModService.addSkillMod(actor, 'movement', 5) return \ No newline at end of file diff --git a/scripts/buffs/sm_pistol_whip_1.py b/scripts/buffs/sm_pistol_whip_1.py index 5537d303..f83a6829 100644 --- a/scripts/buffs/sm_pistol_whip_1.py +++ b/scripts/buffs/sm_pistol_whip_1.py @@ -1,9 +1,12 @@ import sys def setup(core, actor, buff): + return + +def add(core, actor, buff): core.skillModService.addSkillMod(actor, 'sm_pistol_whip', 0) return -def removeBuff(core, actor, buff): +def remove(core, actor, buff): core.skillModService.deductSkillMod(actor, 'sm_pistol_whip', 0) return \ No newline at end of file diff --git a/scripts/buffs/sp_burst_shadows.py b/scripts/buffs/sp_burst_shadows.py new file mode 100644 index 00000000..1047f8fd --- /dev/null +++ b/scripts/buffs/sp_burst_shadows.py @@ -0,0 +1,15 @@ +import sys + +def setup(core, actor, buff): + return + +def add(core, actor, buff): + core.skillModService.addSkillMod(actor, 'movement', 8) + + return + +def remove(core, actor, buff): + core.skillModService.deductSkillMod(actor, 'movement', 8) + + + return diff --git a/scripts/collections/col_entertainer_01.py b/scripts/collections/col_entertainer_01.py new file mode 100644 index 00000000..100fa53e --- /dev/null +++ b/scripts/collections/col_entertainer_01.py @@ -0,0 +1,12 @@ +from java.lang import System +import sys + +def modify(core, actor, count): + return + +def complete(core, actor, collection): + ghost = actor.getSlottedObject('ghost') + + actor.sendSystemMessage('@collection_n:col_entertainer_01_finished', 0) + ghost.addAbility('bm_dancing_pet_entertainer') + return \ No newline at end of file diff --git a/scripts/collections/exploration_badges.py b/scripts/collections/exploration_badges.py new file mode 100644 index 00000000..d864c169 --- /dev/null +++ b/scripts/collections/exploration_badges.py @@ -0,0 +1,76 @@ +import sys +import services.collections.CollectionService + + +def setup(collectionService): + +#Corellia + collectionService.registerExplorationBadge('corellia', 'bdg_exp_cor_rogue_corsec_base', 5175, 1644, 64) + collectionService.registerExplorationBadge('corellia', 'bdg_exp_cor_tyrena_theater', -5418, -6248, 64) + collectionService.registerExplorationBadge('corellia', 'bdg_exp_cor_bela_vistal_fountain', 6760, -5617, 32) + collectionService.registerExplorationBadge('corellia', 'bdg_exp_cor_rebel_hideout', -6530, 5967, 64) + collectionService.registerExplorationBadge('corellia', 'exp_cor_agrilat_swamp', 1389, 3756, 64) + +#Dantooine + collectionService.registerExplorationBadge('dantooine', 'bdg_exp_dan_dantari_village1', -3862, -5706, 16) + collectionService.registerExplorationBadge('dantooine', 'bdg_exp_dan_dantari_village2', -7156, -883, 32) + collectionService.registerExplorationBadge('dantooine', 'exp_dan_rebel_base', -6836, 5520, 32) + collectionService.registerExplorationBadge('dantooine', 'exp_dan_jedi_temple', 4195, 5203, 16) + +#Dathomir + collectionService.registerExplorationBadge('dathomir', 'exp_dat_tarpit', 668, -4835, 32) + collectionService.registerExplorationBadge('dathomir', 'exp_dat_sarlacc', -2101, 3165, 16) + collectionService.registerExplorationBadge('dathomir', 'exp_dat_escape_pod', -4437, 574, 32) + collectionService.registerExplorationBadge('dathomir', 'exp_dat_misty_falls_1', 3558, 1554, 32) + collectionService.registerExplorationBadge('dathomir', 'exp_dat_misty_falls_2', 3021, 1289, 32) + collectionService.registerExplorationBadge('dathomir', 'bdg_exp_dat_imp_prison', -6304, 753, 32) + collectionService.registerExplorationBadge('dathomir', 'bdg_exp_dat_crashed_ship', 5727, 1923, 32) + +#Endor + collectionService.registerExplorationBadge('endor', 'bdg_exp_end_ewok_tree_village', 4596, -2423, 32) + collectionService.registerExplorationBadge('endor', 'bdg_exp_end_ewok_lake_village', 1454, -3272, 32) + collectionService.registerExplorationBadge('endor', 'bdg_exp_end_dulok_village', 6051, -2477, 16) + collectionService.registerExplorationBadge('endor', 'bdg_exp_end_imp_outpost', -4628, -2273, 32) + +#Kashyyyk + collectionService.registerExplorationBadge('kashyyyk', 'exp_kash_kachirho_found', -660, -201, 64) + +#Lok + collectionService.registerExplorationBadge('lok', 'exp_lok_volcano', 3091, -4638, 32) + collectionService.registerExplorationBadge('lok', 'bdg_exp_lok_imp_outpost', -1814, -3086, 32) + collectionService.registerExplorationBadge('lok', 'bdg_exp_lok_kimogila_skeleton', 4562, -1156, 16) + +#Mustafar + collectionService.registerExplorationBadge('mustafar', 'exp_must_mustafar_found', 0, 0, 32) + +#Naboo + collectionService.registerExplorationBadge('naboo', 'exp_nab_gungan_sacred_place', -2066, -5423, 32) + collectionService.registerExplorationBadge('naboo', 'bdg_exp_nab_theed_falls_bottom', -4628, 4207, 32) + collectionService.registerExplorationBadge('naboo', 'bdg_exp_nab_deeja_falls_top', 5157, -1646, 32) + collectionService.registerExplorationBadge('naboo', 'bdg_exp_nab_amidalas_sandy_beach', -5828, -93, 32) + +#Rori + collectionService.registerExplorationBadge('rori', 'bdg_exp_ror_imp_camp', -5633, -5661, 32) + collectionService.registerExplorationBadge('rori', 'bdg_exp_ror_imp_hyperdrive_fac', -1130, 4544, 32) + collectionService.registerExplorationBadge('rori', 'bdg_exp_ror_rebel_outpost', 3664, -6501, 32) + collectionService.registerExplorationBadge('rori', 'bdg_exp_ror_kobala_spice_mine', 7371, 169, 32) + +#Talus + collectionService.registerExplorationBadge('talus', 'bdg_exp_tal_creature_village', 4133, 962, 32) + collectionService.registerExplorationBadge('talus', 'bdg_exp_tal_imp_base', -2184, 2405, 32) + collectionService.registerExplorationBadge('talus', 'bdg_exp_tal_imp_vs_reb_battle', -2452, 3846, 32) + collectionService.registerExplorationBadge('talus', 'bdg_exp_tal_aqualish_cave', -4425, -1414, 64) + +#Tatooine + collectionService.registerExplorationBadge('tatooine', 'exp_tat_lars_homestead', -2579, -5500, 32) + collectionService.registerExplorationBadge('tatooine', 'exp_tat_bens_hut', -4512, -2270, 16) + collectionService.registerExplorationBadge('tatooine', 'exp_tat_sarlacc_pit', -6176, -3372, 32) + collectionService.registerExplorationBadge('tatooine', 'exp_tat_escape_pod', -3931, -4397, 32) + collectionService.registerExplorationBadge('tatooine', 'exp_tat_krayt_skeleton', -4632, -4346, 16) + collectionService.registerExplorationBadge('tatooine', 'exp_tat_krayt_graveyard', 7396, 4478, 64) + collectionService.registerExplorationBadge('tatooine', 'exp_tat_tusken_pool', -3966, 6267, 32) + +#Yavin + collectionService.registerExplorationBadge('yavin4', 'exp_yav_temple_exar_kun', 5076, 5537, 32) + collectionService.registerExplorationBadge('yavin4', 'exp_yav_temple_blueleaf', -875, -2047, 32) + collectionService.registerExplorationBadge('yavin4', 'exp_yav_temple_woolamander', 519, -646, 32) diff --git a/scripts/collections/profession_master.py b/scripts/collections/profession_master.py new file mode 100644 index 00000000..dbd6e1e0 --- /dev/null +++ b/scripts/collections/profession_master.py @@ -0,0 +1,60 @@ +import sys + +def bounty_hunter_1a(core, actor): + core.collectionService.addCollection(actor, "new_prof_bountyhunter_master") + return + +def commando_1a(core, actor): + core.collectionService.addCollection(actor, "new_prof_commando_master") + return + +def entertainer_1a(core, actor): + core.collectionService.addCollection(actor, "new_prof_social_entertainer_master") + return + +def force_sensitive_1a(core, actor): + core.collectionService.addCollection(actor, "new_prof_jedi_master") + return + +def medic_1a(core, actor): + core.collectionService.addCollection(actor, "new_prof_medic_master") + return + +def officer_1a(core, actor): + core.collectionService.addCollection(actor, "new_prof_officer_master") + return + +def smuggler_1a(core, actor): + core.collectionService.addCollection(actor, "new_prof_officer_master") + return + +def spy_1a(core, actor): + core.collectionService.addCollection(actor, "new_prof_spy_master") + return + +def trader_0a(core, actor): + core.collectionService.addCollection(actor, "new_prof_crafting_merchant_master") + core.collectionService.addCollection(actor, "new_prof_crafting_artisan_master") + core.collectionService.addCollection(actor, "new_prof_crafting_chef_master") + core.collectionService.addCollection(actor, "new_prof_crafting_tailor_master") + return + +def trader_0b(core, actor): + core.collectionService.addCollection(actor, "new_prof_crafting_merchant_master") + core.collectionService.addCollection(actor, "new_prof_crafting_artisan_master") + core.collectionService.addCollection(actor, "new_prof_crafting_architect_master") + return + +def trader_0c(core, actor): + core.collectionService.addCollection(actor, "new_prof_crafting_merchant_master") + core.collectionService.addCollection(actor, "new_prof_crafting_artisan_master") + core.collectionService.addCollection(actor, "new_prof_crafting_armorsmith_master") + core.collectionService.addCollection(actor, "new_prof_crafting_weaponsmith_master") + return + +def trader_0d(core, actor): + core.collectionService.addCollection(actor, "new_prof_crafting_merchant_master") + core.collectionService.addCollection(actor, "new_prof_crafting_artisan_master") + core.collectionService.addCollection(actor, "new_prof_crafting_droidengineer_master") + return + \ No newline at end of file diff --git a/scripts/commands/addfriend.py b/scripts/commands/addfriend.py index dbbd0859..c612261d 100644 --- a/scripts/commands/addfriend.py +++ b/scripts/commands/addfriend.py @@ -5,6 +5,12 @@ def setup(): def run(core, actor, target, commandString): actorGhost = actor.getSlottedObject("ghost") + chatSrvc = core.chatService - chatSrvc.addFriend(actorGhost, commandString, 1) + if chatSrvc and actorGhost and commandString: + if actorGhost.getFriendList().contains(commandString.split(" ")[0].lower()): + actor.sendSystemMessage(commandString.split(" ")[0].lower() + ' is already in your friend list.', 0) + return + else: + chatSrvc.addFriend(actorGhost, commandString) return \ No newline at end of file diff --git a/scripts/commands/addignore.py b/scripts/commands/addignore.py new file mode 100644 index 00000000..04b1ca6b --- /dev/null +++ b/scripts/commands/addignore.py @@ -0,0 +1,19 @@ +import sys + +def setup(): + return + +def run(core, actor, target, commandString): + actorGhost = actor.getSlottedObject("ghost") + chatSrvc = core.chatService + + if not actorGhost and chatSrvc and commandString: + return + + if actorGhost.getIgnoreList().contains(commandString.split(" ")[0].lower()): + actor.sendSystemMessage(commandString.split(' ')[0].lower() + ' is already in your ignore list.', 0) + return + + chatSrvc.addToIgnoreList(actor, commandString) + + return \ No newline at end of file diff --git a/scripts/commands/auction.py b/scripts/commands/auction.py new file mode 100644 index 00000000..fe744e57 --- /dev/null +++ b/scripts/commands/auction.py @@ -0,0 +1,11 @@ +import sys + +def setup(): + return + +def run(core, actor, target, commandString): + room = core.chatService.getChatRoomByAddress('SWG.' + core.getGalaxyName() + '.' + 'Auction') + + if actor.getSlottedObject('ghost').isMemberOfChannel(room.getRoomId()): + core.chatService.sendChatRoomMessage(actor, room.getRoomId(), 0, commandString) + return \ No newline at end of file diff --git a/scripts/commands/bandflourish.py b/scripts/commands/bandflourish.py new file mode 100644 index 00000000..446ceb72 --- /dev/null +++ b/scripts/commands/bandflourish.py @@ -0,0 +1,51 @@ +import sys + +def setup(): + return + +def run(core, actor, target, commandString): + + if len(commandString) <= 0: + actor.sendSystemMessage('@performance:flourish_not_valid', 0) + return + + if commandString == 'on': + actor.setAcceptBandflourishes(1) + actor.sendSystemMessage('@performance:band_flourish_status_on', 0) + return + if commandString == 'off': + actor.setAcceptBandflourishes(0) + actor.sendSystemMessage('@performance:band_flourish_status_off', 0) + return + + try: + flourish = int(commandString) + except ValueError: + actor.sendSystemMessage('@performance:flourish_not_valid', 0) + return + + if flourish < 1 or flourish > 9: + actor.sendSystemMessage('@performance:flourish_not_valid', 0) + return + + if actor.getPerformanceId() <= 0: + actor.sendSystemMessage('@performance:flourish_not_performing', 0) + return + + if actor.getAcceptBandflourishes(): + actor.sendSystemMessage('@performance:flourish_perform_band_self', 0) + core.entertainmentService.performFlourish(actor, flourish) + + group = core.objectService.getObject(actor.getGroupId()) + if not group: + return + + for creature in group.getMemberList(): + if creature == actor: + continue + if creature.getAcceptBandflourishes(): + creature.sendSystemMessage('@performance:flourish_perform_band_member', 0) + core.entertainmentService.performFlourish(creature, flourish) + return + + diff --git a/scripts/commands/bh_armor_sprint_1.py b/scripts/commands/bh_armor_sprint_1.py new file mode 100644 index 00000000..22439323 --- /dev/null +++ b/scripts/commands/bh_armor_sprint_1.py @@ -0,0 +1,8 @@ +import sys + +def setup(core, actor, buff): + core.buffService.addBuffToCreature(actor, 'bh_power_sprint_1', actor) + return + +def run(core, actor, target, commandString): + return \ No newline at end of file diff --git a/scripts/commands/bh_cover_1.py b/scripts/commands/bh_cover_1.py new file mode 100644 index 00000000..8875a673 --- /dev/null +++ b/scripts/commands/bh_cover_1.py @@ -0,0 +1,8 @@ +import sys + +def setup(core, actor, buff): + return + +def run(core, actor, target, commandString): + core.buffService.addBuffToCreature(actor, 'bh_cover_1', actor) + return \ No newline at end of file diff --git a/scripts/commands/bh_shields_1.py b/scripts/commands/bh_shields_1.py new file mode 100644 index 00000000..1bf27a70 --- /dev/null +++ b/scripts/commands/bh_shields_1.py @@ -0,0 +1,10 @@ +import sys + +def setup(core, actor, target, command): + return + +def run(core, actor, target, commandString): + core.buffService.addBuffToCreature(actor, 'bh_shields', actor) + core.buffService.addBuffToCreature(actor, 'bh_shields_charged', actor) + core.buffService.addBuffToCreature(actor, 'bh_shields_handler', actor) + return \ No newline at end of file diff --git a/scripts/commands/boardshuttle.py b/scripts/commands/boardshuttle.py index b452c65d..398a4674 100644 --- a/scripts/commands/boardshuttle.py +++ b/scripts/commands/boardshuttle.py @@ -1,3 +1,4 @@ +from resources.common import Console import sys def setup(): @@ -8,24 +9,34 @@ def run(core, actor, target, commandString): ticketList = trvSvc.getTicketList(actor) nearestPoint = trvSvc.getNearestTravelPoint(actor) - print (nearestPoint.getName()) - if nearestPoint.isShuttleAvailable: - print ('inside nearestPoint if') + #print (nearestPoint.getName()) + + if nearestPoint.isShuttleAvailable() is True: + if ticketList.size() >= 1: - print ('inside list >= 1') trvSvc.sendTicketWindow(actor, target) - print ('sent ticket window') return elif ticketList.isEmpty: actor.sendSystemMessage('You do not have a ticket to board this shuttle.', 0) return - return - + + elif nearestPoint.isShuttleLanding() is True: + actor.sendSystemMessage('The next shuttle is about to begin boarding.', 0) + return else: - actor.sendSystemMessage('The next shuttle will arrive in 60 seconds.', 0) - return + # We don't want the remaining time to show as soon as the shuttle leaves, instead, we want an unavilable message. + if nearestPoint.isShuttleAvailable() is False and nearestPoint.isShuttleDeparting() is True: + actor.sendSystemMessage('@travel:shuttle_not_available', 0) + return + elif nearestPoint.getSecondsRemaining() <= 0: + actor.sendSystemMessage('The next shuttle is about to begin boarding.', 0) + return + else: + actor.sendSystemMessage('The next shuttle will arrive in ' + str(nearestPoint.getSecondsRemaining()) + ' seconds.', 0) + return + return return # NOTE: In NGE video from Jan. 4th, 2010, ticket purchase window is shown with just 1 ticket and does not # automatically transport the player. diff --git a/scripts/commands/broadcast.py b/scripts/commands/broadcast.py new file mode 100644 index 00000000..afcaebef --- /dev/null +++ b/scripts/commands/broadcast.py @@ -0,0 +1,12 @@ +from services.sui import SUIWindow +from services.sui.SUIWindow import Trigger +from java.util import Vector +import sys + +def setup(): + return + +def run(core, actor, target, commandString): + core.chatService.broadcastGalaxy(commandString) + return + diff --git a/scripts/commands/centerstage.py b/scripts/commands/centerstage.py new file mode 100644 index 00000000..362738c5 --- /dev/null +++ b/scripts/commands/centerstage.py @@ -0,0 +1,14 @@ +import sys + +def setup(): + return + +def run(core, actor, target, commandString): + + if actor.getLevel() < 66: + actor.sendSystemMessage('@performance:effect_lack_skill_self', 0) + return + + if core.entertainmentService.performEffect(actor, 'CenterStage', 'clienteffect/entertainer_center_stage.cef', target) is True: + actor.sendSystemMessage('@performance:effect_perform_center_stage', 0) + return \ No newline at end of file diff --git a/scripts/commands/co_first_aid_training.py b/scripts/commands/co_first_aid_training.py new file mode 100644 index 00000000..18b9aedf --- /dev/null +++ b/scripts/commands/co_first_aid_training.py @@ -0,0 +1,8 @@ +import sys + +def setup(): + return + +def run(core, actor, target, commandString): + core.buffService.addBuffToCreature(actor, 'co_first_aid_training', actor) + return \ No newline at end of file diff --git a/scripts/commands/co_hw_dot.py b/scripts/commands/co_hw_dot.py index 7b9a8aac..ca43a28e 100644 --- a/scripts/commands/co_hw_dot.py +++ b/scripts/commands/co_hw_dot.py @@ -12,13 +12,10 @@ def run(core, actor, target, commandString): if not weapon: return - if not weapon.getWeaponType() == 12: - return - elementalType = weapon.getElementalType() commandName = '' - if elementalType == '@obj_attr_n:elemental_heat': + if elementalType == 'heat': if actor.getLevel() >= 58: commandName = 'co_hw_dot_fire_1' if actor.getLevel() >= 60: @@ -29,7 +26,7 @@ def run(core, actor, target, commandString): commandName = 'co_hw_dot_fire_4' if actor.getLevel() >= 90: commandName = 'co_hw_dot_fire_5' - elif elementalType == '@obj_attr_n:elemental_cold': + elif elementalType == 'cold': if actor.getLevel() >= 58: commandName = 'co_hw_dot_cold_1' if actor.getLevel() >= 60: @@ -40,7 +37,7 @@ def run(core, actor, target, commandString): commandName = 'co_hw_dot_cold_4' if actor.getLevel() >= 90: commandName = 'co_hw_dot_cold_5' - elif elementalType == '@obj_attr_n:elemental_acid': + elif elementalType == 'acid': if actor.getLevel() >= 58: commandName = 'co_hw_dot_acid_1' if actor.getLevel() >= 60: @@ -51,7 +48,7 @@ def run(core, actor, target, commandString): commandName = 'co_hw_dot_acid_4' if actor.getLevel() >= 90: commandName = 'co_hw_dot_acid_5' - elif elementalType == '@obj_attr_n:elemental_electricity': + elif elementalType == 'electricity': if actor.getLevel() >= 58: commandName = 'co_hw_dot_electrical_1' if actor.getLevel() >= 60: @@ -62,7 +59,7 @@ def run(core, actor, target, commandString): commandName = 'co_hw_dot_electrical_4' if actor.getLevel() >= 90: commandName = 'co_hw_dot_electrical_5' - elif elementalType == '@obj_attr_n:elemental_energy': + elif elementalType == 'energy': if actor.getLevel() >= 58: commandName = 'co_hw_dot_energy_1' if actor.getLevel() >= 60: @@ -73,7 +70,7 @@ def run(core, actor, target, commandString): commandName = 'co_hw_dot_energy_4' if actor.getLevel() >= 90: commandName = 'co_hw_dot_energy_5' - elif elementalType =='@obj_attr_n:elemental_kinetic': + elif elementalType =='kinetic': if actor.getLevel() >= 58: commandName = 'co_hw_dot_kinetic_1' if actor.getLevel() >= 60: diff --git a/scripts/commands/colorSwirl.py b/scripts/commands/colorSwirl.py new file mode 100644 index 00000000..cae47e72 --- /dev/null +++ b/scripts/commands/colorSwirl.py @@ -0,0 +1,14 @@ +import sys + +def setup(): + return + +def run(core, actor, target, commandString): + + if actor.getLevel() < 34: + actor.sendSystemMessage('@performance:effect_lack_skill_self', 0) + return + + if core.entertainmentService.performEffect(actor, 'ColorSwirl', 'clienteffect/entertainer_color_swirl.cef', target) is True: + actor.sendSystemMessage('@performance:effect_perform_color_swirl', 0) + return \ No newline at end of file diff --git a/scripts/commands/colorlights.py b/scripts/commands/colorlights.py new file mode 100644 index 00000000..0708c4ea --- /dev/null +++ b/scripts/commands/colorlights.py @@ -0,0 +1,39 @@ +import sys + +def setup(): + return + +def run(core, actor, target, commandString): + level = actor.getLevel() + command = 'ColorLights1' + effect = 'clienteffect/entertainer_color_lights_level_1.cef' + rLevel = 4 # minimum level to perform this effect + + if commandString is None or commandString == '': + + if level >= 50: + command = 'ColorLights3' + effect = 'clienteffect/entertainer_color_lights_level_3.cef' + + elif level >= 20: + command = 'ColorLights2' + effect = 'clienteffect/entertainer_color_lights_level_2.cef' + + if commandString is not None: + if commandString == '2': + command = 'ColorLights2' + effect = 'clienteffect/entertainer_color_lights_level_2.cef' + rLevel = 20 + + elif commandString == '3': + command = 'ColorLights3' + effect = 'clienteffect/entertainer_color_lights_level_3.cef' + rLevel = 50 + + if level < rLevel: + actor.sendSystemMessage('@performance:effect_lack_skill_self', 0) + return + + if core.entertainmentService.performEffect(actor, command, effect, target) is True: + actor.sendSystemMessage('@performance:effect_perform_color_lights', 0) + return \ No newline at end of file diff --git a/scripts/commands/combat/bh_dm_1.py b/scripts/commands/combat/bh_dm_1.py new file mode 100644 index 00000000..0506c54f --- /dev/null +++ b/scripts/commands/combat/bh_dm_1.py @@ -0,0 +1,12 @@ +import sys + +def setup(core, actor, target, command): + if actor.getSkillMod('expertise_cooldown_line_dm'): + command.setCooldown(command.getCooldown() - (actor.getSkillModBase('expertise_cooldown_line_dm')/10)) + + if actor.getSkillMod('expertise_damage_line_dm'): + command.setAddedDamage(command.getAddedDamage() + ((command.getAddedDamage()*actor.getSkillModBase('expertise_damage_line_dm'))/100)) + + return +def run(core, actor, target, commandString): + return \ No newline at end of file diff --git a/scripts/commands/combat/bh_dm_2.py b/scripts/commands/combat/bh_dm_2.py new file mode 100644 index 00000000..0506c54f --- /dev/null +++ b/scripts/commands/combat/bh_dm_2.py @@ -0,0 +1,12 @@ +import sys + +def setup(core, actor, target, command): + if actor.getSkillMod('expertise_cooldown_line_dm'): + command.setCooldown(command.getCooldown() - (actor.getSkillModBase('expertise_cooldown_line_dm')/10)) + + if actor.getSkillMod('expertise_damage_line_dm'): + command.setAddedDamage(command.getAddedDamage() + ((command.getAddedDamage()*actor.getSkillModBase('expertise_damage_line_dm'))/100)) + + return +def run(core, actor, target, commandString): + return \ No newline at end of file diff --git a/scripts/commands/combat/bh_dm_3.py b/scripts/commands/combat/bh_dm_3.py new file mode 100644 index 00000000..0506c54f --- /dev/null +++ b/scripts/commands/combat/bh_dm_3.py @@ -0,0 +1,12 @@ +import sys + +def setup(core, actor, target, command): + if actor.getSkillMod('expertise_cooldown_line_dm'): + command.setCooldown(command.getCooldown() - (actor.getSkillModBase('expertise_cooldown_line_dm')/10)) + + if actor.getSkillMod('expertise_damage_line_dm'): + command.setAddedDamage(command.getAddedDamage() + ((command.getAddedDamage()*actor.getSkillModBase('expertise_damage_line_dm'))/100)) + + return +def run(core, actor, target, commandString): + return \ No newline at end of file diff --git a/scripts/commands/combat/bh_dm_4.py b/scripts/commands/combat/bh_dm_4.py new file mode 100644 index 00000000..0506c54f --- /dev/null +++ b/scripts/commands/combat/bh_dm_4.py @@ -0,0 +1,12 @@ +import sys + +def setup(core, actor, target, command): + if actor.getSkillMod('expertise_cooldown_line_dm'): + command.setCooldown(command.getCooldown() - (actor.getSkillModBase('expertise_cooldown_line_dm')/10)) + + if actor.getSkillMod('expertise_damage_line_dm'): + command.setAddedDamage(command.getAddedDamage() + ((command.getAddedDamage()*actor.getSkillModBase('expertise_damage_line_dm'))/100)) + + return +def run(core, actor, target, commandString): + return \ No newline at end of file diff --git a/scripts/commands/combat/bh_dm_5.py b/scripts/commands/combat/bh_dm_5.py new file mode 100644 index 00000000..0506c54f --- /dev/null +++ b/scripts/commands/combat/bh_dm_5.py @@ -0,0 +1,12 @@ +import sys + +def setup(core, actor, target, command): + if actor.getSkillMod('expertise_cooldown_line_dm'): + command.setCooldown(command.getCooldown() - (actor.getSkillModBase('expertise_cooldown_line_dm')/10)) + + if actor.getSkillMod('expertise_damage_line_dm'): + command.setAddedDamage(command.getAddedDamage() + ((command.getAddedDamage()*actor.getSkillModBase('expertise_damage_line_dm'))/100)) + + return +def run(core, actor, target, commandString): + return \ No newline at end of file diff --git a/scripts/commands/combat/bh_dm_6.py b/scripts/commands/combat/bh_dm_6.py new file mode 100644 index 00000000..0506c54f --- /dev/null +++ b/scripts/commands/combat/bh_dm_6.py @@ -0,0 +1,12 @@ +import sys + +def setup(core, actor, target, command): + if actor.getSkillMod('expertise_cooldown_line_dm'): + command.setCooldown(command.getCooldown() - (actor.getSkillModBase('expertise_cooldown_line_dm')/10)) + + if actor.getSkillMod('expertise_damage_line_dm'): + command.setAddedDamage(command.getAddedDamage() + ((command.getAddedDamage()*actor.getSkillModBase('expertise_damage_line_dm'))/100)) + + return +def run(core, actor, target, commandString): + return \ No newline at end of file diff --git a/scripts/commands/combat/bh_dm_7.py b/scripts/commands/combat/bh_dm_7.py new file mode 100644 index 00000000..0506c54f --- /dev/null +++ b/scripts/commands/combat/bh_dm_7.py @@ -0,0 +1,12 @@ +import sys + +def setup(core, actor, target, command): + if actor.getSkillMod('expertise_cooldown_line_dm'): + command.setCooldown(command.getCooldown() - (actor.getSkillModBase('expertise_cooldown_line_dm')/10)) + + if actor.getSkillMod('expertise_damage_line_dm'): + command.setAddedDamage(command.getAddedDamage() + ((command.getAddedDamage()*actor.getSkillModBase('expertise_damage_line_dm'))/100)) + + return +def run(core, actor, target, commandString): + return \ No newline at end of file diff --git a/scripts/commands/combat/bh_dm_8.py b/scripts/commands/combat/bh_dm_8.py new file mode 100644 index 00000000..0506c54f --- /dev/null +++ b/scripts/commands/combat/bh_dm_8.py @@ -0,0 +1,12 @@ +import sys + +def setup(core, actor, target, command): + if actor.getSkillMod('expertise_cooldown_line_dm'): + command.setCooldown(command.getCooldown() - (actor.getSkillModBase('expertise_cooldown_line_dm')/10)) + + if actor.getSkillMod('expertise_damage_line_dm'): + command.setAddedDamage(command.getAddedDamage() + ((command.getAddedDamage()*actor.getSkillModBase('expertise_damage_line_dm'))/100)) + + return +def run(core, actor, target, commandString): + return \ No newline at end of file diff --git a/scripts/commands/combat/bh_dm_crit_1.py b/scripts/commands/combat/bh_dm_crit_1.py new file mode 100644 index 00000000..c12e2a2a --- /dev/null +++ b/scripts/commands/combat/bh_dm_crit_1.py @@ -0,0 +1,19 @@ +import sys + +def setup(core, actor, target, command): + if actor.getSkillMod('expertise_cooldown_line_dm_crit'): + command.setCooldown(command.getCooldown() - (actor.getSkillModBase('expertise_cooldown_line_dm_crit')/10)) + + if actor.getSkillMod('expertise_damage_line_dm_crit'): + command.setAddedDamage(command.getAddedDamage() + ((command.getAddedDamage()*actor.getSkillModBase('expertise_damage_line_dm_crit'))/100)) + + if actor.getSkillMod('expertise_action_line_dm_crit'): + command.setActionCost(command.getActionCost() - ((command.getActionCost()*actor.getSkillModBase('expertise_action_line_dm_crit'))/100)) + + if actor.getSkillMod('expertise_critical_line_dm_crit'): + command.setCriticalChance(command.getCriticalChance + actor.getSkillModBase('expertise_critical_line_dm_crit')) + + return + +def run(core, actor, target, commandString): + return \ No newline at end of file diff --git a/scripts/commands/combat/bh_dm_crit_2.py b/scripts/commands/combat/bh_dm_crit_2.py new file mode 100644 index 00000000..c12e2a2a --- /dev/null +++ b/scripts/commands/combat/bh_dm_crit_2.py @@ -0,0 +1,19 @@ +import sys + +def setup(core, actor, target, command): + if actor.getSkillMod('expertise_cooldown_line_dm_crit'): + command.setCooldown(command.getCooldown() - (actor.getSkillModBase('expertise_cooldown_line_dm_crit')/10)) + + if actor.getSkillMod('expertise_damage_line_dm_crit'): + command.setAddedDamage(command.getAddedDamage() + ((command.getAddedDamage()*actor.getSkillModBase('expertise_damage_line_dm_crit'))/100)) + + if actor.getSkillMod('expertise_action_line_dm_crit'): + command.setActionCost(command.getActionCost() - ((command.getActionCost()*actor.getSkillModBase('expertise_action_line_dm_crit'))/100)) + + if actor.getSkillMod('expertise_critical_line_dm_crit'): + command.setCriticalChance(command.getCriticalChance + actor.getSkillModBase('expertise_critical_line_dm_crit')) + + return + +def run(core, actor, target, commandString): + return \ No newline at end of file diff --git a/scripts/commands/combat/bh_dm_crit_3.py b/scripts/commands/combat/bh_dm_crit_3.py new file mode 100644 index 00000000..c12e2a2a --- /dev/null +++ b/scripts/commands/combat/bh_dm_crit_3.py @@ -0,0 +1,19 @@ +import sys + +def setup(core, actor, target, command): + if actor.getSkillMod('expertise_cooldown_line_dm_crit'): + command.setCooldown(command.getCooldown() - (actor.getSkillModBase('expertise_cooldown_line_dm_crit')/10)) + + if actor.getSkillMod('expertise_damage_line_dm_crit'): + command.setAddedDamage(command.getAddedDamage() + ((command.getAddedDamage()*actor.getSkillModBase('expertise_damage_line_dm_crit'))/100)) + + if actor.getSkillMod('expertise_action_line_dm_crit'): + command.setActionCost(command.getActionCost() - ((command.getActionCost()*actor.getSkillModBase('expertise_action_line_dm_crit'))/100)) + + if actor.getSkillMod('expertise_critical_line_dm_crit'): + command.setCriticalChance(command.getCriticalChance + actor.getSkillModBase('expertise_critical_line_dm_crit')) + + return + +def run(core, actor, target, commandString): + return \ No newline at end of file diff --git a/scripts/commands/combat/bh_dm_crit_4.py b/scripts/commands/combat/bh_dm_crit_4.py new file mode 100644 index 00000000..c12e2a2a --- /dev/null +++ b/scripts/commands/combat/bh_dm_crit_4.py @@ -0,0 +1,19 @@ +import sys + +def setup(core, actor, target, command): + if actor.getSkillMod('expertise_cooldown_line_dm_crit'): + command.setCooldown(command.getCooldown() - (actor.getSkillModBase('expertise_cooldown_line_dm_crit')/10)) + + if actor.getSkillMod('expertise_damage_line_dm_crit'): + command.setAddedDamage(command.getAddedDamage() + ((command.getAddedDamage()*actor.getSkillModBase('expertise_damage_line_dm_crit'))/100)) + + if actor.getSkillMod('expertise_action_line_dm_crit'): + command.setActionCost(command.getActionCost() - ((command.getActionCost()*actor.getSkillModBase('expertise_action_line_dm_crit'))/100)) + + if actor.getSkillMod('expertise_critical_line_dm_crit'): + command.setCriticalChance(command.getCriticalChance + actor.getSkillModBase('expertise_critical_line_dm_crit')) + + return + +def run(core, actor, target, commandString): + return \ No newline at end of file diff --git a/scripts/commands/combat/bh_dm_crit_5.py b/scripts/commands/combat/bh_dm_crit_5.py new file mode 100644 index 00000000..c12e2a2a --- /dev/null +++ b/scripts/commands/combat/bh_dm_crit_5.py @@ -0,0 +1,19 @@ +import sys + +def setup(core, actor, target, command): + if actor.getSkillMod('expertise_cooldown_line_dm_crit'): + command.setCooldown(command.getCooldown() - (actor.getSkillModBase('expertise_cooldown_line_dm_crit')/10)) + + if actor.getSkillMod('expertise_damage_line_dm_crit'): + command.setAddedDamage(command.getAddedDamage() + ((command.getAddedDamage()*actor.getSkillModBase('expertise_damage_line_dm_crit'))/100)) + + if actor.getSkillMod('expertise_action_line_dm_crit'): + command.setActionCost(command.getActionCost() - ((command.getActionCost()*actor.getSkillModBase('expertise_action_line_dm_crit'))/100)) + + if actor.getSkillMod('expertise_critical_line_dm_crit'): + command.setCriticalChance(command.getCriticalChance + actor.getSkillModBase('expertise_critical_line_dm_crit')) + + return + +def run(core, actor, target, commandString): + return \ No newline at end of file diff --git a/scripts/commands/combat/bh_dm_crit_6.py b/scripts/commands/combat/bh_dm_crit_6.py new file mode 100644 index 00000000..c12e2a2a --- /dev/null +++ b/scripts/commands/combat/bh_dm_crit_6.py @@ -0,0 +1,19 @@ +import sys + +def setup(core, actor, target, command): + if actor.getSkillMod('expertise_cooldown_line_dm_crit'): + command.setCooldown(command.getCooldown() - (actor.getSkillModBase('expertise_cooldown_line_dm_crit')/10)) + + if actor.getSkillMod('expertise_damage_line_dm_crit'): + command.setAddedDamage(command.getAddedDamage() + ((command.getAddedDamage()*actor.getSkillModBase('expertise_damage_line_dm_crit'))/100)) + + if actor.getSkillMod('expertise_action_line_dm_crit'): + command.setActionCost(command.getActionCost() - ((command.getActionCost()*actor.getSkillModBase('expertise_action_line_dm_crit'))/100)) + + if actor.getSkillMod('expertise_critical_line_dm_crit'): + command.setCriticalChance(command.getCriticalChance + actor.getSkillModBase('expertise_critical_line_dm_crit')) + + return + +def run(core, actor, target, commandString): + return \ No newline at end of file diff --git a/scripts/commands/combat/bh_dm_crit_7.py b/scripts/commands/combat/bh_dm_crit_7.py new file mode 100644 index 00000000..c12e2a2a --- /dev/null +++ b/scripts/commands/combat/bh_dm_crit_7.py @@ -0,0 +1,19 @@ +import sys + +def setup(core, actor, target, command): + if actor.getSkillMod('expertise_cooldown_line_dm_crit'): + command.setCooldown(command.getCooldown() - (actor.getSkillModBase('expertise_cooldown_line_dm_crit')/10)) + + if actor.getSkillMod('expertise_damage_line_dm_crit'): + command.setAddedDamage(command.getAddedDamage() + ((command.getAddedDamage()*actor.getSkillModBase('expertise_damage_line_dm_crit'))/100)) + + if actor.getSkillMod('expertise_action_line_dm_crit'): + command.setActionCost(command.getActionCost() - ((command.getActionCost()*actor.getSkillModBase('expertise_action_line_dm_crit'))/100)) + + if actor.getSkillMod('expertise_critical_line_dm_crit'): + command.setCriticalChance(command.getCriticalChance + actor.getSkillModBase('expertise_critical_line_dm_crit')) + + return + +def run(core, actor, target, commandString): + return \ No newline at end of file diff --git a/scripts/commands/combat/bh_dm_crit_8.py b/scripts/commands/combat/bh_dm_crit_8.py new file mode 100644 index 00000000..c12e2a2a --- /dev/null +++ b/scripts/commands/combat/bh_dm_crit_8.py @@ -0,0 +1,19 @@ +import sys + +def setup(core, actor, target, command): + if actor.getSkillMod('expertise_cooldown_line_dm_crit'): + command.setCooldown(command.getCooldown() - (actor.getSkillModBase('expertise_cooldown_line_dm_crit')/10)) + + if actor.getSkillMod('expertise_damage_line_dm_crit'): + command.setAddedDamage(command.getAddedDamage() + ((command.getAddedDamage()*actor.getSkillModBase('expertise_damage_line_dm_crit'))/100)) + + if actor.getSkillMod('expertise_action_line_dm_crit'): + command.setActionCost(command.getActionCost() - ((command.getActionCost()*actor.getSkillModBase('expertise_action_line_dm_crit'))/100)) + + if actor.getSkillMod('expertise_critical_line_dm_crit'): + command.setCriticalChance(command.getCriticalChance + actor.getSkillModBase('expertise_critical_line_dm_crit')) + + return + +def run(core, actor, target, commandString): + return \ No newline at end of file diff --git a/scripts/commands/combat/bh_return_fire_command_1.py b/scripts/commands/combat/bh_return_fire_command_1.py new file mode 100644 index 00000000..9fb224c0 --- /dev/null +++ b/scripts/commands/combat/bh_return_fire_command_1.py @@ -0,0 +1,11 @@ +import sys + +def setup(core, actor, target, command): + if actor.getSkillMod('expertise_cooldown_line_bh_return_fire'): + command.setCooldown(command.getCooldown() - (actor.getSkillMod('expertise_cooldown_line_bh_return_fire').getBase()/10)) + return + +def run(core, actor, target, commandString): + core.buffService.addBuffToCreature(actor, 'bh_return_fire_1', actor) + return + \ No newline at end of file diff --git a/scripts/commands/combat/bh_sh_0.py b/scripts/commands/combat/bh_sh_0.py new file mode 100644 index 00000000..9281d703 --- /dev/null +++ b/scripts/commands/combat/bh_sh_0.py @@ -0,0 +1,8 @@ +import sys + +def setup(core, actor, target, command): + if actor.getSkillMod('expertise_cooldown_line_sh'): + command.setCooldown(command.getCooldown() - (actor.getSkillMod('expertise_cooldown_line_sh').getBase()/10)) + return +def run(core, actor, target, commandString): + return \ No newline at end of file diff --git a/scripts/commands/combat/bh_sh_1.py b/scripts/commands/combat/bh_sh_1.py new file mode 100644 index 00000000..9281d703 --- /dev/null +++ b/scripts/commands/combat/bh_sh_1.py @@ -0,0 +1,8 @@ +import sys + +def setup(core, actor, target, command): + if actor.getSkillMod('expertise_cooldown_line_sh'): + command.setCooldown(command.getCooldown() - (actor.getSkillMod('expertise_cooldown_line_sh').getBase()/10)) + return +def run(core, actor, target, commandString): + return \ No newline at end of file diff --git a/scripts/commands/combat/bh_sh_2.py b/scripts/commands/combat/bh_sh_2.py new file mode 100644 index 00000000..9281d703 --- /dev/null +++ b/scripts/commands/combat/bh_sh_2.py @@ -0,0 +1,8 @@ +import sys + +def setup(core, actor, target, command): + if actor.getSkillMod('expertise_cooldown_line_sh'): + command.setCooldown(command.getCooldown() - (actor.getSkillMod('expertise_cooldown_line_sh').getBase()/10)) + return +def run(core, actor, target, commandString): + return \ No newline at end of file diff --git a/scripts/commands/combat/bh_sh_3.py b/scripts/commands/combat/bh_sh_3.py new file mode 100644 index 00000000..9281d703 --- /dev/null +++ b/scripts/commands/combat/bh_sh_3.py @@ -0,0 +1,8 @@ +import sys + +def setup(core, actor, target, command): + if actor.getSkillMod('expertise_cooldown_line_sh'): + command.setCooldown(command.getCooldown() - (actor.getSkillMod('expertise_cooldown_line_sh').getBase()/10)) + return +def run(core, actor, target, commandString): + return \ No newline at end of file diff --git a/scripts/commands/combat/co_armor_cracker.py b/scripts/commands/combat/co_armor_cracker.py new file mode 100644 index 00000000..c065b7ca --- /dev/null +++ b/scripts/commands/combat/co_armor_cracker.py @@ -0,0 +1,9 @@ +import sys + +def setup(core, actor, target, command): + if actor.getSkillMod('expertise_cooldown_line_co_riddle_armor'): + command.setCooldown(command.getCooldown() - actor.getSkillMod('expertise_cooldown_line_co_riddle_armor').getBase()) + return + +def run(core, actor, target, commandString): + return \ No newline at end of file diff --git a/scripts/commands/combat/co_del_ae_cc_1_1.py b/scripts/commands/combat/co_del_ae_cc_1_1.py new file mode 100644 index 00000000..ad1f5ab5 --- /dev/null +++ b/scripts/commands/combat/co_del_ae_cc_1_1.py @@ -0,0 +1,15 @@ +import sys + +def setup(core, actor, target, command): + if actor.getSkillMod('expertise_area_size_line_co_grenade'): + command.setConeLength(command.getConeLength() + actor.getSkillMod('expertise_area_size_line_co_grenade').getBase()) + if actor.getSkillMod('expertise_damage_line_co_grenade'): + command.setAddedDamage(command.getAddedDamage() * (1 + (actor.getSkillMod('expertise_damage_line_co_grenade').getBase() / 100))) + if actor.getSkillMod('expertise_action_line_co_grenade'): + command.setActionCost(command.getActionCost() * (1 - (actor.getSkillMod('expertise_action_line_co_grenade').getBase() / 100))) + if actor.getSkillMod('expertise_delay_reduce_line_co_grenade'): + command.setDelayAttackInterval(command.getDelayAttackInterval() - 1) + return + +def run(core, actor, target, commandString): + return \ No newline at end of file diff --git a/scripts/commands/combat/co_del_ae_cc_1_2.py b/scripts/commands/combat/co_del_ae_cc_1_2.py new file mode 100644 index 00000000..ad1f5ab5 --- /dev/null +++ b/scripts/commands/combat/co_del_ae_cc_1_2.py @@ -0,0 +1,15 @@ +import sys + +def setup(core, actor, target, command): + if actor.getSkillMod('expertise_area_size_line_co_grenade'): + command.setConeLength(command.getConeLength() + actor.getSkillMod('expertise_area_size_line_co_grenade').getBase()) + if actor.getSkillMod('expertise_damage_line_co_grenade'): + command.setAddedDamage(command.getAddedDamage() * (1 + (actor.getSkillMod('expertise_damage_line_co_grenade').getBase() / 100))) + if actor.getSkillMod('expertise_action_line_co_grenade'): + command.setActionCost(command.getActionCost() * (1 - (actor.getSkillMod('expertise_action_line_co_grenade').getBase() / 100))) + if actor.getSkillMod('expertise_delay_reduce_line_co_grenade'): + command.setDelayAttackInterval(command.getDelayAttackInterval() - 1) + return + +def run(core, actor, target, commandString): + return \ No newline at end of file diff --git a/scripts/commands/combat/co_del_ae_cc_1_3.py b/scripts/commands/combat/co_del_ae_cc_1_3.py new file mode 100644 index 00000000..ad1f5ab5 --- /dev/null +++ b/scripts/commands/combat/co_del_ae_cc_1_3.py @@ -0,0 +1,15 @@ +import sys + +def setup(core, actor, target, command): + if actor.getSkillMod('expertise_area_size_line_co_grenade'): + command.setConeLength(command.getConeLength() + actor.getSkillMod('expertise_area_size_line_co_grenade').getBase()) + if actor.getSkillMod('expertise_damage_line_co_grenade'): + command.setAddedDamage(command.getAddedDamage() * (1 + (actor.getSkillMod('expertise_damage_line_co_grenade').getBase() / 100))) + if actor.getSkillMod('expertise_action_line_co_grenade'): + command.setActionCost(command.getActionCost() * (1 - (actor.getSkillMod('expertise_action_line_co_grenade').getBase() / 100))) + if actor.getSkillMod('expertise_delay_reduce_line_co_grenade'): + command.setDelayAttackInterval(command.getDelayAttackInterval() - 1) + return + +def run(core, actor, target, commandString): + return \ No newline at end of file diff --git a/scripts/commands/combat/co_del_ae_cc_2_1.py b/scripts/commands/combat/co_del_ae_cc_2_1.py new file mode 100644 index 00000000..ad1f5ab5 --- /dev/null +++ b/scripts/commands/combat/co_del_ae_cc_2_1.py @@ -0,0 +1,15 @@ +import sys + +def setup(core, actor, target, command): + if actor.getSkillMod('expertise_area_size_line_co_grenade'): + command.setConeLength(command.getConeLength() + actor.getSkillMod('expertise_area_size_line_co_grenade').getBase()) + if actor.getSkillMod('expertise_damage_line_co_grenade'): + command.setAddedDamage(command.getAddedDamage() * (1 + (actor.getSkillMod('expertise_damage_line_co_grenade').getBase() / 100))) + if actor.getSkillMod('expertise_action_line_co_grenade'): + command.setActionCost(command.getActionCost() * (1 - (actor.getSkillMod('expertise_action_line_co_grenade').getBase() / 100))) + if actor.getSkillMod('expertise_delay_reduce_line_co_grenade'): + command.setDelayAttackInterval(command.getDelayAttackInterval() - 1) + return + +def run(core, actor, target, commandString): + return \ No newline at end of file diff --git a/scripts/commands/combat/co_del_ae_cc_2_2.py b/scripts/commands/combat/co_del_ae_cc_2_2.py new file mode 100644 index 00000000..ad1f5ab5 --- /dev/null +++ b/scripts/commands/combat/co_del_ae_cc_2_2.py @@ -0,0 +1,15 @@ +import sys + +def setup(core, actor, target, command): + if actor.getSkillMod('expertise_area_size_line_co_grenade'): + command.setConeLength(command.getConeLength() + actor.getSkillMod('expertise_area_size_line_co_grenade').getBase()) + if actor.getSkillMod('expertise_damage_line_co_grenade'): + command.setAddedDamage(command.getAddedDamage() * (1 + (actor.getSkillMod('expertise_damage_line_co_grenade').getBase() / 100))) + if actor.getSkillMod('expertise_action_line_co_grenade'): + command.setActionCost(command.getActionCost() * (1 - (actor.getSkillMod('expertise_action_line_co_grenade').getBase() / 100))) + if actor.getSkillMod('expertise_delay_reduce_line_co_grenade'): + command.setDelayAttackInterval(command.getDelayAttackInterval() - 1) + return + +def run(core, actor, target, commandString): + return \ No newline at end of file diff --git a/scripts/commands/combat/co_del_ae_dm_1.py b/scripts/commands/combat/co_del_ae_dm_1.py new file mode 100644 index 00000000..ad1f5ab5 --- /dev/null +++ b/scripts/commands/combat/co_del_ae_dm_1.py @@ -0,0 +1,15 @@ +import sys + +def setup(core, actor, target, command): + if actor.getSkillMod('expertise_area_size_line_co_grenade'): + command.setConeLength(command.getConeLength() + actor.getSkillMod('expertise_area_size_line_co_grenade').getBase()) + if actor.getSkillMod('expertise_damage_line_co_grenade'): + command.setAddedDamage(command.getAddedDamage() * (1 + (actor.getSkillMod('expertise_damage_line_co_grenade').getBase() / 100))) + if actor.getSkillMod('expertise_action_line_co_grenade'): + command.setActionCost(command.getActionCost() * (1 - (actor.getSkillMod('expertise_action_line_co_grenade').getBase() / 100))) + if actor.getSkillMod('expertise_delay_reduce_line_co_grenade'): + command.setDelayAttackInterval(command.getDelayAttackInterval() - 1) + return + +def run(core, actor, target, commandString): + return \ No newline at end of file diff --git a/scripts/commands/combat/co_del_ae_dm_2.py b/scripts/commands/combat/co_del_ae_dm_2.py new file mode 100644 index 00000000..ad1f5ab5 --- /dev/null +++ b/scripts/commands/combat/co_del_ae_dm_2.py @@ -0,0 +1,15 @@ +import sys + +def setup(core, actor, target, command): + if actor.getSkillMod('expertise_area_size_line_co_grenade'): + command.setConeLength(command.getConeLength() + actor.getSkillMod('expertise_area_size_line_co_grenade').getBase()) + if actor.getSkillMod('expertise_damage_line_co_grenade'): + command.setAddedDamage(command.getAddedDamage() * (1 + (actor.getSkillMod('expertise_damage_line_co_grenade').getBase() / 100))) + if actor.getSkillMod('expertise_action_line_co_grenade'): + command.setActionCost(command.getActionCost() * (1 - (actor.getSkillMod('expertise_action_line_co_grenade').getBase() / 100))) + if actor.getSkillMod('expertise_delay_reduce_line_co_grenade'): + command.setDelayAttackInterval(command.getDelayAttackInterval() - 1) + return + +def run(core, actor, target, commandString): + return \ No newline at end of file diff --git a/scripts/commands/combat/co_del_ae_dm_3.py b/scripts/commands/combat/co_del_ae_dm_3.py new file mode 100644 index 00000000..ad1f5ab5 --- /dev/null +++ b/scripts/commands/combat/co_del_ae_dm_3.py @@ -0,0 +1,15 @@ +import sys + +def setup(core, actor, target, command): + if actor.getSkillMod('expertise_area_size_line_co_grenade'): + command.setConeLength(command.getConeLength() + actor.getSkillMod('expertise_area_size_line_co_grenade').getBase()) + if actor.getSkillMod('expertise_damage_line_co_grenade'): + command.setAddedDamage(command.getAddedDamage() * (1 + (actor.getSkillMod('expertise_damage_line_co_grenade').getBase() / 100))) + if actor.getSkillMod('expertise_action_line_co_grenade'): + command.setActionCost(command.getActionCost() * (1 - (actor.getSkillMod('expertise_action_line_co_grenade').getBase() / 100))) + if actor.getSkillMod('expertise_delay_reduce_line_co_grenade'): + command.setDelayAttackInterval(command.getDelayAttackInterval() - 1) + return + +def run(core, actor, target, commandString): + return \ No newline at end of file diff --git a/scripts/commands/combat/co_position_secured.py b/scripts/commands/combat/co_position_secured.py new file mode 100644 index 00000000..84e13b7a --- /dev/null +++ b/scripts/commands/combat/co_position_secured.py @@ -0,0 +1,9 @@ +from resources.objects import Buff +import sys + +def setup(core, actor, target, command): + return + +def run(core, actor, target, commandString): + return + \ No newline at end of file diff --git a/scripts/commands/combat/co_riddle_armor.py b/scripts/commands/combat/co_riddle_armor.py new file mode 100644 index 00000000..c065b7ca --- /dev/null +++ b/scripts/commands/combat/co_riddle_armor.py @@ -0,0 +1,9 @@ +import sys + +def setup(core, actor, target, command): + if actor.getSkillMod('expertise_cooldown_line_co_riddle_armor'): + command.setCooldown(command.getCooldown() - actor.getSkillMod('expertise_cooldown_line_co_riddle_armor').getBase()) + return + +def run(core, actor, target, commandString): + return \ No newline at end of file diff --git a/scripts/commands/combat/co_stand_fast.py b/scripts/commands/combat/co_stand_fast.py new file mode 100644 index 00000000..36b4a557 --- /dev/null +++ b/scripts/commands/combat/co_stand_fast.py @@ -0,0 +1,9 @@ +import sys + +def setup(core, actor, target, command): + if actor.getSkillMod('expertise_cooldown_line_co_stand_fast'): + command.setCooldown(command.getCooldown() - actor.getSkillMod('expertise_cooldown_line_co_stand_fast').getBase()) + return + +def run(core, actor, target, commandString): + return \ No newline at end of file diff --git a/scripts/commands/combat/en_spiral_kick_0.py b/scripts/commands/combat/en_spiral_kick_0.py new file mode 100644 index 00000000..62a7efb2 --- /dev/null +++ b/scripts/commands/combat/en_spiral_kick_0.py @@ -0,0 +1,11 @@ +import sys + +def setup(core, actor, target, command): + core.buffService.addBuffToCreature(target, 'en_spiral_kick_snare', actor) + return + +def preRun(core, actor, target, command): + return + +def run(core, actor, target, commandString): + return \ No newline at end of file diff --git a/scripts/commands/combat/en_spiral_kick_1.py b/scripts/commands/combat/en_spiral_kick_1.py new file mode 100644 index 00000000..62a7efb2 --- /dev/null +++ b/scripts/commands/combat/en_spiral_kick_1.py @@ -0,0 +1,11 @@ +import sys + +def setup(core, actor, target, command): + core.buffService.addBuffToCreature(target, 'en_spiral_kick_snare', actor) + return + +def preRun(core, actor, target, command): + return + +def run(core, actor, target, commandString): + return \ No newline at end of file diff --git a/scripts/commands/combat/en_spiral_kick_2.py b/scripts/commands/combat/en_spiral_kick_2.py new file mode 100644 index 00000000..62a7efb2 --- /dev/null +++ b/scripts/commands/combat/en_spiral_kick_2.py @@ -0,0 +1,11 @@ +import sys + +def setup(core, actor, target, command): + core.buffService.addBuffToCreature(target, 'en_spiral_kick_snare', actor) + return + +def preRun(core, actor, target, command): + return + +def run(core, actor, target, commandString): + return \ No newline at end of file diff --git a/scripts/commands/combat/en_spiral_kick_3.py b/scripts/commands/combat/en_spiral_kick_3.py new file mode 100644 index 00000000..62a7efb2 --- /dev/null +++ b/scripts/commands/combat/en_spiral_kick_3.py @@ -0,0 +1,11 @@ +import sys + +def setup(core, actor, target, command): + core.buffService.addBuffToCreature(target, 'en_spiral_kick_snare', actor) + return + +def preRun(core, actor, target, command): + return + +def run(core, actor, target, commandString): + return \ No newline at end of file diff --git a/scripts/commands/combat/en_spiral_kick_4.py b/scripts/commands/combat/en_spiral_kick_4.py new file mode 100644 index 00000000..62a7efb2 --- /dev/null +++ b/scripts/commands/combat/en_spiral_kick_4.py @@ -0,0 +1,11 @@ +import sys + +def setup(core, actor, target, command): + core.buffService.addBuffToCreature(target, 'en_spiral_kick_snare', actor) + return + +def preRun(core, actor, target, command): + return + +def run(core, actor, target, commandString): + return \ No newline at end of file diff --git a/scripts/commands/combat/en_thrill.py b/scripts/commands/combat/en_thrill.py new file mode 100644 index 00000000..1dbabf6a --- /dev/null +++ b/scripts/commands/combat/en_thrill.py @@ -0,0 +1,11 @@ +import sys + +def setup(core, actor, target, command): + core.buffService.addBuffToCreature(target, 'en_debuff_thrill', actor) + return + +def preRun(core, actor, target, command): + return + +def run(core, actor, target, commandString): + return \ No newline at end of file diff --git a/scripts/commands/combat/en_thrill_1.py b/scripts/commands/combat/en_thrill_1.py new file mode 100644 index 00000000..41d4b0aa --- /dev/null +++ b/scripts/commands/combat/en_thrill_1.py @@ -0,0 +1,11 @@ +import sys + +def setup(core, actor, target, command): + core.buffService.addBuffToCreature(target, 'en_debuff_thrill_1', actor) + return + +def preRun(core, actor, target, command): + return + +def run(core, actor, target, commandString): + return \ No newline at end of file diff --git a/scripts/commands/combat/en_thrill_2.py b/scripts/commands/combat/en_thrill_2.py new file mode 100644 index 00000000..41d4b0aa --- /dev/null +++ b/scripts/commands/combat/en_thrill_2.py @@ -0,0 +1,11 @@ +import sys + +def setup(core, actor, target, command): + core.buffService.addBuffToCreature(target, 'en_debuff_thrill_1', actor) + return + +def preRun(core, actor, target, command): + return + +def run(core, actor, target, commandString): + return \ No newline at end of file diff --git a/scripts/commands/combat/en_thrill_3.py b/scripts/commands/combat/en_thrill_3.py new file mode 100644 index 00000000..7e1892d5 --- /dev/null +++ b/scripts/commands/combat/en_thrill_3.py @@ -0,0 +1,11 @@ +import sys + +def setup(core, actor, target, command): + core.buffService.addBuffToCreature(target, 'en_debuff_thrill_2', actor) + return + +def preRun(core, actor, target, command): + return + +def run(core, actor, target, commandString): + return \ No newline at end of file diff --git a/scripts/commands/combat/en_unhealthy_fixation.py b/scripts/commands/combat/en_unhealthy_fixation.py new file mode 100644 index 00000000..620dd09a --- /dev/null +++ b/scripts/commands/combat/en_unhealthy_fixation.py @@ -0,0 +1,11 @@ +import sys + +def setup(core, actor, target, command): + core.buffService.addBuffToCreature(target, 'en_unhealthy_fixation_debuff') + return + +def preRun(core, actor, target, command): + return + +def run(core, actor, target, commandString): + return \ No newline at end of file diff --git a/scripts/commands/combat/en_void_dance.py b/scripts/commands/combat/en_void_dance.py new file mode 100644 index 00000000..2354238e --- /dev/null +++ b/scripts/commands/combat/en_void_dance.py @@ -0,0 +1,11 @@ +import sys + +def setup(core, actor, target, command): + core.buffService.addBuffToCreature(target, 'en_void_dance_buff') + return + +def preRun(core, actor, target, command): + return + +def run(core, actor, target, commandString): + return \ No newline at end of file diff --git a/scripts/commands/combat/en_void_dance_1.py b/scripts/commands/combat/en_void_dance_1.py new file mode 100644 index 00000000..ce94693c --- /dev/null +++ b/scripts/commands/combat/en_void_dance_1.py @@ -0,0 +1,11 @@ +import sys + +def setup(core, actor, target, command): + core.buffService.addBuffToCreature(target, 'en_void_dance_buff_1', actor) + return + +def preRun(core, actor, target, command): + return + +def run(core, actor, target, commandString): + return \ No newline at end of file diff --git a/scripts/commands/combat/en_void_dance_2.py b/scripts/commands/combat/en_void_dance_2.py new file mode 100644 index 00000000..b6167823 --- /dev/null +++ b/scripts/commands/combat/en_void_dance_2.py @@ -0,0 +1,11 @@ +import sys + +def setup(core, actor, target, command): + core.buffService.addBuffToCreature(target, 'en_void_dance_buff_2', actor) + return + +def preRun(core, actor, target, command): + return + +def run(core, actor, target, commandString): + return \ No newline at end of file diff --git a/scripts/commands/combat/en_void_dance_3.py b/scripts/commands/combat/en_void_dance_3.py new file mode 100644 index 00000000..268bbd4e --- /dev/null +++ b/scripts/commands/combat/en_void_dance_3.py @@ -0,0 +1,11 @@ +import sys + +def setup(core, actor, target, command): + core.buffService.addBuffToCreature(target, 'en_void_dance_buff_3', actor) + return + +def preRun(core, actor, target, command): + return + +def run(core, actor, target, commandString): + return \ No newline at end of file diff --git a/scripts/commands/combat/forcethrow.py b/scripts/commands/combat/forcethrow.py index 276deb65..0e529b99 100644 --- a/scripts/commands/combat/forcethrow.py +++ b/scripts/commands/combat/forcethrow.py @@ -1,7 +1,7 @@ import sys def setup(core, actor, target, command): - core.buffService.addBuffToCreature(target, 'fs_force_throw') + core.buffService.addBuffToCreature(target, 'fs_force_throw', actor) return def preRun(core, actor, target, command): diff --git a/scripts/commands/combat/fs_ae_dm_cc_1.py b/scripts/commands/combat/fs_ae_dm_cc_1.py new file mode 100644 index 00000000..70a66b61 --- /dev/null +++ b/scripts/commands/combat/fs_ae_dm_cc_1.py @@ -0,0 +1,11 @@ +import sys + +def setup(core, actor, target, command): + + if actor.getSkillMod('expertise_fs_dm_armor_bypass'): + command.setBypassArmor(actor.getSkillModBase("expertise_fs_dm_armor_bypass")) + + return + +def run(core, actor, target, commandString): + return \ No newline at end of file diff --git a/scripts/commands/combat/fs_ae_dm_cc_2.py b/scripts/commands/combat/fs_ae_dm_cc_2.py new file mode 100644 index 00000000..70a66b61 --- /dev/null +++ b/scripts/commands/combat/fs_ae_dm_cc_2.py @@ -0,0 +1,11 @@ +import sys + +def setup(core, actor, target, command): + + if actor.getSkillMod('expertise_fs_dm_armor_bypass'): + command.setBypassArmor(actor.getSkillModBase("expertise_fs_dm_armor_bypass")) + + return + +def run(core, actor, target, commandString): + return \ No newline at end of file diff --git a/scripts/commands/combat/fs_ae_dm_cc_3.py b/scripts/commands/combat/fs_ae_dm_cc_3.py new file mode 100644 index 00000000..70a66b61 --- /dev/null +++ b/scripts/commands/combat/fs_ae_dm_cc_3.py @@ -0,0 +1,11 @@ +import sys + +def setup(core, actor, target, command): + + if actor.getSkillMod('expertise_fs_dm_armor_bypass'): + command.setBypassArmor(actor.getSkillModBase("expertise_fs_dm_armor_bypass")) + + return + +def run(core, actor, target, commandString): + return \ No newline at end of file diff --git a/scripts/commands/combat/fs_ae_dm_cc_4.py b/scripts/commands/combat/fs_ae_dm_cc_4.py new file mode 100644 index 00000000..70a66b61 --- /dev/null +++ b/scripts/commands/combat/fs_ae_dm_cc_4.py @@ -0,0 +1,11 @@ +import sys + +def setup(core, actor, target, command): + + if actor.getSkillMod('expertise_fs_dm_armor_bypass'): + command.setBypassArmor(actor.getSkillModBase("expertise_fs_dm_armor_bypass")) + + return + +def run(core, actor, target, commandString): + return \ No newline at end of file diff --git a/scripts/commands/combat/fs_ae_dm_cc_5.py b/scripts/commands/combat/fs_ae_dm_cc_5.py new file mode 100644 index 00000000..70a66b61 --- /dev/null +++ b/scripts/commands/combat/fs_ae_dm_cc_5.py @@ -0,0 +1,11 @@ +import sys + +def setup(core, actor, target, command): + + if actor.getSkillMod('expertise_fs_dm_armor_bypass'): + command.setBypassArmor(actor.getSkillModBase("expertise_fs_dm_armor_bypass")) + + return + +def run(core, actor, target, commandString): + return \ No newline at end of file diff --git a/scripts/commands/combat/fs_ae_dm_cc_6.py b/scripts/commands/combat/fs_ae_dm_cc_6.py new file mode 100644 index 00000000..70a66b61 --- /dev/null +++ b/scripts/commands/combat/fs_ae_dm_cc_6.py @@ -0,0 +1,11 @@ +import sys + +def setup(core, actor, target, command): + + if actor.getSkillMod('expertise_fs_dm_armor_bypass'): + command.setBypassArmor(actor.getSkillModBase("expertise_fs_dm_armor_bypass")) + + return + +def run(core, actor, target, commandString): + return \ No newline at end of file diff --git a/scripts/commands/combat/fs_dm_1.py b/scripts/commands/combat/fs_dm_1.py new file mode 100644 index 00000000..825798d5 --- /dev/null +++ b/scripts/commands/combat/fs_dm_1.py @@ -0,0 +1,20 @@ +import sys + +def setup(core, actor, target, command): + + if actor.getSkillMod('expertise_cooldown_line_fs_dm'): + command.setCooldown(command.getCooldown() + (actor.getSkillMod('expertise_cooldown_line_fs_dm').getBase()/10)) + + if actor.getSkillMod('expertise_damage_line_fs_dm'): + command.setAddedDamage(command.getAddedDamage() + ((command.getAddedDamage() * actor.getSkillMod('expertise_damage_line_fs_dm').getBase())/100)) + + if actor.getSkillMod('expertise_critical_line_fs_dm'): + command.setCriticalChance(command.getCriticalChance() + actor.getSkillMod('expertise_critical_line_fs_dm').getBase()) + + if actor.getSkillMod('expertise_action_line_fs_dm'): + command.setActionCost(command.getActionCost() - ((command.getActionCost() * actor.getSkillMod('expertise_action_line_fs_dm').getBase())/100)) + + return + +def run(core, actor, target, commandString): + return \ No newline at end of file diff --git a/scripts/commands/combat/fs_dm_2.py b/scripts/commands/combat/fs_dm_2.py new file mode 100644 index 00000000..825798d5 --- /dev/null +++ b/scripts/commands/combat/fs_dm_2.py @@ -0,0 +1,20 @@ +import sys + +def setup(core, actor, target, command): + + if actor.getSkillMod('expertise_cooldown_line_fs_dm'): + command.setCooldown(command.getCooldown() + (actor.getSkillMod('expertise_cooldown_line_fs_dm').getBase()/10)) + + if actor.getSkillMod('expertise_damage_line_fs_dm'): + command.setAddedDamage(command.getAddedDamage() + ((command.getAddedDamage() * actor.getSkillMod('expertise_damage_line_fs_dm').getBase())/100)) + + if actor.getSkillMod('expertise_critical_line_fs_dm'): + command.setCriticalChance(command.getCriticalChance() + actor.getSkillMod('expertise_critical_line_fs_dm').getBase()) + + if actor.getSkillMod('expertise_action_line_fs_dm'): + command.setActionCost(command.getActionCost() - ((command.getActionCost() * actor.getSkillMod('expertise_action_line_fs_dm').getBase())/100)) + + return + +def run(core, actor, target, commandString): + return \ No newline at end of file diff --git a/scripts/commands/combat/fs_dm_3.py b/scripts/commands/combat/fs_dm_3.py new file mode 100644 index 00000000..825798d5 --- /dev/null +++ b/scripts/commands/combat/fs_dm_3.py @@ -0,0 +1,20 @@ +import sys + +def setup(core, actor, target, command): + + if actor.getSkillMod('expertise_cooldown_line_fs_dm'): + command.setCooldown(command.getCooldown() + (actor.getSkillMod('expertise_cooldown_line_fs_dm').getBase()/10)) + + if actor.getSkillMod('expertise_damage_line_fs_dm'): + command.setAddedDamage(command.getAddedDamage() + ((command.getAddedDamage() * actor.getSkillMod('expertise_damage_line_fs_dm').getBase())/100)) + + if actor.getSkillMod('expertise_critical_line_fs_dm'): + command.setCriticalChance(command.getCriticalChance() + actor.getSkillMod('expertise_critical_line_fs_dm').getBase()) + + if actor.getSkillMod('expertise_action_line_fs_dm'): + command.setActionCost(command.getActionCost() - ((command.getActionCost() * actor.getSkillMod('expertise_action_line_fs_dm').getBase())/100)) + + return + +def run(core, actor, target, commandString): + return \ No newline at end of file diff --git a/scripts/commands/combat/fs_dm_4.py b/scripts/commands/combat/fs_dm_4.py new file mode 100644 index 00000000..825798d5 --- /dev/null +++ b/scripts/commands/combat/fs_dm_4.py @@ -0,0 +1,20 @@ +import sys + +def setup(core, actor, target, command): + + if actor.getSkillMod('expertise_cooldown_line_fs_dm'): + command.setCooldown(command.getCooldown() + (actor.getSkillMod('expertise_cooldown_line_fs_dm').getBase()/10)) + + if actor.getSkillMod('expertise_damage_line_fs_dm'): + command.setAddedDamage(command.getAddedDamage() + ((command.getAddedDamage() * actor.getSkillMod('expertise_damage_line_fs_dm').getBase())/100)) + + if actor.getSkillMod('expertise_critical_line_fs_dm'): + command.setCriticalChance(command.getCriticalChance() + actor.getSkillMod('expertise_critical_line_fs_dm').getBase()) + + if actor.getSkillMod('expertise_action_line_fs_dm'): + command.setActionCost(command.getActionCost() - ((command.getActionCost() * actor.getSkillMod('expertise_action_line_fs_dm').getBase())/100)) + + return + +def run(core, actor, target, commandString): + return \ No newline at end of file diff --git a/scripts/commands/combat/fs_dm_5.py b/scripts/commands/combat/fs_dm_5.py new file mode 100644 index 00000000..825798d5 --- /dev/null +++ b/scripts/commands/combat/fs_dm_5.py @@ -0,0 +1,20 @@ +import sys + +def setup(core, actor, target, command): + + if actor.getSkillMod('expertise_cooldown_line_fs_dm'): + command.setCooldown(command.getCooldown() + (actor.getSkillMod('expertise_cooldown_line_fs_dm').getBase()/10)) + + if actor.getSkillMod('expertise_damage_line_fs_dm'): + command.setAddedDamage(command.getAddedDamage() + ((command.getAddedDamage() * actor.getSkillMod('expertise_damage_line_fs_dm').getBase())/100)) + + if actor.getSkillMod('expertise_critical_line_fs_dm'): + command.setCriticalChance(command.getCriticalChance() + actor.getSkillMod('expertise_critical_line_fs_dm').getBase()) + + if actor.getSkillMod('expertise_action_line_fs_dm'): + command.setActionCost(command.getActionCost() - ((command.getActionCost() * actor.getSkillMod('expertise_action_line_fs_dm').getBase())/100)) + + return + +def run(core, actor, target, commandString): + return \ No newline at end of file diff --git a/scripts/commands/combat/fs_dm_6.py b/scripts/commands/combat/fs_dm_6.py new file mode 100644 index 00000000..825798d5 --- /dev/null +++ b/scripts/commands/combat/fs_dm_6.py @@ -0,0 +1,20 @@ +import sys + +def setup(core, actor, target, command): + + if actor.getSkillMod('expertise_cooldown_line_fs_dm'): + command.setCooldown(command.getCooldown() + (actor.getSkillMod('expertise_cooldown_line_fs_dm').getBase()/10)) + + if actor.getSkillMod('expertise_damage_line_fs_dm'): + command.setAddedDamage(command.getAddedDamage() + ((command.getAddedDamage() * actor.getSkillMod('expertise_damage_line_fs_dm').getBase())/100)) + + if actor.getSkillMod('expertise_critical_line_fs_dm'): + command.setCriticalChance(command.getCriticalChance() + actor.getSkillMod('expertise_critical_line_fs_dm').getBase()) + + if actor.getSkillMod('expertise_action_line_fs_dm'): + command.setActionCost(command.getActionCost() - ((command.getActionCost() * actor.getSkillMod('expertise_action_line_fs_dm').getBase())/100)) + + return + +def run(core, actor, target, commandString): + return \ No newline at end of file diff --git a/scripts/commands/combat/fs_dm_7.py b/scripts/commands/combat/fs_dm_7.py new file mode 100644 index 00000000..825798d5 --- /dev/null +++ b/scripts/commands/combat/fs_dm_7.py @@ -0,0 +1,20 @@ +import sys + +def setup(core, actor, target, command): + + if actor.getSkillMod('expertise_cooldown_line_fs_dm'): + command.setCooldown(command.getCooldown() + (actor.getSkillMod('expertise_cooldown_line_fs_dm').getBase()/10)) + + if actor.getSkillMod('expertise_damage_line_fs_dm'): + command.setAddedDamage(command.getAddedDamage() + ((command.getAddedDamage() * actor.getSkillMod('expertise_damage_line_fs_dm').getBase())/100)) + + if actor.getSkillMod('expertise_critical_line_fs_dm'): + command.setCriticalChance(command.getCriticalChance() + actor.getSkillMod('expertise_critical_line_fs_dm').getBase()) + + if actor.getSkillMod('expertise_action_line_fs_dm'): + command.setActionCost(command.getActionCost() - ((command.getActionCost() * actor.getSkillMod('expertise_action_line_fs_dm').getBase())/100)) + + return + +def run(core, actor, target, commandString): + return \ No newline at end of file diff --git a/scripts/commands/combat/fs_dm_cc_crit_1.py b/scripts/commands/combat/fs_dm_cc_crit_1.py new file mode 100644 index 00000000..493481d7 --- /dev/null +++ b/scripts/commands/combat/fs_dm_cc_crit_1.py @@ -0,0 +1,10 @@ +import sys + +def setup(core, actor, buff): + actor.setSpeedMultiplierBase(0.5) + return + +def removeBuff(core, actor, buff): + actor.setSpeedMultiplierBase(1) + return + \ No newline at end of file diff --git a/scripts/commands/combat/fs_drain_1.py b/scripts/commands/combat/fs_drain_1.py new file mode 100644 index 00000000..c7937d1e --- /dev/null +++ b/scripts/commands/combat/fs_drain_1.py @@ -0,0 +1,16 @@ +import sys + +def setup(core, actor, target, command): + + if actor.getSkillMod('expertise_fs_dm_armor_bypass'): + command.setBypassArmor(actor.getSkillModBase("expertise_fs_dm_armor_bypass")) + + return + +def run(core, actor, target, damage): + + if actor.getSkillMod('expertise_fs_imp_drain'): + damage *= (100 + float(actor.getSkillModBase('expertise_fs_imp_drain')))/100 + + core.combatService.doDrainHeal(actor, int(damage)) + return \ No newline at end of file diff --git a/scripts/commands/combat/fs_drain_2.py b/scripts/commands/combat/fs_drain_2.py new file mode 100644 index 00000000..c7937d1e --- /dev/null +++ b/scripts/commands/combat/fs_drain_2.py @@ -0,0 +1,16 @@ +import sys + +def setup(core, actor, target, command): + + if actor.getSkillMod('expertise_fs_dm_armor_bypass'): + command.setBypassArmor(actor.getSkillModBase("expertise_fs_dm_armor_bypass")) + + return + +def run(core, actor, target, damage): + + if actor.getSkillMod('expertise_fs_imp_drain'): + damage *= (100 + float(actor.getSkillModBase('expertise_fs_imp_drain')))/100 + + core.combatService.doDrainHeal(actor, int(damage)) + return \ No newline at end of file diff --git a/scripts/commands/combat/fs_drain_3.py b/scripts/commands/combat/fs_drain_3.py new file mode 100644 index 00000000..c7937d1e --- /dev/null +++ b/scripts/commands/combat/fs_drain_3.py @@ -0,0 +1,16 @@ +import sys + +def setup(core, actor, target, command): + + if actor.getSkillMod('expertise_fs_dm_armor_bypass'): + command.setBypassArmor(actor.getSkillModBase("expertise_fs_dm_armor_bypass")) + + return + +def run(core, actor, target, damage): + + if actor.getSkillMod('expertise_fs_imp_drain'): + damage *= (100 + float(actor.getSkillModBase('expertise_fs_imp_drain')))/100 + + core.combatService.doDrainHeal(actor, int(damage)) + return \ No newline at end of file diff --git a/scripts/commands/combat/fs_drain_4.py b/scripts/commands/combat/fs_drain_4.py new file mode 100644 index 00000000..c7937d1e --- /dev/null +++ b/scripts/commands/combat/fs_drain_4.py @@ -0,0 +1,16 @@ +import sys + +def setup(core, actor, target, command): + + if actor.getSkillMod('expertise_fs_dm_armor_bypass'): + command.setBypassArmor(actor.getSkillModBase("expertise_fs_dm_armor_bypass")) + + return + +def run(core, actor, target, damage): + + if actor.getSkillMod('expertise_fs_imp_drain'): + damage *= (100 + float(actor.getSkillModBase('expertise_fs_imp_drain')))/100 + + core.combatService.doDrainHeal(actor, int(damage)) + return \ No newline at end of file diff --git a/scripts/commands/combat/fs_drain_5.py b/scripts/commands/combat/fs_drain_5.py new file mode 100644 index 00000000..c7937d1e --- /dev/null +++ b/scripts/commands/combat/fs_drain_5.py @@ -0,0 +1,16 @@ +import sys + +def setup(core, actor, target, command): + + if actor.getSkillMod('expertise_fs_dm_armor_bypass'): + command.setBypassArmor(actor.getSkillModBase("expertise_fs_dm_armor_bypass")) + + return + +def run(core, actor, target, damage): + + if actor.getSkillMod('expertise_fs_imp_drain'): + damage *= (100 + float(actor.getSkillModBase('expertise_fs_imp_drain')))/100 + + core.combatService.doDrainHeal(actor, int(damage)) + return \ No newline at end of file diff --git a/scripts/commands/combat/fs_flurry_1.py b/scripts/commands/combat/fs_flurry_1.py new file mode 100644 index 00000000..5e5c429e --- /dev/null +++ b/scripts/commands/combat/fs_flurry_1.py @@ -0,0 +1,13 @@ +import sys + +def setup(core, actor, target, command): + if actor.getSkillMod('expertise_damage_line_fs_dm'): + command.setAddedDamage(command.getAddedDamage() + ((command.getAddedDamage() * actor.getSkillMod('expertise_damage_line_fs_dm').getBase())/100)) + + if actor.getSkillMod('expertise_critical_line_fs_dm'): + command.setCriticalChance(command.getCriticalChance() + actor.getSkillMod('expertise_critical_line_fs_dm').getBase()) + + return + +def run(core, actor, target, commandString): + return \ No newline at end of file diff --git a/scripts/commands/combat/fs_flurry_2.py b/scripts/commands/combat/fs_flurry_2.py new file mode 100644 index 00000000..5e5c429e --- /dev/null +++ b/scripts/commands/combat/fs_flurry_2.py @@ -0,0 +1,13 @@ +import sys + +def setup(core, actor, target, command): + if actor.getSkillMod('expertise_damage_line_fs_dm'): + command.setAddedDamage(command.getAddedDamage() + ((command.getAddedDamage() * actor.getSkillMod('expertise_damage_line_fs_dm').getBase())/100)) + + if actor.getSkillMod('expertise_critical_line_fs_dm'): + command.setCriticalChance(command.getCriticalChance() + actor.getSkillMod('expertise_critical_line_fs_dm').getBase()) + + return + +def run(core, actor, target, commandString): + return \ No newline at end of file diff --git a/scripts/commands/combat/fs_flurry_3.py b/scripts/commands/combat/fs_flurry_3.py new file mode 100644 index 00000000..5e5c429e --- /dev/null +++ b/scripts/commands/combat/fs_flurry_3.py @@ -0,0 +1,13 @@ +import sys + +def setup(core, actor, target, command): + if actor.getSkillMod('expertise_damage_line_fs_dm'): + command.setAddedDamage(command.getAddedDamage() + ((command.getAddedDamage() * actor.getSkillMod('expertise_damage_line_fs_dm').getBase())/100)) + + if actor.getSkillMod('expertise_critical_line_fs_dm'): + command.setCriticalChance(command.getCriticalChance() + actor.getSkillMod('expertise_critical_line_fs_dm').getBase()) + + return + +def run(core, actor, target, commandString): + return \ No newline at end of file diff --git a/scripts/commands/combat/fs_flurry_4.py b/scripts/commands/combat/fs_flurry_4.py new file mode 100644 index 00000000..5e5c429e --- /dev/null +++ b/scripts/commands/combat/fs_flurry_4.py @@ -0,0 +1,13 @@ +import sys + +def setup(core, actor, target, command): + if actor.getSkillMod('expertise_damage_line_fs_dm'): + command.setAddedDamage(command.getAddedDamage() + ((command.getAddedDamage() * actor.getSkillMod('expertise_damage_line_fs_dm').getBase())/100)) + + if actor.getSkillMod('expertise_critical_line_fs_dm'): + command.setCriticalChance(command.getCriticalChance() + actor.getSkillMod('expertise_critical_line_fs_dm').getBase()) + + return + +def run(core, actor, target, commandString): + return \ No newline at end of file diff --git a/scripts/commands/combat/fs_flurry_5.py b/scripts/commands/combat/fs_flurry_5.py new file mode 100644 index 00000000..5e5c429e --- /dev/null +++ b/scripts/commands/combat/fs_flurry_5.py @@ -0,0 +1,13 @@ +import sys + +def setup(core, actor, target, command): + if actor.getSkillMod('expertise_damage_line_fs_dm'): + command.setAddedDamage(command.getAddedDamage() + ((command.getAddedDamage() * actor.getSkillMod('expertise_damage_line_fs_dm').getBase())/100)) + + if actor.getSkillMod('expertise_critical_line_fs_dm'): + command.setCriticalChance(command.getCriticalChance() + actor.getSkillMod('expertise_critical_line_fs_dm').getBase()) + + return + +def run(core, actor, target, commandString): + return \ No newline at end of file diff --git a/scripts/commands/combat/fs_flurry_6.py b/scripts/commands/combat/fs_flurry_6.py new file mode 100644 index 00000000..5e5c429e --- /dev/null +++ b/scripts/commands/combat/fs_flurry_6.py @@ -0,0 +1,13 @@ +import sys + +def setup(core, actor, target, command): + if actor.getSkillMod('expertise_damage_line_fs_dm'): + command.setAddedDamage(command.getAddedDamage() + ((command.getAddedDamage() * actor.getSkillMod('expertise_damage_line_fs_dm').getBase())/100)) + + if actor.getSkillMod('expertise_critical_line_fs_dm'): + command.setCriticalChance(command.getCriticalChance() + actor.getSkillMod('expertise_critical_line_fs_dm').getBase()) + + return + +def run(core, actor, target, commandString): + return \ No newline at end of file diff --git a/scripts/commands/combat/fs_flurry_7.py b/scripts/commands/combat/fs_flurry_7.py new file mode 100644 index 00000000..5e5c429e --- /dev/null +++ b/scripts/commands/combat/fs_flurry_7.py @@ -0,0 +1,13 @@ +import sys + +def setup(core, actor, target, command): + if actor.getSkillMod('expertise_damage_line_fs_dm'): + command.setAddedDamage(command.getAddedDamage() + ((command.getAddedDamage() * actor.getSkillMod('expertise_damage_line_fs_dm').getBase())/100)) + + if actor.getSkillMod('expertise_critical_line_fs_dm'): + command.setCriticalChance(command.getCriticalChance() + actor.getSkillMod('expertise_critical_line_fs_dm').getBase()) + + return + +def run(core, actor, target, commandString): + return \ No newline at end of file diff --git a/scripts/commands/combat/fs_maelstrom_1.py b/scripts/commands/combat/fs_maelstrom_1.py new file mode 100644 index 00000000..70a66b61 --- /dev/null +++ b/scripts/commands/combat/fs_maelstrom_1.py @@ -0,0 +1,11 @@ +import sys + +def setup(core, actor, target, command): + + if actor.getSkillMod('expertise_fs_dm_armor_bypass'): + command.setBypassArmor(actor.getSkillModBase("expertise_fs_dm_armor_bypass")) + + return + +def run(core, actor, target, commandString): + return \ No newline at end of file diff --git a/scripts/commands/combat/fs_maelstrom_2.py b/scripts/commands/combat/fs_maelstrom_2.py new file mode 100644 index 00000000..70a66b61 --- /dev/null +++ b/scripts/commands/combat/fs_maelstrom_2.py @@ -0,0 +1,11 @@ +import sys + +def setup(core, actor, target, command): + + if actor.getSkillMod('expertise_fs_dm_armor_bypass'): + command.setBypassArmor(actor.getSkillModBase("expertise_fs_dm_armor_bypass")) + + return + +def run(core, actor, target, commandString): + return \ No newline at end of file diff --git a/scripts/commands/combat/fs_maelstrom_3.py b/scripts/commands/combat/fs_maelstrom_3.py new file mode 100644 index 00000000..70a66b61 --- /dev/null +++ b/scripts/commands/combat/fs_maelstrom_3.py @@ -0,0 +1,11 @@ +import sys + +def setup(core, actor, target, command): + + if actor.getSkillMod('expertise_fs_dm_armor_bypass'): + command.setBypassArmor(actor.getSkillModBase("expertise_fs_dm_armor_bypass")) + + return + +def run(core, actor, target, commandString): + return \ No newline at end of file diff --git a/scripts/commands/combat/fs_maelstrom_4.py b/scripts/commands/combat/fs_maelstrom_4.py new file mode 100644 index 00000000..70a66b61 --- /dev/null +++ b/scripts/commands/combat/fs_maelstrom_4.py @@ -0,0 +1,11 @@ +import sys + +def setup(core, actor, target, command): + + if actor.getSkillMod('expertise_fs_dm_armor_bypass'): + command.setBypassArmor(actor.getSkillModBase("expertise_fs_dm_armor_bypass")) + + return + +def run(core, actor, target, commandString): + return \ No newline at end of file diff --git a/scripts/commands/combat/fs_maelstrom_5.py b/scripts/commands/combat/fs_maelstrom_5.py new file mode 100644 index 00000000..70a66b61 --- /dev/null +++ b/scripts/commands/combat/fs_maelstrom_5.py @@ -0,0 +1,11 @@ +import sys + +def setup(core, actor, target, command): + + if actor.getSkillMod('expertise_fs_dm_armor_bypass'): + command.setBypassArmor(actor.getSkillModBase("expertise_fs_dm_armor_bypass")) + + return + +def run(core, actor, target, commandString): + return \ No newline at end of file diff --git a/scripts/commands/combat/fs_sweep_1.py b/scripts/commands/combat/fs_sweep_1.py new file mode 100644 index 00000000..6671e0ad --- /dev/null +++ b/scripts/commands/combat/fs_sweep_1.py @@ -0,0 +1,18 @@ +import sys + +def setup(core, actor, target, command): + + if actor.getSkillMod('expertise_cooldown_line_fs_sweep'): + command.setCooldown(command.getCooldown() + (actor.getSkillModBase('expertise_cooldown_line_fs_sweep')/10)) + + if actor.getSkillMod('expertise_damage_line_fs_sweep'): + command.setAddedDamage(command.getAddedDamage() + ((command.getAddedDamage() * actor.getSkillModBase('expertise_damage_line_fs_sweep'))/100)) + + if actor.getSkillMod('expertise_action_line_fs_sweep'): + command.setActionCost(command.getActionCost() - ((command.getActionCost() * actor.getSkillModBase('expertise_action_line_fs_sweep'))/100)) + + return + +def run(core, actor, target, commandString): + return + \ No newline at end of file diff --git a/scripts/commands/combat/fs_sweep_2.py b/scripts/commands/combat/fs_sweep_2.py new file mode 100644 index 00000000..6671e0ad --- /dev/null +++ b/scripts/commands/combat/fs_sweep_2.py @@ -0,0 +1,18 @@ +import sys + +def setup(core, actor, target, command): + + if actor.getSkillMod('expertise_cooldown_line_fs_sweep'): + command.setCooldown(command.getCooldown() + (actor.getSkillModBase('expertise_cooldown_line_fs_sweep')/10)) + + if actor.getSkillMod('expertise_damage_line_fs_sweep'): + command.setAddedDamage(command.getAddedDamage() + ((command.getAddedDamage() * actor.getSkillModBase('expertise_damage_line_fs_sweep'))/100)) + + if actor.getSkillMod('expertise_action_line_fs_sweep'): + command.setActionCost(command.getActionCost() - ((command.getActionCost() * actor.getSkillModBase('expertise_action_line_fs_sweep'))/100)) + + return + +def run(core, actor, target, commandString): + return + \ No newline at end of file diff --git a/scripts/commands/combat/fs_sweep_3.py b/scripts/commands/combat/fs_sweep_3.py new file mode 100644 index 00000000..6671e0ad --- /dev/null +++ b/scripts/commands/combat/fs_sweep_3.py @@ -0,0 +1,18 @@ +import sys + +def setup(core, actor, target, command): + + if actor.getSkillMod('expertise_cooldown_line_fs_sweep'): + command.setCooldown(command.getCooldown() + (actor.getSkillModBase('expertise_cooldown_line_fs_sweep')/10)) + + if actor.getSkillMod('expertise_damage_line_fs_sweep'): + command.setAddedDamage(command.getAddedDamage() + ((command.getAddedDamage() * actor.getSkillModBase('expertise_damage_line_fs_sweep'))/100)) + + if actor.getSkillMod('expertise_action_line_fs_sweep'): + command.setActionCost(command.getActionCost() - ((command.getActionCost() * actor.getSkillModBase('expertise_action_line_fs_sweep'))/100)) + + return + +def run(core, actor, target, commandString): + return + \ No newline at end of file diff --git a/scripts/commands/combat/fs_sweep_4.py b/scripts/commands/combat/fs_sweep_4.py new file mode 100644 index 00000000..6671e0ad --- /dev/null +++ b/scripts/commands/combat/fs_sweep_4.py @@ -0,0 +1,18 @@ +import sys + +def setup(core, actor, target, command): + + if actor.getSkillMod('expertise_cooldown_line_fs_sweep'): + command.setCooldown(command.getCooldown() + (actor.getSkillModBase('expertise_cooldown_line_fs_sweep')/10)) + + if actor.getSkillMod('expertise_damage_line_fs_sweep'): + command.setAddedDamage(command.getAddedDamage() + ((command.getAddedDamage() * actor.getSkillModBase('expertise_damage_line_fs_sweep'))/100)) + + if actor.getSkillMod('expertise_action_line_fs_sweep'): + command.setActionCost(command.getActionCost() - ((command.getActionCost() * actor.getSkillModBase('expertise_action_line_fs_sweep'))/100)) + + return + +def run(core, actor, target, commandString): + return + \ No newline at end of file diff --git a/scripts/commands/combat/fs_sweep_5.py b/scripts/commands/combat/fs_sweep_5.py new file mode 100644 index 00000000..6671e0ad --- /dev/null +++ b/scripts/commands/combat/fs_sweep_5.py @@ -0,0 +1,18 @@ +import sys + +def setup(core, actor, target, command): + + if actor.getSkillMod('expertise_cooldown_line_fs_sweep'): + command.setCooldown(command.getCooldown() + (actor.getSkillModBase('expertise_cooldown_line_fs_sweep')/10)) + + if actor.getSkillMod('expertise_damage_line_fs_sweep'): + command.setAddedDamage(command.getAddedDamage() + ((command.getAddedDamage() * actor.getSkillModBase('expertise_damage_line_fs_sweep'))/100)) + + if actor.getSkillMod('expertise_action_line_fs_sweep'): + command.setActionCost(command.getActionCost() - ((command.getActionCost() * actor.getSkillModBase('expertise_action_line_fs_sweep'))/100)) + + return + +def run(core, actor, target, commandString): + return + \ No newline at end of file diff --git a/scripts/commands/combat/fs_sweep_6.py b/scripts/commands/combat/fs_sweep_6.py new file mode 100644 index 00000000..6671e0ad --- /dev/null +++ b/scripts/commands/combat/fs_sweep_6.py @@ -0,0 +1,18 @@ +import sys + +def setup(core, actor, target, command): + + if actor.getSkillMod('expertise_cooldown_line_fs_sweep'): + command.setCooldown(command.getCooldown() + (actor.getSkillModBase('expertise_cooldown_line_fs_sweep')/10)) + + if actor.getSkillMod('expertise_damage_line_fs_sweep'): + command.setAddedDamage(command.getAddedDamage() + ((command.getAddedDamage() * actor.getSkillModBase('expertise_damage_line_fs_sweep'))/100)) + + if actor.getSkillMod('expertise_action_line_fs_sweep'): + command.setActionCost(command.getActionCost() - ((command.getActionCost() * actor.getSkillModBase('expertise_action_line_fs_sweep'))/100)) + + return + +def run(core, actor, target, commandString): + return + \ No newline at end of file diff --git a/scripts/commands/combat/fs_sweep_7.py b/scripts/commands/combat/fs_sweep_7.py new file mode 100644 index 00000000..6671e0ad --- /dev/null +++ b/scripts/commands/combat/fs_sweep_7.py @@ -0,0 +1,18 @@ +import sys + +def setup(core, actor, target, command): + + if actor.getSkillMod('expertise_cooldown_line_fs_sweep'): + command.setCooldown(command.getCooldown() + (actor.getSkillModBase('expertise_cooldown_line_fs_sweep')/10)) + + if actor.getSkillMod('expertise_damage_line_fs_sweep'): + command.setAddedDamage(command.getAddedDamage() + ((command.getAddedDamage() * actor.getSkillModBase('expertise_damage_line_fs_sweep'))/100)) + + if actor.getSkillMod('expertise_action_line_fs_sweep'): + command.setActionCost(command.getActionCost() - ((command.getActionCost() * actor.getSkillModBase('expertise_action_line_fs_sweep'))/100)) + + return + +def run(core, actor, target, commandString): + return + \ No newline at end of file diff --git a/scripts/commands/combat/me_burst_1.py b/scripts/commands/combat/me_burst_1.py new file mode 100644 index 00000000..f3944a79 --- /dev/null +++ b/scripts/commands/combat/me_burst_1.py @@ -0,0 +1,11 @@ +import sys + +def setup(core, actor, target, command): + core.buffService.addBuffToCreature(target, 'me_burst_1', actor) + return + +def preRun(core, actor, target, command): + return + +def run(core, actor, target, commandString): + return \ No newline at end of file diff --git a/scripts/commands/combat/me_cranial_smash_1.py b/scripts/commands/combat/me_cranial_smash_1.py new file mode 100644 index 00000000..0325e3b0 --- /dev/null +++ b/scripts/commands/combat/me_cranial_smash_1.py @@ -0,0 +1,11 @@ +import sys + +def setup(core, actor, target, command): + core.buffService.addBuffToCreature(target, 'me_cranial_smash_1', actor) + return + +def preRun(core, actor, target, command): + return + +def run(core, actor, target, commandString): + return \ No newline at end of file diff --git a/scripts/commands/combat/me_doom.py b/scripts/commands/combat/me_doom.py new file mode 100644 index 00000000..890f1ee4 --- /dev/null +++ b/scripts/commands/combat/me_doom.py @@ -0,0 +1,11 @@ +import sys + +def setup(core, actor, target, command): + core.buffService.addBuffToCreature(target, 'me_doom', actor) + return + +def preRun(core, actor, target, command): + return + +def run(core, actor, target, commandString): + return \ No newline at end of file diff --git a/scripts/commands/combat/me_electrolyte_drain_1.py b/scripts/commands/combat/me_electrolyte_drain_1.py new file mode 100644 index 00000000..0775e620 --- /dev/null +++ b/scripts/commands/combat/me_electrolyte_drain_1.py @@ -0,0 +1,11 @@ +import sys + +def setup(core, actor, target, command): + core.buffService.addBuffToCreature(target, 'me_electrolyte_drain_1', actor) + return + +def preRun(core, actor, target, command): + return + +def run(core, actor, target, commandString): + return \ No newline at end of file diff --git a/scripts/commands/combat/me_induce_insanity_1.py b/scripts/commands/combat/me_induce_insanity_1.py index 76c03af9..8b2d04a9 100644 --- a/scripts/commands/combat/me_induce_insanity_1.py +++ b/scripts/commands/combat/me_induce_insanity_1.py @@ -1,10 +1,11 @@ import sys def setup(core, actor, target, command): + core.buffService.addBuffToCreature(target, 'me_induce_insanity_1', actor) return def preRun(core, actor, target, command): return def run(core, actor, target, commandString): - return + return \ No newline at end of file diff --git a/scripts/commands/combat/me_serotonin_purge_1.py b/scripts/commands/combat/me_serotonin_purge_1.py new file mode 100644 index 00000000..c15e6e77 --- /dev/null +++ b/scripts/commands/combat/me_serotonin_purge_1.py @@ -0,0 +1,11 @@ +import sys + +def setup(core, actor, target, command): + core.buffService.addBuffToCreature(target, 'me_serotonin_purge_1', actor) + return + +def preRun(core, actor, target, command): + return + +def run(core, actor, target, commandString): + return \ No newline at end of file diff --git a/scripts/commands/combat/me_stasis_1.py b/scripts/commands/combat/me_stasis_1.py index 35ffc3d7..977ff1be 100644 --- a/scripts/commands/combat/me_stasis_1.py +++ b/scripts/commands/combat/me_stasis_1.py @@ -1,7 +1,7 @@ import sys def setup(core, actor, target, command): - command.setBuffNameTarget('me_stasis_1') + core.buffService.addBuffToCreature(target, 'me_stasis_1', actor) return def preRun(core, actor, target, command): diff --git a/scripts/commands/combat/of_ae_dm_cc_1.py b/scripts/commands/combat/of_ae_dm_cc_1.py index 8cb29c18..91fcdb26 100644 --- a/scripts/commands/combat/of_ae_dm_cc_1.py +++ b/scripts/commands/combat/of_ae_dm_cc_1.py @@ -1,7 +1,7 @@ import sys def setup(core, actor, target, command): - core.buffService.addBuffToCreature(target, 'of_ae_dm_cc_1') + core.buffService.addBuffToCreature(target, 'of_ae_dm_cc_1', actor) return def preRun(core, actor, target, command): diff --git a/scripts/commands/combat/of_ae_dm_cc_2.py b/scripts/commands/combat/of_ae_dm_cc_2.py index 6a6e15d1..21314fd9 100644 --- a/scripts/commands/combat/of_ae_dm_cc_2.py +++ b/scripts/commands/combat/of_ae_dm_cc_2.py @@ -1,7 +1,7 @@ import sys def setup(core, actor, target, command): - core.buffService.addBuffToCreature(target, 'of_ae_dm_cc_2') + core.buffService.addBuffToCreature(target, 'of_ae_dm_cc_2', actor) return def preRun(core, actor, target, command): diff --git a/scripts/commands/combat/of_ae_dm_cc_3.py b/scripts/commands/combat/of_ae_dm_cc_3.py index fe44b74b..1a282584 100644 --- a/scripts/commands/combat/of_ae_dm_cc_3.py +++ b/scripts/commands/combat/of_ae_dm_cc_3.py @@ -1,7 +1,7 @@ import sys def setup(core, actor, target, command): - core.buffService.addBuffToCreature(target, 'of_ae_dm_cc_3') + core.buffService.addBuffToCreature(target, 'of_ae_dm_cc_3', actor) return def preRun(core, actor, target, command): diff --git a/scripts/commands/combat/of_cc_melee_1.py b/scripts/commands/combat/of_cc_melee_1.py index 78feccc6..d6c0b925 100644 --- a/scripts/commands/combat/of_cc_melee_1.py +++ b/scripts/commands/combat/of_cc_melee_1.py @@ -1,7 +1,7 @@ import sys def setup(core, actor, target, command): - core.buffService.addBuffToCreature(target, 'of_cc_melee_1') + core.buffService.addBuffToCreature(target, 'of_cc_melee_1', actor) return def preRun(core, actor, target, command): diff --git a/scripts/commands/combat/of_cc_melee_2.py b/scripts/commands/combat/of_cc_melee_2.py index 90462c2e..045fbdaa 100644 --- a/scripts/commands/combat/of_cc_melee_2.py +++ b/scripts/commands/combat/of_cc_melee_2.py @@ -1,7 +1,7 @@ import sys def setup(core, actor, target, command): - core.buffService.addBuffToCreature(target, 'of_cc_melee_2') + core.buffService.addBuffToCreature(target, 'of_cc_melee_2', actor) return def preRun(core, actor, target, command): diff --git a/scripts/commands/combat/of_cc_melee_3.py b/scripts/commands/combat/of_cc_melee_3.py index b23d1da4..cf690edf 100644 --- a/scripts/commands/combat/of_cc_melee_3.py +++ b/scripts/commands/combat/of_cc_melee_3.py @@ -1,7 +1,7 @@ import sys def setup(core, actor, target, command): - core.buffService.addBuffToCreature(target, 'of_cc_melee_3') + core.buffService.addBuffToCreature(target, 'of_cc_melee_3', actor) return def preRun(core, actor, target, command): diff --git a/scripts/commands/combat/of_cc_melee_4.py b/scripts/commands/combat/of_cc_melee_4.py index 7c5fb4ac..46ace711 100644 --- a/scripts/commands/combat/of_cc_melee_4.py +++ b/scripts/commands/combat/of_cc_melee_4.py @@ -1,7 +1,7 @@ import sys def setup(core, actor, target, command): - core.buffService.addBuffToCreature(target, 'of_cc_melee_4') + core.buffService.addBuffToCreature(target, 'of_cc_melee_4', actor) return def preRun(core, actor, target, command): diff --git a/scripts/commands/combat/of_cc_melee_5.py b/scripts/commands/combat/of_cc_melee_5.py index b30529b9..5d476219 100644 --- a/scripts/commands/combat/of_cc_melee_5.py +++ b/scripts/commands/combat/of_cc_melee_5.py @@ -1,7 +1,7 @@ import sys def setup(core, actor, target, command): - core.buffService.addBuffToCreature(target, 'of_cc_melee_5') + core.buffService.addBuffToCreature(target, 'of_cc_melee_5', actor) return def preRun(core, actor, target, command): diff --git a/scripts/commands/combat/of_cc_melee_6.py b/scripts/commands/combat/of_cc_melee_6.py index 8ade5109..1401aebc 100644 --- a/scripts/commands/combat/of_cc_melee_6.py +++ b/scripts/commands/combat/of_cc_melee_6.py @@ -1,7 +1,7 @@ import sys def setup(core, actor, target, command): - core.buffService.addBuffToCreature(target, 'of_cc_melee_6') + core.buffService.addBuffToCreature(target, 'of_cc_melee_6', actor) return def preRun(core, actor, target, command): diff --git a/scripts/commands/combat/of_cc_melee_7.py b/scripts/commands/combat/of_cc_melee_7.py index 8736060a..a31ea5ef 100644 --- a/scripts/commands/combat/of_cc_melee_7.py +++ b/scripts/commands/combat/of_cc_melee_7.py @@ -1,7 +1,7 @@ import sys def setup(core, actor, target, command): - core.buffService.addBuffToCreature(target, 'of_cc_melee_7') + core.buffService.addBuffToCreature(target, 'of_cc_melee_7', actor) return def preRun(core, actor, target, command): diff --git a/scripts/commands/combat/of_deadeye_debuff.py b/scripts/commands/combat/of_deadeye_debuff.py index 5209b851..1b0a0ca8 100644 --- a/scripts/commands/combat/of_deadeye_debuff.py +++ b/scripts/commands/combat/of_deadeye_debuff.py @@ -1,7 +1,7 @@ import sys def setup(core, actor, target, command): - core.buffService.addBuffToCreature(target, 'of_deadeye_debuff') + core.buffService.addBuffToCreature(target, 'of_deadeye_debuff', actor) return def preRun(core, actor, target, command): diff --git a/scripts/commands/combat/of_deb_def_1.py b/scripts/commands/combat/of_deb_def_1.py index 6e9a7fd3..97a9e475 100644 --- a/scripts/commands/combat/of_deb_def_1.py +++ b/scripts/commands/combat/of_deb_def_1.py @@ -1,11 +1,11 @@ def setup(core, actor, target, command): - core.buffService.addBuffToCreature(target, 'of_deb_def_1') + core.buffService.addBuffToCreature(target, 'of_deb_def_1', actor) if actor.getSkillMod('expertise_of_adv_paint_debuff'): - core.buffService.addBuffToCreature(target, 'of_deb_def_1') - core.buffService.addBuffToCreature(target, 'of_adv_paint_debuff_1') + core.buffService.addBuffToCreature(target, 'of_deb_def_1', actor) + core.buffService.addBuffToCreature(target, 'of_adv_paint_debuff_1', actor) if actor.getSkillMod('expertise_of_adv_paint_expose'): - core.buffService.addBuffToCreature(target, 'of_deb_def_1') - core.buffService.addBuffToCreature(target, 'of_adv_paint_expose_1') + core.buffService.addBuffToCreature(target, 'of_deb_def_1', actor) + core.buffService.addBuffToCreature(target, 'of_adv_paint_expose_1', actor) return def preRun(core, actor, target, command): diff --git a/scripts/commands/combat/of_deb_def_2.py b/scripts/commands/combat/of_deb_def_2.py index 109e4d2c..3343fc97 100644 --- a/scripts/commands/combat/of_deb_def_2.py +++ b/scripts/commands/combat/of_deb_def_2.py @@ -1,11 +1,11 @@ def setup(core, actor, target, command): - core.buffService.addBuffToCreature(target, 'of_deb_def_2') + core.buffService.addBuffToCreature(target, 'of_deb_def_2', actor) if actor.getSkillMod('expertise_of_adv_paint_debuff'): - core.buffService.addBuffToCreature(target, 'of_deb_def_2') - core.buffService.addBuffToCreature(target, 'of_adv_paint_debuff_2') + core.buffService.addBuffToCreature(target, 'of_deb_def_2', actor) + core.buffService.addBuffToCreature(target, 'of_adv_paint_debuff_2', actor) if actor.getSkillMod('expertise_of_adv_paint_expose'): - core.buffService.addBuffToCreature(target, 'of_deb_def_2') - core.buffService.addBuffToCreature(target, 'of_adv_paint_expose_2') + core.buffService.addBuffToCreature(target, 'of_deb_def_2', actor) + core.buffService.addBuffToCreature(target, 'of_adv_paint_expose_2', actor) return def preRun(core, actor, target, command): diff --git a/scripts/commands/combat/of_deb_def_3.py b/scripts/commands/combat/of_deb_def_3.py index 0060bee0..77e1d3fc 100644 --- a/scripts/commands/combat/of_deb_def_3.py +++ b/scripts/commands/combat/of_deb_def_3.py @@ -1,11 +1,11 @@ def setup(core, actor, target, command): - core.buffService.addBuffToCreature(target, 'of_deb_def_3') + core.buffService.addBuffToCreature(target, 'of_deb_def_3', actor) if actor.getSkillMod('expertise_of_adv_paint_debuff'): - core.buffService.addBuffToCreature(target, 'of_deb_def_3') - core.buffService.addBuffToCreature(target, 'of_adv_paint_debuff_3') + core.buffService.addBuffToCreature(target, 'of_deb_def_3', actor) + core.buffService.addBuffToCreature(target, 'of_adv_paint_debuff_3', actor) if actor.getSkillMod('expertise_of_adv_paint_expose'): - core.buffService.addBuffToCreature(target, 'of_deb_def_3') - core.buffService.addBuffToCreature(target, 'of_adv_paint_expose_3') + core.buffService.addBuffToCreature(target, 'of_deb_def_3', actor) + core.buffService.addBuffToCreature(target, 'of_adv_paint_expose_3', actor) return def preRun(core, actor, target, command): diff --git a/scripts/commands/combat/of_deb_def_4.py b/scripts/commands/combat/of_deb_def_4.py index 32b7d21a..b9aa9a9c 100644 --- a/scripts/commands/combat/of_deb_def_4.py +++ b/scripts/commands/combat/of_deb_def_4.py @@ -1,11 +1,11 @@ def setup(core, actor, target, command): - core.buffService.addBuffToCreature(target, 'of_deb_def_4') + core.buffService.addBuffToCreature(target, 'of_deb_def_4', actor) if actor.getSkillMod('expertise_of_adv_paint_debuff'): - core.buffService.addBuffToCreature(target, 'of_deb_def_4') - core.buffService.addBuffToCreature(target, 'of_adv_paint_debuff_4') + core.buffService.addBuffToCreature(target, 'of_deb_def_4', actor) + core.buffService.addBuffToCreature(target, 'of_adv_paint_debuff_4', actor) if actor.getSkillMod('expertise_of_adv_paint_expose'): - core.buffService.addBuffToCreature(target, 'of_deb_def_4') - core.buffService.addBuffToCreature(target, 'of_adv_paint_expose_4') + core.buffService.addBuffToCreature(target, 'of_deb_def_4', actor) + core.buffService.addBuffToCreature(target, 'of_adv_paint_expose_4', actor) return def preRun(core, actor, target, command): diff --git a/scripts/commands/combat/of_deb_def_5.py b/scripts/commands/combat/of_deb_def_5.py index f880a828..c641d203 100644 --- a/scripts/commands/combat/of_deb_def_5.py +++ b/scripts/commands/combat/of_deb_def_5.py @@ -1,11 +1,11 @@ def setup(core, actor, target, command): - core.buffService.addBuffToCreature(target, 'of_deb_def_5') + core.buffService.addBuffToCreature(target, 'of_deb_def_5', actor) if actor.getSkillMod('expertise_of_adv_paint_debuff'): - core.buffService.addBuffToCreature(target, 'of_deb_def_5') - core.buffService.addBuffToCreature(target, 'of_adv_paint_debuff_5') + core.buffService.addBuffToCreature(target, 'of_deb_def_5', actor) + core.buffService.addBuffToCreature(target, 'of_adv_paint_debuff_5', actor) if actor.getSkillMod('expertise_of_adv_paint_expose'): - core.buffService.addBuffToCreature(target, 'of_deb_def_5') - core.buffService.addBuffToCreature(target, 'of_adv_paint_expose_5') + core.buffService.addBuffToCreature(target, 'of_deb_def_5', actor) + core.buffService.addBuffToCreature(target, 'of_adv_paint_expose_5', actor) return def preRun(core, actor, target, command): diff --git a/scripts/commands/combat/of_deb_def_6.py b/scripts/commands/combat/of_deb_def_6.py index aa1f3f18..0dfde469 100644 --- a/scripts/commands/combat/of_deb_def_6.py +++ b/scripts/commands/combat/of_deb_def_6.py @@ -1,11 +1,11 @@ def setup(core, actor, target, command): - core.buffService.addBuffToCreature(target, 'of_deb_def_6') + core.buffService.addBuffToCreature(target, 'of_deb_def_6', actor) if actor.getSkillMod('expertise_of_adv_paint_debuff'): - core.buffService.addBuffToCreature(target, 'of_deb_def_6') - core.buffService.addBuffToCreature(target, 'of_adv_paint_debuff_6') + core.buffService.addBuffToCreature(target, 'of_deb_def_6', actor) + core.buffService.addBuffToCreature(target, 'of_adv_paint_debuff_6', actor) if actor.getSkillMod('expertise_of_adv_paint_expose'): - core.buffService.addBuffToCreature(target, 'of_deb_def_6') - core.buffService.addBuffToCreature(target, 'of_adv_paint_expose_6') + core.buffService.addBuffToCreature(target, 'of_deb_def_6', actor) + core.buffService.addBuffToCreature(target, 'of_adv_paint_expose_6', actor) return def preRun(core, actor, target, command): diff --git a/scripts/commands/combat/of_deb_def_7.py b/scripts/commands/combat/of_deb_def_7.py index ac8dbaec..a5f19a81 100644 --- a/scripts/commands/combat/of_deb_def_7.py +++ b/scripts/commands/combat/of_deb_def_7.py @@ -1,11 +1,11 @@ def setup(core, actor, target, command): - core.buffService.addBuffToCreature(target, 'of_deb_def_7') + core.buffService.addBuffToCreature(target, 'of_deb_def_7', actor) if actor.getSkillMod('expertise_of_adv_paint_debuff'): - core.buffService.addBuffToCreature(target, 'of_deb_def_7') - core.buffService.addBuffToCreature(target, 'of_adv_paint_debuff_7') + core.buffService.addBuffToCreature(target, 'of_deb_def_7', actor) + core.buffService.addBuffToCreature(target, 'of_adv_paint_debuff_7', actor) if actor.getSkillMod('expertise_of_adv_paint_expose'): - core.buffService.addBuffToCreature(target, 'of_deb_def_7') - core.buffService.addBuffToCreature(target, 'of_adv_paint_expose_7') + core.buffService.addBuffToCreature(target, 'of_deb_def_7', actor) + core.buffService.addBuffToCreature(target, 'of_adv_paint_expose_7', actor) return def preRun(core, actor, target, command): diff --git a/scripts/commands/combat/of_deb_def_8.py b/scripts/commands/combat/of_deb_def_8.py index b2ad7912..5ecc4517 100644 --- a/scripts/commands/combat/of_deb_def_8.py +++ b/scripts/commands/combat/of_deb_def_8.py @@ -1,11 +1,11 @@ def setup(core, actor, target, command): - core.buffService.addBuffToCreature(target, 'of_deb_def_8;) + core.buffService.addBuffToCreature(target, 'of_deb_def_8', actor) if actor.getSkillMod('expertise_of_adv_paint_debuff'): - core.buffService.addBuffToCreature(target, 'of_deb_def_8') - core.buffService.addBuffToCreature(target, 'of_adv_paint_debuff_8') + core.buffService.addBuffToCreature(target, 'of_deb_def_8', actor) + core.buffService.addBuffToCreature(target, 'of_adv_paint_debuff_8', actor) if actor.getSkillMod('expertise_of_adv_paint_expose'): - core.buffService.addBuffToCreature(target, 'of_deb_def_8') - core.buffService.addBuffToCreature(target, 'of_adv_paint_expose_8') + core.buffService.addBuffToCreature(target, 'of_deb_def_8', actor) + core.buffService.addBuffToCreature(target, 'of_adv_paint_expose_8', actor) return def preRun(core, actor, target, command): diff --git a/scripts/commands/combat/of_decapitate_1.py b/scripts/commands/combat/of_decapitate_1.py index d32bcc1e..9e6e9440 100644 --- a/scripts/commands/combat/of_decapitate_1.py +++ b/scripts/commands/combat/of_decapitate_1.py @@ -1,7 +1,7 @@ import sys def setup(core, actor, target, command): - command.setBuffNameTarget('of_decap_bleed_1') + core.buffService.addBuffToCreature(target, 'of_decap_bleed_1', actor) return def preRun(core, actor, target, command): diff --git a/scripts/commands/combat/of_decapitate_2.py b/scripts/commands/combat/of_decapitate_2.py index 7202e1e7..fb2cecf3 100644 --- a/scripts/commands/combat/of_decapitate_2.py +++ b/scripts/commands/combat/of_decapitate_2.py @@ -1,7 +1,7 @@ import sys def setup(core, actor, target, command): - command.setBuffNameTarget('of_decap_bleed_2') + core.buffService.addBuffToCreature(target, 'of_decap_bleed_2', actor) return def preRun(core, actor, target, command): diff --git a/scripts/commands/combat/of_decapitate_3.py b/scripts/commands/combat/of_decapitate_3.py index 53fc24d1..ffe4fa2f 100644 --- a/scripts/commands/combat/of_decapitate_3.py +++ b/scripts/commands/combat/of_decapitate_3.py @@ -1,7 +1,7 @@ import sys def setup(core, actor, target, command): - command.setBuffNameTarget('of_decap_bleed_3') + core.buffService.addBuffToCreature(target, 'of_decap_bleed_3', actor) return def preRun(core, actor, target, command): diff --git a/scripts/commands/combat/of_decapitate_4.py b/scripts/commands/combat/of_decapitate_4.py index 0ad1f93d..99481e70 100644 --- a/scripts/commands/combat/of_decapitate_4.py +++ b/scripts/commands/combat/of_decapitate_4.py @@ -1,7 +1,7 @@ import sys def setup(core, actor, target, command): - command.setBuffNameTarget('of_decap_bleed_4') + core.buffService.addBuffToCreature(target, 'of_decap_bleed_4', actor) return def preRun(core, actor, target, command): diff --git a/scripts/commands/combat/of_decapitate_5.py b/scripts/commands/combat/of_decapitate_5.py index fdc3539e..a282c4ae 100644 --- a/scripts/commands/combat/of_decapitate_5.py +++ b/scripts/commands/combat/of_decapitate_5.py @@ -1,7 +1,7 @@ import sys def setup(core, actor, target, command): - command.setBuffNameTarget('of_decap_bleed_5') + core.buffService.addBuffToCreature(target, 'of_decap_bleed_5', actor) return def preRun(core, actor, target, command): diff --git a/scripts/commands/combat/of_decapitate_6.py b/scripts/commands/combat/of_decapitate_6.py index 7b9fa74a..dae1edb5 100644 --- a/scripts/commands/combat/of_decapitate_6.py +++ b/scripts/commands/combat/of_decapitate_6.py @@ -1,7 +1,7 @@ import sys def setup(core, actor, target, command): - command.setBuffNameTarget('of_decap_bleed_6') + core.buffService.addBuffToCreature(target, 'of_decap_bleed_6', actor) return def preRun(core, actor, target, command): diff --git a/scripts/commands/combat/of_del_ae_dm_dot_1.py b/scripts/commands/combat/of_del_ae_dm_dot_1.py index a609a9fd..8fa6ed3b 100644 --- a/scripts/commands/combat/of_del_ae_dm_dot_1.py +++ b/scripts/commands/combat/of_del_ae_dm_dot_1.py @@ -1,7 +1,7 @@ import sys def setup(core, actor, target, command): - command.setBuffNameTarget('of_dot_bomb_1') + core.buffService.addBuffToCreature(target, 'of_dot_bomb_1', actor) return def preRun(core, actor, target, command): diff --git a/scripts/commands/combat/of_del_ae_dm_dot_2.py b/scripts/commands/combat/of_del_ae_dm_dot_2.py index a609a9fd..8fa6ed3b 100644 --- a/scripts/commands/combat/of_del_ae_dm_dot_2.py +++ b/scripts/commands/combat/of_del_ae_dm_dot_2.py @@ -1,7 +1,7 @@ import sys def setup(core, actor, target, command): - command.setBuffNameTarget('of_dot_bomb_1') + core.buffService.addBuffToCreature(target, 'of_dot_bomb_1', actor) return def preRun(core, actor, target, command): diff --git a/scripts/commands/combat/of_del_ae_dm_dot_3.py b/scripts/commands/combat/of_del_ae_dm_dot_3.py index a609a9fd..8fa6ed3b 100644 --- a/scripts/commands/combat/of_del_ae_dm_dot_3.py +++ b/scripts/commands/combat/of_del_ae_dm_dot_3.py @@ -1,7 +1,7 @@ import sys def setup(core, actor, target, command): - command.setBuffNameTarget('of_dot_bomb_1') + core.buffService.addBuffToCreature(target, 'of_dot_bomb_1', actor) return def preRun(core, actor, target, command): diff --git a/scripts/commands/combat/of_pistol_bleed_1.py b/scripts/commands/combat/of_pistol_bleed_1.py index ba2f33ba..a31c6c19 100644 --- a/scripts/commands/combat/of_pistol_bleed_1.py +++ b/scripts/commands/combat/of_pistol_bleed_1.py @@ -1,7 +1,7 @@ import sys def setup(core, actor, target, command): - command.setBuffNameTarget('of_pistol_bleed') + core.buffService.addBuffToCreature(target, 'of_pistol_bleed', actor) return def preRun(core, actor, target, command): diff --git a/scripts/commands/combat/of_sh_0.py b/scripts/commands/combat/of_sh_0.py new file mode 100644 index 00000000..dcf378ac --- /dev/null +++ b/scripts/commands/combat/of_sh_0.py @@ -0,0 +1,8 @@ +import sys + +def setup(core, actor, target, command): + if actor.getSkillMod('expertise_cooldown_line_of_heal'): + command.setCooldown(command.getCooldown() - actor.getSkillMod('expertise_cooldown_line_of_heal').getBase()) + return +def run(core, actor, target, commandString): + return \ No newline at end of file diff --git a/scripts/commands/combat/of_sh_1.py b/scripts/commands/combat/of_sh_1.py new file mode 100644 index 00000000..dcf378ac --- /dev/null +++ b/scripts/commands/combat/of_sh_1.py @@ -0,0 +1,8 @@ +import sys + +def setup(core, actor, target, command): + if actor.getSkillMod('expertise_cooldown_line_of_heal'): + command.setCooldown(command.getCooldown() - actor.getSkillMod('expertise_cooldown_line_of_heal').getBase()) + return +def run(core, actor, target, commandString): + return \ No newline at end of file diff --git a/scripts/commands/combat/of_sh_2.py b/scripts/commands/combat/of_sh_2.py new file mode 100644 index 00000000..dcf378ac --- /dev/null +++ b/scripts/commands/combat/of_sh_2.py @@ -0,0 +1,8 @@ +import sys + +def setup(core, actor, target, command): + if actor.getSkillMod('expertise_cooldown_line_of_heal'): + command.setCooldown(command.getCooldown() - actor.getSkillMod('expertise_cooldown_line_of_heal').getBase()) + return +def run(core, actor, target, commandString): + return \ No newline at end of file diff --git a/scripts/commands/combat/of_sh_3.py b/scripts/commands/combat/of_sh_3.py new file mode 100644 index 00000000..e19f3ca1 --- /dev/null +++ b/scripts/commands/combat/of_sh_3.py @@ -0,0 +1,10 @@ +import sys + +def setup(core, actor, target, command): + + if actor.getSkillMod('expertise_cooldown_line_of_heal'): + command.setCooldown(command.getCooldown() - actor.getSkillMod('expertise_cooldown_line_of_heal').getBase()) + return + +def run(core, actor, target, commandString): + return \ No newline at end of file diff --git a/scripts/commands/combat/of_vortex_1.py b/scripts/commands/combat/of_vortex_1.py index fa9bd5a9..72cf4b13 100644 --- a/scripts/commands/combat/of_vortex_1.py +++ b/scripts/commands/combat/of_vortex_1.py @@ -1,8 +1,8 @@ import sys def setup(core, actor, target, command): - command.setBuffNameTarget('of_vortex_bleed_1') - command.setBuffNameTarget('of_vortex_root') + core.buffService.addBuffToCreature(target, 'of_vortex_bleed_1', actor) + core.buffService.addBuffToCreature(target, 'of_vortex_root', actor) return def preRun(core, actor, target, command): diff --git a/scripts/commands/combat/of_vortex_2.py b/scripts/commands/combat/of_vortex_2.py index 15ea7699..61b586d4 100644 --- a/scripts/commands/combat/of_vortex_2.py +++ b/scripts/commands/combat/of_vortex_2.py @@ -1,8 +1,8 @@ import sys def setup(core, actor, target, command): - command.setBuffNameTarget('of_vortex_bleed_2') - command.setBuffNameTarget('of_vortex_root') + core.buffService.addBuffToCreature(target, 'of_vortex_bleed_2', actor) + core.buffService.addBuffToCreature(target, 'of_vortex_root', actor) return def preRun(core, actor, target, command): diff --git a/scripts/commands/combat/of_vortex_3.py b/scripts/commands/combat/of_vortex_3.py index 6b5a9e0f..4507ec9d 100644 --- a/scripts/commands/combat/of_vortex_3.py +++ b/scripts/commands/combat/of_vortex_3.py @@ -1,8 +1,8 @@ import sys def setup(core, actor, target, command): - command.setBuffNameTarget('of_vortex_bleed_3') - command.setBuffNameTarget('of_vortex_root') + core.buffService.addBuffToCreature(target, 'of_vortex_bleed_3', actor) + core.buffService.addBuffToCreature(target, 'of_vortex_root', actor) return def preRun(core, actor, target, command): diff --git a/scripts/commands/combat/of_vortex_4.py b/scripts/commands/combat/of_vortex_4.py index d185ba6a..ff87ce05 100644 --- a/scripts/commands/combat/of_vortex_4.py +++ b/scripts/commands/combat/of_vortex_4.py @@ -1,8 +1,8 @@ import sys def setup(core, actor, target, command): - command.setBuffNameTarget('of_vortex_bleed_4') - command.setBuffNameTarget('of_vortex_root') + core.buffService.addBuffToCreature(target, 'of_vortex_bleed_4', actor) + core.buffService.addBuffToCreature(target, 'of_vortex_root', actor) return def preRun(core, actor, target, command): diff --git a/scripts/commands/combat/of_vortex_5.py b/scripts/commands/combat/of_vortex_5.py index b8b7010c..ae7aacee 100644 --- a/scripts/commands/combat/of_vortex_5.py +++ b/scripts/commands/combat/of_vortex_5.py @@ -1,8 +1,8 @@ import sys def setup(core, actor, target, command): - command.setBuffNameTarget('of_vortex_bleed_5') - command.setBuffNameTarget('of_vortex_root') + core.buffService.addBuffToCreature(target, 'of_vortex_bleed_5', actor) + core.buffService.addBuffToCreature(target, 'of_vortex_root', actor) return def preRun(core, actor, target, command): diff --git a/scripts/commands/combat/sm_inside_information.py b/scripts/commands/combat/sm_inside_information.py new file mode 100644 index 00000000..723669fb --- /dev/null +++ b/scripts/commands/combat/sm_inside_information.py @@ -0,0 +1,62 @@ +from resources.common import OutOfBand +from resources.common import ProsePackage +import sys + +def preRun(core, actor, target, command): + return + +def run(core, actor, target, commandString): + return + +def setup(core, actor, target, command): + + if actor.hasCooldown('inside_info'): + actor.sendSystemMessage('@bounty_hunter:sm_calling_contact_too_often', 0) + return + + elif target.hasCooldown('inside_info_target'): + actor.sendSystemMessage('@bounty_hunter:sm_calling_contact_too_often_target', 0) + return + + if target is None: + target = actor + + bountyItem = core.missionService.getBountyListItem(target.getObjectID()) + + if bountyItem is None: + target.sendSystemMessage('@bounty_hunter:sm_no_bounty_self', 0) + + else: + hunters = bountyItem.getAssignedHunters() + if hunters.size() > 0: + distance = hunterDistance(core, actor, target, hunters) + if distance != 0: + target.sendSystemMessage(OutOfBand.ProsePackage('@bounty_hunter:sm_bounty_hunter_distance', 'DI', int(distance)), 0) + applyCooldowns(actor, target) + return + else: + target.sendSystemMessage(OutOfBand.ProsePackage('@bounty_hunter:sm_bounty_amount_target_with_bounties', 'TO', str(bountyItem.getCreditReward())), 0) + applyCooldowns(actor, target) + return + else: + target.sendSystemMessage(OutOfBand.ProsePackage('@bounty_hunter:sm_bounty_amount_target_no_bounties', 'TO', str(bountyItem.getCreditReward())), 0) + applyCooldowns(actor, target) + return + return + return + +def hunterDistance(core, actor, target, assignedHunters): + for objID in assignedHunters: + hunter = core.objectService.getObject(objID) + if hunter is not None: + if hunter.getPlanetId() == target.getPlanetId(): + if target.getPosition().getDistance2D(hunter.getWorldPosition()) < float(300): + return target.getPosition().getDistance2D(hunter.getWorldPosition()) + return 0 + +def applyCooldowns(actor, target): + actor.addCooldown('inside_info', 60) + if target.getObjectID() != actor.getObjectID(): + target.addCooldown('inside_info_target', 600) + return + return \ No newline at end of file diff --git a/scripts/commands/covercharge.py b/scripts/commands/covercharge.py new file mode 100644 index 00000000..d0eae641 --- /dev/null +++ b/scripts/commands/covercharge.py @@ -0,0 +1,46 @@ +from services.sui import SUIWindow +from services.sui.SUIWindow import Trigger +from java.util import Vector +import sys + +def setup(): + return + +def run(core, actor, target, commandString): + ghost = actor.getSlottedObject('ghost') + if ghost.getProfession() != 'entertainer_1a': + actor.sendSystemMessage('@performance:cc_no_skill', 0) + return + if commandString == '0': + actor.setCoverCharge(0) + actor.sendSystemMessage('@performance:cc_stop_charge', 0) + return + + if commandString == None or commandString == '': + window = core.suiService.createInputBox(2, '@performance:cc_set_title', '@performance:cc_set_prompt', actor, None, 10, handleCoverCharge) + window.setProperty('txtInput:NumericInteger', 'true') + window.setProperty('txtInput:MaxLength', '12') + core.suiService.openSUIWindow(window) + return + else: + try: + actor.setCoverCharge(int(commandString)) + actor.sendSystemMessage('You are now charging a cover of ' + commandString + ' credit(s).', 0) + except ValueError: + return + return + return + +def handleCoverCharge(actor, window, eventType, returnList): + if eventType == 0 and len(returnList) == 1: + charge = returnList.get(0) + if charge == "0": + actor.setCoverCharge(0) + actor.sendSystemMessage('@performance:cc_stop_charge', 0) + return + else: + actor.setCoverCharge(charge) + actor.sendSystemMessage('You are now charging a cover of ' + returnList.get(0) + ' credits(s).', 0) + return + return + return \ No newline at end of file diff --git a/scripts/commands/createvendor.py b/scripts/commands/createvendor.py new file mode 100644 index 00000000..ce359139 --- /dev/null +++ b/scripts/commands/createvendor.py @@ -0,0 +1,171 @@ +import sys +from java.util import HashMap +from java.util import Vector +from services.sui.SUIService import ListBoxType +from services.sui.SUIService import InputBoxType +from main import NGECore +from java.lang import Long +from services.sui.SUIWindow import Trigger + +def setup(): + return + +def run(core, actor, target, commandString): + + if actor.getCombatFlag() > 0: + return + + cell = actor.getContainer() + building = actor.getGrandparent() + ghost = actor.getSlottedObject('ghost') + + if not ghost or not cell or not building or not core.housingService.getPermissions(actor, cell): + return + + if ghost.getAmountOfVendors() >= actor.getSkillModBase('manage_vendor'): + actor.sendSystemMessage('@player_structure:full_vendors', 0) + return + + suiOptions = HashMap() + suiOptions.put(Long(1), '@player_structure:terminal') + suiOptions.put(Long(2), '@player_structure:droid') + # TODO add creatures + window = core.suiService.createListBox(ListBoxType.LIST_BOX_OK_CANCEL, '@player_structure:vendor_type_t', '@player_structure:vendor_type_d', suiOptions, actor, None, 5) + returnList = Vector() + returnList.add('List.lstList:SelectedRow') + window.addHandler(0, '', Trigger.TRIGGER_OK, returnList, handleFirstWindow) + core.suiService.openSUIWindow(window) + return + +def handleFirstWindow(actor, window, eventType, returnList): + + core = NGECore.getInstance() + index = int(returnList.get(0)) + selected = window.getObjectIdByIndex(index) + hiring = actor.getSkillModBase('hiring') + if selected == 1: + suiOptions = HashMap() + if hiring >= 10: + suiOptions.put(Long(1), '@player_structure:terminal_bulky') + if hiring >= 30: + suiOptions.put(Long(2), '@player_structure:terminal_standard') + if hiring >= 50: + suiOptions.put(Long(3), '@player_structure:terminal_small') + if hiring >= 75: + suiOptions.put(Long(4), '@player_structure:terminal_fancy') + if hiring >= 90: + suiOptions.put(Long(5), '@player_structure:terminal_slim') + window = core.suiService.createListBox(ListBoxType.LIST_BOX_OK_CANCEL, '@player_structure:terminal_type_t', '@player_structure:terminal_type_d', suiOptions, actor, None, 5) + returnList = Vector() + returnList.add('List.lstList:SelectedRow') + window.addHandler(0, '', Trigger.TRIGGER_OK, returnList, handleTerminalWindow) + core.suiService.openSUIWindow(window) + + if selected == 2: + suiOptions = HashMap() + if hiring >= 20: + suiOptions.put(Long(1), '@player_structure:droid_bartender') + if hiring >= 50: + suiOptions.put(Long(2), '@player_structure:droid_power') + if hiring >= 60: + suiOptions.put(Long(3), '@player_structure:droid_wed') + if hiring >= 90: + suiOptions.put(Long(4), '@player_structure:droid_surgical') + if hiring >= 100: + suiOptions.put(Long(5), '@player_structure:droid_protocol') + window = core.suiService.createListBox(ListBoxType.LIST_BOX_OK_CANCEL, '@player_structure:droid_type_t', '@player_structure:droid_type_d', suiOptions, actor, None, 5) + returnList = Vector() + returnList.add('List.lstList:SelectedRow') + window.addHandler(0, '', Trigger.TRIGGER_OK, returnList, handleDroidWindow) + core.suiService.openSUIWindow(window) + + return + +def handleTerminalWindow(actor, window, eventType, returnList): + + core = NGECore.getInstance() + index = int(returnList.get(0)) + selected = window.getObjectIdByIndex(index) + + if selected == 1: + actor.setAttachment('selectedVendorTemplate', 'object/tangible/vendor/shared_vendor_terminal_bulky.iff') + elif selected == 2: + actor.setAttachment('selectedVendorTemplate', 'object/tangible/vendor/shared_vendor_terminal_standard.iff') + elif selected == 3: + actor.setAttachment('selectedVendorTemplate', 'object/tangible/vendor/shared_vendor_terminal_small.iff') + elif selected == 4: + actor.setAttachment('selectedVendorTemplate', 'object/tangible/vendor/shared_vendor_terminal_fancy.iff') + elif selected == 5: + actor.setAttachment('selectedVendorTemplate', 'object/tangible/vendor/shared_vendor_terminal_slim.iff') + + createNameVendorWindow(core, actor) + + return + +def handleDroidWindow(actor, window, eventType, returnList): + + core = NGECore.getInstance() + index = int(returnList.get(0)) + selected = window.getObjectIdByIndex(index) + + if selected == 1: + actor.setAttachment('selectedVendorTemplate', 'object/tangible/vendor/shared_vendor_droid_bartender.iff') + elif selected == 2: + actor.setAttachment('selectedVendorTemplate', 'object/tangible/vendor/shared_vendor_droid_power.iff') + elif selected == 3: + actor.setAttachment('selectedVendorTemplate', 'object/tangible/vendor/shared_vendor_droid_wed.iff') + elif selected == 4: + actor.setAttachment('selectedVendorTemplate', 'object/tangible/vendor/shared_vendor_droid_surgical.iff') + elif selected == 5: + actor.setAttachment('selectedVendorTemplate', 'object/tangible/vendor/shared_vendor_droid_protocol.iff') + + createNameVendorWindow(core, actor) + + return + +def createNameVendorWindow(core, actor): + + window = core.suiService.createInputBox(InputBoxType.INPUT_BOX_OK_CANCEL, '@player_structure:name_t', '@player_structure:name_d', actor, None, 5, handleVendorName) + core.suiService.openSUIWindow(window) + return + +def handleVendorName(actor, window, eventType, returnList): + + core = NGECore.getInstance() + name = returnList.get(0) + print name + inventory = actor.getSlottedObject('inventory') + ghost = actor.getSlottedObject('ghost') + + if not core.characterService.checkName(name, actor.getClient()): + actor.sendSystemMessage('@player_structure:obscene', 0) + createNameVendorWindow(core, actor) + return + + if not actor.getAttachment('selectedVendorTemplate') or not inventory or not ghost: + actor.sendSystemMessage('@player_structure:create_failed', 0) + return + + if actor.getInventoryItemCount() >= 80: + actor.sendSystemMessage('@player_structure:inventory_full_generic', 0) + return + + vendor = core.objectService.createObject(actor.getAttachment('selectedVendorTemplate'), actor.getPlanet()) + + if not vendor: + actor.sendSystemMessage('@player_structure:create_failed', 0) + return + + actor.setAttachment('selectedVendorTemplate', None) + vendor.setAttachment('isVendor', True) + vendor.setAttachment('onMap', True) + vendor.setAttachment('maintenanceAmount', 0) + vendor.setAttachment('vendorOwner', Long(actor.getObjectID())) + vendor.setAttachment('initialized', False) + vendor.setAttachment('vendorSearchEnabled', False) + vendor.setCustomName('Vendor: ' + name) + ghost.addVendor(vendor.getObjectID()) + inventory.add(vendor) + actor.sendSystemMessage('@player_structure:create_success', 0) + return + \ No newline at end of file diff --git a/scripts/commands/dazzle.py b/scripts/commands/dazzle.py new file mode 100644 index 00000000..03e79b11 --- /dev/null +++ b/scripts/commands/dazzle.py @@ -0,0 +1,39 @@ +import sys + +def setup(): + return + +def run(core, actor, target, commandString): + level = actor.getLevel() + command = 'Dazzle1' + effect = 'clienteffect/entertainer_dazzle_level_1.cef' + rLevel = 10 # minimum level to perform this effect + + if commandString is None or commandString == '': + + if level >= 30: + command = 'Dazzle3' + effect = 'clienteffect/entertainer_dazzle_level_3.cef' + + elif level >= 20: + command = 'Dazzle2' + effect = 'clienteffect/entertainer_dazzle_level_2.cef' + + if commandString is not None: + if commandString == '2': + command = 'Dazzle2' + effect = 'clienteffect/entertainer_dazzle_level_2.cef' + rLevel = 20 + + elif commandString == '3': + command = 'Dazzle3' + effect = 'clienteffect/entertainer_dazzle_level_3.cef' + rLevel = 30 + + if level < rLevel: + actor.sendSystemMessage('@performance:effect_lack_skill_self', 0) + return + + if core.entertainmentService.performEffect(actor, command, effect, target) is True: + actor.sendSystemMessage('@performance:effect_perform_dazzle', 0) + return \ No newline at end of file diff --git a/scripts/commands/dismissgroupmember.py b/scripts/commands/dismissgroupmember.py new file mode 100644 index 00000000..7c384e0a --- /dev/null +++ b/scripts/commands/dismissgroupmember.py @@ -0,0 +1,10 @@ +import sys + +def setup(): + return + +def run(core, actor, target, commandString): + if actor and target: + core.groupService.handleGroupKick(actor, target) + return + \ No newline at end of file diff --git a/scripts/commands/dismount.py b/scripts/commands/dismount.py new file mode 100644 index 00000000..08aeba54 --- /dev/null +++ b/scripts/commands/dismount.py @@ -0,0 +1,18 @@ +import sys + +def setup(): + return + +def run(core, actor, target, commandString): + if not target: + return + + if actor.getObjectID() != target.getOwnerId(): + return + + + if core.mountService.isMounted(actor) is True: + core.mountService.dismount(actor, target) + + return + diff --git a/scripts/commands/distract.py b/scripts/commands/distract.py new file mode 100644 index 00000000..ec57828b --- /dev/null +++ b/scripts/commands/distract.py @@ -0,0 +1,38 @@ +import sys + +def setup(): + return + +def run(core, actor, target, commandString): + level = actor.getLevel() + command = 'Distract1' + effect = 'clienteffect/entertainer_distract_level_1.cef' + rLevel = 18 # minimum level to perform this effect + + if commandString is None or commandString == '': + if level >= 75: + command = 'Distract3' + effect = 'clienteffect/entertainer_distract_level_3.cef' + + elif level >= 50: + command = 'Distract2' + effect = 'clienteffect/entertainer_distract_level_2.cef' + + if commandString is not None: + if commandString == '2': + command = 'Distract2' + effect = 'clienteffect/entertainer_distract_level_2.cef' + rLevel = 50 + + elif commandString == '3': + command = 'Distract3' + effect = 'clienteffect/entertainer_distract_level_3.cef' + rLevel = 75 + + if level < rLevel: + actor.sendSystemMessage('@performance:effect_lack_skill_self', 0) + return + + if core.entertainmentService.performEffect(actor, command, effect, target) is True: + actor.sendSystemMessage('@performance:effect_perform_distract', 0) + return \ No newline at end of file diff --git a/scripts/commands/duel.py b/scripts/commands/duel.py index 4ce25bdf..cd26b240 100644 --- a/scripts/commands/duel.py +++ b/scripts/commands/duel.py @@ -22,6 +22,7 @@ def run(core, actor, target, commandString): if actor.getDuelList().contains(target): actor.sendSystemMessage('You already challenged ' + target.getCustomName() + ' to a duel.', 0) + return combatSvc.handleDuel(actor, target) diff --git a/scripts/commands/editbiography.py b/scripts/commands/editbiography.py new file mode 100644 index 00000000..cfdb755f --- /dev/null +++ b/scripts/commands/editbiography.py @@ -0,0 +1,10 @@ +import sys +from protocol.swg.objectControllerObjects import BiographyUpdate +from protocol.swg import ObjControllerMessage + +def setup(): + return + +def run(core, actor, target, commandString): + print ('do you do anything?!') + return \ No newline at end of file diff --git a/scripts/commands/eject.py b/scripts/commands/eject.py new file mode 100644 index 00000000..eafbd1f0 --- /dev/null +++ b/scripts/commands/eject.py @@ -0,0 +1,8 @@ +import sys + +def run(core, actor, target, commandString): + instSvc = core.instanceService + + if instSvc.isInInstance(actor): + instSvc.remove(instSvc.getActiveInstance(actor), actor) + diff --git a/scripts/commands/en_action_regen.py b/scripts/commands/en_action_regen.py new file mode 100644 index 00000000..c4ea6986 --- /dev/null +++ b/scripts/commands/en_action_regen.py @@ -0,0 +1,8 @@ +import sys + +def setup(): + return + +def run(core, actor, target, commandString): + core.buffService.addBuffToCreature(actor, 'en_action_regen', actor) + return \ No newline at end of file diff --git a/scripts/commands/en_holographic_image.py b/scripts/commands/en_holographic_image.py new file mode 100644 index 00000000..ad5e8eb7 --- /dev/null +++ b/scripts/commands/en_holographic_image.py @@ -0,0 +1,21 @@ +import sys + +def setup(): + return + +def run(core, actor, target, commandString): + player = actor.getSlottedObject('ghost') + + maxHolos = 1 + + if actor.getSkillMod('expertise_en_holographic_additional_backup') is not None: + maxHolos += actor.getSkillMod('expertise_en_holographic_additional_backup').getBase() + + holo = core.objectService.createObject(actor.getTemplate(), 0, actor.getPlanet(), actor.getPosition(), actor.getOrientation(), None, False) + holo.setHologram(True) + holo.setCustomName('a Hologram') # a Hologram + holo.setHeight(actor.getHeight()) + holo.setCustomization(actor.getCustomization()) + + core.simulationService.add(holo, holo.getPosition().x, holo.getPosition().z, True) + return \ No newline at end of file diff --git a/scripts/commands/en_holographic_recall.py b/scripts/commands/en_holographic_recall.py new file mode 100644 index 00000000..66c6ae4e --- /dev/null +++ b/scripts/commands/en_holographic_recall.py @@ -0,0 +1,7 @@ +import sys + +def setup(): + return + +def run(core, actor, target, commandString): + return \ No newline at end of file diff --git a/scripts/commands/en_sprint_1.py b/scripts/commands/en_sprint_1.py new file mode 100644 index 00000000..a24ef49d --- /dev/null +++ b/scripts/commands/en_sprint_1.py @@ -0,0 +1,8 @@ +import sys + +def setup(): + return + +def run(core, actor, target, commandString): + core.buffService.addBuffToCreature(actor, 'en_sprint', actor) + return \ No newline at end of file diff --git a/scripts/commands/endduel.py b/scripts/commands/endduel.py index 030ef9b3..5df64250 100644 --- a/scripts/commands/endduel.py +++ b/scripts/commands/endduel.py @@ -19,7 +19,7 @@ def run(core, actor, target, commandString): if not combatSvc.areInDuel(actor, target): return - combatSvc.handleEndDuel(actor, target) + combatSvc.handleEndDuel(actor, target, True) return \ No newline at end of file diff --git a/scripts/commands/featuredSolo.py b/scripts/commands/featuredSolo.py new file mode 100644 index 00000000..e7e943b0 --- /dev/null +++ b/scripts/commands/featuredSolo.py @@ -0,0 +1,14 @@ +import sys + +def setup(): + return + +def run(core, actor, target, commandString): + + if actor.getLevel() < 90: + actor.sendSystemMessage('@performance:effect_lack_skill_self', 0) + return + + if core.entertainmentService.performEffect(actor, 'FeaturedSolo', 'clienteffect/entertainer_featured_solo.cef', target) is True: + actor.sendSystemMessage('@performance:effect_perform_featured_solo', 0) + return \ No newline at end of file diff --git a/scripts/commands/findfriend.py b/scripts/commands/findfriend.py new file mode 100644 index 00000000..c6f528ac --- /dev/null +++ b/scripts/commands/findfriend.py @@ -0,0 +1,41 @@ +from resources.objects.waypoint import WaypointObject +from engine.resources.common import CRC +import sys + +def setup(): + return + +def run(core, actor, target, commandString): + ghost = actor.getSlottedObject('ghost') + friend = commandString.split(' ')[0] + + if ghost.getFriendList().contains(friend): + friendObj = core.chatService.getObjectByFirstName(friend) + if friendObj is not None: + if friendObj.getSlottedObject('ghost').getFriendList().contains(actor.getCustomName().lower().split(' ')[0]): + createWaypoint(core, actor, friendObj) + return + return + return + + +def createWaypoint(core, actor, friendObj): + ghost = actor.getSlottedObject('ghost') + friendName = friendObj.getCustomName().split(' ')[0] + wp = WaypointObject() + + for wp in ghost.getWaypoints(): + if wp.getName() == friendName and wp.getPlanet() == friendObj.getPlanet(): + core.commandService.callCommand(actor, 'serverdestroyobject', wp, '') + break + + waypoint = core.objectService.createObject('object/waypoint/shared_waypoint.iff', friendObj.getPlanet(), friendObj.getWorldPosition().x, friendObj.getWorldPosition().z, friendObj.getWorldPosition().y) + waypoint.setName(friendName) + waypoint.setActive(True) + waypoint.setColor(WaypointObject.YELLOW) + waypoint.setName(friendName) + waypoint.setPlanetCRC(CRC.StringtoCRC(friendObj.getPlanet().name)) + waypoint.setStringAttribute('', '') + ghost.waypointAdd(waypoint) + actor.sendSystemMessage('A waypoint has been created in your datapad at the location.', 0) + return diff --git a/scripts/commands/firejet.py b/scripts/commands/firejet.py new file mode 100644 index 00000000..26261d56 --- /dev/null +++ b/scripts/commands/firejet.py @@ -0,0 +1,38 @@ +import sys + +def setup(): + return + +def run(core, actor, target, commandString): + level = actor.getLevel() + command = 'FireJets1' + effect = 'clienteffect/entertainer_fire_jets_level_1.cef' + rLevel = 26 # minimum level to perform this effect + + if commandString is None or commandString == '': + if level >= 75: + command = 'FireJets3' + effect = 'clienteffect/entertainer_fire_jets_level_3.cef' + + elif level >= 50: + command = 'FireJets2' + effect = 'clienteffect/entertainer_fire_jets_level_2.cef' + + if commandString is not None: + if commandString == '2': + command = 'FireJets2' + effect = 'clienteffect/entertainer_fire_jets_level_2.cef' + rLevel = 50 + + elif commandString == '3': + command = 'FireJets3' + effect = 'clienteffect/entertainer_fire_jets_level_3.cef' + rLevel = 75 + + if level < rLevel: + actor.sendSystemMessage('@performance:effect_lack_skill_self', 0) + return + + if core.entertainmentService.performEffect(actor, command, effect, target) is True: + actor.sendSystemMessage('@performance:effect_perform_fire_jets', 0) + return \ No newline at end of file diff --git a/scripts/commands/firejet2.py b/scripts/commands/firejet2.py new file mode 100644 index 00000000..f51758fb --- /dev/null +++ b/scripts/commands/firejet2.py @@ -0,0 +1,14 @@ +import sys + +def setup(): + return + +def run(core, actor, target, commandString): + + if actor.getLevel() < 76: + actor.sendSystemMessage('@performance:effect_lack_skill_self', 0) + return + + if core.entertainmentService.performEffect(actor, 'FireJetsB', 'clienteffect/entertainer_fire_jets2.cef', target) is True: + actor.sendSystemMessage('@performance:effect_perform_fire_jets_2', 0) + return \ No newline at end of file diff --git a/scripts/commands/floorLights.py b/scripts/commands/floorLights.py new file mode 100644 index 00000000..d69f30e8 --- /dev/null +++ b/scripts/commands/floorLights.py @@ -0,0 +1,14 @@ +import sys + +def setup(): + return + +def run(core, actor, target, commandString): + + if actor.getLevel() < 82: + actor.sendSystemMessage('@performance:effect_lack_skill_self', 0) + return + + if core.entertainmentService.performEffect(actor, 'DanceFloor', 'clienteffect/entertainer_dance_floor.cef', target) is True: + actor.sendSystemMessage('@performance:effect_perform_dance_floor', 0) + return \ No newline at end of file diff --git a/scripts/commands/flourish.py b/scripts/commands/flourish.py new file mode 100644 index 00000000..51835b03 --- /dev/null +++ b/scripts/commands/flourish.py @@ -0,0 +1,26 @@ +import sys + +def setup(): + return + +def run(core, actor, target, commandString): + + if len(commandString) == 0 or commandString == None or commandString == "": + actor.sendSystemMessage('@performance:flourish_format') + return + + try: + flourish = int(commandString) + except ValueError: + actor.sendSystemMessage('@performance:flourish_not_valid', 0) + return + + if flourish < 1 or flourish > 9: + actor.sendSystemMessage('@performance:flourish_not_valid', 0) + return + + if actor.getPerformanceId() <= 0: + actor.sendSystemMessage('@performance:flourish_not_performing', 0) + return + + core.entertainmentService.performFlourish(actor, flourish) \ No newline at end of file diff --git a/scripts/commands/forage.py b/scripts/commands/forage.py new file mode 100644 index 00000000..bce7443e --- /dev/null +++ b/scripts/commands/forage.py @@ -0,0 +1,74 @@ +import sys +import engine.resources.scene.Point3D +import resources.common.Forager +import time + + +def setup(): + return + +def run(core, actor, target, commandString): + + #if actor.getSkills('Foraging')==0: + #actor.sendSystemMessage('@skl_use:sys_forage_noskill'),0) + + #if actor.isForaging()==1: + #actor.sendSystemMessage('@skl_use:sys_forage_already',0) + #return + + if actor.getCombatFlag()!=0: + actor.sendSystemMessage('@skl_use:sys_forage_combatfail',0) + return + + if actor.getPosture()!=0: + actor.sendSystemMessage('@skl_use:sys_forage_cant',0) + return + + if core.terrainService.isWater(actor.getPlanet(), actor.getPosition().x, actor.getPosition().z): + actor.sendSystemMessage('You cannot forage while in water.',0) + return + + if actor.getContainer() != None: + actor.sendSystemMessage('@skl_use:sys_forage_inside',0) + return + + if actor.getAction() < 200: + actor.sendSystemMessage('@skl_use:sys_forage_attrib',0) + return + + somepoint = engine.resources.scene.Point3D(0,0,0) + if actor.getAttachment('PostForagePosition')==None: + actor.setAttachment('PostForagePosition', somepoint) + + oldposition = actor.getAttachment('PostForagePosition') + if actor.getPosition().getDistance2D(oldposition)<5: + + actor.sendSystemMessage("@skl_use:sys_forage_empty", 0); + return + + + actor.sendSystemMessage('@skl_use:sys_forage_start', 0) + + actor.setAttachment("PreForagePosition", actor.getPosition()) + actor.setCurrentAnimation('forage') + time.sleep(1) # does NOT stall other python scripts, tested + # Each command might be its own thread + + actor.setAttachment("PostForagePosition", actor.getPosition()) + + if actor.getCombatFlag()!=0: + actor.sendSystemMessage('@skl_use:sys_forage_combatfail',0) + return + + oldposition = actor.getAttachment("PreForagePosition") + if actor.getPosition().getDistance2D(oldposition)>2: + actor.sendSystemMessage('@skl_use:sys_forage_movefail',0) + return + + + + forager = resources.common.Forager() + forager.handleForageResults(actor) + + return + \ No newline at end of file diff --git a/scripts/commands/forcerun.py b/scripts/commands/forcerun.py index df72153b..69a25ad8 100644 --- a/scripts/commands/forcerun.py +++ b/scripts/commands/forcerun.py @@ -4,6 +4,6 @@ def setup(core, actor, buff): return def run(core, actor, target, commandString): - core.buffService.addBuffToCreature(actor, 'fs_force_run') + core.buffService.addBuffToCreature(target, 'fs_force_run', actor) return \ No newline at end of file diff --git a/scripts/commands/fs_buff_ca_1.py b/scripts/commands/fs_buff_ca_1.py index 141b3158..2d12673e 100644 --- a/scripts/commands/fs_buff_ca_1.py +++ b/scripts/commands/fs_buff_ca_1.py @@ -4,6 +4,6 @@ def setup(core, actor, buff): return def run(core, actor, target, commandString): - core.buffService.addBuffToCreature(actor, 'fs_buff_ca_1') + core.buffService.addBuffToCreature(actor, 'fs_buff_ca_1', actor) return \ No newline at end of file diff --git a/scripts/commands/fs_buff_def_1_1.py b/scripts/commands/fs_buff_def_1_1.py index cd9637f1..0125c187 100644 --- a/scripts/commands/fs_buff_def_1_1.py +++ b/scripts/commands/fs_buff_def_1_1.py @@ -4,6 +4,6 @@ def setup(core, actor, buff): return def run(core, actor, target, commandString): - core.buffService.addBuffToCreature(actor, 'fs_buff_def_1_1') + core.buffService.addBuffToCreature(actor, 'fs_buff_def_1_1', actor) return \ No newline at end of file diff --git a/scripts/commands/fs_buff_invis_1.py b/scripts/commands/fs_buff_invis_1.py index 57ed4a59..965d034c 100644 --- a/scripts/commands/fs_buff_invis_1.py +++ b/scripts/commands/fs_buff_invis_1.py @@ -4,6 +4,6 @@ def setup(core, actor, buff): return def run(core, actor, target, commandString): - core.buffService.addBuffToCreature(actor, 'invis_fs_buff_invis_1') + core.buffService.addBuffToCreature(actor, 'invis_fs_buff_invis_1', actor) return \ No newline at end of file diff --git a/scripts/commands/fs_saber_reflect_buff.py b/scripts/commands/fs_saber_reflect_buff.py index 898e2530..29f49243 100644 --- a/scripts/commands/fs_saber_reflect_buff.py +++ b/scripts/commands/fs_saber_reflect_buff.py @@ -4,6 +4,6 @@ def setup(core, actor, buff): return def run(core, actor, target, commandString): - core.buffService.addBuffToCreature(actor, 'fs_saber_reflect') + core.buffService.addBuffToCreature(actor, 'fs_saber_reflect', actor) return \ No newline at end of file diff --git a/scripts/commands/gc.py b/scripts/commands/gc.py new file mode 100644 index 00000000..8091acbe --- /dev/null +++ b/scripts/commands/gc.py @@ -0,0 +1,13 @@ +import sys + +def setup(): + return + +def run(core, actor, target, commandString): + group = core.objectService.getObject(actor.getGroupId()) + + if group is None: + return + + core.chatService.sendChatRoomMessage(actor, group.getChatRoomId(), 0, commandString) + return \ No newline at end of file diff --git a/scripts/commands/getfriendlist.py b/scripts/commands/getfriendlist.py index 0a478a48..41188658 100644 --- a/scripts/commands/getfriendlist.py +++ b/scripts/commands/getfriendlist.py @@ -1,11 +1,11 @@ -from protocol.swg import ChatOnGetFriendsList +from protocol.swg.chat import ChatOnGetFriendsList import sys def setup(): return def run(core, actor, target, commandString): - ghost = actor.getSlottedObject('ghost') - friendsListMessage = ChatOnGetFriendsList(ghost) - actor.getClient().getSession().write(friendsListMessage.serialize()) + #ghost = actor.getSlottedObject('ghost') + #friendsListMessage = ChatOnGetFriendsList(ghost) + #actor.getClient().getSession().write(friendsListMessage.serialize()) return \ No newline at end of file diff --git a/scripts/commands/getplayerid.py b/scripts/commands/getplayerid.py new file mode 100644 index 00000000..bb4141a4 --- /dev/null +++ b/scripts/commands/getplayerid.py @@ -0,0 +1,21 @@ +import sys + +def setup(): + return + +def run(core, actor, target, commandString): + commandArgs = commandString.split(" ") + target = core.chatService.getObjectByFirstName(commandArgs[0]) + + if len(commandArgs) > 1: + if commandArgs[1].startswith("id"): + actor.sendSystemMessage('Player Object ID: ' + target.getObjectId()) + return + + elif commandArgs[1].startswith("pid"): + actor.sendSystemMessage('Account ID: ' + str(core.characterService.getAccountId(target.getObjectId())), 0) + return + else: + actor.sendSystemMessage('Player Object ID: ' + str(target.getObjectId()) + ' Account ID: ' + str(core.characterService.getAccountId(target.getObjectId())), 0) + return + return \ No newline at end of file diff --git a/scripts/commands/giveitem.py b/scripts/commands/giveitem.py index 4815a4ab..2d5aba72 100644 --- a/scripts/commands/giveitem.py +++ b/scripts/commands/giveitem.py @@ -2,20 +2,26 @@ import sys def setup(): return - + def run(core, actor, target, commandString): - + + if actor.getClient() and actor.getClient().isGM() == False: + return + if not commandString.startswith('object/tangible') and not commandString.startswith('object/weapon'): return - + object = core.objectService.createObject(commandString, actor.getPlanet()) + #object.setCustomizationVariable('/private/index_color_blade', 0x02) + #object.setCustomizationVariable('private/alternate_shader_blade', 0x02) + if not object: return - + inventory = actor.getSlottedObject('inventory') - + if inventory: inventory.add(object) - + return \ No newline at end of file diff --git a/scripts/commands/grantzoningrights.py b/scripts/commands/grantzoningrights.py new file mode 100644 index 00000000..21cbbb8d --- /dev/null +++ b/scripts/commands/grantzoningrights.py @@ -0,0 +1,40 @@ +import sys +from java.lang import System +from resources.common import OutOfBand +from resources.common import ProsePackage +import main.NGECore + +def setup(): + return + +def run(core, actor, target, commandString): + + if target == None: + return + + #if !actor.hasSkill('Politician'): + #You must be a Politician to enable city zoning. + #actor.sendSystemMessage('@city/city:zoning_skill', 0) + #return + + thisCity = main.NGECore.getInstance().playerCityService.getCityObjectIsIn(actor) + + if thisCity == None: + #not_in_city_limits + actor.sendSystemMessage('@city/city:not_in_city_limits', 0) + return + + if thisCity.getMayorID()!=actor.getObjectID() and not thisCity.isMilitiaMember(actor.getObjectID()): + #You must be the mayor of the city or a member of the city militia to grant zoning rights. + actor.sendSystemMessage('@city/city:grant_rights_fail', 0) + actor.sendSystemMessage('thisCity.getMayorID() %s' % thisCity.getMayorID(), 0) + actor.sendSystemMessage('actor.getObjectID() %s' % actor.getObjectID(), 0) + return + + #You have granted %TO zoning rights for 24 hours. + actor.sendSystemMessage(OutOfBand.ProsePackage("@city/city:rights_granted_self", "TO", target.getCustomName()), 0) + target.setAttachment('Has24HZoningFor',thisCity.getCityID()) + target.setAttachment('Has24HZoningUntil',System.currentTimeMillis()+60*60*24) + target.sendSystemMessage(OutOfBand.ProsePackage("@city/city:rights_granted", "TO", thisCity.getCityName()), 0) + + return \ No newline at end of file diff --git a/scripts/commands/groupchat.py b/scripts/commands/groupchat.py new file mode 100644 index 00000000..03a6ed26 --- /dev/null +++ b/scripts/commands/groupchat.py @@ -0,0 +1,19 @@ +import sys + +def setup(): + return + +def run(core, actor, target, commandString): + + group = core.objectService.getObject(actor.getGroupId()) + + if group is None: + return + + room = core.chatService.getChatRoom(group.getChatRoomId()) + + if room is None: + return + + core.chatService.sendChatRoomMessage(actor, room.getRoomId(), 0, commandString) + return \ No newline at end of file diff --git a/scripts/commands/groupdance.py b/scripts/commands/groupdance.py new file mode 100644 index 00000000..ed38ed89 --- /dev/null +++ b/scripts/commands/groupdance.py @@ -0,0 +1,11 @@ +import sys + +def setup(): + return + +def run(core, actor, target, commandString): + + newState = actor.toggleGroupDance() + msg = '@performance:dance_group_on' if newState else '@performance:dance_group_off' + actor.sendSystemMessage(msg, 0) + return diff --git a/scripts/commands/guild.py b/scripts/commands/guild.py new file mode 100644 index 00000000..2bc6b552 --- /dev/null +++ b/scripts/commands/guild.py @@ -0,0 +1,13 @@ +import sys + +def setup(): + return + +def run(core, actor, target, commandString): + guild = core.guildService.getGuildById(actor.getGuildId()) + + if guild is None: + return + + core.chatService.sendChatRoomMessage(actor, guild.getChatRoomId(), 0, commandString) + return \ No newline at end of file diff --git a/scripts/commands/guildchangename.py b/scripts/commands/guildchangename.py new file mode 100644 index 00000000..a294a9ce --- /dev/null +++ b/scripts/commands/guildchangename.py @@ -0,0 +1,26 @@ +import sys + +def setup(): + return + +def run(core, actor, target, commandString): + + if actor.getGuildId() == 0: + return + + guildSvc = core.guildService + + guild = guildSvc.getGuildById(actor.getGuildId()) + + if guild is None: + return + + member = guild.getMember(actor.getObjectID()) + if actor.getObjectID() != guild.getLeader() and member.hasChangeNamePermission() is False: + actor.sendSystemMessage('@guild:guild_no_permission_operation', 0) + return + else: + guildSvc.handleChangeGuildName(actor, guild) + return + + return \ No newline at end of file diff --git a/scripts/commands/guilddisband.py b/scripts/commands/guilddisband.py new file mode 100644 index 00000000..8f0e6124 --- /dev/null +++ b/scripts/commands/guilddisband.py @@ -0,0 +1,26 @@ +import sys + +def setup(): + return + +def run(core, actor, target, commandString): + + if actor.getGuildId() == 0: + return + + guildSvc = core.guildService + + guild = guildSvc.getGuildById(actor.getGuildId()) + + if guild is None: + return + + member = guild.getMember(actor.getObjectID()) + if actor.getObjectID() != guild.getLeader() and member.hasDisbandPermission() is False: + actor.sendSystemMessage('@guild:guild_no_permission_operation', 0) + return + else: + guildSvc.showDisbandConfirmWindow(actor, target, guild) + return + + return diff --git a/scripts/commands/guildinfo.py b/scripts/commands/guildinfo.py new file mode 100644 index 00000000..aa8a8450 --- /dev/null +++ b/scripts/commands/guildinfo.py @@ -0,0 +1,19 @@ +import sys + +def setup(): + return + +def run(core, actor, target, commandString): + + if actor.getGuildId() == 0: + return + + guildSvc = core.guildService + + guild = guildSvc.getGuildById(actor.getGuildId()) + + if guild is None: + return + + guildSvc.showGuildInfoWindow(actor, guild) + return diff --git a/scripts/commands/guildremove.py b/scripts/commands/guildremove.py new file mode 100644 index 00000000..f974c160 --- /dev/null +++ b/scripts/commands/guildremove.py @@ -0,0 +1,36 @@ +import sys + +def setup(): + return + +def run(core, actor, target, commandString): + + if commandString != " " and commandString != "": + target = core.objectService.getObjectByFirstName(commandString.split(" ")[0]) + + if target is None: + actor.sendSystemMessage('Could not find member ' + commandString + ' (CASE SENSITIVE!)', 0) + return + + if actor.getGuildId() == 0: + return + + if actor.getGuildId() != target.getGuildId(): + actor.sendSystemMessage('@guild:guild_no_permission_operation', 0) + return + + guildSvc = core.guildService + + guild = guildSvc.getGuildById(actor.getGuildId()) + + if guild is None: + return + + if actor.getObjectID() == target.getObjectID(): + guildSvc.leaveGuild(actor, target, guild) + return + else: + guildSvc.showKickConfirmWindow(actor, target, guild) + return + + return diff --git a/scripts/commands/guildsay.py b/scripts/commands/guildsay.py new file mode 100644 index 00000000..23ca291d --- /dev/null +++ b/scripts/commands/guildsay.py @@ -0,0 +1,13 @@ +import sys + +def setup(): + return + +def run(core, actor, target, commandString): + guild = core.guildService.getGuildById(actor.getGuildId()) + + if guild is None: + return + + core.chatService.sendChatRoomMessage(actor, guild.getChatRoomId(), 0, commandString) + return \ No newline at end of file diff --git a/scripts/commands/guildsponsor.py b/scripts/commands/guildsponsor.py new file mode 100644 index 00000000..513af1ed --- /dev/null +++ b/scripts/commands/guildsponsor.py @@ -0,0 +1,28 @@ +import sys + +def setup(): + return + +def run(core, actor, target, commandString): + + if actor.getGuildId() == 0: + return + + guildSvc = core.guildService + + guild = guildSvc.getGuildById(actor.getGuildId()) + + if guild is None: + return + + member = guild.getMember(actor.getObjectID()) + + if member is None: + return + + if not member.hasSponsorPermission(): + actor.sendSystemMessage('@guild:guild_no_permission_operation', 0) + return + + guildSvc.handleGuildSponsorWindow(actor) + return diff --git a/scripts/commands/harvesteractivate.py b/scripts/commands/harvesteractivate.py new file mode 100644 index 00000000..f05ede73 --- /dev/null +++ b/scripts/commands/harvesteractivate.py @@ -0,0 +1,10 @@ +import sys + +def setup(): + return + +def run(core, actor, target, commandString): + core.harvesterService.handleHarvesterActivateCommand(actor, target, commandString) + return + + \ No newline at end of file diff --git a/scripts/commands/harvesterdeactivate.py b/scripts/commands/harvesterdeactivate.py new file mode 100644 index 00000000..7989148f --- /dev/null +++ b/scripts/commands/harvesterdeactivate.py @@ -0,0 +1,8 @@ +import sys + +def setup(): + return + +def run(core, actor, target, commandString): + core.harvesterService.handleHarvesterDeactivateCommand(actor, target, commandString) + return diff --git a/scripts/commands/harvesterdiscardhopper.py b/scripts/commands/harvesterdiscardhopper.py new file mode 100644 index 00000000..6ae345b9 --- /dev/null +++ b/scripts/commands/harvesterdiscardhopper.py @@ -0,0 +1,9 @@ +import sys + +def setup(): + return + +def run(core, actor, target, commandString): + actor.sendSystemMessage('handleEmptyHarvester', 0) + core.harvesterService.handleEmptyHarvester(actor, target, commandString) + return diff --git a/scripts/commands/harvesterselectresource.py b/scripts/commands/harvesterselectresource.py new file mode 100644 index 00000000..cc1c18aa --- /dev/null +++ b/scripts/commands/harvesterselectresource.py @@ -0,0 +1,8 @@ +import sys + +def setup(): + return + +def run(core, actor, target, commandString): + core.harvesterService.handleHarvesterSelectResourceCommand(actor, target, commandString) + return diff --git a/scripts/commands/holoemote.py b/scripts/commands/holoemote.py new file mode 100644 index 00000000..36c15235 --- /dev/null +++ b/scripts/commands/holoemote.py @@ -0,0 +1,76 @@ +import sys + +def setup(): + return + +def run(core, actor, target, commandString): + player = actor.getSlottedObject('ghost') + + if player is None: + return + + if commandString is not None: + commandString = commandString.lower() + + installedEmote = '' + + if actor.hasCooldown('holoEmote'): + actor.sendSystemMessage('Your Holo-Emote generator is in use or recharging.', 0) # Not sure if this is correct. + return + + if player.getHoloEmote() is not None: + installedEmote = player.getHoloEmote().replace('holoemote_','') + + if commandString is None or commandString == "": + commandString = installedEmote + + if installedEmote == None or installedEmote == "": + actor.sendSystemMessage('@image_designer:no_holoemote', 0) + return + + if commandString == 'help': + helpWindow = core.suiService.createMessageBox(1, 'HOLO-EMOTE HELP', holoPrompt(player, installedEmote), actor, actor, 10) + core.suiService.openSUIWindow(helpWindow) + return + + if player.getHoloEmoteUses() < 1: + actor.sendSystemMessage('@image_designer:no_charges_holoemote', 0) + return + + if commandString == "kitty": + commandString = "technokitty" + + if commandString != installedEmote and installedEmote != 'all': + actor.sendSystemMessage('Your installed Holo-Emote generator does not support that emote.', 0) + return + + effectObj = 'clienteffect/holoemote_' + commandString + '.cef' + actor.playEffectObject(effectObj, 'head') + player.setHoloEmoteUses(player.getHoloEmoteUses() - 1) + + actor.addCooldown('holoEmote', float(30)) + + return + +def holoPrompt(player, emote): + emotesToPlay = "Your Holo-Emote generator can only play the " + emote + " Holo-Emote.\n" + if emote == "all": + emotesToPlay = "Your Holo-Emote generator can play all Holo-Emotes available.\n" + + remainingCharges = "You have " + str(player.getHoloEmoteUses()) + " charges remaining.\n" + if player.getHoloEmoteUses() == 1: + remainingCharges = "You have 1 charge remaining.\n" + + body = "To play a Holo-Emote, type /holoemote .\n" \ +"To delete your Holo-Emote type /holoemote delete.\n" \ +"Purchasing a new Holo-Emote will automatically delete your current Holo-Emote.\n" \ +"\n" \ +"The available Holo-Emote names are:\n\n" \ +"Beehive\t Blossom\tBrainstorm\n" \ +"Bubblehead\t Bullhorns\tButterflies\n" \ +"Champagne\t Haunted\tHearts\n" \ +"Hologlitter\t Holonotes\tImperial\n" \ +"Kitty\t\t Phonytail\tRebel\n" \ +"Sparky" + + return emotesToPlay + remainingCharges + body diff --git a/scripts/commands/imagedesign.py b/scripts/commands/imagedesign.py new file mode 100644 index 00000000..d9a87e92 --- /dev/null +++ b/scripts/commands/imagedesign.py @@ -0,0 +1,33 @@ +from protocol.swg.objectControllerObjects import ImageDesignStartMessage +from protocol.swg import ObjControllerMessage +import sys + +def setup(): + return + +def run(core, actor, target, commandString): + + if target is None and commandString is None: + design = ImageDesignStartMessage(actor.getObjectId(), actor.getObjectId(), actor.getObjectId()) + obj = ObjControllerMessage(11, design) + actor.getClient().getSession().write(obj.serialize()) + return + + else: + if target is None and commandString is not None: + target = core.chatService.getObjectByFirstName(commandString) + if target is None: + return + + if target.getGroupId() == actor.getGroupId(): + + tDesign = ImageDesignStartMessage(target.getObjectId(), actor.getObjectId(), target.getObjectId()) + tObj = ObjControllerMessage(11, tDesign) + target.getClient().getSession().write(tObj.serialize()) + + design = ImageDesignStartMessage(actor.getObjectId(), actor.getObjectId(), target.getObjectId()) + obj = ObjControllerMessage(11, design) + actor.getClient().getSession().write(obj.serialize()) + return + return + return \ No newline at end of file diff --git a/scripts/commands/inspire.py b/scripts/commands/inspire.py new file mode 100644 index 00000000..57cd0a29 --- /dev/null +++ b/scripts/commands/inspire.py @@ -0,0 +1,48 @@ +from protocol.swg.objectControllerObjects import BuffBuilderStartMessage +from protocol.swg import ObjControllerMessage +import sys + +def setup(): + return + +def run(core, actor, target, commandString): + playerObject = actor.getSlottedObject('ghost') + + if not playerObject or playerObject.getProfession() != "entertainer_1a": + return + + if target is None or actor.getObjectId() == target.getObjectId(): + openBuffWindow = BuffBuilderStartMessage(actor.getObjectId(), actor.getObjectId(), actor.getObjectId()) + objController = ObjControllerMessage(11, openBuffWindow) + actor.getClient().getSession().write(objController.serialize()) + return + + if target is None and commandString is not None: + target = core.chatService.getObjectByFirstName(commandString) + if target is None: + return + + if actor.getPosture() != 0x09 and target.getObjectId() != actor.getObjectId(): + actor.sendSystemMessage('@performance:insp_buff_must_perform', 2) + return + + if not target.getPerformanceWatchee() or target.getPerformanceWatchee() != actor: + if actor.getPerformanceType(): + actor.sendSystemMessage('@performance:insp_buff_must_watch', 2) + return + else: + actor.sendSystemMessage('@performance:insp_buff_must_listen', 2) + return + + if target.getPosition().getDistance2D(actor.getWorldPosition()) > float(20): + actor.sendSystemMessage(target.getCustomName() + ' is too far away to inspire.', 0) + return + + builderWindow = BuffBuilderStartMessage(actor.getObjectId(), actor.getObjectId(), target.getObjectId()) + objController = ObjControllerMessage(11, builderWindow) + actor.getClient().getSession().write(objController.serialize()) + + recipientWindow = BuffBuilderStartMessage(target.getObjectId(), actor.getObjectId(), target.getObjectId()) + objController2 = ObjControllerMessage(11, recipientWindow) + target.getClient().getSession().write(objController2.serialize()) + return diff --git a/scripts/commands/laserShow.py b/scripts/commands/laserShow.py new file mode 100644 index 00000000..df9af800 --- /dev/null +++ b/scripts/commands/laserShow.py @@ -0,0 +1,14 @@ +import sys + +def setup(): + return + +def run(core, actor, target, commandString): + + if actor.getLevel() < 42: + actor.sendSystemMessage('@performance:effect_lack_skill_self', 0) + return + + if core.entertainmentService.performEffect(actor, 'LaserShow', 'clienteffect/entertainer_laser_show.cef', target) is True: + actor.sendSystemMessage('@performance:effect_perform_laser_show', 0) + return diff --git a/scripts/commands/lfg.py b/scripts/commands/lfg.py new file mode 100644 index 00000000..4d22f5ca --- /dev/null +++ b/scripts/commands/lfg.py @@ -0,0 +1,10 @@ +from resources.datatables import PlayerFlags +import sys + +def setup(): + return + +def run(core, actor, target, commandString): + ghost = actor.getSlottedObject('ghost') + ghost.toggleFlag(PlayerFlags.LFG) + return \ No newline at end of file diff --git a/scripts/commands/loot.py b/scripts/commands/loot.py new file mode 100644 index 00000000..19ae81f3 --- /dev/null +++ b/scripts/commands/loot.py @@ -0,0 +1,14 @@ +import sys + +def setup(): + return + +def run(core, actor, target, commandString): + + if not target: + return + + #actor.sendSystemMessage('LOOT SCRIPT COMMAND', 0) + core.lootService.handleLootRequest(actor,target) + return + \ No newline at end of file diff --git a/scripts/commands/lootall.py b/scripts/commands/lootall.py new file mode 100644 index 00000000..7d0154a3 --- /dev/null +++ b/scripts/commands/lootall.py @@ -0,0 +1,11 @@ +import sys + +def setup(): + return + +def run(core, actor, target, commandString): + + actor.sendSystemMessage('LootALL.', 0) + + return + \ No newline at end of file diff --git a/scripts/commands/me_buff_health_1.py b/scripts/commands/me_buff_health_1.py new file mode 100644 index 00000000..ad02456d --- /dev/null +++ b/scripts/commands/me_buff_health_1.py @@ -0,0 +1,19 @@ +import sys + +def setup(core, actor, buff): + return + +def run(core, actor, target, commandString): + + group = core.objectService.getObject(actor.getGroupId()) + + if target and target.getSlottedObject("ghost"): + if group and target in group.getMemberList(): + core.buffService.addGroupBuff(target, 'me_buff_health_0', actor) + else: + core.buffService.addBuffToCreature(target, 'me_buff_health_0', actor) + else: + core.buffService.addGroupBuff(actor, 'me_buff_health_0', actor) + + return + \ No newline at end of file diff --git a/scripts/commands/me_buff_health_2.py b/scripts/commands/me_buff_health_2.py new file mode 100644 index 00000000..fb9880d2 --- /dev/null +++ b/scripts/commands/me_buff_health_2.py @@ -0,0 +1,19 @@ +import sys + +def setup(core, actor, buff): + return + +def run(core, actor, target, commandString): + + group = core.objectService.getObject(actor.getGroupId()) + + if target and target.getSlottedObject("ghost"): + if group and target in group.getMemberList(): + core.buffService.addGroupBuff(target, 'me_buff_health', actor) + else: + core.buffService.addBuffToCreature(target, 'me_buff_health', actor) + else: + core.buffService.addGroupBuff(actor, 'me_buff_health', actor) + + return + \ No newline at end of file diff --git a/scripts/commands/me_buff_health_3.py b/scripts/commands/me_buff_health_3.py new file mode 100644 index 00000000..dd4c396c --- /dev/null +++ b/scripts/commands/me_buff_health_3.py @@ -0,0 +1,19 @@ +import sys + +def setup(core, actor, buff): + return + +def run(core, actor, target, commandString): + + group = core.objectService.getObject(actor.getGroupId()) + + if target and target.getSlottedObject("ghost"): + if group and target in group.getMemberList(): + core.buffService.addGroupBuff(target, 'me_buff_health_2', actor) + else: + core.buffService.addBuffToCreature(target, 'me_buff_health_2', actor) + else: + core.buffService.addGroupBuff(actor, 'me_buff_health_2', actor) + + return + \ No newline at end of file diff --git a/scripts/commands/me_cure_affliction_1.py b/scripts/commands/me_cure_affliction_1.py new file mode 100644 index 00000000..4b52e823 --- /dev/null +++ b/scripts/commands/me_cure_affliction_1.py @@ -0,0 +1,8 @@ +import sys + +def setup(core, actor, buff): + return + +def run(core, actor, target, commandString): + core.buffService.addBuffToCreature(actor, 'me_cure_affliction_1', actor) + return \ No newline at end of file diff --git a/scripts/commands/me_enhance_action_1.py b/scripts/commands/me_enhance_action_1.py new file mode 100644 index 00000000..9239af4d --- /dev/null +++ b/scripts/commands/me_enhance_action_1.py @@ -0,0 +1,19 @@ +import sys + +def setup(core, actor, buff): + return + +def run(core, actor, target, commandString): + + group = core.objectService.getObject(actor.getGroupId()) + + if target and target.getSlottedObject("ghost"): + if group and target in group.getMemberList(): + core.buffService.addGroupBuff(target, 'me_buff_action_1', actor) + else: + core.buffService.addBuffToCreature(target, 'me_buff_action_1', actor) + else: + core.buffService.addGroupBuff(actor, 'me_buff_action_1', actor) + + return + \ No newline at end of file diff --git a/scripts/commands/me_enhance_action_2.py b/scripts/commands/me_enhance_action_2.py new file mode 100644 index 00000000..1c9b8dff --- /dev/null +++ b/scripts/commands/me_enhance_action_2.py @@ -0,0 +1,19 @@ +import sys + +def setup(core, actor, buff): + return + +def run(core, actor, target, commandString): + + group = core.objectService.getObject(actor.getGroupId()) + + if target and target.getSlottedObject("ghost"): + if group and target in group.getMemberList(): + core.buffService.addGroupBuff(target, 'me_buff_action_2', actor) + else: + core.buffService.addBuffToCreature(target, 'me_buff_action_2', actor) + else: + core.buffService.addGroupBuff(actor, 'me_buff_action_2', actor) + + return + \ No newline at end of file diff --git a/scripts/commands/me_enhance_action_3.py b/scripts/commands/me_enhance_action_3.py new file mode 100644 index 00000000..a4d9dd4a --- /dev/null +++ b/scripts/commands/me_enhance_action_3.py @@ -0,0 +1,19 @@ +import sys + +def setup(core, actor, buff): + return + +def run(core, actor, target, commandString): + + group = core.objectService.getObject(actor.getGroupId()) + + if target and target.getSlottedObject("ghost"): + if group and target in group.getMemberList(): + core.buffService.addGroupBuff(target, 'me_buff_action_3', actor) + else: + core.buffService.addBuffToCreature(target, 'me_buff_action_3', actor) + else: + core.buffService.addGroupBuff(actor, 'me_buff_action_3', actor) + + return + \ No newline at end of file diff --git a/scripts/commands/me_enhance_agility_1.py b/scripts/commands/me_enhance_agility_1.py new file mode 100644 index 00000000..50b163ac --- /dev/null +++ b/scripts/commands/me_enhance_agility_1.py @@ -0,0 +1,19 @@ +import sys + +def setup(core, actor, buff): + return + +def run(core, actor, target, commandString): + + group = core.objectService.getObject(actor.getGroupId()) + + if target and target.getSlottedObject("ghost"): + if group and target in group.getMemberList(): + core.buffService.addGroupBuff(target, 'me_buff_agility_1', actor) + else: + core.buffService.addBuffToCreature(target, 'me_buff_agility_1', actor) + else: + core.buffService.addGroupBuff(actor, 'me_buff_agility_1', actor) + + return + \ No newline at end of file diff --git a/scripts/commands/me_enhance_agility_2.py b/scripts/commands/me_enhance_agility_2.py new file mode 100644 index 00000000..0df03459 --- /dev/null +++ b/scripts/commands/me_enhance_agility_2.py @@ -0,0 +1,19 @@ +import sys + +def setup(core, actor, buff): + return + +def run(core, actor, target, commandString): + + group = core.objectService.getObject(actor.getGroupId()) + + if target and target.getSlottedObject("ghost"): + if group and target in group.getMemberList(): + core.buffService.addGroupBuff(target, 'me_buff_agility_2', actor) + else: + core.buffService.addBuffToCreature(target, 'me_buff_agility_2', actor) + else: + core.buffService.addGroupBuff(actor, 'me_buff_agility_2', actor) + + return + \ No newline at end of file diff --git a/scripts/commands/me_enhance_agility_3.py b/scripts/commands/me_enhance_agility_3.py new file mode 100644 index 00000000..fe489909 --- /dev/null +++ b/scripts/commands/me_enhance_agility_3.py @@ -0,0 +1,19 @@ +import sys + +def setup(core, actor, buff): + return + +def run(core, actor, target, commandString): + + group = core.objectService.getObject(actor.getGroupId()) + + if target and target.getSlottedObject("ghost"): + if group and target in group.getMemberList(): + core.buffService.addGroupBuff(target, 'me_buff_agility_3', actor) + else: + core.buffService.addBuffToCreature(target, 'me_buff_agility_3', actor) + else: + core.buffService.addGroupBuff(actor, 'me_buff_agility_3', actor) + + return + \ No newline at end of file diff --git a/scripts/commands/me_enhance_block_1.py b/scripts/commands/me_enhance_block_1.py new file mode 100644 index 00000000..d1f27220 --- /dev/null +++ b/scripts/commands/me_enhance_block_1.py @@ -0,0 +1,19 @@ +import sys + +def setup(core, actor, buff): + return + +def run(core, actor, target, commandString): + + group = core.objectService.getObject(actor.getGroupId()) + + if target and target.getSlottedObject("ghost"): + if group and target in group.getMemberList(): + core.buffService.addGroupBuff(target, 'me_buff_melee_gb_1', actor) + else: + core.buffService.addBuffToCreature(target, 'me_buff_melee_gb_1', actor) + else: + core.buffService.addGroupBuff(actor, 'me_buff_melee_gb_1', actor) + + return + \ No newline at end of file diff --git a/scripts/commands/me_enhance_dodge_1.py b/scripts/commands/me_enhance_dodge_1.py new file mode 100644 index 00000000..9702a6f3 --- /dev/null +++ b/scripts/commands/me_enhance_dodge_1.py @@ -0,0 +1,19 @@ +import sys + +def setup(core, actor, buff): + return + +def run(core, actor, target, commandString): + + group = core.objectService.getObject(actor.getGroupId()) + + if target and target.getSlottedObject("ghost"): + if group and target in group.getMemberList(): + core.buffService.addGroupBuff(target, 'me_buff_ranged_gb_1', actor) + else: + core.buffService.addBuffToCreature(target, 'me_buff_ranged_gb_1', actor) + else: + core.buffService.addGroupBuff(actor, 'me_buff_ranged_gb_1', actor) + + return + \ No newline at end of file diff --git a/scripts/commands/me_enhance_precision_1.py b/scripts/commands/me_enhance_precision_1.py new file mode 100644 index 00000000..a5ddce5a --- /dev/null +++ b/scripts/commands/me_enhance_precision_1.py @@ -0,0 +1,19 @@ +import sys + +def setup(core, actor, buff): + return + +def run(core, actor, target, commandString): + + group = core.objectService.getObject(actor.getGroupId()) + + if target and target.getSlottedObject("ghost"): + if group and target in group.getMemberList(): + core.buffService.addGroupBuff(target, 'me_buff_precision_1', actor) + else: + core.buffService.addBuffToCreature(target, 'me_buff_precision_1', actor) + else: + core.buffService.addGroupBuff(actor, 'me_buff_precision_1', actor) + + return + \ No newline at end of file diff --git a/scripts/commands/me_enhance_precision_2.py b/scripts/commands/me_enhance_precision_2.py new file mode 100644 index 00000000..9c6906d2 --- /dev/null +++ b/scripts/commands/me_enhance_precision_2.py @@ -0,0 +1,19 @@ +import sys + +def setup(core, actor, buff): + return + +def run(core, actor, target, commandString): + + group = core.objectService.getObject(actor.getGroupId()) + + if target and target.getSlottedObject("ghost"): + if group and target in group.getMemberList(): + core.buffService.addGroupBuff(target, 'me_buff_precision_2', actor) + else: + core.buffService.addBuffToCreature(target, 'me_buff_precision_2', actor) + else: + core.buffService.addGroupBuff(actor, 'me_buff_precision_2', actor) + + return + \ No newline at end of file diff --git a/scripts/commands/me_enhance_precision_3.py b/scripts/commands/me_enhance_precision_3.py new file mode 100644 index 00000000..a4997749 --- /dev/null +++ b/scripts/commands/me_enhance_precision_3.py @@ -0,0 +1,19 @@ +import sys + +def setup(core, actor, buff): + return + +def run(core, actor, target, commandString): + + group = core.objectService.getObject(actor.getGroupId()) + + if target and target.getSlottedObject("ghost"): + if group and target in group.getMemberList(): + core.buffService.addGroupBuff(target, 'me_buff_precision_3', actor) + else: + core.buffService.addBuffToCreature(target, 'me_buff_precision_3', actor) + else: + core.buffService.addGroupBuff(actor, 'me_buff_precision_3', actor) + + return + \ No newline at end of file diff --git a/scripts/commands/me_enhance_strength_1.py b/scripts/commands/me_enhance_strength_1.py new file mode 100644 index 00000000..cf3529bc --- /dev/null +++ b/scripts/commands/me_enhance_strength_1.py @@ -0,0 +1,19 @@ +import sys + +def setup(core, actor, buff): + return + +def run(core, actor, target, commandString): + + group = core.objectService.getObject(actor.getGroupId()) + + if target and target.getSlottedObject("ghost"): + if group and target in group.getMemberList(): + core.buffService.addGroupBuff(target, 'me_buff_strength_1', actor) + else: + core.buffService.addBuffToCreature(target, 'me_buff_strength_1', actor) + else: + core.buffService.addGroupBuff(actor, 'me_buff_strength_1', actor) + + return + \ No newline at end of file diff --git a/scripts/commands/me_enhance_strength_2.py b/scripts/commands/me_enhance_strength_2.py new file mode 100644 index 00000000..13ddfe22 --- /dev/null +++ b/scripts/commands/me_enhance_strength_2.py @@ -0,0 +1,19 @@ +import sys + +def setup(core, actor, buff): + return + +def run(core, actor, target, commandString): + + group = core.objectService.getObject(actor.getGroupId()) + + if target and target.getSlottedObject("ghost"): + if group and target in group.getMemberList(): + core.buffService.addGroupBuff(target, 'me_buff_strength_2', actor) + else: + core.buffService.addBuffToCreature(target, 'me_buff_strength_2', actor) + else: + core.buffService.addGroupBuff(actor, 'me_buff_strength_2', actor) + + return + \ No newline at end of file diff --git a/scripts/commands/me_enhance_strength_3.py b/scripts/commands/me_enhance_strength_3.py new file mode 100644 index 00000000..2a822999 --- /dev/null +++ b/scripts/commands/me_enhance_strength_3.py @@ -0,0 +1,19 @@ +import sys + +def setup(core, actor, buff): + return + +def run(core, actor, target, commandString): + + group = core.objectService.getObject(actor.getGroupId()) + + if target and target.getSlottedObject("ghost"): + if group and target in group.getMemberList(): + core.buffService.addGroupBuff(target, 'me_buff_strength_3', actor) + else: + core.buffService.addBuffToCreature(target, 'me_buff_strength_3', actor) + else: + core.buffService.addGroupBuff(actor, 'me_buff_strength_3', actor) + + return + \ No newline at end of file diff --git a/scripts/commands/me_evasion_1.py b/scripts/commands/me_evasion_1.py new file mode 100644 index 00000000..6fb5001a --- /dev/null +++ b/scripts/commands/me_evasion_1.py @@ -0,0 +1,8 @@ +import sys + +def setup(core, actor, buff): + return + +def run(core, actor, target, commandString): + core.buffService.addBuffToCreature(actor, 'me_evasion_1', actor) + return \ No newline at end of file diff --git a/scripts/commands/me_serotonin_boost_1.py b/scripts/commands/me_serotonin_boost_1.py new file mode 100644 index 00000000..1e45f39c --- /dev/null +++ b/scripts/commands/me_serotonin_boost_1.py @@ -0,0 +1,9 @@ +import sys + +def setup(core, actor, buff): + return + +def run(core, actor, target, commandString): + core.buffService.addBuffToCreature(actor, 'me_serotonin_boost_1') + return + \ No newline at end of file diff --git a/scripts/commands/me_stasis_self_1.py b/scripts/commands/me_stasis_self_1.py index fc808c70..192637a1 100644 --- a/scripts/commands/me_stasis_self_1.py +++ b/scripts/commands/me_stasis_self_1.py @@ -18,7 +18,7 @@ def run(core, actor, target, commandString): if not combatSvc.applySpecialCost(actor, weapon, CombatCommand('me_stasis_self_1')): return - core.buffService.addBuffToCreature(actor, 'me_stasis_self_1') + core.buffService.addBuffToCreature(actor, 'me_stasis_self_1', actor) return \ No newline at end of file diff --git a/scripts/commands/meditate.py b/scripts/commands/meditate.py new file mode 100644 index 00000000..8e0ed60f --- /dev/null +++ b/scripts/commands/meditate.py @@ -0,0 +1,23 @@ +import sys + +def setup(): + return + +def run(core, actor, target, commandString): + ##To do make it reset moodanimations when meditation is cancled. + + # if core.collectionService.isComplete(actor, 'inv_holocron_collection_02') is False: + # return + + if actor.getPosture() != 0x08: + actor.sendSystemMessage('You need to sit',0) + actor.setMoodAnimation('neutral') + return + if actor.getPosture() == 0x08: + actor.setMoodAnimation('meditating') + return + if actor.getPosture() == 0x00: + actor.setMoodAnimation('neutral') + return + return + diff --git a/scripts/commands/mount.py b/scripts/commands/mount.py new file mode 100644 index 00000000..40b6e080 --- /dev/null +++ b/scripts/commands/mount.py @@ -0,0 +1,16 @@ +import sys + +def setup(): + return + +def run(core, actor, target, commandString): + if not target: + return + + if actor.getObjectID() != target.getOwnerId(): + return + + if core.mountService.isMounted(actor) is False: + core.mountService.mount(actor, target) + + return diff --git a/scripts/commands/movefurniture.py b/scripts/commands/movefurniture.py new file mode 100644 index 00000000..46295121 --- /dev/null +++ b/scripts/commands/movefurniture.py @@ -0,0 +1,38 @@ +import sys +from engine.resources.scene import Point3D + +def setup(): + return + +def run(core, actor, target, commandString): + tarObj = core.objectService.getObject(actor.getTargetId()) + container = actor.getContainer() + parsedMsg = commandString.split(' ', 2) + + if tarObj.getAttachment('initialized') is not None and target.getAttachment('initialized') == True: + return + + if core.housingService.getPermissions(actor, container): # i should probably relook into my permissions system... it kinda sucks + if parsedMsg[0] == "up": + core.simulationService.transform(tarObj, Point3D(0, float(parsedMsg[1]) * 0.01, 0)) + return + elif parsedMsg[0] == "down": + core.simulationService.transform(tarObj, Point3D(0, float(parsedMsg[1]) * -0.01, 0)) + return + elif parsedMsg[0] == "forward": + core.simulationService.transform(tarObj, Point3D(0, 0, float(parsedMsg[1]) * 0.01)) + return + elif parsedMsg[0] == "back": + core.simulationService.transform(tarObj, Point3D(0, 0, float(parsedMsg[1]) * -0.01)) + return + elif parsedMsg[0] == "right": + core.simulationService.transform(tarObj, Point3D(float(parsedMsg[1]) * 0.01, 0, 0)) + return + elif parsedMsg[0] == "left": + core.simulationService.transform(tarObj, Point3D(float(parsedMsg[1]) * -0.01, 0, 0)) + return + elif container.getTemplate() == "object/cell/shared_cell.iff": + actor.sendSystemMessage("You do not have permission to access that container!", 0) + return + + return diff --git a/scripts/commands/newbiehelper.py b/scripts/commands/newbiehelper.py new file mode 100644 index 00000000..277ecd01 --- /dev/null +++ b/scripts/commands/newbiehelper.py @@ -0,0 +1,10 @@ +from resources.datatables import PlayerFlags +import sys + +def setup(): + return + +def run(core, actor, target, commandString): + ghost = actor.getSlottedObject('ghost') + ghost.toggleFlag(PlayerFlags.HELPER) + return \ No newline at end of file diff --git a/scripts/commands/npcconversationselect.py b/scripts/commands/npcconversationselect.py new file mode 100644 index 00000000..92bd4bf3 --- /dev/null +++ b/scripts/commands/npcconversationselect.py @@ -0,0 +1,10 @@ +import sys + +def setup(): + return + +def run(core, actor, target, commandString): + #print int(commandString) + core.conversationService.handleConversationSelection(actor, int(commandString)) + return + \ No newline at end of file diff --git a/scripts/commands/npcconversationstop.py b/scripts/commands/npcconversationstop.py new file mode 100644 index 00000000..f7b6b21b --- /dev/null +++ b/scripts/commands/npcconversationstop.py @@ -0,0 +1,10 @@ +import sys + +def setup(): + return + +def run(core, actor, target, commandString): + if actor.getConversingNpc(): + core.conversationService.handleEndConversation(actor, actor.getConversingNpc()) + return + \ No newline at end of file diff --git a/scripts/commands/of_buff_def_1.py b/scripts/commands/of_buff_def_1.py index d7403af1..a83218bd 100644 --- a/scripts/commands/of_buff_def_1.py +++ b/scripts/commands/of_buff_def_1.py @@ -4,9 +4,7 @@ def setup(core, actor, buff): return def run(core, actor, target, commandString): - core.buffService.addBuffToCreature(actor, 'of_buff_def_1') - group = core.objectService.getObject(actor.getGroupId()) - for creature in group.getMemberList(): - core.buffService.addBuffToCreature(creature, 'of_buff_def_1') + + core.buffService.addGroupBuff(actor, 'of_buff_def_1', actor) return \ No newline at end of file diff --git a/scripts/commands/of_buff_def_2.py b/scripts/commands/of_buff_def_2.py index cd5fd42d..f8f1b6be 100644 --- a/scripts/commands/of_buff_def_2.py +++ b/scripts/commands/of_buff_def_2.py @@ -4,9 +4,7 @@ def setup(core, actor, buff): return def run(core, actor, target, commandString): - core.buffService.addBuffToCreature(actor, 'of_buff_def_2') - group = core.objectService.getObject(actor.getGroupId()) - for creature in group.getMemberList(): - core.buffService.addBuffToCreature(creature, 'of_buff_def_2') + + core.buffService.addGroupBuff(actor, 'of_buff_def_2', actor) return \ No newline at end of file diff --git a/scripts/commands/of_buff_def_3.py b/scripts/commands/of_buff_def_3.py index 85b34c54..9215bcf2 100644 --- a/scripts/commands/of_buff_def_3.py +++ b/scripts/commands/of_buff_def_3.py @@ -4,9 +4,6 @@ def setup(core, actor, buff): return def run(core, actor, target, commandString): - core.buffService.addBuffToCreature(actor, 'of_buff_def_3') - group = core.objectService.getObject(actor.getGroupId()) - for creature in group.getMemberList(): - core.buffService.addBuffToCreature(creature, 'of_buff_def_3') + core.buffService.addGroupBuff(actor, 'of_buff_def_3', actor) return \ No newline at end of file diff --git a/scripts/commands/of_buff_def_4.py b/scripts/commands/of_buff_def_4.py index 0831b80f..819db023 100644 --- a/scripts/commands/of_buff_def_4.py +++ b/scripts/commands/of_buff_def_4.py @@ -4,9 +4,6 @@ def setup(core, actor, buff): return def run(core, actor, target, commandString): - core.buffService.addBuffToCreature(actor, 'of_buff_def_4') - group = core.objectService.getObject(actor.getGroupId()) - for creature in group.getMemberList(): - core.buffService.addBuffToCreature(creature, 'of_buff_def_4') + core.buffService.addGroupBuff(actor, 'of_buff_def_4', actor) return \ No newline at end of file diff --git a/scripts/commands/of_buff_def_5.py b/scripts/commands/of_buff_def_5.py index f3577253..f919171c 100644 --- a/scripts/commands/of_buff_def_5.py +++ b/scripts/commands/of_buff_def_5.py @@ -4,9 +4,6 @@ def setup(core, actor, buff): return def run(core, actor, target, commandString): - core.buffService.addBuffToCreature(actor, 'of_buff_def_5') - group = core.objectService.getObject(actor.getGroupId()) - for creature in group.getMemberList(): - core.buffService.addBuffToCreature(creature, 'of_buff_def_5') + core.buffService.addGroupBuff(actor, 'of_buff_def_5', actor) return \ No newline at end of file diff --git a/scripts/commands/of_buff_def_6.py b/scripts/commands/of_buff_def_6.py index 890aea37..54aaa36e 100644 --- a/scripts/commands/of_buff_def_6.py +++ b/scripts/commands/of_buff_def_6.py @@ -4,9 +4,7 @@ def setup(core, actor, buff): return def run(core, actor, target, commandString): - core.buffService.addBuffToCreature(actor, 'of_buff_def_6') - group = core.objectService.getObject(actor.getGroupId()) - for creature in group.getMemberList(): - core.buffService.addBuffToCreature(creature, 'of_buff_def_6') + + core.buffService.addGroupBuff(actor, 'of_buff_def_6', actor) return \ No newline at end of file diff --git a/scripts/commands/of_buff_def_7.py b/scripts/commands/of_buff_def_7.py index 7235a9a0..a7b8e72a 100644 --- a/scripts/commands/of_buff_def_7.py +++ b/scripts/commands/of_buff_def_7.py @@ -4,9 +4,7 @@ def setup(core, actor, buff): return def run(core, actor, target, commandString): - core.buffService.addBuffToCreature(actor, 'of_buff_def_7') - group = core.objectService.getObject(actor.getGroupId()) - for creature in group.getMemberList(): - core.buffService.addBuffToCreature(creature, 'of_buff_def_7') + + core.buffService.addGroupBuff(actor, 'of_buff_def_7', actor) return \ No newline at end of file diff --git a/scripts/commands/of_buff_def_8.py b/scripts/commands/of_buff_def_8.py index 3ef2ec72..d84ba723 100644 --- a/scripts/commands/of_buff_def_8.py +++ b/scripts/commands/of_buff_def_8.py @@ -4,9 +4,7 @@ def setup(core, actor, buff): return def run(core, actor, target, commandString): - core.buffService.addBuffToCreature(actor, 'of_buff_def_8') - group = core.objectService.getObject(actor.getGroupId()) - for creature in group.getMemberList(): - core.buffService.addBuffToCreature(creature, 'of_buff_def_8') + + core.buffService.addGroupBuff(actor, 'of_buff_def_8', actor) return \ No newline at end of file diff --git a/scripts/commands/of_buff_def_9.py b/scripts/commands/of_buff_def_9.py index ecf3917c..45f6a8f8 100644 --- a/scripts/commands/of_buff_def_9.py +++ b/scripts/commands/of_buff_def_9.py @@ -4,9 +4,7 @@ def setup(core, actor, buff): return def run(core, actor, target, commandString): - core.buffService.addBuffToCreature(actor, 'of_buff_def_9') - group = core.objectService.getObject(actor.getGroupId()) - for creature in group.getMemberList(): - core.buffService.addBuffToCreature(creature, 'of_buff_def_9') + + core.buffService.addGroupBuff(actor, 'of_buff_def_9', actor) return \ No newline at end of file diff --git a/scripts/commands/of_charge_1.py b/scripts/commands/of_charge_1.py index 8b1194d2..74dfbc79 100644 --- a/scripts/commands/of_charge_1.py +++ b/scripts/commands/of_charge_1.py @@ -4,9 +4,6 @@ def setup(core, actor, buff): return def run(core, actor, target, commandString): - core.buffService.addBuffToCreature(actor, 'of_charge_1') - group = core.objectService.getObject(actor.getGroupId()) - for creature in group.getMemberList(): - core.buffService.addBuffToCreature(creature, 'of_charge_1') + core.buffService.addBuffToCreature(actor, 'of_charge_1', actor) return \ No newline at end of file diff --git a/scripts/commands/of_drillmaster_1.py b/scripts/commands/of_drillmaster_1.py index 313f855b..179b494a 100644 --- a/scripts/commands/of_drillmaster_1.py +++ b/scripts/commands/of_drillmaster_1.py @@ -4,9 +4,6 @@ def setup(core, actor, buff): return def run(core, actor, target, commandString): - core.buffService.addBuffToCreature(actor, 'of_drillmaster_1') - group = core.objectService.getObject(actor.getGroupId()) - for creature in group.getMemberList(): - core.buffService.addBuffToCreature(creature, 'of_drillmaster_1') + core.buffService.addGroupBuff(actor, 'of_drillmaster_1', actor) return \ No newline at end of file diff --git a/scripts/commands/of_emergency_shield.py b/scripts/commands/of_emergency_shield.py index 0a9cb543..73586f60 100644 --- a/scripts/commands/of_emergency_shield.py +++ b/scripts/commands/of_emergency_shield.py @@ -4,6 +4,6 @@ def setup(core, actor, buff): return def run(core, actor, target, commandString): - core.buffService.addBuffToCreature(actor, 'of_emergency_shield') + core.buffService.addBuffToCreature(actor, 'of_emergency_shield', actor) return \ No newline at end of file diff --git a/scripts/commands/of_firepower_1.py b/scripts/commands/of_firepower_1.py index 50eba86a..442a5d45 100644 --- a/scripts/commands/of_firepower_1.py +++ b/scripts/commands/of_firepower_1.py @@ -4,6 +4,6 @@ def setup(core, actor, buff): return def run(core, actor, target, commandString): - core.buffService.addBuffToCreature(actor, 'of_firepower') + core.buffService.addBuffToCreature(actor, 'of_firepower', actor) return \ No newline at end of file diff --git a/scripts/commands/of_focus_fire_1.py b/scripts/commands/of_focus_fire_1.py index 4857b1ce..1cd0503c 100644 --- a/scripts/commands/of_focus_fire_1.py +++ b/scripts/commands/of_focus_fire_1.py @@ -4,9 +4,6 @@ def setup(core, actor, buff): return def run(core, actor, target, commandString): - core.buffService.addBuffToCreature(actor, 'of_focus_fire_1') - group = core.objectService.getObject(actor.getGroupId()) - for creature in group.getMemberList(): - core.buffService.addBuffToCreature(creature, 'of_focus_fire_1') + core.buffService.addGroupBuff(actor, 'of_focus_fire_1', actor) return \ No newline at end of file diff --git a/scripts/commands/of_focus_fire_2.py b/scripts/commands/of_focus_fire_2.py index 2eb8248d..b7fe9e07 100644 --- a/scripts/commands/of_focus_fire_2.py +++ b/scripts/commands/of_focus_fire_2.py @@ -4,8 +4,6 @@ def setup(core, actor, buff): return def run(core, actor, target, commandString): - core.buffService.addBuffToCreature(actor, 'of_focus_fire_1') - group = core.objectService.getObject(actor.getGroupId()) - for creature in group.getMemberList(): - core.buffService.addBuffToCreature(creature, 'of_focus_fire_2') - return \ No newline at end of file + core.buffService.addGroupBuff(actor, 'of_focus_fire_2', actor) + return + \ No newline at end of file diff --git a/scripts/commands/of_focus_fire_3.py b/scripts/commands/of_focus_fire_3.py index bac08eb4..a7cd6223 100644 --- a/scripts/commands/of_focus_fire_3.py +++ b/scripts/commands/of_focus_fire_3.py @@ -4,8 +4,6 @@ def setup(core, actor, buff): return def run(core, actor, target, commandString): - core.buffService.addBuffToCreature(actor, 'of_focus_fire_1') - group = core.objectService.getObject(actor.getGroupId()) - for creature in group.getMemberList(): - core.buffService.addBuffToCreature(creature, 'of_focus_fire_3') - return \ No newline at end of file + core.buffService.addGroupBuff(actor, 'of_focus_fire_3', actor) + return + \ No newline at end of file diff --git a/scripts/commands/of_focus_fire_4.py b/scripts/commands/of_focus_fire_4.py index 4091e213..208f53e5 100644 --- a/scripts/commands/of_focus_fire_4.py +++ b/scripts/commands/of_focus_fire_4.py @@ -4,8 +4,6 @@ def setup(core, actor, buff): return def run(core, actor, target, commandString): - core.buffService.addBuffToCreature(actor, 'of_focus_fire_1') - group = core.objectService.getObject(actor.getGroupId()) - for creature in group.getMemberList(): - core.buffService.addBuffToCreature(creature, 'of_focus_fire_4') - return \ No newline at end of file + core.buffService.addGroupBuff(actor, 'of_focus_fire_4', actor) + return + \ No newline at end of file diff --git a/scripts/commands/of_focus_fire_5.py b/scripts/commands/of_focus_fire_5.py index 704dc3c4..7842cb4f 100644 --- a/scripts/commands/of_focus_fire_5.py +++ b/scripts/commands/of_focus_fire_5.py @@ -4,8 +4,6 @@ def setup(core, actor, buff): return def run(core, actor, target, commandString): - core.buffService.addBuffToCreature(actor, 'of_focus_fire_1') - group = core.objectService.getObject(actor.getGroupId()) - for creature in group.getMemberList(): - core.buffService.addBuffToCreature(creature, 'of_focus_fire_5') - return \ No newline at end of file + core.buffService.addGroupBuff(actor, 'of_focus_fire_5', actor) + return + \ No newline at end of file diff --git a/scripts/commands/of_focus_fire_6.py b/scripts/commands/of_focus_fire_6.py index 5027e12c..ae915fa1 100644 --- a/scripts/commands/of_focus_fire_6.py +++ b/scripts/commands/of_focus_fire_6.py @@ -4,8 +4,6 @@ def setup(core, actor, buff): return def run(core, actor, target, commandString): - core.buffService.addBuffToCreature(actor, 'of_focus_fire_1') - group = core.objectService.getObject(actor.getGroupId()) - for creature in group.getMemberList(): - core.buffService.addBuffToCreature(creature, 'of_focus_fire_6') - return \ No newline at end of file + core.buffService.addGroupBuff(actor, 'of_focus_fire_6', actor) + return + \ No newline at end of file diff --git a/scripts/commands/of_inspiration_1.py b/scripts/commands/of_inspiration_1.py index 95c691d9..fc017af7 100644 --- a/scripts/commands/of_inspiration_1.py +++ b/scripts/commands/of_inspiration_1.py @@ -4,9 +4,6 @@ def setup(core, actor, buff): return def run(core, actor, target, commandString): - core.buffService.addBuffToCreature(actor, 'of_inspiration_1') - group = core.objectService.getObject(actor.getGroupId()) - for creature in group.getMemberList(): - core.buffService.addBuffToCreature(creature, 'of_inspiration_1') + core.buffService.addGroupBuff(actor, 'of_inspiration_1', actor) return \ No newline at end of file diff --git a/scripts/commands/of_inspiration_2.py b/scripts/commands/of_inspiration_2.py index f667ecd4..44ae030d 100644 --- a/scripts/commands/of_inspiration_2.py +++ b/scripts/commands/of_inspiration_2.py @@ -4,9 +4,6 @@ def setup(core, actor, buff): return def run(core, actor, target, commandString): - core.buffService.addBuffToCreature(actor, 'of_inspiration_2') - group = core.objectService.getObject(actor.getGroupId()) - for creature in group.getMemberList(): - core.buffService.addBuffToCreature(creature, 'of_inspiration_2') + core.buffService.addGroupBuff(actor, 'of_inspiration_2', actor) return \ No newline at end of file diff --git a/scripts/commands/of_inspiration_3.py b/scripts/commands/of_inspiration_3.py index ce4e0b49..52711f2a 100644 --- a/scripts/commands/of_inspiration_3.py +++ b/scripts/commands/of_inspiration_3.py @@ -4,9 +4,6 @@ def setup(core, actor, buff): return def run(core, actor, target, commandString): - core.buffService.addBuffToCreature(actor, 'of_inspiration_3') - group = core.objectService.getObject(actor.getGroupId()) - for creature in group.getMemberList(): - core.buffService.addBuffToCreature(creature, 'of_inspiration_3') + core.buffService.addGroupBuff(actor, 'of_inspiration_3', actor) return \ No newline at end of file diff --git a/scripts/commands/of_inspiration_4.py b/scripts/commands/of_inspiration_4.py index 198e36b5..853d793d 100644 --- a/scripts/commands/of_inspiration_4.py +++ b/scripts/commands/of_inspiration_4.py @@ -4,9 +4,6 @@ def setup(core, actor, buff): return def run(core, actor, target, commandString): - core.buffService.addBuffToCreature(actor, 'of_inspiration_4') - group = core.objectService.getObject(actor.getGroupId()) - for creature in group.getMemberList(): - core.buffService.addBuffToCreature(creature, 'of_inspiration_4') + core.buffService.addGroupBuff(actor, 'of_inspiration_4', actor) return \ No newline at end of file diff --git a/scripts/commands/of_inspiration_5.py b/scripts/commands/of_inspiration_5.py index e114bec1..8723fc61 100644 --- a/scripts/commands/of_inspiration_5.py +++ b/scripts/commands/of_inspiration_5.py @@ -4,9 +4,6 @@ def setup(core, actor, buff): return def run(core, actor, target, commandString): - core.buffService.addBuffToCreature(actor, 'of_inspiration_5') - group = core.objectService.getObject(actor.getGroupId()) - for creature in group.getMemberList(): - core.buffService.addBuffToCreature(creature, 'of_inspiration_5') + core.buffService.addGroupBuff(actor, 'of_inspiration_5', actor) return \ No newline at end of file diff --git a/scripts/commands/of_inspiration_6.py b/scripts/commands/of_inspiration_6.py index 230aaa5f..5459e9ec 100644 --- a/scripts/commands/of_inspiration_6.py +++ b/scripts/commands/of_inspiration_6.py @@ -4,9 +4,6 @@ def setup(core, actor, buff): return def run(core, actor, target, commandString): - core.buffService.addBuffToCreature(actor, 'of_inspiration_6') - group = core.objectService.getObject(actor.getGroupId()) - for creature in group.getMemberList(): - core.buffService.addBuffToCreature(creature, 'of_inspiration_6') + core.buffService.addGroupBuff(actor, 'of_inspiration_6', actor) return \ No newline at end of file diff --git a/scripts/commands/of_medical_sup_1.py b/scripts/commands/of_medical_sup_1.py new file mode 100644 index 00000000..52ae6c13 --- /dev/null +++ b/scripts/commands/of_medical_sup_1.py @@ -0,0 +1,54 @@ +from engine.resources.container import StaticContainerPermissions +import time +import sys + +def setup(core, actor, target, command): + return + +def run(core, actor, target, commandString): + doStimDrop(core, actor) + return + +def doStimDrop(core, actor): + actor.sendSystemMessage('Stims incoming Mr. Bossman!', 0) + stcSvc = core.staticService + shuttle = stcSvc.spawnObject('object/creature/npc/theme_park/shared_lambda_shuttle.iff', actor.getPlanet().getName(), long(0), actor.getPosition().x, actor.getPosition().y, actor.getPosition().z, actor.getOrientation().y, actor.getOrientation().w) + shuttle.setPosture(0) + time.sleep(10) # Wait time before shuttle arrives after command is called + shuttle.setPosture(2) + time.sleep(20) # wait time for the crate to show (length of landing animation for shuttle) + spawnCrate(core, actor, shuttle) + time.sleep(5) # Wait time for the shuttle to leave after crate is spawned + shuttle.setPosture(0) + time.sleep(20) # How long the take-off sequence is, until the Shuttle is destroyed + core.objectService.destroyObject(shuttle) + return + +def spawnCrate(core, actor, shuttle): + crate = core.staticService.spawnObject('object/tangible/container/drum/shared_supply_drop_crate.iff', shuttle.getPlanet().getName(), long(0), shuttle.getPosition().x, shuttle.getPosition().y, shuttle.getPosition().z, shuttle.getOrientation().y, shuttle.getOrientation().w) + crate.setCustomName('Supply Crate') + + group = core.objectService.getObject(actor.getGroupId()) + + permissions = StaticContainerPermissions() + permissions.canRemove(group, crate) + permissions.canView(group, crate) + crate.setContainerPermissions(permissions) + + if actor.hasSkill('expertise_of_tactical_sup_1'): + for i in range(0, 8): + tactical = core.objectService.createObject('object/tangible/loot/generic_usable/shared_stim_syringe_generic.iff', actor.getPlanet()) #FIXME: Use the correct template + tactical.setCustomName('Tactical Serum A') + tactical.setStringAttribute('proc_name', '@ui_buff:of_tactical_drop_6') + tactical.setAttachment("tempUseCount", 1) + crate.add(tactical) + + for i in range(0, 8): + stimpack = core.objectService.createObject('object/tangible/medicine/instant_stimpack/shared_stimpack_e.iff', actor.getPlanet()) #FIXME: Use the correct template + stimpack.setCustomName('Field Stimpack A') + crate.add(stimpack) + + time.sleep(60) + core.objectService.destroyObject(crate) + + return \ No newline at end of file diff --git a/scripts/commands/of_purge_1.py b/scripts/commands/of_purge_1.py index 7a6edae9..1d1f6bae 100644 --- a/scripts/commands/of_purge_1.py +++ b/scripts/commands/of_purge_1.py @@ -4,6 +4,6 @@ def setup(core, actor, buff): return def run(core, actor, target, commandString): - core.buffService.addBuffToCreature(actor, 'of_purge_1') + core.buffService.addBuffToCreature(actor, 'of_purge_1', actor) return \ No newline at end of file diff --git a/scripts/commands/of_scatter_1.py b/scripts/commands/of_scatter_1.py index c1ae742a..855c1841 100644 --- a/scripts/commands/of_scatter_1.py +++ b/scripts/commands/of_scatter_1.py @@ -4,9 +4,6 @@ def setup(core, actor, buff): return def run(core, actor, target, commandString): - core.buffService.addBuffToCreature(actor, 'of_scatter_1') - group = core.objectService.getObject(actor.getGroupId()) - for creature in group.getMemberList(): - core.buffService.addBuffToCreature(creature, 'of_scatter_1') + core.buffService.addGroupBuff(actor, 'of_scatter_1', actor) return \ No newline at end of file diff --git a/scripts/commands/of_stimulator_1.py b/scripts/commands/of_stimulator_1.py index c9b5a1c1..25efda68 100644 --- a/scripts/commands/of_stimulator_1.py +++ b/scripts/commands/of_stimulator_1.py @@ -4,6 +4,6 @@ def setup(core, actor, buff): return def run(core, actor, target, commandString): - core.buffService.addBuffToCreature(actor, 'of_stimulator_1') + core.buffService.addBuffToCreature(actor, 'of_stimulator_1', actor) return \ No newline at end of file diff --git a/scripts/commands/permissionlistmodify.py b/scripts/commands/permissionlistmodify.py new file mode 100644 index 00000000..5d75a1e2 --- /dev/null +++ b/scripts/commands/permissionlistmodify.py @@ -0,0 +1,17 @@ +import sys + +def setup(): + return + +def run(core, actor, target, commandString): + permissionType = 'Undetermined' + commandArgs = commandString.split(' ') + if len(commandArgs) > 3: + permissionType = commandArgs[2] + if permissionType=='ENTRY' | permissionType=='BAN': + core.housingService.handlePermissionListModify(actor, target, commandString) + if permissionType=='ADMIN' | permissionType=='HOPPER': + core.harvesterService.handlePermissionListModify(actor, target, commandString) + return + + \ No newline at end of file diff --git a/scripts/commands/placestructure.py b/scripts/commands/placestructure.py new file mode 100644 index 00000000..fa7bc65a --- /dev/null +++ b/scripts/commands/placestructure.py @@ -0,0 +1,25 @@ +import sys + +def setup(): + return + +def run(core, actor, target, commandString): + cmdArgs = commandString.split(" ") + + deedId = long(cmdArgs[0]) + deed = core.objectService.getObject(deedId) + + if deed == actor: + deed = actor.getUseTarget() + + if deed.getTemplate().startswith('object/tangible/deed/harvester_deed') is True or deed.getTemplate().startswith('object/tangible/deed/generator_deed') is True: + core.harvesterService.handlePlaceStructureCommand(actor, target, commandString) + return + + positionX = float(cmdArgs[1]) + positionZ = float(cmdArgs[2]) + rotation = float(cmdArgs[3]) + + core.housingService.placeStructure(actor, deed, positionX, positionZ, rotation) + + return diff --git a/scripts/commands/planetchat.py b/scripts/commands/planetchat.py new file mode 100644 index 00000000..827fef78 --- /dev/null +++ b/scripts/commands/planetchat.py @@ -0,0 +1,13 @@ +import sys + +def setup(): + return + +def run(core, actor, target, commandString): + room = core.chatService.getChatRoomByAddress('SWG.' + core.getGalaxyName() + '.' + actor.getPlanet().getName() + '.Planet') + + if room is None: + return + + core.chatService.sendChatRoomMessage(actor, room.getRoomId(), 0, commandString) + return \ No newline at end of file diff --git a/scripts/commands/purchaseticket.py b/scripts/commands/purchaseticket.py index 1f6de430..9e6998ef 100644 --- a/scripts/commands/purchaseticket.py +++ b/scripts/commands/purchaseticket.py @@ -4,8 +4,6 @@ def setup(): return def run(core, actor, target, commandString): - #print ('Command string: ' + commandString) - trvSvc = core.travelService cmdArgs = commandString.split(" ") @@ -14,8 +12,8 @@ def run(core, actor, target, commandString): departureLoc = cmdArgs[1].replace("_"," ") arrivalPlanet = cmdArgs[2] arrivalLoc = cmdArgs[3].replace("_", " ") - # 4 int - # 5 int - trvSvc.purchaseTravelTicket(actor, departurePlanet, departureLoc, arrivalPlanet, arrivalLoc, '1') + roundTrip = cmdArgs[4] + + trvSvc.purchaseTravelTicket(actor, departurePlanet, departureLoc, arrivalPlanet, arrivalLoc, roundTrip) return \ No newline at end of file diff --git a/scripts/commands/pvp.py b/scripts/commands/pvp.py index 93e9051b..34f6c5ff 100644 --- a/scripts/commands/pvp.py +++ b/scripts/commands/pvp.py @@ -1,74 +1,86 @@ from resources.objects.creature import CreatureObject -from protocol.swg import UpdatePVPStatusMessage +from resources.datatables import PvpStatus +from resources.datatables import FactionStatus import sys +import time def setup(): return def run(core, actor, target, commandString): - actorFaction = actor.getFaction() - actorStatus = actor.getFactionStatus() - pvpStatus = UpdatePVPStatusMessage(actor.getObjectId()) - - if commandString == ('imperial') and actorFaction != "imperial": - actor.setFaction('imperial') - return - - if commandString == ('rebel') and actorFaction != "rebel": - actor.setFaction('rebel') - return - - if commandString == ('neutral') and actorFaction != "neutral": - actor.setFaction('neutral') - return - - if actorStatus == 0 and actorFaction == "imperial": - actor.setFactionStatus(1) - #print ("FactionStatus: " + str(actor.getFactionStatus())) - actor.sendSystemMessage('You are no longer On Leave.', 0) - return + faction = actor.getFaction() + factionStatus = actor.getFactionStatus() - if actorStatus == 0 and actorFaction == "rebel": - actor.setFactionStatus(1) - #print ("FactionStatus: " + str(actor.getFactionStatus())) - actor.sendSystemMessage('You are no longer On Leave.', 0) - return + if actor.getPvpStatus(PvpStatus.GoingOvert) or actor.getPvpStatus(PvpStatus.GoingCovert): + actor.sendSystemMessage('@faction_recruiter:pvp_status_changing', 0) + return + if core.gcwService.isInPvpZone(actor): + actor.sendSystemMessage('@gcw:pvp_advanced_region_cannot_go_covert', 0) + return - if actorStatus == 1 and actorFaction == "imperial": - actor.setFactionStatus(2) - pvpStatus.setFaction(UpdatePVPStatusMessage.factionCRC.Imperial) - pvpStatus.setStatus(55) - actor.notifyObservers(pvpStatus.serialize(), True) - actor.sendSystemMessage('@faction_recruiter:overt_complete', 0) - print ("FactionStatus: " + str(actor.getFactionStatus())) - return - - if actorStatus == 1 and actorFaction == "rebel": - actor.setFactionStatus(2) - pvpStatus.setFaction(UpdatePVPStatusMessage.factionCRC.Rebel) - pvpStatus.setStatus(55) - actor.notifyObservers(pvpStatus.serialize(), True) - actor.sendSystemMessage('@faction_recruiter:overt_complete', 0) - print ("FactionStatus: " + str(actor.getFactionStatus())) - return - - if actorStatus == 2 and actorFaction == "imperial": - actor.setFactionStatus(1) - pvpStatus.setFaction(UpdatePVPStatusMessage.factionCRC.Imperial) - pvpStatus.setStatus(16) - actor.notifyObservers(pvpStatus.serialize(), True) - actor.sendSystemMessage('@faction_recruiter:covert_complete', 0) - print ("FactionStatus: " + str(actor.getFactionStatus())) - return - - if actorStatus == 2 and actorFaction == "rebel": - actor.setFactionStatus(1) - pvpStatus.setFaction(UpdatePVPStatusMessage.factionCRC.Rebel) - pvpStatus.setStatus(16) - actor.notifyObservers(pvpStatus.serialize(), True) - actor.sendSystemMessage('@faction_recruiter:covert_complete', 0) - print ("FactionStatus: " + str(actor.getFactionStatus())) - return - - - return \ No newline at end of file + if commandString != '' and commandString != faction: + if commandString == 'rebel' or commandString == 'imperial' or commandString == 'neutral': + if faction != 'neutral': + actor.sendSystemMessage('@faction_recruiter:sui_resig_complete_in_5', 0) + + if actor.getFactionStatus() == FactionStatus.SpecialForces: + actor.setPvpStatus(PvpStatus.GoingCovert, True) + time.sleep(300) + + actor.setPvpStatus(PvpStatus.GoingCovert | PvpStatus.Overt | PvpStatus.Attackable | PvpStatus.Aggressive | PvpStatus.Enemy, False) + actor.setFactionStatus(FactionStatus.OnLeave) + + if actor.getFaction() != '' and actor.getFaction() != 'neutral': + time.sleep(1) + actor.setFaction('') + actor.sendSystemMessage('@faction_recruiter:resign_complete', 0) + + if commandString == 'neutral' or commandString == 'resign': + time.sleep(1) + actor.setFaction('') + actor.sendSystemMessage('@faction_recruiter:resign_complete', 0) + return + + time.sleep(1) + actor.setFaction(commandString) + return + + if faction == 'neutral' or faction == '': + actor.sendSystemMessage('@faction_recruiter:not_aligned', 0) + return + + if factionStatus == FactionStatus.OnLeave: + actor.sendSystemMessage('@faction_recruiter:on_leave_to_covert', 0) + actor.setPvpStatus(PvpStatus.GoingCovert, True) + time.sleep(1) + actor.setFactionStatus(FactionStatus.Combatant) + actor.setPvpStatus(PvpStatus.GoingCovert, False) + actor.sendSystemMessage('@faction_recruiter:covert_complete', 0) + actor.updatePvpStatus() + return + + if factionStatus == FactionStatus.Combatant: + actor.sendSystemMessage('@faction_recruiter:covert_to_overt', 0) + actor.setPvpStatus(PvpStatus.GoingOvert, True) + time.sleep(30) + if core.gcwService.isInPvpZone(actor): + return + actor.setFactionStatus(FactionStatus.SpecialForces) + actor.setPvpStatus(PvpStatus.GoingOvert, False) + actor.sendSystemMessage('@faction_recruiter:overt_complete', 0) + actor.updatePvpStatus() + return + + if factionStatus == FactionStatus.SpecialForces: + actor.sendSystemMessage('@faction_recruiter:overt_to_covert', 0) + actor.setPvpStatus(PvpStatus.GoingCovert, True) + time.sleep(300) + if core.gcwService.isInPvpZone(actor): + return + actor.setFactionStatus(FactionStatus.Combatant) + actor.setPvpStatus(PvpStatus.GoingCovert, False) + actor.sendSystemMessage('@faction_recruiter:covert_complete', 0) + actor.updatePvpStatus() + return + + return diff --git a/scripts/commands/removeBuff.py b/scripts/commands/removeBuff.py new file mode 100644 index 00000000..cd63145f --- /dev/null +++ b/scripts/commands/removeBuff.py @@ -0,0 +1,15 @@ +import sys + +def setup(): + return + +def run(core, actor, target, commandString): + + buffObj = actor.getBuffByCRC(int(commandString)) + + if buffObj is None: + return + + if buffObj.isRemovableByPlayer() and buffObj.isDebuff() is False: + core.buffService.removeBuffFromCreature(actor, buffObj) + return \ No newline at end of file diff --git a/scripts/commands/removefriend.py b/scripts/commands/removefriend.py index d4474d39..0958fd79 100644 --- a/scripts/commands/removefriend.py +++ b/scripts/commands/removefriend.py @@ -6,6 +6,6 @@ def setup(): def run(core, actor, target, commandString): ghost = actor.getSlottedObject('ghost') chatSvc = core.chatService - chatSvc.removeFriend(ghost, commandString, 1) + chatSvc.removeFriend(ghost, commandString) return \ No newline at end of file diff --git a/scripts/commands/removeignore.py b/scripts/commands/removeignore.py new file mode 100644 index 00000000..4561dd79 --- /dev/null +++ b/scripts/commands/removeignore.py @@ -0,0 +1,10 @@ +import sys + +def setup(): + return + +def run(core, actor, target, commandString): + actorGhost = actor.getSlottedObject("ghost") + chatSrvc = core.chatService + chatSrvc.removeFromIgnoreList(actor, commandString) + return \ No newline at end of file diff --git a/scripts/commands/requestbiography.py b/scripts/commands/requestbiography.py new file mode 100644 index 00000000..41ed2382 --- /dev/null +++ b/scripts/commands/requestbiography.py @@ -0,0 +1,24 @@ +import sys +from protocol.swg.objectControllerObjects import BiographyUpdate +from protocol.swg import ObjControllerMessage + + +# Called when open Character tab +def setup(): + return + +def run(core, actor, target, commandString): + + if actor is None: + return + + if target is None: + return + + tGhost = target.getSlottedObject('ghost') + + bioUpdate = BiographyUpdate(actor.getObjectId(), target.getObjectId(), tGhost.getBiography()) + objMsg = ObjControllerMessage(11, bioUpdate) + actor.getClient().getSession().write(objMsg.serialize()) + + return \ No newline at end of file diff --git a/scripts/commands/requestcoresample.py b/scripts/commands/requestcoresample.py new file mode 100644 index 00000000..2931588a --- /dev/null +++ b/scripts/commands/requestcoresample.py @@ -0,0 +1,8 @@ +import sys + +def setup(): + return + +def run(core, actor, target, commandString): + core.surveyService.requestSampling(actor, target, commandString); + return \ No newline at end of file diff --git a/scripts/commands/requestsurvey.py b/scripts/commands/requestsurvey.py new file mode 100644 index 00000000..ccff8b8a --- /dev/null +++ b/scripts/commands/requestsurvey.py @@ -0,0 +1,8 @@ +import sys + +def setup(): + return + +def run(core, actor, target, commandString): + core.surveyService.requestSurvey(actor, target, commandString); + return \ No newline at end of file diff --git a/scripts/commands/requestwaypointatposition.py b/scripts/commands/requestwaypointatposition.py new file mode 100644 index 00000000..2acdedc3 --- /dev/null +++ b/scripts/commands/requestwaypointatposition.py @@ -0,0 +1,12 @@ +import sys + +def setup(): + return + +def run(core, actor, target, commandString): + + commandArgs = commandString.split("(^-,=+_)color_13548(,+-=_^)=1") + newString = commandArgs[0] + + core.commandService.callCommand(actor, 'waypoint', None, newString) + return \ No newline at end of file diff --git a/scripts/commands/resourcecontainersplit.py b/scripts/commands/resourcecontainersplit.py new file mode 100644 index 00000000..ae3869c5 --- /dev/null +++ b/scripts/commands/resourcecontainersplit.py @@ -0,0 +1,8 @@ +import sys + +def setup(): + return + +def run(core, actor, target, commandString): + target.splitContainer(actor,target,commandString) + return \ No newline at end of file diff --git a/scripts/commands/resourcecontainertransfer.py b/scripts/commands/resourcecontainertransfer.py new file mode 100644 index 00000000..8a369843 --- /dev/null +++ b/scripts/commands/resourcecontainertransfer.py @@ -0,0 +1,8 @@ +import sys + +def setup(): + return + +def run(core, actor, target, commandString): + target.transferContainer(actor,target,commandString) + return \ No newline at end of file diff --git a/scripts/commands/resourceemptyhopper.py b/scripts/commands/resourceemptyhopper.py new file mode 100644 index 00000000..7989148f --- /dev/null +++ b/scripts/commands/resourceemptyhopper.py @@ -0,0 +1,8 @@ +import sys + +def setup(): + return + +def run(core, actor, target, commandString): + core.harvesterService.handleHarvesterDeactivateCommand(actor, target, commandString) + return diff --git a/scripts/commands/roleplay.py b/scripts/commands/roleplay.py new file mode 100644 index 00000000..312e93fc --- /dev/null +++ b/scripts/commands/roleplay.py @@ -0,0 +1,11 @@ +from java.lang import Integer +from resources.datatables import PlayerFlags +import sys + +def setup(): + return + +def run(core, actor, target, commandString): + ghost = actor.getSlottedObject('ghost') + ghost.toggleFlag(PlayerFlags.ROLEPLAYER) + return \ No newline at end of file diff --git a/scripts/commands/rotatefurniture.py b/scripts/commands/rotatefurniture.py new file mode 100644 index 00000000..66b1dc27 --- /dev/null +++ b/scripts/commands/rotatefurniture.py @@ -0,0 +1,30 @@ +import sys +from engine.resources.scene import Point3D + +def setup(): + return + +def run(core, actor, target, commandString): + tarObj = core.objectService.getObject(actor.getTargetId()) + + container = actor.getContainer() + parsedMsg = commandString.split(' ', 2) + + if tarObj.getAttachment('initialized') is not None and target.getAttachment('initialized') == True: + return + + if core.housingService.getPermissions(actor, container): # i should probably relook into my permissions system... it kinda sucks + if parsedMsg[0] == "pitch": + core.simulationService.transform(tarObj, float(parsedMsg[1]), Point3D(1, 0, 0)) # this is messed up ??? + return + elif parsedMsg[0] == "yaw": + core.simulationService.transform(tarObj, float(parsedMsg[1]), Point3D(0, 1, 0)) # this is correct + return + elif parsedMsg[0] == "roll": + core.simulationService.transform(tarObj, float(parsedMsg[1]), Point3D(0, 0, 1)) # this is messed up ??? + return + elif container.getTemplate() == "object/cell/shared_cell.iff": + actor.sendSystemMessage("You do not have permission to access that container!", 0) + return + + return diff --git a/scripts/commands/saberblock.py b/scripts/commands/saberblock.py index 55e12c59..4a69c0ff 100644 --- a/scripts/commands/saberblock.py +++ b/scripts/commands/saberblock.py @@ -4,6 +4,6 @@ def setup(core, actor, buff): return def run(core, actor, target, commandString): - core.buffService.addBuffToCreature(actor, 'saberblock') + core.buffService.addBuffToCreature(actor, 'saberblock', actor) return \ No newline at end of file diff --git a/scripts/commands/server.py b/scripts/commands/server.py new file mode 100644 index 00000000..0514fa98 --- /dev/null +++ b/scripts/commands/server.py @@ -0,0 +1,40 @@ +import sys +from engine.resources.scene import Point3D + +def setup(): + return + +def run(core, actor, target, commandString): + + playerObject = actor.getSlottedObject('ghost') + + if not playerObject: + return + + commandArgs = commandString.split(' ') + command = commandArgs[0] + if len(commandArgs) > 1: + arg1 = commandArgs[1] + if len(commandArgs) > 2: + arg2 = commandArgs[2] + if len(commandArgs) > 3: + arg3 = commandArgs[3] + if len(commandArgs) > 4: + arg4 = commandArgs[4] + + if not command: + return + + if command == 'lockServer': + core.setGalaxyStatus(3) + if command == 'unlockServer': + core.setGalaxyStatus(2) + if command == 'info': + actor.sendSystemMessage(str(core.getActiveZoneClients()) + ' online characters.', 0) + if command == 'shutdown': + core.initiateShutdown() + if command == 'getheight': + actor.sendSystemMessage(str(core.terrainService.getHeight(actor.getPlanetId(), actor.getWorldPosition().x, actor.getWorldPosition().z)), 0) + + + return diff --git a/scripts/commands/serverdestroyobject.py b/scripts/commands/serverdestroyobject.py index ae58c794..81c01698 100644 --- a/scripts/commands/serverdestroyobject.py +++ b/scripts/commands/serverdestroyobject.py @@ -1,3 +1,4 @@ +from resources.common import Console import sys def setup(): @@ -18,11 +19,10 @@ def run(core, actor, target, commandString): if not target.getPermissions().canRemove(actor, target): return if parent and not parent.getPermissions().canRemove(actor, parent): - return - if not target.isSubChildOf(actor): + Console.println("Doesn't have permission!") return - parent.remove(target) + #parent.remove(target) core.objectService.destroyObject(target) return \ No newline at end of file diff --git a/scripts/commands/setbiography.py b/scripts/commands/setbiography.py new file mode 100644 index 00000000..2d113622 --- /dev/null +++ b/scripts/commands/setbiography.py @@ -0,0 +1,25 @@ +import sys +from protocol.swg.objectControllerObjects import BiographyUpdate +from protocol.swg import ObjControllerMessage + +def setup(): + return + +def run(core, actor, target, commandString): + if actor is None: + return + + if len(commandString) > 200: + return + + ghost = actor.getSlottedObject('ghost') + + if ghost is None: + return + + ghost.setBiography(commandString) + + bioUpdate = BiographyUpdate(actor.getObjectId(), actor.getObjectId(), commandString) + objMsg = ObjControllerMessage(11, bioUpdate) + actor.getClient().getSession().write(objMsg.serialize()) + return \ No newline at end of file diff --git a/scripts/commands/setcurrentskilltitle.py b/scripts/commands/setcurrentskilltitle.py index 9ae1cb6e..160c9091 100644 --- a/scripts/commands/setcurrentskilltitle.py +++ b/scripts/commands/setcurrentskilltitle.py @@ -4,6 +4,13 @@ def setup(): return def run(core, actor, target, commandString): + playerObject = actor.getSlottedObject('ghost') - playerObject.setTitle(str(commandString)) + #print ("Title set to: " + commandString) + #print ("List of Titles: " + playerObject.getTitleList().toString()) + if playerObject is None: + return + + if str(commandString) in playerObject.getTitleList() or str(commandString) == "citizenship" or str(commandString) == "": playerObject.setTitle(str(commandString)) + return \ No newline at end of file diff --git a/scripts/commands/setgodmode.py b/scripts/commands/setgodmode.py new file mode 100644 index 00000000..1f419588 --- /dev/null +++ b/scripts/commands/setgodmode.py @@ -0,0 +1,137 @@ +import sys +from engine.resources.scene import Point3D +from protocol.swg import ObjControllerMessage +from protocol.swg import UnknownAbilityPacket +from engine.resources.objects import SWGObject + +def setup(): + return + +def run(core, actor, target, commandString): + + playerObject = actor.getSlottedObject('ghost') + + if not playerObject: + return + + commandArgs = commandString.split(' ') + command = commandArgs[0] + if len(commandArgs) > 1: + arg1 = commandArgs[1] + if len(commandArgs) > 2: + arg2 = commandArgs[2] + if len(commandArgs) > 3: + arg3 = commandArgs[3] + if len(commandArgs) > 4: + arg4 = commandArgs[4] + if len(commandArgs) > 5: + arg5 = commandArgs[5] + + if not command: + return + + if actor.getClient().isGM() is False: + return + + if playerObject.getGodLevel() == 0: + actor.addAbility("admin") + playerObject.setGodLevel(50) + + if command == 'giveExperience' and arg1: + core.playerService.giveExperience(actor, int(arg1)) + + if command == 'level' and arg1: + core.playerService.grantLevel(actor, int(arg1)) + + elif command == 'setSpeed' and arg1: + actor.sendSystemMessage('Your speed was ' + str(actor.getSpeedMultiplierBase()) + '. Don\'t forget to set this back or it\'ll permanently imbalance your speed. Default without buffs or mods is 1.', 2) + actor.setSpeedMultiplierBase(float(arg1)) + actor.sendSystemMessage('Your new speed is ' + str(actor.getSpeedMultiplierBase()) + '.', 2) + + elif command == 'teleport' and arg2 and arg3 and arg4: + position = Point3D(float(arg2), float(arg3), float(arg4)) + core.simulationService.transferToPlanet(actor, core.terrainService.getPlanetByName(arg1), position, actor.getOrientation(), None) + + elif command == 'teleportplayer' and arg1 and arg2 and arg3 and arg4 and arg5: + player = core.chatService.getObjectByFirstName(arg1) + if player: + position = Point3D(float(arg3), float(arg4), float(arg5)) + core.simulationService.transferToPlanet(player, core.terrainService.getPlanetByName(arg2), position, player.getOrientation(), None) + + elif command == 'credits' and arg1: + actor.setCashCredits(actor.getCashCredits() + int(arg1)) + actor.sendSystemMessage('The Galactic Empire has transferred ' + arg1 + ' credits to you for your service.', 0) + + elif command == 'addability' and arg1: + actor.addAbility(str(arg1)) + actor.sendSystemMessage('You have learned ' + arg1 + '.', 0) + + elif command == 'anim' and arg1: + actor.doSkillAnimation(arg1) + actor.sendSystemMessage('Performed ' + arg1 ,0) + + elif command == 'changeBio' and arg1: + actor.getSlottedObject('ghost').setBiography(arg1) + + elif command == 'spawn' and arg1 and arg2: + pos = actor.getWorldPosition() + core.spawnService.spawnCreature(arg1, actor.getPlanet().getName(), 0, pos.x, pos.y, pos.z, 1, 0, 1, 0, int(arg2)) + + elif command == 'instance' and arg1: + core.instanceService.queue(arg1, actor) + + elif command == 'action' and arg1: + actor.setAction(int(arg1)) + + elif command == 'health' and arg1: + actor.setHealth(int(arg1)) + + elif command == 'id': + actor.sendSystemMessage('Your id is: ' + str(actor.getObjectId()), 0) + + elif command == 'cust' and arg1 and arg2 and arg3: + obj = core.objectService.getObject(long(arg1)) + obj.setCustomizationVariable(str(arg2), int(arg3)) + + elif command == 'buff' and arg1: + core.buffService.addBuffToCreature(actor, str(arg1), actor) + + elif command == 'stealth': + if (actor.isInStealth()): + actor.setInStealth(False) + actor.setRadarVisible(True) + else: + actor.setInStealth(True) + actor.setRadarVisible(False) + + elif command == 'holoEmote' and arg1: + playerObject.setHoloEmote('holoemote_' + arg1) + playerObject.setHoloEmoteUses(20) + actor.sendSystemMessage('Holo-Emote Generator set to ' + 'holoemote_' + arg1, 0) + + elif command == 'off': + if playerObject.getGodLevel > 0: + actor.removeAbility("admin") + playerObject.setGodLevel(0) + + elif command == 'setBounty': + if actor.getFaction() == "": + actor.sendSystemMessage('You must be aligned in order to place a bounty on yourself.', 0) + return + core.playerService.sendSetBountyWindow(actor, actor) + return + + elif command == 'genloot': + object = core.lootService.generateLootItem(actor, arg1) + + inventory = actor.getSlottedObject('inventory') + + if inventory: + inventory.add(object) + + elif command == 'unknownAbilityPacket' and arg1: + packet = UnknownAbilityPacket(arg1) + actor.getClient().getSession().write(packet.serialize()) + actor.sendSystemMessage('Sent UnknownAbilityPacket for ability ' + arg1, 0) + return + return diff --git a/scripts/commands/setspeed.py b/scripts/commands/setspeed.py index e5929c25..c73266de 100644 --- a/scripts/commands/setspeed.py +++ b/scripts/commands/setspeed.py @@ -5,6 +5,5 @@ def setup(): def run(core, actor, target, commandString): actor.setSpeedMultiplierBase(float(commandString)) - core.buffService.addBuffToCreature(actor, 'bh_prescience') return \ No newline at end of file diff --git a/scripts/commands/setwaypointactivestatus.py b/scripts/commands/setwaypointactivestatus.py index 70d5b50c..24199d36 100644 --- a/scripts/commands/setwaypointactivestatus.py +++ b/scripts/commands/setwaypointactivestatus.py @@ -9,6 +9,10 @@ def run(core, actor, target, commandString): return waypointTarget = core.objectService.getObject(target.getObjectID()) wp = playerObject.getWaypointFromList(target) + + if wp is None: + return + if wp.isActive() == True: wp.setActive(False) playerObject.waypointUpdate(wp) diff --git a/scripts/commands/sitserver.py b/scripts/commands/sitserver.py index 2641b8a3..9e732988 100644 --- a/scripts/commands/sitserver.py +++ b/scripts/commands/sitserver.py @@ -23,10 +23,9 @@ def run(core, actor, target, commandString): actor.setStateBitmask(32768) actor.setTurnRadius(0) return - + # sit w/o chair actor.setPosture(8) actor.setSpeedMultiplierBase(0) actor.setTurnRadius(0) - return \ No newline at end of file diff --git a/scripts/commands/smokebomb.py b/scripts/commands/smokebomb.py new file mode 100644 index 00000000..a9da5abb --- /dev/null +++ b/scripts/commands/smokebomb.py @@ -0,0 +1,38 @@ +import sys + +def setup(): + return + +def run(core, actor, target, commandString): + level = actor.getLevel() + command = 'SmokeBomb1' + effect = 'clienteffect/entertainer_smoke_bomb_level_1.cef' + rLevel = 50 # minimum level to perform this effect + + if commandString is None or commandString == '': + if level >= 90: + command = 'SmokeBomb3' + effect = 'clienteffect/entertainer_smoke_bomb_level_3.cef' + + elif level >= 75: + command = 'SmokeBomb2' + effect = 'clienteffect/entertainer_smoke_bomb_level_2.cef' + + if commandString is not None: + if commandString == '2': + command = 'SmokeBomb2' + effect = 'clienteffect/entertainer_smoke_bomb_level_2.cef' + rLevel = 75 + + elif commandString == '3': + command = 'SmokeBomb3' + effect = 'clienteffect/entertainer_smoke_bomb_level_3.cef' + rLevel = 90 + + if level < rLevel: + actor.sendSystemMessage('@performance:effect_lack_skill_self', 0) + return + + if core.entertainmentService.performEffect(actor, command, effect, target) is True: + actor.sendSystemMessage('@performance:effect_perform_smoke_bomb', 0) + return \ No newline at end of file diff --git a/scripts/commands/spatialchatinternal.py b/scripts/commands/spatialchatinternal.py index 451f6318..3a588dac 100644 --- a/scripts/commands/spatialchatinternal.py +++ b/scripts/commands/spatialchatinternal.py @@ -9,6 +9,7 @@ def run(core, actor, target, commandString): chatMsg = parsedMsg[5] chatType = int(parsedMsg[1]) moodId = int(parsedMsg[2]) - chatService.handleSpatialChat(actor, target, chatMsg, chatType, moodId) + languageId = int(parsedMsg[4]) + chatService.spatialChat(actor, target, chatMsg, chatType, moodId, languageId, None) return \ No newline at end of file diff --git a/scripts/commands/spotlight.py b/scripts/commands/spotlight.py new file mode 100644 index 00000000..204c0017 --- /dev/null +++ b/scripts/commands/spotlight.py @@ -0,0 +1,39 @@ +from protocol.swg import PlayClientEffectObjectMessage +import sys + +def setup(): + return + +def run(core, actor, target, commandString): + level = actor.getLevel() + command = 'SpotLight1' + effect = 'clienteffect/entertainer_spot_light_level_1.cef' + rLevel = 1 # minimum level to perform this effect + + if commandString is None or commandString == '': + if level >= 30: + command = 'SpotLight3' + effect = 'clienteffect/entertainer_spot_light_level_3.cef' + + elif level >= 20: + command = 'SpotLight2' + effect = 'clienteffect/entertainer_spot_light_level_2.cef' + + if commandString is not None: + if commandString == '2': + command = 'SpotLight2' + effect = 'clienteffect/entertainer_spot_light_level_2.cef' + rLevel = 20 + + elif commandString == '3': + command = 'SpotLight3' + effect = 'clienteffect/entertainer_spot_light_level_3.cef' + rLevel = 30 + + if level < rLevel: + actor.sendSystemMessage('@performance:effect_lack_skill_self', 0) + return + + if core.entertainmentService.performEffect(actor, command, effect, None) is True: + actor.sendSystemMessage('@performance:effect_perform_spot_light', 0) + return diff --git a/scripts/commands/startdance.py b/scripts/commands/startdance.py new file mode 100644 index 00000000..ce557827 --- /dev/null +++ b/scripts/commands/startdance.py @@ -0,0 +1,110 @@ +from services.sui import SUIWindow +from services.sui import SUIService +from services.sui.SUIWindow import Trigger +from services.sui.SUIService import ListBoxType +from java.util import Vector +from java.util import HashMap +from resources.datatables import Posture +import sys + +def setup(): + return + +def run(core, actor, target, commandString): + + entSvc = core.entertainmentService + global actorObject + global coreObject + global availableDances + global suiWindow + actorObject = actor + coreObject = core + + if len(commandString) > 0: + params = commandString.split(" ") + startDance(core, actor, params[0], 0) + return + else: + + availableDances = entSvc.getAvailableDances(actor) + + suiSvc = core.suiService + suiWindow = suiSvc.createListBox(ListBoxType.LIST_BOX_OK_CANCEL, "@performance:select_dance", "@performance:available_dances", availableDances, actor, None, 10) + + returnList = Vector() + returnList.add("List.lstList:SelectedRow") + suiWindow.addHandler(0, '', Trigger.TRIGGER_OK, returnList, handleStartdance) + + suiSvc.openSUIWindow(suiWindow) + return + return + + +def handleStartdance(core, owner, eventType, returnList): + + item = suiWindow.getMenuItems().get(int(returnList.get(0))) + + if not item: + return + + #if eventType == 0: + startDance(coreObject, actorObject, '', int(item.getObjectId())) + return + +def startDance(core, actor, danceName, visual): + + entSvc = core.entertainmentService + + if visual <= 0: + visual = entSvc.getDanceVisualId(danceName) + + if visual <= 0: + actor.sendSystemMessage('@performance:dance_unknown_self',0) + return + + if not entSvc.isDance(visual): + actor.sendSystemMessage('@performance:dance_unknown_self',0) + return + + if not entSvc.canDance(actor, visual): + actor.sendSystemMessage('@performance:dance_lack_skill_self',0) + return + + if actor.getPosture() == 0x09: + actor.sendSystemMessage('@performance:already_performing_self',0) + return + + #TODO: check costume + + if actor.getPosture() != Posture.Upright: + actor.sendSystemMessage('@performance:dance_fail', 0) + return + + actor.sendSystemMessage('@performance:dance_start_self',0); + # i'm not sure about this. i think stopping just stopped any watchers anyways + # method doesn't exist now. + #actor.notifyAudience('@performance:dance_start_other'); + + danceVisual = 'dance_' + str(visual) + + if not actor.getPerformanceWatchee(): + #this also notifies the client with a delta4 + actor.setPerformanceWatchee(actor) + actor.addSpectator(actor) + + #this should send a CREO3 + actor.setPosture(0x09); + + playerObject = actor.getSlottedObject('ghost') + if playerObject and playerObject.getProfession() == "entertainer_1a" and actor.getLevel() != 90: + entSvc.startPerformanceExperience(actor) + + dance = entSvc.getDance(visual) + + # performanceId > 0 seems to trigger the note bubble stuff, so use 0 here + # instead of dance.getLineNumber() + # send CREO6 here + # second param is some sort of counter or start tick + entSvc.startPerformance(actor, dance.getLineNumber(), -842249156 , danceVisual, 1) + + return diff --git a/scripts/commands/stopdance.py b/scripts/commands/stopdance.py new file mode 100644 index 00000000..1427496b --- /dev/null +++ b/scripts/commands/stopdance.py @@ -0,0 +1,15 @@ +import sys + +def setup(): + return + +def run(core, actor, target, commandString): + entSvc = core.entertainmentService + perf = entSvc.getPerformanceByIndex(actor.getPerformanceId()) + + if actor.getPosture() != 0x09 or not perf or perf.getDanceVisualId() < 0: + actor.sendSystemMessage('@performance:dance_not_performing', 0) + return + + actor.stopPerformance() + return diff --git a/scripts/commands/stopwatching.py b/scripts/commands/stopwatching.py new file mode 100644 index 00000000..555ee4ab --- /dev/null +++ b/scripts/commands/stopwatching.py @@ -0,0 +1,19 @@ +import sys + +def setup(): + return + +def run(core, actor, target, commandString): + performer = target + if commandString is not None and target is None: + performer = core.chatService.getObjectByFirstName(commandString) + + if performer is None: + return + performer.removeSpectator(actor) + actor.setPerformanceWatchee(None) + if not actor.getPerformanceListenee(): + actor.setMoodAnimation('') + + actor.sendSystemMessage('@performance:dance_watch_stop_self',0) + return diff --git a/scripts/commands/suspendtest.py b/scripts/commands/suspendtest.py new file mode 100644 index 00000000..61d95fd7 --- /dev/null +++ b/scripts/commands/suspendtest.py @@ -0,0 +1,30 @@ +import sys +import resources.common.Forager +import time + + +def setup(): + return + +def run(core, actor, target, commandString): + actor.sendSystemMessage('Test1', 1) + time.sleep(1) + actor.sendSystemMessage('Test2', 1) + time.sleep(1) + actor.sendSystemMessage('Test3', 1) + time.sleep(1) + actor.sendSystemMessage('Test4', 1) + time.sleep(1) + actor.sendSystemMessage('Test5', 1) + time.sleep(1) + actor.sendSystemMessage('Test6', 1) + time.sleep(1) + actor.sendSystemMessage('Test7', 1) + time.sleep(1) + actor.sendSystemMessage('Test8', 1) + time.sleep(1) + + + + return + \ No newline at end of file diff --git a/scripts/commands/teleporttarget.py b/scripts/commands/teleporttarget.py new file mode 100644 index 00000000..f497fe25 --- /dev/null +++ b/scripts/commands/teleporttarget.py @@ -0,0 +1,29 @@ +import sys +from engine.resources.scene import Point3D + +def setup(): + return + +def run(core, actor, target, commandString): + + playerObject = actor.getSlottedObject('ghost') + + if not playerObject: + return + + commandArgs = commandString.split(' ') + if len(commandArgs) > 0: + arg1 = commandArgs[0] + if len(commandArgs) > 1: + arg2 = commandArgs[1] + if len(commandArgs) > 2: + arg3 = commandArgs[2] + if len(commandArgs) > 3: + arg4 = commandArgs[3] + + if arg1 and arg2 and arg3 and arg4 target: + position = Point3D(float(arg2), float(arg3), float(arg4)) + core.simulationService.transferToPlanet(target, core.terrainService.getPlanetByName(arg1), position, actor.getOrientation(), None) + + + return diff --git a/scripts/commands/tip.py b/scripts/commands/tip.py index b0b4331c..b34992f2 100644 --- a/scripts/commands/tip.py +++ b/scripts/commands/tip.py @@ -1,6 +1,4 @@ -from resources.objects.creature import CreatureObject from java.util import Date -from engine.resources.objects import SWGObject from services.chat import ChatService from services.chat import Mail from services.sui import SUIWindow @@ -8,6 +6,7 @@ from services.sui import SUIService from services.sui.SUIWindow import Trigger from services.sui.SUIService import MessageBoxType from java.util import Vector +from main import NGECore import sys # initialize global vars (happens at compile time) @@ -81,7 +80,8 @@ def run(core, actor, target, commandString): return return -def handleBankTip(core, owner, eventType, returnList): +def handleBankTip(owner, window, eventType, returnList): + core = NGECore.getInstance() chatSvc = core.chatService actorGlobal = core.objectService.getObject(actorID) targetGlobal = core.objectService.getObject(targetID) @@ -115,7 +115,7 @@ def handleBankTip(core, owner, eventType, returnList): actorMail.setSubject('@base_player:wire_mail_subject') actorMail.setSenderName('bank') - targetGlobal.setBankCredits(int(tipAmount)) + targetGlobal.setBankCredits(int(tipAmount) + int(targetGlobal.getBankCredits())) actorGlobal.setBankCredits(int(actorFunds) - int(totalLost)) actorGlobal.sendSystemMessage('You have successfully sent ' + tipAmount + ' bank credits to ' + targetGlobal.getCustomName(), 0) targetGlobal.sendSystemMessage('You have successfully received ' + tipAmount + ' bank credits from ' + actorGlobal.getCustomName(), 0) diff --git a/scripts/commands/toggleawayfromkeyboard.py b/scripts/commands/toggleawayfromkeyboard.py new file mode 100644 index 00000000..21fddc02 --- /dev/null +++ b/scripts/commands/toggleawayfromkeyboard.py @@ -0,0 +1,10 @@ +from resources.datatables import PlayerFlags +import sys + +def setup(): + return + +def run(core, actor, target, commandString): + ghost = actor.getSlottedObject('ghost') + ghost.toggleFlag(PlayerFlags.AFK) + return diff --git a/scripts/commands/toggledisplayingfactionrank.py b/scripts/commands/toggledisplayingfactionrank.py new file mode 100644 index 00000000..e39aad18 --- /dev/null +++ b/scripts/commands/toggledisplayingfactionrank.py @@ -0,0 +1,10 @@ +from resources.datatables import PlayerFlags +import sys + +def setup(): + return + +def run(core, actor, target, commandString): + ghost = actor.getSlottedObject('ghost') + ghost.toggleFlag(PlayerFlags.FACTIONRANK) + return diff --git a/scripts/commands/transferitemarmor.py b/scripts/commands/transferitemarmor.py index ab107cf3..8e166cbc 100644 --- a/scripts/commands/transferitemarmor.py +++ b/scripts/commands/transferitemarmor.py @@ -4,10 +4,18 @@ def setup(): return def run(core, actor, target, commandString): + parsedMsg = commandString.split(' ', 3) objService = core.objectService containerID = long(parsedMsg[1]) container = objService.getObject(containerID) + + canEquip = core.equipmentService.canEquip(actor, target) + + if canEquip[0] is False and container == actor: + actor.sendSystemMessage(canEquip[1], 0) + return + if target and container and target.getContainer(): oldContainer = target.getContainer() if container == oldContainer: @@ -15,19 +23,34 @@ def run(core, actor, target, commandString): return; replacedObject = None slotName = None + replacedObjects = [] + slotNames = None if actor == container: - slotName = container.getSlotNameForObject(target) - replacedObject = container.getSlottedObject(slotName) - + slotNames = container.getSlotNamesForObject(target) + for slotName in slotNames: + object = container.getSlottedObject(slotName) + if not object in replacedObjects and not object == None: + replacedObjects.append(object) + oldContainer.transferTo(actor, container, target) if actor == container: if target.getTemplate().find('/wearables/') or target.getTemplate().find('/weapon/'): - core.equipmentService.equip(actor, target, replacedObject) + core.equipmentService.equip(actor, target) + for object in replacedObjects: + core.equipmentService.unequip(actor, object) #path = 'scripts/' + target.getTemplate().rpartition('/')[0] + '/' #module = target.getTemplate().rpartition('/')[2].replace('shared_', '').replace('.iff', '') #core.scriptService.callScript(path, 'equip', module, core, actor, target) - + + if container == actor.getSlottedObject('appearance_inventory'): + actor.addObjectToAppearanceEquipList(target) + for object in replacedObjects: + actor.removeObjectFromAppearanceEquipList(object) + + if oldContainer == actor.getSlottedObject('appearance_inventory'): + actor.removeObjectFromAppearanceEquipList(target) + if actor == oldContainer: if target.getTemplate().find('/wearables/') or target.getTemplate().find('/weapon/'): #path = 'scripts/' + target.getTemplate().rpartition('/')[0] + '/' diff --git a/scripts/commands/transferitemmisc.py b/scripts/commands/transferitemmisc.py index 53eef0d6..2df5ab93 100644 --- a/scripts/commands/transferitemmisc.py +++ b/scripts/commands/transferitemmisc.py @@ -1,5 +1,6 @@ import sys - +from engine.resources.scene import Quaternion + def setup(): return @@ -8,6 +9,47 @@ def run(core, actor, target, commandString): objService = core.objectService containerID = long(parsedMsg[1]) container = objService.getObject(containerID) + actorContainer = actor.getContainer() + + if container == None: return + + if not 'cell' in container.getTemplate() and container.isFull(): + actor.sendSystemMessage('@container_error_message:container03', 0) + return + + if container.getTemplate().startswith("object/tangible/inventory/shared_lightsaber_inventory") or target.getContainer().getTemplate().startswith("object/tangible/inventory/shared_lightsaber_inventory"): + core.equipmentService.calculateLightsaberAttributes(actor, target, container) + return; + + if target.getTemplate() == 'object/tangible/item/shared_loot_cash.iff': + core.lootService.handleCreditPickUp(actor,target) + core.objectService.destroyObject(target) + return + + if target.isLootItem(): + target.setLootItem(0) + actor.sendSystemMessage('You looted ' + target.getObjectName().getStfValue() + ' from corpse.', 0) + + if actorContainer != None and (container.getTemplate() == "object/cell/shared_cell.iff") & core.housingService.getPermissions(actor, actorContainer): + target.getContainer().transferTo(actor, container, target) + core.simulationService.teleport(target, actor.getPosition(), Quaternion(1,0,0,0), containerID) + return + + elif target.getContainer().getTemplate() == "object/cell/shared_cell.iff" and core.housingService.getPermissions(actor, target.getContainer()): + target.getContainer().transferTo(actor, container, target) + return + + elif actorContainer != None and container.getTemplate() == "object/cell/shared_cell.iff": + actor.sendSystemMessage("You do not have permission to access that container!", 0) + return + + canEquip = core.equipmentService.canEquip(actor, target) + + if canEquip[0] is False and container == actor: + actor.sendSystemMessage(canEquip[1], 0) + return + + if target and container and target.getContainer(): oldContainer = target.getContainer() @@ -17,19 +59,35 @@ def run(core, actor, target, commandString): replacedObject = None slotName = None + replacedObjects = [] + slotNames = None if actor == container: - slotName = container.getSlotNameForObject(target) - replacedObject = container.getSlottedObject(slotName) - + slotNames = container.getSlotNamesForObject(target) + for slotName in slotNames: + object = container.getSlottedObject(slotName) + if not object in replacedObjects and not object == None: + replacedObjects.append(object) + oldContainer.transferTo(actor, container, target) + for object in replacedObjects: + core.equipmentService.unequip(actor, object) + if actor == container: if target.getTemplate().find('/wearables/') or target.getTemplate().find('/weapon/'): - core.equipmentService.equip(actor, target, replacedObject) + core.equipmentService.equip(actor, target) + #path = 'scripts/' + target.getTemplate().rpartition('/')[0] + '/' #module = target.getTemplate().rpartition('/')[2].replace('shared_', '').replace('.iff', '') #core.scriptService.callScript(path, 'equip', module, core, actor, target) - + if container == actor.getSlottedObject('appearance_inventory'): + actor.addObjectToAppearanceEquipList(target) + for object in replacedObjects: + actor.removeObjectFromAppearanceEquipList(object) + + if oldContainer == actor.getSlottedObject('appearance_inventory'): + actor.removeObjectFromAppearanceEquipList(target) + if actor == oldContainer: if target.getTemplate().find('/wearables/') or target.getTemplate().find('/weapon/'): #path = 'scripts/' + target.getTemplate().rpartition('/')[0] + '/' @@ -37,4 +95,4 @@ def run(core, actor, target, commandString): #core.scriptService.callScript(path, 'unequip', module, core, actor, target) core.equipmentService.unequip(actor, target) - return \ No newline at end of file + return diff --git a/scripts/commands/transferitemweapon.py b/scripts/commands/transferitemweapon.py index 0bb7f55f..b07c4e03 100644 --- a/scripts/commands/transferitemweapon.py +++ b/scripts/commands/transferitemweapon.py @@ -4,6 +4,9 @@ def setup(): return def run(core, actor, target, commandString): + + + parsedMsg = commandString.split(' ', 3) objService = core.objectService containerID = long(parsedMsg[1]) @@ -14,17 +17,30 @@ def run(core, actor, target, commandString): print 'Error: New container is same as old container.' return; + canEquip = core.equipmentService.canEquip(actor, target) + + if canEquip[0] is False and container == actor: + actor.sendSystemMessage(canEquip[1], 0) + return + replacedObject = None slotName = None + replacedObjects = [] + slotNames = None if actor == container: - slotName = container.getSlotNameForObject(target) - replacedObject = container.getSlottedObject(slotName) - + slotNames = container.getSlotNamesForObject(target) + for slotName in slotNames: + object = container.getSlottedObject(slotName) + if not object in replacedObjects and not object == None: + replacedObjects.append(object) + oldContainer.transferTo(actor, container, target) if actor == container: if target.getTemplate().find('/wearables/') or target.getTemplate().find('/weapon/'): - core.equipmentService.equip(actor, target, replacedObject) + core.equipmentService.equip(actor, target) + for object in replacedObjects: + core.equipmentService.unequip(actor, object) #path = 'scripts/' + target.getTemplate().rpartition('/')[0] + '/' #module = target.getTemplate().rpartition('/')[2].replace('shared_', '').replace('.iff', '') #core.scriptService.callScript(path, 'equip', module, core, actor, target) diff --git a/scripts/commands/ventriloquism.py b/scripts/commands/ventriloquism.py new file mode 100644 index 00000000..1781fbd1 --- /dev/null +++ b/scripts/commands/ventriloquism.py @@ -0,0 +1,38 @@ +import sys + +def setup(): + return + +def run(core, actor, target, commandString): + level = actor.getLevel() + command = 'Ventriloquism1' + effect = 'clienteffect/entertainer_ventriloquism_level_1.cef' + rLevel = 58 # minimum level to perform this effect + + if commandString is None or commandString == '': + if level >= 90: + command = 'Ventriloquism3' + effect = 'clienteffect/entertainer_ventriloquism_level_3.cef' + + elif level >= 75: + command = 'Ventriloquism2' + effect = 'clienteffect/entertainer_ventriloquism_level_2.cef' + + if commandString is not None: + if commandString == '2': + command = 'Ventriloquism2' + effect = 'clienteffect/entertainer_ventriloquism_level_2.cef' + rLevel = 75 + + elif commandString == '3': + command = 'Ventriloquism3' + effect = 'clienteffect/entertainer_ventriloquism_level_3.cef' + rLevel = 90 + + if level < rLevel: + actor.sendSystemMessage('@performance:effect_lack_skill_self', 0) + return + + if core.entertainmentService.performEffect(actor, command, effect, target) is True: + actor.sendSystemMessage('@performance:effect_perform_ventriloquism', 0) + return \ No newline at end of file diff --git a/scripts/commands/watch.py b/scripts/commands/watch.py new file mode 100644 index 00000000..98627f98 --- /dev/null +++ b/scripts/commands/watch.py @@ -0,0 +1,35 @@ +import sys + +def setup(): + return + +def run(core, actor, target, commandString): + entSvc = core.entertainmentService + + if not target and commandString is not None: + target = core.chatService.getObjectByFirstName(commandString) + + if target is None or actor.getPerformanceWatchee(): + return + + + if target.getWorldPosition().getDistance2D(actor.getWorldPosition()) > float(20): + actor.sendSystemMessage(target.getCustomName() + ' is too far away to watch.', 0) + return + + if not target.isPlayer(): + actor.sendSystemMessage('@performance:dance_watch_npc', 0) + return + + perf = entSvc.getPerformanceByIndex(target.getPerformanceId()) + + if target.getPosture() != 0x09 or not perf or perf.getDanceVisualId() < 0: + actor.sendSystemMessage(target.getCustomName() + ' is not dancing.',0) + return + + if target.getCoverCharge() > 0 or target.getCoverCharge() == None: + core.entertainmentService.handleCoverCharge(actor, target) + return + else: + core.entertainmentService.startSpectating(actor, target, True) + return \ No newline at end of file diff --git a/scripts/commands/waypoint.py b/scripts/commands/waypoint.py index 64e33136..b646ff14 100644 --- a/scripts/commands/waypoint.py +++ b/scripts/commands/waypoint.py @@ -22,43 +22,86 @@ def run(core, actor, target, commandString): planet = core.terrainService.getPlanetByName(commandArgs[0]) waypoint = core.objectService.createObject('object/waypoint/shared_waypoint.iff', planet, float(commandArgs[1]), float(commandArgs[2]), float(commandArgs[3])) waypoint.setActive(True) - waypoint.setColor(colorCheck(core, actor, target, commandString, commandArgs[4])) + waypoint.setColor(colorCheck(commandArgs[4])) name = commandString.split(" ", 5) waypoint.setName(name[5]) waypoint.setPlanetCRC(crc.StringtoCRC(planet.getName())) - actorPlayer.getWaypoints().add(waypoint) + waypoint.setStringAttribute('', '') # This simply allows the attributes to display (nothing else has to be done) actorPlayer.waypointAdd(waypoint) - actor.sendSystemMessage('A waypoint has been created in your datapad at your location.', 0) + actor.sendSystemMessage('A waypoint has been created in your datapad at the location.', 0) return + #/wp X Z Y NAME - if isFloat(commandArgs[0]) and isFloat(commandArgs[1]) and isFloat(commandArgs[2]): + if len(commandArgs) >= 4 and isFloat(commandArgs[0]) and isFloat(commandArgs[1]) and isFloat(commandArgs[2]): waypoint = core.objectService.createObject('object/waypoint/shared_waypoint.iff', actor.getPlanet(), float(commandArgs[0]), float(commandArgs[2]), float(commandArgs[1])) waypoint.setActive(True) waypoint.setColor(WaypointObject.BLUE) name = commandString.split(" ", 3) waypoint.setName(name[3]) waypoint.setPlanetCRC(crc.StringtoCRC(actor.getPlanet().getName())) - actorPlayer.getWaypoints().add(waypoint) + waypoint.setStringAttribute('', '') # This simply allows the attributes to display (nothing else has to be done) actorPlayer.waypointAdd(waypoint) - actor.sendSystemMessage('A waypoint has been created in your datapad at your location.', 0) + actor.sendSystemMessage('A waypoint has been created in your datapad at the location.', 0) + return + #/wp X Z Name + elif len(commandArgs) >= 3 and isFloat(commandArgs[0]) and isFloat(commandArgs[1]): + waypoint = core.objectService.createObject('object/waypoint/shared_waypoint.iff', actor.getPlanet(), float(commandArgs[0]), float(commandArgs[1]), actor.getWorldPosition().y) + waypoint.setActive(True) + waypoint.setColor(WaypointObject.BLUE) + name = commandString.split(" ", 2) + waypoint.setName(name[2]) + waypoint.setPlanetCRC(crc.StringtoCRC(actor.getPlanet().getName())) + waypoint.setStringAttribute('', '') # This simply allows the attributes to display (nothing else has to be done) + actorPlayer.waypointAdd(waypoint) + actor.sendSystemMessage('A waypoint has been created in your datapad at the location.', 0) + return + #/wp X Z + elif len(commandArgs) >= 2 and isFloat(commandArgs[0]) and isFloat(commandArgs[1]): + waypoint = core.objectService.createObject('object/waypoint/shared_waypoint.iff', actor.getPlanet(), float(commandArgs[0]), float(commandArgs[1]), actor.getWorldPosition().y) + waypoint.setActive(True) + waypoint.setColor(WaypointObject.BLUE) + waypoint.setName("Waypoint") + waypoint.setPlanetCRC(crc.StringtoCRC(actor.getPlanet().getName())) + waypoint.setStringAttribute('', '') # This simply allows the attributes to display (nothing else has to be done) + actorPlayer.waypointAdd(waypoint) + actor.sendSystemMessage('A waypoint has been created in your datapad at the location.', 0) return - #/wp NAME + #/wp planet x z y name + elif len(commandArgs) >= 3 and isFloat(commandArgs[2]) and isFloat(commandArgs[3]) and isFloat(commandArgs[4]): + waypoint = core.objectService.createObject('object/waypoint/shared_waypoint.iff', core.terrainService.getPlanetByName(commandArgs[1]), float(commandArgs[2]), float(commandArgs[4]), float(commandArgs[3])) + waypoint.setActive(True) + waypoint.setColor(WaypointObject.BLUE) + name = commandString.split(" ", 5) + if name == "": + name = "Waypoint" + + waypoint.setName(name[5]) + waypoint.setPlanetCRC(crc.StringtoCRC(actor.getPlanet().getName())) + waypoint.setStringAttribute('', '') # This simply allows the attributes to display (nothing else has to be done) + actorPlayer.waypointAdd(waypoint) + actor.sendSystemMessage('A waypoint has been created in your datapad at the location.', 0) + return + + #/wp else: waypoint = core.objectService.createObject('object/waypoint/shared_waypoint.iff', actor.getPlanet(), actor.getWorldPosition().x, actor.getWorldPosition().z, actor.getWorldPosition().y) waypoint.setActive(True) waypoint.setColor(WaypointObject.BLUE) - waypoint.setName(commandString) + if commandString == '': + waypoint.setName(actor.getPlanet().name.capitalize()) + else: + waypoint.setName(commandString) waypoint.setPlanetCRC(crc.StringtoCRC(actor.getPlanet().getName())) - actorPlayer.getWaypoints().add(waypoint) + waypoint.setStringAttribute('', '') # This simply allows the attributes to display (nothing else has to be done) actorPlayer.waypointAdd(waypoint) actor.sendSystemMessage('A waypoint has been created in your datapad at your location.', 0) return return -def colorCheck(core, actor, target, commandString, validcolors): +def colorCheck(validcolors): if validcolors == "blue": return WaypointObject.BLUE if validcolors == "green": diff --git a/scripts/conversation/byxle.py b/scripts/conversation/byxle.py new file mode 100644 index 00000000..71c08205 --- /dev/null +++ b/scripts/conversation/byxle.py @@ -0,0 +1,15 @@ +from resources.common import ConversationOption +from resources.common import OutOfBand +from resources.common import ProsePackage +from java.util import Vector +import sys + +def startConversation(core, actor, npc): + convSvc = core.conversationService + + core.conversationService.sendStopConversation(actor, npc, 'conversation/tatooine_eisley_byxle', 's_48') + return + +def endConversation(core, actor, npc): + core.conversationService.sendStopConversation(actor, npc, 'conversation/tatooine_eisley_byxle', 's_48') + return \ No newline at end of file diff --git a/scripts/conversation/demo.py b/scripts/conversation/demo.py new file mode 100644 index 00000000..35ab97b6 --- /dev/null +++ b/scripts/conversation/demo.py @@ -0,0 +1,60 @@ +from resources.common import ConversationOption +from resources.common import OutOfBand +from resources.common import ProsePackage +from java.util import Vector +import sys + +def startConversation(core, actor, npc): + convSvc = core.conversationService + + convSvc.sendConversationMessage(actor, npc, OutOfBand(ProsePackage('conversation/respecseller:s_31'))) + + options = Vector() + options.add(ConversationOption(OutOfBand(ProsePackage('conversation/respecseller:s_32')), 0)) + options.add(ConversationOption(OutOfBand(ProsePackage('conversation/respecseller:s_33')), 1)) + convSvc.sendConversationOptions(actor, npc, options, handleFirstScreen) + + return + +def handleFirstScreen(core, actor, npc, selection): + convSvc = core.conversationService + + # TODO: check for prices + + if selection == 0: # respec + convSvc.sendConversationMessage(actor, npc, OutOfBand(ProsePackage('conversation/respecseller:s_58'))) + + options = Vector() + options.add(ConversationOption(OutOfBand(ProsePackage('conversation/respecseller:s_60')), 0)) + options.add(ConversationOption(OutOfBand(ProsePackage('conversation/respecseller:s_64')), 1)) + convSvc.sendConversationOptions(actor, npc, options, handleRespecScreen) + + if selection == 1: # expertise reset + convSvc.sendConversationMessage(actor, npc, OutOfBand(ProsePackage('conversation/respecseller:s_35'))) + + options = Vector() + options.add(ConversationOption(OutOfBand(ProsePackage('conversation/respecseller:s_71')), 0)) + options.add(ConversationOption(OutOfBand(ProsePackage('conversation/respecseller:s_72')), 1)) + convSvc.sendConversationOptions(actor, npc, options, handleResetScreen) + + return + +def handleRespecScreen(core, actor, npc, selection): + if selection == 0: + core.skillService.sendRespecWindow(actor) + + core.conversationService.handleEndConversation(actor, npc) + + return + +def handleResetScreen(core, actor, npc, selection): + if selection == 0: + core.skillService.resetExpertise(actor) + + core.conversationService.handleEndConversation(actor, npc) + + return + +def endConversation(core, actor, npc): + core.conversationService.sendStopConversation(actor, npc, 'conversation/respecseller', 's_38') + return diff --git a/scripts/conversation/dunir.py b/scripts/conversation/dunir.py new file mode 100644 index 00000000..189e1748 --- /dev/null +++ b/scripts/conversation/dunir.py @@ -0,0 +1,15 @@ +from resources.common import ConversationOption +from resources.common import OutOfBand +from resources.common import ProsePackage +from java.util import Vector +import sys + +def startConversation(core, actor, npc): + convSvc = core.conversationService + + core.conversationService.sendStopConversation(actor, npc, 'conversation/tatooine_eisley_dunir', 's_37') + return + +def endConversation(core, actor, npc): + core.conversationService.sendStopConversation(actor, npc, 'conversation/tatooine_eisley_dunir', 's_37') + return \ No newline at end of file diff --git a/scripts/conversation/gendra.py b/scripts/conversation/gendra.py new file mode 100644 index 00000000..25277b59 --- /dev/null +++ b/scripts/conversation/gendra.py @@ -0,0 +1,15 @@ +from resources.common import ConversationOption +from resources.common import OutOfBand +from resources.common import ProsePackage +from java.util import Vector +import sys + +def startConversation(core, actor, npc): + convSvc = core.conversationService + + core.conversationService.sendStopConversation(actor, npc, 'conversation/tatooine_eisley_gendra', 's_99') + return + +def endConversation(core, actor, npc): + core.conversationService.sendStopConversation(actor, npc, 'conversation/tatooine_eisley_gendra', 's_99') + return \ No newline at end of file diff --git a/scripts/conversation/imp_recruiter.py b/scripts/conversation/imp_recruiter.py new file mode 100644 index 00000000..3b506483 --- /dev/null +++ b/scripts/conversation/imp_recruiter.py @@ -0,0 +1,311 @@ +from resources.common import ConversationOption +from resources.common import OutOfBand +from resources.common import ProsePackage +from resources.common import RadialOptions +from resources.datatables import PvpStatus +from resources.datatables import FactionStatus + +from services.sui import SUIWindow +from services.sui.SUIWindow import Trigger + +from java.util import Vector +import sys + + +impRecruiterRef = 0 + + +def startConversation(core, actor, npc): + global coreRef + global impRecruiterRef + coreRef = core + impRecruiterRef = npc + convSvc = core.conversationService + faction = actor.getFaction() + factionStatus = actor.getFactionStatus() + + if actor.getPvpStatus(PvpStatus.GoingOvert) or actor.getPvpStatus(PvpStatus.GoingCovert): + core.conversationService.sendStopConversation(actor, npc, 'conversation/faction_recruiter_imperial', 's_444') + return + elif actor.getFaction() != 'rebel' and actor.getFaction() != 'imperial': + convSvc.sendConversationMessage(actor, npc, OutOfBand.ProsePackage('@conversation/faction_recruiter_imperial:s_414')) + + options = Vector() + options.add(ConversationOption(OutOfBand.ProsePackage('@conversation/faction_recruiter_imperial:s_428'), 0)) + options.add(ConversationOption(OutOfBand.ProsePackage('@conversation/faction_recruiter_imperial:s_85'), 1)) + convSvc.sendConversationOptions(actor, npc, options, handleFirstScreen) + + return + elif actor.getFaction() == 'imperial' and actor.getFactionStatus() == FactionStatus.OnLeave: + convSvc.sendConversationMessage(actor, npc, OutOfBand.ProsePackage('@conversation/faction_recruiter_imperial:s_80')) + + options = Vector() + options.add(ConversationOption(OutOfBand.ProsePackage('@conversation/faction_recruiter_imperial:s_49'), 0)) + options.add(ConversationOption(OutOfBand.ProsePackage('@conversation/faction_recruiter_imperial:s_410'), 1)) + options.add(ConversationOption(OutOfBand.ProsePackage('@conversation/faction_recruiter_imperial:s_324'), 2)) + convSvc.sendConversationOptions(actor, npc, options, handleFirstScreen) + + return + elif actor.getFaction() == 'imperial' and actor.getFactionStatus() == FactionStatus.Combatant: + convSvc.sendConversationMessage(actor, npc, OutOfBand.ProsePackage('@conversation/faction_recruiter_imperial:s_310')) + + options = Vector() + options.add(ConversationOption(OutOfBand.ProsePackage('@conversation/faction_recruiter_imperial:s_49'), 0)) + options.add(ConversationOption(OutOfBand.ProsePackage('@conversation/faction_recruiter_imperial:s_410'), 1)) + options.add(ConversationOption(OutOfBand.ProsePackage('@conversation/faction_recruiter_imperial:s_324'), 2)) + convSvc.sendConversationOptions(actor, npc, options, handleFirstScreen) + + return + elif actor.getFactionStatus() == FactionStatus.SpecialForces: + convSvc.sendConversationMessage(actor, npc, OutOfBand.ProsePackage('@conversation/faction_recruiter_imperial:s_310')) + + options = Vector() + options.add(ConversationOption(OutOfBand.ProsePackage('@conversation/faction_recruiter_imperial:s_49'), 0)) + options.add(ConversationOption(OutOfBand.ProsePackage('@conversation/faction_recruiter_imperial:s_410'), 1)) + options.add(ConversationOption(OutOfBand.ProsePackage('@conversation/faction_recruiter_imperial:s_324'), 2)) + convSvc.sendConversationOptions(actor, npc, options, handleFirstScreen) + + return + elif actor.getFaction() == 'rebel': + npc.setCurrentAnimation('all_b_emt_backhand') + core.conversationService.sendStopConversation(actor, npc, 'conversation/faction_recruiter_imperial', 's_308') + return + return + +def handleFirstScreen(core, actor, npc, selection): + + convSvc = core.conversationService + if actor.getFaction() != 'rebel' and actor.getFaction() != 'imperial': + if selection == 0: + convSvc.sendConversationMessage(actor, npc, OutOfBand.ProsePackage('@conversation/faction_recruiter_imperial:s_432')) + + options = Vector() + options.add(ConversationOption(OutOfBand.ProsePackage('@conversation/faction_recruiter_imperial:s_434'), 0)) + options.add(ConversationOption(OutOfBand.ProsePackage('@conversation/faction_recruiter_imperial:s_440'), 1)) + convSvc.sendConversationOptions(actor, npc, options, handleSecondScreen) + return + + if selection == 1: + return + + if selection == 2: + core.conversationService.sendStopConversation(actor, npc, 'conversation/faction_recruiter_imperial', 's_442') + return + return + elif actor.getFaction() == 'imperial' and actor.getFactionStatus() == FactionStatus.OnLeave: + if selection == 0: + convSvc.sendConversationMessage(actor, npc, OutOfBand.ProsePackage('@conversation/faction_recruiter_imperial:s_50')) + + options = Vector() + options.add(ConversationOption(OutOfBand.ProsePackage('@conversation/faction_recruiter_imperial:s_97'), 0)) + options.add(ConversationOption(OutOfBand.ProsePackage('@conversation/faction_recruiter_imperial:s_93'), 1)) + options.add(ConversationOption(OutOfBand.ProsePackage('@conversation/faction_recruiter_imperial:s_88'), 2)) + options.add(ConversationOption(OutOfBand.ProsePackage('@conversation/faction_recruiter_imperial:s_55'), 3)) + convSvc.sendConversationOptions(actor, npc, options, handleSecondScreen) + + return + if selection == 1: + percent = core.guildService.getGuildObject().getCurrentServerGCWTotalPercentMap().get(actor.getPlanet().getName()).getPercent().intValue() + convSvc.sendConversationMessage(actor, npc, OutOfBand.ProsePackage("@conversation/faction_recruiter_imperial:s_412", percent, "TO", str(100 - percent))) + return + if selection == 2: + return + return + elif actor.getFaction() == 'imperial' and actor.getFactionStatus() == FactionStatus.Combatant: + if selection == 0: + convSvc.sendConversationMessage(actor, npc, OutOfBand.ProsePackage('conversation/faction_recruiter_imperial', 's_55')) + + options = Vector() + options.add(ConversationOption(OutOfBand.ProsePackage('@conversation/faction_recruiter_imperial:s_74'), 0)) + options.add(ConversationOption(OutOfBand.ProsePackage('@conversation/faction_recruiter_imperial:s_93'), 1)) + options.add(ConversationOption(OutOfBand.ProsePackage('@conversation/faction_recruiter_imperial:s_88'), 2)) + options.add(ConversationOption(OutOfBand.ProsePackage('@conversation/faction_recruiter_imperial:s_55'), 3)) + convSvc.sendConversationOptions(actor, npc, options, handleSecondScreen) + + return + if selection == 1: + percent = core.guildService.getGuildObject().getCurrentServerGCWTotalPercentMap().get(actor.getPlanet().getName()).getPercent().intValue() + convSvc.sendConversationMessage(actor, npc, OutOfBand.ProsePackage("@conversation/faction_recruiter_imperial:s_412", percent, "TO", str(100 - percent))) + return + + if selection == 2: + convSvc.sendConversationMessage(actor, npc, OutOfBand.ProsePackage('@conversation/faction_recruiter_imperial:s_90')) + + options = Vector() + options.add(ConversationOption(OutOfBand.ProsePackage('@conversation/faction_recruiter_imperial:s_92'), 0)) + options.add(ConversationOption(OutOfBand.ProsePackage('@conversation/faction_recruiter_imperial:s_96'), 1)) + convSvc.sendConversationOptions(actor, npc, options, handleSecondScreen) + + return + return + elif actor.getFaction() == 'imperial' and actor.getFactionStatus() == FactionStatus.SpecialForces: + if selection == 0: + convSvc.sendConversationMessage(actor, npc, OutOfBand.ProsePackage('@conversation/faction_recruiter_imperial:s_50')) + + options = Vector() + options.add(ConversationOption(OutOfBand.ProsePackage('@conversation/faction_recruiter_imperial:s_74'), 0)) + options.add(ConversationOption(OutOfBand.ProsePackage('@conversation/faction_recruiter_imperial:s_97'), 1)) + options.add(ConversationOption(OutOfBand.ProsePackage('@conversation/faction_recruiter_imperial:s_88'), 2)) + options.add(ConversationOption(OutOfBand.ProsePackage('@conversation/faction_recruiter_imperial:s_55'), 3)) + convSvc.sendConversationOptions(actor, npc, options, handleSecondScreen) + + return + if selection == 1: + percent = core.guildService.getGuildObject().getCurrentServerGCWTotalPercentMap().get(actor.getPlanet().getName()).getPercent().intValue() + convSvc.sendConversationMessage(actor, npc, OutOfBand.ProsePackage("@conversation/faction_recruiter_imperial:s_412", percent, "TO", str(100 - percent))) + return + if selection == 2: + return + return + + +def handleSecondScreen(core, actor, npc, selection): + convSvc = core.conversationService + + + if actor.getFaction() != 'rebel' and actor.getFaction() != 'imperial': + if selection == 0: + core.factionService.join(actor, 'imperial') + core.factionService.changeFactionStatus(actor, FactionStatus.OnLeave) + + convSvc.sendConversationMessage(actor, npc, OutOfBand.ProsePackage('@conversation/faction_recruiter_imperial:s_116')) + + options = Vector() + options.add(ConversationOption(OutOfBand.ProsePackage('@conversation/faction_recruiter_imperial:s_438'), 0)) + core.conversationService.sendStopConversation(actor, npc, 'conversation/faction_recruiter_imperial', 's_100') + + return + if selection == 1: + core.conversationService.sendStopConversation(actor, npc, 'conversation/faction_recruiter_imperial', 's_442') + return + return + elif actor.getFaction() == 'imperial' and actor.getFactionStatus() == FactionStatus.OnLeave: + if selection == 0: + core.factionService.changeFactionStatus(actor, FactionStatus.Combatant) + core.conversationService.sendStopConversation(actor, npc, 'conversation/faction_recruiter_imperial', 's_300') + return + + if selection == 1: + convSvc.sendConversationMessage(actor, npc, OutOfBand.ProsePackage('@conversation/faction_recruiter_imperial:s_64')) + + options = Vector() + options.add(ConversationOption(OutOfBand.ProsePackage('@conversation/faction_recruiter_imperial:s_66'), 0)) + options.add(ConversationOption(OutOfBand.ProsePackage('@conversation/faction_recruiter_imperial:s_302'), 1)) + convSvc.sendConversationOptions(actor, npc, options, handleFourthScreen) + return + if selection == 2: + convSvc.sendConversationMessage(actor, npc, OutOfBand.ProsePackage('@conversation/faction_recruiter_imperial:s_90')) + + options = Vector() + options.add(ConversationOption(outOfBand.ProsePackage('@conversation/faction_recruiter_imperial:s_92'), 0)) + options.add(ConversationOption(OutOfBand.ProsePackage('@conversation/faction_recruiter_imperial:s_96'), 1)) + convSvc.sendConversationOptions(actor, npc, options, handleThirdScreen) + return + if selection == 3: + core.conversationService.sendStopConversation(actor, npc, 'conversation/faction_recruiter_imperial', 's_95') + return + return + elif actor.getFaction() == 'imperial' and actor.getFactionStatus() == FactionStatus.Combatant: + if selection == 0: + core.factionService.changeFactionStatus(actor, FactionStatus.SpecialForces) + convSvc.sendConversationMessage(actor, npc, OutOfBand.ProsePackage('@conversation/faction_recruiter_imperial:s_76')) + + options = Vector() + options.add(ConversationOption(outOfBand.ProsePackage('@conversation/faction_recruiter_imperial:s_79'), 0)) + options.add(ConversationOption(OutOfBand.ProsePackage('@conversation/faction_recruiter_imperial:s_70'), 1)) + convSvc.sendConversationOptions(actor, npc, options, handleFithScreen) + return + + if selection == 1: + convSvc.sendConversationMessage(actor, npc, OutOfBand.ProsePackage('@conversation/faction_recruiter_imperial:s_64')) + + options = Vector() + options.add(ConversationOption(outOfBand.ProsePackage('@conversation/faction_recruiter_imperial:s_66'), 0)) + options.add(ConversationOption(OutOfBand.ProsePackage('@conversation/faction_recruiter_imperial:s_302'), 1)) + convSvc.sendConversationOptions(actor, npc, options, handleFourthScreen) + + return + if selection == 2: + convSvc.sendConversationMessage(actor, npc, OutOfBand.ProsePackage('@conversation/faction_recruiter_imperial:s_90')) + + options = Vector() + options.add(ConversationOption(OutOfBand.ProsePackage('@conversation/faction_recruiter_imperial:s_92'), 0)) + options.add(ConversationOption(OutOfBand.ProsePackage('@conversation/faction_recruiter_imperial:s_96'), 1)) + convSvc.sendConversationOptions(actor, npc, options, handleThirdScreen) + + return + if selection == 3: + return + return + elif actor.getFaction() == 'imperial' and actor.getFactionStatus() == FactionStatus.SpecialForces: + if selection == 0: + convSvc.sendConversationMessage(actor, npc, OutOfBand.ProsePackage('conversation/faction_recruiter_imperial:s_76')) + + options = Vector() + options.add(ConversationOption(OutOfBand.ProsePackage('@conversation/faction_recruiter_imperial:s_79'), 0)) + options.add(ConversationOption(OutOfBand.ProsePackage('@conversation/faction_recruiter_imperial:s_70'), 1)) + convSvc.sendConversationOptions(actor, npc, options, handleFithScreen) + + return + if selection == 1: + convSvc.sendConversationMessage(actor, npc, OutOfBand.ProsePackage('@conversation/faction_recruiter_imperial:s_54')) + + options = Vector() + options.add(ConversationOption(OutOfBand.ProsePackage('@conversation/faction_recruiter_imperial:s_56'), 0)) + options.add(ConversationOption(OutOfBand.ProsePackage('@conversation/faction_recruiter_imperial:s_84'), 1)) + convSvc.sendConversationOptions(actor, npc, options, handleSixthScreen) + + return + if selection == 2: + convSvc.sendConversationMessage(actor, npc, OutOfBand.ProsePackage('@conversation/faction_recruiter_imperial:s_90')) + + options = Vector() + options.add(ConversationOption(OutOfBand.ProsePackage('@conversation/faction_recruiter_imperial:s_92'), 0)) + options.add(ConversationOption(OutOfBand.ProsePackage('@conversation/faction_recruiter_imperial:s_96'), 1)) + convSvc.sendConversationOptions(actor, npc, options, handleThirdScreen) + + return + if selection == 3: + return + return + +def handleThirdScreen(core, actor, npc, selection): + if selection == 0: + core.conversationService.sendStopConversation(actor, npc, 'conversation/faction_recruiter_imperial', 's_94') + core.factionService.resign(actor) + return + + if selection == 1: + core.conversationService.sendStopConversation(actor, npc, 'conversation/faction_recruiter_imperial', 's_98') + return + return + +def handleFourthScreen(core, actor, npc, selection): + if selection == 0: + core.factionService.changeFactionStatus(actor, FactionStatus.Combatant) + core.conversationService.sendStopConversation(actor, npc, 'conversation/faction_recruiter_imperial', 's_68') + return + if selection == 1: + core.conversationService.sendStopConversation(actor, npc, 'conversation/faction_recruiter_imperial', 's_72') + return + return + +def handleFithScreen(core, actor, npc, selection): + if selection == 0: + core.factionService.changeFactionStatus(actor, FactionStatus.OnLeave) + core.conversationService.sendStopConversation(actor, npc, 'conversation/faction_recruiter_imperial', 's_82') + return + +def handleSixthScreen(core, actor, npc, selection): + if selection == 0: + actor.setFactionStatus(FactionStatus.Combatant) + core.conversationService.sendStopConversation(actor, npc, 'conversation/faction_recruiter_imperial', 's_58') + return + if selection == 1: + core.conversationService.sendStopConversation(actor, npc, 'conversation/faction_recruiter_imperial', 's_57') + return + return + +def endConversation(core, actor, npc): + core.conversationService.sendStopConversation(actor, npc, 'conversation/faction_recruiter_imperial', 's_304') + return \ No newline at end of file diff --git a/scripts/conversation/junk_dealer.py b/scripts/conversation/junk_dealer.py new file mode 100644 index 00000000..b0741467 --- /dev/null +++ b/scripts/conversation/junk_dealer.py @@ -0,0 +1,223 @@ +from resources.common import ConversationOption +from resources.common import OutOfBand +from resources.common import ProsePackage +from resources.common import RadialOptions +from services.sui import SUIWindow +from services.sui.SUIWindow import Trigger +from java.util import Vector +from main import NGECore +import sys + +def startConversation(core, actor, npc): + convSvc = core.conversationService + + convSvc.sendConversationMessage(actor, npc, OutOfBand.ProsePackage('@conversation/junk_dealer_generic:s_bef51e38')) + + options = Vector() + options.add(ConversationOption(OutOfBand.ProsePackage('@conversation/junk_dealer_generic:s_54fab04f'), 0)) + options.add(ConversationOption(OutOfBand.ProsePackage('@conversation/junk_dealer_generic:s_48'), 1)) + options.add(ConversationOption(OutOfBand.ProsePackage('@conversation/junk_dealer_generic:s_3aa18b2d'), 2)) + + buyBack = actor.getAttachment('buy_back') + + if buyBack is not None and buyBack != 0 and core.objectService.objsInContainer(actor, core.objectService.getObject(buyBack)) > 0: + options.add(ConversationOption(OutOfBand.ProsePackage('@conversation/junk_dealer_generic:s_43'), 3)) + + convSvc.sendConversationOptions(actor, npc, options, handleFirstScreen) + return + +def handleFirstScreen(core, actor, npc, selection): + convSvc = core.conversationService + + if selection == 0: + # sell items + + sellItemListRef = core.lootService.getSellableInventoryItems(actor) + + if len(sellItemListRef) == 0: + actor.sendSystemMessage('@loot_dealer:no_items', 1) + startConversation(core, actor, npc) + return # no point + + convSvc.sendStopConversation(actor, npc, 'conversation/junk_dealer_generic', 's_84a67771') + core.lootService.handleJunkDealerSellWindow(actor, npc, sellItemListRef) + return + + if selection == 1: + # Mark Items + convSvc.sendStopConversation(actor, npc, 'conversation/junk_dealer_generic', 's_50') + core.lootService.handleJunkDealerMarkItems(actor, npc) + return + + if selection == 2: + lootKitScreen1(core, actor, npc) + return + + if selection == 3: + # buy back + + buyHistory = core.objectService.objsInContainer(actor, core.objectService.getObject(actor.getAttachment('buy_back'))) + if buyHistory == 0: + actor.sendSystemMessage('@loot_dealer:no_buy_back_items_found', 1) + startConversation(core,actor,npc) + return + + convSvc.sendStopConversation(actor, npc, 'conversation/junk_dealer_generic', 's_44') + core.lootService.handleJunkDealerBuyBackWindow(actor, npc) + return + return + +def endConversation(core, actor, npc): + core.conversationService.sendStopConversation(actor, npc, 'conversation/junk_dealer_generic', 's_4bd9d15e') + return + +def handleLootScreenSelection1(core, actor, npc, selection): + + convSvc = core.conversationService + if selection == 0: + lootKitScreen1(core, actor, npc) + + return + +def handleLootScreenSelection2(core, actor, npc, selection): + + convSvc = core.conversationService + if selection == 0: + lootKitScreen2(core, actor, npc) + + return + +def handleLootScreenSelection3(core, actor, npc, selection): + + convSvc = core.conversationService + if selection == 0: + lootKitScreen3(core, actor, npc) + + return + +def handleLootScreenSelection4(core, actor, npc, selection): + + convSvc = core.conversationService + if selection == 0: + lootKitScreen4(core, actor, npc) + + return + +def handleLootScreenSelection5(core, actor, npc, selection): + + convSvc = core.conversationService + if selection == 0: + lootKitScreen5a(core, actor, npc) + + if selection == 1: + lootKitScreen5b(core, actor, npc) + + return + +def handleLootScreenSelection6(core, actor, npc, selection): + + convSvc = core.conversationService + convSvc.sendConversationMessage(actor, npc, OutOfBand.ProsePackage('@conversation/junk_dealer_generic:s_14efaaa2')) + if selection == 0: + template = 'object/tangible/loot/collectible/kits/shared_orange_rug_kit.iff' + addLootKit(core, actor, npc,template) + + if selection == 1: + template = 'object/tangible/loot/collectible/kits/shared_blue_rug_kit.iff' + addLootKit(core, actor, npc,template) + + if selection == 2: + template = 'object/tangible/loot/collectible/kits/shared_gong_kit.iff' + addLootKit(core, actor, npc,template) + + if selection == 3: + template = 'object/tangible/loot/collectible/kits/shared_light_table_kit.iff' + addLootKit(core, actor, npc,template) + + if selection == 4: + template = 'object/tangible/loot/collectible/kits/shared_sculpture_kit.iff' + addLootKit(core, actor, npc,template) + + return + +def addLootKit(core, actor, npc,template): + + kit = core.objectService.createObject(template, actor.getPlanet()) + inventory = actor.getSlottedObject('inventory') + inventory.add(kit) + return + +def lootKitScreen1(core, actor, npc): + + convSvc = core.conversationService + + convSvc.sendConversationMessage(actor, npc, OutOfBand.ProsePackage('@conversation/junk_dealer_generic:s_d9e6b751')) + + options = Vector() + options.add(ConversationOption(OutOfBand.ProsePackage('@conversation/junk_dealer_generic:s_6d53d062'), 0)) + + convSvc.sendConversationOptions(actor, npc, options, handleLootScreenSelection2) + + return + +def lootKitScreen2(core, actor, npc): + + convSvc = core.conversationService + + convSvc.sendConversationMessage(actor, npc, OutOfBand.ProsePackage('@conversation/junk_dealer_generic:s_e29f48dc')) + + options = Vector() + options.add(ConversationOption(OutOfBand.ProsePackage('@conversation/junk_dealer_generic:s_324b9b0f'), 0)) + + convSvc.sendConversationOptions(actor, npc, options, handleLootScreenSelection3) + + return + +def lootKitScreen3(core, actor, npc): + + convSvc = core.conversationService + + convSvc.sendConversationMessage(actor, npc, OutOfBand.ProsePackage('@conversation/junk_dealer_generic:s_12fe83a6')) + + options = Vector() + options.add(ConversationOption(OutOfBand.ProsePackage('@conversation/junk_dealer_generic:s_e1a103e5'), 0)) + + convSvc.sendConversationOptions(actor, npc, options, handleLootScreenSelection4) + + return + +def lootKitScreen4(core, actor, npc): + + convSvc = core.conversationService + + convSvc.sendConversationMessage(actor, npc, OutOfBand.ProsePackage('@conversation/junk_dealer_generic:s_4d65752')) + + options = Vector() + options.add(ConversationOption(OutOfBand.ProsePackage('@conversation/junk_dealer_generic:s_d347bee3'), 0)) + options.add(ConversationOption(OutOfBand.ProsePackage('@conversation/junk_dealer_generic:s_b60b73f8'), 1)) + + convSvc.sendConversationOptions(actor, npc, options, handleLootScreenSelection5) + + return + +def lootKitScreen5a(core, actor, npc): + + convSvc = core.conversationService + + convSvc.sendConversationMessage(actor, npc, OutOfBand.ProsePackage('@conversation/junk_dealer_generic:s_3fc7eb45')) + + options = Vector() + options.add(ConversationOption(OutOfBand.ProsePackage('@conversation/junk_dealer_generic:s_ee977dee'), 0)) + options.add(ConversationOption(OutOfBand.ProsePackage('@conversation/junk_dealer_generic:s_8f39769'), 1)) + options.add(ConversationOption(OutOfBand.ProsePackage('@conversation/junk_dealer_generic:s_fe657cdd'), 2)) + options.add(ConversationOption(OutOfBand.ProsePackage('@conversation/junk_dealer_generic:s_9ede4b84'), 3)) + options.add(ConversationOption(OutOfBand.ProsePackage('@conversation/junk_dealer_generic:s_87c5851b'), 4)) + + convSvc.sendConversationOptions(actor, npc, options, handleLootScreenSelection6) + + return + +def lootKitScreen5b(core, actor, npc): + + startConversation(core,actor,npc) + return \ No newline at end of file diff --git a/scripts/conversation/mayor_mikdanyel_guhrantt.py b/scripts/conversation/mayor_mikdanyel_guhrantt.py new file mode 100644 index 00000000..32d86b84 --- /dev/null +++ b/scripts/conversation/mayor_mikdanyel_guhrantt.py @@ -0,0 +1,15 @@ +from resources.common import ConversationOption +from resources.common import OutOfBand +from resources.common import ProsePackage +from java.util import Vector +import sys + +def startConversation(core, actor, npc): + convSvc = core.conversationService + + core.conversationService.sendStopConversation(actor, npc, 'conversation/mos_eisley_mayor', 's_117') + return + +def endConversation(core, actor, npc): + core.conversationService.sendStopConversation(actor, npc, 'conversation/mos_eisley_mayor', 's_117') + return \ No newline at end of file diff --git a/scripts/conversation/medical_cloning_droid.py b/scripts/conversation/medical_cloning_droid.py new file mode 100644 index 00000000..8089c5f5 --- /dev/null +++ b/scripts/conversation/medical_cloning_droid.py @@ -0,0 +1,122 @@ +from resources.common import ConversationOption +from resources.common import OutOfBand +from resources.common import ProsePackage +from resources.common import RadialOptions + + +from services.sui import SUIWindow +from services.sui.SUIWindow import Trigger + +from java.util import Vector +import sys + + + + +def startConversation(core, actor, npc): + global coreRef + coreRef = core + convSvc = core.conversationService + + + if actor.getBuffByName('cloning_sickness'): + + level = int(actor.getLevel()) + + if level <= 10: + cloningFee = 100 + elif level >= 11: + cloningFee = (((actor.getLevel() + 17) * actor.getLevel())/2) + elif level == 90: + cloningFee = 5000 + + convSvc.sendConversationMessage(actor, npc, OutOfBand.ProsePackage("@conversation/clone_droid:s_6", int(cloningFee))) + prose1 = ProsePackage('conversation/clone_droid', 's_8') + outOfBand2 = OutOfBand() + outOfBand2.addProsePackage(prose1) + prose2 = ProsePackage('conversation/clone_droid', 's_12') + outOfBand3 = OutOfBand() + outOfBand3.addProsePackage(prose2) + option1 = ConversationOption(outOfBand2, 0) + option2 = ConversationOption(outOfBand3, 1) + + + options = Vector() + options.add(option1) + options.add(option2) + + convSvc.sendConversationOptions(actor, npc, options, handleFirstScreen) + return + else: + core.conversationService.sendStopConversation(actor, npc, 'conversation/clone_droid', 's_14') + return + return + +def handleFirstScreen(core, actor, npc, selection): + + convSvc = core.conversationService + if selection == 0: + prose = ProsePackage('conversation/clone_droid', 's_10') + outOfBand = OutOfBand() + outOfBand.addProsePackage(prose) + convSvc.sendConversationMessage(actor, npc, outOfBand) + prose2 = ProsePackage('conversation/clone_droid', 's_12') + outOfBand2 = OutOfBand() + outOfBand2.addProsePackage(prose2) + option1 = ConversationOption(outOfBand2, 0) + + + options = Vector() + options.add(option1) + + convSvc.sendConversationOptions(actor, npc, options, handleSecondScreen) + + return + + + if selection == 1: + if actor.getLevel() <= 10: + cloningFee = 100 + elif actor.getLevel() >= 11: + cloningFee = (((actor.getLevel() + 17) * actor.getLevel())/2) + elif actor.getLevel() == 90: + cloningFee = 5000 + + + if actor.getCashCredits() >= cloningFee: + core.buffService.removeBuffFromCreature(actor, actor.getBuffByName("cloning_sickness")); + core.conversationService.sendStopConversation(actor, npc, 'conversation/clone_droid', 's_14') + actor.setCashCredits(actor.getCashCredits() - int(cloningFee)) + return + elif actor.getCashCredits() <= cloningFee: + core.conversationService.sendStopConversation(actor, npc, 'conversation/clone_droid', 's_16') + return + return + + +def handleSecondScreen(core, actor, npc, selection): + convSvc = core.conversationService + + if actor.getLevel() <= 10: + cloningFee = 100 + elif actor.getLevel() >= 11: + cloningFee = (((actor.getLevel() + 17) * actor.getLevel())/2) + elif actor.getLevel() == 90: + cloningFee = 5000 + + if selection == 0: + if actor.getCashCredits() >= cloningFee: + core.buffService.removeBuffFromCreature(actor, actor.getBuffByName("cloning_sickness")); + core.conversationService.sendStopConversation(actor, npc, 'conversation/clone_droid', 's_14') + actor.setCashCredits(actor.getCashCredits() - int(cloningFee)) + return + elif actor.getCashCredits() <= cloningFee: + core.conversationService.sendStopConversation(actor, npc, 'conversation/clone_droid', 's_16') + return + return + +def endConversation(core, actor, npc): + core.conversationService.sendStopConversation(actor, npc, 'conversation/clone_droid', 's_4') + return + + \ No newline at end of file diff --git a/scripts/conversation/missions/bounty_droid_probot.py b/scripts/conversation/missions/bounty_droid_probot.py new file mode 100644 index 00000000..78fd806b --- /dev/null +++ b/scripts/conversation/missions/bounty_droid_probot.py @@ -0,0 +1,54 @@ +from resources.common import ConversationOption +from resources.common import OutOfBand +from resources.common import ProsePackage +from java.util import Vector +import time +import sys + +def startConversation(core, actor, npc): + convSvc = core.conversationService + + probotRequester = core.objectService.getObject(long(npc.getAttachment('probotRequester'))) + + if probotRequester is None: + core.objectService.destroyObject(npc) + return + + if probotRequester.getObjectId() != actor.getObjectId(): + convSvc.sendConversationMessage(actor, npc, OutOfBand.ProsePackage('@conversation/bounty_probot:s_6')) + return + + mission = core.objectService.getObject(long(npc.getAttachment('attachedMission'))) + + if mission is None: + convSvc.sendConversationMessage(actor, npc, OutOfBand.ProsePackage('@conversation/bounty_probot:s_4')) + return + + objective = mission.getObjective() + + if objective is None: + convSvc.sendConversationMessage(actor, npc, OutOfBand.ProsePackage('@conversation/bounty_probot:s_4')) + return + + convSvc.sendConversationMessage(actor, npc, OutOfBand.ProsePackage('@conversation/bounty_probot:s_5')) + + options = Vector() + options.add(ConversationOption(OutOfBand.ProsePackage('@conversation/bounty_probot:s_8'), 0)) + convSvc.sendConversationOptions(actor, npc, options, handleBioTransmit) + return + +def handleBioTransmit(core, actor, npc, selection): + core.conversationService.handleEndConversation(actor, npc) + actor.sendSystemMessage('@mission/mission_generic:probe_droid_takeoff', 0) + + npc.setPosture(8) + + time.sleep(7) + objective = core.objectService.getObject(long(npc.getAttachment('attachedMission'))).getObjective() + objective.beginArakydUpdate(actor) + core.objectService.destroyObject(npc) + return + +def endConversation(core, actor, npc): + core.conversationService.sendStopConversation(actor, npc, '', '') + return diff --git a/scripts/conversation/missions/deliver.py b/scripts/conversation/missions/deliver.py new file mode 100644 index 00000000..774e3e01 --- /dev/null +++ b/scripts/conversation/missions/deliver.py @@ -0,0 +1,70 @@ +from resources.common import OutOfBand +from resources.common import ProsePackage +from resources.objectives import DeliveryMissionObjective +import sys + +def startConversation(core, actor, npc): + missionId = npc.getAttachment('assignedMission') + + if missionId is None: + return + + mission = core.objectService.getObject(missionId) + + if mission is None: + return + + objective = mission.getObjective() + + if mission.getGrandparent().getObjectId() != actor.getObjectId() or objective is None: + core.conversationService.sendStopConversation(actor, npc, 'mission/mission_generic', 'npc_job_request_no_job') + return + + if objective.getObjectivePhase() == 0: + handlePickupStage(core, actor, npc, objective, mission) + return + + elif objective.getObjectivePhase() == 1: + handleDeliveryStage(core, actor, npc, objective, mission) + return + + elif objective.getObjectivePhase() == 2: + handleCompletionStage(core, actor, npc, objective, mission) + return + return + +def endConversation(core, actor, npc): + core.conversationService.sendStopConversation(actor, npc, 'mission/mission_generic', 'npc_job_request_no_job') + return + +def handlePickupStage(core, actor, npc, objective, mission): + + if objective.getMissionGiver().getObjectId() != npc.getObjectId(): + endConversation(core, actor, npc) + return + + core.conversationService.sendStopConversation(actor, npc, mission.getMissionDescription(), 'm' + str(mission.getMissionId()) + 'p') + objective.createDeliveryItem(core, actor) + objective.update(core, actor) + return + +def handleDeliveryStage(core, actor, npc, objective, mission): + + if objective.getDropOffNpc().getObjectId() != npc.getObjectId(): + endConversation(core, actor, npc) + return + + core.conversationService.sendStopConversation(actor, npc, mission.getMissionDescription(), 'm' + str(mission.getMissionId()) + 'r') + core.objectService.destroyObject(objective.getDeliveryObject()) + objective.update(core, actor) + return + +def handleCompletionStage(core, actor, npc, objective, mission): + + if objective.getMissionGiver().getObjectId() != npc.getObjectId(): + endConversation(core, actor, npc) + return + + core.conversationService.sendStopConversation(actor, npc, mission.getMissionDescription(), 'm' + str(mission.getMissionId()) + 's') + core.missionService.handleMissionComplete(actor, mission) + return \ No newline at end of file diff --git a/scripts/conversation/niko.py b/scripts/conversation/niko.py new file mode 100644 index 00000000..87e9d576 --- /dev/null +++ b/scripts/conversation/niko.py @@ -0,0 +1,15 @@ +from resources.common import ConversationOption +from resources.common import OutOfBand +from resources.common import ProsePackage +from java.util import Vector +import sys + +def startConversation(core, actor, npc): + convSvc = core.conversationService + + core.conversationService.sendStopConversation(actor, npc, 'conversation/tatooine_eisley_niko', 's_71') + return + +def endConversation(core, actor, npc): + core.conversationService.sendStopConversation(actor, npc, 'conversation/tatooine_eisley_niko', 's_71') + return \ No newline at end of file diff --git a/scripts/conversation/reb_recruiter.py b/scripts/conversation/reb_recruiter.py new file mode 100644 index 00000000..d1b8a1a3 --- /dev/null +++ b/scripts/conversation/reb_recruiter.py @@ -0,0 +1,307 @@ +from resources.common import ConversationOption +from resources.common import OutOfBand +from resources.common import ProsePackage +from resources.common import RadialOptions +from resources.datatables import PvpStatus +from resources.datatables import FactionStatus + +from services.sui import SUIWindow +from services.sui.SUIWindow import Trigger + +from java.util import Vector +import sys + + +impRecruiterRef = 0 + +def startConversation(core, actor, npc): + global coreRef + global impRecruiterRef + coreRef = core + impRecruiterRef = npc + convSvc = core.conversationService + faction = actor.getFaction() + factionStatus = actor.getFactionStatus() + + if actor.getPvpStatus(PvpStatus.GoingOvert) or actor.getPvpStatus(PvpStatus.GoingCovert): + core.conversationService.sendStopConversation(actor, npc, 'conversation/faction_recruiter_rebel', 's_364') + return + elif actor.getFaction() != 'rebel' and actor.getFaction() != 'imperial': + convSvc.sendConversationMessage(actor, npc, OutOfBand.ProsePackage('@conversation/faction_recruiter_rebel:s_334')) + + options = Vector() + options.add(ConversationOption(OutOfBand.ProsePackage('@conversation/faction_recruiter_rebel:s_348'), 0)) + options.add(ConversationOption(OutOfBand.ProsePackage('@conversation/faction_recruiter_rebel:s_83'), 1)) + convSvc.sendConversationOptions(actor, npc, options, handleFirstScreen) + + return + elif actor.getFaction() == 'rebel' and actor.getFactionStatus() == FactionStatus.OnLeave: + convSvc.sendConversationMessage(actor, npc, OutOfBand.ProsePackage('@conversation/faction_recruiter_rebel:s_216')) + + options = Vector() + options.add(ConversationOption(OutOfBand.ProsePackage('@conversation/faction_recruiter_rebel:s_49'), 0)) + options.add(ConversationOption(OutOfBand.ProsePackage('@conversation/faction_recruiter_rebel:s_330'), 1)) + options.add(ConversationOption(OutOfBand.ProsePackage('@conversation/faction_recruiter_rebel:s_248'), 2)) + convSvc.sendConversationOptions(actor, npc, options, handleFirstScreen) + + return + elif actor.getFaction() == 'rebel' and actor.getFactionStatus() == FactionStatus.Combatant: + convSvc.sendConversationMessage(actor, npc, OutOfBand.ProsePackage('@conversation/faction_recruiter_rebel:s_216')) + + options = Vector() + options.add(ConversationOption(OutOfBand.ProsePackage('@conversation/faction_recruiter_rebel:s_49'), 0)) + options.add(ConversationOption(OutOfBand.ProsePackage('@conversation/faction_recruiter_rebel:s_330'), 1)) + options.add(ConversationOption(OutOfBand.ProsePackage('@conversation/faction_recruiter_rebel:s_248'), 2)) + convSvc.sendConversationOptions(actor, npc, options, handleFirstScreen) + + return + elif actor.getFactionStatus() == FactionStatus.SpecialForces: + convSvc.sendConversationMessage(actor, npc, OutOfBand.ProsePackage('@conversation/faction_recruiter_rebel:s_216')) + + options = Vector() + options.add(ConversationOption(OutOfBand.ProsePackage('conversation/faction_recruiter_rebel', 's_49'), 0)) + options.add(ConversationOption(OutOfBand.ProsePackage('conversation/faction_recruiter_rebel', 's_330'), 1)) + options.add(ConversationOption(OutOfBand.ProsePackage('conversation/faction_recruiter_rebel', 's_248'), 2)) + convSvc.sendConversationOptions(actor, npc, options, handleFirstScreen) + + return + elif actor.getFaction() == 'imperial': + npc.setCurrentAnimation('all_b_emt_backhand') + core.conversationService.sendStopConversation(actor, npc, 'conversation/faction_recruiter_rebel', 's_230') + return + return + +def handleFirstScreen(core, actor, npc, selection): + convSvc = core.conversationService + + if actor.getFaction() != 'rebel' and actor.getFaction() != 'imperial': + if selection == 0: + convSvc.sendConversationMessage(actor, npc, OutOfBand.ProsePackage('@conversation/faction_recruiter_rebel:s_352')) + + options = Vector() + options.add(ConversationOption(OutOfBand.ProsePackage('@conversation/faction_recruiter_rebel:s_354'), 0)) + options.add(ConversationOption(OutOfBand.ProsePackage('@conversation/faction_recruiter_rebel:s_360'), 1)) + convSvc.sendConversationOptions(actor, npc, options, handleSecondScreen) + + return + if selection == 1: + return + if selection == 2: + core.conversationService.sendStopConversation(actor, npc, 'conversation/faction_recruiter_rebel', 's_362') + return + return + elif actor.getFaction() == 'rebel' and actor.getFactionStatus() == FactionStatus.OnLeave: + if selection == 0: + convSvc.sendConversationMessage(actor, npc, OutOfBand.ProsePackage('@conversation/faction_recruiter_rebel:s_50')) + + options = Vector() + options.add(ConversationOption(OutOfBand.ProsePackage('@conversation/faction_recruiter_rebel:s_95'), 0)) + options.add(ConversationOption(OutOfBand.ProsePackage('@conversation/faction_recruiter_rebel:s_93'), 1)) + options.add(ConversationOption(OutOfBand.ProsePackage('@conversation/faction_recruiter_rebel:s_74'), 2)) + options.add(ConversationOption(OutOfBand.ProsePackage('@conversation/faction_recruiter_rebel:s_360'), 3)) + convSvc.sendConversationOptions(actor, npc, options, handleSecondScreen) + + return + if selection == 1: + percent = core.guildService.getGuildObject().getCurrentServerGCWTotalPercentMap().get(actor.getPlanet().getName()).getPercent().intValue() + convSvc.sendConversationMessage(actor, npc, OutOfBand.ProsePackage("@conversation/faction_recruiter_rebel:s_332", percent, "TO", str(100 - percent))) + return + if selection == 2: + return + return + elif actor.getFaction() == 'rebel' and actor.getFactionStatus() == FactionStatus.Combatant: + if selection == 0: + convSvc.sendConversationMessage(actor, npc, OutOfBand.ProsePackage('conversation/faction_recruiter_rebel', 's_50')) + + options = Vector() + options.add(ConversationOption(OutOfBand.ProsePackage('@conversation/faction_recruiter_rebel:s_86'), 0)) + options.add(ConversationOption(OutOfBand.ProsePackage('@conversation/faction_recruiter_rebel:s_93'), 1)) + options.add(ConversationOption(OutOfBand.ProsePackage('@conversation/faction_recruiter_rebel:s_74'), 2)) + options.add(ConversationOption(OutOfBand.ProsePackage('@conversation/faction_recruiter_rebel:s_360'), 3)) + convSvc.sendConversationOptions(actor, npc, options, handleSecondScreen) + + return + if selection == 1: + percent = core.guildService.getGuildObject().getCurrentServerGCWTotalPercentMap().get(actor.getPlanet().getName()).getPercent().intValue() + convSvc.sendConversationMessage(actor, npc, OutOfBand.ProsePackage("@conversation/faction_recruiter_rebel:s_332", percent, "TO", str(100 - percent))) + return + if selection == 2: + convSvc.sendConversationMessage(actor, npc, OutOfBand.ProsePackage('@conversation/faction_recruiter_rebel:s_76')) + + options = Vector() + options.add(ConversationOption(OutOfBand.ProsePackage('@conversation/faction_recruiter_rebel:s_78'), 0)) + options.add(ConversationOption(OutOfBand.ProsePackage('@conversation/faction_recruiter_rebel:s_360'), 1)) + convSvc.sendConversationOptions(actor, npc, options, handleSecondScreen) + + return + return + elif actor.getFaction() == 'rebel' and actor.getFactionStatus() == FactionStatus.SpecialForces: + if selection == 0: + convSvc.sendConversationMessage(actor, npc, OutOfBand.ProsePackage('@conversation/faction_recruiter_rebel:s_50')) + + options = Vector() + options.add(ConversationOption(OutOfBand.ProsePackage('@conversation/faction_recruiter_rebel:s_90'), 0)) + options.add(ConversationOption(OutOfBand.ProsePackage('@conversation/faction_recruiter_rebel:s_95'), 1)) + options.add(ConversationOption(OutOfBand.ProsePackage('@conversation/faction_recruiter_rebel:s_78'), 2)) + options.add(ConversationOption(OutOfBand.ProsePackage('@conversation/faction_recruiter_rebel:s_360'), 3)) + convSvc.sendConversationOptions(actor, npc, options, handleSecondScreen) + + return + if selection == 1: + percent = core.guildService.getGuildObject().getCurrentServerGCWTotalPercentMap().get(actor.getPlanet().getName()).getPercent().intValue() + convSvc.sendConversationMessage(actor, npc, OutOfBand.ProsePackage("@conversation/faction_recruiter_rebel:s_332", percent, "TO", str(100 - percent))) + return + if selection == 2: + return + return + +def handleSecondScreen(core, actor, npc, selection): + convSvc = core.conversationService + + + if actor.getFaction() != 'rebel' and actor.getFaction() != 'imperial': + if selection == 0: + core.factionService.join(actor, 'rebel') + core.factionService.changeFactionStatus(actor, FactionStatus.OnLeave) + + convSvc.sendConversationMessage(actor, npc, OutOfBand.ProsePackage('@conversation/faction_recruiter_rebel:s_99')) + + options = Vector() + options.add(ConversationOption(OutOfBand.ProsePackage('@conversation/faction_recruiter_rebel:s_358'), 0)) + core.conversationService.sendStopConversation(actor, npc, 'conversation/faction_recruiter_rebel', 's_356') + + return + if selection == 1: + core.conversationService.sendStopConversation(actor, npc, 'conversation/faction_recruiter_rebel', 's_362') + return + return + elif actor.getFaction() == 'rebel' and actor.getFactionStatus() == FactionStatus.OnLeave: + if selection == 0: + core.factionService.changeFactionStatus(actor, FactionStatus.Combatant) + core.conversationService.sendStopConversation(actor, npc, 'conversation/faction_recruiter_rebel', 's_224') + return + if selection == 1: + convSvc.sendConversationMessage(actor, npc, OutOfBand.ProsePackage('@conversation/faction_recruiter_rebel:s_64')) + + options = Vector() + options.add(ConversationOption(OutOfBand.ProsePackage('@conversation/faction_recruiter_rebel:s_66'), 0)) + options.add(ConversationOption(OutOfBand.ProsePackage('@conversation/faction_recruiter_rebel:s_226'), 1)) + convSvc.sendConversationOptions(actor, npc, options, handleFourthScreen) + + return + if selection == 2: + convSvc.sendConversationMessage(actor, npc, OutOfBand.ProsePackage('@conversation/faction_recruiter_rebel:s_76')) + + options = Vector() + options.add(ConversationOption(outOfBand.ProsePackage('@conversation/faction_recruiter_rebel:s_78'), 0)) + options.add(ConversationOption(OutOfBand.ProsePackage('@conversation/faction_recruiter_rebel:s_360'), 1)) + convSvc.sendConversationOptions(actor, npc, options, handleThirdScreen) + + return + if selection == 3: + core.conversationService.sendStopConversation(actor, npc, 'conversation/faction_recruiter_rebel', 's_97') + return + return + elif actor.getFaction() == 'rebel' and actor.getFactionStatus() == FactionStatus.Combatant: + if selection == 0: + core.factionService.changeFactionStatus(actor, FactionStatus.SpecialForces) + convSvc.sendConversationMessage(actor, npc, OutOfBand.ProsePackage('@conversation/faction_recruiter_rebel:s_88')) + + options = Vector() + options.add(ConversationOption(outOfBand.ProsePackage('@conversation/faction_recruiter_rebel:s_90'), 0)) + options.add(ConversationOption(OutOfBand.ProsePackage('@conversation/faction_recruiter_rebel:s_94'), 1)) + convSvc.sendConversationOptions(actor, npc, options, handleFithScreen) + + return + if selection == 1: + convSvc.sendConversationMessage(actor, npc, OutOfBand.ProsePackage('@conversation/faction_recruiter_rebel:s_64')) + + options = Vector() + options.add(ConversationOption(outOfBand.ProsePackage('@conversation/faction_recruiter_rebel:s_66'), 0)) + options.add(ConversationOption(OutOfBand.ProsePackage('@conversation/faction_recruiter_rebel:s_226'), 1)) + convSvc.sendConversationOptions(actor, npc, options, handleFourthScreen) + + return + if selection == 2: + convSvc.sendConversationMessage(actor, npc, OutOfBand.ProsePackage('@conversation/faction_recruiter_rebel:s_76')) + + options = Vector() + options.add(ConversationOption(OutOfBand.ProsePackage('@conversation/faction_recruiter_rebel:s_78'), 0)) + options.add(ConversationOption(OutOfBand.ProsePackage('@conversation/faction_recruiter_rebel:s_360'), 1)) + convSvc.sendConversationOptions(actor, npc, options, handleThirdScreen) + + return + if selection == 3: + return + return + elif actor.getFaction() == 'rebel' and actor.getFactionStatus() == FactionStatus.SpecialForces: + if selection == 0: + convSvc.sendConversationMessage(actor, npc, OutOfBand.ProsePackage('conversation/faction_recruiter_rebel:s_88')) + + options = Vector() + options.add(ConversationOption(OutOfBand.ProsePackage('@conversation/faction_recruiter_rebel:s_90'), 0)) + options.add(ConversationOption(OutOfBand.ProsePackage('@conversation/faction_recruiter_rebel:s_94'), 1)) + convSvc.sendConversationOptions(actor, npc, options, handleFithScreen) + + return + if selection == 1: + convSvc.sendConversationMessage(actor, npc, OutOfBand.ProsePackage('@conversation/faction_recruiter_rebel:s_54')) + + options = Vector() + options.add(ConversationOption(OutOfBand.ProsePackage('@conversation/faction_recruiter_rebel:s_56'), 0)) + options.add(ConversationOption(OutOfBand.ProsePackage('@conversation/faction_recruiter_rebel:s_360'), 1)) + convSvc.sendConversationOptions(actor, npc, options, handleSixthScreen) + + return + if selection == 2: + convSvc.sendConversationMessage(actor, npc, OutOfBand.ProsePackage('@conversation/faction_recruiter_rebel:s_76')) + + options = Vector() + options.add(ConversationOption(OutOfBand.ProsePackage('@conversation/faction_recruiter_rebel:s_74'), 0)) + options.add(ConversationOption(OutOfBand.ProsePackage('@conversation/faction_recruiter_rebel:s_360'), 1)) + convSvc.sendConversationOptions(actor, npc, options, handleThirdScreen) + + return + if selection == 3: + return + return + +def handleThirdScreen(core, actor, npc, selection): + if selection == 0: + core.conversationService.sendStopConversation(actor, npc, 'conversation/faction_recruiter_rebel', 's_58') + core.factionService.resign(actor) + return + if selection == 1: + core.conversationService.sendStopConversation(actor, npc, 'conversation/faction_recruiter_rebel', 's_80') + return + return + +def handleFourthScreen(core, actor, npc, selection): + if selection == 0: + core.factionService.changeFactionStatus(actor, FactionStatus.SpecialForces) + core.conversationService.sendStopConversation(actor, npc, 'conversation/faction_recruiter_rebel', 's_224') + return + if selection == 1: + core.conversationService.sendStopConversation(actor, npc, 'conversation/faction_recruiter_rebel', 's_72') + return + return + +def handleFithScreen(core, actor, npc, selection): + if selection == 0: + core.factionService.changeFactionStatus(actor, FactionStatus.OnLeave) + core.conversationService.sendStopConversation(actor, npc, 'conversation/faction_recruiter_rebel', 's_58') + return + +def handleSixthScreen(core, actor, npc, selection): + if selection == 0: + core.factionService.changeFactionStatus(actor, FactionStatus.Combatant) + core.conversationService.sendStopConversation(actor, npc, 'conversation/faction_recruiter_rebel', 's_92') + return + if selection == 1: + core.conversationService.sendStopConversation(actor, npc, 'conversation/faction_recruiter_rebel', 's_57') + return + return + +def endConversation(core, actor, npc): + core.conversationService.sendStopConversation(actor, npc, 'conversation/faction_recruiter_imperial', 's_304') + return \ No newline at end of file diff --git a/scripts/conversation/reimos.py b/scripts/conversation/reimos.py new file mode 100644 index 00000000..dcc7a6e1 --- /dev/null +++ b/scripts/conversation/reimos.py @@ -0,0 +1,15 @@ +from resources.common import ConversationOption +from resources.common import OutOfBand +from resources.common import ProsePackage +from java.util import Vector +import sys + +def startConversation(core, actor, npc): + convSvc = core.conversationService + + core.conversationService.sendStopConversation(actor, npc, 'conversation/tatooine_eisley_reimos_v2', 's_36') + return + +def endConversation(core, actor, npc): + core.conversationService.sendStopConversation(actor, npc, 'conversation/tatooine_eisley_reimos_v2', 's_36') + return \ No newline at end of file diff --git a/scripts/conversation/respec.py b/scripts/conversation/respec.py new file mode 100644 index 00000000..1c54294c --- /dev/null +++ b/scripts/conversation/respec.py @@ -0,0 +1,60 @@ +from resources.common import ConversationOption +from resources.common import OutOfBand +from resources.common import ProsePackage +from java.util import Vector +import sys + +def startConversation(core, actor, npc): + convSvc = core.conversationService + + convSvc.sendConversationMessage(actor, npc, OutOfBand.ProsePackage('@conversation/respecseller:s_31')) + + options = Vector() + options.add(ConversationOption(OutOfBand.ProsePackage('@conversation/respecseller:s_32'), 0)) + options.add(ConversationOption(OutOfBand.ProsePackage('@conversation/respecseller:s_33'), 1)) + convSvc.sendConversationOptions(actor, npc, options, handleFirstScreen) + + return + +def handleFirstScreen(core, actor, npc, selection): + convSvc = core.conversationService + + # TODO: check for prices + + if selection == 0: # respec + convSvc.sendConversationMessage(actor, npc, OutOfBand.ProsePackage('@conversation/respecseller:s_58')) + + options = Vector() + options.add(ConversationOption(OutOfBand.ProsePackage('@conversation/respecseller:s_60'), 0)) + options.add(ConversationOption(OutOfBand.ProsePackage('@conversation/respecseller:s_64'), 1)) + convSvc.sendConversationOptions(actor, npc, options, handleRespecScreen) + + if selection == 1: # expertise reset + convSvc.sendConversationMessage(actor, npc, OutOfBand.ProsePackage('@conversation/respecseller:s_35')) + + options = Vector() + options.add(ConversationOption(OutOfBand.ProsePackage('@conversation/respecseller:s_71'), 0)) + options.add(ConversationOption(OutOfBand.ProsePackage('@conversation/respecseller:s_72'), 1)) + convSvc.sendConversationOptions(actor, npc, options, handleResetScreen) + + return + +def handleRespecScreen(core, actor, npc, selection): + if selection == 0: + core.skillService.sendRespecWindow(actor) + + core.conversationService.handleEndConversation(actor, npc) + + return + +def handleResetScreen(core, actor, npc, selection): + if selection == 0: + core.skillService.resetExpertise(actor) + + core.conversationService.handleEndConversation(actor, npc) + + return + +def endConversation(core, actor, npc): + core.conversationService.sendStopConversation(actor, npc, 'conversation/respecseller', 's_38') + return diff --git a/scripts/conversation/toggi.py b/scripts/conversation/toggi.py new file mode 100644 index 00000000..0654f9c3 --- /dev/null +++ b/scripts/conversation/toggi.py @@ -0,0 +1,15 @@ +from resources.common import ConversationOption +from resources.common import OutOfBand +from resources.common import ProsePackage +from java.util import Vector +import sys + +def startConversation(core, actor, npc): + convSvc = core.conversationService + + core.conversationService.sendStopConversation(actor, npc, 'conversation/tatooine_eisley_toggi', 's_4') + return + +def endConversation(core, actor, npc): + core.conversationService.sendStopConversation(actor, npc, 'conversation/tatooine_eisley_toggi', 's_4') + return \ No newline at end of file diff --git a/scripts/demo.py b/scripts/demo.py index 2b7889ee..1b5dbf3d 100644 --- a/scripts/demo.py +++ b/scripts/demo.py @@ -2,474 +2,473 @@ import sys def CreateStartingCharacter(core, object): - testObject = core.objectService.createObject('object/weapon/ranged/rifle/shared_rifle_t21.iff', object.getPlanet()) - testObject.setCustomName('This is a Jython Rifle') - testObject.setStringAttribute('crafter', 'Light') - testObject.setDamageType('@obj_attr_n:armor_eff_energy') - testObject.setElementalType('@obj_attr_n:elemental_cold') - testObject.setStringAttribute('cat_wpn_damage.damage', '0-0') - testObject.setMinDamage(425) - testObject.setMaxDamage(1150) - testObject.setElementalDamage(50) - testObject.setIntAttribute('cat_wpn_damage.weapon_dps', testObject.getDamagePerSecond()) - testObject.setIntAttribute('cat_skill_mod_bonus.@stat_n:precision_modified', 35) - object.addSkillMod('kinetic' , 10000) - object.addSkillMod('energy' , 10000) - object.addSkillMod('heat' , 6000) - object.addSkillMod('cold' , 6000) - object.addSkillMod('acid' , 6000) - object.addSkillMod('electricity' , 6000) - object.addSkillMod('combat_strikethrough_value' , 50) - object.addSkillMod('display_only_dodge' , 2000) - object.addSkillMod('display_only_parry' , 1000) - object.addSkillMod('display_only_strikethrough' , 500) - object.addSkillMod('display_only_critical' , 2500) - object.addSkillMod('display_only_evasion' , 1000) - object.addSkillMod('display_only_glancing_blow' , 750) - object.addSkillMod('display_only_block' , 2000) - object.addSkillMod('combat_block_value' , 0) - - inventory = object.getSlottedObject('inventory') - if not inventory: - return - inventory.add(testObject) + #testObject = core.objectService.createObject('object/weapon/ranged/rifle/shared_rifle_t21.iff', object.getPlanet()) + #testObject.setCustomName('This is a Jython Rifle') + #testObject.setStringAttribute('crafter', 'Light') + #testObject.setDamageType('@obj_attr_n:armor_eff_energy') + #testObject.setElementalType('@obj_attr_n:elemental_cold') + #testObject.setStringAttribute('cat_wpn_damage.damage', '0-0') + #testObject.setMinDamage(425) + #testObject.setMaxDamage(1150) + #testObject.setElementalDamage(50) + #testObject.setIntAttribute('cat_wpn_damage.weapon_dps', testObject.getDamagePerSecond()) + #testObject.setIntAttribute('cat_skill_mod_bonus.@stat_n:precision_modified', 35) + #object.addSkillMod('kinetic' , 0) + #object.addSkillMod('energy' , 0) + #object.addSkillMod('heat' , 0) + #object.addSkillMod('cold' , 0) + #object.addSkillMod('acid' , 0) + #object.addSkillMod('electricity' , 0) + #object.addSkillMod('combat_strikethrough_value' , 50) + #object.addSkillMod('display_only_dodge' , 2000) + #object.addSkillMod('display_only_parry' , 1000) + #object.addSkillMod('display_only_strikethrough' , 500) + #object.addSkillMod('display_only_critical' , 2500) + #object.addSkillMod('display_only_evasion' , 1000) + #object.addSkillMod('display_only_glancing_blow' , 750) + #object.addSkillMod('display_only_block' , 2000) + #object.addSkillMod('combat_block_value' , 0) - testClothing = core.objectService.createObject('object/tangible/wearables/cape/shared_cape_rebel_01.iff', object.getPlanet()) - testClothing.setCustomName('Test Cape') - testCloak = core.objectService.createObject('object/tangible/wearables/robe/shared_robe_jedi_dark_s05.iff', object.getPlanet()) - testCloak.setCustomName('Test Cloak') - - inventory.add(testClothing) - inventory.add(testCloak) - profession = object.getSlottedObject('ghost').getProfession() - if profession == 'commando_1a': - object.addSkillMod('expertise_devastation_bonus' , 20) - testObject2 = core.objectService.createObject('object/weapon/ranged/heavy/shared_heavy_rocket_launcher.iff', object.getPlanet()) - testObject2.setCustomName('Test Heavy Weapon') - testObject2.setStringAttribute('crafter', 'Light') - testObject2.setDamageType('@obj_attr_n:armor_eff_kinetic') - testObject2.setElementalType('@obj_attr_n:elemental_heat') - testObject2.setStringAttribute('cat_wpn_damage.damage', '0-0') - testObject2.setMinDamage(550) - testObject2.setMaxDamage(1315) - testObject2.setElementalDamage(216) - testObject2.setIntAttribute('cat_wpn_damage.weapon_dps', testObject2.getDamagePerSecond()) - inventory.add(testObject2) - - addProfessionAbilities(core, object, profession) +# #inventory = object.getSlottedObject('inventory') +# #if not inventory: +# # return +# #inventory.add(testObject) - heroism1 = core.objectService.createObject('object/tangible/wearables/necklace/shared_necklace_s10.iff', object.getPlanet()) - heroism1.setStfFilename('static_item_n') - heroism1.setStfName('item_necklace_set_hero_01_01') - heroism1.setDetailFilename('static_item_d') - heroism1.setDetailName('item_necklace_set_hero_01_01') - heroism1.setStringAttribute('@set_bonus:piece_bonus_count_2', '@set_bonus:set_bonus_hero_1') - heroism1.setStringAttribute('@set_bonus:piece_bonus_count_3', '@set_bonus:set_bonus_hero_2') - heroism1.setStringAttribute('@set_bonus:piece_bonus_count_5', '@set_bonus:set_bonus_hero_3') - heroism1.setIntAttribute('cat_stat_mod_bonus.food_luck_modified' , 30) - heroism1.setIntAttribute('cat_stat_mod_bonus.food_precision_modified' , 30) - heroism1.setIntAttribute('cat_stat_mod_bonus.food_strength_modified' , 30) +# #testClothing = core.objectService.createObject('object/tangible/wearables/cape/shared_cape_rebel_01.iff', object.getPlanet()) +# #testClothing.setCustomName('Test Cape') +# #testCloak = core.objectService.createObject('object/tangible/wearables/robe/shared_robe_jedi_dark_s05.iff', object.getPlanet()) +# #testCloak.setCustomName('Test Cloak') + +# #inventory.add(testClothing) +# #inventory.add(testCloak) +# #profession = object.getSlottedObject('ghost').getProfession() +# #if profession == 'commando_1a': +# # object.addSkillMod('expertise_devastation_bonus' , 20) +# # testObject2 = core.objectService.createObject('object/weapon/ranged/heavy/shared_heavy_rocket_launcher.iff', object.getPlanet()) +# # testObject2.setCustomName('Test Heavy Weapon') +# # testObject2.setStringAttribute('crafter', 'Light') +# # testObject2.setDamageType('@obj_attr_n:armor_eff_kinetic') +# # testObject2.setElementalType('@obj_attr_n:elemental_heat') +# # testObject2.setStringAttribute('cat_wpn_damage.damage', '0-0') +# # testObject2.setMinDamage(550) +# # testObject2.setMaxDamage(1315) +# # testObject2.setElementalDamage(216) +# # testObject2.setIntAttribute('cat_wpn_damage.weapon_dps', testObject2.getDamagePerSecond()) +# # inventory.add(testObject2) +# +# addProfessionAbilities(core, object, profession) + +# heroism1 = core.objectService.createObject('object/tangible/wearables/necklace/shared_necklace_s10.iff', object.getPlanet()) + # heroism1.setStfFilename('static_item_n') + # heroism1.setStfName('item_necklace_set_hero_01_01') + # heroism1.setDetailFilename('static_item_d') + # heroism1.setDetailName('item_necklace_set_hero_01_01') +# heroism1.setStringAttribute('@set_bonus:piece_bonus_count_2', '@set_bonus:set_bonus_hero_1') +# heroism1.setStringAttribute('@set_bonus:piece_bonus_count_3', '@set_bonus:set_bonus_hero_2') +# heroism1.setStringAttribute('@set_bonus:piece_bonus_count_5', '@set_bonus:set_bonus_hero_3') +# heroism1.setIntAttribute('cat_stat_mod_bonus.food_luck_modified' , 30) +# heroism1.setIntAttribute('cat_stat_mod_bonus.food_precision_modified' , 30) +# heroism1.setIntAttribute('cat_stat_mod_bonus.food_strength_modified' , 30) - inventory = object.getSlottedObject('inventory') - if not inventory: - return - inventory.add(heroism1) + # inventory = object.getSlottedObject('inventory') + # if not inventory: + # return + # inventory.add(heroism1) - heroism2 = core.objectService.createObject('object/tangible/wearables/bracelet/shared_bracelet_s03_r.iff', object.getPlanet()) - heroism2.setStfFilename('static_item_n') - heroism2.setStfName('item_bracelet_r_set_hero_01_01') - heroism2.setDetailFilename('static_item_d') - heroism2.setDetailName('item_bracelet_r_set_hero_01_01') - heroism2.setStringAttribute('@set_bonus:piece_bonus_count_2', '@set_bonus:set_bonus_hero_1') - heroism2.setStringAttribute('@set_bonus:piece_bonus_count_3', '@set_bonus:set_bonus_hero_2') - heroism2.setStringAttribute('@set_bonus:piece_bonus_count_5', '@set_bonus:set_bonus_hero_3') - heroism2.setIntAttribute('cat_stat_mod_bonus.food_luck_modified' , 30) - heroism2.setIntAttribute('cat_stat_mod_bonus.food_precision_modified' , 30) - heroism2.setIntAttribute('cat_stat_mod_bonus.food_strength_modified' , 30) + # heroism2 = core.objectService.createObject('object/tangible/wearables/bracelet/shared_bracelet_s03_r.iff', object.getPlanet()) + # heroism2.setStfFilename('static_item_n') + # heroism2.setStfName('item_bracelet_r_set_hero_01_01') + # heroism2.setDetailFilename('static_item_d') + # heroism2.setDetailName('item_bracelet_r_set_hero_01_01') + # heroism2.setStringAttribute('@set_bonus:piece_bonus_count_2', '@set_bonus:set_bonus_hero_1') + # heroism2.setStringAttribute('@set_bonus:piece_bonus_count_3', '@set_bonus:set_bonus_hero_2') + # heroism2.setStringAttribute('@set_bonus:piece_bonus_count_5', '@set_bonus:set_bonus_hero_3') + # heroism2.setIntAttribute('cat_stat_mod_bonus.food_luck_modified' , 30) + # heroism2.setIntAttribute('cat_stat_mod_bonus.food_precision_modified' , 30) + # heroism2.setIntAttribute('cat_stat_mod_bonus.food_strength_modified' , 30) - inventory = object.getSlottedObject('inventory') - if not inventory: - return - inventory.add(heroism2) +# inventory = object.getSlottedObject('inventory') +# if not inventory: +# return +# inventory.add(heroism2) - heroism3 = core.objectService.createObject('object/tangible/wearables/bracelet/shared_bracelet_s03_l.iff', object.getPlanet()) - heroism3.setStfFilename('static_item_n') - heroism3.setStfName('item_bracelet_l_set_hero_01_01') - heroism3.setDetailFilename('static_item_d') - heroism3.setDetailName('item_bracelet_l_set_hero_01_01') - heroism3.setStringAttribute('@set_bonus:piece_bonus_count_2', '@set_bonus:set_bonus_hero_1') - heroism3.setStringAttribute('@set_bonus:piece_bonus_count_3', '@set_bonus:set_bonus_hero_2') - heroism3.setStringAttribute('@set_bonus:piece_bonus_count_5', '@set_bonus:set_bonus_hero_3') - heroism3.setIntAttribute('cat_stat_mod_bonus.food_luck_modified' , 30) - heroism3.setIntAttribute('cat_stat_mod_bonus.food_precision_modified' , 30) - heroism3.setIntAttribute('cat_stat_mod_bonus.food_strength_modified' , 30) +# heroism3 = core.objectService.createObject('object/tangible/wearables/bracelet/shared_bracelet_s03_l.iff', object.getPlanet()) +# heroism3.setStfFilename('static_item_n') +# heroism3.setStfName('item_bracelet_l_set_hero_01_01') +# heroism3.setDetailFilename('static_item_d') +# heroism3.setDetailName('item_bracelet_l_set_hero_01_01') +# heroism3.setStringAttribute('@set_bonus:piece_bonus_count_2', '@set_bonus:set_bonus_hero_1') +# heroism3.setStringAttribute('@set_bonus:piece_bonus_count_3', '@set_bonus:set_bonus_hero_2') +# heroism3.setStringAttribute('@set_bonus:piece_bonus_count_5', '@set_bonus:set_bonus_hero_3') + # heroism3.setIntAttribute('cat_stat_mod_bonus.food_luck_modified' , 30) + # heroism3.setIntAttribute('cat_stat_mod_bonus.food_precision_modified' , 30) + # heroism3.setIntAttribute('cat_stat_mod_bonus.food_strength_modified' , 30) - inventory = object.getSlottedObject('inventory') - if not inventory: - return - inventory.add(heroism3) + # inventory = object.getSlottedObject('inventory') + # if not inventory: + # return + # inventory.add(heroism3) - heroism4 = core.objectService.createObject('object/tangible/wearables/ring/shared_ring_s04.iff', object.getPlanet()) - heroism4.setStfFilename('static_item_n') - heroism4.setStfName('item_ring_set_hero_01_01') - heroism4.setDetailFilename('static_item_d') - heroism4.setDetailName('item_ring_set_hero_01_01') - heroism4.setStringAttribute('@set_bonus:piece_bonus_count_2', '@set_bonus:set_bonus_hero_1') - heroism4.setStringAttribute('@set_bonus:piece_bonus_count_3', '@set_bonus:set_bonus_hero_2') - heroism4.setStringAttribute('@set_bonus:piece_bonus_count_5', '@set_bonus:set_bonus_hero_3') - heroism4.setIntAttribute('cat_stat_mod_bonus.food_luck_modified' , 30) - heroism4.setIntAttribute('cat_stat_mod_bonus.food_precision_modified' , 30) - heroism4.setIntAttribute('cat_stat_mod_bonus.food_strength_modified' , 30) + # heroism4 = core.objectService.createObject('object/tangible/wearables/ring/shared_ring_s04.iff', object.getPlanet()) + # heroism4.setStfFilename('static_item_n') + # heroism4.setStfName('item_ring_set_hero_01_01') + # heroism4.setDetailFilename('static_item_d') + # heroism4.setDetailName('item_ring_set_hero_01_01') + # heroism4.setStringAttribute('@set_bonus:piece_bonus_count_2', '@set_bonus:set_bonus_hero_1') + # heroism4.setStringAttribute('@set_bonus:piece_bonus_count_3', '@set_bonus:set_bonus_hero_2') + # heroism4.setStringAttribute('@set_bonus:piece_bonus_count_5', '@set_bonus:set_bonus_hero_3') + # heroism4.setIntAttribute('cat_stat_mod_bonus.food_luck_modified' , 30) + # heroism4.setIntAttribute('cat_stat_mod_bonus.food_precision_modified' , 30) + # heroism4.setIntAttribute('cat_stat_mod_bonus.food_strength_modified' , 30) - inventory = object.getSlottedObject('inventory') - if not inventory: - return - inventory.add(heroism4) +# inventory = object.getSlottedObject('inventory') +# if not inventory: +# return +# inventory.add(heroism4) - heroism5 = core.objectService.createObject('object/tangible/wearables/ring/shared_ring_s02.iff', object.getPlanet()) - heroism5.setStfFilename('static_item_n') - heroism5.setStfName('item_ring_a_set_hero') - heroism5.setDetailFilename('static_item_d') - heroism5.setDetailName('item_ring_a_set_hero') - heroism5.setStringAttribute('@set_bonus:piece_bonus_count_2', '@set_bonus:set_bonus_hero_1') - heroism5.setStringAttribute('@set_bonus:piece_bonus_count_3', '@set_bonus:set_bonus_hero_2') - heroism5.setStringAttribute('@set_bonus:piece_bonus_count_5', '@set_bonus:set_bonus_hero_3') - heroism5.setIntAttribute('cat_stat_mod_bonus.food_luck_modified' , 30) - heroism5.setIntAttribute('cat_stat_mod_bonus.food_precision_modified' , 30) - heroism5.setIntAttribute('cat_stat_mod_bonus.food_strength_modified' , 30) + # heroism5 = core.objectService.createObject('object/tangible/wearables/ring/shared_ring_s02.iff', object.getPlanet()) + # heroism5.setStfFilename('static_item_n') + # heroism5.setStfName('item_ring_a_set_hero') + # heroism5.setDetailFilename('static_item_d') + # heroism5.setDetailName('item_ring_a_set_hero') + # heroism5.setStringAttribute('@set_bonus:piece_bonus_count_2', '@set_bonus:set_bonus_hero_1') + # heroism5.setStringAttribute('@set_bonus:piece_bonus_count_3', '@set_bonus:set_bonus_hero_2') + # heroism5.setStringAttribute('@set_bonus:piece_bonus_count_5', '@set_bonus:set_bonus_hero_3') + # heroism5.setIntAttribute('cat_stat_mod_bonus.food_luck_modified' , 30) + # heroism5.setIntAttribute('cat_stat_mod_bonus.food_precision_modified' , 30) + # heroism5.setIntAttribute('cat_stat_mod_bonus.food_strength_modified' , 30) - inventory = object.getSlottedObject('inventory') - if not inventory: - return - inventory.add(heroism5) + # inventory = object.getSlottedObject('inventory') + # if not inventory: + # return + # inventory.add(heroism5) return def addProfessionAbilities(core, object, profession): - - if profession == 'force_sensitive_1a': - testObject = core.objectService.createObject('object/weapon/melee/2h_sword/crafted_saber/shared_sword_lightsaber_two_handed_gcw_s01_gen5.iff', object.getPlanet()) - testObject.setCustomName('Lightsaber') - testObject.setStringAttribute('crafter', 'Light') - testObject.setDamageType('@obj_attr_n:armor_eff_energy') - testObject.setElementalType('@obj_attr_n:elemental_cold') - testObject.setStringAttribute('cat_wpn_damage.damage', '0-0') - testObject.setMinDamage(600) - testObject.setMaxDamage(1190) - testObject.setElementalDamage(72) - testObject.setIntAttribute('cat_wpn_damage.weapon_dps', testObject.getDamagePerSecond()) - inventory = object.getSlottedObject('inventory') - inventory.add(testObject) + +# if profession == 'force_sensitive_1a': +# testObject = core.objectService.createObject('object/weapon/melee/2h_sword/crafted_saber/shared_sword_lightsaber_two_handed_gcw_s01_gen5.iff', object.getPlanet()) +# testObject.setCustomName('Lightsaber') +# testObject.setStringAttribute('crafter', 'Light') +# testObject.setDamageType('@obj_attr_n:armor_eff_energy') +# testObject.setElementalType('@obj_attr_n:elemental_cold') +# testObject.setStringAttribute('cat_wpn_damage.damage', '0-0') +# testObject.setMinDamage(600) +# testObject.setMaxDamage(1190) +# testObject.setElementalDamage(72) +# testObject.setIntAttribute('cat_wpn_damage.weapon_dps', testObject.getDamagePerSecond()) +# inventory = object.getSlottedObject('inventory') +# inventory.add(testObject) ##Case Sensitive - object.addAbility('fs_sweep_7') - object.addAbility('fs_drain_7') - object.addAbility('forceRun') - object.addAbility('fs_dm_cc_crit_5') - object.addAbility('fs_maelstrom_5') - object.addAbility('fs_ae_dm_cc_6') - object.addAbility('fs_sh_3') - object.addAbility('fs_dm_cc_6') - object.addAbility('fs_dm_7') - object.addAbility('fs_buff_def_1_1') - object.addAbility('fs_buff_ca_1') - object.addAbility('saberBlock') - elif profession == 'medic_1a': - object.addAbility('me_bacta_bomb_5') - object.addAbility('me_bacta_grenade_5') - object.addAbility('me_bacta_ampule_6') - object.addAbility('me_ae_heal_6') - object.addAbility('me_dm_8') - object.addAbility('me_dm_dot_6') - object.addAbility('me_drag_1') - object.addAbility('me_rv_pvp_single') - object.addAbility('me_rv_area') - object.addAbility('me_rv_pvp_area') - object.addAbility('me_reckless_stimulation_6') - object.addAbility('me_sh_1') - object.addAbility('me_stasis_1') - object.addAbility('me_stasis_self_1') - object.addAbility('me_thyroid_rupture_1') - object.addAbility('me_traumatize_5') - object.addAbility('me_induce_insanity_1') - elif profession == 'commando_1a': - object.addAbility('co_del_ae_cc_2_2') - object.addAbility('co_del_ae_dm_3') - object.addAbility('co_del_ae_cc_1_3') - object.addAbility('co_hw_dot') - object.addAbility('co_ae_hw_dot') - elif profession == 'bounty_hunter_1a': - object.addAbility('bh_shields_1') - object.addAbility('bh_dm_8') - object.addAbility('bh_sh_3') - object.addAbility('bh_armor_sprint_1') - object.addAbility('bh_prescience') - object.addAbility('bh_dm_crit_8') - object.addAbility('crippleShot') - object.addAbility('bh_fumble_6') - object.addAbility('bh_intimidate_6') - object.addAbility('bh_flawless_strike') + # object.addAbility('fs_sweep_7') + # object.addAbility('fs_drain_7') + # object.addAbility('forceRun') + # object.addAbility('fs_dm_cc_crit_5') + # object.addAbility('fs_maelstrom_5') + # object.addAbility('fs_ae_dm_cc_6') + # object.addAbility('fs_sh_3') + # object.addAbility('fs_dm_cc_6') + # object.addAbility('fs_dm_7') + # object.addAbility('fs_buff_def_1_1') + # object.addAbility('fs_buff_ca_1') + # object.addAbility('saberBlock') + #elif profession == 'medic_1a': + # object.addAbility('me_bacta_bomb_5') + # object.addAbility('me_bacta_grenade_5') + # object.addAbility('me_bacta_ampule_6') + # object.addAbility('me_ae_heal_6') + # object.addAbility('me_dm_8') + # object.addAbility('me_dm_dot_6') + # object.addAbility('me_drag_1') + # object.addAbility('me_rv_pvp_single') + # object.addAbility('me_rv_area') + # object.addAbility('me_rv_pvp_area') + # object.addAbility('me_reckless_stimulation_6') + # object.addAbility('me_sh_1') + # object.addAbility('me_stasis_1') + # object.addAbility('me_stasis_self_1') + # object.addAbility('me_thyroid_rupture_1') + # object.addAbility('me_traumatize_5') + # object.addAbility('me_induce_insanity_1') + #elif profession == 'commando_1a': + # object.addAbility('co_del_ae_cc_2_2') + # object.addAbility('co_del_ae_dm_3') + # object.addAbility('co_del_ae_cc_1_3') + # object.addAbility('co_hw_dot') + # object.addAbility('co_ae_hw_dot') + #elif profession == 'bounty_hunter_1a': + #object.addAbility('bh_shields_1') + #object.addAbility('bh_dm_8') + #object.addAbility('bh_sh_3') + #object.addAbility('bh_armor_sprint_1') + #object.addAbility('bh_prescience') + #object.addAbility('bh_dm_crit_8') + #object.addAbility('crippleShot') + #object.addAbility('bh_fumble_6') + #object.addAbility('bh_intimidate_6') + #object.addAbility('bh_flawless_strike') - direfate1 = core.objectService.createObject('object/tangible/wearables/necklace/shared_necklace_s03.iff', object.getPlanet()) - direfate1.setStfFilename('static_item_n') - direfate1.setStfName('item_necklace_set_bh_utility_b_01_01') - direfate1.setDetailFilename('static_item_d') - direfate1.setDetailName('item_necklace_set_bh_utility_b_01_01') - direfate1.setStringAttribute('@set_bonus:piece_bonus_count_2', '@set_bonus:set_bonus_bh_utility_b_1') - direfate1.setStringAttribute('@set_bonus:piece_bonus_count_3', '@set_bonus:set_bonus_bh_utility_b_2') - direfate1.setStringAttribute('@set_bonus:piece_bonus_count_5', '@set_bonus:set_bonus_bh_utility_b_3') - direfate1.setIntAttribute('cat_skill_mod_bonus.@stat_n:bh_dire_root' , 1) - direfate1.setIntAttribute('cat_skill_mod_bonus.@stat_n:bh_dire_snare' , 1) - direfate1.setIntAttribute('cat_skill_mod_bonus.@stat_n:fast_attack_line_dm_cc' , 2) + # direfate1 = core.objectService.createObject('object/tangible/wearables/necklace/shared_necklace_s03.iff', object.getPlanet()) + # direfate1.setStfFilename('static_item_n') + # direfate1.setStfName('item_necklace_set_bh_utility_b_01_01') + # direfate1.setDetailFilename('static_item_d') + # direfate1.setDetailName('item_necklace_set_bh_utility_b_01_01') + # direfate1.setStringAttribute('@set_bonus:piece_bonus_count_2', '@set_bonus:set_bonus_bh_utility_b_1') + # direfate1.setStringAttribute('@set_bonus:piece_bonus_count_3', '@set_bonus:set_bonus_bh_utility_b_2') + # direfate1.setStringAttribute('@set_bonus:piece_bonus_count_5', '@set_bonus:set_bonus_bh_utility_b_3') + # direfate1.setIntAttribute('cat_skill_mod_bonus.@stat_n:bh_dire_root' , 1) + # direfate1.setIntAttribute('cat_skill_mod_bonus.@stat_n:bh_dire_snare' , 1) + # direfate1.setIntAttribute('cat_skill_mod_bonus.@stat_n:fast_attack_line_dm_cc' , 2) - inventory = object.getSlottedObject('inventory') - if not inventory: - return - inventory.add(direfate1) + # inventory = object.getSlottedObject('inventory') + # if not inventory: + # return + # inventory.add(direfate1) - direfate2 = core.objectService.createObject('object/tangible/wearables/bracelet/shared_bracelet_s04_r.iff', object.getPlanet()) - direfate2.setStfFilename('static_item_n') - direfate2.setStfName('item_bracelet_r_set_bh_utility_b_01_01') - direfate2.setDetailFilename('static_item_d') - direfate2.setDetailName('item_bracelet_r_set_bh_utility_b_01_01') - direfate2.setStringAttribute('@set_bonus:piece_bonus_count_2', '@set_bonus:set_bonus_bh_utility_b_1') - direfate2.setStringAttribute('@set_bonus:piece_bonus_count_3', '@set_bonus:set_bonus_bh_utility_b_2') - direfate2.setStringAttribute('@set_bonus:piece_bonus_count_5', '@set_bonus:set_bonus_bh_utility_b_3') - direfate2.setIntAttribute('cat_skill_mod_bonus.@stat_n:bh_dire_root' , 1) - direfate2.setIntAttribute('cat_skill_mod_bonus.@stat_n:bh_dire_snare' , 1) - direfate2.setIntAttribute('cat_skill_mod_bonus.@stat_n:fast_attack_line_dm_cc' , 2) + # direfate2 = core.objectService.createObject('object/tangible/wearables/bracelet/shared_bracelet_s04_r.iff', object.getPlanet()) + # direfate2.setStfFilename('static_item_n') + # direfate2.setStfName('item_bracelet_r_set_bh_utility_b_01_01') + # direfate2.setDetailFilename('static_item_d') + # direfate2.setDetailName('item_bracelet_r_set_bh_utility_b_01_01') + # direfate2.setStringAttribute('@set_bonus:piece_bonus_count_3', '@set_bonus:set_bonus_bh_utility_b_2') + # direfate2.setStringAttribute('@set_bonus:piece_bonus_count_5', '@set_bonus:set_bonus_bh_utility_b_3') + # direfate2.setIntAttribute('cat_skill_mod_bonus.@stat_n:bh_dire_root' , 1) + # direfate2.setIntAttribute('cat_skill_mod_bonus.@stat_n:bh_dire_snare' , 1) + # direfate2.setIntAttribute('cat_skill_mod_bonus.@stat_n:fast_attack_line_dm_cc' , 2) - inventory = object.getSlottedObject('inventory') - if not inventory: - return - inventory.add(direfate2) + # inventory = object.getSlottedObject('inventory') + # if not inventory: + # return + # inventory.add(direfate2) - direfate3 = core.objectService.createObject('object/tangible/wearables/bracelet/shared_bracelet_s04_l.iff', object.getPlanet()) - direfate3.setStfFilename('static_item_n') - direfate3.setStfName('item_bracelet_l_set_bh_utility_b_01_01') - direfate3.setDetailFilename('static_item_d') - direfate3.setDetailName('item_bracelet_l_set_bh_utility_b_01_01') - direfate3.setStringAttribute('@set_bonus:piece_bonus_count_2', '@set_bonus:set_bonus_bh_utility_b_1') - direfate3.setStringAttribute('@set_bonus:piece_bonus_count_3', '@set_bonus:set_bonus_bh_utility_b_2') - direfate3.setStringAttribute('@set_bonus:piece_bonus_count_5', '@set_bonus:set_bonus_bh_utility_b_3') - direfate3.setIntAttribute('cat_skill_mod_bonus.@stat_n:bh_dire_root' , 1) - direfate3.setIntAttribute('cat_skill_mod_bonus.@stat_n:bh_dire_snare' , 1) - direfate3.setIntAttribute('cat_skill_mod_bonus.@stat_n:fast_attack_line_dm_cc' , 2) + # direfate3 = core.objectService.createObject('object/tangible/wearables/bracelet/shared_bracelet_s04_l.iff', object.getPlanet()) + # direfate3.setStfFilename('static_item_n') + # direfate3.setStfName('item_bracelet_l_set_bh_utility_b_01_01') + # direfate3.setDetailFilename('static_item_d') + # direfate3.setDetailName('item_bracelet_l_set_bh_utility_b_01_01') + # direfate3.setStringAttribute('@set_bonus:piece_bonus_count_2', '@set_bonus:set_bonus_bh_utility_b_1') + # direfate3.setStringAttribute('@set_bonus:piece_bonus_count_3', '@set_bonus:set_bonus_bh_utility_b_2') + # direfate3.setStringAttribute('@set_bonus:piece_bonus_count_5', '@set_bonus:set_bonus_bh_utility_b_3') + # direfate3.setIntAttribute('cat_skill_mod_bonus.@stat_n:bh_dire_root' , 1) + # direfate3.setIntAttribute('cat_skill_mod_bonus.@stat_n:bh_dire_snare' , 1) + # direfate3.setIntAttribute('cat_skill_mod_bonus.@stat_n:fast_attack_line_dm_cc' , 2) - inventory = object.getSlottedObject('inventory') - if not inventory: - return - inventory.add(direfate3) + # inventory = object.getSlottedObject('inventory') + # if not inventory: + # return + # inventory.add(direfate3) - direfate4 = core.objectService.createObject('object/tangible/wearables/ring/shared_ring_s01.iff', object.getPlanet()) - direfate4.setStfFilename('static_item_n') - direfate4.setStfName('item_ring_set_bh_utility_b_01_01') - direfate4.setDetailFilename('static_item_d') - direfate4.setDetailName('item_ring_set_bh_utility_b_01_01') - direfate4.setStringAttribute('@set_bonus:piece_bonus_count_2', '@set_bonus:set_bonus_bh_utility_b_1') - direfate4.setStringAttribute('@set_bonus:piece_bonus_count_3', '@set_bonus:set_bonus_bh_utility_b_2') - direfate4.setStringAttribute('@set_bonus:piece_bonus_count_5', '@set_bonus:set_bonus_bh_utility_b_3') - direfate4.setIntAttribute('cat_skill_mod_bonus.@stat_n:bh_dire_root' , 1) - direfate4.setIntAttribute('cat_skill_mod_bonus.@stat_n:bh_dire_snare' , 1) - direfate4.setIntAttribute('cat_skill_mod_bonus.@stat_n:fast_attack_line_dm_cc' , 2) + # direfate4 = core.objectService.createObject('object/tangible/wearables/ring/shared_ring_s01.iff', object.getPlanet()) + # direfate4.setStfFilename('static_item_n') + # direfate4.setStfName('item_ring_set_bh_utility_b_01_01') + # direfate4.setDetailFilename('static_item_d') + # direfate4.setDetailName('item_ring_set_bh_utility_b_01_01') + # direfate4.setStringAttribute('@set_bonus:piece_bonus_count_2', '@set_bonus:set_bonus_bh_utility_b_1') + # direfate4.setStringAttribute('@set_bonus:piece_bonus_count_3', '@set_bonus:set_bonus_bh_utility_b_2') + # direfate4.setStringAttribute('@set_bonus:piece_bonus_count_5', '@set_bonus:set_bonus_bh_utility_b_3') + # direfate4.setIntAttribute('cat_skill_mod_bonus.@stat_n:bh_dire_root' , 1) + # direfate4.setIntAttribute('cat_skill_mod_bonus.@stat_n:bh_dire_snare' , 1) + # direfate4.setIntAttribute('cat_skill_mod_bonus.@stat_n:fast_attack_line_dm_cc' , 2) - inventory = object.getSlottedObject('inventory') - if not inventory: - return - inventory.add(direfate4) + # inventory = object.getSlottedObject('inventory') + # if not inventory: + # return + # inventory.add(direfate4) - direfate5 = core.objectService.createObject('object/tangible/wearables/ring/shared_ring_s03.iff', object.getPlanet()) - direfate5.setStfFilename('static_item_n') - direfate5.setStfName('item_ring_a_set_bh_utility_b') - direfate5.setDetailFilename('static_item_d') - direfate5.setDetailName('item_ring_a_set_bh_utility_b') - direfate5.setStringAttribute('@set_bonus:piece_bonus_count_2', '@set_bonus:set_bonus_bh_utility_b_1') - direfate5.setStringAttribute('@set_bonus:piece_bonus_count_3', '@set_bonus:set_bonus_bh_utility_b_2') - direfate5.setStringAttribute('@set_bonus:piece_bonus_count_5', '@set_bonus:set_bonus_bh_utility_b_3') - direfate5.setIntAttribute('cat_skill_mod_bonus.@stat_n:bh_dire_root' , 1) - direfate5.setIntAttribute('cat_skill_mod_bonus.@stat_n:bh_dire_snare' , 1) - direfate5.setIntAttribute('cat_skill_mod_bonus.@stat_n:fast_attack_line_dm_cc' , 2) + # direfate5 = core.objectService.createObject('object/tangible/wearables/ring/shared_ring_s03.iff', object.getPlanet()) + # direfate5.setStfFilename('static_item_n') + # direfate5.setStfName('item_ring_a_set_bh_utility_b') + # direfate5.setDetailFilename('static_item_d') + # direfate5.setDetailName('item_ring_a_set_bh_utility_b') + # direfate5.setStringAttribute('@set_bonus:piece_bonus_count_2', '@set_bonus:set_bonus_bh_utility_b_1') + # direfate5.setStringAttribute('@set_bonus:piece_bonus_count_3', '@set_bonus:set_bonus_bh_utility_b_2') + # direfate5.setStringAttribute('@set_bonus:piece_bonus_count_5', '@set_bonus:set_bonus_bh_utility_b_3') + # direfate5.setIntAttribute('cat_skill_mod_bonus.@stat_n:bh_dire_root' , 1) + # direfate5.setIntAttribute('cat_skill_mod_bonus.@stat_n:bh_dire_snare' , 1) + # direfate5.setIntAttribute('cat_skill_mod_bonus.@stat_n:fast_attack_line_dm_cc' , 2) - inventory = object.getSlottedObject('inventory') - if not inventory: - return - inventory.add(direfate5) + # inventory = object.getSlottedObject('inventory') + # if not inventory: + # return + # inventory.add(direfate5) - flawless1 = core.objectService.createObject('object/tangible/wearables/necklace/shared_necklace_s02.iff', object.getPlanet()) - flawless1.setStfFilename('static_item_n') - flawless1.setStfName('item_necklace_set_bh_utility_a_01_01') - flawless1.setDetailFilename('static_item_d') - flawless1.setDetailName('item_necklace_set_bh_utility_a_01_01') - flawless1.setStringAttribute('@set_bonus:piece_bonus_count_2', '@set_bonus:set_bonus_bh_utility_a_1') - flawless1.setStringAttribute('@set_bonus:piece_bonus_count_3', '@set_bonus:set_bonus_bh_utility_a_2') - flawless1.setStringAttribute('@set_bonus:piece_bonus_count_5', '@set_bonus:set_bonus_bh_utility_a_3') - flawless1.setIntAttribute('cat_stat_mod_bonus.food_luck_modified' , 30) - flawless1.setIntAttribute('cat_stat_mod_bonus.food_precision_modified' , 50) + # flawless1 = core.objectService.createObject('object/tangible/wearables/necklace/shared_necklace_s02.iff', object.getPlanet()) + # flawless1.setStfFilename('static_item_n') + # flawless1.setStfName('item_necklace_set_bh_utility_a_01_01') + # flawless1.setDetailFilename('static_item_d') + # flawless1.setDetailName('item_necklace_set_bh_utility_a_01_01') + # flawless1.setStringAttribute('@set_bonus:piece_bonus_count_2', '@set_bonus:set_bonus_bh_utility_a_1') + # flawless1.setStringAttribute('@set_bonus:piece_bonus_count_3', '@set_bonus:set_bonus_bh_utility_a_2') + # flawless1.setStringAttribute('@set_bonus:piece_bonus_count_5', '@set_bonus:set_bonus_bh_utility_a_3') + # flawless1.setIntAttribute('cat_stat_mod_bonus.food_luck_modified' , 30) + # flawless1.setIntAttribute('cat_stat_mod_bonus.food_precision_modified' , 50) - inventory = object.getSlottedObject('inventory') - if not inventory: - return - inventory.add(flawless1) + # inventory = object.getSlottedObject('inventory') + # if not inventory: + # return + # inventory.add(flawless1) - flawless2 = core.objectService.createObject('object/tangible/wearables/bracelet/shared_bracelet_s03_r.iff', object.getPlanet()) - flawless2.setStfFilename('static_item_n') - flawless2.setStfName('item_bracelet_r_set_bh_utility_a_01_01') - flawless2.setDetailFilename('static_item_d') - flawless2.setDetailName('item_bracelet_r_set_bh_utility_a_01_01') - flawless2.setStringAttribute('@set_bonus:piece_bonus_count_2', '@set_bonus:set_bonus_bh_utility_b_1') - flawless2.setStringAttribute('@set_bonus:piece_bonus_count_3', '@set_bonus:set_bonus_bh_utility_b_2') - flawless2.setStringAttribute('@set_bonus:piece_bonus_count_5', '@set_bonus:set_bonus_bh_utility_b_3') - flawless2.setIntAttribute('cat_stat_mod_bonus.food_luck_modified' , 30) - flawless2.setIntAttribute('cat_stat_mod_bonus.food_precision_modified' , 50) + # flawless2 = core.objectService.createObject('object/tangible/wearables/bracelet/shared_bracelet_s03_r.iff', object.getPlanet()) + # flawless2.setStfFilename('static_item_n') + # flawless2.setStfName('item_bracelet_r_set_bh_utility_a_01_01') + # flawless2.setDetailFilename('static_item_d') + # flawless2.setDetailName('item_bracelet_r_set_bh_utility_a_01_01') + # flawless2.setStringAttribute('@set_bonus:piece_bonus_count_2', '@set_bonus:set_bonus_bh_utility_b_1') + # flawless2.setStringAttribute('@set_bonus:piece_bonus_count_3', '@set_bonus:set_bonus_bh_utility_b_2') + # flawless2.setStringAttribute('@set_bonus:piece_bonus_count_5', '@set_bonus:set_bonus_bh_utility_b_3') + # flawless2.setIntAttribute('cat_stat_mod_bonus.food_luck_modified' , 30) + # flawless2.setIntAttribute('cat_stat_mod_bonus.food_precision_modified' , 50) - inventory = object.getSlottedObject('inventory') - if not inventory: - return - inventory.add(flawless2) + # inventory = object.getSlottedObject('inventory') + # if not inventory: + # return + # inventory.add(flawless2) - flawless3 = core.objectService.createObject('object/tangible/wearables/bracelet/shared_bracelet_s03_l.iff', object.getPlanet()) - flawless3.setStfFilename('static_item_n') - flawless3.setStfName('item_bracelet_l_set_bh_utility_a_01_01') - flawless3.setDetailFilename('static_item_d') - flawless3.setDetailName('item_bracelet_l_set_bh_utility_a_01_01') - flawless3.setStringAttribute('@set_bonus:piece_bonus_count_2', '@set_bonus:set_bonus_bh_utility_b_1') - flawless3.setStringAttribute('@set_bonus:piece_bonus_count_3', '@set_bonus:set_bonus_bh_utility_b_2') - flawless3.setStringAttribute('@set_bonus:piece_bonus_count_5', '@set_bonus:set_bonus_bh_utility_b_3') - flawless3.setIntAttribute('cat_stat_mod_bonus.food_luck_modified' , 30) - flawless3.setIntAttribute('cat_stat_mod_bonus.food_precision_modified' , 50) + # flawless3 = core.objectService.createObject('object/tangible/wearables/bracelet/shared_bracelet_s03_l.iff', object.getPlanet()) + # flawless3.setStfFilename('static_item_n') + # flawless3.setStfName('item_bracelet_l_set_bh_utility_a_01_01') + # flawless3.setDetailFilename('static_item_d') + # flawless3.setDetailName('item_bracelet_l_set_bh_utility_a_01_01') + # flawless3.setStringAttribute('@set_bonus:piece_bonus_count_2', '@set_bonus:set_bonus_bh_utility_b_1') + # flawless3.setStringAttribute('@set_bonus:piece_bonus_count_3', '@set_bonus:set_bonus_bh_utility_b_2') + # flawless3.setStringAttribute('@set_bonus:piece_bonus_count_5', '@set_bonus:set_bonus_bh_utility_b_3') + # flawless3.setIntAttribute('cat_stat_mod_bonus.food_luck_modified' , 30) + # flawless3.setIntAttribute('cat_stat_mod_bonus.food_precision_modified' , 50) - inventory = object.getSlottedObject('inventory') - if not inventory: - return - inventory.add(flawless3) + # inventory = object.getSlottedObject('inventory') + # if not inventory: + # return + # inventory.add(flawless3) - flawless4 = core.objectService.createObject('object/tangible/wearables/ring/shared_ring_s02.iff', object.getPlanet()) - flawless4.setStfFilename('static_item_n') - flawless4.setStfName('item_ring_set_bh_utility_a_01_01') - flawless4.setDetailFilename('static_item_d') - flawless4.setDetailName('item_ring_set_bh_utility_a_01_01') - flawless4.setStringAttribute('@set_bonus:piece_bonus_count_2', '@set_bonus:set_bonus_bh_utility_b_1') - flawless4.setStringAttribute('@set_bonus:piece_bonus_count_3', '@set_bonus:set_bonus_bh_utility_b_2') - flawless4.setStringAttribute('@set_bonus:piece_bonus_count_5', '@set_bonus:set_bonus_bh_utility_b_3') - flawless4.setIntAttribute('cat_stat_mod_bonus.food_luck_modified' , 30) - flawless4.setIntAttribute('cat_stat_mod_bonus.food_precision_modified' , 50) + # flawless4 = core.objectService.createObject('object/tangible/wearables/ring/shared_ring_s02.iff', object.getPlanet()) + # flawless4.setStfFilename('static_item_n') + # flawless4.setStfName('item_ring_set_bh_utility_a_01_01') + # flawless4.setDetailFilename('static_item_d') + # flawless4.setDetailName('item_ring_set_bh_utility_a_01_01') + # flawless4.setStringAttribute('@set_bonus:piece_bonus_count_2', '@set_bonus:set_bonus_bh_utility_b_1') + # flawless4.setStringAttribute('@set_bonus:piece_bonus_count_3', '@set_bonus:set_bonus_bh_utility_b_2') + # flawless4.setStringAttribute('@set_bonus:piece_bonus_count_5', '@set_bonus:set_bonus_bh_utility_b_3') + # flawless4.setIntAttribute('cat_stat_mod_bonus.food_luck_modified' , 30) + # flawless4.setIntAttribute('cat_stat_mod_bonus.food_precision_modified' , 50) - inventory = object.getSlottedObject('inventory') - if not inventory: - return - inventory.add(flawless4) + # inventory = object.getSlottedObject('inventory') + # if not inventory: + # return + # inventory.add(flawless4) - flawless5 = core.objectService.createObject('object/tangible/wearables/ring/shared_ring_s04.iff', object.getPlanet()) - flawless5.setStfFilename('static_item_n') - flawless5.setStfName('item_ring_a_set_bh_utility_a') - flawless5.setDetailFilename('static_item_d') - flawless5.setDetailName('item_ring_a_set_bh_utility_a') - flawless5.setStringAttribute('@set_bonus:piece_bonus_count_2', '@set_bonus:set_bonus_bh_utility_b_1') - flawless5.setStringAttribute('@set_bonus:piece_bonus_count_3', '@set_bonus:set_bonus_bh_utility_b_2') - flawless5.setStringAttribute('@set_bonus:piece_bonus_count_5', '@set_bonus:set_bonus_bh_utility_b_3') - flawless5.setIntAttribute('cat_stat_mod_bonus.food_luck_modified' , 30) - flawless5.setIntAttribute('cat_stat_mod_bonus.food_precision_modified' , 50) + # flawless5 = core.objectService.createObject('object/tangible/wearables/ring/shared_ring_s04.iff', object.getPlanet()) + # flawless5.setStfFilename('static_item_n') + # flawless5.setStfName('item_ring_a_set_bh_utility_a') + # flawless5.setDetailFilename('static_item_d') + # flawless5.setDetailName('item_ring_a_set_bh_utility_a') + # flawless5.setStringAttribute('@set_bonus:piece_bonus_count_2', '@set_bonus:set_bonus_bh_utility_b_1') + # flawless5.setStringAttribute('@set_bonus:piece_bonus_count_3', '@set_bonus:set_bonus_bh_utility_b_2') + # flawless5.setStringAttribute('@set_bonus:piece_bonus_count_5', '@set_bonus:set_bonus_bh_utility_b_3') + # flawless5.setIntAttribute('cat_stat_mod_bonus.food_luck_modified' , 30) + # flawless5.setIntAttribute('cat_stat_mod_bonus.food_precision_modified' , 50) - inventory = object.getSlottedObject('inventory') - if not inventory: - return - inventory.add(flawless5) + # inventory = object.getSlottedObject('inventory') + # if not inventory: + # return + # inventory.add(flawless5) - enforcer1 = core.objectService.createObject('object/tangible/wearables/necklace/shared_necklace_s01.iff', object.getPlanet()) - enforcer1.setStfFilename('static_item_n') - enforcer1.setStfName('item_necklace_set_bh_dps_01_01') - enforcer1.setDetailFilename('static_item_d') - enforcer1.setDetailName('item_necklace_set_bh_dps_01_01') - enforcer1.setStringAttribute('@set_bonus:piece_bonus_count_2', '@set_bonus:set_bonus_bh_dps_1') - enforcer1.setStringAttribute('@set_bonus:piece_bonus_count_3', '@set_bonus:set_bonus_bh_dps_2') - enforcer1.setStringAttribute('@set_bonus:piece_bonus_count_5', '@set_bonus:set_bonus_bh_dps_3') - enforcer1.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_action_line_dm' , 1) - enforcer1.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_action_line_dm_crit' , 1) - enforcer1.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_buff_duration_line_bh_return_fire' , 1) - enforcer1.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_cooldown_line_dm' , 1) + # enforcer1 = core.objectService.createObject('object/tangible/wearables/necklace/shared_necklace_s01.iff', object.getPlanet()) + # enforcer1.setStfFilename('static_item_n') + # enforcer1.setStfName('item_necklace_set_bh_dps_01_01') + # enforcer1.setDetailFilename('static_item_d') + # enforcer1.setDetailName('item_necklace_set_bh_dps_01_01') + # enforcer1.setStringAttribute('@set_bonus:piece_bonus_count_2', '@set_bonus:set_bonus_bh_dps_1') + # enforcer1.setStringAttribute('@set_bonus:piece_bonus_count_3', '@set_bonus:set_bonus_bh_dps_2') + # enforcer1.setStringAttribute('@set_bonus:piece_bonus_count_5', '@set_bonus:set_bonus_bh_dps_3') + # enforcer1.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_action_line_dm' , 1) + # enforcer1.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_action_line_dm_crit' , 1) + # enforcer1.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_buff_duration_line_bh_return_fire' , 1) + # enforcer1.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_cooldown_line_dm' , 1) - inventory = object.getSlottedObject('inventory') - if not inventory: - return - inventory.add(enforcer1) + # inventory = object.getSlottedObject('inventory') + # if not inventory: + # return + # inventory.add(enforcer1) - enforcer2 = core.objectService.createObject('object/tangible/wearables/bracelet/shared_bracelet_s02_r.iff', object.getPlanet()) - enforcer2.setStfFilename('static_item_n') - enforcer2.setStfName('item_bracelet_r_set_bh_dps_01_01') - enforcer2.setDetailFilename('static_item_d') - enforcer2.setDetailName('item_bracelet_r_set_dps_01_01') - enforcer2.setStringAttribute('@set_bonus:piece_bonus_count_2', '@set_bonus:set_bonus_bh_dps_1') - enforcer2.setStringAttribute('@set_bonus:piece_bonus_count_3', '@set_bonus:set_bonus_bh_dps_2') - enforcer2.setStringAttribute('@set_bonus:piece_bonus_count_5', '@set_bonus:set_bonus_bh_dps_3') - enforcer2.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_action_line_dm' , 1) - enforcer2.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_action_line_dm_crit' , 1) - enforcer2.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_buff_duration_line_bh_return_fire' , 1) - enforcer2.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_cooldown_line_dm' , 1) - - inventory = object.getSlottedObject('inventory') - if not inventory: - return - inventory.add(enforcer2) - - enforcer3 = core.objectService.createObject('object/tangible/wearables/bracelet/shared_bracelet_s02_l.iff', object.getPlanet()) - enforcer3.setStfFilename('static_item_n') - enforcer3.setStfName('item_bracelet_l_set_bh_dps_01_01') - enforcer3.setDetailFilename('static_item_d') - enforcer3.setDetailName('item_bracelet_l_set_bh_dps_01_01') - enforcer3.setStringAttribute('@set_bonus:piece_bonus_count_2', '@set_bonus:set_bonus_bh_dps_1') - enforcer3.setStringAttribute('@set_bonus:piece_bonus_count_3', '@set_bonus:set_bonus_bh_dps_2') - enforcer3.setStringAttribute('@set_bonus:piece_bonus_count_5', '@set_bonus:set_bonus_bh_dps_3') - enforcer3.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_action_line_dm' , 1) - enforcer3.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_action_line_dm_crit' , 1) - enforcer3.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_buff_duration_line_bh_return_fire' , 1) - enforcer3.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_cooldown_line_dm' , 1) - - inventory = object.getSlottedObject('inventory') - if not inventory: - return - inventory.add(enforcer3) - - enforcer4 = core.objectService.createObject('object/tangible/wearables/ring/shared_ring_s01.iff', object.getPlanet()) - enforcer4.setStfFilename('static_item_n') - enforcer4.setStfName('item_ring_set_bh_dps_01_01') - enforcer4.setDetailFilename('static_item_d') - enforcer4.setDetailName('item_ring_set_bh_dps_01_01') - enforcer4.setStringAttribute('@set_bonus:piece_bonus_count_2', '@set_bonus:set_bonus_bh_dps_1') - enforcer4.setStringAttribute('@set_bonus:piece_bonus_count_3', '@set_bonus:set_bonus_bh_dps_2') - enforcer4.setStringAttribute('@set_bonus:piece_bonus_count_5', '@set_bonus:set_bonus_bh_dps_3') - enforcer4.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_action_line_dm' , 1) - enforcer4.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_action_line_dm_crit' , 1) - enforcer4.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_buff_duration_line_bh_return_fire' , 1) - enforcer4.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_cooldown_line_dm' , 1) - - inventory = object.getSlottedObject('inventory') - if not inventory: - return - inventory.add(enforcer4) - - enforcer5 = core.objectService.createObject('object/tangible/wearables/ring/shared_ring_s03.iff', object.getPlanet()) - enforcer5.setStfFilename('static_item_n') - enforcer5.setStfName('item_ring_a_set_bh_dps') - enforcer5.setDetailFilename('static_item_d') - enforcer5.setDetailName('item_ring_a_set_bh_dps') - enforcer5.setStringAttribute('@set_bonus:piece_bonus_count_2', '@set_bonus:set_bonus_bh_dps_1') - enforcer5.setStringAttribute('@set_bonus:piece_bonus_count_3', '@set_bonus:set_bonus_bh_dps_2') - enforcer5.setStringAttribute('@set_bonus:piece_bonus_count_5', '@set_bonus:set_bonus_bh_dps_3') - enforcer5.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_action_line_dm' , 1) - enforcer5.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_action_line_dm_crit' , 1) - enforcer5.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_buff_duration_line_bh_return_fire' , 1) - enforcer5.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_cooldown_line_dm' , 1) - - inventory = object.getSlottedObject('inventory') - if not inventory: - return - inventory.add(enforcer5) - return - return + # enforcer2 = core.objectService.createObject('object/tangible/wearables/bracelet/shared_bracelet_s02_r.iff', object.getPlanet()) + # enforcer2.setStfFilename('static_item_n') + # enforcer2.setStfName('item_bracelet_r_set_bh_dps_01_01') + # enforcer2.setDetailFilename('static_item_d') + # enforcer2.setDetailName('item_bracelet_r_set_dps_01_01') + # enforcer2.setStringAttribute('@set_bonus:piece_bonus_count_2', '@set_bonus:set_bonus_bh_dps_1') + # enforcer2.setStringAttribute('@set_bonus:piece_bonus_count_3', '@set_bonus:set_bonus_bh_dps_2') + # enforcer2.setStringAttribute('@set_bonus:piece_bonus_count_5', '@set_bonus:set_bonus_bh_dps_3') + # enforcer2.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_action_line_dm' , 1) + # enforcer2.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_action_line_dm_crit' , 1) + # enforcer2.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_buff_duration_line_bh_return_fire' , 1) + # enforcer2.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_cooldown_line_dm' , 1) + + # inventory = object.getSlottedObject('inventory') + # if not inventory: + # return + # inventory.add(enforcer2) + + # enforcer3 = core.objectService.createObject('object/tangible/wearables/bracelet/shared_bracelet_s02_l.iff', object.getPlanet()) + # enforcer3.setStfFilename('static_item_n') + # enforcer3.setStfName('item_bracelet_l_set_bh_dps_01_01') + #enforcer3.setDetailFilename('static_item_d') + # enforcer3.setDetailName('item_bracelet_l_set_bh_dps_01_01') + # enforcer3.setStringAttribute('@set_bonus:piece_bonus_count_2', '@set_bonus:set_bonus_bh_dps_1') + # enforcer3.setStringAttribute('@set_bonus:piece_bonus_count_3', '@set_bonus:set_bonus_bh_dps_2') + # enforcer3.setStringAttribute('@set_bonus:piece_bonus_count_5', '@set_bonus:set_bonus_bh_dps_3') + #enforcer3.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_action_line_dm' , 1) + # enforcer3.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_action_line_dm_crit' , 1) + # enforcer3.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_buff_duration_line_bh_return_fire' , 1) + # enforcer3.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_cooldown_line_dm' , 1) + + #inventory = object.getSlottedObject('inventory') + #if not inventory: + # return + #inventory.add(enforcer3) + + #enforcer4 = core.objectService.createObject('object/tangible/wearables/ring/shared_ring_s01.iff', object.getPlanet()) + #enforcer4.setStfFilename('static_item_n') + #enforcer4.setStfName('item_ring_set_bh_dps_01_01') + #enforcer4.setDetailFilename('static_item_d') + #enforcer4.setDetailName('item_ring_set_bh_dps_01_01') + #enforcer4.setStringAttribute('@set_bonus:piece_bonus_count_2', '@set_bonus:set_bonus_bh_dps_1') + #enforcer4.setStringAttribute('@set_bonus:piece_bonus_count_3', '@set_bonus:set_bonus_bh_dps_2') + #enforcer4.setStringAttribute('@set_bonus:piece_bonus_count_5', '@set_bonus:set_bonus_bh_dps_3') + #enforcer4.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_action_line_dm' , 1) + #enforcer4.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_action_line_dm_crit' , 1) + #enforcer4.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_buff_duration_line_bh_return_fire' , 1) + #enforcer4.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_cooldown_line_dm' , 1) + + #inventory = object.getSlottedObject('inventory') + #if not inventory: + # return + #inventory.add(enforcer4) + + #enforcer5 = core.objectService.createObject('object/tangible/wearables/ring/shared_ring_s03.iff', object.getPlanet()) + #enforcer5.setStfFilename('static_item_n') + #enforcer5.setStfName('item_ring_a_set_bh_dps') + #enforcer5.setDetailFilename('static_item_d') + #enforcer5.setDetailName('item_ring_a_set_bh_dps') + #enforcer5.setStringAttribute('@set_bonus:piece_bonus_count_2', '@set_bonus:set_bonus_bh_dps_1') + #enforcer5.setStringAttribute('@set_bonus:piece_bonus_count_3', '@set_bonus:set_bonus_bh_dps_2') + #enforcer5.setStringAttribute('@set_bonus:piece_bonus_count_5', '@set_bonus:set_bonus_bh_dps_3') + #enforcer5.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_action_line_dm' , 1) + #enforcer5.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_action_line_dm_crit' , 1) + #enforcer5.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_buff_duration_line_bh_return_fire' , 1) + #enforcer5.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_cooldown_line_dm' , 1) + + #inventory = object.getSlottedObject('inventory') + #if not inventory: + # return + #inventory.add(enforcer5) + #return + #return return diff --git a/scripts/equipment/bonus_sets/set_bonus_bh_dps.py b/scripts/equipment/bonus_sets/set_bonus_bh_dps.py new file mode 100644 index 00000000..4a18c18e --- /dev/null +++ b/scripts/equipment/bonus_sets/set_bonus_bh_dps.py @@ -0,0 +1,31 @@ +import sys +from services.equipment import BonusSetTemplate +from java.util import Vector + +def addBonusSet(core): + bonusSet = BonusSetTemplate("set_bonus_bh_dps") + + bonusSet.addRequiredItem("item_band_set_bh_dps_01_01") + bonusSet.addRequiredItem("item_ring_set_bh_dps_01_01") + bonusSet.addRequiredItem("item_necklace_set_bh_dps_01_01") + bonusSet.addRequiredItem("item_bracelet_r_set_bh_dps_01_01") + bonusSet.addRequiredItem("item_bracelet_l_set_bh_dps_01_01") + + core.equipmentService.addBonusSetTemplate(bonusSet) + +def handleChange(core, creature, set): + wornItems = set.getWornTemplateCount(creature) + + if wornItems == 3: + core.buffService.addBuffToCreature(creature, "set_bonus_bh_dps_1", creature) + creature.sendSystemMessage('@set_bonus:set_bonus_bh_dps_1_sys', 0) + elif wornItems == 4: + core.buffService.addBuffToCreature(creature, "set_bonus_bh_dps_2", creature) + creature.sendSystemMessage('@set_bonus:set_bonus_bh_dps_2_sys', 0) + elif wornItems == 5: + core.buffService.addBuffToCreature(creature, "set_bonus_bh_dps_3", creature) + creature.sendSystemMessage('@set_bonus:set_bonus_bh_dps_3_sys', 0) + else: + core.buffService.removeBuffFromCreatureByName(creature, "set_bonus_bh_dps_1") + core.buffService.removeBuffFromCreatureByName(creature, "set_bonus_bh_dps_2") + core.buffService.removeBuffFromCreatureByName(creature, "set_bonus_bh_dps_3") \ No newline at end of file diff --git a/scripts/equipment/bonus_sets/set_bonus_bh_utility_a.py b/scripts/equipment/bonus_sets/set_bonus_bh_utility_a.py new file mode 100644 index 00000000..6dd6bfb8 --- /dev/null +++ b/scripts/equipment/bonus_sets/set_bonus_bh_utility_a.py @@ -0,0 +1,31 @@ +import sys +from services.equipment import BonusSetTemplate +from java.util import Vector + +def addBonusSet(core): + bonusSet = BonusSetTemplate("set_bonus_bh_utility_a") + + bonusSet.addRequiredItem("item_band_set_bh_utility_a_01_01") + bonusSet.addRequiredItem("item_ring_set_bh_utility_a_01_01") + bonusSet.addRequiredItem("item_necklace_set_bh_utility_a_01_01") + bonusSet.addRequiredItem("item_bracelet_r_set_bh_utility_a_01_01") + bonusSet.addRequiredItem("item_bracelet_l_set_bh_utility_a_01_01") + + core.equipmentService.addBonusSetTemplate(bonusSet) + +def handleChange(core, creature, set): + wornItems = set.getWornTemplateCount(creature) + + if wornItems == 3: + core.buffService.addBuffToCreature(creature, "set_bonus_bh_utility_a_1", creature) + creature.sendSystemMessage('@set_bonus:set_bonus_bh_utility_a_1_sys', 0) + elif wornItems == 4: + core.buffService.addBuffToCreature(creature, "set_bonus_bh_utility_a_2", creature) + creature.sendSystemMessage('@set_bonus:set_bonus_bh_utility_a_2_sys', 0) + elif wornItems == 5: + core.buffService.addBuffToCreature(creature, "set_bonus_bh_utility_a_3", creature) + creature.sendSystemMessage('@set_bonus:set_bonus_bh_utility_a_3_sys', 0) + else: + core.buffService.removeBuffFromCreatureByName(creature, "set_bonus_bh_utility_a_1") + core.buffService.removeBuffFromCreatureByName(creature, "set_bonus_bh_utility_a_2") + core.buffService.removeBuffFromCreatureByName(creature, "set_bonus_bh_utility_a_3") \ No newline at end of file diff --git a/scripts/equipment/bonus_sets/set_bonus_bh_utility_b.py b/scripts/equipment/bonus_sets/set_bonus_bh_utility_b.py new file mode 100644 index 00000000..ed612f4e --- /dev/null +++ b/scripts/equipment/bonus_sets/set_bonus_bh_utility_b.py @@ -0,0 +1,31 @@ +import sys +from services.equipment import BonusSetTemplate +from java.util import Vector + +def addBonusSet(core): + bonusSet = BonusSetTemplate("set_bonus_bh_utility_b") + + bonusSet.addRequiredItem("item_band_set_bh_utility_b_01_01") + bonusSet.addRequiredItem("item_ring_set_bh_utility_b_01_01") + bonusSet.addRequiredItem("item_necklace_set_bh_utility_b_01_01") + bonusSet.addRequiredItem("item_bracelet_r_set_bh_utility_b_01_01") + bonusSet.addRequiredItem("item_bracelet_l_set_bh_utility_b_01_01") + + core.equipmentService.addBonusSetTemplate(bonusSet) + +def handleChange(core, creature, set): + wornItems = set.getWornTemplateCount(creature) + + if wornItems == 3: + core.buffService.addBuffToCreature(creature, "set_bonus_bh_utility_b_1", creature) + creature.sendSystemMessage('@set_bonus:set_bonus_bh_utility_b_1_sys', 0) + elif wornItems == 4: + core.buffService.addBuffToCreature(creature, "set_bonus_bh_utility_b_2", creature) + creature.sendSystemMessage('@set_bonus:set_bonus_bh_utility_b_2_sys', 0) + elif wornItems == 5: + core.buffService.addBuffToCreature(creature, "set_bonus_bh_utility_b_3", creature) + creature.sendSystemMessage('@set_bonus:set_bonus_bh_utility_b_3_sys', 0) + else: + core.buffService.removeBuffFromCreatureByName(creature, "set_bonus_bh_utility_b_1") + core.buffService.removeBuffFromCreatureByName(creature, "set_bonus_bh_utility_b_2") + core.buffService.removeBuffFromCreatureByName(creature, "set_bonus_bh_utility_b_3") \ No newline at end of file diff --git a/scripts/equipment/bonus_sets/set_bonus_co_dps.py b/scripts/equipment/bonus_sets/set_bonus_co_dps.py new file mode 100644 index 00000000..fa3533b2 --- /dev/null +++ b/scripts/equipment/bonus_sets/set_bonus_co_dps.py @@ -0,0 +1,31 @@ +import sys +from services.equipment import BonusSetTemplate +from java.util import Vector + +def addBonusSet(core): + bonusSet = BonusSetTemplate("set_bonus_co_dps") + + bonusSet.addRequiredItem("item_band_set_co_dps_01_01") + bonusSet.addRequiredItem("item_ring_set_co_dps_01_01") + bonusSet.addRequiredItem("item_necklace_set_co_dps_01_01") + bonusSet.addRequiredItem("item_bracelet_r_set_co_dps_01_01") + bonusSet.addRequiredItem("item_bracelet_l_set_co_dps_01_01") + + core.equipmentService.addBonusSetTemplate(bonusSet) + +def handleChange(core, creature, set): + wornItems = set.getWornTemplateCount(creature) + + if wornItems == 3: + core.buffService.addBuffToCreature(creature, "set_bonus_co_dps_1", creature) + creature.sendSystemMessage('@set_bonus:set_bonus_co_dps_1_sys', 0) + elif wornItems == 4: + core.buffService.addBuffToCreature(creature, "set_bonus_co_dps_2", creature) + creature.sendSystemMessage('@set_bonus:set_bonus_co_dps_2_sys', 0) + elif wornItems == 5: + core.buffService.addBuffToCreature(creature, "set_bonus_co_dps_3", creature) + creature.sendSystemMessage('@set_bonus:set_bonus_co_dps_3_sys', 0) + else: + core.buffService.removeBuffFromCreatureByName(creature, "set_bonus_co_dps_1") + core.buffService.removeBuffFromCreatureByName(creature, "set_bonus_co_dps_2") + core.buffService.removeBuffFromCreatureByName(creature, "set_bonus_co_dps_3") \ No newline at end of file diff --git a/scripts/equipment/bonus_sets/set_bonus_co_utility_a.py b/scripts/equipment/bonus_sets/set_bonus_co_utility_a.py new file mode 100644 index 00000000..f70cd5c3 --- /dev/null +++ b/scripts/equipment/bonus_sets/set_bonus_co_utility_a.py @@ -0,0 +1,31 @@ +import sys +from services.equipment import BonusSetTemplate +from java.util import Vector + +def addBonusSet(core): + bonusSet = BonusSetTemplate("set_bonus_co_utility_a") + + bonusSet.addRequiredItem("item_band_set_co_utility_a_01_01") + bonusSet.addRequiredItem("item_ring_set_co_utility_a_01_01") + bonusSet.addRequiredItem("item_necklace_set_co_utility_a_01_01") + bonusSet.addRequiredItem("item_bracelet_r_set_co_utility_a_01_01") + bonusSet.addRequiredItem("item_bracelet_l_set_co_utility_a_01_01") + + core.equipmentService.addBonusSetTemplate(bonusSet) + +def handleChange(core, creature, set): + wornItems = set.getWornTemplateCount(creature) + + if wornItems == 3: + core.buffService.addBuffToCreature(creature, "set_bonus_co_utility_a_1", creature) + creature.sendSystemMessage('@set_bonus:set_bonus_co_utility_a_1_sys', 0) + elif wornItems == 4: + core.buffService.addBuffToCreature(creature, "set_bonus_co_utility_a_2", creature) + creature.sendSystemMessage('@set_bonus:set_bonus_co_utility_a_2_sys', 0) + elif wornItems == 5: + core.buffService.addBuffToCreature(creature, "set_bonus_co_utility_a_3", creature) + creature.sendSystemMessage('@set_bonus:set_bonus_co_utility_a_3_sys', 0) + else: + core.buffService.removeBuffFromCreatureByName(creature, "set_bonus_co_utility_a_1") + core.buffService.removeBuffFromCreatureByName(creature, "set_bonus_co_utility_a_2") + core.buffService.removeBuffFromCreatureByName(creature, "set_bonus_co_utility_a_3") \ No newline at end of file diff --git a/scripts/equipment/bonus_sets/set_bonus_co_utility_b.py b/scripts/equipment/bonus_sets/set_bonus_co_utility_b.py new file mode 100644 index 00000000..cfd278af --- /dev/null +++ b/scripts/equipment/bonus_sets/set_bonus_co_utility_b.py @@ -0,0 +1,31 @@ +import sys +from services.equipment import BonusSetTemplate +from java.util import Vector + +def addBonusSet(core): + bonusSet = BonusSetTemplate("set_bonus_co_utility_b") + + bonusSet.addRequiredItem("item_band_set_co_utility_b_01_01") + bonusSet.addRequiredItem("item_ring_set_co_utility_b_01_01") + bonusSet.addRequiredItem("item_necklace_set_co_utility_b_01_01") + bonusSet.addRequiredItem("item_bracelet_r_set_co_utility_b_01_01") + bonusSet.addRequiredItem("item_bracelet_l_set_co_utility_b_01_01") + + core.equipmentService.addBonusSetTemplate(bonusSet) + +def handleChange(core, creature, set): + wornItems = set.getWornTemplateCount(creature) + + if wornItems == 3: + core.buffService.addBuffToCreature(creature, "set_bonus_co_utility_b_1", creature) + creature.sendSystemMessage('@set_bonus:set_bonus_co_utility_b_1_sys', 0) + elif wornItems == 4: + core.buffService.addBuffToCreature(creature, "set_bonus_co_utility_b_2", creature) + creature.sendSystemMessage('@set_bonus:set_bonus_co_utility_b_2_sys', 0) + elif wornItems == 5: + core.buffService.addBuffToCreature(creature, "set_bonus_co_utility_b_3", creature) + creature.sendSystemMessage('@set_bonus:set_bonus_co_utility_b_3_sys', 0) + else: + core.buffService.removeBuffFromCreatureByName(creature, "set_bonus_co_utility_b_1") + core.buffService.removeBuffFromCreatureByName(creature, "set_bonus_co_utility_b_2") + core.buffService.removeBuffFromCreatureByName(creature, "set_bonus_co_utility_b_3") \ No newline at end of file diff --git a/scripts/equipment/bonus_sets/set_bonus_ent.py b/scripts/equipment/bonus_sets/set_bonus_ent.py new file mode 100644 index 00000000..b0f90f98 --- /dev/null +++ b/scripts/equipment/bonus_sets/set_bonus_ent.py @@ -0,0 +1,31 @@ +import sys +from services.equipment import BonusSetTemplate +from java.util import Vector + +def addBonusSet(core): + bonusSet = BonusSetTemplate("set_bonus_ent") + + bonusSet.addRequiredItem("item_band_set_ent_01_01") + bonusSet.addRequiredItem("item_ring_set_ent_01_01") + bonusSet.addRequiredItem("item_necklace_set_ent_01_01") + bonusSet.addRequiredItem("item_bracelet_r_set_ent_01_01") + bonusSet.addRequiredItem("item_bracelet_l_set_ent_01_01") + + core.equipmentService.addBonusSetTemplate(bonusSet) + +def handleChange(core, creature, set): + wornItems = set.getWornTemplateCount(creature) + + if wornItems == 3: + core.buffService.addBuffToCreature(creature, "set_bonus_ent_1", creature) + creature.sendSystemMessage('@set_bonus:set_bonus_ent_1_sys', 0) + elif wornItems == 4: + core.buffService.addBuffToCreature(creature, "set_bonus_ent_2", creature) + creature.sendSystemMessage('@set_bonus:set_bonus_ent_2_sys', 0) + elif wornItems == 5: + core.buffService.addBuffToCreature(creature, "set_bonus_ent_3", creature) + creature.sendSystemMessage('@set_bonus:set_bonus_ent_3_sys', 0) + else: + core.buffService.removeBuffFromCreatureByName(creature, "set_bonus_ent_1") + core.buffService.removeBuffFromCreatureByName(creature, "set_bonus_ent_2") + core.buffService.removeBuffFromCreatureByName(creature, "set_bonus_ent_3") \ No newline at end of file diff --git a/scripts/equipment/bonus_sets/set_bonus_hero.py b/scripts/equipment/bonus_sets/set_bonus_hero.py new file mode 100644 index 00000000..0b1b27c6 --- /dev/null +++ b/scripts/equipment/bonus_sets/set_bonus_hero.py @@ -0,0 +1,31 @@ +import sys +from services.equipment import BonusSetTemplate +from java.util import Vector + +def addBonusSet(core): + bonusSet = BonusSetTemplate("set_bonus_hero") + + bonusSet.addRequiredItem("item_band_set_hero_01_01") + bonusSet.addRequiredItem("item_ring_set_hero_01_01") + bonusSet.addRequiredItem("item_necklace_set_hero_01_01") + bonusSet.addRequiredItem("item_bracelet_r_set_hero_01_01") + bonusSet.addRequiredItem("item_bracelet_l_set_hero_01_01") + + core.equipmentService.addBonusSetTemplate(bonusSet) + +def handleChange(core, creature, set): + wornItems = set.getWornTemplateCount(creature) + + if wornItems == 3: + core.buffService.addBuffToCreature(creature, "set_bonus_hero_1", creature) + creature.sendSystemMessage('@set_bonus:set_bonus_hero_1_sys', 0) + elif wornItems == 4: + core.buffService.addBuffToCreature(creature, "set_bonus_hero_2", creature) + creature.sendSystemMessage('@set_bonus:set_bonus_hero_2_sys', 0) + elif wornItems == 5: + core.buffService.addBuffToCreature(creature, "set_bonus_hero_3", creature) + creature.sendSystemMessage('@set_bonus:set_bonus_hero_3_sys', 0) + else: + core.buffService.removeBuffFromCreatureByName(creature, "set_bonus_hero_1") + core.buffService.removeBuffFromCreatureByName(creature, "set_bonus_hero_2") + core.buffService.removeBuffFromCreatureByName(creature, "set_bonus_hero_3") \ No newline at end of file diff --git a/scripts/equipment/bonus_sets/set_bonus_imperial_snow_armor.py b/scripts/equipment/bonus_sets/set_bonus_imperial_snow_armor.py new file mode 100644 index 00000000..fc245ba4 --- /dev/null +++ b/scripts/equipment/bonus_sets/set_bonus_imperial_snow_armor.py @@ -0,0 +1,45 @@ +import sys +from services.equipment import BonusSetTemplate +from java.util import Vector + +def addBonusSet(core): + bonusSet = BonusSetTemplate("set_bonus_imperial_snow_armor") + + bonusSet.addRequiredItem("backpack_snowtrooper") + bonusSet.addRequiredItem("armor_snowtrooper_belt") + bonusSet.addRequiredItem("armor_snowtrooper_bicep_l") + bonusSet.addRequiredItem("armor_snowtrooper_bicep_r") + bonusSet.addRequiredItem("armor_snowtrooper_boots") + bonusSet.addRequiredItem("armor_snowtrooper_bracer_l") + bonusSet.addRequiredItem("armor_snowtrooper_bracer_r") + bonusSet.addRequiredItem("armor_snowtrooper_chest_plate") + bonusSet.addRequiredItem("armor_snowtrooper_gloves") + bonusSet.addRequiredItem("armor_snowtrooper_helmet") + bonusSet.addRequiredItem("armor_snowtrooper_leggings") + + core.equipmentService.addBonusSetTemplate(bonusSet) + +def handleChange(core, creature, set): + wornItems = set.getWornTemplateCount(creature) + + if wornItems == 3: + core.buffService.addBuffToCreature(creature, "set_bonus_imperial_snow_armor_3", creature) + creature.sendSystemMessage('@set_bonus:set_bonus_imperial_snow_armor_3_sys', 0) + elif wornItems == 5: + core.buffService.addBuffToCreature(creature, "set_bonus_imperial_snow_armor_5", creature) + creature.sendSystemMessage('@set_bonus:set_bonus_imperial_snow_armor_5_sys', 0) + elif wornItems == 7: + core.buffService.addBuffToCreature(creature, "set_bonus_imperial_snow_armor_7", creature) + creature.sendSystemMessage('@set_bonus:set_bonus_imperial_snow_armor_7_sys', 0) + elif wornItems == 9: + core.buffService.addBuffToCreature(creature, "set_bonus_imperial_snow_armor_9", creature) + creature.sendSystemMessage('@set_bonus:set_bonus_imperial_snow_armor_9_sys', 0) + elif wornItems == 11: + core.buffService.addBuffToCreature(creature, "set_bonus_imperial_snow_armor_11", creature) + creature.sendSystemMessage('@set_bonus:set_bonus_imperial_snow_armor_11_sys', 0) + else: + core.buffService.removeBuffFromCreatureByName(creature, "set_bonus_imperial_snow_armor_3") + core.buffService.removeBuffFromCreatureByName(creature, "set_bonus_imperial_snow_armor_5") + core.buffService.removeBuffFromCreatureByName(creature, "set_bonus_imperial_snow_armor_7") + core.buffService.removeBuffFromCreatureByName(creature, "set_bonus_imperial_snow_armor_9") + core.buffService.removeBuffFromCreatureByName(creature, "set_bonus_imperial_snow_armor_11") \ No newline at end of file diff --git a/scripts/equipment/bonus_sets/set_bonus_jedi_dps.py b/scripts/equipment/bonus_sets/set_bonus_jedi_dps.py new file mode 100644 index 00000000..6b127317 --- /dev/null +++ b/scripts/equipment/bonus_sets/set_bonus_jedi_dps.py @@ -0,0 +1,31 @@ +import sys +from services.equipment import BonusSetTemplate +from java.util import Vector + +def addBonusSet(core): + bonusSet = BonusSetTemplate("set_bonus_jedi_dps") + + bonusSet.addRequiredItem("item_band_set_jedi_dps_01_01") + bonusSet.addRequiredItem("item_ring_set_jedi_dps_01_01") + bonusSet.addRequiredItem("item_necklace_set_jedi_dps_01_01") + bonusSet.addRequiredItem("item_bracelet_r_set_jedi_dps_01_01") + bonusSet.addRequiredItem("item_bracelet_l_set_jedi_dps_01_01") + + core.equipmentService.addBonusSetTemplate(bonusSet) + +def handleChange(core, creature, set): + wornItems = set.getWornTemplateCount(creature) + + if wornItems == 3: + core.buffService.addBuffToCreature(creature, "set_bonus_jedi_dps_1", creature) + creature.sendSystemMessage('@set_bonus:set_bonus_jedi_dps_1_sys', 0) + elif wornItems == 4: + core.buffService.addBuffToCreature(creature, "set_bonus_jedi_dps_2", creature) + creature.sendSystemMessage('@set_bonus:set_bonus_jedi_dps_2_sys', 0) + elif wornItems == 5: + core.buffService.addBuffToCreature(creature, "set_bonus_jedi_dps_3", creature) + creature.sendSystemMessage('@set_bonus:set_bonus_jedi_dps_3_sys', 0) + else: + core.buffService.removeBuffFromCreatureByName(creature, "set_bonus_jedi_dps_1") + core.buffService.removeBuffFromCreatureByName(creature, "set_bonus_jedi_dps_2") + core.buffService.removeBuffFromCreatureByName(creature, "set_bonus_jedi_dps_3") \ No newline at end of file diff --git a/scripts/equipment/bonus_sets/set_bonus_jedi_robe.py b/scripts/equipment/bonus_sets/set_bonus_jedi_robe.py new file mode 100644 index 00000000..734e9c89 --- /dev/null +++ b/scripts/equipment/bonus_sets/set_bonus_jedi_robe.py @@ -0,0 +1,40 @@ +import sys +from services.equipment import BonusSetTemplate +from java.util import Vector + +def addBonusSet(core): + bonusSet = BonusSetTemplate("set_bonus_jedi_robe") + + # Waistpack + bonusSet.addRequiredItem("object/tangible/wearables/backpack/shared_fannypack_s01.iff") + + # Jedi Robes - Light + bonusSet.addRequiredItem("object/tangible/wearables/robe/shared_robe_jedi_light_s01.iff") + bonusSet.addRequiredItem("object/tangible/wearables/robe/shared_robe_jedi_light_s02.iff") + bonusSet.addRequiredItem("object/tangible/wearables/robe/shared_robe_jedi_light_s03.iff") + bonusSet.addRequiredItem("object/tangible/wearables/robe/shared_robe_jedi_light_s04.iff") + bonusSet.addRequiredItem("object/tangible/wearables/robe/shared_robe_jedi_light_s05.iff") + + # Jedi Robes - Dark + bonusSet.addRequiredItem("object/tangible/wearables/robe/shared_robe_jedi_dark_s01.iff") + bonusSet.addRequiredItem("object/tangible/wearables/robe/shared_robe_jedi_dark_s02.iff") + bonusSet.addRequiredItem("object/tangible/wearables/robe/shared_robe_jedi_dark_s03.iff") + bonusSet.addRequiredItem("object/tangible/wearables/robe/shared_robe_jedi_dark_s04.iff") + bonusSet.addRequiredItem("object/tangible/wearables/robe/shared_robe_jedi_dark_s05.iff") + + # Jedi Cloaks + bonusSet.addRequiredItem("object/tangible/wearables/robe/shared_robe_s32.iff") + bonusSet.addRequiredItem("object/tangible/wearables/robe/shared_robe_s32_h1.iff") + bonusSet.addRequiredItem("object/tangible/wearables/robe/shared_robe_s33.iff") + bonusSet.addRequiredItem("object/tangible/wearables/robe/shared_robe_s33_h1.iff") + + core.equipmentService.addBonusSetTemplate(bonusSet) + +def handleChange(core, creature, set): + wornItems = set.getWornTemplateCount(creature) + + if wornItems == 2: + core.buffService.addBuffToCreature(creature, "set_bonus_jedi_robe_1", creature) + creature.sendSystemMessage('@set_bonus:set_bonus_jedi_robe_1_sys', 0) + else: + core.buffService.removeBuffFromCreatureByName(creature, "set_bonus_jedi_robe_1") \ No newline at end of file diff --git a/scripts/equipment/bonus_sets/set_bonus_jedi_utility_a.py b/scripts/equipment/bonus_sets/set_bonus_jedi_utility_a.py new file mode 100644 index 00000000..ec88e7bb --- /dev/null +++ b/scripts/equipment/bonus_sets/set_bonus_jedi_utility_a.py @@ -0,0 +1,31 @@ +import sys +from services.equipment import BonusSetTemplate +from java.util import Vector + +def addBonusSet(core): + bonusSet = BonusSetTemplate("set_bonus_jedi_utility_a") + + bonusSet.addRequiredItem("item_band_set_jedi_utility_a_01_01") + bonusSet.addRequiredItem("item_ring_set_jedi_utility_a_01_01") + bonusSet.addRequiredItem("item_necklace_set_jedi_utility_a_01_01") + bonusSet.addRequiredItem("item_bracelet_r_set_jedi_utility_a_01_01") + bonusSet.addRequiredItem("item_bracelet_l_set_jedi_utility_a_01_01") + + core.equipmentService.addBonusSetTemplate(bonusSet) + +def handleChange(core, creature, set): + wornItems = set.getWornTemplateCount(creature) + + if wornItems == 3: + core.buffService.addBuffToCreature(creature, "set_bonus_jedi_utility_a_1", creature) + creature.sendSystemMessage('@set_bonus:set_bonus_jedi_utility_a_1_sys', 0) + elif wornItems == 4: + core.buffService.addBuffToCreature(creature, "set_bonus_jedi_utility_a_2", creature) + creature.sendSystemMessage('@set_bonus:set_bonus_jedi_utility_a_2_sys', 0) + elif wornItems == 5: + core.buffService.addBuffToCreature(creature, "set_bonus_jedi_utility_a_3", creature) + creature.sendSystemMessage('@set_bonus:set_bonus_jedi_utility_a_3_sys', 0) + else: + core.buffService.removeBuffFromCreatureByName(creature, "set_bonus_jedi_utility_a_1") + core.buffService.removeBuffFromCreatureByName(creature, "set_bonus_jedi_utility_a_2") + core.buffService.removeBuffFromCreatureByName(creature, "set_bonus_jedi_utility_a_3") \ No newline at end of file diff --git a/scripts/equipment/bonus_sets/set_bonus_jedi_utility_b.py b/scripts/equipment/bonus_sets/set_bonus_jedi_utility_b.py new file mode 100644 index 00000000..c05cdde0 --- /dev/null +++ b/scripts/equipment/bonus_sets/set_bonus_jedi_utility_b.py @@ -0,0 +1,31 @@ +import sys +from services.equipment import BonusSetTemplate +from java.util import Vector + +def addBonusSet(core): + bonusSet = BonusSetTemplate("set_bonus_jedi_utility_b") + + bonusSet.addRequiredItem("item_band_set_jedi_utility_b_01_01") + bonusSet.addRequiredItem("item_ring_set_jedi_utility_b_01_01") + bonusSet.addRequiredItem("item_necklace_set_jedi_utility_b_01_01") + bonusSet.addRequiredItem("item_bracelet_r_set_jedi_utility_b_01_01") + bonusSet.addRequiredItem("item_bracelet_l_set_jedi_utility_b_01_01") + + core.equipmentService.addBonusSetTemplate(bonusSet) + +def handleChange(core, creature, set): + wornItems = set.getWornTemplateCount(creature) + + if wornItems == 3: + core.buffService.addBuffToCreature(creature, "set_bonus_jedi_utility_b_1", creature) + creature.sendSystemMessage('@set_bonus:set_bonus_jedi_utility_b_1_sys', 0) + elif wornItems == 4: + core.buffService.addBuffToCreature(creature, "set_bonus_jedi_utility_b_2", creature) + creature.sendSystemMessage('@set_bonus:set_bonus_jedi_utility_b_2_sys', 0) + elif wornItems == 5: + core.buffService.addBuffToCreature(creature, "set_bonus_jedi_utility_b_3", creature) + creature.sendSystemMessage('@set_bonus:set_bonus_jedi_utility_b_3_sys', 0) + else: + core.buffService.removeBuffFromCreatureByName(creature, "set_bonus_jedi_utility_b_1") + core.buffService.removeBuffFromCreatureByName(creature, "set_bonus_jedi_utility_b_2") + core.buffService.removeBuffFromCreatureByName(creature, "set_bonus_jedi_utility_b_3") \ No newline at end of file diff --git a/scripts/equipment/bonus_sets/set_bonus_medic_dps.py b/scripts/equipment/bonus_sets/set_bonus_medic_dps.py new file mode 100644 index 00000000..8d6c1346 --- /dev/null +++ b/scripts/equipment/bonus_sets/set_bonus_medic_dps.py @@ -0,0 +1,31 @@ +import sys +from services.equipment import BonusSetTemplate +from java.util import Vector + +def addBonusSet(core): + bonusSet = BonusSetTemplate("set_bonus_medic_dps") + + bonusSet.addRequiredItem("item_band_set_medic_dps_01_01") + bonusSet.addRequiredItem("item_ring_set_medic_dps_01_01") + bonusSet.addRequiredItem("item_necklace_set_medic_dps_01_01") + bonusSet.addRequiredItem("item_bracelet_r_set_medic_dps_01_01") + bonusSet.addRequiredItem("item_bracelet_l_set_medic_dps_01_01") + + core.equipmentService.addBonusSetTemplate(bonusSet) + +def handleChange(core, creature, set): + wornItems = set.getWornTemplateCount(creature) + + if wornItems == 3: + core.buffService.addBuffToCreature(creature, "set_bonus_medic_dps_1", creature) + creature.sendSystemMessage('@set_bonus:set_bonus_medic_dps_1_sys', 0) + elif wornItems == 4: + core.buffService.addBuffToCreature(creature, "set_bonus_medic_dps_2", creature) + creature.sendSystemMessage('@set_bonus:set_bonus_medic_dps_2_sys', 0) + elif wornItems == 5: + core.buffService.addBuffToCreature(creature, "set_bonus_medic_dps_3", creature) + creature.sendSystemMessage('@set_bonus:set_bonus_medic_dps_3_sys', 0) + else: + core.buffService.removeBuffFromCreatureByName(creature, "set_bonus_medic_dps_1") + core.buffService.removeBuffFromCreatureByName(creature, "set_bonus_medic_dps_2") + core.buffService.removeBuffFromCreatureByName(creature, "set_bonus_medic_dps_3") \ No newline at end of file diff --git a/scripts/equipment/bonus_sets/set_bonus_medic_utility_a.py b/scripts/equipment/bonus_sets/set_bonus_medic_utility_a.py new file mode 100644 index 00000000..6853e429 --- /dev/null +++ b/scripts/equipment/bonus_sets/set_bonus_medic_utility_a.py @@ -0,0 +1,31 @@ +import sys +from services.equipment import BonusSetTemplate +from java.util import Vector + +def addBonusSet(core): + bonusSet = BonusSetTemplate("set_bonus_medic_utility_a") + + bonusSet.addRequiredItem("item_band_set_medic_utility_a_01_01") + bonusSet.addRequiredItem("item_ring_set_medic_utility_a_01_01") + bonusSet.addRequiredItem("item_necklace_set_medic_utility_a_01_01") + bonusSet.addRequiredItem("item_bracelet_r_set_medic_utility_a_01_01") + bonusSet.addRequiredItem("item_bracelet_l_set_medic_utility_a_01_01") + + core.equipmentService.addBonusSetTemplate(bonusSet) + +def handleChange(core, creature, set): + wornItems = set.getWornTemplateCount(creature) + + if wornItems == 3: + core.buffService.addBuffToCreature(creature, "set_bonus_medic_utility_a_1", creature) + creature.sendSystemMessage('@set_bonus:set_bonus_medic_utility_a_1_sys', 0) + elif wornItems == 4: + core.buffService.addBuffToCreature(creature, "set_bonus_medic_utility_a_2", creature) + creature.sendSystemMessage('@set_bonus:set_bonus_medic_utility_a_2_sys', 0) + elif wornItems == 5: + core.buffService.addBuffToCreature(creature, "set_bonus_medic_utility_a_3", creature) + creature.sendSystemMessage('@set_bonus:set_bonus_medic_utility_a_3_sys', 0) + else: + core.buffService.removeBuffFromCreatureByName(creature, "set_bonus_medic_utility_a_1") + core.buffService.removeBuffFromCreatureByName(creature, "set_bonus_medic_utility_a_2") + core.buffService.removeBuffFromCreatureByName(creature, "set_bonus_medic_utility_a_3") \ No newline at end of file diff --git a/scripts/equipment/bonus_sets/set_bonus_medic_utility_b.py b/scripts/equipment/bonus_sets/set_bonus_medic_utility_b.py new file mode 100644 index 00000000..a46fe246 --- /dev/null +++ b/scripts/equipment/bonus_sets/set_bonus_medic_utility_b.py @@ -0,0 +1,31 @@ +import sys +from services.equipment import BonusSetTemplate +from java.util import Vector + +def addBonusSet(core): + bonusSet = BonusSetTemplate("set_bonus_medic_utility_b") + + bonusSet.addRequiredItem("item_band_set_medic_utility_b_01_01") + bonusSet.addRequiredItem("item_ring_set_medic_utility_b_01_01") + bonusSet.addRequiredItem("item_necklace_set_medic_utility_b_01_01") + bonusSet.addRequiredItem("item_bracelet_r_set_medic_utility_b_01_01") + bonusSet.addRequiredItem("item_bracelet_l_set_medic_utility_b_01_01") + + core.equipmentService.addBonusSetTemplate(bonusSet) + +def handleChange(core, creature, set): + wornItems = set.getWornTemplateCount(creature) + + if wornItems == 3: + core.buffService.addBuffToCreature(creature, "set_bonus_medic_utility_b_1", creature) + creature.sendSystemMessage('@set_bonus:set_bonus_medic_utility_b_1_sys', 0) + elif wornItems == 4: + core.buffService.addBuffToCreature(creature, "set_bonus_medic_utility_b_2", creature) + creature.sendSystemMessage('@set_bonus:set_bonus_medic_utility_b_2_sys', 0) + elif wornItems == 5: + core.buffService.addBuffToCreature(creature, "set_bonus_medic_utility_b_3", creature) + creature.sendSystemMessage('@set_bonus:set_bonus_medic_utility_b_3_sys', 0) + else: + core.buffService.removeBuffFromCreatureByName(creature, "set_bonus_medic_utility_b_1") + core.buffService.removeBuffFromCreatureByName(creature, "set_bonus_medic_utility_b_2") + core.buffService.removeBuffFromCreatureByName(creature, "set_bonus_medic_utility_b_3") \ No newline at end of file diff --git a/scripts/equipment/bonus_sets/set_bonus_officer_dps.py b/scripts/equipment/bonus_sets/set_bonus_officer_dps.py new file mode 100644 index 00000000..d990eae6 --- /dev/null +++ b/scripts/equipment/bonus_sets/set_bonus_officer_dps.py @@ -0,0 +1,31 @@ +import sys +from services.equipment import BonusSetTemplate +from java.util import Vector + +def addBonusSet(core): + bonusSet = BonusSetTemplate("set_bonus_officer_dps") + + bonusSet.addRequiredItem("item_band_set_officer_dps_01_01") + bonusSet.addRequiredItem("item_ring_set_officer_dps_01_01") + bonusSet.addRequiredItem("item_necklace_set_officer_dps_01_01") + bonusSet.addRequiredItem("item_bracelet_r_set_officer_dps_01_01") + bonusSet.addRequiredItem("item_bracelet_l_set_officer_dps_01_01") + + core.equipmentService.addBonusSetTemplate(bonusSet) + +def handleChange(core, creature, set): + wornItems = set.getWornTemplateCount(creature) + + if wornItems == 3: + core.buffService.addBuffToCreature(creature, "set_bonus_officer_dps_1", creature) + creature.sendSystemMessage('@set_bonus:set_bonus_officer_dps_1_sys', 0) + elif wornItems == 4: + core.buffService.addBuffToCreature(creature, "set_bonus_officer_dps_2", creature) + creature.sendSystemMessage('@set_bonus:set_bonus_officer_dps_2_sys', 0) + elif wornItems == 5: + core.buffService.addBuffToCreature(creature, "set_bonus_officer_dps_3", creature) + creature.sendSystemMessage('@set_bonus:set_bonus_officer_dps_3_sys', 0) + else: + core.buffService.removeBuffFromCreatureByName(creature, "set_bonus_officer_dps_1") + core.buffService.removeBuffFromCreatureByName(creature, "set_bonus_officer_dps_2") + core.buffService.removeBuffFromCreatureByName(creature, "set_bonus_officer_dps_3") \ No newline at end of file diff --git a/scripts/equipment/bonus_sets/set_bonus_officer_utility_a.py b/scripts/equipment/bonus_sets/set_bonus_officer_utility_a.py new file mode 100644 index 00000000..16558a5c --- /dev/null +++ b/scripts/equipment/bonus_sets/set_bonus_officer_utility_a.py @@ -0,0 +1,31 @@ +import sys +from services.equipment import BonusSetTemplate +from java.util import Vector + +def addBonusSet(core): + bonusSet = BonusSetTemplate("set_bonus_officer_utility_a") + + bonusSet.addRequiredItem("item_band_set_officer_utility_a_01_01") + bonusSet.addRequiredItem("item_ring_set_officer_utility_a_01_01") + bonusSet.addRequiredItem("item_necklace_set_officer_utility_a_01_01") + bonusSet.addRequiredItem("item_bracelet_r_set_officer_utility_a_01_01") + bonusSet.addRequiredItem("item_bracelet_l_set_officer_utility_a_01_01") + + core.equipmentService.addBonusSetTemplate(bonusSet) + +def handleChange(core, creature, set): + wornItems = set.getWornTemplateCount(creature) + + if wornItems == 3: + core.buffService.addBuffToCreature(creature, "set_bonus_officer_utility_a_1", creature) + creature.sendSystemMessage('@set_bonus:set_bonus_officer_utility_a_1_sys', 0) + elif wornItems == 4: + core.buffService.addBuffToCreature(creature, "set_bonus_officer_utility_a_2", creature) + creature.sendSystemMessage('@set_bonus:set_bonus_officer_utility_a_2_sys', 0) + elif wornItems == 5: + core.buffService.addBuffToCreature(creature, "set_bonus_officer_utility_a_3", creature) + creature.sendSystemMessage('@set_bonus:set_bonus_officer_utility_a_3_sys', 0) + else: + core.buffService.removeBuffFromCreatureByName(creature, "set_bonus_officer_utility_a_1") + core.buffService.removeBuffFromCreatureByName(creature, "set_bonus_officer_utility_a_2") + core.buffService.removeBuffFromCreatureByName(creature, "set_bonus_officer_utility_a_3") \ No newline at end of file diff --git a/scripts/equipment/bonus_sets/set_bonus_officer_utility_b.py b/scripts/equipment/bonus_sets/set_bonus_officer_utility_b.py new file mode 100644 index 00000000..f5308740 --- /dev/null +++ b/scripts/equipment/bonus_sets/set_bonus_officer_utility_b.py @@ -0,0 +1,31 @@ +import sys +from services.equipment import BonusSetTemplate +from java.util import Vector + +def addBonusSet(core): + bonusSet = BonusSetTemplate("set_bonus_officer_utility_b") + + bonusSet.addRequiredItem("item_band_set_officer_utility_b_01_01") + bonusSet.addRequiredItem("item_ring_set_officer_utility_b_01_01") + bonusSet.addRequiredItem("item_necklace_set_officer_utility_b_01_01") + bonusSet.addRequiredItem("item_bracelet_r_set_officer_utility_b_01_01") + bonusSet.addRequiredItem("item_bracelet_l_set_officer_utility_b_01_01") + + core.equipmentService.addBonusSetTemplate(bonusSet) + +def handleChange(core, creature, set): + wornItems = set.getWornTemplateCount(creature) + + if wornItems == 3: + core.buffService.addBuffToCreature(creature, "set_bonus_officer_utility_b_1", creature) + creature.sendSystemMessage('@set_bonus:set_bonus_officer_utility_b_1_sys', 0) + elif wornItems == 4: + core.buffService.addBuffToCreature(creature, "set_bonus_officer_utility_b_2", creature) + creature.sendSystemMessage('@set_bonus:set_bonus_officer_utility_b_2_sys', 0) + elif wornItems == 5: + core.buffService.addBuffToCreature(creature, "set_bonus_officer_utility_b_3", creature) + creature.sendSystemMessage('@set_bonus:set_bonus_officer_utility_b_3_sys', 0) + else: + core.buffService.removeBuffFromCreatureByName(creature, "set_bonus_officer_utility_b_1") + core.buffService.removeBuffFromCreatureByName(creature, "set_bonus_officer_utility_b_2") + core.buffService.removeBuffFromCreatureByName(creature, "set_bonus_officer_utility_b_3") \ No newline at end of file diff --git a/scripts/equipment/bonus_sets/set_bonus_rebel_snow_armor.py b/scripts/equipment/bonus_sets/set_bonus_rebel_snow_armor.py new file mode 100644 index 00000000..bea743e8 --- /dev/null +++ b/scripts/equipment/bonus_sets/set_bonus_rebel_snow_armor.py @@ -0,0 +1,45 @@ +import sys +from services.equipment import BonusSetTemplate +from java.util import Vector + +def addBonusSet(core): + bonusSet = BonusSetTemplate("set_bonus_rebel_snow_armor") + + bonusSet.addRequiredItem("armor_rebel_snow_backpack") + bonusSet.addRequiredItem("armor_rebel_snow_belt") + bonusSet.addRequiredItem("armor_rebel_snow_boots") + bonusSet.addRequiredItem("armor_rebel_snow_chest_plate") + bonusSet.addRequiredItem("armor_rebel_snow_gloves") + bonusSet.addRequiredItem("armor_rebel_snow_helmet") + bonusSet.addRequiredItem("armor_rebel_snow_bicep_l") + bonusSet.addRequiredItem("armor_rebel_snow_bicep_r") + bonusSet.addRequiredItem("armor_rebel_snow_bracer_l") + bonusSet.addRequiredItem("armor_rebel_snow_bracer_r") + bonusSet.addRequiredItem("armor_rebel_snow_leggings") + + core.equipmentService.addBonusSetTemplate(bonusSet) + +def handleChange(core, creature, set): + wornItems = set.getWornTemplateCount(creature) + + if wornItems == 3: + core.buffService.addBuffToCreature(creature, "set_bonus_rebel_snow_armor_3", creature) + creature.sendSystemMessage('@set_bonus:set_bonus_rebel_snow_armor_3_sys', 0) + elif wornItems == 5: + core.buffService.addBuffToCreature(creature, "set_bonus_rebel_snow_armor_5", creature) + creature.sendSystemMessage('@set_bonus:set_bonus_imperial_snow_armor_5_sys', 0) + elif wornItems == 7: + core.buffService.addBuffToCreature(creature, "set_bonus_rebel_snow_armor_7", creature) + creature.sendSystemMessage('@set_bonus:set_bonus_rebel_snow_armor_7_sys', 0) + elif wornItems == 9: + core.buffService.addBuffToCreature(creature, "set_bonus_rebel_snow_armor_9", creature) + creature.sendSystemMessage('@set_bonus:set_bonus_rebel_snow_armor_9_sys', 0) + elif wornItems == 11: + core.buffService.addBuffToCreature(creature, "set_bonus_rebel_snow_armor_11", creature) + creature.sendSystemMessage('@set_bonus:set_bonus_rebel_snow_armor_11_sys', 0) + else: + core.buffService.removeBuffFromCreatureByName(creature, "set_bonus_rebel_snow_armor_3") + core.buffService.removeBuffFromCreatureByName(creature, "set_bonus_rebel_snow_armor_5") + core.buffService.removeBuffFromCreatureByName(creature, "set_bonus_rebel_snow_armor_7") + core.buffService.removeBuffFromCreatureByName(creature, "set_bonus_rebel_snow_armor_9") + core.buffService.removeBuffFromCreatureByName(creature, "set_bonus_rebel_snow_armor_11") \ No newline at end of file diff --git a/scripts/equipment/bonus_sets/set_bonus_smuggler_dps.py b/scripts/equipment/bonus_sets/set_bonus_smuggler_dps.py new file mode 100644 index 00000000..d29d0981 --- /dev/null +++ b/scripts/equipment/bonus_sets/set_bonus_smuggler_dps.py @@ -0,0 +1,31 @@ +import sys +from services.equipment import BonusSetTemplate +from java.util import Vector + +def addBonusSet(core): + bonusSet = BonusSetTemplate("set_bonus_smuggler_dps") + + bonusSet.addRequiredItem("item_band_set_smuggler_dps_01_01") + bonusSet.addRequiredItem("item_ring_set_smuggler_dps_01_01") + bonusSet.addRequiredItem("item_necklace_set_smuggler_dps_01_01") + bonusSet.addRequiredItem("item_bracelet_r_set_smuggler_dps_01_01") + bonusSet.addRequiredItem("item_bracelet_l_set_smuggler_dps_01_01") + + core.equipmentService.addBonusSetTemplate(bonusSet) + +def handleChange(core, creature, set): + wornItems = set.getWornTemplateCount(creature) + + if wornItems == 3: + core.buffService.addBuffToCreature(creature, "set_bonus_smuggler_dps_1", creature) + creature.sendSystemMessage('@set_bonus:set_bonus_smuggler_dps_1_sys', 0) + elif wornItems == 4: + core.buffService.addBuffToCreature(creature, "set_bonus_smuggler_dps_2", creature) + creature.sendSystemMessage('@set_bonus:set_bonus_smuggler_dps_2_sys', 0) + elif wornItems == 5: + core.buffService.addBuffToCreature(creature, "set_bonus_smuggler_dps_3", creature) + creature.sendSystemMessage('@set_bonus:set_bonus_smuggler_dps_3_sys', 0) + else: + core.buffService.removeBuffFromCreatureByName(creature, "set_bonus_smuggler_dps_1") + core.buffService.removeBuffFromCreatureByName(creature, "set_bonus_smuggler_dps_2") + core.buffService.removeBuffFromCreatureByName(creature, "set_bonus_smuggler_dps_3") \ No newline at end of file diff --git a/scripts/equipment/bonus_sets/set_bonus_smuggler_utility_a.py b/scripts/equipment/bonus_sets/set_bonus_smuggler_utility_a.py new file mode 100644 index 00000000..94bec671 --- /dev/null +++ b/scripts/equipment/bonus_sets/set_bonus_smuggler_utility_a.py @@ -0,0 +1,31 @@ +import sys +from services.equipment import BonusSetTemplate +from java.util import Vector + +def addBonusSet(core): + bonusSet = BonusSetTemplate("set_bonus_smuggler_utility_a") + + bonusSet.addRequiredItem("item_band_set_smuggler_utility_a_01_01") + bonusSet.addRequiredItem("item_ring_set_smuggler_utility_a_01_01") + bonusSet.addRequiredItem("item_necklace_set_smuggler_utility_a_01_01") + bonusSet.addRequiredItem("item_bracelet_r_set_smuggler_utility_a_01_01") + bonusSet.addRequiredItem("item_bracelet_l_set_smuggler_utility_a_01_01") + + core.equipmentService.addBonusSetTemplate(bonusSet) + +def handleChange(core, creature, set): + wornItems = set.getWornTemplateCount(creature) + + if wornItems == 3: + core.buffService.addBuffToCreature(creature, "set_bonus_smuggler_utility_a_1", creature) + creature.sendSystemMessage('@set_bonus:set_bonus_smuggler_utility_a_1_sys', 0) + elif wornItems == 4: + core.buffService.addBuffToCreature(creature, "set_bonus_smuggler_utility_a_2", creature) + creature.sendSystemMessage('@set_bonus:set_bonus_smuggler_utility_a_2_sys', 0) + elif wornItems == 5: + core.buffService.addBuffToCreature(creature, "set_bonus_smuggler_utility_a_3", creature) + creature.sendSystemMessage('@set_bonus:set_bonus_smuggler_utility_a_3_sys', 0) + else: + core.buffService.removeBuffFromCreatureByName(creature, "set_bonus_smuggler_utility_a_1") + core.buffService.removeBuffFromCreatureByName(creature, "set_bonus_smuggler_utility_a_2") + core.buffService.removeBuffFromCreatureByName(creature, "set_bonus_smuggler_utility_a_3") \ No newline at end of file diff --git a/scripts/equipment/bonus_sets/set_bonus_smuggler_utility_b.py b/scripts/equipment/bonus_sets/set_bonus_smuggler_utility_b.py new file mode 100644 index 00000000..58a33c69 --- /dev/null +++ b/scripts/equipment/bonus_sets/set_bonus_smuggler_utility_b.py @@ -0,0 +1,31 @@ +import sys +from services.equipment import BonusSetTemplate +from java.util import Vector + +def addBonusSet(core): + bonusSet = BonusSetTemplate("set_bonus_smuggler_utility_b") + + bonusSet.addRequiredItem("item_band_set_smuggler_utility_b_01_01") + bonusSet.addRequiredItem("item_ring_set_smuggler_utility_b_01_01") + bonusSet.addRequiredItem("item_necklace_set_smuggler_utility_b_01_01") + bonusSet.addRequiredItem("item_bracelet_r_set_smuggler_utility_b_01_01") + bonusSet.addRequiredItem("item_bracelet_l_set_smuggler_utility_b_01_01") + + core.equipmentService.addBonusSetTemplate(bonusSet) + +def handleChange(core, creature, set): + wornItems = set.getWornTemplateCount(creature) + + if wornItems == 3: + core.buffService.addBuffToCreature(creature, "set_bonus_smuggler_utility_b_1", creature) + creature.sendSystemMessage('@set_bonus:set_bonus_smuggler_utility_b_1_sys', 0) + elif wornItems == 4: + core.buffService.addBuffToCreature(creature, "set_bonus_smuggler_utility_b_2", creature) + creature.sendSystemMessage('@set_bonus:set_bonus_smuggler_utility_b_2_sys', 0) + elif wornItems == 5: + core.buffService.addBuffToCreature(creature, "set_bonus_smuggler_utility_b_3", creature) + creature.sendSystemMessage('@set_bonus:set_bonus_smuggler_utility_b_3_sys', 0) + else: + core.buffService.removeBuffFromCreatureByName(creature, "set_bonus_smuggler_utility_b_1") + core.buffService.removeBuffFromCreatureByName(creature, "set_bonus_smuggler_utility_b_2") + core.buffService.removeBuffFromCreatureByName(creature, "set_bonus_smuggler_utility_b_3") \ No newline at end of file diff --git a/scripts/equipment/bonus_sets/set_bonus_spy_dps.py b/scripts/equipment/bonus_sets/set_bonus_spy_dps.py new file mode 100644 index 00000000..3da099f0 --- /dev/null +++ b/scripts/equipment/bonus_sets/set_bonus_spy_dps.py @@ -0,0 +1,31 @@ +import sys +from services.equipment import BonusSetTemplate +from java.util import Vector + +def addBonusSet(core): + bonusSet = BonusSetTemplate("set_bonus_spy_dps") + + bonusSet.addRequiredItem("item_band_set_spy_dps_01_01") + bonusSet.addRequiredItem("item_ring_set_spy_dps_01_01") + bonusSet.addRequiredItem("item_necklace_set_spy_dps_01_01") + bonusSet.addRequiredItem("item_bracelet_r_set_spy_dps_01_01") + bonusSet.addRequiredItem("item_bracelet_l_set_spy_dps_01_01") + + core.equipmentService.addBonusSetTemplate(bonusSet) + +def handleChange(core, creature, set): + wornItems = set.getWornTemplateCount(creature) + + if wornItems == 3: + core.buffService.addBuffToCreature(creature, "set_bonus_spy_dps_1", creature) + creature.sendSystemMessage('@set_bonus:set_bonus_spy_dps_1_sys', 0) + elif wornItems == 4: + core.buffService.addBuffToCreature(creature, "set_bonus_spy_dps_2", creature) + creature.sendSystemMessage('@set_bonus:set_bonus_spy_dps_2_sys', 0) + elif wornItems == 5: + core.buffService.addBuffToCreature(creature, "set_bonus_spy_dps_3", creature) + creature.sendSystemMessage('@set_bonus:set_bonus_spy_dps_3_sys', 0) + else: + core.buffService.removeBuffFromCreatureByName(creature, "set_bonus_spy_dps_1") + core.buffService.removeBuffFromCreatureByName(creature, "set_bonus_spy_dps_2") + core.buffService.removeBuffFromCreatureByName(creature, "set_bonus_spy_dps_3") \ No newline at end of file diff --git a/scripts/equipment/bonus_sets/set_bonus_spy_utility_a.py b/scripts/equipment/bonus_sets/set_bonus_spy_utility_a.py new file mode 100644 index 00000000..629ce660 --- /dev/null +++ b/scripts/equipment/bonus_sets/set_bonus_spy_utility_a.py @@ -0,0 +1,31 @@ +import sys +from services.equipment import BonusSetTemplate +from java.util import Vector + +def addBonusSet(core): + bonusSet = BonusSetTemplate("set_bonus_spy_utility_a") + + bonusSet.addRequiredItem("item_band_set_spy_utility_a_01_01") + bonusSet.addRequiredItem("item_ring_set_spy_utility_a_01_01") + bonusSet.addRequiredItem("item_necklace_set_spy_utility_a_01_01") + bonusSet.addRequiredItem("item_bracelet_r_set_spy_utility_a_01_01") + bonusSet.addRequiredItem("item_bracelet_l_set_spy_utility_a_01_01") + + core.equipmentService.addBonusSetTemplate(bonusSet) + +def handleChange(core, creature, set): + wornItems = set.getWornTemplateCount(creature) + + if wornItems == 3: + core.buffService.addBuffToCreature(creature, "set_bonus_spy_utility_a_1", creature) + creature.sendSystemMessage('@set_bonus:set_bonus_spy_utility_a_1_sys', 0) + elif wornItems == 4: + core.buffService.addBuffToCreature(creature, "set_bonus_spy_utility_a_2", creature) + creature.sendSystemMessage('@set_bonus:set_bonus_spy_utility_a_2_sys', 0) + elif wornItems == 5: + core.buffService.addBuffToCreature(creature, "set_bonus_spy_utility_a_3", creature) + creature.sendSystemMessage('@set_bonus:set_bonus_spy_utility_a_3_sys', 0) + else: + core.buffService.removeBuffFromCreatureByName(creature, "set_bonus_spy_utility_a_1") + core.buffService.removeBuffFromCreatureByName(creature, "set_bonus_spy_utility_a_2") + core.buffService.removeBuffFromCreatureByName(creature, "set_bonus_spy_utility_a_3") \ No newline at end of file diff --git a/scripts/equipment/bonus_sets/set_bonus_spy_utility_b.py b/scripts/equipment/bonus_sets/set_bonus_spy_utility_b.py new file mode 100644 index 00000000..b60b1c8f --- /dev/null +++ b/scripts/equipment/bonus_sets/set_bonus_spy_utility_b.py @@ -0,0 +1,31 @@ +import sys +from services.equipment import BonusSetTemplate +from java.util import Vector + +def addBonusSet(core): + bonusSet = BonusSetTemplate("set_bonus_spy_utility_b") + + bonusSet.addRequiredItem("item_band_set_spy_utility_b_01_01") + bonusSet.addRequiredItem("item_ring_set_spy_utility_b_01_01") + bonusSet.addRequiredItem("item_necklace_set_spy_utility_b_01_01") + bonusSet.addRequiredItem("item_bracelet_r_set_spy_utility_b_01_01") + bonusSet.addRequiredItem("item_bracelet_l_set_spy_utility_b_01_01") + + core.equipmentService.addBonusSetTemplate(bonusSet) + +def handleChange(core, creature, set): + wornItems = set.getWornTemplateCount(creature) + + if wornItems == 3: + core.buffService.addBuffToCreature(creature, "set_bonus_spy_utility_b_1", creature) + creature.sendSystemMessage('@set_bonus:set_bonus_spy_utility_b_1_sys', 0) + elif wornItems == 4: + core.buffService.addBuffToCreature(creature, "set_bonus_spy_utility_b_2", creature) + creature.sendSystemMessage('@set_bonus:set_bonus_spy_utility_b_2_sys', 0) + elif wornItems == 5: + core.buffService.addBuffToCreature(creature, "set_bonus_spy_utility_b_3", creature) + creature.sendSystemMessage('@set_bonus:set_bonus_spy_utility_b_3_sys', 0) + else: + core.buffService.removeBuffFromCreatureByName(creature, "set_bonus_spy_utility_b_1") + core.buffService.removeBuffFromCreatureByName(creature, "set_bonus_spy_utility_b_2") + core.buffService.removeBuffFromCreatureByName(creature, "set_bonus_spy_utility_b_3") \ No newline at end of file diff --git a/scripts/equipment/force_protection.py b/scripts/equipment/force_protection.py new file mode 100644 index 00000000..c5fd6ce0 --- /dev/null +++ b/scripts/equipment/force_protection.py @@ -0,0 +1,32 @@ +import sys + +def jedi_robe_Faint(): + return 1400 + +def jedi_robe_Weak(): + return 3000 + +def jedi_robe_Lucent(): + return 4000 + +def jedi_robe_Luminous(): + return 5000 + +def jedi_robe_Radiant(): + return 6500 + +def jedi_cloak_Faint(): + return 0 + +def jedi_cloak_Weak(): + return 0 + +def jedi_cloak_Lucent(): + return 4500 + +def jedi_cloak_Luminous(): + return 5600 + +def jedi_cloak_Radiant(): + return 6500 + \ No newline at end of file diff --git a/scripts/equipment/slot_protection.py b/scripts/equipment/slot_protection.py new file mode 100644 index 00000000..e6de1f33 --- /dev/null +++ b/scripts/equipment/slot_protection.py @@ -0,0 +1,23 @@ +import sys + +def chest2(): + return "35.70" + +def pants1(): + return "21.43" + +def hat(): + return "14.27" + +def bracer_upper_l(): + return "7.15" + +def bracer_upper_r(): + return "7.15" + +def bicep_l(): + return "7.15" + +def bicep_r(): + return "7.15" + \ No newline at end of file diff --git a/scripts/equipment/weapon_critical.py b/scripts/equipment/weapon_critical.py new file mode 100644 index 00000000..9f392f34 --- /dev/null +++ b/scripts/equipment/weapon_critical.py @@ -0,0 +1,37 @@ +import sys + +def weap_0(): + return "expertise_critical_rifle" + +def weap_1(): + return "expertise_critical_carbine" + +def weap_2(): + return "expertise_critical_pistol" + +def weap_4(): + return "expertise_critical_1h" + +def weap_5(): + return "expertise_critical_2h" + +def weap_6(): + return "expertise_critical_unarmed" + +def weap_7(): + return "expertise_critical_polearm" + +def weap_9(): + return "" + +def weap_10(): + return "" + +def weap_11(): + return "" + +def weap_12(): + return "expertise_critical_heavy" + +def weap_13(): + return "expertise_critical_heavy" \ No newline at end of file diff --git a/scripts/expertise/expertise_bh_absorbtion_1.py b/scripts/expertise/expertise_bh_absorbtion_1.py index 80b8479e..81963132 100644 --- a/scripts/expertise/expertise_bh_absorbtion_1.py +++ b/scripts/expertise/expertise_bh_absorbtion_1.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'bounty_hunter_1a': - return - - actor.addSkill('expertise_bh_absorbtion_1') - - actor.addSkillMod('expertise_innate_protection_all', 125) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'bounty_hunter_1a': - return - - actor.removeSkill('expertise_bh_absorbtion_1') - - actor.removeSkillMod('expertise_innate_protection_all', 125) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_bh_absorption_1") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_bh_absorption_1") return diff --git a/scripts/expertise/expertise_bh_absorbtion_2.py b/scripts/expertise/expertise_bh_absorbtion_2.py index 96a6ff72..732e9847 100644 --- a/scripts/expertise/expertise_bh_absorbtion_2.py +++ b/scripts/expertise/expertise_bh_absorbtion_2.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'bounty_hunter_1a': - return - - actor.addSkill('expertise_bh_absorbtion_2') - - actor.addSkillMod('expertise_innate_protection_all', 125) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'bounty_hunter_1a': - return - - actor.removeSkill('expertise_bh_absorbtion_2') - - actor.removeSkillMod('expertise_innate_protection_all', 125) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_bh_absorption_2") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_bh_absorption_2") return diff --git a/scripts/expertise/expertise_bh_absorbtion_3.py b/scripts/expertise/expertise_bh_absorbtion_3.py index e46daa07..b8d44ab2 100644 --- a/scripts/expertise/expertise_bh_absorbtion_3.py +++ b/scripts/expertise/expertise_bh_absorbtion_3.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'bounty_hunter_1a': - return - - actor.addSkill('expertise_bh_absorbtion_3') - - actor.addSkillMod('expertise_innate_protection_all', 125) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'bounty_hunter_1a': - return - - actor.removeSkill('expertise_bh_absorbtion_3') - - actor.removeSkillMod('expertise_innate_protection_all', 125) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_bh_absorption_3") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_bh_absorption_3") return diff --git a/scripts/expertise/expertise_bh_absorbtion_4.py b/scripts/expertise/expertise_bh_absorbtion_4.py index f62d4493..3210a0b0 100644 --- a/scripts/expertise/expertise_bh_absorbtion_4.py +++ b/scripts/expertise/expertise_bh_absorbtion_4.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'bounty_hunter_1a': - return - - actor.addSkill('expertise_bh_absorbtion_4') - - actor.addSkillMod('expertise_innate_protection_all', 125) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'bounty_hunter_1a': - return - - actor.removeSkill('expertise_bh_absorbtion_4') - - actor.removeSkillMod('expertise_innate_protection_all', 125) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_bh_absorption_4") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_bh_absorption_4") return diff --git a/scripts/expertise/expertise_bh_agility_1.py b/scripts/expertise/expertise_bh_agility_1.py index aab87823..007b7232 100644 --- a/scripts/expertise/expertise_bh_agility_1.py +++ b/scripts/expertise/expertise_bh_agility_1.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'bounty_hunter_1a': - return - - actor.addSkill('expertise_bh_agility_1') - - actor.addSkillMod('agility_modified', 25) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'bounty_hunter_1a': - return - - actor.removeSkill('expertise_bh_agility_1') - - actor.removeSkillMod('agility_modified', 25) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_bh_agility_1") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_bh_agility_1") return diff --git a/scripts/expertise/expertise_bh_agility_2.py b/scripts/expertise/expertise_bh_agility_2.py index 2724b112..2d896352 100644 --- a/scripts/expertise/expertise_bh_agility_2.py +++ b/scripts/expertise/expertise_bh_agility_2.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'bounty_hunter_1a': - return - - actor.addSkill('expertise_bh_agility_2') - - actor.addSkillMod('agility_modified', 25) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'bounty_hunter_1a': - return - - actor.removeSkill('expertise_bh_agility_2') - - actor.removeSkillMod('agility_modified', 25) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_bh_agility_1") return def removeAbilities(core, actor, player): - - - return + actor.removeAbility("expertise_bh_agility_1") + return \ No newline at end of file diff --git a/scripts/expertise/expertise_bh_agility_3.py b/scripts/expertise/expertise_bh_agility_3.py index d869fbc4..d55eaa3a 100644 --- a/scripts/expertise/expertise_bh_agility_3.py +++ b/scripts/expertise/expertise_bh_agility_3.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'bounty_hunter_1a': - return - - actor.addSkill('expertise_bh_agility_3') - - actor.addSkillMod('agility_modified', 25) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'bounty_hunter_1a': - return - - actor.removeSkill('expertise_bh_agility_3') - - actor.removeSkillMod('agility_modified', 25) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_bh_agility_3") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_bh_agility_3") return diff --git a/scripts/expertise/expertise_bh_agility_4.py b/scripts/expertise/expertise_bh_agility_4.py index 6152ee4b..84d67d3f 100644 --- a/scripts/expertise/expertise_bh_agility_4.py +++ b/scripts/expertise/expertise_bh_agility_4.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'bounty_hunter_1a': - return - - actor.addSkill('expertise_bh_agility_4') - - actor.addSkillMod('agility_modified', 25) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'bounty_hunter_1a': - return - - actor.removeSkill('expertise_bh_agility_4') - - actor.removeSkillMod('agility_modified', 25) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_bh_agility_4") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_bh_agility_4") return diff --git a/scripts/expertise/expertise_bh_amb_act_1.py b/scripts/expertise/expertise_bh_amb_act_1.py index 7a0c4ee0..55a6b1d7 100644 --- a/scripts/expertise/expertise_bh_amb_act_1.py +++ b/scripts/expertise/expertise_bh_amb_act_1.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'bounty_hunter_1a': - return - - actor.addSkill('expertise_bh_amb_act_1') - - actor.addSkillMod('expertise_action_line_dm_crit', 5) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'bounty_hunter_1a': - return - - actor.removeSkill('expertise_bh_amb_act_1') - - actor.removeSkillMod('expertise_action_line_dm_crit', 5) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_bh_amb_act_1") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_bh_amb_act_1") return diff --git a/scripts/expertise/expertise_bh_amb_act_2.py b/scripts/expertise/expertise_bh_amb_act_2.py index a19f7ba9..e1d3bd74 100644 --- a/scripts/expertise/expertise_bh_amb_act_2.py +++ b/scripts/expertise/expertise_bh_amb_act_2.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'bounty_hunter_1a': - return - - actor.addSkill('expertise_bh_amb_act_2') - - actor.addSkillMod('expertise_action_line_dm_crit', 5) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'bounty_hunter_1a': - return - - actor.removeSkill('expertise_bh_amb_act_2') - - actor.removeSkillMod('expertise_action_line_dm_crit', 5) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_bh_amb_act_2") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_bh_amb_act_2") return diff --git a/scripts/expertise/expertise_bh_amb_act_3.py b/scripts/expertise/expertise_bh_amb_act_3.py index cb649c64..da81f8ad 100644 --- a/scripts/expertise/expertise_bh_amb_act_3.py +++ b/scripts/expertise/expertise_bh_amb_act_3.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'bounty_hunter_1a': - return - - actor.addSkill('expertise_bh_amb_act_3') - - actor.addSkillMod('expertise_action_line_dm_crit', 10) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'bounty_hunter_1a': - return - - actor.removeSkill('expertise_bh_amb_act_3') - - actor.removeSkillMod('expertise_action_line_dm_crit', 10) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_bh_amb_act_3") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_bh_amb_act_3") return diff --git a/scripts/expertise/expertise_bh_amb_cool_1.py b/scripts/expertise/expertise_bh_amb_cool_1.py index 8749deaa..6e07401d 100644 --- a/scripts/expertise/expertise_bh_amb_cool_1.py +++ b/scripts/expertise/expertise_bh_amb_cool_1.py @@ -1,48 +1,10 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'bounty_hunter_1a': - return - - actor.addSkill('expertise_bh_amb_cool_1') - - actor.addSkillMod('expertise_cooldown_line_dm_crit', 10) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'bounty_hunter_1a': - return - - actor.removeSkill('expertise_bh_amb_cool_1') - - actor.removeSkillMod('expertise_cooldown_line_dm_crit', 10) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_bh_amb_cool_1") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_bh_amb_cool_1") return + \ No newline at end of file diff --git a/scripts/expertise/expertise_bh_amb_cool_2.py b/scripts/expertise/expertise_bh_amb_cool_2.py index a7a26a52..b1e0427e 100644 --- a/scripts/expertise/expertise_bh_amb_cool_2.py +++ b/scripts/expertise/expertise_bh_amb_cool_2.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'bounty_hunter_1a': - return - - actor.addSkill('expertise_bh_amb_cool_2') - - actor.addSkillMod('expertise_cooldown_line_dm_crit', 10) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'bounty_hunter_1a': - return - - actor.removeSkill('expertise_bh_amb_cool_2') - - actor.removeSkillMod('expertise_cooldown_line_dm_crit', 10) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("bh_amb_cool_2") return def removeAbilities(core, actor, player): - - + actor.removeAbility("bh_amb_cool_2") return diff --git a/scripts/expertise/expertise_bh_amb_dam_1.py b/scripts/expertise/expertise_bh_amb_dam_1.py index 7d057532..932bf6e5 100644 --- a/scripts/expertise/expertise_bh_amb_dam_1.py +++ b/scripts/expertise/expertise_bh_amb_dam_1.py @@ -1,48 +1,10 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'bounty_hunter_1a': - return - - actor.addSkill('expertise_bh_amb_dam_1') - - actor.addSkillMod('expertise_damage_line_dm_crit', 10) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'bounty_hunter_1a': - return - - actor.removeSkill('expertise_bh_amb_dam_1') - - actor.removeSkillMod('expertise_damage_line_dm_crit', 10) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_bh_amb_dam_1") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_bh_amb_dam_1") return + \ No newline at end of file diff --git a/scripts/expertise/expertise_bh_amb_dam_2.py b/scripts/expertise/expertise_bh_amb_dam_2.py index df566fbd..53bdcb8a 100644 --- a/scripts/expertise/expertise_bh_amb_dam_2.py +++ b/scripts/expertise/expertise_bh_amb_dam_2.py @@ -1,48 +1,10 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'bounty_hunter_1a': - return - - actor.addSkill('expertise_bh_amb_dam_2') - - actor.addSkillMod('expertise_damage_line_dm_crit', 10) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'bounty_hunter_1a': - return - - actor.removeSkill('expertise_bh_amb_dam_2') - - actor.removeSkillMod('expertise_damage_line_dm_crit', 10) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_bh_amb_dam_2") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_bh_amb_dam_2") return + \ No newline at end of file diff --git a/scripts/expertise/expertise_bh_amb_dam_3.py b/scripts/expertise/expertise_bh_amb_dam_3.py index ba9a05e9..02832491 100644 --- a/scripts/expertise/expertise_bh_amb_dam_3.py +++ b/scripts/expertise/expertise_bh_amb_dam_3.py @@ -1,48 +1,10 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'bounty_hunter_1a': - return - - actor.addSkill('expertise_bh_amb_dam_3') - - actor.addSkillMod('expertise_damage_line_dm_crit', 10) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'bounty_hunter_1a': - return - - actor.removeSkill('expertise_bh_amb_dam_3') - - actor.removeSkillMod('expertise_damage_line_dm_crit', 10) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_bh_amb_dam_3") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_bh_amb_dam_3") return + \ No newline at end of file diff --git a/scripts/expertise/expertise_bh_amb_dam_cool.py b/scripts/expertise/expertise_bh_amb_dam_cool.py index 1f9d3b03..633d3846 100644 --- a/scripts/expertise/expertise_bh_amb_dam_cool.py +++ b/scripts/expertise/expertise_bh_amb_dam_cool.py @@ -1,50 +1,10 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'bounty_hunter_1a': - return - - actor.addSkill('expertise_bh_amb_dam_cool') - - actor.addSkillMod('expertise_dm_crit_advanced', 1) - actor.addSkillMod('expertise_critical_line_dm_crit', 10) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'bounty_hunter_1a': - return - - actor.removeSkill('expertise_bh_amb_dam_cool') - - actor.removeSkillMod('expertise_dm_crit_advanced', 1) - actor.removeSkillMod('expertise_critical_line_dm_crit', 10) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_bh_dam_cool") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_bh_amb_dam_cool") return + \ No newline at end of file diff --git a/scripts/expertise/expertise_bh_armor_duelist_1.py b/scripts/expertise/expertise_bh_armor_duelist_1.py index a8955362..c4529a37 100644 --- a/scripts/expertise/expertise_bh_armor_duelist_1.py +++ b/scripts/expertise/expertise_bh_armor_duelist_1.py @@ -1,48 +1,22 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'bounty_hunter_1a': - return - - actor.addSkill('expertise_bh_armor_duelist_1') - - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'bounty_hunter_1a': - return - - actor.removeSkill('expertise_bh_armor_duelist_1') - - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - actor.addAbility('bh_armor_duelist_1') - + if actor.getLevel() >= 26: + actor.addAbility("bh_armor_duelist_1") + if actor.getLevel() >= 34: + actor.addAbility("bh_armor_duelist_2") + if actor.getLevel() >= 48: + actor.addAbility("bh_armor_duelist_3") + if actor.getLevel() >= 62: + actor.addAbility("bh_armor_duelist_4") + if actor.getLevel() >= 76: + actor.addAbility("bh_armor_duelist_5") return def removeAbilities(core, actor, player): - - actor.removeAbility('bh_armor_duelist_1') - + actor.removeAbility("bh_armor_duelist_1") + actor.removeAbility("bh_armor_duelist_2") + actor.removeAbility("bh_armor_duelist_3") + actor.removeAbility("bh_armor_duelist_4") + actor.removeAbility("bh_armor_duelist_5") return diff --git a/scripts/expertise/expertise_bh_armor_eng_1.py b/scripts/expertise/expertise_bh_armor_eng_1.py index dfcf05f9..a67e6dee 100644 --- a/scripts/expertise/expertise_bh_armor_eng_1.py +++ b/scripts/expertise/expertise_bh_armor_eng_1.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'bounty_hunter_1a': - return - - actor.addSkill('expertise_bh_armor_eng_1') - - actor.addSkillMod('expertise_innate_protection_energy', 500) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'bounty_hunter_1a': - return - - actor.removeSkill('expertise_bh_armor_eng_1') - - actor.removeSkillMod('expertise_innate_protection_energy', 500) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_bh_armor_eng_1") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_bh_armor_eng_1") return diff --git a/scripts/expertise/expertise_bh_armor_eng_2.py b/scripts/expertise/expertise_bh_armor_eng_2.py index c04179da..86521742 100644 --- a/scripts/expertise/expertise_bh_armor_eng_2.py +++ b/scripts/expertise/expertise_bh_armor_eng_2.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'bounty_hunter_1a': - return - - actor.addSkill('expertise_bh_armor_eng_2') - - actor.addSkillMod('expertise_innate_protection_energy', 500) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'bounty_hunter_1a': - return - - actor.removeSkill('expertise_bh_armor_eng_2') - - actor.removeSkillMod('expertise_innate_protection_energy', 500) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_bh_armor_eng_2") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_bh_armor_eng_2") return diff --git a/scripts/expertise/expertise_bh_armor_eng_3.py b/scripts/expertise/expertise_bh_armor_eng_3.py index a175c1bc..9674d322 100644 --- a/scripts/expertise/expertise_bh_armor_eng_3.py +++ b/scripts/expertise/expertise_bh_armor_eng_3.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'bounty_hunter_1a': - return - - actor.addSkill('expertise_bh_armor_eng_3') - - actor.addSkillMod('expertise_innate_protection_energy', 500) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'bounty_hunter_1a': - return - - actor.removeSkill('expertise_bh_armor_eng_3') - - actor.removeSkillMod('expertise_innate_protection_energy', 500) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_bh_armor_eng_3") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_bh_armor_eng_3") return diff --git a/scripts/expertise/expertise_bh_armor_eng_4.py b/scripts/expertise/expertise_bh_armor_eng_4.py index 5157fef5..2282200c 100644 --- a/scripts/expertise/expertise_bh_armor_eng_4.py +++ b/scripts/expertise/expertise_bh_armor_eng_4.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'bounty_hunter_1a': - return - - actor.addSkill('expertise_bh_armor_eng_4') - - actor.addSkillMod('expertise_innate_protection_energy', 500) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'bounty_hunter_1a': - return - - actor.removeSkill('expertise_bh_armor_eng_4') - - actor.removeSkillMod('expertise_innate_protection_energy', 500) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_bh_armor_eng_4") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_bh_armor_eng_4") return diff --git a/scripts/expertise/expertise_bh_armor_kin_1.py b/scripts/expertise/expertise_bh_armor_kin_1.py index 0f0fb7f5..91acd05a 100644 --- a/scripts/expertise/expertise_bh_armor_kin_1.py +++ b/scripts/expertise/expertise_bh_armor_kin_1.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'bounty_hunter_1a': - return - - actor.addSkill('expertise_bh_armor_kin_1') - - actor.addSkillMod('expertise_innate_protection_kinetic', 500) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'bounty_hunter_1a': - return - - actor.removeSkill('expertise_bh_armor_kin_1') - - actor.removeSkillMod('expertise_innate_protection_kinetic', 500) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_bh_armor_kin_1") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_bh_armor_kin_1") return diff --git a/scripts/expertise/expertise_bh_armor_kin_2.py b/scripts/expertise/expertise_bh_armor_kin_2.py index c4897930..8e603d50 100644 --- a/scripts/expertise/expertise_bh_armor_kin_2.py +++ b/scripts/expertise/expertise_bh_armor_kin_2.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'bounty_hunter_1a': - return - - actor.addSkill('expertise_bh_armor_kin_2') - - actor.addSkillMod('expertise_innate_protection_kinetic', 500) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'bounty_hunter_1a': - return - - actor.removeSkill('expertise_bh_armor_kin_2') - - actor.removeSkillMod('expertise_innate_protection_kinetic', 500) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_bh_armor_kin_2") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_bh_armor_kin_2") return diff --git a/scripts/expertise/expertise_bh_armor_kin_3.py b/scripts/expertise/expertise_bh_armor_kin_3.py index 2eacb73d..d54efcba 100644 --- a/scripts/expertise/expertise_bh_armor_kin_3.py +++ b/scripts/expertise/expertise_bh_armor_kin_3.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'bounty_hunter_1a': - return - - actor.addSkill('expertise_bh_armor_kin_3') - - actor.addSkillMod('expertise_innate_protection_kinetic', 500) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'bounty_hunter_1a': - return - - actor.removeSkill('expertise_bh_armor_kin_3') - - actor.removeSkillMod('expertise_innate_protection_kinetic', 500) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_bh_armor_kin_3") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_bh_armor_kin_3") return diff --git a/scripts/expertise/expertise_bh_armor_kin_4.py b/scripts/expertise/expertise_bh_armor_kin_4.py index 7d0980cc..7351a899 100644 --- a/scripts/expertise/expertise_bh_armor_kin_4.py +++ b/scripts/expertise/expertise_bh_armor_kin_4.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'bounty_hunter_1a': - return - - actor.addSkill('expertise_bh_armor_kin_4') - - actor.addSkillMod('expertise_innate_protection_kinetic', 500) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'bounty_hunter_1a': - return - - actor.removeSkill('expertise_bh_armor_kin_4') - - actor.removeSkillMod('expertise_innate_protection_kinetic', 500) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_bh_armor_kin_4") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_bh_armor_kin_4") return diff --git a/scripts/expertise/expertise_bh_armor_mgb_1.py b/scripts/expertise/expertise_bh_armor_mgb_1.py index b96d73ae..f6a10221 100644 --- a/scripts/expertise/expertise_bh_armor_mgb_1.py +++ b/scripts/expertise/expertise_bh_armor_mgb_1.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'bounty_hunter_1a': - return - - actor.addSkill('expertise_bh_armor_mgb_1') - - actor.addSkillMod('expertise_dodge', 2) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'bounty_hunter_1a': - return - - actor.removeSkill('expertise_bh_armor_mgb_1') - - actor.removeSkillMod('expertise_dodge', 2) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_bh_armor_mgb_1") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_bh_armor_mgb_1") return diff --git a/scripts/expertise/expertise_bh_armor_mgb_2.py b/scripts/expertise/expertise_bh_armor_mgb_2.py index 3712b6e1..b71a226c 100644 --- a/scripts/expertise/expertise_bh_armor_mgb_2.py +++ b/scripts/expertise/expertise_bh_armor_mgb_2.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'bounty_hunter_1a': - return - - actor.addSkill('expertise_bh_armor_mgb_2') - - actor.addSkillMod('expertise_dodge', 2) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'bounty_hunter_1a': - return - - actor.removeSkill('expertise_bh_armor_mgb_2') - - actor.removeSkillMod('expertise_dodge', 2) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_bh_armor_mgb_2") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_bh_armor_mgb_2") return diff --git a/scripts/expertise/expertise_bh_armor_mgb_3.py b/scripts/expertise/expertise_bh_armor_mgb_3.py index 10a05268..957b4b88 100644 --- a/scripts/expertise/expertise_bh_armor_mgb_3.py +++ b/scripts/expertise/expertise_bh_armor_mgb_3.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'bounty_hunter_1a': - return - - actor.addSkill('expertise_bh_armor_mgb_3') - - actor.addSkillMod('expertise_dodge', 2) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'bounty_hunter_1a': - return - - actor.removeSkill('expertise_bh_armor_mgb_3') - - actor.removeSkillMod('expertise_dodge', 2) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_bh_armor_mgb_3") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_bh_armor_mgb_3") return diff --git a/scripts/expertise/expertise_bh_armor_rgb_1.py b/scripts/expertise/expertise_bh_armor_rgb_1.py index d529151c..c1d48b96 100644 --- a/scripts/expertise/expertise_bh_armor_rgb_1.py +++ b/scripts/expertise/expertise_bh_armor_rgb_1.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'bounty_hunter_1a': - return - - actor.addSkill('expertise_bh_armor_rgb_1') - - actor.addSkillMod('expertise_critical_hit_reduction', 2) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'bounty_hunter_1a': - return - - actor.removeSkill('expertise_bh_armor_rgb_1') - - actor.removeSkillMod('expertise_critical_hit_reduction', 2) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_bh_armor_rgb_1") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_bh_armor_rgb_1") return diff --git a/scripts/expertise/expertise_bh_armor_rgb_2.py b/scripts/expertise/expertise_bh_armor_rgb_2.py index 54da7d9e..d0757ff7 100644 --- a/scripts/expertise/expertise_bh_armor_rgb_2.py +++ b/scripts/expertise/expertise_bh_armor_rgb_2.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'bounty_hunter_1a': - return - - actor.addSkill('expertise_bh_armor_rgb_2') - - actor.addSkillMod('expertise_critical_hit_reduction', 2) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'bounty_hunter_1a': - return - - actor.removeSkill('expertise_bh_armor_rgb_2') - - actor.removeSkillMod('expertise_critical_hit_reduction', 2) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_bh_armor_rgb_2") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_bh_armor_rgb_2") return diff --git a/scripts/expertise/expertise_bh_armor_rgb_3.py b/scripts/expertise/expertise_bh_armor_rgb_3.py index c94386c5..7f8e5879 100644 --- a/scripts/expertise/expertise_bh_armor_rgb_3.py +++ b/scripts/expertise/expertise_bh_armor_rgb_3.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'bounty_hunter_1a': - return - - actor.addSkill('expertise_bh_armor_rgb_3') - - actor.addSkillMod('expertise_critical_hit_reduction', 2) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'bounty_hunter_1a': - return - - actor.removeSkill('expertise_bh_armor_rgb_3') - - actor.removeSkillMod('expertise_critical_hit_reduction', 2) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_bh_armor_rgb_3") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_bh_armor_rgb_3") return diff --git a/scripts/expertise/expertise_bh_armor_sprint_1.py b/scripts/expertise/expertise_bh_armor_sprint_1.py index 247c23e1..b0ebf1ec 100644 --- a/scripts/expertise/expertise_bh_armor_sprint_1.py +++ b/scripts/expertise/expertise_bh_armor_sprint_1.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'bounty_hunter_1a': - return - - actor.addSkill('expertise_bh_armor_sprint_1') - - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'bounty_hunter_1a': - return - - actor.removeSkill('expertise_bh_armor_sprint_1') - - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - actor.addAbility('bh_armor_sprint_1') - + actor.addAbility("bh_armor_sprint_1") return def removeAbilities(core, actor, player): - - actor.removeAbility('bh_armor_sprint_1') - + actor.removeAbility("bh_armor_sprint_1") return diff --git a/scripts/expertise/expertise_bh_ass_act_1.py b/scripts/expertise/expertise_bh_ass_act_1.py index 4b60f445..35100c39 100644 --- a/scripts/expertise/expertise_bh_ass_act_1.py +++ b/scripts/expertise/expertise_bh_ass_act_1.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'bounty_hunter_1a': - return - - actor.addSkill('expertise_bh_ass_act_1') - - actor.addSkillMod('expertise_action_line_dm', 5) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'bounty_hunter_1a': - return - - actor.removeSkill('expertise_bh_ass_act_1') - - actor.removeSkillMod('expertise_action_line_dm', 5) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_bh_ass_act_1") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_bh_ass_act_1") return diff --git a/scripts/expertise/expertise_bh_ass_act_2.py b/scripts/expertise/expertise_bh_ass_act_2.py index 07f25018..e647dfd4 100644 --- a/scripts/expertise/expertise_bh_ass_act_2.py +++ b/scripts/expertise/expertise_bh_ass_act_2.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'bounty_hunter_1a': - return - - actor.addSkill('expertise_bh_ass_act_2') - - actor.addSkillMod('expertise_action_line_dm', 5) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'bounty_hunter_1a': - return - - actor.removeSkill('expertise_bh_ass_act_2') - - actor.removeSkillMod('expertise_action_line_dm', 5) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_bh_ass_act_2") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_bh_ass_act_2") return diff --git a/scripts/expertise/expertise_bh_ass_act_3.py b/scripts/expertise/expertise_bh_ass_act_3.py index c24cbdd3..7011247d 100644 --- a/scripts/expertise/expertise_bh_ass_act_3.py +++ b/scripts/expertise/expertise_bh_ass_act_3.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'bounty_hunter_1a': - return - - actor.addSkill('expertise_bh_ass_act_3') - - actor.addSkillMod('expertise_action_line_dm', 10) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'bounty_hunter_1a': - return - - actor.removeSkill('expertise_bh_ass_act_3') - - actor.removeSkillMod('expertise_action_line_dm', 10) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_bh_ass_act_3") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_bh_ass_act_3") return diff --git a/scripts/expertise/expertise_bh_ass_cool_1.py b/scripts/expertise/expertise_bh_ass_cool_1.py index aaff3675..c9d4f6bf 100644 --- a/scripts/expertise/expertise_bh_ass_cool_1.py +++ b/scripts/expertise/expertise_bh_ass_cool_1.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'bounty_hunter_1a': - return - - actor.addSkill('expertise_bh_ass_cool_1') - - actor.addSkillMod('expertise_cooldown_line_dm', 5) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'bounty_hunter_1a': - return - - actor.removeSkill('expertise_bh_ass_cool_1') - - actor.removeSkillMod('expertise_cooldown_line_dm', 5) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_bh_ass_cool_1") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_bh_ass_cool_1") return diff --git a/scripts/expertise/expertise_bh_ass_cool_2.py b/scripts/expertise/expertise_bh_ass_cool_2.py index af01e9aa..4532702b 100644 --- a/scripts/expertise/expertise_bh_ass_cool_2.py +++ b/scripts/expertise/expertise_bh_ass_cool_2.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'bounty_hunter_1a': - return - - actor.addSkill('expertise_bh_ass_cool_2') - - actor.addSkillMod('expertise_cooldown_line_dm', 5) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'bounty_hunter_1a': - return - - actor.removeSkill('expertise_bh_ass_cool_2') - - actor.removeSkillMod('expertise_cooldown_line_dm', 5) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_bh_ass_cool_2") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_bh_ass_cool_2") return diff --git a/scripts/expertise/expertise_bh_ass_dam_1.py b/scripts/expertise/expertise_bh_ass_dam_1.py index 04fb74e7..7d52ed2f 100644 --- a/scripts/expertise/expertise_bh_ass_dam_1.py +++ b/scripts/expertise/expertise_bh_ass_dam_1.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'bounty_hunter_1a': - return - - actor.addSkill('expertise_bh_ass_dam_1') - - actor.addSkillMod('expertise_damage_line_dm', 5) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'bounty_hunter_1a': - return - - actor.removeSkill('expertise_bh_ass_dam_1') - - actor.removeSkillMod('expertise_damage_line_dm', 5) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_bh_ass_dam_1") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_bh_ass_dam_1") return diff --git a/scripts/expertise/expertise_bh_ass_dam_2.py b/scripts/expertise/expertise_bh_ass_dam_2.py index ea7ec873..a6587bd4 100644 --- a/scripts/expertise/expertise_bh_ass_dam_2.py +++ b/scripts/expertise/expertise_bh_ass_dam_2.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'bounty_hunter_1a': - return - - actor.addSkill('expertise_bh_ass_dam_2') - - actor.addSkillMod('expertise_damage_line_dm', 5) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'bounty_hunter_1a': - return - - actor.removeSkill('expertise_bh_ass_dam_2') - - actor.removeSkillMod('expertise_damage_line_dm', 5) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_bh_ass_dam_2") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_bh_ass_dam_2") return diff --git a/scripts/expertise/expertise_bh_ass_dam_3.py b/scripts/expertise/expertise_bh_ass_dam_3.py index 7fce7d94..57e2d7c4 100644 --- a/scripts/expertise/expertise_bh_ass_dam_3.py +++ b/scripts/expertise/expertise_bh_ass_dam_3.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'bounty_hunter_1a': - return - - actor.addSkill('expertise_bh_ass_dam_3') - - actor.addSkillMod('expertise_damage_line_dm', 5) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'bounty_hunter_1a': - return - - actor.removeSkill('expertise_bh_ass_dam_3') - - actor.removeSkillMod('expertise_damage_line_dm', 5) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_bh_ass_dam_3") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_bh_ass_dam_3") return diff --git a/scripts/expertise/expertise_bh_carbine_act_1.py b/scripts/expertise/expertise_bh_carbine_act_1.py index ce2dd758..bb7e39f3 100644 --- a/scripts/expertise/expertise_bh_carbine_act_1.py +++ b/scripts/expertise/expertise_bh_carbine_act_1.py @@ -1,50 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'bounty_hunter_1a': - return - - actor.addSkill('expertise_bh_carbine_act_1') - - actor.addSkillMod('expertise_action_weapon_1', 3) - actor.addSkillMod('expertise_action_weapon_2', 3) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'bounty_hunter_1a': - return - - actor.removeSkill('expertise_bh_carbine_act_1') - - actor.removeSkillMod('expertise_action_weapon_1', 3) - actor.removeSkillMod('expertise_action_weapon_2', 3) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_bh_carbine_act_1") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_bh_carbine_act_1") return diff --git a/scripts/expertise/expertise_bh_carbine_act_2.py b/scripts/expertise/expertise_bh_carbine_act_2.py index bb494e3f..c2024eab 100644 --- a/scripts/expertise/expertise_bh_carbine_act_2.py +++ b/scripts/expertise/expertise_bh_carbine_act_2.py @@ -1,50 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'bounty_hunter_1a': - return - - actor.addSkill('expertise_bh_carbine_act_2') - - actor.addSkillMod('expertise_action_weapon_1', 3) - actor.addSkillMod('expertise_action_weapon_2', 3) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'bounty_hunter_1a': - return - - actor.removeSkill('expertise_bh_carbine_act_2') - - actor.removeSkillMod('expertise_action_weapon_1', 3) - actor.removeSkillMod('expertise_action_weapon_2', 3) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_bh_carbine_act_2") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_bh_carbine_act_2") return diff --git a/scripts/expertise/expertise_bh_carbine_act_3.py b/scripts/expertise/expertise_bh_carbine_act_3.py index 6f07762a..ddb0ac36 100644 --- a/scripts/expertise/expertise_bh_carbine_act_3.py +++ b/scripts/expertise/expertise_bh_carbine_act_3.py @@ -1,50 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'bounty_hunter_1a': - return - - actor.addSkill('expertise_bh_carbine_act_3') - - actor.addSkillMod('expertise_action_weapon_1', 4) - actor.addSkillMod('expertise_action_weapon_2', 4) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'bounty_hunter_1a': - return - - actor.removeSkill('expertise_bh_carbine_act_3') - - actor.removeSkillMod('expertise_action_weapon_1', 4) - actor.removeSkillMod('expertise_action_weapon_2', 4) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_bh_carbine_act_3") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_bh_carbine_act_3") return diff --git a/scripts/expertise/expertise_bh_carbine_act_4.py b/scripts/expertise/expertise_bh_carbine_act_4.py index 96142cc2..30d33f95 100644 --- a/scripts/expertise/expertise_bh_carbine_act_4.py +++ b/scripts/expertise/expertise_bh_carbine_act_4.py @@ -1,50 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'bounty_hunter_1a': - return - - actor.addSkill('expertise_bh_carbine_act_4') - - actor.addSkillMod('expertise_action_weapon_1', 5) - actor.addSkillMod('expertise_action_weapon_2', 5) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'bounty_hunter_1a': - return - - actor.removeSkill('expertise_bh_carbine_act_4') - - actor.removeSkillMod('expertise_action_weapon_1', 5) - actor.removeSkillMod('expertise_action_weapon_2', 5) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_bh_carbine_act_4") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_bh_carbine_act_4") return diff --git a/scripts/expertise/expertise_bh_carbine_crit_1.py b/scripts/expertise/expertise_bh_carbine_crit_1.py index 131db4c7..76d07aa9 100644 --- a/scripts/expertise/expertise_bh_carbine_crit_1.py +++ b/scripts/expertise/expertise_bh_carbine_crit_1.py @@ -1,54 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'bounty_hunter_1a': - return - - actor.addSkill('expertise_bh_carbine_crit_1') - - actor.addSkillMod('expertise_range_bonus_carbine', 10) - actor.addSkillMod('expertise_undiminished_critical_carbine', 10) - actor.addSkillMod('expertise_undiminished_critical_pistol', 10) - actor.addSkillMod('expertise_range_bonus_pistol', 5) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'bounty_hunter_1a': - return - - actor.removeSkill('expertise_bh_carbine_crit_1') - - actor.removeSkillMod('expertise_range_bonus_carbine', 10) - actor.removeSkillMod('expertise_undiminished_critical_carbine', 10) - actor.removeSkillMod('expertise_undiminished_critical_pistol', 10) - actor.removeSkillMod('expertise_range_bonus_pistol', 5) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_bh_carbine_crit_1") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_bh_carbine_crit_1") return diff --git a/scripts/expertise/expertise_bh_carbine_dam_1.py b/scripts/expertise/expertise_bh_carbine_dam_1.py index 4681ff5a..101aaaa0 100644 --- a/scripts/expertise/expertise_bh_carbine_dam_1.py +++ b/scripts/expertise/expertise_bh_carbine_dam_1.py @@ -1,50 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'bounty_hunter_1a': - return - - actor.addSkill('expertise_bh_carbine_dam_1') - - actor.addSkillMod('expertise_damage_weapon_1', 2) - actor.addSkillMod('expertise_damage_weapon_2', 2) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'bounty_hunter_1a': - return - - actor.removeSkill('expertise_bh_carbine_dam_1') - - actor.removeSkillMod('expertise_damage_weapon_1', 2) - actor.removeSkillMod('expertise_damage_weapon_2', 2) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_bh_carbine_dam_1") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_bh_carbine_dam_1") return diff --git a/scripts/expertise/expertise_bh_carbine_dam_2.py b/scripts/expertise/expertise_bh_carbine_dam_2.py index bca390dc..311fdf16 100644 --- a/scripts/expertise/expertise_bh_carbine_dam_2.py +++ b/scripts/expertise/expertise_bh_carbine_dam_2.py @@ -1,50 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'bounty_hunter_1a': - return - - actor.addSkill('expertise_bh_carbine_dam_2') - - actor.addSkillMod('expertise_damage_weapon_1', 3) - actor.addSkillMod('expertise_damage_weapon_2', 3) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'bounty_hunter_1a': - return - - actor.removeSkill('expertise_bh_carbine_dam_2') - - actor.removeSkillMod('expertise_damage_weapon_1', 3) - actor.removeSkillMod('expertise_damage_weapon_2', 3) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_bh_carbine_dam_2") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_bh_carbine_dam_2") return diff --git a/scripts/expertise/expertise_bh_constitution_1.py b/scripts/expertise/expertise_bh_constitution_1.py index bf9c095e..4311146c 100644 --- a/scripts/expertise/expertise_bh_constitution_1.py +++ b/scripts/expertise/expertise_bh_constitution_1.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'bounty_hunter_1a': - return - - actor.addSkill('expertise_bh_constitution_1') - - actor.addSkillMod('constitution_modified', 25) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'bounty_hunter_1a': - return - - actor.removeSkill('expertise_bh_constitution_1') - - actor.removeSkillMod('constitution_modified', 25) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_bh_constitution_1") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_bh_constitution_1") return diff --git a/scripts/expertise/expertise_bh_constitution_2.py b/scripts/expertise/expertise_bh_constitution_2.py index a7a36229..b08059f1 100644 --- a/scripts/expertise/expertise_bh_constitution_2.py +++ b/scripts/expertise/expertise_bh_constitution_2.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'bounty_hunter_1a': - return - - actor.addSkill('expertise_bh_constitution_2') - - actor.addSkillMod('constitution_modified', 25) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'bounty_hunter_1a': - return - - actor.removeSkill('expertise_bh_constitution_2') - - actor.removeSkillMod('constitution_modified', 25) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_bh_constitution_2") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_bh_constitution_2") return diff --git a/scripts/expertise/expertise_bh_constitution_3.py b/scripts/expertise/expertise_bh_constitution_3.py index 4259b57a..3cd7edf6 100644 --- a/scripts/expertise/expertise_bh_constitution_3.py +++ b/scripts/expertise/expertise_bh_constitution_3.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'bounty_hunter_1a': - return - - actor.addSkill('expertise_bh_constitution_3') - - actor.addSkillMod('constitution_modified', 25) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'bounty_hunter_1a': - return - - actor.removeSkill('expertise_bh_constitution_3') - - actor.removeSkillMod('constitution_modified', 25) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_bh_constitution_3") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_bh_constitution_3") return diff --git a/scripts/expertise/expertise_bh_constitution_4.py b/scripts/expertise/expertise_bh_constitution_4.py index dd89792b..662706cb 100644 --- a/scripts/expertise/expertise_bh_constitution_4.py +++ b/scripts/expertise/expertise_bh_constitution_4.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'bounty_hunter_1a': - return - - actor.addSkill('expertise_bh_constitution_4') - - actor.addSkillMod('constitution_modified', 25) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'bounty_hunter_1a': - return - - actor.removeSkill('expertise_bh_constitution_4') - - actor.removeSkillMod('constitution_modified', 25) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_bh_constitution_4") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_bh_constitution_4") return diff --git a/scripts/expertise/expertise_bh_cover_1.py b/scripts/expertise/expertise_bh_cover_1.py index 019850cd..b3021ddf 100644 --- a/scripts/expertise/expertise_bh_cover_1.py +++ b/scripts/expertise/expertise_bh_cover_1.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'bounty_hunter_1a': - return - - actor.addSkill('expertise_bh_cover_1') - - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'bounty_hunter_1a': - return - - actor.removeSkill('expertise_bh_cover_1') - - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - actor.addAbility('bh_cover_1') - + actor.addAbility("bh_cover_1") return def removeAbilities(core, actor, player): - - actor.removeAbility('bh_cover_1') - + actor.removeAbility("bh_cover_1") return diff --git a/scripts/expertise/expertise_bh_deflection_1.py b/scripts/expertise/expertise_bh_deflection_1.py index ab02e0a6..8ac3bf4c 100644 --- a/scripts/expertise/expertise_bh_deflection_1.py +++ b/scripts/expertise/expertise_bh_deflection_1.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'bounty_hunter_1a': - return - - actor.addSkill('expertise_bh_deflection_1') - - actor.addSkillMod('expertise_innate_protection_all', 250) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'bounty_hunter_1a': - return - - actor.removeSkill('expertise_bh_deflection_1') - - actor.removeSkillMod('expertise_innate_protection_all', 250) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_bh_deflection_1") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_bh_deflection_1") return diff --git a/scripts/expertise/expertise_bh_deflection_2.py b/scripts/expertise/expertise_bh_deflection_2.py index 33b98bf0..35b2c47e 100644 --- a/scripts/expertise/expertise_bh_deflection_2.py +++ b/scripts/expertise/expertise_bh_deflection_2.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'bounty_hunter_1a': - return - - actor.addSkill('expertise_bh_deflection_2') - - actor.addSkillMod('expertise_innate_protection_all', 250) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'bounty_hunter_1a': - return - - actor.removeSkill('expertise_bh_deflection_2') - - actor.removeSkillMod('expertise_innate_protection_all', 250) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_bh_deflection_2") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_bh_deflection_2") return diff --git a/scripts/expertise/expertise_bh_deflection_3.py b/scripts/expertise/expertise_bh_deflection_3.py index c408ca42..d1cd6d2d 100644 --- a/scripts/expertise/expertise_bh_deflection_3.py +++ b/scripts/expertise/expertise_bh_deflection_3.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'bounty_hunter_1a': - return - - actor.addSkill('expertise_bh_deflection_3') - - actor.addSkillMod('expertise_innate_protection_all', 250) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'bounty_hunter_1a': - return - - actor.removeSkill('expertise_bh_deflection_3') - - actor.removeSkillMod('expertise_innate_protection_all', 250) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_bh_deflection_3") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_bh_deflection_3") return diff --git a/scripts/expertise/expertise_bh_deflection_4.py b/scripts/expertise/expertise_bh_deflection_4.py index b5e42e86..fa5ae83f 100644 --- a/scripts/expertise/expertise_bh_deflection_4.py +++ b/scripts/expertise/expertise_bh_deflection_4.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'bounty_hunter_1a': - return - - actor.addSkill('expertise_bh_deflection_4') - - actor.addSkillMod('expertise_innate_protection_all', 250) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'bounty_hunter_1a': - return - - actor.removeSkill('expertise_bh_deflection_4') - - actor.removeSkillMod('expertise_innate_protection_all', 250) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_bh_deflection_4") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_bh_deflection_4") return diff --git a/scripts/expertise/expertise_bh_dread_strike_1.py b/scripts/expertise/expertise_bh_dread_strike_1.py index f7598134..8b2f96c9 100644 --- a/scripts/expertise/expertise_bh_dread_strike_1.py +++ b/scripts/expertise/expertise_bh_dread_strike_1.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'bounty_hunter_1a': - return - - actor.addSkill('expertise_bh_dread_strike_1') - - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'bounty_hunter_1a': - return - - actor.removeSkill('expertise_bh_dread_strike_1') - - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - actor.addAbility('bh_dread_strike_1') - + actor.addAbility("bh_dread_strike_1") return def removeAbilities(core, actor, player): - - actor.removeAbility('bh_dread_strike_1') - + actor.removeAbility("bh_dread_strike_1") return diff --git a/scripts/expertise/expertise_bh_fumble_1.py b/scripts/expertise/expertise_bh_fumble_1.py index c3863158..f39cdd09 100644 --- a/scripts/expertise/expertise_bh_fumble_1.py +++ b/scripts/expertise/expertise_bh_fumble_1.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'bounty_hunter_1a': - return - - actor.addSkill('expertise_bh_fumble_1') - - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'bounty_hunter_1a': - return - - actor.removeSkill('expertise_bh_fumble_1') - - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - actor.addAbility('bh_fumble_1') - + actor.addAbility("bh_fumble_1") return def removeAbilities(core, actor, player): - - actor.removeAbility('bh_fumble_1') - + actor.removeAbility("bh_fumble_1") return diff --git a/scripts/expertise/expertise_bh_innate_1.py b/scripts/expertise/expertise_bh_innate_1.py index 1f013597..be7b9b38 100644 --- a/scripts/expertise/expertise_bh_innate_1.py +++ b/scripts/expertise/expertise_bh_innate_1.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'bounty_hunter_1a': - return - - actor.addSkill('expertise_bh_innate_1') - - actor.addSkillMod('expertise_assult_action_buff', 40) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'bounty_hunter_1a': - return - - actor.removeSkill('expertise_bh_innate_1') - - actor.removeSkillMod('expertise_assult_action_buff', 40) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_bh_innate_1") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_bh_innate_1") return diff --git a/scripts/expertise/expertise_bh_intimidate_1.py b/scripts/expertise/expertise_bh_intimidate_1.py index fa501d18..ee0e81ce 100644 --- a/scripts/expertise/expertise_bh_intimidate_1.py +++ b/scripts/expertise/expertise_bh_intimidate_1.py @@ -1,48 +1,25 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'bounty_hunter_1a': - return - - actor.addSkill('expertise_bh_intimidate_1') - - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'bounty_hunter_1a': - return - - actor.removeSkill('expertise_bh_intimidate_1') - - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - actor.addAbility('bh_intimidate_1') - + if actor.getLevel() >= 26: + actor.addAbility("bh_intimidate_1") + if actor.getLevel() >= 34: + actor.addAbility("bh_intimidate_2") + if actor.getLevel() >= 48: + actor.addAbility("bh_intimidate_3") + if actor.getLevel() >= 62: + actor.addAbility("bh_intimidate_4") + if actor.getLevel() >= 76: + actor.addAbility("bh_intimidate_5") + if actor.getLevel() >= 90: + actor.addAbility("bh_intimidate_6") return def removeAbilities(core, actor, player): - - actor.removeAbility('bh_intimidate_1') - + actor.removeAbility("bh_intimidate_1") + actor.removeAbility("bh_intimidate_2") + actor.removeAbility("bh_intimidate_3") + actor.removeAbility("bh_intimidate_4") + actor.removeAbility("bh_intimidate_5") + actor.removeAbility("bh_intimidate_6") return diff --git a/scripts/expertise/expertise_bh_man_crit_1.py b/scripts/expertise/expertise_bh_man_crit_1.py index 834f9dec..39c35cea 100644 --- a/scripts/expertise/expertise_bh_man_crit_1.py +++ b/scripts/expertise/expertise_bh_man_crit_1.py @@ -1,50 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'bounty_hunter_1a': - return - - actor.addSkill('expertise_bh_man_crit_1') - - actor.addSkillMod('expertise_strikethrough_chance', 2) - actor.addSkillMod('expertise_bh_detect_camo_chance', 10) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'bounty_hunter_1a': - return - - actor.removeSkill('expertise_bh_man_crit_1') - - actor.removeSkillMod('expertise_strikethrough_chance', 2) - actor.removeSkillMod('expertise_bh_detect_camo_chance', 10) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_bh_man_crit_1") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_bh_man_crit_1") return diff --git a/scripts/expertise/expertise_bh_man_crit_2.py b/scripts/expertise/expertise_bh_man_crit_2.py index b9650fe3..f59f750a 100644 --- a/scripts/expertise/expertise_bh_man_crit_2.py +++ b/scripts/expertise/expertise_bh_man_crit_2.py @@ -1,50 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'bounty_hunter_1a': - return - - actor.addSkill('expertise_bh_man_crit_2') - - actor.addSkillMod('expertise_strikethrough_chance', 2) - actor.addSkillMod('expertise_bh_detect_camo_chance', 10) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'bounty_hunter_1a': - return - - actor.removeSkill('expertise_bh_man_crit_2') - - actor.removeSkillMod('expertise_strikethrough_chance', 2) - actor.removeSkillMod('expertise_bh_detect_camo_chance', 10) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_bh_man_crit_2") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_bh_man_crit_2") return diff --git a/scripts/expertise/expertise_bh_man_crit_3.py b/scripts/expertise/expertise_bh_man_crit_3.py index da3e6f06..cb9d8b76 100644 --- a/scripts/expertise/expertise_bh_man_crit_3.py +++ b/scripts/expertise/expertise_bh_man_crit_3.py @@ -1,50 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'bounty_hunter_1a': - return - - actor.addSkill('expertise_bh_man_crit_3') - - actor.addSkillMod('expertise_strikethrough_chance', 2) - actor.addSkillMod('expertise_bh_detect_camo_chance', 10) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'bounty_hunter_1a': - return - - actor.removeSkill('expertise_bh_man_crit_3') - - actor.removeSkillMod('expertise_strikethrough_chance', 2) - actor.removeSkillMod('expertise_bh_detect_camo_chance', 10) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_bh_man_crit_3") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_bh_man_crit_3") return diff --git a/scripts/expertise/expertise_bh_precision_1.py b/scripts/expertise/expertise_bh_precision_1.py index 7004f208..f3813dc5 100644 --- a/scripts/expertise/expertise_bh_precision_1.py +++ b/scripts/expertise/expertise_bh_precision_1.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'bounty_hunter_1a': - return - - actor.addSkill('expertise_bh_precision_1') - - actor.addSkillMod('precision_modified', 25) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'bounty_hunter_1a': - return - - actor.removeSkill('expertise_bh_precision_1') - - actor.removeSkillMod('precision_modified', 25) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_bh_precision_1") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_bh_precision_1") return diff --git a/scripts/expertise/expertise_bh_precision_2.py b/scripts/expertise/expertise_bh_precision_2.py index 58cb5095..6207ca53 100644 --- a/scripts/expertise/expertise_bh_precision_2.py +++ b/scripts/expertise/expertise_bh_precision_2.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'bounty_hunter_1a': - return - - actor.addSkill('expertise_bh_precision_2') - - actor.addSkillMod('precision_modified', 25) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'bounty_hunter_1a': - return - - actor.removeSkill('expertise_bh_precision_2') - - actor.removeSkillMod('precision_modified', 25) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_bh_precision_2") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_bh_precision_2") return diff --git a/scripts/expertise/expertise_bh_precision_3.py b/scripts/expertise/expertise_bh_precision_3.py index 32fa6e4c..d872a9f0 100644 --- a/scripts/expertise/expertise_bh_precision_3.py +++ b/scripts/expertise/expertise_bh_precision_3.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'bounty_hunter_1a': - return - - actor.addSkill('expertise_bh_precision_3') - - actor.addSkillMod('precision_modified', 25) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'bounty_hunter_1a': - return - - actor.removeSkill('expertise_bh_precision_3') - - actor.removeSkillMod('precision_modified', 25) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_bh_precision_3") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_bh_precision_3") return diff --git a/scripts/expertise/expertise_bh_precision_4.py b/scripts/expertise/expertise_bh_precision_4.py index 9ff20b56..c23f6372 100644 --- a/scripts/expertise/expertise_bh_precision_4.py +++ b/scripts/expertise/expertise_bh_precision_4.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'bounty_hunter_1a': - return - - actor.addSkill('expertise_bh_precision_4') - - actor.addSkillMod('precision_modified', 25) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'bounty_hunter_1a': - return - - actor.removeSkill('expertise_bh_precision_4') - - actor.removeSkillMod('precision_modified', 25) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_bh_precision_4") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_bh_precision_4") return diff --git a/scripts/expertise/expertise_bh_prescience.py b/scripts/expertise/expertise_bh_prescience.py index 8211d2f6..a0705af9 100644 --- a/scripts/expertise/expertise_bh_prescience.py +++ b/scripts/expertise/expertise_bh_prescience.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'bounty_hunter_1a': - return - - actor.addSkill('expertise_bh_prescience') - - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'bounty_hunter_1a': - return - - actor.removeSkill('expertise_bh_prescience') - - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - actor.addAbility('bh_prescience') - + actor.addAbility("bh_prescience") return def removeAbilities(core, actor, player): - - actor.removeAbility('bh_prescience') - + actor.removeAbility("bh_prescience") return diff --git a/scripts/expertise/expertise_bh_relentless_1.py b/scripts/expertise/expertise_bh_relentless_1.py index 16584560..d8859773 100644 --- a/scripts/expertise/expertise_bh_relentless_1.py +++ b/scripts/expertise/expertise_bh_relentless_1.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'bounty_hunter_1a': - return - - actor.addSkill('expertise_bh_relentless_1') - - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'bounty_hunter_1a': - return - - actor.removeSkill('expertise_bh_relentless_1') - - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - actor.addAbility('bh_relentless_1') - + actor.addAbility("bh_relentless_1") return def removeAbilities(core, actor, player): - - actor.removeAbility('bh_relentless_1') - + actor.removeAbility("bh_relentless_1") return diff --git a/scripts/expertise/expertise_bh_return_fire_1.py b/scripts/expertise/expertise_bh_return_fire_1.py index 27d39f22..322ced20 100644 --- a/scripts/expertise/expertise_bh_return_fire_1.py +++ b/scripts/expertise/expertise_bh_return_fire_1.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'bounty_hunter_1a': - return - - actor.addSkill('expertise_bh_return_fire_1') - - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'bounty_hunter_1a': - return - - actor.removeSkill('expertise_bh_return_fire_1') - - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - actor.addAbility('bh_return_fire_command_1') - + actor.addAbility("bh_return_fire_command_1") return def removeAbilities(core, actor, player): - - actor.removeAbility('bh_return_fire_command_1') - + actor.removeAbility("bh_return_fire_command_1") return diff --git a/scripts/expertise/expertise_bh_rifle_act_1.py b/scripts/expertise/expertise_bh_rifle_act_1.py index c64ab6fd..5ab3b5b8 100644 --- a/scripts/expertise/expertise_bh_rifle_act_1.py +++ b/scripts/expertise/expertise_bh_rifle_act_1.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'bounty_hunter_1a': - return - - actor.addSkill('expertise_bh_rifle_act_1') - - actor.addSkillMod('expertise_action_weapon_0', 3) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'bounty_hunter_1a': - return - - actor.removeSkill('expertise_bh_rifle_act_1') - - actor.removeSkillMod('expertise_action_weapon_0', 3) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_bh_rifle_act_1") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_bh_rifle_act_1") return diff --git a/scripts/expertise/expertise_bh_rifle_act_2.py b/scripts/expertise/expertise_bh_rifle_act_2.py index f1488c3f..1f94991c 100644 --- a/scripts/expertise/expertise_bh_rifle_act_2.py +++ b/scripts/expertise/expertise_bh_rifle_act_2.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'bounty_hunter_1a': - return - - actor.addSkill('expertise_bh_rifle_act_2') - - actor.addSkillMod('expertise_action_weapon_0', 3) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'bounty_hunter_1a': - return - - actor.removeSkill('expertise_bh_rifle_act_2') - - actor.removeSkillMod('expertise_action_weapon_0', 3) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_bh_rifle_act_2") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_bh_rifle_act_2") return diff --git a/scripts/expertise/expertise_bh_rifle_act_3.py b/scripts/expertise/expertise_bh_rifle_act_3.py index 709fdfec..21f5a7b6 100644 --- a/scripts/expertise/expertise_bh_rifle_act_3.py +++ b/scripts/expertise/expertise_bh_rifle_act_3.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'bounty_hunter_1a': - return - - actor.addSkill('expertise_bh_rifle_act_3') - - actor.addSkillMod('expertise_action_weapon_0', 4) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'bounty_hunter_1a': - return - - actor.removeSkill('expertise_bh_rifle_act_3') - - actor.removeSkillMod('expertise_action_weapon_0', 4) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_bh_rifle_act_3") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_bh_rifle_act_3") return diff --git a/scripts/expertise/expertise_bh_rifle_act_4.py b/scripts/expertise/expertise_bh_rifle_act_4.py index fc0549fa..cb32b474 100644 --- a/scripts/expertise/expertise_bh_rifle_act_4.py +++ b/scripts/expertise/expertise_bh_rifle_act_4.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'bounty_hunter_1a': - return - - actor.addSkill('expertise_bh_rifle_act_4') - - actor.addSkillMod('expertise_action_weapon_0', 5) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'bounty_hunter_1a': - return - - actor.removeSkill('expertise_bh_rifle_act_4') - - actor.removeSkillMod('expertise_action_weapon_0', 5) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_bh_rifle_act_4") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_bh_rifle_act_4") return diff --git a/scripts/expertise/expertise_bh_rifle_dam_1.py b/scripts/expertise/expertise_bh_rifle_dam_1.py index 9c3114cc..debb9b31 100644 --- a/scripts/expertise/expertise_bh_rifle_dam_1.py +++ b/scripts/expertise/expertise_bh_rifle_dam_1.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'bounty_hunter_1a': - return - - actor.addSkill('expertise_bh_rifle_dam_1') - - actor.addSkillMod('expertise_damage_weapon_0', 2) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'bounty_hunter_1a': - return - - actor.removeSkill('expertise_bh_rifle_dam_1') - - actor.removeSkillMod('expertise_damage_weapon_0', 2) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_bh_rifle_dam_1") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_bh_rifle_dam_1") return diff --git a/scripts/expertise/expertise_bh_rifle_dam_2.py b/scripts/expertise/expertise_bh_rifle_dam_2.py index 43fa09b4..29f37539 100644 --- a/scripts/expertise/expertise_bh_rifle_dam_2.py +++ b/scripts/expertise/expertise_bh_rifle_dam_2.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'bounty_hunter_1a': - return - - actor.addSkill('expertise_bh_rifle_dam_2') - - actor.addSkillMod('expertise_damage_weapon_0', 3) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'bounty_hunter_1a': - return - - actor.removeSkill('expertise_bh_rifle_dam_2') - - actor.removeSkillMod('expertise_damage_weapon_0', 3) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_bh_rifle_dam_2") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_bh_rifle_dam_2") return diff --git a/scripts/expertise/expertise_bh_shields_1.py b/scripts/expertise/expertise_bh_shields_1.py index cc0b0b50..ecedc9e6 100644 --- a/scripts/expertise/expertise_bh_shields_1.py +++ b/scripts/expertise/expertise_bh_shields_1.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'bounty_hunter_1a': - return - - actor.addSkill('expertise_bh_shields_1') - - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'bounty_hunter_1a': - return - - actor.removeSkill('expertise_bh_shields_1') - - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - actor.addAbility('bh_shields_1') - + actor.addAbility("bh_shields_1") return def removeAbilities(core, actor, player): - - actor.removeAbility('bh_shields_1') - + actor.removeAbility("bh_shields_1") return diff --git a/scripts/expertise/expertise_bh_sniper_1.py b/scripts/expertise/expertise_bh_sniper_1.py index 5d90b6af..b94485a7 100644 --- a/scripts/expertise/expertise_bh_sniper_1.py +++ b/scripts/expertise/expertise_bh_sniper_1.py @@ -1,48 +1,25 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'bounty_hunter_1a': - return - - actor.addSkill('expertise_bh_sniper_1') - - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'bounty_hunter_1a': - return - - actor.removeSkill('expertise_bh_sniper_1') - - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - actor.addAbility('bh_sniper_1') - + if actor.getLevel() >= 26: + actor.addAbility("bh_sniper_1") + if actor.getLevel() >= 34: + actor.addAbility("bh_sniper_2") + if actor.getLevel() >= 48: + actor.addAbility("bh_sniper_3") + if actor.getLevel() >= 62: + actor.addAbility("bh_sniper_4") + if actor.getLevel() >= 76: + actor.addAbility("bh_sniper_5") + if actor.getLevel() >= 90: + actor.addAbility("bh_sniper_6") return def removeAbilities(core, actor, player): - - actor.removeAbility('bh_sniper_1') - + actor.removeAbility("bh_sniper_1") + actor.removeAbility("bh_sniper_2") + actor.removeAbility("bh_sniper_3") + actor.removeAbility("bh_sniper_4") + actor.removeAbility("bh_sniper_5") + actor.removeAbility("bh_sniper_6") return diff --git a/scripts/expertise/expertise_bh_stamina_1.py b/scripts/expertise/expertise_bh_stamina_1.py index 135dfb5a..77903769 100644 --- a/scripts/expertise/expertise_bh_stamina_1.py +++ b/scripts/expertise/expertise_bh_stamina_1.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'bounty_hunter_1a': - return - - actor.addSkill('expertise_bh_stamina_1') - - actor.addSkillMod('stamina_modified', 25) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'bounty_hunter_1a': - return - - actor.removeSkill('expertise_bh_stamina_1') - - actor.removeSkillMod('stamina_modified', 25) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_bh_stamina_1") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_bh_stamina_1") return diff --git a/scripts/expertise/expertise_bh_stamina_2.py b/scripts/expertise/expertise_bh_stamina_2.py index 82137a73..0deb8459 100644 --- a/scripts/expertise/expertise_bh_stamina_2.py +++ b/scripts/expertise/expertise_bh_stamina_2.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'bounty_hunter_1a': - return - - actor.addSkill('expertise_bh_stamina_2') - - actor.addSkillMod('stamina_modified', 25) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'bounty_hunter_1a': - return - - actor.removeSkill('expertise_bh_stamina_2') - - actor.removeSkillMod('stamina_modified', 25) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_bh_stamina_2") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_bh_stamina_2") return diff --git a/scripts/expertise/expertise_bh_stamina_3.py b/scripts/expertise/expertise_bh_stamina_3.py index 4a9d9c79..3ec0af04 100644 --- a/scripts/expertise/expertise_bh_stamina_3.py +++ b/scripts/expertise/expertise_bh_stamina_3.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'bounty_hunter_1a': - return - - actor.addSkill('expertise_bh_stamina_3') - - actor.addSkillMod('stamina_modified', 25) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'bounty_hunter_1a': - return - - actor.removeSkill('expertise_bh_stamina_3') - - actor.removeSkillMod('stamina_modified', 25) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_bh_stamina_3") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_bh_stamina_3") return diff --git a/scripts/expertise/expertise_bh_stamina_4.py b/scripts/expertise/expertise_bh_stamina_4.py index b4bec72c..fd17d13e 100644 --- a/scripts/expertise/expertise_bh_stamina_4.py +++ b/scripts/expertise/expertise_bh_stamina_4.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'bounty_hunter_1a': - return - - actor.addSkill('expertise_bh_stamina_4') - - actor.addSkillMod('stamina_modified', 25) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'bounty_hunter_1a': - return - - actor.removeSkill('expertise_bh_stamina_4') - - actor.removeSkillMod('stamina_modified', 25) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_bh_stamina_4") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_bh_stamina_4") return diff --git a/scripts/expertise/expertise_bh_stun_1.py b/scripts/expertise/expertise_bh_stun_1.py index 63fbb815..4e9f3633 100644 --- a/scripts/expertise/expertise_bh_stun_1.py +++ b/scripts/expertise/expertise_bh_stun_1.py @@ -1,48 +1,22 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'bounty_hunter_1a': - return - - actor.addSkill('expertise_bh_stun_1') - - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'bounty_hunter_1a': - return - - actor.removeSkill('expertise_bh_stun_1') - - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - actor.addAbility('bh_stun_1') - + if actor.getLevel() >= 26: + actor.addAbility("bh_stun_1") + if actor.getLevel() >= 34: + actor.addAbility("bh_stun_2") + if actor.getLevel() >= 48: + actor.addAbility("bh_stun_3") + if actor.getLevel() >= 62: + actor.addAbility("bh_stun_4") + if actor.getLevel() >= 76: + actor.addAbility("bh_stun_5") return def removeAbilities(core, actor, player): - - actor.removeAbility('bh_stun_1') - + actor.removeAbility("bh_stun_1") + actor.removeAbility("bh_stun_2") + actor.removeAbility("bh_stun_3") + actor.removeAbility("bh_stun_4") + actor.removeAbility("bh_stun_5") return diff --git a/scripts/expertise/expertise_bh_surprise_1.py b/scripts/expertise/expertise_bh_surprise_1.py index 362f3be0..2e23c9bf 100644 --- a/scripts/expertise/expertise_bh_surprise_1.py +++ b/scripts/expertise/expertise_bh_surprise_1.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'bounty_hunter_1a': - return - - actor.addSkill('expertise_bh_surprise_1') - - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'bounty_hunter_1a': - return - - actor.removeSkill('expertise_bh_surprise_1') - - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - actor.addAbility('bh_dm_crit_3') - + actor.addAbility("bh_dm_crit_3") return def removeAbilities(core, actor, player): - - actor.removeAbility('bh_dm_crit_3') - + actor.removeAbility("bh_dm_crit_3") return diff --git a/scripts/expertise/expertise_bh_survival_instinct_1.py b/scripts/expertise/expertise_bh_survival_instinct_1.py index 720ddfe0..c361bf9b 100644 --- a/scripts/expertise/expertise_bh_survival_instinct_1.py +++ b/scripts/expertise/expertise_bh_survival_instinct_1.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'bounty_hunter_1a': - return - - actor.addSkill('expertise_bh_survival_instinct_1') - - actor.addSkillMod('expertise_cooldown_line_sh', 20) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'bounty_hunter_1a': - return - - actor.removeSkill('expertise_bh_survival_instinct_1') - - actor.removeSkillMod('expertise_cooldown_line_sh', 20) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_bh_survival_instinct_1") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_bh_survival_instinct_1") return diff --git a/scripts/expertise/expertise_bh_survival_instinct_2.py b/scripts/expertise/expertise_bh_survival_instinct_2.py index 9fbce1d0..6302e5c0 100644 --- a/scripts/expertise/expertise_bh_survival_instinct_2.py +++ b/scripts/expertise/expertise_bh_survival_instinct_2.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'bounty_hunter_1a': - return - - actor.addSkill('expertise_bh_survival_instinct_2') - - actor.addSkillMod('expertise_cooldown_line_sh', 20) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'bounty_hunter_1a': - return - - actor.removeSkill('expertise_bh_survival_instinct_2') - - actor.removeSkillMod('expertise_cooldown_line_sh', 20) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_bh_survival_instinct_2") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_bh_survival_instinct_2") return diff --git a/scripts/expertise/expertise_bh_taunt_1.py b/scripts/expertise/expertise_bh_taunt_1.py index 9fa48b82..31dc085e 100644 --- a/scripts/expertise/expertise_bh_taunt_1.py +++ b/scripts/expertise/expertise_bh_taunt_1.py @@ -1,48 +1,25 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'bounty_hunter_1a': - return - - actor.addSkill('expertise_bh_taunt_1') - - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'bounty_hunter_1a': - return - - actor.removeSkill('expertise_bh_taunt_1') - - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - actor.addAbility('bh_taunt_1') - + if actor.getLevel() >= 26: + actor.addAbility("bh_taunt_1") + if actor.getLevel() >= 34: + actor.addAbility("bh_taunt_2") + if actor.getLevel() >= 48: + actor.addAbility("bh_taunt_3") + if actor.getLevel() >= 62: + actor.addAbility("bh_taunt_4") + if actor.getLevel() >= 76: + actor.addAbility("bh_taunt_5") + if actor.getLevel() >= 90: + actor.addAbility("bh_taunt_6") return def removeAbilities(core, actor, player): - - actor.removeAbility('bh_taunt_1') - + actor.removeAbility("bh_taunt_1") + actor.removeAbility("bh_taunt_2") + actor.removeAbility("bh_taunt_3") + actor.removeAbility("bh_taunt_4") + actor.removeAbility("bh_taunt_5") + actor.removeAbility("bh_taunt_6") return diff --git a/scripts/expertise/expertise_bh_trap_dam_1.py b/scripts/expertise/expertise_bh_trap_dam_1.py index debbc5b2..c3ec4563 100644 --- a/scripts/expertise/expertise_bh_trap_dam_1.py +++ b/scripts/expertise/expertise_bh_trap_dam_1.py @@ -1,50 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'bounty_hunter_1a': - return - - actor.addSkill('expertise_bh_trap_dam_1') - - actor.addSkillMod('expertise_damage_line_dm_cc', 5) - actor.addSkillMod('expertise_action_line_dm_cc', 5) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'bounty_hunter_1a': - return - - actor.removeSkill('expertise_bh_trap_dam_1') - - actor.removeSkillMod('expertise_damage_line_dm_cc', 5) - actor.removeSkillMod('expertise_action_line_dm_cc', 5) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_bh_trap_dam_1") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_bh_trap_dam_1") return diff --git a/scripts/expertise/expertise_bh_trap_dam_2.py b/scripts/expertise/expertise_bh_trap_dam_2.py index 34f1cfa9..7e4066c6 100644 --- a/scripts/expertise/expertise_bh_trap_dam_2.py +++ b/scripts/expertise/expertise_bh_trap_dam_2.py @@ -1,50 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'bounty_hunter_1a': - return - - actor.addSkill('expertise_bh_trap_dam_2') - - actor.addSkillMod('expertise_damage_line_dm_cc', 5) - actor.addSkillMod('expertise_action_line_dm_cc', 5) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'bounty_hunter_1a': - return - - actor.removeSkill('expertise_bh_trap_dam_2') - - actor.removeSkillMod('expertise_damage_line_dm_cc', 5) - actor.removeSkillMod('expertise_action_line_dm_cc', 5) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_bh_trap_dam_2") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_bh_trap_dam_2") return diff --git a/scripts/expertise/expertise_bh_trap_dam_3.py b/scripts/expertise/expertise_bh_trap_dam_3.py index d8df37c2..27207b90 100644 --- a/scripts/expertise/expertise_bh_trap_dam_3.py +++ b/scripts/expertise/expertise_bh_trap_dam_3.py @@ -1,50 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'bounty_hunter_1a': - return - - actor.addSkill('expertise_bh_trap_dam_3') - - actor.addSkillMod('expertise_damage_line_dm_cc', 5) - actor.addSkillMod('expertise_action_line_dm_cc', 5) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'bounty_hunter_1a': - return - - actor.removeSkill('expertise_bh_trap_dam_3') - - actor.removeSkillMod('expertise_damage_line_dm_cc', 5) - actor.removeSkillMod('expertise_action_line_dm_cc', 5) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_bh_trap_dam_3") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_bh_trap_dam_3") return diff --git a/scripts/expertise/expertise_bh_trap_dam_4.py b/scripts/expertise/expertise_bh_trap_dam_4.py index 895fa7ed..7caad822 100644 --- a/scripts/expertise/expertise_bh_trap_dam_4.py +++ b/scripts/expertise/expertise_bh_trap_dam_4.py @@ -1,50 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'bounty_hunter_1a': - return - - actor.addSkill('expertise_bh_trap_dam_4') - - actor.addSkillMod('expertise_damage_line_dm_cc', 5) - actor.addSkillMod('expertise_action_line_dm_cc', 5) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'bounty_hunter_1a': - return - - actor.removeSkill('expertise_bh_trap_dam_4') - - actor.removeSkillMod('expertise_damage_line_dm_cc', 5) - actor.removeSkillMod('expertise_action_line_dm_cc', 5) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_bh_trap_dam_4") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_bh_trap_dam_4") return diff --git a/scripts/expertise/expertise_bh_trap_duration_1.py b/scripts/expertise/expertise_bh_trap_duration_1.py index a24b5591..77c4e203 100644 --- a/scripts/expertise/expertise_bh_trap_duration_1.py +++ b/scripts/expertise/expertise_bh_trap_duration_1.py @@ -1,50 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'bounty_hunter_1a': - return - - actor.addSkill('expertise_bh_trap_duration_1') - - actor.addSkillMod('expertise_buff_duration_group_snare', 1) - actor.addSkillMod('expertise_cooldown_line_dm_cc', 20) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'bounty_hunter_1a': - return - - actor.removeSkill('expertise_bh_trap_duration_1') - - actor.removeSkillMod('expertise_buff_duration_group_snare', 1) - actor.removeSkillMod('expertise_cooldown_line_dm_cc', 20) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_bh_trap_duration_1") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_bh_trap_duration_1") return diff --git a/scripts/expertise/expertise_bh_trap_duration_2.py b/scripts/expertise/expertise_bh_trap_duration_2.py index 4c312043..682f7452 100644 --- a/scripts/expertise/expertise_bh_trap_duration_2.py +++ b/scripts/expertise/expertise_bh_trap_duration_2.py @@ -1,50 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'bounty_hunter_1a': - return - - actor.addSkill('expertise_bh_trap_duration_2') - - actor.addSkillMod('expertise_buff_duration_group_snare', 1) - actor.addSkillMod('expertise_cooldown_line_dm_cc', 20) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'bounty_hunter_1a': - return - - actor.removeSkill('expertise_bh_trap_duration_2') - - actor.removeSkillMod('expertise_buff_duration_group_snare', 1) - actor.removeSkillMod('expertise_cooldown_line_dm_cc', 20) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_bh_trap_duration_2") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_bh_trap_duration_2") return diff --git a/scripts/expertise/expertise_bh_trap_duration_3.py b/scripts/expertise/expertise_bh_trap_duration_3.py index 409ba235..d08b714c 100644 --- a/scripts/expertise/expertise_bh_trap_duration_3.py +++ b/scripts/expertise/expertise_bh_trap_duration_3.py @@ -1,50 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'bounty_hunter_1a': - return - - actor.addSkill('expertise_bh_trap_duration_3') - - actor.addSkillMod('expertise_buff_duration_group_snare', 1) - actor.addSkillMod('expertise_cooldown_line_dm_cc', 20) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'bounty_hunter_1a': - return - - actor.removeSkill('expertise_bh_trap_duration_3') - - actor.removeSkillMod('expertise_buff_duration_group_snare', 1) - actor.removeSkillMod('expertise_cooldown_line_dm_cc', 20) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_bh_trap_duration_3") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_bh_trap_duration_3") return diff --git a/scripts/expertise/expertise_bh_trap_rng_1.py b/scripts/expertise/expertise_bh_trap_rng_1.py index 3da9ced9..74ce4e28 100644 --- a/scripts/expertise/expertise_bh_trap_rng_1.py +++ b/scripts/expertise/expertise_bh_trap_rng_1.py @@ -1,52 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'bounty_hunter_1a': - return - - actor.addSkill('expertise_bh_trap_rng_1') - - actor.addSkillMod('expertise_area_size_line_trap', 1) - actor.addSkillMod('expertise_area_size_line_diretrap', 1) - actor.addSkillMod('expertise_action_line_trap', 10) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'bounty_hunter_1a': - return - - actor.removeSkill('expertise_bh_trap_rng_1') - - actor.removeSkillMod('expertise_area_size_line_trap', 1) - actor.removeSkillMod('expertise_area_size_line_diretrap', 1) - actor.removeSkillMod('expertise_action_line_trap', 10) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_bh_trap_rng_1") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_bh_trap_rng_1") return diff --git a/scripts/expertise/expertise_bh_trap_rng_2.py b/scripts/expertise/expertise_bh_trap_rng_2.py index 0d853136..c3508e35 100644 --- a/scripts/expertise/expertise_bh_trap_rng_2.py +++ b/scripts/expertise/expertise_bh_trap_rng_2.py @@ -1,52 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'bounty_hunter_1a': - return - - actor.addSkill('expertise_bh_trap_rng_2') - - actor.addSkillMod('expertise_area_size_line_trap', 1) - actor.addSkillMod('expertise_area_size_line_diretrap', 1) - actor.addSkillMod('expertise_action_line_trap', 10) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'bounty_hunter_1a': - return - - actor.removeSkill('expertise_bh_trap_rng_2') - - actor.removeSkillMod('expertise_area_size_line_trap', 1) - actor.removeSkillMod('expertise_area_size_line_diretrap', 1) - actor.removeSkillMod('expertise_action_line_trap', 10) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_bh_trap_rng_2") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_bh_trap_rng_2") return diff --git a/scripts/expertise/expertise_bm_abilility_aquisition_mod_1.py b/scripts/expertise/expertise_bm_abilility_aquisition_mod_1.py index 5a44b9cb..ad3b81a0 100644 --- a/scripts/expertise/expertise_bm_abilility_aquisition_mod_1.py +++ b/scripts/expertise/expertise_bm_abilility_aquisition_mod_1.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'all_1a': - return - - actor.addSkill('expertise_bm_abilility_aquisition_mod_1') - - actor.addSkillMod('expertise_bm_enhanced_skill_acquisition', 15) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'all_1a': - return - - actor.removeSkill('expertise_bm_abilility_aquisition_mod_1') - - actor.removeSkillMod('expertise_bm_enhanced_skill_acquisition', 15) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_bm_abilility_aquisition_mod_1") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_bm_abilility_aquisition_mod_1") return diff --git a/scripts/expertise/expertise_bm_add_first_pet_bar_1.py b/scripts/expertise/expertise_bm_add_first_pet_bar_1.py index aca29011..e0653096 100644 --- a/scripts/expertise/expertise_bm_add_first_pet_bar_1.py +++ b/scripts/expertise/expertise_bm_add_first_pet_bar_1.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'all_1a': - return - - actor.addSkill('expertise_bm_add_first_pet_bar_1') - - actor.addSkillMod('expertise_bm_add_pet_bar', 1) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'all_1a': - return - - actor.removeSkill('expertise_bm_add_first_pet_bar_1') - - actor.removeSkillMod('expertise_bm_add_pet_bar', 1) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_bm_add_first_pet_bar_1") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_bm_add_first_pet_bar_1") return diff --git a/scripts/expertise/expertise_bm_add_second_pet_bar_1.py b/scripts/expertise/expertise_bm_add_second_pet_bar_1.py index 385f1057..374dae76 100644 --- a/scripts/expertise/expertise_bm_add_second_pet_bar_1.py +++ b/scripts/expertise/expertise_bm_add_second_pet_bar_1.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'all_1a': - return - - actor.addSkill('expertise_bm_add_second_pet_bar_1') - - actor.addSkillMod('expertise_bm_add_pet_bar', 1) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'all_1a': - return - - actor.removeSkill('expertise_bm_add_second_pet_bar_1') - - actor.removeSkillMod('expertise_bm_add_pet_bar', 1) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_bm_add_second_pet_bar_1") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_bm_add_second_pet_bar_1") return diff --git a/scripts/expertise/expertise_bm_add_third_pet_bar_1.py b/scripts/expertise/expertise_bm_add_third_pet_bar_1.py index 607cc8c8..600df6ad 100644 --- a/scripts/expertise/expertise_bm_add_third_pet_bar_1.py +++ b/scripts/expertise/expertise_bm_add_third_pet_bar_1.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'all_1a': - return - - actor.addSkill('expertise_bm_add_third_pet_bar_1') - - actor.addSkillMod('expertise_bm_add_pet_bar', 1) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'all_1a': - return - - actor.removeSkill('expertise_bm_add_third_pet_bar_1') - - actor.removeSkillMod('expertise_bm_add_pet_bar', 1) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_bm_add_third_pet_bar_1") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_bm_add_third_pet_bar_1") return diff --git a/scripts/expertise/expertise_bm_attack_1.py b/scripts/expertise/expertise_bm_attack_1.py index 8b6f795c..798c38cf 100644 --- a/scripts/expertise/expertise_bm_attack_1.py +++ b/scripts/expertise/expertise_bm_attack_1.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'all_1a': - return - - actor.addSkill('expertise_bm_attack_1') - - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'all_1a': - return - - actor.removeSkill('expertise_bm_attack_1') - - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - actor.addAbility('bm_pet_attack_1') - + actor.addAbility("bm_pet_attack_1") return def removeAbilities(core, actor, player): - - actor.removeAbility('bm_pet_attack_1') - + actor.removeAbility("bm_pet_attack_1") return diff --git a/scripts/expertise/expertise_bm_beast_mastery_1.py b/scripts/expertise/expertise_bm_beast_mastery_1.py index e467a281..b4720a91 100644 --- a/scripts/expertise/expertise_bm_beast_mastery_1.py +++ b/scripts/expertise/expertise_bm_beast_mastery_1.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'all_1a': - return - - actor.addSkill('expertise_bm_beast_mastery_1') - - actor.addSkillMod('expertise_bm_self_debuff_reduction', 25) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'all_1a': - return - - actor.removeSkill('expertise_bm_beast_mastery_1') - - actor.removeSkillMod('expertise_bm_self_debuff_reduction', 25) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_bm_beast_mastery_1") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_bm_beast_mastery_1") return diff --git a/scripts/expertise/expertise_bm_creature_knowledge_command_1.py b/scripts/expertise/expertise_bm_creature_knowledge_command_1.py index 3f50c6cd..602905fc 100644 --- a/scripts/expertise/expertise_bm_creature_knowledge_command_1.py +++ b/scripts/expertise/expertise_bm_creature_knowledge_command_1.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'all_1a': - return - - actor.addSkill('expertise_bm_creature_knowledge_command_1') - - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'all_1a': - return - - actor.removeSkill('expertise_bm_creature_knowledge_command_1') - - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - actor.addAbility('bm_creature_knowledge_command_1') - + actor.addAbility("bm_creature_knowledge_command_1") return def removeAbilities(core, actor, player): - - actor.removeAbility('bm_creature_knowledge_command_1') - + actor.removeAbility("bm_creature_knowledge_command_1") return diff --git a/scripts/expertise/expertise_bm_dexterity_training_1.py b/scripts/expertise/expertise_bm_dexterity_training_1.py index 4162179d..50a560d4 100644 --- a/scripts/expertise/expertise_bm_dexterity_training_1.py +++ b/scripts/expertise/expertise_bm_dexterity_training_1.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'all_1a': - return - - actor.addSkill('expertise_bm_dexterity_training_1') - - actor.addSkillMod('expertise_bm_pet_attack_speed', 50) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'all_1a': - return - - actor.removeSkill('expertise_bm_dexterity_training_1') - - actor.removeSkillMod('expertise_bm_pet_attack_speed', 50) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_bm_dexterity_training_1") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_bm_dexterity_training_1") return diff --git a/scripts/expertise/expertise_bm_dexterity_training_2.py b/scripts/expertise/expertise_bm_dexterity_training_2.py index f3c66370..ab2527c4 100644 --- a/scripts/expertise/expertise_bm_dexterity_training_2.py +++ b/scripts/expertise/expertise_bm_dexterity_training_2.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'all_1a': - return - - actor.addSkill('expertise_bm_dexterity_training_2') - - actor.addSkillMod('expertise_bm_pet_attack_speed', 50) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'all_1a': - return - - actor.removeSkill('expertise_bm_dexterity_training_2') - - actor.removeSkillMod('expertise_bm_pet_attack_speed', 50) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_bm_dexterity_training_2") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_bm_dexterity_training_2") return diff --git a/scripts/expertise/expertise_bm_dna_harvesting_1.py b/scripts/expertise/expertise_bm_dna_harvesting_1.py index ee8aad65..3f9e6c4c 100644 --- a/scripts/expertise/expertise_bm_dna_harvesting_1.py +++ b/scripts/expertise/expertise_bm_dna_harvesting_1.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'all_1a': - return - - actor.addSkill('expertise_bm_dna_harvesting_1') - - actor.addSkillMod('expertise_bm_dna_harvesting_1', 30) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'all_1a': - return - - actor.removeSkill('expertise_bm_dna_harvesting_1') - - actor.removeSkillMod('expertise_bm_dna_harvesting_1', 30) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_bm_dna_harvesting_1") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_bm_dna_harvesting_1") return diff --git a/scripts/expertise/expertise_bm_dna_harvesting_2.py b/scripts/expertise/expertise_bm_dna_harvesting_2.py index 5c0b2044..0b5cc4fa 100644 --- a/scripts/expertise/expertise_bm_dna_harvesting_2.py +++ b/scripts/expertise/expertise_bm_dna_harvesting_2.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'all_1a': - return - - actor.addSkill('expertise_bm_dna_harvesting_2') - - actor.addSkillMod('expertise_bm_dna_harvesting_1', 30) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'all_1a': - return - - actor.removeSkill('expertise_bm_dna_harvesting_2') - - actor.removeSkillMod('expertise_bm_dna_harvesting_1', 30) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_bm_dna_harvesting_2") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_bm_dna_harvesting_2") return diff --git a/scripts/expertise/expertise_bm_dna_harvesting_3.py b/scripts/expertise/expertise_bm_dna_harvesting_3.py index 3f287f64..2f6fcdfa 100644 --- a/scripts/expertise/expertise_bm_dna_harvesting_3.py +++ b/scripts/expertise/expertise_bm_dna_harvesting_3.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'all_1a': - return - - actor.addSkill('expertise_bm_dna_harvesting_3') - - actor.addSkillMod('expertise_bm_dna_harvesting_1', 40) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'all_1a': - return - - actor.removeSkill('expertise_bm_dna_harvesting_3') - - actor.removeSkillMod('expertise_bm_dna_harvesting_1', 40) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_bm_dna_harvesting_3") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_bm_dna_harvesting_3") return diff --git a/scripts/expertise/expertise_bm_erratic_genius_1.py b/scripts/expertise/expertise_bm_erratic_genius_1.py index ab96d82c..d7ed15a7 100644 --- a/scripts/expertise/expertise_bm_erratic_genius_1.py +++ b/scripts/expertise/expertise_bm_erratic_genius_1.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'all_1a': - return - - actor.addSkill('expertise_bm_erratic_genius_1') - - actor.addSkillMod('bm_mutation_chance_increase', 2) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'all_1a': - return - - actor.removeSkill('expertise_bm_erratic_genius_1') - - actor.removeSkillMod('bm_mutation_chance_increase', 2) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_bm_erratic_genius_1") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_bm_erratic_genius_1") return diff --git a/scripts/expertise/expertise_bm_erratic_genius_2.py b/scripts/expertise/expertise_bm_erratic_genius_2.py index bc4c75ec..6e387fb5 100644 --- a/scripts/expertise/expertise_bm_erratic_genius_2.py +++ b/scripts/expertise/expertise_bm_erratic_genius_2.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'all_1a': - return - - actor.addSkill('expertise_bm_erratic_genius_2') - - actor.addSkillMod('bm_mutation_chance_increase', 2) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'all_1a': - return - - actor.removeSkill('expertise_bm_erratic_genius_2') - - actor.removeSkillMod('bm_mutation_chance_increase', 2) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_bm_erratic_genius_2") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_bm_erratic_genius_2") return diff --git a/scripts/expertise/expertise_bm_erratic_genius_3.py b/scripts/expertise/expertise_bm_erratic_genius_3.py index a0ece6c0..0ee3e98e 100644 --- a/scripts/expertise/expertise_bm_erratic_genius_3.py +++ b/scripts/expertise/expertise_bm_erratic_genius_3.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'all_1a': - return - - actor.addSkill('expertise_bm_erratic_genius_3') - - actor.addSkillMod('bm_mutation_chance_increase', 2) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'all_1a': - return - - actor.removeSkill('expertise_bm_erratic_genius_3') - - actor.removeSkillMod('bm_mutation_chance_increase', 2) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_bm_erratic_genius_3") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_bm_erratic_genius_3") return diff --git a/scripts/expertise/expertise_bm_evasion_1.py b/scripts/expertise/expertise_bm_evasion_1.py index 62f8715c..aa280e26 100644 --- a/scripts/expertise/expertise_bm_evasion_1.py +++ b/scripts/expertise/expertise_bm_evasion_1.py @@ -1,50 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'all_1a': - return - - actor.addSkill('expertise_bm_evasion_1') - - actor.addSkillMod('expertise_bm_pet_evade_chance', 5) - actor.addSkillMod('expertise_bm_pet_evade_value', 15) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'all_1a': - return - - actor.removeSkill('expertise_bm_evasion_1') - - actor.removeSkillMod('expertise_bm_pet_evade_chance', 5) - actor.removeSkillMod('expertise_bm_pet_evade_value', 15) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_bm_evasion_1") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_bm_evasion_1") return diff --git a/scripts/expertise/expertise_bm_evasion_2.py b/scripts/expertise/expertise_bm_evasion_2.py index f05946e2..2b7ceac3 100644 --- a/scripts/expertise/expertise_bm_evasion_2.py +++ b/scripts/expertise/expertise_bm_evasion_2.py @@ -1,50 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'all_1a': - return - - actor.addSkill('expertise_bm_evasion_2') - - actor.addSkillMod('expertise_bm_pet_evade_chance', 5) - actor.addSkillMod('expertise_bm_pet_evade_value', 15) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'all_1a': - return - - actor.removeSkill('expertise_bm_evasion_2') - - actor.removeSkillMod('expertise_bm_pet_evade_chance', 5) - actor.removeSkillMod('expertise_bm_pet_evade_value', 15) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_bm_evasion_2") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_bm_evasion_2") return diff --git a/scripts/expertise/expertise_bm_evasion_3.py b/scripts/expertise/expertise_bm_evasion_3.py index 84f582e3..6aab14d4 100644 --- a/scripts/expertise/expertise_bm_evasion_3.py +++ b/scripts/expertise/expertise_bm_evasion_3.py @@ -1,50 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'all_1a': - return - - actor.addSkill('expertise_bm_evasion_3') - - actor.addSkillMod('expertise_bm_pet_evade_chance', 5) - actor.addSkillMod('expertise_bm_pet_evade_value', 15) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'all_1a': - return - - actor.removeSkill('expertise_bm_evasion_3') - - actor.removeSkillMod('expertise_bm_pet_evade_chance', 5) - actor.removeSkillMod('expertise_bm_pet_evade_value', 15) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_bm_evasion_3") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_bm_evasion_3") return diff --git a/scripts/expertise/expertise_bm_exceptional_nutrition_1.py b/scripts/expertise/expertise_bm_exceptional_nutrition_1.py index dce1b89b..e65b9f1b 100644 --- a/scripts/expertise/expertise_bm_exceptional_nutrition_1.py +++ b/scripts/expertise/expertise_bm_exceptional_nutrition_1.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'all_1a': - return - - actor.addSkill('expertise_bm_exceptional_nutrition_1') - - actor.addSkillMod('expertise_bm_pet_health', 50) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'all_1a': - return - - actor.removeSkill('expertise_bm_exceptional_nutrition_1') - - actor.removeSkillMod('expertise_bm_pet_health', 50) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_bm_exceptional_nutrition_1") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_bm_exceptional_nutrition_1") return diff --git a/scripts/expertise/expertise_bm_exceptional_nutrition_2.py b/scripts/expertise/expertise_bm_exceptional_nutrition_2.py index acd0ed4b..68aa2189 100644 --- a/scripts/expertise/expertise_bm_exceptional_nutrition_2.py +++ b/scripts/expertise/expertise_bm_exceptional_nutrition_2.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'all_1a': - return - - actor.addSkill('expertise_bm_exceptional_nutrition_2') - - actor.addSkillMod('expertise_bm_pet_health', 50) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'all_1a': - return - - actor.removeSkill('expertise_bm_exceptional_nutrition_2') - - actor.removeSkillMod('expertise_bm_pet_health', 50) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_bm_exceptional_nutrition_2") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_bm_exceptional_nutrition_2") return diff --git a/scripts/expertise/expertise_bm_fortitude_1.py b/scripts/expertise/expertise_bm_fortitude_1.py index bb3c54c6..d1f38de7 100644 --- a/scripts/expertise/expertise_bm_fortitude_1.py +++ b/scripts/expertise/expertise_bm_fortitude_1.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'all_1a': - return - - actor.addSkill('expertise_bm_fortitude_1') - - actor.addSkillMod('expertise_bm_pet_armor', 40) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'all_1a': - return - - actor.removeSkill('expertise_bm_fortitude_1') - - actor.removeSkillMod('expertise_bm_pet_armor', 40) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_bm_fortitude_1") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_bm_fortitude_1") return diff --git a/scripts/expertise/expertise_bm_fortitude_2.py b/scripts/expertise/expertise_bm_fortitude_2.py index b04ea1e4..a2a6f76e 100644 --- a/scripts/expertise/expertise_bm_fortitude_2.py +++ b/scripts/expertise/expertise_bm_fortitude_2.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'all_1a': - return - - actor.addSkill('expertise_bm_fortitude_2') - - actor.addSkillMod('expertise_bm_pet_armor', 40) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'all_1a': - return - - actor.removeSkill('expertise_bm_fortitude_2') - - actor.removeSkillMod('expertise_bm_pet_armor', 40) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_bm_fortitude_2") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_bm_fortitude_2") return diff --git a/scripts/expertise/expertise_bm_fortitude_3.py b/scripts/expertise/expertise_bm_fortitude_3.py index 466ebff1..899a6288 100644 --- a/scripts/expertise/expertise_bm_fortitude_3.py +++ b/scripts/expertise/expertise_bm_fortitude_3.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'all_1a': - return - - actor.addSkill('expertise_bm_fortitude_3') - - actor.addSkillMod('expertise_bm_pet_armor', 40) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'all_1a': - return - - actor.removeSkill('expertise_bm_fortitude_3') - - actor.removeSkillMod('expertise_bm_pet_armor', 40) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_bm_fortitude_3") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_bm_fortitude_3") return diff --git a/scripts/expertise/expertise_bm_genetic_engineering_1.py b/scripts/expertise/expertise_bm_genetic_engineering_1.py index 865d8630..e4efece4 100644 --- a/scripts/expertise/expertise_bm_genetic_engineering_1.py +++ b/scripts/expertise/expertise_bm_genetic_engineering_1.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'all_1a': - return - - actor.addSkill('expertise_bm_genetic_engineering_1') - - actor.addSkillMod('expertise_bm_genetic_engineering', 30) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'all_1a': - return - - actor.removeSkill('expertise_bm_genetic_engineering_1') - - actor.removeSkillMod('expertise_bm_genetic_engineering', 30) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_bm_genetic_engineering_1") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_bm_genetic_engineering_1") return diff --git a/scripts/expertise/expertise_bm_genetic_engineering_2.py b/scripts/expertise/expertise_bm_genetic_engineering_2.py index f25e5200..92cded50 100644 --- a/scripts/expertise/expertise_bm_genetic_engineering_2.py +++ b/scripts/expertise/expertise_bm_genetic_engineering_2.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'all_1a': - return - - actor.addSkill('expertise_bm_genetic_engineering_2') - - actor.addSkillMod('expertise_bm_genetic_engineering', 30) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'all_1a': - return - - actor.removeSkill('expertise_bm_genetic_engineering_2') - - actor.removeSkillMod('expertise_bm_genetic_engineering', 30) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_bm_genetic_engineering_2") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_bm_genetic_engineering_2") return diff --git a/scripts/expertise/expertise_bm_genetic_engineering_3.py b/scripts/expertise/expertise_bm_genetic_engineering_3.py index dc3fd5df..a9521b48 100644 --- a/scripts/expertise/expertise_bm_genetic_engineering_3.py +++ b/scripts/expertise/expertise_bm_genetic_engineering_3.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'all_1a': - return - - actor.addSkill('expertise_bm_genetic_engineering_3') - - actor.addSkillMod('expertise_bm_genetic_engineering', 30) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'all_1a': - return - - actor.removeSkill('expertise_bm_genetic_engineering_3') - - actor.removeSkillMod('expertise_bm_genetic_engineering', 30) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_bm_genetic_engineering_3") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_bm_genetic_engineering_3") return diff --git a/scripts/expertise/expertise_bm_genetic_engineering_4.py b/scripts/expertise/expertise_bm_genetic_engineering_4.py index 283f05f2..22c76382 100644 --- a/scripts/expertise/expertise_bm_genetic_engineering_4.py +++ b/scripts/expertise/expertise_bm_genetic_engineering_4.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'all_1a': - return - - actor.addSkill('expertise_bm_genetic_engineering_4') - - actor.addSkillMod('expertise_bm_genetic_engineering', 30) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'all_1a': - return - - actor.removeSkill('expertise_bm_genetic_engineering_4') - - actor.removeSkillMod('expertise_bm_genetic_engineering', 30) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_bm_genetic_engineering_4") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_bm_genetic_engineering_4") return diff --git a/scripts/expertise/expertise_bm_improved_healing_1.py b/scripts/expertise/expertise_bm_improved_healing_1.py index 5f173fcb..9ccb8bbf 100644 --- a/scripts/expertise/expertise_bm_improved_healing_1.py +++ b/scripts/expertise/expertise_bm_improved_healing_1.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'all_1a': - return - - actor.addSkill('expertise_bm_improved_healing_1') - - actor.addSkillMod('expertise_bm_improved_pet_heal', 20) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'all_1a': - return - - actor.removeSkill('expertise_bm_improved_healing_1') - - actor.removeSkillMod('expertise_bm_improved_pet_heal', 20) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_bm_improved_healing_1") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_bm_improved_healing_1") return diff --git a/scripts/expertise/expertise_bm_improved_healing_2.py b/scripts/expertise/expertise_bm_improved_healing_2.py index d93a6af1..3168a225 100644 --- a/scripts/expertise/expertise_bm_improved_healing_2.py +++ b/scripts/expertise/expertise_bm_improved_healing_2.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'all_1a': - return - - actor.addSkill('expertise_bm_improved_healing_2') - - actor.addSkillMod('expertise_bm_improved_pet_heal', 20) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'all_1a': - return - - actor.removeSkill('expertise_bm_improved_healing_2') - - actor.removeSkillMod('expertise_bm_improved_pet_heal', 20) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_bm_improved_healing_2") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_bm_improved_healing_2") return diff --git a/scripts/expertise/expertise_bm_improved_healing_3.py b/scripts/expertise/expertise_bm_improved_healing_3.py index 3a61f218..c8cd2102 100644 --- a/scripts/expertise/expertise_bm_improved_healing_3.py +++ b/scripts/expertise/expertise_bm_improved_healing_3.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'all_1a': - return - - actor.addSkill('expertise_bm_improved_healing_3') - - actor.addSkillMod('expertise_bm_improved_pet_heal', 20) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'all_1a': - return - - actor.removeSkill('expertise_bm_improved_healing_3') - - actor.removeSkillMod('expertise_bm_improved_pet_heal', 20) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_bm_improved_healing_3") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_bm_improved_healing_3") return diff --git a/scripts/expertise/expertise_bm_incubation_base_1.py b/scripts/expertise/expertise_bm_incubation_base_1.py index 9b7a89bc..94b0399b 100644 --- a/scripts/expertise/expertise_bm_incubation_base_1.py +++ b/scripts/expertise/expertise_bm_incubation_base_1.py @@ -1,50 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'all_1a': - return - - actor.addSkill('expertise_bm_incubation_base_1') - - actor.addSkillMod('expertise_bm_base_mod', 100) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'all_1a': - return - - actor.removeSkill('expertise_bm_incubation_base_1') - - actor.removeSkillMod('expertise_bm_base_mod', 100) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - actor.addAbility('bm_collect_dna') - + actor.addAbility("bm_collect_dna") return def removeAbilities(core, actor, player): - - actor.removeAbility('bm_collect_dna') - + actor.removeAbility("bm_collect_dna") return diff --git a/scripts/expertise/expertise_bm_incubation_mod_1.py b/scripts/expertise/expertise_bm_incubation_mod_1.py index 5dcf4b16..b99b1518 100644 --- a/scripts/expertise/expertise_bm_incubation_mod_1.py +++ b/scripts/expertise/expertise_bm_incubation_mod_1.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'all_1a': - return - - actor.addSkill('expertise_bm_incubation_mod_1') - - actor.addSkillMod('expertise_bm_incubation_quality', 5) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'all_1a': - return - - actor.removeSkill('expertise_bm_incubation_mod_1') - - actor.removeSkillMod('expertise_bm_incubation_quality', 5) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_bm_incubation_mod_1") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_bm_incubation_mod_1") return diff --git a/scripts/expertise/expertise_bm_incubation_mod_2.py b/scripts/expertise/expertise_bm_incubation_mod_2.py index 022fdeff..167f2676 100644 --- a/scripts/expertise/expertise_bm_incubation_mod_2.py +++ b/scripts/expertise/expertise_bm_incubation_mod_2.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'all_1a': - return - - actor.addSkill('expertise_bm_incubation_mod_2') - - actor.addSkillMod('expertise_bm_incubation_quality', 5) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'all_1a': - return - - actor.removeSkill('expertise_bm_incubation_mod_2') - - actor.removeSkillMod('expertise_bm_incubation_quality', 5) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_bm_incubation_mod_2") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_bm_incubation_mod_2") return diff --git a/scripts/expertise/expertise_bm_incubation_mod_3.py b/scripts/expertise/expertise_bm_incubation_mod_3.py index 8460e39e..e90a66ee 100644 --- a/scripts/expertise/expertise_bm_incubation_mod_3.py +++ b/scripts/expertise/expertise_bm_incubation_mod_3.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'all_1a': - return - - actor.addSkill('expertise_bm_incubation_mod_3') - - actor.addSkillMod('expertise_bm_incubation_quality', 10) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'all_1a': - return - - actor.removeSkill('expertise_bm_incubation_mod_3') - - actor.removeSkillMod('expertise_bm_incubation_quality', 10) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_bm_incubation_mod_3") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_bm_incubation_mod_3") return diff --git a/scripts/expertise/expertise_bm_loyalty_mod_1.py b/scripts/expertise/expertise_bm_loyalty_mod_1.py index 628987a3..e697ccab 100644 --- a/scripts/expertise/expertise_bm_loyalty_mod_1.py +++ b/scripts/expertise/expertise_bm_loyalty_mod_1.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'all_1a': - return - - actor.addSkill('expertise_bm_loyalty_mod_1') - - actor.addSkillMod('expertise_bm_pet_happiness', 5) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'all_1a': - return - - actor.removeSkill('expertise_bm_loyalty_mod_1') - - actor.removeSkillMod('expertise_bm_pet_happiness', 5) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_bm_loyalty_mod_1") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_bm_loyalty_mod_1") return diff --git a/scripts/expertise/expertise_bm_loyalty_mod_2.py b/scripts/expertise/expertise_bm_loyalty_mod_2.py index f7c57622..94e893a7 100644 --- a/scripts/expertise/expertise_bm_loyalty_mod_2.py +++ b/scripts/expertise/expertise_bm_loyalty_mod_2.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'all_1a': - return - - actor.addSkill('expertise_bm_loyalty_mod_2') - - actor.addSkillMod('expertise_bm_pet_happiness', 5) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'all_1a': - return - - actor.removeSkill('expertise_bm_loyalty_mod_2') - - actor.removeSkillMod('expertise_bm_pet_happiness', 5) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_bm_loyalty_mod_2") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_bm_loyalty_mod_2") return diff --git a/scripts/expertise/expertise_bm_loyalty_mod_3.py b/scripts/expertise/expertise_bm_loyalty_mod_3.py index 255e4b86..a70c5c6b 100644 --- a/scripts/expertise/expertise_bm_loyalty_mod_3.py +++ b/scripts/expertise/expertise_bm_loyalty_mod_3.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'all_1a': - return - - actor.addSkill('expertise_bm_loyalty_mod_3') - - actor.addSkillMod('expertise_bm_pet_happiness', 5) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'all_1a': - return - - actor.removeSkill('expertise_bm_loyalty_mod_3') - - actor.removeSkillMod('expertise_bm_pet_happiness', 5) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_bm_loyalty_mod_3") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_bm_loyalty_mod_3") return diff --git a/scripts/expertise/expertise_bm_mending_1.py b/scripts/expertise/expertise_bm_mending_1.py index f659d061..19f68bf5 100644 --- a/scripts/expertise/expertise_bm_mending_1.py +++ b/scripts/expertise/expertise_bm_mending_1.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'all_1a': - return - - actor.addSkill('expertise_bm_mending_1') - - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'all_1a': - return - - actor.removeSkill('expertise_bm_mending_1') - - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - actor.addAbility('bm_mend_pet_1') - + actor.addAbility("bm_mend_pet_1") return def removeAbilities(core, actor, player): - - actor.removeAbility('bm_mend_pet_1') - + actor.removeAbility("bm_mend_pet_1") return diff --git a/scripts/expertise/expertise_bm_metagame_mod_1.py b/scripts/expertise/expertise_bm_metagame_mod_1.py index ad8053c1..310506d4 100644 --- a/scripts/expertise/expertise_bm_metagame_mod_1.py +++ b/scripts/expertise/expertise_bm_metagame_mod_1.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'all_1a': - return - - actor.addSkill('expertise_bm_metagame_mod_1') - - actor.addSkillMod('expertise_bm_incubation_time', 3) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'all_1a': - return - - actor.removeSkill('expertise_bm_metagame_mod_1') - - actor.removeSkillMod('expertise_bm_incubation_time', 3) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_bm_metagame_mod_1") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_bm_metagame_mod_1") return diff --git a/scripts/expertise/expertise_bm_metagame_mod_2.py b/scripts/expertise/expertise_bm_metagame_mod_2.py index af8ff1d4..e1138649 100644 --- a/scripts/expertise/expertise_bm_metagame_mod_2.py +++ b/scripts/expertise/expertise_bm_metagame_mod_2.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'all_1a': - return - - actor.addSkill('expertise_bm_metagame_mod_2') - - actor.addSkillMod('expertise_bm_incubation_time', 3) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'all_1a': - return - - actor.removeSkill('expertise_bm_metagame_mod_2') - - actor.removeSkillMod('expertise_bm_incubation_time', 3) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_bm_metagame_mod_2") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_bm_metagame_mod_2") return diff --git a/scripts/expertise/expertise_bm_metagame_mod_3.py b/scripts/expertise/expertise_bm_metagame_mod_3.py index 70409e9c..7b6e0112 100644 --- a/scripts/expertise/expertise_bm_metagame_mod_3.py +++ b/scripts/expertise/expertise_bm_metagame_mod_3.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'all_1a': - return - - actor.addSkill('expertise_bm_metagame_mod_3') - - actor.addSkillMod('expertise_bm_incubation_time', 3) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'all_1a': - return - - actor.removeSkill('expertise_bm_metagame_mod_3') - - actor.removeSkillMod('expertise_bm_incubation_time', 3) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_bm_metagame_mod_3") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_bm_metagame_mod_3") return diff --git a/scripts/expertise/expertise_bm_metagame_mod_4.py b/scripts/expertise/expertise_bm_metagame_mod_4.py index 1e31b545..ffb8090a 100644 --- a/scripts/expertise/expertise_bm_metagame_mod_4.py +++ b/scripts/expertise/expertise_bm_metagame_mod_4.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'all_1a': - return - - actor.addSkill('expertise_bm_metagame_mod_4') - - actor.addSkillMod('expertise_bm_incubation_time', 3) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'all_1a': - return - - actor.removeSkill('expertise_bm_metagame_mod_4') - - actor.removeSkillMod('expertise_bm_incubation_time', 3) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_bm_metagame_mod_4") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_bm_metagame_mod_4") return diff --git a/scripts/expertise/expertise_bm_pet_dodge_1.py b/scripts/expertise/expertise_bm_pet_dodge_1.py index 17868349..fc36117c 100644 --- a/scripts/expertise/expertise_bm_pet_dodge_1.py +++ b/scripts/expertise/expertise_bm_pet_dodge_1.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'all_1a': - return - - actor.addSkill('expertise_bm_pet_dodge_1') - - actor.addSkillMod('expertise_pet_dodge', 5) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'all_1a': - return - - actor.removeSkill('expertise_bm_pet_dodge_1') - - actor.removeSkillMod('expertise_pet_dodge', 5) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_bm_pet_dodge_1") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_bm_pet_dodge_1") return diff --git a/scripts/expertise/expertise_bm_pet_dodge_2.py b/scripts/expertise/expertise_bm_pet_dodge_2.py index 9a6766ad..2341888c 100644 --- a/scripts/expertise/expertise_bm_pet_dodge_2.py +++ b/scripts/expertise/expertise_bm_pet_dodge_2.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'all_1a': - return - - actor.addSkill('expertise_bm_pet_dodge_2') - - actor.addSkillMod('expertise_pet_dodge', 5) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'all_1a': - return - - actor.removeSkill('expertise_bm_pet_dodge_2') - - actor.removeSkillMod('expertise_pet_dodge', 5) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_bm_pet_dodge_2") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_bm_pet_dodge_2") return diff --git a/scripts/expertise/expertise_bm_pet_dodge_3.py b/scripts/expertise/expertise_bm_pet_dodge_3.py index 6166d92b..c9a97d17 100644 --- a/scripts/expertise/expertise_bm_pet_dodge_3.py +++ b/scripts/expertise/expertise_bm_pet_dodge_3.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'all_1a': - return - - actor.addSkill('expertise_bm_pet_dodge_3') - - actor.addSkillMod('expertise_pet_dodge', 5) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'all_1a': - return - - actor.removeSkill('expertise_bm_pet_dodge_3') - - actor.removeSkillMod('expertise_pet_dodge', 5) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_bm_pet_dodge_3") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_bm_pet_dodge_3") return diff --git a/scripts/expertise/expertise_bm_pet_recovery_1.py b/scripts/expertise/expertise_bm_pet_recovery_1.py index 5ecf5f40..1a956cf2 100644 --- a/scripts/expertise/expertise_bm_pet_recovery_1.py +++ b/scripts/expertise/expertise_bm_pet_recovery_1.py @@ -1,46 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'all_1a': - return - - actor.addSkill('expertise_bm_pet_recovery_1') - - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'all_1a': - return - - actor.removeSkill('expertise_bm_pet_recovery_1') - - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_bm_pet_recovery_1") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_bm_pet_recovery_1") return diff --git a/scripts/expertise/expertise_bm_pet_recovery_2.py b/scripts/expertise/expertise_bm_pet_recovery_2.py index ddbf4dae..41c09b07 100644 --- a/scripts/expertise/expertise_bm_pet_recovery_2.py +++ b/scripts/expertise/expertise_bm_pet_recovery_2.py @@ -1,50 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'all_1a': - return - - actor.addSkill('expertise_bm_pet_recovery_2') - - actor.addSkillMod('expertise_bm_pet_revive_time', 5) - actor.addSkillMod('expertise_bm_pet_recovery', 25) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'all_1a': - return - - actor.removeSkill('expertise_bm_pet_recovery_2') - - actor.removeSkillMod('expertise_bm_pet_revive_time', 5) - actor.removeSkillMod('expertise_bm_pet_recovery', 25) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_bm_pet_recovery_2") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_bm_pet_recovery_2") return diff --git a/scripts/expertise/expertise_bm_pet_recovery_3.py b/scripts/expertise/expertise_bm_pet_recovery_3.py index 9be05560..36413c3c 100644 --- a/scripts/expertise/expertise_bm_pet_recovery_3.py +++ b/scripts/expertise/expertise_bm_pet_recovery_3.py @@ -1,50 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'all_1a': - return - - actor.addSkill('expertise_bm_pet_recovery_3') - - actor.addSkillMod('expertise_bm_pet_revive_time', 5) - actor.addSkillMod('expertise_bm_pet_recovery', 25) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'all_1a': - return - - actor.removeSkill('expertise_bm_pet_recovery_3') - - actor.removeSkillMod('expertise_bm_pet_revive_time', 5) - actor.removeSkillMod('expertise_bm_pet_recovery', 25) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_bm_pet_recovery_3") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_bm_pet_recovery_3") return diff --git a/scripts/expertise/expertise_bm_savagery_1.py b/scripts/expertise/expertise_bm_savagery_1.py index 7315df92..27f21562 100644 --- a/scripts/expertise/expertise_bm_savagery_1.py +++ b/scripts/expertise/expertise_bm_savagery_1.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'all_1a': - return - - actor.addSkill('expertise_bm_savagery_1') - - actor.addSkillMod('expertise_bm_pet_damage', 30) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'all_1a': - return - - actor.removeSkill('expertise_bm_savagery_1') - - actor.removeSkillMod('expertise_bm_pet_damage', 30) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_bm_savagery_1") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_bm_savagery_1") return diff --git a/scripts/expertise/expertise_bm_savagery_2.py b/scripts/expertise/expertise_bm_savagery_2.py index 31e83042..09c606de 100644 --- a/scripts/expertise/expertise_bm_savagery_2.py +++ b/scripts/expertise/expertise_bm_savagery_2.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'all_1a': - return - - actor.addSkill('expertise_bm_savagery_2') - - actor.addSkillMod('expertise_bm_pet_damage', 30) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'all_1a': - return - - actor.removeSkill('expertise_bm_savagery_2') - - actor.removeSkillMod('expertise_bm_pet_damage', 30) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_bm_savagery_2") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_bm_savagery_2") return diff --git a/scripts/expertise/expertise_bm_savagery_3.py b/scripts/expertise/expertise_bm_savagery_3.py index c5619d8d..775c9484 100644 --- a/scripts/expertise/expertise_bm_savagery_3.py +++ b/scripts/expertise/expertise_bm_savagery_3.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'all_1a': - return - - actor.addSkill('expertise_bm_savagery_3') - - actor.addSkillMod('expertise_bm_pet_damage', 40) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'all_1a': - return - - actor.removeSkill('expertise_bm_savagery_3') - - actor.removeSkillMod('expertise_bm_pet_damage', 40) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_bm_savagery_3") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_bm_savagery_3") return diff --git a/scripts/expertise/expertise_bm_soothing_comfort_1.py b/scripts/expertise/expertise_bm_soothing_comfort_1.py index 543104f4..53dff95c 100644 --- a/scripts/expertise/expertise_bm_soothing_comfort_1.py +++ b/scripts/expertise/expertise_bm_soothing_comfort_1.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'all_1a': - return - - actor.addSkill('expertise_bm_soothing_comfort_1') - - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'all_1a': - return - - actor.removeSkill('expertise_bm_soothing_comfort_1') - - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - actor.addAbility('bm_soothing_comfort_1') - + actor.addAbility("bm_soothing_comfort_1") return def removeAbilities(core, actor, player): - - actor.removeAbility('bm_soothing_comfort_1') - + actor.removeAbility("bm_soothing_comfort_1") return diff --git a/scripts/expertise/expertise_bm_specialized_supplements_1.py b/scripts/expertise/expertise_bm_specialized_supplements_1.py index 4506f29e..0ea96000 100644 --- a/scripts/expertise/expertise_bm_specialized_supplements_1.py +++ b/scripts/expertise/expertise_bm_specialized_supplements_1.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'all_1a': - return - - actor.addSkill('expertise_bm_specialized_supplements_1') - - actor.addSkillMod('expertise_bm_pet_regen', 100) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'all_1a': - return - - actor.removeSkill('expertise_bm_specialized_supplements_1') - - actor.removeSkillMod('expertise_bm_pet_regen', 100) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_bm_specialized_supplements_1") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_bm_specialized_supplements_1") return diff --git a/scripts/expertise/expertise_co_angled_shrapnel_1.py b/scripts/expertise/expertise_co_angled_shrapnel_1.py index 0b649f92..c2e3f8ce 100644 --- a/scripts/expertise/expertise_co_angled_shrapnel_1.py +++ b/scripts/expertise/expertise_co_angled_shrapnel_1.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'commando_1a': - return - - actor.addSkill('expertise_co_angled_shrapnel_1') - - actor.addSkillMod('expertise_area_size_line_co_remote_detonator', 5) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'commando_1a': - return - - actor.removeSkill('expertise_co_angled_shrapnel_1') - - actor.removeSkillMod('expertise_area_size_line_co_remote_detonator', 5) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_co_angled_shrapnel_1") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_co_angled_shrapnel_1") return diff --git a/scripts/expertise/expertise_co_angled_shrapnel_2.py b/scripts/expertise/expertise_co_angled_shrapnel_2.py index a8801a55..48f5c250 100644 --- a/scripts/expertise/expertise_co_angled_shrapnel_2.py +++ b/scripts/expertise/expertise_co_angled_shrapnel_2.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'commando_1a': - return - - actor.addSkill('expertise_co_angled_shrapnel_2') - - actor.addSkillMod('expertise_area_size_line_co_remote_detonator', 5) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'commando_1a': - return - - actor.removeSkill('expertise_co_angled_shrapnel_2') - - actor.removeSkillMod('expertise_area_size_line_co_remote_detonator', 5) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_co_angled_shrapnel_2") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_co_angled_shrapnel_2") return diff --git a/scripts/expertise/expertise_co_armor_cracker_1.py b/scripts/expertise/expertise_co_armor_cracker_1.py index fe7606f0..5843c904 100644 --- a/scripts/expertise/expertise_co_armor_cracker_1.py +++ b/scripts/expertise/expertise_co_armor_cracker_1.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'commando_1a': - return - - actor.addSkill('expertise_co_armor_cracker_1') - - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'commando_1a': - return - - actor.removeSkill('expertise_co_armor_cracker_1') - - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - actor.addAbility('co_armor_cracker') - + actor.addAbility("co_armor_cracker") return def removeAbilities(core, actor, player): - - actor.removeAbility('co_armor_cracker') - + actor.removeAbility("co_armor_cracker") return diff --git a/scripts/expertise/expertise_co_base_of_operations_1.py b/scripts/expertise/expertise_co_base_of_operations_1.py index 34f5548a..1e406802 100644 --- a/scripts/expertise/expertise_co_base_of_operations_1.py +++ b/scripts/expertise/expertise_co_base_of_operations_1.py @@ -1,50 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'commando_1a': - return - - actor.addSkill('expertise_co_base_of_operations_1') - - actor.addSkillMod('expertise_co_pos_secured_line_armor', 1000) - actor.addSkillMod('expertise_co_pos_secured_line_boo_critical', 5) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'commando_1a': - return - - actor.removeSkill('expertise_co_base_of_operations_1') - - actor.removeSkillMod('expertise_co_pos_secured_line_armor', 1000) - actor.removeSkillMod('expertise_co_pos_secured_line_boo_critical', 5) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_co_base_of_operations_1") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_co_base_of_operations_1") return diff --git a/scripts/expertise/expertise_co_blast_radius_1.py b/scripts/expertise/expertise_co_blast_radius_1.py index f9c87cc7..1dab9e96 100644 --- a/scripts/expertise/expertise_co_blast_radius_1.py +++ b/scripts/expertise/expertise_co_blast_radius_1.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'commando_1a': - return - - actor.addSkill('expertise_co_blast_radius_1') - - actor.addSkillMod('expertise_area_size_line_co_grenade', 1) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'commando_1a': - return - - actor.removeSkill('expertise_co_blast_radius_1') - - actor.removeSkillMod('expertise_area_size_line_co_grenade', 1) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_co_blast_radius_1") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_co_blast_radius_1") return diff --git a/scripts/expertise/expertise_co_blast_radius_2.py b/scripts/expertise/expertise_co_blast_radius_2.py index c640ac02..3cc739c8 100644 --- a/scripts/expertise/expertise_co_blast_radius_2.py +++ b/scripts/expertise/expertise_co_blast_radius_2.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'commando_1a': - return - - actor.addSkill('expertise_co_blast_radius_2') - - actor.addSkillMod('expertise_area_size_line_co_grenade', 1) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'commando_1a': - return - - actor.removeSkill('expertise_co_blast_radius_2') - - actor.removeSkillMod('expertise_area_size_line_co_grenade', 1) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_co_blast_radius_2") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_co_blast_radius_2") return diff --git a/scripts/expertise/expertise_co_blast_radius_3.py b/scripts/expertise/expertise_co_blast_radius_3.py index d4263326..d87f0a4b 100644 --- a/scripts/expertise/expertise_co_blast_radius_3.py +++ b/scripts/expertise/expertise_co_blast_radius_3.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'commando_1a': - return - - actor.addSkill('expertise_co_blast_radius_3') - - actor.addSkillMod('expertise_area_size_line_co_grenade', 1) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'commando_1a': - return - - actor.removeSkill('expertise_co_blast_radius_3') - - actor.removeSkillMod('expertise_area_size_line_co_grenade', 1) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_co_blast_radius_3") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_co_blast_radius_3") return diff --git a/scripts/expertise/expertise_co_blast_radius_4.py b/scripts/expertise/expertise_co_blast_radius_4.py index 64490261..99d44c0c 100644 --- a/scripts/expertise/expertise_co_blast_radius_4.py +++ b/scripts/expertise/expertise_co_blast_radius_4.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'commando_1a': - return - - actor.addSkill('expertise_co_blast_radius_4') - - actor.addSkillMod('expertise_area_size_line_co_grenade', 1) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'commando_1a': - return - - actor.removeSkill('expertise_co_blast_radius_4') - - actor.removeSkillMod('expertise_area_size_line_co_grenade', 1) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_co_blast_radius_4") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_co_blast_radius_4") return diff --git a/scripts/expertise/expertise_co_blast_resistance_1.py b/scripts/expertise/expertise_co_blast_resistance_1.py index 8aff3074..d4b76bda 100644 --- a/scripts/expertise/expertise_co_blast_resistance_1.py +++ b/scripts/expertise/expertise_co_blast_resistance_1.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'commando_1a': - return - - actor.addSkill('expertise_co_blast_resistance_1') - - actor.addSkillMod('area_damage_resist_full_percentage', 5) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'commando_1a': - return - - actor.removeSkill('expertise_co_blast_resistance_1') - - actor.removeSkillMod('area_damage_resist_full_percentage', 5) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_co_blast_resistance_1") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_co_blast_resistance_1") return diff --git a/scripts/expertise/expertise_co_blast_resistance_2.py b/scripts/expertise/expertise_co_blast_resistance_2.py index 7efcf286..6596c815 100644 --- a/scripts/expertise/expertise_co_blast_resistance_2.py +++ b/scripts/expertise/expertise_co_blast_resistance_2.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'commando_1a': - return - - actor.addSkill('expertise_co_blast_resistance_2') - - actor.addSkillMod('area_damage_resist_full_percentage', 5) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'commando_1a': - return - - actor.removeSkill('expertise_co_blast_resistance_2') - - actor.removeSkillMod('area_damage_resist_full_percentage', 5) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_co_blast_resistance_2") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_co_blast_resistance_2") return diff --git a/scripts/expertise/expertise_co_blast_resistance_3.py b/scripts/expertise/expertise_co_blast_resistance_3.py index 57b839ca..8a5b7bc9 100644 --- a/scripts/expertise/expertise_co_blast_resistance_3.py +++ b/scripts/expertise/expertise_co_blast_resistance_3.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'commando_1a': - return - - actor.addSkill('expertise_co_blast_resistance_3') - - actor.addSkillMod('area_damage_resist_full_percentage', 5) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'commando_1a': - return - - actor.removeSkill('expertise_co_blast_resistance_3') - - actor.removeSkillMod('area_damage_resist_full_percentage', 5) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_co_blast_resistance_3") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_co_blast_resistance_3") return diff --git a/scripts/expertise/expertise_co_blast_resistance_4.py b/scripts/expertise/expertise_co_blast_resistance_4.py index 08838e5a..c046b643 100644 --- a/scripts/expertise/expertise_co_blast_resistance_4.py +++ b/scripts/expertise/expertise_co_blast_resistance_4.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'commando_1a': - return - - actor.addSkill('expertise_co_blast_resistance_4') - - actor.addSkillMod('area_damage_resist_full_percentage', 5) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'commando_1a': - return - - actor.removeSkill('expertise_co_blast_resistance_4') - - actor.removeSkillMod('area_damage_resist_full_percentage', 5) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_co_blast_resistance_4") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_co_blast_resistance_4") return diff --git a/scripts/expertise/expertise_co_blow_em_away_1.py b/scripts/expertise/expertise_co_blow_em_away_1.py index 829d7e74..3880d17d 100644 --- a/scripts/expertise/expertise_co_blow_em_away_1.py +++ b/scripts/expertise/expertise_co_blow_em_away_1.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'commando_1a': - return - - actor.addSkill('expertise_co_blow_em_away_1') - - actor.addSkillMod('expertise_co_cluster_bomblet', 2) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'commando_1a': - return - - actor.removeSkill('expertise_co_blow_em_away_1') - - actor.removeSkillMod('expertise_co_cluster_bomblet', 2) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_co_blow_em_away_1") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_co_blow_em_away_1") return diff --git a/scripts/expertise/expertise_co_blow_em_away_2.py b/scripts/expertise/expertise_co_blow_em_away_2.py index 59dc0e4e..11ca839c 100644 --- a/scripts/expertise/expertise_co_blow_em_away_2.py +++ b/scripts/expertise/expertise_co_blow_em_away_2.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'commando_1a': - return - - actor.addSkill('expertise_co_blow_em_away_2') - - actor.addSkillMod('expertise_co_cluster_bomblet', 2) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'commando_1a': - return - - actor.removeSkill('expertise_co_blow_em_away_2') - - actor.removeSkillMod('expertise_co_cluster_bomblet', 2) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_co_blow_em_away_2") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_co_blow_em_away_2") return diff --git a/scripts/expertise/expertise_co_burst_fire_1.py b/scripts/expertise/expertise_co_burst_fire_1.py index f627677e..0522e875 100644 --- a/scripts/expertise/expertise_co_burst_fire_1.py +++ b/scripts/expertise/expertise_co_burst_fire_1.py @@ -1,50 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'commando_1a': - return - - actor.addSkill('expertise_co_burst_fire_1') - - actor.addSkillMod('expertise_co_pos_secured_line_burst_fire_proc', 10) - actor.addSkillMod('expertise_co_pos_secured_line_burst_fire_devastation_bonus', 5) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'commando_1a': - return - - actor.removeSkill('expertise_co_burst_fire_1') - - actor.removeSkillMod('expertise_co_pos_secured_line_burst_fire_proc', 10) - actor.removeSkillMod('expertise_co_pos_secured_line_burst_fire_devastation_bonus', 5) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_co_burst_fire_1") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_co_burst_fire_1") return diff --git a/scripts/expertise/expertise_co_burst_fire_2.py b/scripts/expertise/expertise_co_burst_fire_2.py index ac874237..952ff386 100644 --- a/scripts/expertise/expertise_co_burst_fire_2.py +++ b/scripts/expertise/expertise_co_burst_fire_2.py @@ -1,50 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'commando_1a': - return - - actor.addSkill('expertise_co_burst_fire_2') - - actor.addSkillMod('expertise_co_pos_secured_line_burst_fire_proc', 10) - actor.addSkillMod('expertise_co_pos_secured_line_burst_fire_devastation_bonus', 5) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'commando_1a': - return - - actor.removeSkill('expertise_co_burst_fire_2') - - actor.removeSkillMod('expertise_co_pos_secured_line_burst_fire_proc', 10) - actor.removeSkillMod('expertise_co_pos_secured_line_burst_fire_devastation_bonus', 5) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_co_burst_fire_2") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_co_burst_fire_2") return diff --git a/scripts/expertise/expertise_co_cluster_bomb.py b/scripts/expertise/expertise_co_cluster_bomb.py index 410e0121..5e7a8f05 100644 --- a/scripts/expertise/expertise_co_cluster_bomb.py +++ b/scripts/expertise/expertise_co_cluster_bomb.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'commando_1a': - return - - actor.addSkill('expertise_co_cluster_bomb') - - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'commando_1a': - return - - actor.removeSkill('expertise_co_cluster_bomb') - - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - actor.addAbility('co_cluster_bomb') - + actor.addAbility("co_cluster_bomb") return def removeAbilities(core, actor, player): - - actor.removeAbility('co_cluster_bomb') - + actor.removeAbility("co_cluster_bomb") return diff --git a/scripts/expertise/expertise_co_deflective_armor_1.py b/scripts/expertise/expertise_co_deflective_armor_1.py index 540653a9..52b523c5 100644 --- a/scripts/expertise/expertise_co_deflective_armor_1.py +++ b/scripts/expertise/expertise_co_deflective_armor_1.py @@ -1,47 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'commando_1a': - return - - actor.addSkill('expertise_co_deflective_armor_1') - - actor.addSkillMod('damage_decrease_percentage', 2) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'commando_1a': - return - - actor.removeSkill('expertise_co_deflective_armor_1') - - actor.removeSkillMod('damage_decrease_percentage', 2) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - + actor.addAbility("expertise_co_deflective_armor_1") return - + def removeAbilities(core, actor, player): - + actor.removeAbility("expertise_co_deflective_armor_1") return - \ No newline at end of file diff --git a/scripts/expertise/expertise_co_deflective_armor_2.py b/scripts/expertise/expertise_co_deflective_armor_2.py index 0204a191..2ece0722 100644 --- a/scripts/expertise/expertise_co_deflective_armor_2.py +++ b/scripts/expertise/expertise_co_deflective_armor_2.py @@ -1,47 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'commando_1a': - return - - actor.addSkill('expertise_co_deflective_armor_2') - - actor.addSkillMod('damage_decrease_percentage', 2) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'commando_1a': - return - - actor.removeSkill('expertise_co_deflective_armor_2') - - actor.removeSkillMod('damage_decrease_percentage', 2) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - + actor.addAbility("expertise_co_deflective_armor_2") return - + def removeAbilities(core, actor, player): - + actor.removeAbility("expertise_co_deflective_armor_2") return - \ No newline at end of file diff --git a/scripts/expertise/expertise_co_deflective_armor_3.py b/scripts/expertise/expertise_co_deflective_armor_3.py index 65870a67..245175f4 100644 --- a/scripts/expertise/expertise_co_deflective_armor_3.py +++ b/scripts/expertise/expertise_co_deflective_armor_3.py @@ -1,47 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'commando_1a': - return - - actor.addSkill('expertise_co_deflective_armor_3') - - actor.addSkillMod('damage_decrease_percentage', 2) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'commando_1a': - return - - actor.removeSkill('expertise_co_deflective_armor_3') - - actor.removeSkillMod('damage_decrease_percentage', 2) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - + actor.addAbility("expertise_co_deflective_armor_3") return - + def removeAbilities(core, actor, player): - + actor.removeAbility("expertise_co_deflective_armor_3") return - \ No newline at end of file diff --git a/scripts/expertise/expertise_co_deflective_armor_4.py b/scripts/expertise/expertise_co_deflective_armor_4.py index 94d853ef..e3e5d15f 100644 --- a/scripts/expertise/expertise_co_deflective_armor_4.py +++ b/scripts/expertise/expertise_co_deflective_armor_4.py @@ -1,47 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'commando_1a': - return - - actor.addSkill('expertise_co_deflective_armor_4') - - actor.addSkillMod('damage_decrease_percentage', 2) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'commando_1a': - return - - actor.removeSkill('expertise_co_deflective_armor_4') - - actor.removeSkillMod('damage_decrease_percentage', 2) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - + actor.addAbility("expertise_co_deflective_armor_4") return - + def removeAbilities(core, actor, player): - + actor.removeAbility("expertise_co_deflective_armor_4") return - \ No newline at end of file diff --git a/scripts/expertise/expertise_co_diagnostic_armor_1.py b/scripts/expertise/expertise_co_diagnostic_armor_1.py index 5eaac3ad..974a3234 100644 --- a/scripts/expertise/expertise_co_diagnostic_armor_1.py +++ b/scripts/expertise/expertise_co_diagnostic_armor_1.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'commando_1a': - return - - actor.addSkill('expertise_co_diagnostic_armor_1') - - actor.addSkillMod('expertise_dot_absorption_all', 25) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'commando_1a': - return - - actor.removeSkill('expertise_co_diagnostic_armor_1') - - actor.removeSkillMod('expertise_dot_absorption_all', 25) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_co_diagnostic_armor_1") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_co_diagnostic_armor_1") return diff --git a/scripts/expertise/expertise_co_enhanced_constitution_1.py b/scripts/expertise/expertise_co_enhanced_constitution_1.py index 8b70e62a..f2320188 100644 --- a/scripts/expertise/expertise_co_enhanced_constitution_1.py +++ b/scripts/expertise/expertise_co_enhanced_constitution_1.py @@ -1,47 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'commando_1a': - return - - actor.addSkill('expertise_co_enhanced_constitution_1') - - actor.addSkillMod('constitution_modified', 50) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'commando_1a': - return - - actor.removeSkill('expertise_co_enhanced_constitution_1') - - actor.removeSkillMod('constitution_modified', 50) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - + actor.addAbility("expertise_co_enhanced_constitution_1") return def removeAbilities(core, actor, player): - + actor.removeAbility("expertise_co_enhanced_constitution_1") return - diff --git a/scripts/expertise/expertise_co_enhanced_constitution_2.py b/scripts/expertise/expertise_co_enhanced_constitution_2.py index e6933f70..4afc434d 100644 --- a/scripts/expertise/expertise_co_enhanced_constitution_2.py +++ b/scripts/expertise/expertise_co_enhanced_constitution_2.py @@ -1,47 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'commando_1a': - return - - actor.addSkill('expertise_co_enhanced_constitution_2') - - actor.addSkillMod('constitution_modified', 50) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'commando_1a': - return - - actor.removeSkill('expertise_co_enhanced_constitution_2') - - actor.removeSkillMod('constitution_modified', 50) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - + actor.addAbility("expertise_co_enhanced_constitution_2") return def removeAbilities(core, actor, player): - + actor.removeAbility("expertise_co_enhanced_constitution_2") return - diff --git a/scripts/expertise/expertise_co_enhanced_fuel_cans_1.py b/scripts/expertise/expertise_co_enhanced_fuel_cans_1.py index a05bf5ea..58cfa70c 100644 --- a/scripts/expertise/expertise_co_enhanced_fuel_cans_1.py +++ b/scripts/expertise/expertise_co_enhanced_fuel_cans_1.py @@ -1,52 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'commando_1a': - return - - actor.addSkill('expertise_co_enhanced_fuel_cans_1') - - actor.addSkillMod('expertise_action_weapon_12', 5) - actor.addSkillMod('expertise_action_weapon_13', 5) - actor.addSkillMod('commando_passive_dot', 1) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'commando_1a': - return - - actor.removeSkill('expertise_co_enhanced_fuel_cans_1') - - actor.removeSkillMod('expertise_action_weapon_12', 5) - actor.removeSkillMod('expertise_action_weapon_13', 5) - actor.removeSkillMod('commando_passive_dot', 1) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_co_enhanced_fuel_cans_1") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_co_enhanced_fuel_cans_1") return diff --git a/scripts/expertise/expertise_co_enhanced_fuel_cans_2.py b/scripts/expertise/expertise_co_enhanced_fuel_cans_2.py index 1a4a142d..f4449372 100644 --- a/scripts/expertise/expertise_co_enhanced_fuel_cans_2.py +++ b/scripts/expertise/expertise_co_enhanced_fuel_cans_2.py @@ -1,52 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'commando_1a': - return - - actor.addSkill('expertise_co_enhanced_fuel_cans_2') - - actor.addSkillMod('expertise_action_weapon_12', 5) - actor.addSkillMod('expertise_action_weapon_13', 5) - actor.addSkillMod('commando_passive_dot', 1) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'commando_1a': - return - - actor.removeSkill('expertise_co_enhanced_fuel_cans_2') - - actor.removeSkillMod('expertise_action_weapon_12', 5) - actor.removeSkillMod('expertise_action_weapon_13', 5) - actor.removeSkillMod('commando_passive_dot', 1) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_co_enhanced_fuel_cans_2") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_co_enhanced_fuel_cans_2") return diff --git a/scripts/expertise/expertise_co_enhanced_fuel_cans_3.py b/scripts/expertise/expertise_co_enhanced_fuel_cans_3.py index 9b8ca94a..9b4f7cd1 100644 --- a/scripts/expertise/expertise_co_enhanced_fuel_cans_3.py +++ b/scripts/expertise/expertise_co_enhanced_fuel_cans_3.py @@ -1,52 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'commando_1a': - return - - actor.addSkill('expertise_co_enhanced_fuel_cans_3') - - actor.addSkillMod('expertise_action_weapon_12', 5) - actor.addSkillMod('expertise_action_weapon_13', 5) - actor.addSkillMod('commando_passive_dot', 1) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'commando_1a': - return - - actor.removeSkill('expertise_co_enhanced_fuel_cans_3') - - actor.removeSkillMod('expertise_action_weapon_12', 5) - actor.removeSkillMod('expertise_action_weapon_13', 5) - actor.removeSkillMod('commando_passive_dot', 1) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_co_enhanced_fuel_cans_3") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_co_enhanced_fuel_cans_3") return diff --git a/scripts/expertise/expertise_co_enhanced_fuel_cans_4.py b/scripts/expertise/expertise_co_enhanced_fuel_cans_4.py index df5fd47f..ab78cd77 100644 --- a/scripts/expertise/expertise_co_enhanced_fuel_cans_4.py +++ b/scripts/expertise/expertise_co_enhanced_fuel_cans_4.py @@ -1,52 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'commando_1a': - return - - actor.addSkill('expertise_co_enhanced_fuel_cans_4') - - actor.addSkillMod('expertise_action_weapon_12', 5) - actor.addSkillMod('expertise_action_weapon_13', 5) - actor.addSkillMod('commando_passive_dot', 1) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'commando_1a': - return - - actor.removeSkill('expertise_co_enhanced_fuel_cans_4') - - actor.removeSkillMod('expertise_action_weapon_12', 5) - actor.removeSkillMod('expertise_action_weapon_13', 5) - actor.removeSkillMod('commando_passive_dot', 1) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_co_enhanced_fuel_cans_4") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_co_enhanced_fuel_cans_4") return diff --git a/scripts/expertise/expertise_co_enhanced_precision_1.py b/scripts/expertise/expertise_co_enhanced_precision_1.py index 8d018a05..250e6d10 100644 --- a/scripts/expertise/expertise_co_enhanced_precision_1.py +++ b/scripts/expertise/expertise_co_enhanced_precision_1.py @@ -1,47 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'commando_1a': - return - - actor.addSkill('expertise_co_enhanced_precision_1') - - actor.addSkillMod('precision_modified', 25) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'commando_1a': - return - - actor.removeSkill('expertise_co_enhanced_precision_1') - - actor.removeSkillMod('precision_modified', 25) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - + actor.addAbility("expertise_co_enhanced_precision_1") return def removeAbilities(core, actor, player): - + actor.removeAbility("expertise_co_enhanced_precision_1") return - diff --git a/scripts/expertise/expertise_co_enhanced_precision_2.py b/scripts/expertise/expertise_co_enhanced_precision_2.py index d8a8f30b..7d965d8c 100644 --- a/scripts/expertise/expertise_co_enhanced_precision_2.py +++ b/scripts/expertise/expertise_co_enhanced_precision_2.py @@ -1,46 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'commando_1a': - return - - actor.addSkill('expertise_co_enhanced_precision_2') - - actor.addSkillMod('precision_modified', 25) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'commando_1a': - return - - actor.removeSkill('expertise_co_enhanced_precision_2') - - actor.removeSkillMod('precision_modified', 25) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - + actor.addAbility("expertise_co_enhanced_precision_2") return def removeAbilities(core, actor, player): - + actor.removeAbility("expertise_co_enhanced_precision_2") return diff --git a/scripts/expertise/expertise_co_enhanced_stamina_1.py b/scripts/expertise/expertise_co_enhanced_stamina_1.py index 4de92218..cbdb7744 100644 --- a/scripts/expertise/expertise_co_enhanced_stamina_1.py +++ b/scripts/expertise/expertise_co_enhanced_stamina_1.py @@ -1,47 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'commando_1a': - return - - actor.addSkill('expertise_co_enhanced_stamina_1') - - actor.addSkillMod('stamina_modified', 25) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'commando_1a': - return - - actor.removeSkill('expertise_co_enhanced_stamina_1') - - actor.removeSkillMod('stamina_modified', 25) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - + actor.addAbility("expertise_co_enhanced_stamina_1") return def removeAbilities(core, actor, player): - + actor.removeAbility("expertise_co_enhanced_stamina_1") return - diff --git a/scripts/expertise/expertise_co_enhanced_stamina_2.py b/scripts/expertise/expertise_co_enhanced_stamina_2.py index 7ab0b25a..5afc8f93 100644 --- a/scripts/expertise/expertise_co_enhanced_stamina_2.py +++ b/scripts/expertise/expertise_co_enhanced_stamina_2.py @@ -1,46 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'commando_1a': - return - - actor.addSkill('expertise_co_enhanced_stamina_2') - - actor.addSkillMod('stamina_modified', 25) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'commando_1a': - return - - actor.removeSkill('expertise_co_enhanced_stamina_2') - - actor.removeSkillMod('stamina_modified', 25) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - + actor.addAbility("expertise_co_enhanced_stamina_2") return def removeAbilities(core, actor, player): - + actor.removeAbility("expertise_co_enhanced_stamina_2") return diff --git a/scripts/expertise/expertise_co_flashbang_1.py b/scripts/expertise/expertise_co_flashbang_1.py index 5408fa91..74b642c1 100644 --- a/scripts/expertise/expertise_co_flashbang_1.py +++ b/scripts/expertise/expertise_co_flashbang_1.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'commando_1a': - return - - actor.addSkill('expertise_co_flashbang_1') - - actor.addSkillMod('expertise_co_flash_bang', 50) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'commando_1a': - return - - actor.removeSkill('expertise_co_flashbang_1') - - actor.removeSkillMod('expertise_co_flash_bang', 50) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_co_flashbang_1") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_co_flashbang_1") return diff --git a/scripts/expertise/expertise_co_flashbang_2.py b/scripts/expertise/expertise_co_flashbang_2.py index 806107a1..bad49ff3 100644 --- a/scripts/expertise/expertise_co_flashbang_2.py +++ b/scripts/expertise/expertise_co_flashbang_2.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'commando_1a': - return - - actor.addSkill('expertise_co_flashbang_2') - - actor.addSkillMod('expertise_co_flash_bang', 50) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'commando_1a': - return - - actor.removeSkill('expertise_co_flashbang_2') - - actor.removeSkillMod('expertise_co_flash_bang', 50) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_co_flashbang_2") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_co_flashbang_2") return diff --git a/scripts/expertise/expertise_co_focus_beam_1.py b/scripts/expertise/expertise_co_focus_beam_1.py index b74caea5..0dec8d0a 100644 --- a/scripts/expertise/expertise_co_focus_beam_1.py +++ b/scripts/expertise/expertise_co_focus_beam_1.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'commando_1a': - return - - actor.addSkill('expertise_co_focus_beam_1') - - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'commando_1a': - return - - actor.removeSkill('expertise_co_focus_beam_1') - - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - actor.addAbility('co_hw_dm_1') - + actor.addAbility("co_hw_dm_1") return def removeAbilities(core, actor, player): - - actor.removeAbility('co_hw_dm_1') - + actor.removeAbility("co_hw_dm_1") return diff --git a/scripts/expertise/expertise_co_general_enhanced_luck_1.py b/scripts/expertise/expertise_co_general_enhanced_luck_1.py index 6f6319ab..8f303625 100644 --- a/scripts/expertise/expertise_co_general_enhanced_luck_1.py +++ b/scripts/expertise/expertise_co_general_enhanced_luck_1.py @@ -1,47 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'commando_1a': - return - - actor.addSkill('expertise_co_general_enhanced_luck_1') - - actor.addSkillMod('luck_modified', 25) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'commando_1a': - return - - actor.removeSkill('expertise_co_general_enhanced_luck_1') - - actor.removeSkillMod('luck_modified', 25) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - + actor.addAbility("expertise_co_general_enhanced_luck_1") return def removeAbilities(core, actor, player): - + actor.removeAbility("expertise_co_general_enhanced_luck_1") return - diff --git a/scripts/expertise/expertise_co_general_enhanced_luck_2.py b/scripts/expertise/expertise_co_general_enhanced_luck_2.py index 2e626644..598a9a1d 100644 --- a/scripts/expertise/expertise_co_general_enhanced_luck_2.py +++ b/scripts/expertise/expertise_co_general_enhanced_luck_2.py @@ -1,47 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'commando_1a': - return - - actor.addSkill('expertise_co_general_enhanced_luck_2') - - actor.addSkillMod('luck_modified', 25) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'commando_1a': - return - - actor.removeSkill('expertise_co_general_enhanced_luck_2') - - actor.removeSkillMod('luck_modified', 25) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - + actor.addAbility("expertise_co_general_enhanced_luck_2") return def removeAbilities(core, actor, player): - + actor.removeAbility("expertise_co_general_enhanced_luck_2") return - diff --git a/scripts/expertise/expertise_co_heavy_ammunition_1.py b/scripts/expertise/expertise_co_heavy_ammunition_1.py index 86e9e6d5..90f370b1 100644 --- a/scripts/expertise/expertise_co_heavy_ammunition_1.py +++ b/scripts/expertise/expertise_co_heavy_ammunition_1.py @@ -1,50 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'commando_1a': - return - - actor.addSkill('expertise_co_heavy_ammunition_1') - - actor.addSkillMod('expertise_damage_weapon_0', 2) - actor.addSkillMod('expertise_damage_weapon_1', 2) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'commando_1a': - return - - actor.removeSkill('expertise_co_heavy_ammunition_1') - - actor.removeSkillMod('expertise_damage_weapon_0', 2) - actor.removeSkillMod('expertise_damage_weapon_1', 2) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_co_heavy_ammunition_1") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_co_heavy_ammunition_1") return diff --git a/scripts/expertise/expertise_co_heavy_ammunition_2.py b/scripts/expertise/expertise_co_heavy_ammunition_2.py index 82c48ece..cd20a2e4 100644 --- a/scripts/expertise/expertise_co_heavy_ammunition_2.py +++ b/scripts/expertise/expertise_co_heavy_ammunition_2.py @@ -1,50 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'commando_1a': - return - - actor.addSkill('expertise_co_heavy_ammunition_2') - - actor.addSkillMod('expertise_damage_weapon_0', 2) - actor.addSkillMod('expertise_damage_weapon_1', 2) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'commando_1a': - return - - actor.removeSkill('expertise_co_heavy_ammunition_2') - - actor.removeSkillMod('expertise_damage_weapon_0', 2) - actor.removeSkillMod('expertise_damage_weapon_1', 2) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_co_heavy_ammunition_2") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_co_heavy_ammunition_2") return diff --git a/scripts/expertise/expertise_co_heavy_ammunition_3.py b/scripts/expertise/expertise_co_heavy_ammunition_3.py index c87f41dd..07492f2a 100644 --- a/scripts/expertise/expertise_co_heavy_ammunition_3.py +++ b/scripts/expertise/expertise_co_heavy_ammunition_3.py @@ -1,50 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'commando_1a': - return - - actor.addSkill('expertise_co_heavy_ammunition_3') - - actor.addSkillMod('expertise_damage_weapon_0', 2) - actor.addSkillMod('expertise_damage_weapon_1', 2) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'commando_1a': - return - - actor.removeSkill('expertise_co_heavy_ammunition_3') - - actor.removeSkillMod('expertise_damage_weapon_0', 2) - actor.removeSkillMod('expertise_damage_weapon_1', 2) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_co_heavy_ammunition_3") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_co_heavy_ammunition_3") return diff --git a/scripts/expertise/expertise_co_heavy_ammunition_4.py b/scripts/expertise/expertise_co_heavy_ammunition_4.py index 20577637..5bbd826a 100644 --- a/scripts/expertise/expertise_co_heavy_ammunition_4.py +++ b/scripts/expertise/expertise_co_heavy_ammunition_4.py @@ -1,50 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'commando_1a': - return - - actor.addSkill('expertise_co_heavy_ammunition_4') - - actor.addSkillMod('expertise_damage_weapon_0', 2) - actor.addSkillMod('expertise_damage_weapon_1', 2) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'commando_1a': - return - - actor.removeSkill('expertise_co_heavy_ammunition_4') - - actor.removeSkillMod('expertise_damage_weapon_0', 2) - actor.removeSkillMod('expertise_damage_weapon_1', 2) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_co_heavy_ammunition_4") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_co_heavy_ammunition_4") return diff --git a/scripts/expertise/expertise_co_hose_down_1.py b/scripts/expertise/expertise_co_hose_down_1.py index bc6dfcfc..466d938a 100644 --- a/scripts/expertise/expertise_co_hose_down_1.py +++ b/scripts/expertise/expertise_co_hose_down_1.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'commando_1a': - return - - actor.addSkill('expertise_co_hose_down_1') - - actor.addSkillMod('expertise_action_line_co_dm', 5) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'commando_1a': - return - - actor.removeSkill('expertise_co_hose_down_1') - - actor.removeSkillMod('expertise_action_line_co_dm', 5) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_co_hose_down_1") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_co_hose_down_1") return diff --git a/scripts/expertise/expertise_co_hose_down_2.py b/scripts/expertise/expertise_co_hose_down_2.py index e4944ff0..5b631478 100644 --- a/scripts/expertise/expertise_co_hose_down_2.py +++ b/scripts/expertise/expertise_co_hose_down_2.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'commando_1a': - return - - actor.addSkill('expertise_co_hose_down_2') - - actor.addSkillMod('expertise_action_line_co_dm', 5) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'commando_1a': - return - - actor.removeSkill('expertise_co_hose_down_2') - - actor.removeSkillMod('expertise_action_line_co_dm', 5) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_co_hose_down_2") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_co_hose_down_2") return diff --git a/scripts/expertise/expertise_co_imp_position_secured_1.py b/scripts/expertise/expertise_co_imp_position_secured_1.py index 76c5c253..26286412 100644 --- a/scripts/expertise/expertise_co_imp_position_secured_1.py +++ b/scripts/expertise/expertise_co_imp_position_secured_1.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'commando_1a': - return - - actor.addSkill('expertise_co_imp_position_secured_1') - - actor.addSkillMod('expertise_action_line_co_imp_pos_sec', 10) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'commando_1a': - return - - actor.removeSkill('expertise_co_imp_position_secured_1') - - actor.removeSkillMod('expertise_action_line_co_imp_pos_sec', 10) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_co_imp_position_secured_1") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_co_imp_position_secured_1") return diff --git a/scripts/expertise/expertise_co_imp_position_secured_2.py b/scripts/expertise/expertise_co_imp_position_secured_2.py index c4caa65e..2a134cd0 100644 --- a/scripts/expertise/expertise_co_imp_position_secured_2.py +++ b/scripts/expertise/expertise_co_imp_position_secured_2.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'commando_1a': - return - - actor.addSkill('expertise_co_imp_position_secured_2') - - actor.addSkillMod('expertise_action_line_co_imp_pos_sec', 10) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'commando_1a': - return - - actor.removeSkill('expertise_co_imp_position_secured_2') - - actor.removeSkillMod('expertise_action_line_co_imp_pos_sec', 10) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_co_imp_position_secured_2") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_co_imp_position_secured_2") return diff --git a/scripts/expertise/expertise_co_imp_position_secured_3.py b/scripts/expertise/expertise_co_imp_position_secured_3.py index eecc94ca..f18a8164 100644 --- a/scripts/expertise/expertise_co_imp_position_secured_3.py +++ b/scripts/expertise/expertise_co_imp_position_secured_3.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'commando_1a': - return - - actor.addSkill('expertise_co_imp_position_secured_3') - - actor.addSkillMod('expertise_action_line_co_imp_pos_sec', 10) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'commando_1a': - return - - actor.removeSkill('expertise_co_imp_position_secured_3') - - actor.removeSkillMod('expertise_action_line_co_imp_pos_sec', 10) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_co_imp_position_secured_3") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_co_imp_position_secured_3") return diff --git a/scripts/expertise/expertise_co_imp_riddle_armor_1.py b/scripts/expertise/expertise_co_imp_riddle_armor_1.py index e05eaba7..2c83b9e3 100644 --- a/scripts/expertise/expertise_co_imp_riddle_armor_1.py +++ b/scripts/expertise/expertise_co_imp_riddle_armor_1.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'commando_1a': - return - - actor.addSkill('expertise_co_imp_riddle_armor_1') - - actor.addSkillMod('expertise_cooldown_line_co_riddle_armor', 2) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'commando_1a': - return - - actor.removeSkill('expertise_co_imp_riddle_armor_1') - - actor.removeSkillMod('expertise_cooldown_line_co_riddle_armor', 2) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_co_imp_riddle_armor_1") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_co_imp_riddle_armor_1") return diff --git a/scripts/expertise/expertise_co_imp_riddle_armor_2.py b/scripts/expertise/expertise_co_imp_riddle_armor_2.py index a6c99f37..be67095b 100644 --- a/scripts/expertise/expertise_co_imp_riddle_armor_2.py +++ b/scripts/expertise/expertise_co_imp_riddle_armor_2.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'commando_1a': - return - - actor.addSkill('expertise_co_imp_riddle_armor_2') - - actor.addSkillMod('expertise_cooldown_line_co_riddle_armor', 2) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'commando_1a': - return - - actor.removeSkill('expertise_co_imp_riddle_armor_2') - - actor.removeSkillMod('expertise_cooldown_line_co_riddle_armor', 2) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_co_imp_riddle_armor_2") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_co_imp_riddle_armor_2") return diff --git a/scripts/expertise/expertise_co_imp_stand_fast_1.py b/scripts/expertise/expertise_co_imp_stand_fast_1.py index aa2b8fdd..e1c77d58 100644 --- a/scripts/expertise/expertise_co_imp_stand_fast_1.py +++ b/scripts/expertise/expertise_co_imp_stand_fast_1.py @@ -1,52 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'commando_1a': - return - - actor.addSkill('expertise_co_imp_stand_fast_1') - - actor.addSkillMod('expertise_damage_decrease_percentage', 5) - actor.addSkillMod('expertise_buff_duration_line_co_stand_fast', 2) - actor.addSkillMod('expertise_cooldown_line_co_stand_fast', 120) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'commando_1a': - return - - actor.removeSkill('expertise_co_imp_stand_fast_1') - - actor.removeSkillMod('expertise_damage_decrease_percentage', 5) - actor.removeSkillMod('expertise_buff_duration_line_co_stand_fast', 2) - actor.removeSkillMod('expertise_cooldown_line_co_stand_fast', 120) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_co_imp_stand_fast_1") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_co_imp_stand_fast_1") return diff --git a/scripts/expertise/expertise_co_imp_stand_fast_2.py b/scripts/expertise/expertise_co_imp_stand_fast_2.py index d5d1f95e..b4daa5e8 100644 --- a/scripts/expertise/expertise_co_imp_stand_fast_2.py +++ b/scripts/expertise/expertise_co_imp_stand_fast_2.py @@ -1,52 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'commando_1a': - return - - actor.addSkill('expertise_co_imp_stand_fast_2') - - actor.addSkillMod('expertise_damage_decrease_percentage', 5) - actor.addSkillMod('expertise_buff_duration_line_co_stand_fast', 2) - actor.addSkillMod('expertise_cooldown_line_co_stand_fast', 120) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'commando_1a': - return - - actor.removeSkill('expertise_co_imp_stand_fast_2') - - actor.removeSkillMod('expertise_damage_decrease_percentage', 5) - actor.removeSkillMod('expertise_buff_duration_line_co_stand_fast', 2) - actor.removeSkillMod('expertise_cooldown_line_co_stand_fast', 120) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_co_imp_stand_fast_2") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_co_imp_stand_fast_2") return diff --git a/scripts/expertise/expertise_co_imp_stand_fast_3.py b/scripts/expertise/expertise_co_imp_stand_fast_3.py index 1cc88783..9e3ddf52 100644 --- a/scripts/expertise/expertise_co_imp_stand_fast_3.py +++ b/scripts/expertise/expertise_co_imp_stand_fast_3.py @@ -1,52 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'commando_1a': - return - - actor.addSkill('expertise_co_imp_stand_fast_3') - - actor.addSkillMod('expertise_damage_decrease_percentage', 5) - actor.addSkillMod('expertise_buff_duration_line_co_stand_fast', 2) - actor.addSkillMod('expertise_cooldown_line_co_stand_fast', 120) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'commando_1a': - return - - actor.removeSkill('expertise_co_imp_stand_fast_3') - - actor.removeSkillMod('expertise_damage_decrease_percentage', 5) - actor.removeSkillMod('expertise_buff_duration_line_co_stand_fast', 2) - actor.removeSkillMod('expertise_cooldown_line_co_stand_fast', 120) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_co_imp_stand_fast_3") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_co_imp_stand_fast_3") return diff --git a/scripts/expertise/expertise_co_improved_explosives_1.py b/scripts/expertise/expertise_co_improved_explosives_1.py index d4c61b00..7479e8d1 100644 --- a/scripts/expertise/expertise_co_improved_explosives_1.py +++ b/scripts/expertise/expertise_co_improved_explosives_1.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'commando_1a': - return - - actor.addSkill('expertise_co_improved_explosives_1') - - actor.addSkillMod('expertise_damage_line_co_remote_detonator', 75) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'commando_1a': - return - - actor.removeSkill('expertise_co_improved_explosives_1') - - actor.removeSkillMod('expertise_damage_line_co_remote_detonator', 75) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_co_improved_explosives_1") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_co_improved_explosives_1") return diff --git a/scripts/expertise/expertise_co_improved_explosives_2.py b/scripts/expertise/expertise_co_improved_explosives_2.py index 088ad931..485df881 100644 --- a/scripts/expertise/expertise_co_improved_explosives_2.py +++ b/scripts/expertise/expertise_co_improved_explosives_2.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'commando_1a': - return - - actor.addSkill('expertise_co_improved_explosives_2') - - actor.addSkillMod('expertise_damage_line_co_remote_detonator', 75) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'commando_1a': - return - - actor.removeSkill('expertise_co_improved_explosives_2') - - actor.removeSkillMod('expertise_damage_line_co_remote_detonator', 75) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_co_improved_explosives_2") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_co_improved_explosives_2") return diff --git a/scripts/expertise/expertise_co_improved_explosives_3.py b/scripts/expertise/expertise_co_improved_explosives_3.py index 36f59b79..3abcab9b 100644 --- a/scripts/expertise/expertise_co_improved_explosives_3.py +++ b/scripts/expertise/expertise_co_improved_explosives_3.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'commando_1a': - return - - actor.addSkill('expertise_co_improved_explosives_3') - - actor.addSkillMod('expertise_damage_line_co_remote_detonator', 75) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'commando_1a': - return - - actor.removeSkill('expertise_co_improved_explosives_3') - - actor.removeSkillMod('expertise_damage_line_co_remote_detonator', 75) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_co_improved_explosives_3") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_co_improved_explosives_3") return diff --git a/scripts/expertise/expertise_co_improved_explosives_4.py b/scripts/expertise/expertise_co_improved_explosives_4.py index 0388018e..99b4e564 100644 --- a/scripts/expertise/expertise_co_improved_explosives_4.py +++ b/scripts/expertise/expertise_co_improved_explosives_4.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'commando_1a': - return - - actor.addSkill('expertise_co_improved_explosives_4') - - actor.addSkillMod('expertise_damage_line_co_remote_detonator', 75) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'commando_1a': - return - - actor.removeSkill('expertise_co_improved_explosives_4') - - actor.removeSkillMod('expertise_damage_line_co_remote_detonator', 75) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_co_improved_explosives_4") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_co_improved_explosives_4") return diff --git a/scripts/expertise/expertise_co_keen_eye_1.py b/scripts/expertise/expertise_co_keen_eye_1.py index 03a62449..b03ebc46 100644 --- a/scripts/expertise/expertise_co_keen_eye_1.py +++ b/scripts/expertise/expertise_co_keen_eye_1.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'commando_1a': - return - - actor.addSkill('expertise_co_keen_eye_1') - - actor.addSkillMod('expertise_range_bonus_ranged', 4) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'commando_1a': - return - - actor.removeSkill('expertise_co_keen_eye_1') - - actor.removeSkillMod('expertise_range_bonus_ranged', 4) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_co_keen_eye_1") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_co_keen_eye_1") return diff --git a/scripts/expertise/expertise_co_keen_eye_2.py b/scripts/expertise/expertise_co_keen_eye_2.py index b5fcd60b..aff4527a 100644 --- a/scripts/expertise/expertise_co_keen_eye_2.py +++ b/scripts/expertise/expertise_co_keen_eye_2.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'commando_1a': - return - - actor.addSkill('expertise_co_keen_eye_2') - - actor.addSkillMod('expertise_range_bonus_ranged', 4) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'commando_1a': - return - - actor.removeSkill('expertise_co_keen_eye_2') - - actor.removeSkillMod('expertise_range_bonus_ranged', 4) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_co_keen_eye_2") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_co_keen_eye_2") return diff --git a/scripts/expertise/expertise_co_killing_grimace_1.py b/scripts/expertise/expertise_co_killing_grimace_1.py index 18b03ffe..091846d5 100644 --- a/scripts/expertise/expertise_co_killing_grimace_1.py +++ b/scripts/expertise/expertise_co_killing_grimace_1.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'commando_1a': - return - - actor.addSkill('expertise_co_killing_grimace_1') - - actor.addSkillMod('expertise_co_killing_spree_target', 1) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'commando_1a': - return - - actor.removeSkill('expertise_co_killing_grimace_1') - - actor.removeSkillMod('expertise_co_killing_spree_target', 1) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_co_killing_grimace_1") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_co_killing_grimace_1") return diff --git a/scripts/expertise/expertise_co_killing_grimace_2.py b/scripts/expertise/expertise_co_killing_grimace_2.py index 0c1ca2e8..ad8ee400 100644 --- a/scripts/expertise/expertise_co_killing_grimace_2.py +++ b/scripts/expertise/expertise_co_killing_grimace_2.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'commando_1a': - return - - actor.addSkill('expertise_co_killing_grimace_2') - - actor.addSkillMod('expertise_co_killing_spree_target', 1) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'commando_1a': - return - - actor.removeSkill('expertise_co_killing_grimace_2') - - actor.removeSkillMod('expertise_co_killing_spree_target', 1) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_co_killing_grimace_2") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_co_killing_grimace_2") return diff --git a/scripts/expertise/expertise_co_killing_spree.py b/scripts/expertise/expertise_co_killing_spree.py index 915251d0..c17421ae 100644 --- a/scripts/expertise/expertise_co_killing_spree.py +++ b/scripts/expertise/expertise_co_killing_spree.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'commando_1a': - return - - actor.addSkill('expertise_co_killing_spree') - - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'commando_1a': - return - - actor.removeSkill('expertise_co_killing_spree') - - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - actor.addAbility('co_killing_spree') - + actor.addAbility("co_killing_spree") return def removeAbilities(core, actor, player): - - actor.removeAbility('co_killing_spree') - + actor.removeAbility("co_killing_spree") return diff --git a/scripts/expertise/expertise_co_lethal_beam_1.py b/scripts/expertise/expertise_co_lethal_beam_1.py index 4a96f6d4..25d0a5a5 100644 --- a/scripts/expertise/expertise_co_lethal_beam_1.py +++ b/scripts/expertise/expertise_co_lethal_beam_1.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'commando_1a': - return - - actor.addSkill('expertise_co_lethal_beam_1') - - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'commando_1a': - return - - actor.removeSkill('expertise_co_lethal_beam_1') - - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - actor.addAbility('co_hw_dm_crit_1') - + actor.addAbility("co_hw_dm_crit_1") return def removeAbilities(core, actor, player): - - actor.removeAbility('co_hw_dm_crit_1') - + actor.removeAbility("co_hw_dm_crit_1") return diff --git a/scripts/expertise/expertise_co_marksman_1.py b/scripts/expertise/expertise_co_marksman_1.py index 431a914c..c57aa617 100644 --- a/scripts/expertise/expertise_co_marksman_1.py +++ b/scripts/expertise/expertise_co_marksman_1.py @@ -1,50 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'commando_1a': - return - - actor.addSkill('expertise_co_marksman_1') - - actor.addSkillMod('expertise_action_rifle', 4) - actor.addSkillMod('expertise_action_carbine', 4) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'commando_1a': - return - - actor.removeSkill('expertise_co_marksman_1') - - actor.removeSkillMod('expertise_action_rifle', 4) - actor.removeSkillMod('expertise_action_carbine', 4) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_co_marksman_1") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_co_marksman_1") return diff --git a/scripts/expertise/expertise_co_marksman_2.py b/scripts/expertise/expertise_co_marksman_2.py index 578f6bfc..7f74b950 100644 --- a/scripts/expertise/expertise_co_marksman_2.py +++ b/scripts/expertise/expertise_co_marksman_2.py @@ -1,50 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'commando_1a': - return - - actor.addSkill('expertise_co_marksman_2') - - actor.addSkillMod('expertise_action_rifle', 4) - actor.addSkillMod('expertise_action_carbine', 4) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'commando_1a': - return - - actor.removeSkill('expertise_co_marksman_2') - - actor.removeSkillMod('expertise_action_rifle', 4) - actor.removeSkillMod('expertise_action_carbine', 4) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_co_marksman_2") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_co_marksman_2") return diff --git a/scripts/expertise/expertise_co_marksman_3.py b/scripts/expertise/expertise_co_marksman_3.py index 39027c30..27c8b759 100644 --- a/scripts/expertise/expertise_co_marksman_3.py +++ b/scripts/expertise/expertise_co_marksman_3.py @@ -1,50 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'commando_1a': - return - - actor.addSkill('expertise_co_marksman_3') - - actor.addSkillMod('expertise_action_rifle', 4) - actor.addSkillMod('expertise_action_carbine', 4) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'commando_1a': - return - - actor.removeSkill('expertise_co_marksman_3') - - actor.removeSkillMod('expertise_action_rifle', 4) - actor.removeSkillMod('expertise_action_carbine', 4) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_co_marksman_3") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_co_marksman_3") return diff --git a/scripts/expertise/expertise_co_mirror_armor_1.py b/scripts/expertise/expertise_co_mirror_armor_1.py index ce6c5cb5..dfb9397d 100644 --- a/scripts/expertise/expertise_co_mirror_armor_1.py +++ b/scripts/expertise/expertise_co_mirror_armor_1.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'commando_1a': - return - - actor.addSkill('expertise_co_mirror_armor_1') - - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'commando_1a': - return - - actor.removeSkill('expertise_co_mirror_armor_1') - - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - actor.addAbility('co_mirror_armor') - + actor.addAbility("co_mirror_armor") return def removeAbilities(core, actor, player): - - actor.removeAbility('co_mirror_armor') - + actor.removeAbility("co_mirror_armor") return diff --git a/scripts/expertise/expertise_co_on_target_1.py b/scripts/expertise/expertise_co_on_target_1.py index 7ed1aa7e..f652cbd2 100644 --- a/scripts/expertise/expertise_co_on_target_1.py +++ b/scripts/expertise/expertise_co_on_target_1.py @@ -1,50 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'commando_1a': - return - - actor.addSkill('expertise_co_on_target_1') - - actor.addSkillMod('expertise_co_pos_secured_line_critical', 2) - actor.addSkillMod('expertise_co_pos_secured_line_protection', 5) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'commando_1a': - return - - actor.removeSkill('expertise_co_on_target_1') - - actor.removeSkillMod('expertise_co_pos_secured_line_critical', 2) - actor.removeSkillMod('expertise_co_pos_secured_line_protection', 5) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_co_on_target_1") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_co_on_target_1") return diff --git a/scripts/expertise/expertise_co_on_target_2.py b/scripts/expertise/expertise_co_on_target_2.py index bf31c706..b51e92a9 100644 --- a/scripts/expertise/expertise_co_on_target_2.py +++ b/scripts/expertise/expertise_co_on_target_2.py @@ -1,50 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'commando_1a': - return - - actor.addSkill('expertise_co_on_target_2') - - actor.addSkillMod('expertise_co_pos_secured_line_critical', 2) - actor.addSkillMod('expertise_co_pos_secured_line_protection', 5) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'commando_1a': - return - - actor.removeSkill('expertise_co_on_target_2') - - actor.removeSkillMod('expertise_co_pos_secured_line_critical', 2) - actor.removeSkillMod('expertise_co_pos_secured_line_protection', 5) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_co_on_target_2") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_co_on_target_2") return diff --git a/scripts/expertise/expertise_co_on_target_3.py b/scripts/expertise/expertise_co_on_target_3.py index 9cca1f5d..5456ca93 100644 --- a/scripts/expertise/expertise_co_on_target_3.py +++ b/scripts/expertise/expertise_co_on_target_3.py @@ -1,50 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'commando_1a': - return - - actor.addSkill('expertise_co_on_target_3') - - actor.addSkillMod('expertise_co_pos_secured_line_critical', 2) - actor.addSkillMod('expertise_co_pos_secured_line_protection', 5) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'commando_1a': - return - - actor.removeSkill('expertise_co_on_target_3') - - actor.removeSkillMod('expertise_co_pos_secured_line_critical', 2) - actor.removeSkillMod('expertise_co_pos_secured_line_protection', 5) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_co_on_target_3") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_co_on_target_3") return diff --git a/scripts/expertise/expertise_co_on_target_4.py b/scripts/expertise/expertise_co_on_target_4.py index e9a0a325..b750b412 100644 --- a/scripts/expertise/expertise_co_on_target_4.py +++ b/scripts/expertise/expertise_co_on_target_4.py @@ -1,50 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'commando_1a': - return - - actor.addSkill('expertise_co_on_target_4') - - actor.addSkillMod('expertise_co_pos_secured_line_critical', 2) - actor.addSkillMod('expertise_co_pos_secured_line_protection', 5) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'commando_1a': - return - - actor.removeSkill('expertise_co_on_target_4') - - actor.removeSkillMod('expertise_co_pos_secured_line_critical', 2) - actor.removeSkillMod('expertise_co_pos_secured_line_protection', 5) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_co_on_target_4") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_co_on_target_4") return diff --git a/scripts/expertise/expertise_co_packed_explosives_1.py b/scripts/expertise/expertise_co_packed_explosives_1.py index da5644ab..fa57097c 100644 --- a/scripts/expertise/expertise_co_packed_explosives_1.py +++ b/scripts/expertise/expertise_co_packed_explosives_1.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'commando_1a': - return - - actor.addSkill('expertise_co_packed_explosives_1') - - actor.addSkillMod('expertise_damage_line_co_grenade', 2) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'commando_1a': - return - - actor.removeSkill('expertise_co_packed_explosives_1') - - actor.removeSkillMod('expertise_damage_line_co_grenade', 2) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_co_packed_explosives_1") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_co_packed_explosives_1") return diff --git a/scripts/expertise/expertise_co_packed_explosives_2.py b/scripts/expertise/expertise_co_packed_explosives_2.py index ee0655e3..288e1944 100644 --- a/scripts/expertise/expertise_co_packed_explosives_2.py +++ b/scripts/expertise/expertise_co_packed_explosives_2.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'commando_1a': - return - - actor.addSkill('expertise_co_packed_explosives_2') - - actor.addSkillMod('expertise_damage_line_co_grenade', 2) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'commando_1a': - return - - actor.removeSkill('expertise_co_packed_explosives_2') - - actor.removeSkillMod('expertise_damage_line_co_grenade', 2) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_co_packed_explosives_2") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_co_packed_explosives_2") return diff --git a/scripts/expertise/expertise_co_packed_explosives_3.py b/scripts/expertise/expertise_co_packed_explosives_3.py index 0bdf9fde..8f61f39d 100644 --- a/scripts/expertise/expertise_co_packed_explosives_3.py +++ b/scripts/expertise/expertise_co_packed_explosives_3.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'commando_1a': - return - - actor.addSkill('expertise_co_packed_explosives_3') - - actor.addSkillMod('expertise_damage_line_co_grenade', 2) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'commando_1a': - return - - actor.removeSkill('expertise_co_packed_explosives_3') - - actor.removeSkillMod('expertise_damage_line_co_grenade', 2) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_co_packed_explosives_3") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_co_packed_explosives_3") return diff --git a/scripts/expertise/expertise_co_packed_explosives_4.py b/scripts/expertise/expertise_co_packed_explosives_4.py index e8ca7037..efd1b2a9 100644 --- a/scripts/expertise/expertise_co_packed_explosives_4.py +++ b/scripts/expertise/expertise_co_packed_explosives_4.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'commando_1a': - return - - actor.addSkill('expertise_co_packed_explosives_4') - - actor.addSkillMod('expertise_damage_line_co_grenade', 2) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'commando_1a': - return - - actor.removeSkill('expertise_co_packed_explosives_4') - - actor.removeSkillMod('expertise_damage_line_co_grenade', 2) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_co_packed_explosives_4") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_co_packed_explosives_4") return diff --git a/scripts/expertise/expertise_co_pinpoint_shielding_1.py b/scripts/expertise/expertise_co_pinpoint_shielding_1.py index c8cc7ca7..1937db02 100644 --- a/scripts/expertise/expertise_co_pinpoint_shielding_1.py +++ b/scripts/expertise/expertise_co_pinpoint_shielding_1.py @@ -1,57 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'commando_1a': - return - - actor.addSkill('expertise_co_pinpoint_shielding_1') - - actor.addSkillMod('energy', 250) - actor.addSkillMod('kinetic', 250) - actor.addSkillMod('acid', 250) - actor.addSkillMod('heat', 250) - actor.addSkillMod('cold', 250) - actor.addSkillMod('electricity', 250) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'commando_1a': - return - - actor.removeSkill('expertise_co_pinpoint_shielding_1') - - actor.removeSkillMod('energy', 250) - actor.removeSkillMod('kinetic', 250) - actor.removeSkillMod('acid', 250) - actor.removeSkillMod('heat', 250) - actor.removeSkillMod('cold', 250) - actor.removeSkillMod('electricity', 250) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - + actor.addAbility("expertise_co_pinpoint_shielding_1") return - + def removeAbilities(core, actor, player): - + actor.removeAbility("expertise_co_pinpoint_shielding_1") return - \ No newline at end of file diff --git a/scripts/expertise/expertise_co_pinpoint_shielding_2.py b/scripts/expertise/expertise_co_pinpoint_shielding_2.py index f311375b..c3ad2200 100644 --- a/scripts/expertise/expertise_co_pinpoint_shielding_2.py +++ b/scripts/expertise/expertise_co_pinpoint_shielding_2.py @@ -1,57 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'commando_1a': - return - - actor.addSkill('expertise_co_pinpoint_shielding_2') - - actor.addSkillMod('energy', 250) - actor.addSkillMod('kinetic', 250) - actor.addSkillMod('acid', 250) - actor.addSkillMod('heat', 250) - actor.addSkillMod('cold', 250) - actor.addSkillMod('electricity', 250) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'commando_1a': - return - - actor.removeSkill('expertise_co_pinpoint_shielding_2') - - actor.removeSkillMod('energy', 250) - actor.removeSkillMod('kinetic', 250) - actor.removeSkillMod('acid', 250) - actor.removeSkillMod('heat', 250) - actor.removeSkillMod('cold', 250) - actor.removeSkillMod('electricity', 250) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - + actor.addAbility("expertise_co_pinpoint_shielding_2") return - + def removeAbilities(core, actor, player): - + actor.removeAbility("expertise_co_pinpoint_shielding_2") return - \ No newline at end of file diff --git a/scripts/expertise/expertise_co_pinpoint_shielding_3.py b/scripts/expertise/expertise_co_pinpoint_shielding_3.py index e06a60e5..02c5884e 100644 --- a/scripts/expertise/expertise_co_pinpoint_shielding_3.py +++ b/scripts/expertise/expertise_co_pinpoint_shielding_3.py @@ -1,57 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'commando_1a': - return - - actor.addSkill('expertise_co_pinpoint_shielding_3') - - actor.addSkillMod('energy', 250) - actor.addSkillMod('kinetic', 250) - actor.addSkillMod('acid', 250) - actor.addSkillMod('heat', 250) - actor.addSkillMod('cold', 250) - actor.addSkillMod('electricity', 250) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'commando_1a': - return - - actor.removeSkill('expertise_co_pinpoint_shielding_3') - - actor.removeSkillMod('energy', 250) - actor.removeSkillMod('kinetic', 250) - actor.removeSkillMod('acid', 250) - actor.removeSkillMod('heat', 250) - actor.removeSkillMod('cold', 250) - actor.removeSkillMod('electricity', 250) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - + actor.addAbility("expertise_co_pinpoint_shielding_3") return - + def removeAbilities(core, actor, player): - + actor.removeAbility("expertise_co_pinpoint_shielding_3") return - \ No newline at end of file diff --git a/scripts/expertise/expertise_co_pinpoint_shielding_4.py b/scripts/expertise/expertise_co_pinpoint_shielding_4.py index c910bccb..f85df1de 100644 --- a/scripts/expertise/expertise_co_pinpoint_shielding_4.py +++ b/scripts/expertise/expertise_co_pinpoint_shielding_4.py @@ -1,57 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'commando_1a': - return - - actor.addSkill('expertise_co_pinpoint_shielding_4') - - actor.addSkillMod('energy', 250) - actor.addSkillMod('kinetic', 250) - actor.addSkillMod('acid', 250) - actor.addSkillMod('heat', 250) - actor.addSkillMod('cold', 250) - actor.addSkillMod('electricity', 250) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'commando_1a': - return - - actor.removeSkill('expertise_co_pinpoint_shielding_4') - - actor.removeSkillMod('energy', 250) - actor.removeSkillMod('kinetic', 250) - actor.removeSkillMod('acid', 250) - actor.removeSkillMod('heat', 250) - actor.removeSkillMod('cold', 250) - actor.removeSkillMod('electricity', 250) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - + actor.addAbility("expertise_co_pinpoint_shielding_4") return - + def removeAbilities(core, actor, player): - + actor.removeAbility("expertise_co_pinpoint_shielding_4") return - \ No newline at end of file diff --git a/scripts/expertise/expertise_co_position_secured_1.py b/scripts/expertise/expertise_co_position_secured_1.py index dfee8b0a..d2427d08 100644 --- a/scripts/expertise/expertise_co_position_secured_1.py +++ b/scripts/expertise/expertise_co_position_secured_1.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'commando_1a': - return - - actor.addSkill('expertise_co_position_secured_1') - - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'commando_1a': - return - - actor.removeSkill('expertise_co_position_secured_1') - - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - actor.addAbility('co_position_secured') - + actor.addAbility("co_position_secured") return def removeAbilities(core, actor, player): - - actor.removeAbility('co_position_secured') - + actor.removeAbility("co_position_secured") return diff --git a/scripts/expertise/expertise_co_powered_armor_1.py b/scripts/expertise/expertise_co_powered_armor_1.py index 0cd9dc3d..58530d57 100644 --- a/scripts/expertise/expertise_co_powered_armor_1.py +++ b/scripts/expertise/expertise_co_powered_armor_1.py @@ -1,57 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'commando_1a': - return - - actor.addSkill('expertise_co_powered_armor_1') - - actor.addSkillMod('energy', 250) - actor.addSkillMod('kinetic', 250) - actor.addSkillMod('acid', 250) - actor.addSkillMod('heat', 250) - actor.addSkillMod('cold', 250) - actor.addSkillMod('electricity', 250) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'commando_1a': - return - - actor.removeSkill('expertise_co_powered_armor_1') - - actor.removeSkillMod('energy', 250) - actor.removeSkillMod('kinetic', 250) - actor.removeSkillMod('acid', 250) - actor.removeSkillMod('heat', 250) - actor.removeSkillMod('cold', 250) - actor.removeSkillMod('electricity', 250) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - + actor.addAbility("expertise_co_powered_armor_1") return - + def removeAbilities(core, actor, player): - + actor.removeAbility("expertise_co_powered_armor_1") return - \ No newline at end of file diff --git a/scripts/expertise/expertise_co_powered_armor_2.py b/scripts/expertise/expertise_co_powered_armor_2.py index df2d0051..e9ea79e9 100644 --- a/scripts/expertise/expertise_co_powered_armor_2.py +++ b/scripts/expertise/expertise_co_powered_armor_2.py @@ -1,57 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'commando_1a': - return - - actor.addSkill('expertise_co_powered_armor_2') - - actor.addSkillMod('energy', 250) - actor.addSkillMod('kinetic', 250) - actor.addSkillMod('acid', 250) - actor.addSkillMod('heat', 250) - actor.addSkillMod('cold', 250) - actor.addSkillMod('electricity', 250) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'commando_1a': - return - - actor.removeSkill('expertise_co_powered_armor_2') - - actor.removeSkillMod('energy', 250) - actor.removeSkillMod('kinetic', 250) - actor.removeSkillMod('acid', 250) - actor.removeSkillMod('heat', 250) - actor.removeSkillMod('cold', 250) - actor.removeSkillMod('electricity', 250) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - + actor.addAbility("expertise_co_powered_armor_2") return - + def removeAbilities(core, actor, player): - + actor.removeAbility("expertise_co_powered_armor_2") return - \ No newline at end of file diff --git a/scripts/expertise/expertise_co_powered_armor_3.py b/scripts/expertise/expertise_co_powered_armor_3.py index f0d1fe7f..5cba60e6 100644 --- a/scripts/expertise/expertise_co_powered_armor_3.py +++ b/scripts/expertise/expertise_co_powered_armor_3.py @@ -1,57 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'commando_1a': - return - - actor.addSkill('expertise_co_powered_armor_3') - - actor.addSkillMod('energy', 250) - actor.addSkillMod('kinetic', 250) - actor.addSkillMod('acid', 250) - actor.addSkillMod('heat', 250) - actor.addSkillMod('cold', 250) - actor.addSkillMod('electricity', 250) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'commando_1a': - return - - actor.removeSkill('expertise_co_powered_armor_3') - - actor.removeSkillMod('energy', 250) - actor.removeSkillMod('kinetic', 250) - actor.removeSkillMod('acid', 250) - actor.removeSkillMod('heat', 250) - actor.removeSkillMod('cold', 250) - actor.removeSkillMod('electricity', 250) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - + actor.addAbility("expertise_co_powered_armor_3") return - + def removeAbilities(core, actor, player): - + actor.removeAbility("expertise_co_powered_armor_3") return - \ No newline at end of file diff --git a/scripts/expertise/expertise_co_powered_armor_4.py b/scripts/expertise/expertise_co_powered_armor_4.py index 9b0e2f44..b10f5264 100644 --- a/scripts/expertise/expertise_co_powered_armor_4.py +++ b/scripts/expertise/expertise_co_powered_armor_4.py @@ -1,57 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'commando_1a': - return - - actor.addSkill('expertise_co_powered_armor_4') - - actor.addSkillMod('energy', 250) - actor.addSkillMod('kinetic', 250) - actor.addSkillMod('acid', 250) - actor.addSkillMod('heat', 250) - actor.addSkillMod('cold', 250) - actor.addSkillMod('electricity', 250) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'commando_1a': - return - - actor.removeSkill('expertise_co_powered_armor_4') - - actor.removeSkillMod('energy', 250) - actor.removeSkillMod('kinetic', 250) - actor.removeSkillMod('acid', 250) - actor.removeSkillMod('heat', 250) - actor.removeSkillMod('cold', 250) - actor.removeSkillMod('electricity', 250) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - + actor.addAbility("expertise_co_powered_armor_4") return - + def removeAbilities(core, actor, player): - + actor.removeAbility("expertise_co_powered_armor_4") return - \ No newline at end of file diff --git a/scripts/expertise/expertise_co_remote_detonator_1.py b/scripts/expertise/expertise_co_remote_detonator_1.py index d90c8d4f..fed11c0f 100644 --- a/scripts/expertise/expertise_co_remote_detonator_1.py +++ b/scripts/expertise/expertise_co_remote_detonator_1.py @@ -1,48 +1,22 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'commando_1a': - return - - actor.addSkill('expertise_co_remote_detonator_1') - - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'commando_1a': - return - - actor.removeSkill('expertise_co_remote_detonator_1') - - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - actor.addAbility('co_remote_detonator_1') - + if actor.getLevel() >= 26: + actor.addAbility("co_remote_detonator_1") + if actor.getLevel() >= 34: + actor.addAbility("co_remote_detonator_2") + if actor.getLevel() >= 48: + actor.addAbility("co_remote_detonator_3") + if actor.getLevel() >= 62: + actor.addAbility("co_remote_detonator_4") + if actor.getLevel() >= 76: + actor.addAbility("co_remote_detonator_5") return def removeAbilities(core, actor, player): - - actor.removeAbility('co_remote_detonator_1') - + actor.removeAbility("co_remote_detonator_1") + actor.removeAbility("co_remote_detonator_2") + actor.removeAbility("co_remote_detonator_3") + actor.removeAbility("co_remote_detonator_4") + actor.removeAbility("co_remote_detonator_5") return diff --git a/scripts/expertise/expertise_co_riddle_armor_1.py b/scripts/expertise/expertise_co_riddle_armor_1.py index 4e3ebd79..04ea9722 100644 --- a/scripts/expertise/expertise_co_riddle_armor_1.py +++ b/scripts/expertise/expertise_co_riddle_armor_1.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'commando_1a': - return - - actor.addSkill('expertise_co_riddle_armor_1') - - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'commando_1a': - return - - actor.removeSkill('expertise_co_riddle_armor_1') - - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - actor.addAbility('co_riddle_armor') - + actor.addAbility("co_riddle_armor") return def removeAbilities(core, actor, player): - - actor.removeAbility('co_riddle_armor') - + actor.removeAbility("co_riddle_armor") return diff --git a/scripts/expertise/expertise_co_short_fuse_1.py b/scripts/expertise/expertise_co_short_fuse_1.py index 54240603..a5cbad44 100644 --- a/scripts/expertise/expertise_co_short_fuse_1.py +++ b/scripts/expertise/expertise_co_short_fuse_1.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'commando_1a': - return - - actor.addSkill('expertise_co_short_fuse_1') - - actor.addSkillMod('expertise_delay_reduce_line_co_grenade', 1) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'commando_1a': - return - - actor.removeSkill('expertise_co_short_fuse_1') - - actor.removeSkillMod('expertise_delay_reduce_line_co_grenade', 1) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_co_short_fuse_1") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_co_short_fuse_1") return diff --git a/scripts/expertise/expertise_co_stand_fast_1.py b/scripts/expertise/expertise_co_stand_fast_1.py index 714eb9b6..46127787 100644 --- a/scripts/expertise/expertise_co_stand_fast_1.py +++ b/scripts/expertise/expertise_co_stand_fast_1.py @@ -1,47 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'commando_1a': - return - - actor.addSkill('expertise_co_stand_fast_1') - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'commando_1a': - return - - actor.removeSkill('expertise_co_stand_fast_1') - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - actor.addAbility('co_stand_fast') - + actor.addAbility("co_stand_fast") return - + def removeAbilities(core, actor, player): - - actor.removeAbility('co_stand_fast') - + actor.removeAbility("co_stand_fast") return - \ No newline at end of file diff --git a/scripts/expertise/expertise_co_stim_armor_1.py b/scripts/expertise/expertise_co_stim_armor_1.py index abe74611..eb69696b 100644 --- a/scripts/expertise/expertise_co_stim_armor_1.py +++ b/scripts/expertise/expertise_co_stim_armor_1.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'commando_1a': - return - - actor.addSkill('expertise_co_stim_armor_1') - - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'commando_1a': - return - - actor.removeSkill('expertise_co_stim_armor_1') - - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - actor.addAbility('co_stim_armor') - + actor.addAbility("co_stim_armor") return def removeAbilities(core, actor, player): - - actor.removeAbility('co_stim_armor') - + actor.removeAbility("co_stim_armor") return diff --git a/scripts/expertise/expertise_co_strong_arm_1.py b/scripts/expertise/expertise_co_strong_arm_1.py index 03ebed5f..b4e5ab18 100644 --- a/scripts/expertise/expertise_co_strong_arm_1.py +++ b/scripts/expertise/expertise_co_strong_arm_1.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'commando_1a': - return - - actor.addSkill('expertise_co_strong_arm_1') - - actor.addSkillMod('expertise_action_line_co_grenade', 2) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'commando_1a': - return - - actor.removeSkill('expertise_co_strong_arm_1') - - actor.removeSkillMod('expertise_action_line_co_grenade', 2) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_co_strong_arm_1") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_co_strong_arm_1") return diff --git a/scripts/expertise/expertise_co_strong_arm_2.py b/scripts/expertise/expertise_co_strong_arm_2.py index 126ff5b7..b0672495 100644 --- a/scripts/expertise/expertise_co_strong_arm_2.py +++ b/scripts/expertise/expertise_co_strong_arm_2.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'commando_1a': - return - - actor.addSkill('expertise_co_strong_arm_2') - - actor.addSkillMod('expertise_action_line_co_grenade', 2) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'commando_1a': - return - - actor.removeSkill('expertise_co_strong_arm_2') - - actor.removeSkillMod('expertise_action_line_co_grenade', 2) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_co_strong_arm_2") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_co_strong_arm_2") return diff --git a/scripts/expertise/expertise_co_strong_arm_3.py b/scripts/expertise/expertise_co_strong_arm_3.py index 8ed34544..d69525d7 100644 --- a/scripts/expertise/expertise_co_strong_arm_3.py +++ b/scripts/expertise/expertise_co_strong_arm_3.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'commando_1a': - return - - actor.addSkill('expertise_co_strong_arm_3') - - actor.addSkillMod('expertise_action_line_co_grenade', 2) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'commando_1a': - return - - actor.removeSkill('expertise_co_strong_arm_3') - - actor.removeSkillMod('expertise_action_line_co_grenade', 2) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_co_strong_arm_3") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_co_strong_arm_3") return diff --git a/scripts/expertise/expertise_co_strong_arm_4.py b/scripts/expertise/expertise_co_strong_arm_4.py index ea9ec450..dd42b534 100644 --- a/scripts/expertise/expertise_co_strong_arm_4.py +++ b/scripts/expertise/expertise_co_strong_arm_4.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'commando_1a': - return - - actor.addSkill('expertise_co_strong_arm_4') - - actor.addSkillMod('expertise_action_line_co_grenade', 2) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'commando_1a': - return - - actor.removeSkill('expertise_co_strong_arm_4') - - actor.removeSkillMod('expertise_action_line_co_grenade', 2) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_co_strong_arm_4") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_co_strong_arm_4") return diff --git a/scripts/expertise/expertise_co_suppressing_fire_1.py b/scripts/expertise/expertise_co_suppressing_fire_1.py index a9192094..b9181853 100644 --- a/scripts/expertise/expertise_co_suppressing_fire_1.py +++ b/scripts/expertise/expertise_co_suppressing_fire_1.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'commando_1a': - return - - actor.addSkill('expertise_co_suppressing_fire_1') - - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'commando_1a': - return - - actor.removeSkill('expertise_co_suppressing_fire_1') - - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - actor.addAbility('co_suppressing_fire') - + actor.addAbility("co_suppressing_fire") return def removeAbilities(core, actor, player): - - actor.removeAbility('co_suppressing_fire') - + actor.removeAbility("co_suppressing_fire") return diff --git a/scripts/expertise/expertise_co_suppression_efficiency_1.py b/scripts/expertise/expertise_co_suppression_efficiency_1.py index 72851743..60950dc4 100644 --- a/scripts/expertise/expertise_co_suppression_efficiency_1.py +++ b/scripts/expertise/expertise_co_suppression_efficiency_1.py @@ -1,50 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'commando_1a': - return - - actor.addSkill('expertise_co_suppression_efficiency_1') - - actor.addSkillMod('expertise_supression_speed', 10) - actor.addSkillMod('expertise_supression_glance', 5) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'commando_1a': - return - - actor.removeSkill('expertise_co_suppression_efficiency_1') - - actor.removeSkillMod('expertise_supression_speed', 10) - actor.removeSkillMod('expertise_supression_glance', 5) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_co_suppression_efficiency_1") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_co_suppression_efficiency_1") return diff --git a/scripts/expertise/expertise_co_suppression_efficiency_2.py b/scripts/expertise/expertise_co_suppression_efficiency_2.py index 97830b16..3ce19870 100644 --- a/scripts/expertise/expertise_co_suppression_efficiency_2.py +++ b/scripts/expertise/expertise_co_suppression_efficiency_2.py @@ -1,50 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'commando_1a': - return - - actor.addSkill('expertise_co_suppression_efficiency_2') - - actor.addSkillMod('expertise_supression_speed', 10) - actor.addSkillMod('expertise_supression_glance', 5) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'commando_1a': - return - - actor.removeSkill('expertise_co_suppression_efficiency_2') - - actor.removeSkillMod('expertise_supression_speed', 10) - actor.removeSkillMod('expertise_supression_glance', 5) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_co_suppression_efficiency_2") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_co_suppression_efficiency_2") return diff --git a/scripts/expertise/expertise_co_suppression_efficiency_3.py b/scripts/expertise/expertise_co_suppression_efficiency_3.py index a0d3e6b6..00e43a22 100644 --- a/scripts/expertise/expertise_co_suppression_efficiency_3.py +++ b/scripts/expertise/expertise_co_suppression_efficiency_3.py @@ -1,50 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'commando_1a': - return - - actor.addSkill('expertise_co_suppression_efficiency_3') - - actor.addSkillMod('expertise_supression_speed', 10) - actor.addSkillMod('expertise_supression_glance', 5) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'commando_1a': - return - - actor.removeSkill('expertise_co_suppression_efficiency_3') - - actor.removeSkillMod('expertise_supression_speed', 10) - actor.removeSkillMod('expertise_supression_glance', 5) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_co_suppression_efficiency_3") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_co_suppression_efficiency_3") return diff --git a/scripts/expertise/expertise_co_suppression_efficiency_4.py b/scripts/expertise/expertise_co_suppression_efficiency_4.py index 3898d8fd..f9c1c3e5 100644 --- a/scripts/expertise/expertise_co_suppression_efficiency_4.py +++ b/scripts/expertise/expertise_co_suppression_efficiency_4.py @@ -1,50 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'commando_1a': - return - - actor.addSkill('expertise_co_suppression_efficiency_4') - - actor.addSkillMod('expertise_supression_speed', 10) - actor.addSkillMod('expertise_supression_glance', 5) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'commando_1a': - return - - actor.removeSkill('expertise_co_suppression_efficiency_4') - - actor.removeSkillMod('expertise_supression_speed', 10) - actor.removeSkillMod('expertise_supression_glance', 5) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_co_suppression_efficiency_4") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_co_suppression_efficiency_4") return diff --git a/scripts/expertise/expertise_co_tibanna_gas_1.py b/scripts/expertise/expertise_co_tibanna_gas_1.py index f3c83322..1c8d5371 100644 --- a/scripts/expertise/expertise_co_tibanna_gas_1.py +++ b/scripts/expertise/expertise_co_tibanna_gas_1.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'commando_1a': - return - - actor.addSkill('expertise_co_tibanna_gas_1') - - actor.addSkillMod('expertise_damage_weapon_3', 2) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'commando_1a': - return - - actor.removeSkill('expertise_co_tibanna_gas_1') - - actor.removeSkillMod('expertise_damage_weapon_3', 2) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_co_tibanna_gas_1") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_co_tibanna_gas_1") return diff --git a/scripts/expertise/expertise_co_tibanna_gas_2.py b/scripts/expertise/expertise_co_tibanna_gas_2.py index ccc62783..f907947a 100644 --- a/scripts/expertise/expertise_co_tibanna_gas_2.py +++ b/scripts/expertise/expertise_co_tibanna_gas_2.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'commando_1a': - return - - actor.addSkill('expertise_co_tibanna_gas_2') - - actor.addSkillMod('expertise_damage_weapon_3', 2) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'commando_1a': - return - - actor.removeSkill('expertise_co_tibanna_gas_2') - - actor.removeSkillMod('expertise_damage_weapon_3', 2) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_co_tibanna_gas_2") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_co_tibanna_gas_2") return diff --git a/scripts/expertise/expertise_co_tibanna_gas_3.py b/scripts/expertise/expertise_co_tibanna_gas_3.py index 49895f55..4b1ac247 100644 --- a/scripts/expertise/expertise_co_tibanna_gas_3.py +++ b/scripts/expertise/expertise_co_tibanna_gas_3.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'commando_1a': - return - - actor.addSkill('expertise_co_tibanna_gas_3') - - actor.addSkillMod('expertise_damage_weapon_3', 2) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'commando_1a': - return - - actor.removeSkill('expertise_co_tibanna_gas_3') - - actor.removeSkillMod('expertise_damage_weapon_3', 2) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_co_tibanna_gas_3") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_co_tibanna_gas_3") return diff --git a/scripts/expertise/expertise_co_tibanna_gas_4.py b/scripts/expertise/expertise_co_tibanna_gas_4.py index 09e23289..67b238f2 100644 --- a/scripts/expertise/expertise_co_tibanna_gas_4.py +++ b/scripts/expertise/expertise_co_tibanna_gas_4.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'commando_1a': - return - - actor.addSkill('expertise_co_tibanna_gas_4') - - actor.addSkillMod('expertise_damage_weapon_3', 2) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'commando_1a': - return - - actor.removeSkill('expertise_co_tibanna_gas_4') - - actor.removeSkillMod('expertise_damage_weapon_3', 2) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_co_tibanna_gas_4") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_co_tibanna_gas_4") return diff --git a/scripts/expertise/expertise_co_timer_reset_1.py b/scripts/expertise/expertise_co_timer_reset_1.py index c1f4cdb0..1b2e232d 100644 --- a/scripts/expertise/expertise_co_timer_reset_1.py +++ b/scripts/expertise/expertise_co_timer_reset_1.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'commando_1a': - return - - actor.addSkill('expertise_co_timer_reset_1') - - actor.addSkillMod('expertise_delay_line_co_remote_detonator', 240) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'commando_1a': - return - - actor.removeSkill('expertise_co_timer_reset_1') - - actor.removeSkillMod('expertise_delay_line_co_remote_detonator', 240) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_co_timer_reset_1") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_co_timer_reset_1") return diff --git a/scripts/expertise/expertise_co_timer_reset_2.py b/scripts/expertise/expertise_co_timer_reset_2.py index 452832a5..9c29a8c9 100644 --- a/scripts/expertise/expertise_co_timer_reset_2.py +++ b/scripts/expertise/expertise_co_timer_reset_2.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'commando_1a': - return - - actor.addSkill('expertise_co_timer_reset_2') - - actor.addSkillMod('expertise_delay_line_co_remote_detonator', 240) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'commando_1a': - return - - actor.removeSkill('expertise_co_timer_reset_2') - - actor.removeSkillMod('expertise_delay_line_co_remote_detonator', 240) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_co_timer_reset_2") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_co_timer_reset_2") return diff --git a/scripts/expertise/expertise_co_youll_regret_that_1.py b/scripts/expertise/expertise_co_youll_regret_that_1.py index eae8c028..a0895f86 100644 --- a/scripts/expertise/expertise_co_youll_regret_that_1.py +++ b/scripts/expertise/expertise_co_youll_regret_that_1.py @@ -1,50 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'commando_1a': - return - - actor.addSkill('expertise_co_youll_regret_that_1') - - actor.addSkillMod('kill_meter_co_youll_regret_that_reac', 100) - actor.addSkillMod('expertise_youll_regret_that', 1000) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'commando_1a': - return - - actor.removeSkill('expertise_co_youll_regret_that_1') - - actor.removeSkillMod('kill_meter_co_youll_regret_that_reac', 100) - actor.removeSkillMod('expertise_youll_regret_that', 1000) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_co_youll_regret_that_1") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_co_youll_regret_that_1") return diff --git a/scripts/expertise/expertise_co_youll_regret_that_2.py b/scripts/expertise/expertise_co_youll_regret_that_2.py index 8075c520..d96de9f4 100644 --- a/scripts/expertise/expertise_co_youll_regret_that_2.py +++ b/scripts/expertise/expertise_co_youll_regret_that_2.py @@ -1,50 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'commando_1a': - return - - actor.addSkill('expertise_co_youll_regret_that_2') - - actor.addSkillMod('kill_meter_co_youll_regret_that_reac', 0) - actor.addSkillMod('expertise_youll_regret_that', 1000) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'commando_1a': - return - - actor.removeSkill('expertise_co_youll_regret_that_2') - - actor.removeSkillMod('kill_meter_co_youll_regret_that_reac', 0) - actor.removeSkillMod('expertise_youll_regret_that', 1000) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_co_youll_regret_that_2") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_co_youll_regret_that_2") return diff --git a/scripts/expertise/expertise_co_youll_regret_that_3.py b/scripts/expertise/expertise_co_youll_regret_that_3.py index e4724ece..0ab9bab3 100644 --- a/scripts/expertise/expertise_co_youll_regret_that_3.py +++ b/scripts/expertise/expertise_co_youll_regret_that_3.py @@ -1,50 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'commando_1a': - return - - actor.addSkill('expertise_co_youll_regret_that_3') - - actor.addSkillMod('kill_meter_co_youll_regret_that_reac', 0) - actor.addSkillMod('expertise_youll_regret_that', 1000) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'commando_1a': - return - - actor.removeSkill('expertise_co_youll_regret_that_3') - - actor.removeSkillMod('kill_meter_co_youll_regret_that_reac', 0) - actor.removeSkillMod('expertise_youll_regret_that', 1000) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_co_youll_regret_that_3") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_co_youll_regret_that_3") return diff --git a/scripts/expertise/expertise_co_youll_regret_that_4.py b/scripts/expertise/expertise_co_youll_regret_that_4.py index b4e02069..95a86d07 100644 --- a/scripts/expertise/expertise_co_youll_regret_that_4.py +++ b/scripts/expertise/expertise_co_youll_regret_that_4.py @@ -1,50 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'commando_1a': - return - - actor.addSkill('expertise_co_youll_regret_that_4') - - actor.addSkillMod('kill_meter_co_youll_regret_that_reac', 0) - actor.addSkillMod('expertise_youll_regret_that', 1000) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'commando_1a': - return - - actor.removeSkill('expertise_co_youll_regret_that_4') - - actor.removeSkillMod('kill_meter_co_youll_regret_that_reac', 0) - actor.removeSkillMod('expertise_youll_regret_that', 1000) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_co_youll_regret_that_4") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_co_youll_regret_that_4") return diff --git a/scripts/expertise/expertise_cybernetic_dexterity_1.py b/scripts/expertise/expertise_cybernetic_dexterity_1.py index 173aec59..db71010f 100644 --- a/scripts/expertise/expertise_cybernetic_dexterity_1.py +++ b/scripts/expertise/expertise_cybernetic_dexterity_1.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'trader_eng_1a': - return - - actor.addSkill('expertise_cybernetic_dexterity_1') - - actor.addSkillMod('cybernetic_assembly', 5) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'trader_eng_1a': - return - - actor.removeSkill('expertise_cybernetic_dexterity_1') - - actor.removeSkillMod('cybernetic_assembly', 5) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_cybernetic_dexterity_1") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_cybernetic_dexterity_1") return diff --git a/scripts/expertise/expertise_cybernetic_dexterity_2.py b/scripts/expertise/expertise_cybernetic_dexterity_2.py index 1627c0f4..40cfd8c9 100644 --- a/scripts/expertise/expertise_cybernetic_dexterity_2.py +++ b/scripts/expertise/expertise_cybernetic_dexterity_2.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'trader_eng_1a': - return - - actor.addSkill('expertise_cybernetic_dexterity_2') - - actor.addSkillMod('cybernetic_assembly', 5) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'trader_eng_1a': - return - - actor.removeSkill('expertise_cybernetic_dexterity_2') - - actor.removeSkillMod('cybernetic_assembly', 5) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_cybernetic_dexterity_2") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_cybernetic_dexterity_2") return diff --git a/scripts/expertise/expertise_cybernetic_dexterity_3.py b/scripts/expertise/expertise_cybernetic_dexterity_3.py index e80429b1..de7ea37b 100644 --- a/scripts/expertise/expertise_cybernetic_dexterity_3.py +++ b/scripts/expertise/expertise_cybernetic_dexterity_3.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'trader_eng_1a': - return - - actor.addSkill('expertise_cybernetic_dexterity_3') - - actor.addSkillMod('cybernetic_assembly', 5) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'trader_eng_1a': - return - - actor.removeSkill('expertise_cybernetic_dexterity_3') - - actor.removeSkillMod('cybernetic_assembly', 5) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_cybernetic_dexterity_3") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_cybernetic_dexterity_3") return diff --git a/scripts/expertise/expertise_cybernetic_dexterity_4.py b/scripts/expertise/expertise_cybernetic_dexterity_4.py index 9e47bf2b..303f05f7 100644 --- a/scripts/expertise/expertise_cybernetic_dexterity_4.py +++ b/scripts/expertise/expertise_cybernetic_dexterity_4.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'trader_eng_1a': - return - - actor.addSkill('expertise_cybernetic_dexterity_4') - - actor.addSkillMod('cybernetic_assembly', 5) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'trader_eng_1a': - return - - actor.removeSkill('expertise_cybernetic_dexterity_4') - - actor.removeSkillMod('cybernetic_assembly', 5) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_cybernetic_dexterity_4") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_cybernetic_dexterity_4") return diff --git a/scripts/expertise/expertise_domestic_artisan_advanced_theory_1.py b/scripts/expertise/expertise_domestic_artisan_advanced_theory_1.py index bd8a80ca..7768503c 100644 --- a/scripts/expertise/expertise_domestic_artisan_advanced_theory_1.py +++ b/scripts/expertise/expertise_domestic_artisan_advanced_theory_1.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'trader_dom_1a': - return - - actor.addSkill('expertise_domestic_artisan_advanced_theory_1') - - actor.addSkillMod('general_experimentation', 10) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'trader_dom_1a': - return - - actor.removeSkill('expertise_domestic_artisan_advanced_theory_1') - - actor.removeSkillMod('general_experimentation', 10) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_domestic_artisan_advanced_theory_1") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_domestic_artisan_advanced_theory_1") return diff --git a/scripts/expertise/expertise_domestic_artisan_dexterity_1.py b/scripts/expertise/expertise_domestic_artisan_dexterity_1.py index f473579f..558c2105 100644 --- a/scripts/expertise/expertise_domestic_artisan_dexterity_1.py +++ b/scripts/expertise/expertise_domestic_artisan_dexterity_1.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'trader_dom_1a': - return - - actor.addSkill('expertise_domestic_artisan_dexterity_1') - - actor.addSkillMod('general_assembly', 5) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'trader_dom_1a': - return - - actor.removeSkill('expertise_domestic_artisan_dexterity_1') - - actor.removeSkillMod('general_assembly', 5) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_domestic_artisan_dexterity_1") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_domestic_artisan_dexterity_1") return diff --git a/scripts/expertise/expertise_domestic_artisan_dexterity_2.py b/scripts/expertise/expertise_domestic_artisan_dexterity_2.py index 913a4d0e..8c7ab6cf 100644 --- a/scripts/expertise/expertise_domestic_artisan_dexterity_2.py +++ b/scripts/expertise/expertise_domestic_artisan_dexterity_2.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'trader_dom_1a': - return - - actor.addSkill('expertise_domestic_artisan_dexterity_2') - - actor.addSkillMod('general_assembly', 5) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'trader_dom_1a': - return - - actor.removeSkill('expertise_domestic_artisan_dexterity_2') - - actor.removeSkillMod('general_assembly', 5) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_domestic_artisan_dexterity_2") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_domestic_artisan_dexterity_2") return diff --git a/scripts/expertise/expertise_domestic_artisan_dexterity_3.py b/scripts/expertise/expertise_domestic_artisan_dexterity_3.py index a430b03f..3759a96d 100644 --- a/scripts/expertise/expertise_domestic_artisan_dexterity_3.py +++ b/scripts/expertise/expertise_domestic_artisan_dexterity_3.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'trader_dom_1a': - return - - actor.addSkill('expertise_domestic_artisan_dexterity_3') - - actor.addSkillMod('general_assembly', 5) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'trader_dom_1a': - return - - actor.removeSkill('expertise_domestic_artisan_dexterity_3') - - actor.removeSkillMod('general_assembly', 5) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_domestic_artisan_dexterity_3") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_domestic_artisan_dexterity_3") return diff --git a/scripts/expertise/expertise_domestic_artisan_dexterity_4.py b/scripts/expertise/expertise_domestic_artisan_dexterity_4.py index aa5c57b2..4be842ea 100644 --- a/scripts/expertise/expertise_domestic_artisan_dexterity_4.py +++ b/scripts/expertise/expertise_domestic_artisan_dexterity_4.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'trader_dom_1a': - return - - actor.addSkill('expertise_domestic_artisan_dexterity_4') - - actor.addSkillMod('general_assembly', 5) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'trader_dom_1a': - return - - actor.removeSkill('expertise_domestic_artisan_dexterity_4') - - actor.removeSkillMod('general_assembly', 5) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_domestic_artisan_dexterity_4") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_domestic_artisan_dexterity_4") return diff --git a/scripts/expertise/expertise_domestic_artisan_hypothesis_1.py b/scripts/expertise/expertise_domestic_artisan_hypothesis_1.py index 00c3dbcb..d8af5dc4 100644 --- a/scripts/expertise/expertise_domestic_artisan_hypothesis_1.py +++ b/scripts/expertise/expertise_domestic_artisan_hypothesis_1.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'trader_dom_1a': - return - - actor.addSkill('expertise_domestic_artisan_hypothesis_1') - - actor.addSkillMod('expertise_experimentation_increase_artisan', 3) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'trader_dom_1a': - return - - actor.removeSkill('expertise_domestic_artisan_hypothesis_1') - - actor.removeSkillMod('expertise_experimentation_increase_artisan', 3) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_domestic_artisan_artisan_hypthesis_1") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_domestic_artisan_artisan_hypthesis_1") return diff --git a/scripts/expertise/expertise_domestic_artisan_hypothesis_2.py b/scripts/expertise/expertise_domestic_artisan_hypothesis_2.py index b0e1ffc0..d9a13f59 100644 --- a/scripts/expertise/expertise_domestic_artisan_hypothesis_2.py +++ b/scripts/expertise/expertise_domestic_artisan_hypothesis_2.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'trader_dom_1a': - return - - actor.addSkill('expertise_domestic_artisan_hypothesis_2') - - actor.addSkillMod('expertise_experimentation_increase_artisan', 3) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'trader_dom_1a': - return - - actor.removeSkill('expertise_domestic_artisan_hypothesis_2') - - actor.removeSkillMod('expertise_experimentation_increase_artisan', 3) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_domestic_artisan_hypthesis_2") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_domestic_artisan_hypthesis_2") return diff --git a/scripts/expertise/expertise_domestic_artisan_hypothesis_3.py b/scripts/expertise/expertise_domestic_artisan_hypothesis_3.py index e3411464..1ebf788d 100644 --- a/scripts/expertise/expertise_domestic_artisan_hypothesis_3.py +++ b/scripts/expertise/expertise_domestic_artisan_hypothesis_3.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'trader_dom_1a': - return - - actor.addSkill('expertise_domestic_artisan_hypothesis_3') - - actor.addSkillMod('expertise_experimentation_increase_artisan', 3) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'trader_dom_1a': - return - - actor.removeSkill('expertise_domestic_artisan_hypothesis_3') - - actor.removeSkillMod('expertise_experimentation_increase_artisan', 3) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_domestic_artisan_hypthesis_3") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_domestic_artisan_hypthesis_3") return diff --git a/scripts/expertise/expertise_domestic_artisan_hypothesis_4.py b/scripts/expertise/expertise_domestic_artisan_hypothesis_4.py index 81e4a849..e0797ccd 100644 --- a/scripts/expertise/expertise_domestic_artisan_hypothesis_4.py +++ b/scripts/expertise/expertise_domestic_artisan_hypothesis_4.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'trader_dom_1a': - return - - actor.addSkill('expertise_domestic_artisan_hypothesis_4') - - actor.addSkillMod('expertise_experimentation_increase_artisan', 3) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'trader_dom_1a': - return - - actor.removeSkill('expertise_domestic_artisan_hypothesis_4') - - actor.removeSkillMod('expertise_experimentation_increase_artisan', 3) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_domestic_artisan_hypthesis_4") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_domestic_artisan_hypthesis_4") return diff --git a/scripts/expertise/expertise_domestic_chef_advanced_theory_1.py b/scripts/expertise/expertise_domestic_chef_advanced_theory_1.py index e3012ee2..2ee6b7d6 100644 --- a/scripts/expertise/expertise_domestic_chef_advanced_theory_1.py +++ b/scripts/expertise/expertise_domestic_chef_advanced_theory_1.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'trader_dom_1a': - return - - actor.addSkill('expertise_domestic_chef_advanced_theory_1') - - actor.addSkillMod('food_experimentation', 10) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'trader_dom_1a': - return - - actor.removeSkill('expertise_domestic_chef_advanced_theory_1') - - actor.removeSkillMod('food_experimentation', 10) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_domestic_chef_advanced_theory_1") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_domestic_chef_advanced_theory_1") return diff --git a/scripts/expertise/expertise_domestic_chef_dexterity_1.py b/scripts/expertise/expertise_domestic_chef_dexterity_1.py index 0a8f7fdd..f3edfc97 100644 --- a/scripts/expertise/expertise_domestic_chef_dexterity_1.py +++ b/scripts/expertise/expertise_domestic_chef_dexterity_1.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'trader_dom_1a': - return - - actor.addSkill('expertise_domestic_chef_dexterity_1') - - actor.addSkillMod('food_assembly', 5) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'trader_dom_1a': - return - - actor.removeSkill('expertise_domestic_chef_dexterity_1') - - actor.removeSkillMod('food_assembly', 5) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_domestic_chef_dexterity_1") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_domestic_chef_dexterity_1") return diff --git a/scripts/expertise/expertise_domestic_chef_dexterity_2.py b/scripts/expertise/expertise_domestic_chef_dexterity_2.py index b5430961..006997ac 100644 --- a/scripts/expertise/expertise_domestic_chef_dexterity_2.py +++ b/scripts/expertise/expertise_domestic_chef_dexterity_2.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'trader_dom_1a': - return - - actor.addSkill('expertise_domestic_chef_dexterity_2') - - actor.addSkillMod('food_assembly', 5) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'trader_dom_1a': - return - - actor.removeSkill('expertise_domestic_chef_dexterity_2') - - actor.removeSkillMod('food_assembly', 5) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_domestic_chef_dexterity_2") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_domestic_chef_dexterity_2") return diff --git a/scripts/expertise/expertise_domestic_chef_dexterity_3.py b/scripts/expertise/expertise_domestic_chef_dexterity_3.py index f2e888a5..f35f9cad 100644 --- a/scripts/expertise/expertise_domestic_chef_dexterity_3.py +++ b/scripts/expertise/expertise_domestic_chef_dexterity_3.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'trader_dom_1a': - return - - actor.addSkill('expertise_domestic_chef_dexterity_3') - - actor.addSkillMod('food_assembly', 5) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'trader_dom_1a': - return - - actor.removeSkill('expertise_domestic_chef_dexterity_3') - - actor.removeSkillMod('food_assembly', 5) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_domestic_chef_dexterity_3") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_domestic_chef_dexterity_3") return diff --git a/scripts/expertise/expertise_domestic_chef_dexterity_4.py b/scripts/expertise/expertise_domestic_chef_dexterity_4.py index 0c8c273e..257e22e5 100644 --- a/scripts/expertise/expertise_domestic_chef_dexterity_4.py +++ b/scripts/expertise/expertise_domestic_chef_dexterity_4.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'trader_dom_1a': - return - - actor.addSkill('expertise_domestic_chef_dexterity_4') - - actor.addSkillMod('food_assembly', 5) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'trader_dom_1a': - return - - actor.removeSkill('expertise_domestic_chef_dexterity_4') - - actor.removeSkillMod('food_assembly', 5) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_domestic_chef_dexterity_4") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_domestic_chef_dexterity_4") return diff --git a/scripts/expertise/expertise_domestic_chef_hypothesis_1.py b/scripts/expertise/expertise_domestic_chef_hypothesis_1.py index 4d0ef1b3..ce68731f 100644 --- a/scripts/expertise/expertise_domestic_chef_hypothesis_1.py +++ b/scripts/expertise/expertise_domestic_chef_hypothesis_1.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'trader_dom_1a': - return - - actor.addSkill('expertise_domestic_chef_hypothesis_1') - - actor.addSkillMod('expertise_experimentation_increase_chef', 3) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'trader_dom_1a': - return - - actor.removeSkill('expertise_domestic_chef_hypothesis_1') - - actor.removeSkillMod('expertise_experimentation_increase_chef', 3) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_domestic_chef_hypothesis_1") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_domestic_chef_hypothesis_1") return diff --git a/scripts/expertise/expertise_domestic_chef_hypothesis_2.py b/scripts/expertise/expertise_domestic_chef_hypothesis_2.py index 2203b3f4..e27b783b 100644 --- a/scripts/expertise/expertise_domestic_chef_hypothesis_2.py +++ b/scripts/expertise/expertise_domestic_chef_hypothesis_2.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'trader_dom_1a': - return - - actor.addSkill('expertise_domestic_chef_hypothesis_2') - - actor.addSkillMod('expertise_experimentation_increase_chef', 3) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'trader_dom_1a': - return - - actor.removeSkill('expertise_domestic_chef_hypothesis_2') - - actor.removeSkillMod('expertise_experimentation_increase_chef', 3) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_domestic_chef_hypothesis_2") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_domestic_chef_hypothesis_2") return diff --git a/scripts/expertise/expertise_domestic_chef_hypothesis_3.py b/scripts/expertise/expertise_domestic_chef_hypothesis_3.py index b82e5505..578de3e8 100644 --- a/scripts/expertise/expertise_domestic_chef_hypothesis_3.py +++ b/scripts/expertise/expertise_domestic_chef_hypothesis_3.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'trader_dom_1a': - return - - actor.addSkill('expertise_domestic_chef_hypothesis_3') - - actor.addSkillMod('expertise_experimentation_increase_chef', 3) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'trader_dom_1a': - return - - actor.removeSkill('expertise_domestic_chef_hypothesis_3') - - actor.removeSkillMod('expertise_experimentation_increase_chef', 3) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_domestic_chef_hypothesis_3") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_domestic_chef_hypothesis_3") return diff --git a/scripts/expertise/expertise_domestic_chef_hypothesis_4.py b/scripts/expertise/expertise_domestic_chef_hypothesis_4.py index 53e10ab3..65d4a9d4 100644 --- a/scripts/expertise/expertise_domestic_chef_hypothesis_4.py +++ b/scripts/expertise/expertise_domestic_chef_hypothesis_4.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'trader_dom_1a': - return - - actor.addSkill('expertise_domestic_chef_hypothesis_4') - - actor.addSkillMod('expertise_experimentation_increase_chef', 3) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'trader_dom_1a': - return - - actor.removeSkill('expertise_domestic_chef_hypothesis_4') - - actor.removeSkillMod('expertise_experimentation_increase_chef', 3) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_domestic_chef_hypothesis_4") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_domestic_chef_hypothesis_4") return diff --git a/scripts/expertise/expertise_domestic_chef_insight_1.py b/scripts/expertise/expertise_domestic_chef_insight_1.py index 1e07a424..620ede83 100644 --- a/scripts/expertise/expertise_domestic_chef_insight_1.py +++ b/scripts/expertise/expertise_domestic_chef_insight_1.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'trader_dom_1a': - return - - actor.addSkill('expertise_domestic_chef_insight_1') - - actor.addSkillMod('expertise_complexity_decrease_chef', 1) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'trader_dom_1a': - return - - actor.removeSkill('expertise_domestic_chef_insight_1') - - actor.removeSkillMod('expertise_complexity_decrease_chef', 1) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_domestic_chef_insight_1") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_domestic_chef_insight_1") return diff --git a/scripts/expertise/expertise_domestic_chef_insight_2.py b/scripts/expertise/expertise_domestic_chef_insight_2.py index b3c8a9b9..1b3cfd75 100644 --- a/scripts/expertise/expertise_domestic_chef_insight_2.py +++ b/scripts/expertise/expertise_domestic_chef_insight_2.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'trader_dom_1a': - return - - actor.addSkill('expertise_domestic_chef_insight_2') - - actor.addSkillMod('expertise_complexity_decrease_chef', 1) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'trader_dom_1a': - return - - actor.removeSkill('expertise_domestic_chef_insight_2') - - actor.removeSkillMod('expertise_complexity_decrease_chef', 1) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_domestic_chef_insight_2") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_domestic_chef_insight_2") return diff --git a/scripts/expertise/expertise_domestic_chef_keen_understanding_1.py b/scripts/expertise/expertise_domestic_chef_keen_understanding_1.py index 4449c44c..2d6a9548 100644 --- a/scripts/expertise/expertise_domestic_chef_keen_understanding_1.py +++ b/scripts/expertise/expertise_domestic_chef_keen_understanding_1.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'trader_dom_1a': - return - - actor.addSkill('expertise_domestic_chef_keen_understanding_1') - - actor.addSkillMod('expertise_complexity_decrease_chef', 2) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'trader_dom_1a': - return - - actor.removeSkill('expertise_domestic_chef_keen_understanding_1') - - actor.removeSkillMod('expertise_complexity_decrease_chef', 2) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_domestic_chef_keen_understanding_1") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_domestic_chef_keen_understanding_1") return diff --git a/scripts/expertise/expertise_domestic_chef_keen_understanding_2.py b/scripts/expertise/expertise_domestic_chef_keen_understanding_2.py index 3fdc103f..1a8fef1f 100644 --- a/scripts/expertise/expertise_domestic_chef_keen_understanding_2.py +++ b/scripts/expertise/expertise_domestic_chef_keen_understanding_2.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'trader_dom_1a': - return - - actor.addSkill('expertise_domestic_chef_keen_understanding_2') - - actor.addSkillMod('expertise_complexity_decrease_chef', 2) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'trader_dom_1a': - return - - actor.removeSkill('expertise_domestic_chef_keen_understanding_2') - - actor.removeSkillMod('expertise_complexity_decrease_chef', 2) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_domestic_chef_keen_understanding_2") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_domestic_chef_keen_understanding_2") return diff --git a/scripts/expertise/expertise_domestic_chef_schematic_1_1.py b/scripts/expertise/expertise_domestic_chef_schematic_1_1.py index 47138106..8da9070b 100644 --- a/scripts/expertise/expertise_domestic_chef_schematic_1_1.py +++ b/scripts/expertise/expertise_domestic_chef_schematic_1_1.py @@ -1,46 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'trader_dom_1a': - return - - actor.addSkill('expertise_domestic_chef_schematic_1_1') - - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'trader_dom_1a': - return - - actor.removeSkill('expertise_domestic_chef_schematic_1_1') - - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_domestic_chef_schematic_1_1") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_domestic_chef_schematic_1_1") return diff --git a/scripts/expertise/expertise_domestic_chef_schematic_2_1.py b/scripts/expertise/expertise_domestic_chef_schematic_2_1.py index 1ec86323..ec21ccbf 100644 --- a/scripts/expertise/expertise_domestic_chef_schematic_2_1.py +++ b/scripts/expertise/expertise_domestic_chef_schematic_2_1.py @@ -1,46 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'trader_dom_1a': - return - - actor.addSkill('expertise_domestic_chef_schematic_2_1') - - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'trader_dom_1a': - return - - actor.removeSkill('expertise_domestic_chef_schematic_2_1') - - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_domestic_chef_schematic_2_1") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_domestic_chef_schematic_2_1") return diff --git a/scripts/expertise/expertise_domestic_resource_processing_1.py b/scripts/expertise/expertise_domestic_resource_processing_1.py index 62a2adf5..7fa9d660 100644 --- a/scripts/expertise/expertise_domestic_resource_processing_1.py +++ b/scripts/expertise/expertise_domestic_resource_processing_1.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'trader_dom_1a': - return - - actor.addSkill('expertise_domestic_resource_processing_1') - - actor.addSkillMod('expertise_resource_quality_increase', 1) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'trader_dom_1a': - return - - actor.removeSkill('expertise_domestic_resource_processing_1') - - actor.removeSkillMod('expertise_resource_quality_increase', 1) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_domestic_resource_processing_1") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_domestic_resource_processing_1") return diff --git a/scripts/expertise/expertise_domestic_resource_processing_2.py b/scripts/expertise/expertise_domestic_resource_processing_2.py index ccd73bd5..8e6e3a11 100644 --- a/scripts/expertise/expertise_domestic_resource_processing_2.py +++ b/scripts/expertise/expertise_domestic_resource_processing_2.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'trader_dom_1a': - return - - actor.addSkill('expertise_domestic_resource_processing_2') - - actor.addSkillMod('expertise_resource_quality_increase', 1) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'trader_dom_1a': - return - - actor.removeSkill('expertise_domestic_resource_processing_2') - - actor.removeSkillMod('expertise_resource_quality_increase', 1) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_domestic_resource_processing_2") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_domestic_resource_processing_2") return diff --git a/scripts/expertise/expertise_domestic_resource_refinement_1.py b/scripts/expertise/expertise_domestic_resource_refinement_1.py index fd3e810f..b0352b8e 100644 --- a/scripts/expertise/expertise_domestic_resource_refinement_1.py +++ b/scripts/expertise/expertise_domestic_resource_refinement_1.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'trader_dom_1a': - return - - actor.addSkill('expertise_domestic_resource_refinement_1') - - actor.addSkillMod('expertise_resource_quality_increase', 1) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'trader_dom_1a': - return - - actor.removeSkill('expertise_domestic_resource_refinement_1') - - actor.removeSkillMod('expertise_resource_quality_increase', 1) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_domestic_resource_refinement_1") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_domestic_resource_refinement_1") return diff --git a/scripts/expertise/expertise_domestic_resource_refinement_2.py b/scripts/expertise/expertise_domestic_resource_refinement_2.py index 9dfedf70..74913100 100644 --- a/scripts/expertise/expertise_domestic_resource_refinement_2.py +++ b/scripts/expertise/expertise_domestic_resource_refinement_2.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'trader_dom_1a': - return - - actor.addSkill('expertise_domestic_resource_refinement_2') - - actor.addSkillMod('expertise_resource_quality_increase', 1) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'trader_dom_1a': - return - - actor.removeSkill('expertise_domestic_resource_refinement_2') - - actor.removeSkillMod('expertise_resource_quality_increase', 1) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_domestic_resource_refinement_2") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_domestic_resource_refinement_2") return diff --git a/scripts/expertise/expertise_domestic_tailor_advanced_theory_1.py b/scripts/expertise/expertise_domestic_tailor_advanced_theory_1.py index 2a84d182..46aa159d 100644 --- a/scripts/expertise/expertise_domestic_tailor_advanced_theory_1.py +++ b/scripts/expertise/expertise_domestic_tailor_advanced_theory_1.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'trader_dom_1a': - return - - actor.addSkill('expertise_domestic_tailor_advanced_theory_1') - - actor.addSkillMod('clothing_experimentation', 10) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'trader_dom_1a': - return - - actor.removeSkill('expertise_domestic_tailor_advanced_theory_1') - - actor.removeSkillMod('clothing_experimentation', 10) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_domestic_tailor_advanced_theory_1") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_domestic_tailor_advanced_theory_1") return diff --git a/scripts/expertise/expertise_domestic_tailor_attachment_upgrade_1.py b/scripts/expertise/expertise_domestic_tailor_attachment_upgrade_1.py index c3be240b..d10933fb 100644 --- a/scripts/expertise/expertise_domestic_tailor_attachment_upgrade_1.py +++ b/scripts/expertise/expertise_domestic_tailor_attachment_upgrade_1.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'trader_dom_1a': - return - - actor.addSkill('expertise_domestic_tailor_attachment_upgrade_1') - - actor.addSkillMod('expertise_attachment_upgrade', 1) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'trader_dom_1a': - return - - actor.removeSkill('expertise_domestic_tailor_attachment_upgrade_1') - - actor.removeSkillMod('expertise_attachment_upgrade', 1) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_domestic_tailor_attachment_upgrade_1") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_domestic_tailor_attachment_upgrade_1") return diff --git a/scripts/expertise/expertise_domestic_tailor_dexterity_1.py b/scripts/expertise/expertise_domestic_tailor_dexterity_1.py index c0c3c0bb..7b05bf09 100644 --- a/scripts/expertise/expertise_domestic_tailor_dexterity_1.py +++ b/scripts/expertise/expertise_domestic_tailor_dexterity_1.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'trader_dom_1a': - return - - actor.addSkill('expertise_domestic_tailor_dexterity_1') - - actor.addSkillMod('clothing_assembly', 5) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'trader_dom_1a': - return - - actor.removeSkill('expertise_domestic_tailor_dexterity_1') - - actor.removeSkillMod('clothing_assembly', 5) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_domestic_tailor_dexterity_1") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_domestic_tailor_dexterity_1") return diff --git a/scripts/expertise/expertise_domestic_tailor_dexterity_2.py b/scripts/expertise/expertise_domestic_tailor_dexterity_2.py index 24fb5fc8..16c9b28e 100644 --- a/scripts/expertise/expertise_domestic_tailor_dexterity_2.py +++ b/scripts/expertise/expertise_domestic_tailor_dexterity_2.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'trader_dom_1a': - return - - actor.addSkill('expertise_domestic_tailor_dexterity_2') - - actor.addSkillMod('clothing_assembly', 5) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'trader_dom_1a': - return - - actor.removeSkill('expertise_domestic_tailor_dexterity_2') - - actor.removeSkillMod('clothing_assembly', 5) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_domestic_tailor_dexterity_2") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_domestic_tailor_dexterity_2") return diff --git a/scripts/expertise/expertise_domestic_tailor_dexterity_3.py b/scripts/expertise/expertise_domestic_tailor_dexterity_3.py index 8bee3264..0f4697c9 100644 --- a/scripts/expertise/expertise_domestic_tailor_dexterity_3.py +++ b/scripts/expertise/expertise_domestic_tailor_dexterity_3.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'trader_dom_1a': - return - - actor.addSkill('expertise_domestic_tailor_dexterity_3') - - actor.addSkillMod('clothing_assembly', 5) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'trader_dom_1a': - return - - actor.removeSkill('expertise_domestic_tailor_dexterity_3') - - actor.removeSkillMod('clothing_assembly', 5) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_domestic_tailor_dexterity_3") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_domestic_tailor_dexterity_3") return diff --git a/scripts/expertise/expertise_domestic_tailor_dexterity_4.py b/scripts/expertise/expertise_domestic_tailor_dexterity_4.py index 828adfd1..8ef125c7 100644 --- a/scripts/expertise/expertise_domestic_tailor_dexterity_4.py +++ b/scripts/expertise/expertise_domestic_tailor_dexterity_4.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'trader_dom_1a': - return - - actor.addSkill('expertise_domestic_tailor_dexterity_4') - - actor.addSkillMod('clothing_assembly', 5) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'trader_dom_1a': - return - - actor.removeSkill('expertise_domestic_tailor_dexterity_4') - - actor.removeSkillMod('clothing_assembly', 5) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_domestic_tailor_dexterity_4") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_domestic_tailor_dexterity_4") return diff --git a/scripts/expertise/expertise_domestic_tailor_hypothesis_1.py b/scripts/expertise/expertise_domestic_tailor_hypothesis_1.py index d384d0ea..e9e14164 100644 --- a/scripts/expertise/expertise_domestic_tailor_hypothesis_1.py +++ b/scripts/expertise/expertise_domestic_tailor_hypothesis_1.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'trader_dom_1a': - return - - actor.addSkill('expertise_domestic_tailor_hypothesis_1') - - actor.addSkillMod('expertise_experimentation_increase_tailor', 3) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'trader_dom_1a': - return - - actor.removeSkill('expertise_domestic_tailor_hypothesis_1') - - actor.removeSkillMod('expertise_experimentation_increase_tailor', 3) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_domestic_tailor_hypothesis_1") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_domestic_tailor_hypothesis_1") return diff --git a/scripts/expertise/expertise_domestic_tailor_hypothesis_2.py b/scripts/expertise/expertise_domestic_tailor_hypothesis_2.py index dc25b650..0dad6f4d 100644 --- a/scripts/expertise/expertise_domestic_tailor_hypothesis_2.py +++ b/scripts/expertise/expertise_domestic_tailor_hypothesis_2.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'trader_dom_1a': - return - - actor.addSkill('expertise_domestic_tailor_hypothesis_2') - - actor.addSkillMod('expertise_experimentation_increase_tailor', 3) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'trader_dom_1a': - return - - actor.removeSkill('expertise_domestic_tailor_hypothesis_2') - - actor.removeSkillMod('expertise_experimentation_increase_tailor', 3) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_domestic_tailor_hypothesis_2") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_domestic_tailor_hypothesis_2") return diff --git a/scripts/expertise/expertise_domestic_tailor_hypothesis_3.py b/scripts/expertise/expertise_domestic_tailor_hypothesis_3.py index 41572d81..70d55b5c 100644 --- a/scripts/expertise/expertise_domestic_tailor_hypothesis_3.py +++ b/scripts/expertise/expertise_domestic_tailor_hypothesis_3.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'trader_dom_1a': - return - - actor.addSkill('expertise_domestic_tailor_hypothesis_3') - - actor.addSkillMod('expertise_experimentation_increase_tailor', 3) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'trader_dom_1a': - return - - actor.removeSkill('expertise_domestic_tailor_hypothesis_3') - - actor.removeSkillMod('expertise_experimentation_increase_tailor', 3) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_domestic_tailor_hypothesis_3") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_domestic_tailor_hypothesis_3") return diff --git a/scripts/expertise/expertise_domestic_tailor_hypothesis_4.py b/scripts/expertise/expertise_domestic_tailor_hypothesis_4.py index 2009c763..c9a25d1c 100644 --- a/scripts/expertise/expertise_domestic_tailor_hypothesis_4.py +++ b/scripts/expertise/expertise_domestic_tailor_hypothesis_4.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'trader_dom_1a': - return - - actor.addSkill('expertise_domestic_tailor_hypothesis_4') - - actor.addSkillMod('expertise_experimentation_increase_tailor', 3) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'trader_dom_1a': - return - - actor.removeSkill('expertise_domestic_tailor_hypothesis_4') - - actor.removeSkillMod('expertise_experimentation_increase_tailor', 3) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_domestic_tailor_hypothesis_4") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_domestic_tailor_hypothesis_4") return diff --git a/scripts/expertise/expertise_domestic_tailor_insight_1.py b/scripts/expertise/expertise_domestic_tailor_insight_1.py index 1734ab71..dcafb9f2 100644 --- a/scripts/expertise/expertise_domestic_tailor_insight_1.py +++ b/scripts/expertise/expertise_domestic_tailor_insight_1.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'trader_dom_1a': - return - - actor.addSkill('expertise_domestic_tailor_insight_1') - - actor.addSkillMod('expertise_complexity_decrease_tailor', 1) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'trader_dom_1a': - return - - actor.removeSkill('expertise_domestic_tailor_insight_1') - - actor.removeSkillMod('expertise_complexity_decrease_tailor', 1) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_domestic_tailor_insight_1") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_domestic_tailor_insight_1") return diff --git a/scripts/expertise/expertise_domestic_tailor_insight_2.py b/scripts/expertise/expertise_domestic_tailor_insight_2.py index e65231bd..cd307c4c 100644 --- a/scripts/expertise/expertise_domestic_tailor_insight_2.py +++ b/scripts/expertise/expertise_domestic_tailor_insight_2.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'trader_dom_1a': - return - - actor.addSkill('expertise_domestic_tailor_insight_2') - - actor.addSkillMod('expertise_complexity_decrease_tailor', 1) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'trader_dom_1a': - return - - actor.removeSkill('expertise_domestic_tailor_insight_2') - - actor.removeSkillMod('expertise_complexity_decrease_tailor', 1) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_domestic_tailor_insight_2") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_domestic_tailor_insight_2") return diff --git a/scripts/expertise/expertise_domestic_tailor_keen_understanding_1.py b/scripts/expertise/expertise_domestic_tailor_keen_understanding_1.py index 59a274ff..e4c2ab72 100644 --- a/scripts/expertise/expertise_domestic_tailor_keen_understanding_1.py +++ b/scripts/expertise/expertise_domestic_tailor_keen_understanding_1.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'trader_dom_1a': - return - - actor.addSkill('expertise_domestic_tailor_keen_understanding_1') - - actor.addSkillMod('expertise_complexity_decrease_tailor', 2) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'trader_dom_1a': - return - - actor.removeSkill('expertise_domestic_tailor_keen_understanding_1') - - actor.removeSkillMod('expertise_complexity_decrease_tailor', 2) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_domestic_tailor_keen_understanding_1") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_domestic_tailor_keen_understanding_1") return diff --git a/scripts/expertise/expertise_domestic_tailor_keen_understanding_2.py b/scripts/expertise/expertise_domestic_tailor_keen_understanding_2.py index 1504d0e2..b866a83f 100644 --- a/scripts/expertise/expertise_domestic_tailor_keen_understanding_2.py +++ b/scripts/expertise/expertise_domestic_tailor_keen_understanding_2.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'trader_dom_1a': - return - - actor.addSkill('expertise_domestic_tailor_keen_understanding_2') - - actor.addSkillMod('expertise_complexity_decrease_tailor', 2) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'trader_dom_1a': - return - - actor.removeSkill('expertise_domestic_tailor_keen_understanding_2') - - actor.removeSkillMod('expertise_complexity_decrease_tailor', 2) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_domestic_tailor_keen_understanding_2") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_domestic_tailor_keen_understanding_2") return diff --git a/scripts/expertise/expertise_domestic_tailor_socket_bonus_1.py b/scripts/expertise/expertise_domestic_tailor_socket_bonus_1.py index 9c86c720..4cac0dfc 100644 --- a/scripts/expertise/expertise_domestic_tailor_socket_bonus_1.py +++ b/scripts/expertise/expertise_domestic_tailor_socket_bonus_1.py @@ -1,46 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'trader_dom_1a': - return - - actor.addSkill('expertise_domestic_tailor_socket_bonus_1') - - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'trader_dom_1a': - return - - actor.removeSkill('expertise_domestic_tailor_socket_bonus_1') - - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_domestic_tailor_socket_bonus_1") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_domestic_tailor_socket_bonus_1") return diff --git a/scripts/expertise/expertise_en_affability_1.py b/scripts/expertise/expertise_en_affability_1.py index 7057b18d..35dfd326 100644 --- a/scripts/expertise/expertise_en_affability_1.py +++ b/scripts/expertise/expertise_en_affability_1.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'entertainer_1a': - return - - actor.addSkill('expertise_en_affability_1') - - actor.addSkillMod('expertise_en_performance_increase', 5) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'entertainer_1a': - return - - actor.removeSkill('expertise_en_affability_1') - - actor.removeSkillMod('expertise_en_performance_increase', 5) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_en_affability_1") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_en_affability_1") return diff --git a/scripts/expertise/expertise_en_affability_2.py b/scripts/expertise/expertise_en_affability_2.py index fe7cad65..38b336df 100644 --- a/scripts/expertise/expertise_en_affability_2.py +++ b/scripts/expertise/expertise_en_affability_2.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'entertainer_1a': - return - - actor.addSkill('expertise_en_affability_2') - - actor.addSkillMod('expertise_en_performance_increase', 5) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'entertainer_1a': - return - - actor.removeSkill('expertise_en_affability_2') - - actor.removeSkillMod('expertise_en_performance_increase', 5) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_en_affability_2") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_en_affability_2") return diff --git a/scripts/expertise/expertise_en_affability_3.py b/scripts/expertise/expertise_en_affability_3.py index 7a73a8ef..0a2cf7fc 100644 --- a/scripts/expertise/expertise_en_affability_3.py +++ b/scripts/expertise/expertise_en_affability_3.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'entertainer_1a': - return - - actor.addSkill('expertise_en_affability_3') - - actor.addSkillMod('expertise_en_performance_increase', 5) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'entertainer_1a': - return - - actor.removeSkill('expertise_en_affability_3') - - actor.removeSkillMod('expertise_en_performance_increase', 5) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_en_affability_3") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_en_affability_3") return diff --git a/scripts/expertise/expertise_en_affability_4.py b/scripts/expertise/expertise_en_affability_4.py index 3ae998dc..3949d215 100644 --- a/scripts/expertise/expertise_en_affability_4.py +++ b/scripts/expertise/expertise_en_affability_4.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'entertainer_1a': - return - - actor.addSkill('expertise_en_affability_4') - - actor.addSkillMod('expertise_en_performance_increase', 5) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'entertainer_1a': - return - - actor.removeSkill('expertise_en_affability_4') - - actor.removeSkillMod('expertise_en_performance_increase', 5) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_en_affability_4") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_en_affability_4") return diff --git a/scripts/expertise/expertise_en_allure_1.py b/scripts/expertise/expertise_en_allure_1.py index e4c017a8..9448b911 100644 --- a/scripts/expertise/expertise_en_allure_1.py +++ b/scripts/expertise/expertise_en_allure_1.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'entertainer_1a': - return - - actor.addSkill('expertise_en_allure_1') - - actor.addSkillMod('expertise_buff_duration_line_en_unhealthy_fixation_debuff', 1) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'entertainer_1a': - return - - actor.removeSkill('expertise_en_allure_1') - - actor.removeSkillMod('expertise_buff_duration_line_en_unhealthy_fixation_debuff', 1) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_en_allure_1") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_en_allure_1") return diff --git a/scripts/expertise/expertise_en_allure_2.py b/scripts/expertise/expertise_en_allure_2.py index bb95fb7b..831a7c36 100644 --- a/scripts/expertise/expertise_en_allure_2.py +++ b/scripts/expertise/expertise_en_allure_2.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'entertainer_1a': - return - - actor.addSkill('expertise_en_allure_2') - - actor.addSkillMod('expertise_buff_duration_line_en_unhealthy_fixation_debuff', 1) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'entertainer_1a': - return - - actor.removeSkill('expertise_en_allure_2') - - actor.removeSkillMod('expertise_buff_duration_line_en_unhealthy_fixation_debuff', 1) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_en_allure_2") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_en_allure_2") return diff --git a/scripts/expertise/expertise_en_allure_3.py b/scripts/expertise/expertise_en_allure_3.py index b0385c29..f896a1d2 100644 --- a/scripts/expertise/expertise_en_allure_3.py +++ b/scripts/expertise/expertise_en_allure_3.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'entertainer_1a': - return - - actor.addSkill('expertise_en_allure_3') - - actor.addSkillMod('expertise_buff_duration_line_en_unhealthy_fixation_debuff', 1) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'entertainer_1a': - return - - actor.removeSkill('expertise_en_allure_3') - - actor.removeSkillMod('expertise_buff_duration_line_en_unhealthy_fixation_debuff', 1) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_en_allure_3") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_en_allure_3") return diff --git a/scripts/expertise/expertise_en_annulling_1.py b/scripts/expertise/expertise_en_annulling_1.py index a2565ffd..6055557a 100644 --- a/scripts/expertise/expertise_en_annulling_1.py +++ b/scripts/expertise/expertise_en_annulling_1.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'entertainer_1a': - return - - actor.addSkill('expertise_en_annulling_1') - - actor.addSkillMod('expertise_buff_en_void_dance_buff', 5) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'entertainer_1a': - return - - actor.removeSkill('expertise_en_annulling_1') - - actor.removeSkillMod('expertise_buff_en_void_dance_buff', 5) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_en_annulling_1") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_en_annulling_1") return diff --git a/scripts/expertise/expertise_en_annulling_2.py b/scripts/expertise/expertise_en_annulling_2.py index c80a1394..e06fc2ef 100644 --- a/scripts/expertise/expertise_en_annulling_2.py +++ b/scripts/expertise/expertise_en_annulling_2.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'entertainer_1a': - return - - actor.addSkill('expertise_en_annulling_2') - - actor.addSkillMod('expertise_buff_en_void_dance_buff', 5) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'entertainer_1a': - return - - actor.removeSkill('expertise_en_annulling_2') - - actor.removeSkillMod('expertise_buff_en_void_dance_buff', 5) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_en_annulling_2") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_en_annulling_2") return diff --git a/scripts/expertise/expertise_en_annulling_3.py b/scripts/expertise/expertise_en_annulling_3.py index 457479f8..b26f4814 100644 --- a/scripts/expertise/expertise_en_annulling_3.py +++ b/scripts/expertise/expertise_en_annulling_3.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'entertainer_1a': - return - - actor.addSkill('expertise_en_annulling_3') - - actor.addSkillMod('expertise_buff_en_void_dance_buff', 5) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'entertainer_1a': - return - - actor.removeSkill('expertise_en_annulling_3') - - actor.removeSkillMod('expertise_buff_en_void_dance_buff', 5) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_en_annulling_3") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_en_annulling_3") return diff --git a/scripts/expertise/expertise_en_conditioned_vessel_1.py b/scripts/expertise/expertise_en_conditioned_vessel_1.py index 49149612..896a8752 100644 --- a/scripts/expertise/expertise_en_conditioned_vessel_1.py +++ b/scripts/expertise/expertise_en_conditioned_vessel_1.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'entertainer_1a': - return - - actor.addSkill('expertise_en_conditioned_vessel_1') - - actor.addSkillMod('expertise_damage_melee', 5) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'entertainer_1a': - return - - actor.removeSkill('expertise_en_conditioned_vessel_1') - - actor.removeSkillMod('expertise_damage_melee', 5) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_en_conditioned_vessel_1") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_en_conditioned_vessel_1") return diff --git a/scripts/expertise/expertise_en_conditioned_vessel_2.py b/scripts/expertise/expertise_en_conditioned_vessel_2.py index e8dd80c1..e7123ab7 100644 --- a/scripts/expertise/expertise_en_conditioned_vessel_2.py +++ b/scripts/expertise/expertise_en_conditioned_vessel_2.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'entertainer_1a': - return - - actor.addSkill('expertise_en_conditioned_vessel_2') - - actor.addSkillMod('expertise_damage_melee', 5) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'entertainer_1a': - return - - actor.removeSkill('expertise_en_conditioned_vessel_2') - - actor.removeSkillMod('expertise_damage_melee', 5) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_en_conditioned_vessel_2") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_en_conditioned_vessel_2") return diff --git a/scripts/expertise/expertise_en_conditioned_vessel_3.py b/scripts/expertise/expertise_en_conditioned_vessel_3.py index e32a7943..e0292169 100644 --- a/scripts/expertise/expertise_en_conditioned_vessel_3.py +++ b/scripts/expertise/expertise_en_conditioned_vessel_3.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'entertainer_1a': - return - - actor.addSkill('expertise_en_conditioned_vessel_3') - - actor.addSkillMod('expertise_damage_melee', 5) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'entertainer_1a': - return - - actor.removeSkill('expertise_en_conditioned_vessel_3') - - actor.removeSkillMod('expertise_damage_melee', 5) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_en_conditioned_vessel_3") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_en_conditioned_vessel_3") return diff --git a/scripts/expertise/expertise_en_conditioned_vessel_4.py b/scripts/expertise/expertise_en_conditioned_vessel_4.py index ce6146de..f0d7b6e7 100644 --- a/scripts/expertise/expertise_en_conditioned_vessel_4.py +++ b/scripts/expertise/expertise_en_conditioned_vessel_4.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'entertainer_1a': - return - - actor.addSkill('expertise_en_conditioned_vessel_4') - - actor.addSkillMod('expertise_damage_melee', 5) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'entertainer_1a': - return - - actor.removeSkill('expertise_en_conditioned_vessel_4') - - actor.removeSkillMod('expertise_damage_melee', 5) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_en_conditioned_vessel_4") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_en_conditioned_vessel_4") return diff --git a/scripts/expertise/expertise_en_controlled_spin_1.py b/scripts/expertise/expertise_en_controlled_spin_1.py index 4ff248df..dc088a17 100644 --- a/scripts/expertise/expertise_en_controlled_spin_1.py +++ b/scripts/expertise/expertise_en_controlled_spin_1.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'entertainer_1a': - return - - actor.addSkill('expertise_en_controlled_spin_1') - - actor.addSkillMod('expertise_damage_line_en_sweeping_pirouette', 10) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'entertainer_1a': - return - - actor.removeSkill('expertise_en_controlled_spin_1') - - actor.removeSkillMod('expertise_damage_line_en_sweeping_pirouette', 10) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_en_controlled_spin_1") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_en_controlled_spin_1") return diff --git a/scripts/expertise/expertise_en_controlled_spin_2.py b/scripts/expertise/expertise_en_controlled_spin_2.py index 3b9f1f51..018aae71 100644 --- a/scripts/expertise/expertise_en_controlled_spin_2.py +++ b/scripts/expertise/expertise_en_controlled_spin_2.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'entertainer_1a': - return - - actor.addSkill('expertise_en_controlled_spin_2') - - actor.addSkillMod('expertise_damage_line_en_sweeping_pirouette', 10) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'entertainer_1a': - return - - actor.removeSkill('expertise_en_controlled_spin_2') - - actor.removeSkillMod('expertise_damage_line_en_sweeping_pirouette', 10) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_en_controlled_spin_2") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_en_controlled_spin_2") return diff --git a/scripts/expertise/expertise_en_controlled_spin_3.py b/scripts/expertise/expertise_en_controlled_spin_3.py index 222ca61c..4850d8cc 100644 --- a/scripts/expertise/expertise_en_controlled_spin_3.py +++ b/scripts/expertise/expertise_en_controlled_spin_3.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'entertainer_1a': - return - - actor.addSkill('expertise_en_controlled_spin_3') - - actor.addSkillMod('expertise_damage_line_en_sweeping_pirouette', 10) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'entertainer_1a': - return - - actor.removeSkill('expertise_en_controlled_spin_3') - - actor.removeSkillMod('expertise_damage_line_en_sweeping_pirouette', 10) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_en_controlled_spin_3") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_en_controlled_spin_3") return diff --git a/scripts/expertise/expertise_en_creativity_1.py b/scripts/expertise/expertise_en_creativity_1.py index 0583185f..ec5120d4 100644 --- a/scripts/expertise/expertise_en_creativity_1.py +++ b/scripts/expertise/expertise_en_creativity_1.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'entertainer_1a': - return - - actor.addSkill('expertise_en_creativity_1') - - actor.addSkillMod('expertise_en_inspire_base_point_increase', 3) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'entertainer_1a': - return - - actor.removeSkill('expertise_en_creativity_1') - - actor.removeSkillMod('expertise_en_inspire_base_point_increase', 3) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_en_creativity_1") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_en_creativity_1") return diff --git a/scripts/expertise/expertise_en_creativity_2.py b/scripts/expertise/expertise_en_creativity_2.py index e04aea75..9e919439 100644 --- a/scripts/expertise/expertise_en_creativity_2.py +++ b/scripts/expertise/expertise_en_creativity_2.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'entertainer_1a': - return - - actor.addSkill('expertise_en_creativity_2') - - actor.addSkillMod('expertise_en_inspire_base_point_increase', 3) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'entertainer_1a': - return - - actor.removeSkill('expertise_en_creativity_2') - - actor.removeSkillMod('expertise_en_inspire_base_point_increase', 3) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_en_creativity_2") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_en_creativity_2") return diff --git a/scripts/expertise/expertise_en_creativity_3.py b/scripts/expertise/expertise_en_creativity_3.py index 581aff38..a4e8153f 100644 --- a/scripts/expertise/expertise_en_creativity_3.py +++ b/scripts/expertise/expertise_en_creativity_3.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'entertainer_1a': - return - - actor.addSkill('expertise_en_creativity_3') - - actor.addSkillMod('expertise_en_inspire_base_point_increase', 3) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'entertainer_1a': - return - - actor.removeSkill('expertise_en_creativity_3') - - actor.removeSkillMod('expertise_en_inspire_base_point_increase', 3) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_en_creativity_3") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_en_creativity_3") return diff --git a/scripts/expertise/expertise_en_creativity_4.py b/scripts/expertise/expertise_en_creativity_4.py index 35867c4a..f743578d 100644 --- a/scripts/expertise/expertise_en_creativity_4.py +++ b/scripts/expertise/expertise_en_creativity_4.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'entertainer_1a': - return - - actor.addSkill('expertise_en_creativity_4') - - actor.addSkillMod('expertise_en_inspire_base_point_increase', 3) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'entertainer_1a': - return - - actor.removeSkill('expertise_en_creativity_4') - - actor.removeSkillMod('expertise_en_inspire_base_point_increase', 3) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_en_creativity_4") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_en_creativity_4") return diff --git a/scripts/expertise/expertise_en_dramatic_flair_1.py b/scripts/expertise/expertise_en_dramatic_flair_1.py index 4195deb4..bd280ed0 100644 --- a/scripts/expertise/expertise_en_dramatic_flair_1.py +++ b/scripts/expertise/expertise_en_dramatic_flair_1.py @@ -1,52 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'entertainer_1a': - return - - actor.addSkill('expertise_en_dramatic_flair_1') - - actor.addSkillMod('constitution_modified', 15) - actor.addSkillMod('strength_modified', 15) - actor.addSkillMod('stamina_modified', 15) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'entertainer_1a': - return - - actor.removeSkill('expertise_en_dramatic_flair_1') - - actor.removeSkillMod('constitution_modified', 15) - actor.removeSkillMod('strength_modified', 15) - actor.removeSkillMod('stamina_modified', 15) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_en_dramatic_flair_1") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_en_dramatic_flair_1") return diff --git a/scripts/expertise/expertise_en_dramatic_flair_2.py b/scripts/expertise/expertise_en_dramatic_flair_2.py index 8706a5d3..7d32d156 100644 --- a/scripts/expertise/expertise_en_dramatic_flair_2.py +++ b/scripts/expertise/expertise_en_dramatic_flair_2.py @@ -1,52 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'entertainer_1a': - return - - actor.addSkill('expertise_en_dramatic_flair_2') - - actor.addSkillMod('constitution_modified', 15) - actor.addSkillMod('strength_modified', 15) - actor.addSkillMod('stamina_modified', 15) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'entertainer_1a': - return - - actor.removeSkill('expertise_en_dramatic_flair_2') - - actor.removeSkillMod('constitution_modified', 15) - actor.removeSkillMod('strength_modified', 15) - actor.removeSkillMod('stamina_modified', 15) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_en_dramatic_flair_2") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_en_dramatic_flair_2") return diff --git a/scripts/expertise/expertise_en_dramatic_flair_3.py b/scripts/expertise/expertise_en_dramatic_flair_3.py index 070e4796..16533340 100644 --- a/scripts/expertise/expertise_en_dramatic_flair_3.py +++ b/scripts/expertise/expertise_en_dramatic_flair_3.py @@ -1,52 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'entertainer_1a': - return - - actor.addSkill('expertise_en_dramatic_flair_3') - - actor.addSkillMod('constitution_modified', 15) - actor.addSkillMod('strength_modified', 15) - actor.addSkillMod('stamina_modified', 15) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'entertainer_1a': - return - - actor.removeSkill('expertise_en_dramatic_flair_3') - - actor.removeSkillMod('constitution_modified', 15) - actor.removeSkillMod('strength_modified', 15) - actor.removeSkillMod('stamina_modified', 15) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_en_dramatic_flair_3") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_en_dramatic_flair_3") return diff --git a/scripts/expertise/expertise_en_dramatic_flair_4.py b/scripts/expertise/expertise_en_dramatic_flair_4.py index 74442f0d..ccb52574 100644 --- a/scripts/expertise/expertise_en_dramatic_flair_4.py +++ b/scripts/expertise/expertise_en_dramatic_flair_4.py @@ -1,52 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'entertainer_1a': - return - - actor.addSkill('expertise_en_dramatic_flair_4') - - actor.addSkillMod('constitution_modified', 15) - actor.addSkillMod('strength_modified', 15) - actor.addSkillMod('stamina_modified', 15) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'entertainer_1a': - return - - actor.removeSkill('expertise_en_dramatic_flair_4') - - actor.removeSkillMod('constitution_modified', 15) - actor.removeSkillMod('strength_modified', 15) - actor.removeSkillMod('stamina_modified', 15) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_en_dramatic_flair_4") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_en_dramatic_flair_4") return diff --git a/scripts/expertise/expertise_en_emotional_prescience_1.py b/scripts/expertise/expertise_en_emotional_prescience_1.py index 3b7660fa..f9177d7c 100644 --- a/scripts/expertise/expertise_en_emotional_prescience_1.py +++ b/scripts/expertise/expertise_en_emotional_prescience_1.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'entertainer_1a': - return - - actor.addSkill('expertise_en_emotional_prescience_1') - - actor.addSkillMod('expertise_glancing_blow_all', 4) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'entertainer_1a': - return - - actor.removeSkill('expertise_en_emotional_prescience_1') - - actor.removeSkillMod('expertise_glancing_blow_all', 4) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_en_emotional_prescience_1") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_en_emotional_prescience_1") return diff --git a/scripts/expertise/expertise_en_emotional_prescience_2.py b/scripts/expertise/expertise_en_emotional_prescience_2.py index f114424f..5afb81a1 100644 --- a/scripts/expertise/expertise_en_emotional_prescience_2.py +++ b/scripts/expertise/expertise_en_emotional_prescience_2.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'entertainer_1a': - return - - actor.addSkill('expertise_en_emotional_prescience_2') - - actor.addSkillMod('expertise_glancing_blow_all', 4) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'entertainer_1a': - return - - actor.removeSkill('expertise_en_emotional_prescience_2') - - actor.removeSkillMod('expertise_glancing_blow_all', 4) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_en_emotional_prescience_2") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_en_emotional_prescience_2") return diff --git a/scripts/expertise/expertise_en_emotional_prescience_3.py b/scripts/expertise/expertise_en_emotional_prescience_3.py index 237d5361..8f5b2500 100644 --- a/scripts/expertise/expertise_en_emotional_prescience_3.py +++ b/scripts/expertise/expertise_en_emotional_prescience_3.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'entertainer_1a': - return - - actor.addSkill('expertise_en_emotional_prescience_3') - - actor.addSkillMod('expertise_glancing_blow_all', 4) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'entertainer_1a': - return - - actor.removeSkill('expertise_en_emotional_prescience_3') - - actor.removeSkillMod('expertise_glancing_blow_all', 4) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_en_emotional_prescience_3") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_en_emotional_prescience_3") return diff --git a/scripts/expertise/expertise_en_emotional_prescience_4.py b/scripts/expertise/expertise_en_emotional_prescience_4.py index 482d9bb2..1a2ce7e1 100644 --- a/scripts/expertise/expertise_en_emotional_prescience_4.py +++ b/scripts/expertise/expertise_en_emotional_prescience_4.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'entertainer_1a': - return - - actor.addSkill('expertise_en_emotional_prescience_4') - - actor.addSkillMod('expertise_glancing_blow_all', 4) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'entertainer_1a': - return - - actor.removeSkill('expertise_en_emotional_prescience_4') - - actor.removeSkillMod('expertise_glancing_blow_all', 4) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_en_emotional_prescience_4") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_en_emotional_prescience_4") return diff --git a/scripts/expertise/expertise_en_encore_heal_1.py b/scripts/expertise/expertise_en_encore_heal_1.py index 45e2ff4a..14d899a0 100644 --- a/scripts/expertise/expertise_en_encore_heal_1.py +++ b/scripts/expertise/expertise_en_encore_heal_1.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'entertainer_1a': - return - - actor.addSkill('expertise_en_encore_heal_1') - - actor.addSkillMod('expertise_healing_line_en_heal', 50) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'entertainer_1a': - return - - actor.removeSkill('expertise_en_encore_heal_1') - - actor.removeSkillMod('expertise_healing_line_en_heal', 50) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_en_encore_heal_1") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_en_encore_heal_1") return diff --git a/scripts/expertise/expertise_en_encore_heal_2.py b/scripts/expertise/expertise_en_encore_heal_2.py index ea8aea9d..1ac0eb53 100644 --- a/scripts/expertise/expertise_en_encore_heal_2.py +++ b/scripts/expertise/expertise_en_encore_heal_2.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'entertainer_1a': - return - - actor.addSkill('expertise_en_encore_heal_2') - - actor.addSkillMod('expertise_healing_line_en_heal', 25) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'entertainer_1a': - return - - actor.removeSkill('expertise_en_encore_heal_2') - - actor.removeSkillMod('expertise_healing_line_en_heal', 25) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_en_encore_heal_2") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_en_encore_heal_2") return diff --git a/scripts/expertise/expertise_en_encore_heal_3.py b/scripts/expertise/expertise_en_encore_heal_3.py index d8036306..348742d1 100644 --- a/scripts/expertise/expertise_en_encore_heal_3.py +++ b/scripts/expertise/expertise_en_encore_heal_3.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'entertainer_1a': - return - - actor.addSkill('expertise_en_encore_heal_3') - - actor.addSkillMod('expertise_healing_line_en_heal', 25) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'entertainer_1a': - return - - actor.removeSkill('expertise_en_encore_heal_3') - - actor.removeSkillMod('expertise_healing_line_en_heal', 25) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_en_encore_heal_3") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_en_encore_heal_3") return diff --git a/scripts/expertise/expertise_en_flush_with_success_1.py b/scripts/expertise/expertise_en_flush_with_success_1.py index f94ae5e5..b25fc909 100644 --- a/scripts/expertise/expertise_en_flush_with_success_1.py +++ b/scripts/expertise/expertise_en_flush_with_success_1.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'entertainer_1a': - return - - actor.addSkill('expertise_en_flush_with_success_1') - - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'entertainer_1a': - return - - actor.removeSkill('expertise_en_flush_with_success_1') - - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - actor.addAbility('en_flush_with_success_buff_package') - + actor.addAbility("en_flush_with_success_buff_package") return def removeAbilities(core, actor, player): - - actor.removeAbility('en_flush_with_success_buff_package') - + actor.removeAbility("en_flush_with_success_buff_package") return diff --git a/scripts/expertise/expertise_en_focused_control_1.py b/scripts/expertise/expertise_en_focused_control_1.py index d781a25e..99d0436a 100644 --- a/scripts/expertise/expertise_en_focused_control_1.py +++ b/scripts/expertise/expertise_en_focused_control_1.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'entertainer_1a': - return - - actor.addSkill('expertise_en_focused_control_1') - - actor.addSkillMod('expertise_action_weapon_melee', 3) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'entertainer_1a': - return - - actor.removeSkill('expertise_en_focused_control_1') - - actor.removeSkillMod('expertise_action_weapon_melee', 3) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_en_focused_control_1") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_en_focused_control_1") return diff --git a/scripts/expertise/expertise_en_focused_control_2.py b/scripts/expertise/expertise_en_focused_control_2.py index 9e78ebe3..2b81f293 100644 --- a/scripts/expertise/expertise_en_focused_control_2.py +++ b/scripts/expertise/expertise_en_focused_control_2.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'entertainer_1a': - return - - actor.addSkill('expertise_en_focused_control_2') - - actor.addSkillMod('expertise_action_weapon_melee', 3) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'entertainer_1a': - return - - actor.removeSkill('expertise_en_focused_control_2') - - actor.removeSkillMod('expertise_action_weapon_melee', 3) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_en_focused_control_2") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_en_focused_control_2") return diff --git a/scripts/expertise/expertise_en_focused_control_3.py b/scripts/expertise/expertise_en_focused_control_3.py index 17a8b154..b256a48d 100644 --- a/scripts/expertise/expertise_en_focused_control_3.py +++ b/scripts/expertise/expertise_en_focused_control_3.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'entertainer_1a': - return - - actor.addSkill('expertise_en_focused_control_3') - - actor.addSkillMod('expertise_action_weapon_melee', 3) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'entertainer_1a': - return - - actor.removeSkill('expertise_en_focused_control_3') - - actor.removeSkillMod('expertise_action_weapon_melee', 3) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_en_focused_control_3") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_en_focused_control_3") return diff --git a/scripts/expertise/expertise_en_focused_control_4.py b/scripts/expertise/expertise_en_focused_control_4.py index cc4e07a9..f3ec007f 100644 --- a/scripts/expertise/expertise_en_focused_control_4.py +++ b/scripts/expertise/expertise_en_focused_control_4.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'entertainer_1a': - return - - actor.addSkill('expertise_en_focused_control_4') - - actor.addSkillMod('expertise_action_weapon_melee', 3) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'entertainer_1a': - return - - actor.removeSkill('expertise_en_focused_control_4') - - actor.removeSkillMod('expertise_action_weapon_melee', 3) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_en_focused_control_4") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_en_focused_control_4") return diff --git a/scripts/expertise/expertise_en_folded_inward_1.py b/scripts/expertise/expertise_en_folded_inward_1.py index 55c57629..142d632c 100644 --- a/scripts/expertise/expertise_en_folded_inward_1.py +++ b/scripts/expertise/expertise_en_folded_inward_1.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'entertainer_1a': - return - - actor.addSkill('expertise_en_folded_inward_1') - - actor.addSkillMod('expertise_innate_protection_all', 250) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'entertainer_1a': - return - - actor.removeSkill('expertise_en_folded_inward_1') - - actor.removeSkillMod('expertise_innate_protection_all', 250) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_en_folded_inward_1") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_en_folded_inward_1") return diff --git a/scripts/expertise/expertise_en_folded_inward_2.py b/scripts/expertise/expertise_en_folded_inward_2.py index 65df6e4f..3c56cd2c 100644 --- a/scripts/expertise/expertise_en_folded_inward_2.py +++ b/scripts/expertise/expertise_en_folded_inward_2.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'entertainer_1a': - return - - actor.addSkill('expertise_en_folded_inward_2') - - actor.addSkillMod('expertise_innate_protection_all', 250) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'entertainer_1a': - return - - actor.removeSkill('expertise_en_folded_inward_2') - - actor.removeSkillMod('expertise_innate_protection_all', 250) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_en_folded_inward_2") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_en_folded_inward_2") return diff --git a/scripts/expertise/expertise_en_folded_inward_3.py b/scripts/expertise/expertise_en_folded_inward_3.py index 7717392f..40b26c21 100644 --- a/scripts/expertise/expertise_en_folded_inward_3.py +++ b/scripts/expertise/expertise_en_folded_inward_3.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'entertainer_1a': - return - - actor.addSkill('expertise_en_folded_inward_3') - - actor.addSkillMod('expertise_innate_protection_all', 250) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'entertainer_1a': - return - - actor.removeSkill('expertise_en_folded_inward_3') - - actor.removeSkillMod('expertise_innate_protection_all', 250) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_en_folded_inward_3") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_en_folded_inward_3") return diff --git a/scripts/expertise/expertise_en_folded_inward_4.py b/scripts/expertise/expertise_en_folded_inward_4.py index 7ece6014..94c18354 100644 --- a/scripts/expertise/expertise_en_folded_inward_4.py +++ b/scripts/expertise/expertise_en_folded_inward_4.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'entertainer_1a': - return - - actor.addSkill('expertise_en_folded_inward_4') - - actor.addSkillMod('expertise_innate_protection_all', 250) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'entertainer_1a': - return - - actor.removeSkill('expertise_en_folded_inward_4') - - actor.removeSkillMod('expertise_innate_protection_all', 250) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_en_folded_inward_4") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_en_folded_inward_4") return diff --git a/scripts/expertise/expertise_en_go_with_the_flow_1.py b/scripts/expertise/expertise_en_go_with_the_flow_1.py index 5f8c9bfa..e51fdee5 100644 --- a/scripts/expertise/expertise_en_go_with_the_flow_1.py +++ b/scripts/expertise/expertise_en_go_with_the_flow_1.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'entertainer_1a': - return - - actor.addSkill('expertise_en_go_with_the_flow_1') - - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'entertainer_1a': - return - - actor.removeSkill('expertise_en_go_with_the_flow_1') - - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - actor.addAbility('en_go_with_the_flow_buff_package') - + actor.addAbility("en_go_with_the_flow_buff_package") return def removeAbilities(core, actor, player): - - actor.removeAbility('en_go_with_the_flow_buff_package') - + actor.removeAbility("en_go_with_the_flow_buff_package") return diff --git a/scripts/expertise/expertise_en_harvest_faire_1.py b/scripts/expertise/expertise_en_harvest_faire_1.py index 924feeb4..21238bc0 100644 --- a/scripts/expertise/expertise_en_harvest_faire_1.py +++ b/scripts/expertise/expertise_en_harvest_faire_1.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'entertainer_1a': - return - - actor.addSkill('expertise_en_harvest_faire_1') - - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'entertainer_1a': - return - - actor.removeSkill('expertise_en_harvest_faire_1') - - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - actor.addAbility('en_harvest_faire_buff_package') - + actor.addAbility("en_harvest_fair_buff_package") return def removeAbilities(core, actor, player): - - actor.removeAbility('en_harvest_faire_buff_package') - + actor.removeAbility("en_harvest_fair_buff_package") return diff --git a/scripts/expertise/expertise_en_heal_1.py b/scripts/expertise/expertise_en_heal_1.py index a80678b6..d4e3d669 100644 --- a/scripts/expertise/expertise_en_heal_1.py +++ b/scripts/expertise/expertise_en_heal_1.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'entertainer_1a': - return - - actor.addSkill('expertise_en_heal_1') - - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'entertainer_1a': - return - - actor.removeSkill('expertise_en_heal_1') - - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - actor.addAbility('en_heal_1') - + actor.addAbility("en_heal_1") return def removeAbilities(core, actor, player): - - actor.removeAbility('en_heal_1') - + actor.removeAbility("en_heal_1") return diff --git a/scripts/expertise/expertise_en_holism_1.py b/scripts/expertise/expertise_en_holism_1.py index 8240988c..af3b40a1 100644 --- a/scripts/expertise/expertise_en_holism_1.py +++ b/scripts/expertise/expertise_en_holism_1.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'entertainer_1a': - return - - actor.addSkill('expertise_en_holism_1') - - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'entertainer_1a': - return - - actor.removeSkill('expertise_en_holism_1') - - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - actor.addAbility('en_healer_buff_package') - + actor.addAbility("en_healer_buff_package") return def removeAbilities(core, actor, player): - - actor.removeAbility('en_healer_buff_package') - + actor.removeAbility("en_healer_buff_package") return diff --git a/scripts/expertise/expertise_en_holographic_duration_1.py b/scripts/expertise/expertise_en_holographic_duration_1.py index 2b9bcf4d..04ec0485 100644 --- a/scripts/expertise/expertise_en_holographic_duration_1.py +++ b/scripts/expertise/expertise_en_holographic_duration_1.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'entertainer_1a': - return - - actor.addSkill('expertise_en_holographic_duration_1') - - actor.addSkillMod('expertise_en_holographic_duration', 1) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'entertainer_1a': - return - - actor.removeSkill('expertise_en_holographic_duration_1') - - actor.removeSkillMod('expertise_en_holographic_duration', 1) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_en_holographic_duration_1") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_en_holographic_duration_1") return diff --git a/scripts/expertise/expertise_en_holographic_mastery_1.py b/scripts/expertise/expertise_en_holographic_mastery_1.py index 49e65ba1..cb7f5424 100644 --- a/scripts/expertise/expertise_en_holographic_mastery_1.py +++ b/scripts/expertise/expertise_en_holographic_mastery_1.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'entertainer_1a': - return - - actor.addSkill('expertise_en_holographic_mastery_1') - - actor.addSkillMod('expertise_en_holographic_additional_backup', 1) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'entertainer_1a': - return - - actor.removeSkill('expertise_en_holographic_mastery_1') - - actor.removeSkillMod('expertise_en_holographic_additional_backup', 1) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_en_holographic_mastery_1") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_en_holographic_mastery_1") return diff --git a/scripts/expertise/expertise_en_holographic_mastery_2.py b/scripts/expertise/expertise_en_holographic_mastery_2.py index 231c7f2e..6fc49ee0 100644 --- a/scripts/expertise/expertise_en_holographic_mastery_2.py +++ b/scripts/expertise/expertise_en_holographic_mastery_2.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'entertainer_1a': - return - - actor.addSkill('expertise_en_holographic_mastery_2') - - actor.addSkillMod('expertise_en_holographic_additional_backup', 1) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'entertainer_1a': - return - - actor.removeSkill('expertise_en_holographic_mastery_2') - - actor.removeSkillMod('expertise_en_holographic_additional_backup', 1) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_en_holographic_mastery_2") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_en_holographic_mastery_2") return diff --git a/scripts/expertise/expertise_en_improv_1.py b/scripts/expertise/expertise_en_improv_1.py index 72cdde87..b2b0352b 100644 --- a/scripts/expertise/expertise_en_improv_1.py +++ b/scripts/expertise/expertise_en_improv_1.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'entertainer_1a': - return - - actor.addSkill('expertise_en_improv_1') - - actor.addSkillMod('expertise_en_improv', 1) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'entertainer_1a': - return - - actor.removeSkill('expertise_en_improv_1') - - actor.removeSkillMod('expertise_en_improv', 1) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_en_improv_1") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_en_improv_1") return diff --git a/scripts/expertise/expertise_en_inspired_fitness_1.py b/scripts/expertise/expertise_en_inspired_fitness_1.py index 0c390c15..1c557c8d 100644 --- a/scripts/expertise/expertise_en_inspired_fitness_1.py +++ b/scripts/expertise/expertise_en_inspired_fitness_1.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'entertainer_1a': - return - - actor.addSkill('expertise_en_inspired_fitness_1') - - actor.addSkillMod('expertise_en_inspire_attrib_increase', 50) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'entertainer_1a': - return - - actor.removeSkill('expertise_en_inspired_fitness_1') - - actor.removeSkillMod('expertise_en_inspire_attrib_increase', 50) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_en_inspired_fitness_1") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_en_inspired_fitness_1") return diff --git a/scripts/expertise/expertise_en_inspired_fitness_2.py b/scripts/expertise/expertise_en_inspired_fitness_2.py index 6c5673b2..92101da2 100644 --- a/scripts/expertise/expertise_en_inspired_fitness_2.py +++ b/scripts/expertise/expertise_en_inspired_fitness_2.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'entertainer_1a': - return - - actor.addSkill('expertise_en_inspired_fitness_2') - - actor.addSkillMod('expertise_en_inspire_attrib_increase', 50) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'entertainer_1a': - return - - actor.removeSkill('expertise_en_inspired_fitness_2') - - actor.removeSkillMod('expertise_en_inspire_attrib_increase', 50) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_en_inspired_fitness_2") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_en_inspired_fitness_2") return diff --git a/scripts/expertise/expertise_en_inspired_fitness_3.py b/scripts/expertise/expertise_en_inspired_fitness_3.py index e5612aa8..91839161 100644 --- a/scripts/expertise/expertise_en_inspired_fitness_3.py +++ b/scripts/expertise/expertise_en_inspired_fitness_3.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'entertainer_1a': - return - - actor.addSkill('expertise_en_inspired_fitness_3') - - actor.addSkillMod('expertise_en_inspire_attrib_increase', 50) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'entertainer_1a': - return - - actor.removeSkill('expertise_en_inspired_fitness_3') - - actor.removeSkillMod('expertise_en_inspire_attrib_increase', 50) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_en_inspired_fitness_3") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_en_inspired_fitness_3") return diff --git a/scripts/expertise/expertise_en_inspired_fitness_4.py b/scripts/expertise/expertise_en_inspired_fitness_4.py index e3dd6795..649ae342 100644 --- a/scripts/expertise/expertise_en_inspired_fitness_4.py +++ b/scripts/expertise/expertise_en_inspired_fitness_4.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'entertainer_1a': - return - - actor.addSkill('expertise_en_inspired_fitness_4') - - actor.addSkillMod('expertise_en_inspire_attrib_increase', 50) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'entertainer_1a': - return - - actor.removeSkill('expertise_en_inspired_fitness_4') - - actor.removeSkillMod('expertise_en_inspire_attrib_increase', 50) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_en_inspired_fitness_4") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_en_inspired_fitness_4") return diff --git a/scripts/expertise/expertise_en_inspired_industry_1.py b/scripts/expertise/expertise_en_inspired_industry_1.py index 984745b2..f544cc87 100644 --- a/scripts/expertise/expertise_en_inspired_industry_1.py +++ b/scripts/expertise/expertise_en_inspired_industry_1.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'entertainer_1a': - return - - actor.addSkill('expertise_en_inspired_industry_1') - - actor.addSkillMod('expertise_en_inspire_trader_increase', 25) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'entertainer_1a': - return - - actor.removeSkill('expertise_en_inspired_industry_1') - - actor.removeSkillMod('expertise_en_inspire_trader_increase', 25) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_en_inspired_industry_1") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_en_inspired_industry_1") return diff --git a/scripts/expertise/expertise_en_inspired_industry_2.py b/scripts/expertise/expertise_en_inspired_industry_2.py index bf04fe23..4c0f93d3 100644 --- a/scripts/expertise/expertise_en_inspired_industry_2.py +++ b/scripts/expertise/expertise_en_inspired_industry_2.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'entertainer_1a': - return - - actor.addSkill('expertise_en_inspired_industry_2') - - actor.addSkillMod('expertise_en_inspire_trader_increase', 25) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'entertainer_1a': - return - - actor.removeSkill('expertise_en_inspired_industry_2') - - actor.removeSkillMod('expertise_en_inspire_trader_increase', 25) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_en_inspired_industry_2") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_en_inspired_industry_2") return diff --git a/scripts/expertise/expertise_en_inspired_industry_3.py b/scripts/expertise/expertise_en_inspired_industry_3.py index 7aa507cd..619e0efa 100644 --- a/scripts/expertise/expertise_en_inspired_industry_3.py +++ b/scripts/expertise/expertise_en_inspired_industry_3.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'entertainer_1a': - return - - actor.addSkill('expertise_en_inspired_industry_3') - - actor.addSkillMod('expertise_en_inspire_trader_increase', 25) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'entertainer_1a': - return - - actor.removeSkill('expertise_en_inspired_industry_3') - - actor.removeSkillMod('expertise_en_inspire_trader_increase', 25) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_en_inspired_industry_3") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_en_inspired_industry_3") return diff --git a/scripts/expertise/expertise_en_inspired_industry_4.py b/scripts/expertise/expertise_en_inspired_industry_4.py index eb6e23dc..8a99a16c 100644 --- a/scripts/expertise/expertise_en_inspired_industry_4.py +++ b/scripts/expertise/expertise_en_inspired_industry_4.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'entertainer_1a': - return - - actor.addSkill('expertise_en_inspired_industry_4') - - actor.addSkillMod('expertise_en_inspire_trader_increase', 25) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'entertainer_1a': - return - - actor.removeSkill('expertise_en_inspired_industry_4') - - actor.removeSkillMod('expertise_en_inspire_trader_increase', 25) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_en_inspired_industry_4") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_en_inspired_industry_4") return diff --git a/scripts/expertise/expertise_en_inspired_reactions_1.py b/scripts/expertise/expertise_en_inspired_reactions_1.py index 70e22c6b..90e56a58 100644 --- a/scripts/expertise/expertise_en_inspired_reactions_1.py +++ b/scripts/expertise/expertise_en_inspired_reactions_1.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'entertainer_1a': - return - - actor.addSkill('expertise_en_inspired_reactions_1') - - actor.addSkillMod('expertise_en_inspire_proc_chance_increase', 1) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'entertainer_1a': - return - - actor.removeSkill('expertise_en_inspired_reactions_1') - - actor.removeSkillMod('expertise_en_inspire_proc_chance_increase', 1) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_en_inspired_reactions_1") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_en_inspired_reactions_1") return diff --git a/scripts/expertise/expertise_en_inspired_reactions_2.py b/scripts/expertise/expertise_en_inspired_reactions_2.py index 8c43af78..9fb0f596 100644 --- a/scripts/expertise/expertise_en_inspired_reactions_2.py +++ b/scripts/expertise/expertise_en_inspired_reactions_2.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'entertainer_1a': - return - - actor.addSkill('expertise_en_inspired_reactions_2') - - actor.addSkillMod('expertise_en_inspire_proc_chance_increase', 1) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'entertainer_1a': - return - - actor.removeSkill('expertise_en_inspired_reactions_2') - - actor.removeSkillMod('expertise_en_inspire_proc_chance_increase', 1) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_en_inspired_reactions_2") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_en_inspired_reactions_2") return diff --git a/scripts/expertise/expertise_en_inspired_reactions_3.py b/scripts/expertise/expertise_en_inspired_reactions_3.py index 8cb9b345..0ae224f0 100644 --- a/scripts/expertise/expertise_en_inspired_reactions_3.py +++ b/scripts/expertise/expertise_en_inspired_reactions_3.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'entertainer_1a': - return - - actor.addSkill('expertise_en_inspired_reactions_3') - - actor.addSkillMod('expertise_en_inspire_proc_chance_increase', 1) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'entertainer_1a': - return - - actor.removeSkill('expertise_en_inspired_reactions_3') - - actor.removeSkillMod('expertise_en_inspire_proc_chance_increase', 1) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_en_inspired_reactions_3") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_en_inspired_reactions_3") return diff --git a/scripts/expertise/expertise_en_inspired_reactions_4.py b/scripts/expertise/expertise_en_inspired_reactions_4.py index fabf14bf..c3818211 100644 --- a/scripts/expertise/expertise_en_inspired_reactions_4.py +++ b/scripts/expertise/expertise_en_inspired_reactions_4.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'entertainer_1a': - return - - actor.addSkill('expertise_en_inspired_reactions_4') - - actor.addSkillMod('expertise_en_inspire_proc_chance_increase', 1) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'entertainer_1a': - return - - actor.removeSkill('expertise_en_inspired_reactions_4') - - actor.removeSkillMod('expertise_en_inspire_proc_chance_increase', 1) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_en_inspired_reactions_4") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_en_inspired_reactions_4") return diff --git a/scripts/expertise/expertise_en_inspired_resilience_1.py b/scripts/expertise/expertise_en_inspired_resilience_1.py index f758fba6..c62a7767 100644 --- a/scripts/expertise/expertise_en_inspired_resilience_1.py +++ b/scripts/expertise/expertise_en_inspired_resilience_1.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'entertainer_1a': - return - - actor.addSkill('expertise_en_inspired_resilience_1') - - actor.addSkillMod('expertise_en_inspire_resist_increase', 50) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'entertainer_1a': - return - - actor.removeSkill('expertise_en_inspired_resilience_1') - - actor.removeSkillMod('expertise_en_inspire_resist_increase', 50) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_en_inspired_resilience_1") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_en_inspired_resilience_1") return diff --git a/scripts/expertise/expertise_en_inspired_resilience_2.py b/scripts/expertise/expertise_en_inspired_resilience_2.py index 9bb7a05a..fe23ae90 100644 --- a/scripts/expertise/expertise_en_inspired_resilience_2.py +++ b/scripts/expertise/expertise_en_inspired_resilience_2.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'entertainer_1a': - return - - actor.addSkill('expertise_en_inspired_resilience_2') - - actor.addSkillMod('expertise_en_inspire_resist_increase', 50) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'entertainer_1a': - return - - actor.removeSkill('expertise_en_inspired_resilience_2') - - actor.removeSkillMod('expertise_en_inspire_resist_increase', 50) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_en_inspired_resilience_2") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_en_inspired_resilience_2") return diff --git a/scripts/expertise/expertise_en_inspired_resilience_3.py b/scripts/expertise/expertise_en_inspired_resilience_3.py index 9be4cfb8..1506e79b 100644 --- a/scripts/expertise/expertise_en_inspired_resilience_3.py +++ b/scripts/expertise/expertise_en_inspired_resilience_3.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'entertainer_1a': - return - - actor.addSkill('expertise_en_inspired_resilience_3') - - actor.addSkillMod('expertise_en_inspire_resist_increase', 50) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'entertainer_1a': - return - - actor.removeSkill('expertise_en_inspired_resilience_3') - - actor.removeSkillMod('expertise_en_inspire_resist_increase', 50) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_en_inspired_resilience_3") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_en_inspired_resilience_3") return diff --git a/scripts/expertise/expertise_en_inspired_resilience_4.py b/scripts/expertise/expertise_en_inspired_resilience_4.py index 964c5a3d..f6db50ad 100644 --- a/scripts/expertise/expertise_en_inspired_resilience_4.py +++ b/scripts/expertise/expertise_en_inspired_resilience_4.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'entertainer_1a': - return - - actor.addSkill('expertise_en_inspired_resilience_4') - - actor.addSkillMod('expertise_en_inspire_resist_increase', 50) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'entertainer_1a': - return - - actor.removeSkill('expertise_en_inspired_resilience_4') - - actor.removeSkillMod('expertise_en_inspire_resist_increase', 50) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_en_inspired_resilience_4") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_en_inspired_resilience_4") return diff --git a/scripts/expertise/expertise_en_inspired_warfare_1.py b/scripts/expertise/expertise_en_inspired_warfare_1.py index e912692f..f1f8049e 100644 --- a/scripts/expertise/expertise_en_inspired_warfare_1.py +++ b/scripts/expertise/expertise_en_inspired_warfare_1.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'entertainer_1a': - return - - actor.addSkill('expertise_en_inspired_warfare_1') - - actor.addSkillMod('expertise_en_combat_buff_increase', 1) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'entertainer_1a': - return - - actor.removeSkill('expertise_en_inspired_warfare_1') - - actor.removeSkillMod('expertise_en_combat_buff_increase', 1) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_en_inspired_warfare_1") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_en_inspired_warfare_1") return diff --git a/scripts/expertise/expertise_en_inspired_warfare_2.py b/scripts/expertise/expertise_en_inspired_warfare_2.py index 20007561..541c27f1 100644 --- a/scripts/expertise/expertise_en_inspired_warfare_2.py +++ b/scripts/expertise/expertise_en_inspired_warfare_2.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'entertainer_1a': - return - - actor.addSkill('expertise_en_inspired_warfare_2') - - actor.addSkillMod('expertise_en_combat_buff_increase', 1) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'entertainer_1a': - return - - actor.removeSkill('expertise_en_inspired_warfare_2') - - actor.removeSkillMod('expertise_en_combat_buff_increase', 1) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_en_inspired_warfare_2") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_en_inspired_warfare_2") return diff --git a/scripts/expertise/expertise_en_inspired_warfare_3.py b/scripts/expertise/expertise_en_inspired_warfare_3.py index 8c94697d..00781c96 100644 --- a/scripts/expertise/expertise_en_inspired_warfare_3.py +++ b/scripts/expertise/expertise_en_inspired_warfare_3.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'entertainer_1a': - return - - actor.addSkill('expertise_en_inspired_warfare_3') - - actor.addSkillMod('expertise_en_combat_buff_increase', 1) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'entertainer_1a': - return - - actor.removeSkill('expertise_en_inspired_warfare_3') - - actor.removeSkillMod('expertise_en_combat_buff_increase', 1) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_en_inspired_warfare_3") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_en_inspired_warfare_3") return diff --git a/scripts/expertise/expertise_en_inspired_warfare_4.py b/scripts/expertise/expertise_en_inspired_warfare_4.py index 9a235b2e..159615a1 100644 --- a/scripts/expertise/expertise_en_inspired_warfare_4.py +++ b/scripts/expertise/expertise_en_inspired_warfare_4.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'entertainer_1a': - return - - actor.addSkill('expertise_en_inspired_warfare_4') - - actor.addSkillMod('expertise_en_combat_buff_increase', 1) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'entertainer_1a': - return - - actor.removeSkill('expertise_en_inspired_warfare_4') - - actor.removeSkillMod('expertise_en_combat_buff_increase', 1) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_en_inspired_warfare_4") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_en_inspired_warfare_4") return diff --git a/scripts/expertise/expertise_en_intense_performer_1.py b/scripts/expertise/expertise_en_intense_performer_1.py index 545cb29d..4a064e58 100644 --- a/scripts/expertise/expertise_en_intense_performer_1.py +++ b/scripts/expertise/expertise_en_intense_performer_1.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'entertainer_1a': - return - - actor.addSkill('expertise_en_intense_performer_1') - - actor.addSkillMod('expertise_en_inspire_pulse_duration_increase', 1) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'entertainer_1a': - return - - actor.removeSkill('expertise_en_intense_performer_1') - - actor.removeSkillMod('expertise_en_inspire_pulse_duration_increase', 1) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_en_intense_performer_1") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_en_intense_performer_1") return diff --git a/scripts/expertise/expertise_en_intense_performer_2.py b/scripts/expertise/expertise_en_intense_performer_2.py index 5cab16af..6650519c 100644 --- a/scripts/expertise/expertise_en_intense_performer_2.py +++ b/scripts/expertise/expertise_en_intense_performer_2.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'entertainer_1a': - return - - actor.addSkill('expertise_en_intense_performer_2') - - actor.addSkillMod('expertise_en_inspire_pulse_duration_increase', 1) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'entertainer_1a': - return - - actor.removeSkill('expertise_en_intense_performer_2') - - actor.removeSkillMod('expertise_en_inspire_pulse_duration_increase', 1) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_en_intense_performer_2") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_en_intense_performer_2") return diff --git a/scripts/expertise/expertise_en_intense_performer_3.py b/scripts/expertise/expertise_en_intense_performer_3.py index 2906eb60..0c213a0d 100644 --- a/scripts/expertise/expertise_en_intense_performer_3.py +++ b/scripts/expertise/expertise_en_intense_performer_3.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'entertainer_1a': - return - - actor.addSkill('expertise_en_intense_performer_3') - - actor.addSkillMod('expertise_en_inspire_pulse_duration_increase', 1) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'entertainer_1a': - return - - actor.removeSkill('expertise_en_intense_performer_3') - - actor.removeSkillMod('expertise_en_inspire_pulse_duration_increase', 1) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_en_intense_performer_3") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_en_intense_performer_3") return diff --git a/scripts/expertise/expertise_en_intense_performer_4.py b/scripts/expertise/expertise_en_intense_performer_4.py index b1a35e36..82cf75e6 100644 --- a/scripts/expertise/expertise_en_intense_performer_4.py +++ b/scripts/expertise/expertise_en_intense_performer_4.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'entertainer_1a': - return - - actor.addSkill('expertise_en_intense_performer_4') - - actor.addSkillMod('expertise_en_inspire_pulse_duration_increase', 1) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'entertainer_1a': - return - - actor.removeSkill('expertise_en_intense_performer_4') - - actor.removeSkillMod('expertise_en_inspire_pulse_duration_increase', 1) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_en_intense_performer_4") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_en_intense_performer_4") return diff --git a/scripts/expertise/expertise_en_lasting_impression_1.py b/scripts/expertise/expertise_en_lasting_impression_1.py index 00d71f54..cd2f80fe 100644 --- a/scripts/expertise/expertise_en_lasting_impression_1.py +++ b/scripts/expertise/expertise_en_lasting_impression_1.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'entertainer_1a': - return - - actor.addSkill('expertise_en_lasting_impression_1') - - actor.addSkillMod('expertise_en_inspire_buff_duration_increase', 30) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'entertainer_1a': - return - - actor.removeSkill('expertise_en_lasting_impression_1') - - actor.removeSkillMod('expertise_en_inspire_buff_duration_increase', 30) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_en_lasting_impression_1") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_en_lasting_impression_1") return diff --git a/scripts/expertise/expertise_en_lasting_impression_2.py b/scripts/expertise/expertise_en_lasting_impression_2.py index af780c13..2c17365a 100644 --- a/scripts/expertise/expertise_en_lasting_impression_2.py +++ b/scripts/expertise/expertise_en_lasting_impression_2.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'entertainer_1a': - return - - actor.addSkill('expertise_en_lasting_impression_2') - - actor.addSkillMod('expertise_en_inspire_buff_duration_increase', 30) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'entertainer_1a': - return - - actor.removeSkill('expertise_en_lasting_impression_2') - - actor.removeSkillMod('expertise_en_inspire_buff_duration_increase', 30) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_en_lasting_impression_2") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_en_lasting_impression_2") return diff --git a/scripts/expertise/expertise_en_lasting_impression_3.py b/scripts/expertise/expertise_en_lasting_impression_3.py index 15e469e6..2012d616 100644 --- a/scripts/expertise/expertise_en_lasting_impression_3.py +++ b/scripts/expertise/expertise_en_lasting_impression_3.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'entertainer_1a': - return - - actor.addSkill('expertise_en_lasting_impression_3') - - actor.addSkillMod('expertise_en_inspire_buff_duration_increase', 30) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'entertainer_1a': - return - - actor.removeSkill('expertise_en_lasting_impression_3') - - actor.removeSkillMod('expertise_en_inspire_buff_duration_increase', 30) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_en_lasting_impression_3") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_en_lasting_impression_3") return diff --git a/scripts/expertise/expertise_en_lasting_impression_4.py b/scripts/expertise/expertise_en_lasting_impression_4.py index 6d5abf56..c90caf25 100644 --- a/scripts/expertise/expertise_en_lasting_impression_4.py +++ b/scripts/expertise/expertise_en_lasting_impression_4.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'entertainer_1a': - return - - actor.addSkill('expertise_en_lasting_impression_4') - - actor.addSkillMod('expertise_en_inspire_buff_duration_increase', 30) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'entertainer_1a': - return - - actor.removeSkill('expertise_en_lasting_impression_4') - - actor.removeSkillMod('expertise_en_inspire_buff_duration_increase', 30) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_en_lasting_impression_4") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_en_lasting_impression_4") return diff --git a/scripts/expertise/expertise_en_project_will_1.py b/scripts/expertise/expertise_en_project_will_1.py index 621d018b..c1a2a52a 100644 --- a/scripts/expertise/expertise_en_project_will_1.py +++ b/scripts/expertise/expertise_en_project_will_1.py @@ -1,48 +1,28 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'entertainer_1a': - return - - actor.addSkill('expertise_en_project_will_1') - - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'entertainer_1a': - return - - actor.removeSkill('expertise_en_project_will_1') - - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - actor.addAbility('en_project_will_0') - + if actor.getLevel() >= 18: + actor.addAbility("en_project_will_0") + if actor.getLevel() >= 30: + actor.addAbility("en_project_will_1") + if actor.getLevel() >= 42: + actor.addAbility("en_project_will_2") + if actor.getLevel() >= 54: + actor.addAbility("en_project_will_3") + if actor.getLevel() >= 66: + actor.addAbility("en_project_will_4") + if actor.getLevel() >= 78: + actor.addAbility("en_project_will_5") + if actor.getLevel() >= 90: + actor.addAbility("en_project_will_6") return def removeAbilities(core, actor, player): - - actor.removeAbility('en_project_will_0') - + actor.removeAbility("en_project_will_0") + actor.removeAbility("en_project_will_1") + actor.removeAbility("en_project_will_2") + actor.removeAbility("en_project_will_3") + actor.removeAbility("en_project_will_4") + actor.removeAbility("en_project_will_5") + actor.removeAbility("en_project_will_6") return diff --git a/scripts/expertise/expertise_en_rising_spirit_1.py b/scripts/expertise/expertise_en_rising_spirit_1.py index e6d8c87a..a2fda212 100644 --- a/scripts/expertise/expertise_en_rising_spirit_1.py +++ b/scripts/expertise/expertise_en_rising_spirit_1.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'entertainer_1a': - return - - actor.addSkill('expertise_en_rising_spirit_1') - - actor.addSkillMod('expertise_undiminished_critical_melee', 2) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'entertainer_1a': - return - - actor.removeSkill('expertise_en_rising_spirit_1') - - actor.removeSkillMod('expertise_undiminished_critical_melee', 2) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_en_rising_spirit_1") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_en_rising_spirit_1") return diff --git a/scripts/expertise/expertise_en_rising_spirit_2.py b/scripts/expertise/expertise_en_rising_spirit_2.py index 9071bce3..c7bafd45 100644 --- a/scripts/expertise/expertise_en_rising_spirit_2.py +++ b/scripts/expertise/expertise_en_rising_spirit_2.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'entertainer_1a': - return - - actor.addSkill('expertise_en_rising_spirit_2') - - actor.addSkillMod('expertise_undiminished_critical_melee', 2) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'entertainer_1a': - return - - actor.removeSkill('expertise_en_rising_spirit_2') - - actor.removeSkillMod('expertise_undiminished_critical_melee', 2) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_en_rising_spirit_2") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_en_rising_spirit_2") return diff --git a/scripts/expertise/expertise_en_rising_spirit_3.py b/scripts/expertise/expertise_en_rising_spirit_3.py index 80eb4c9d..05f1324e 100644 --- a/scripts/expertise/expertise_en_rising_spirit_3.py +++ b/scripts/expertise/expertise_en_rising_spirit_3.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'entertainer_1a': - return - - actor.addSkill('expertise_en_rising_spirit_3') - - actor.addSkillMod('expertise_undiminished_critical_melee', 2) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'entertainer_1a': - return - - actor.removeSkill('expertise_en_rising_spirit_3') - - actor.removeSkillMod('expertise_undiminished_critical_melee', 2) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_en_rising_spirit_3") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_en_rising_spirit_3") return diff --git a/scripts/expertise/expertise_en_rising_spirit_4.py b/scripts/expertise/expertise_en_rising_spirit_4.py index 8151c478..3deb8a46 100644 --- a/scripts/expertise/expertise_en_rising_spirit_4.py +++ b/scripts/expertise/expertise_en_rising_spirit_4.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'entertainer_1a': - return - - actor.addSkill('expertise_en_rising_spirit_4') - - actor.addSkillMod('expertise_undiminished_critical_melee', 2) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'entertainer_1a': - return - - actor.removeSkill('expertise_en_rising_spirit_4') - - actor.removeSkillMod('expertise_undiminished_critical_melee', 2) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_en_rising_spirit_4") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_en_rising_spirit_4") return diff --git a/scripts/expertise/expertise_en_second_chance_1.py b/scripts/expertise/expertise_en_second_chance_1.py index b8a8fd5b..ae7e08ae 100644 --- a/scripts/expertise/expertise_en_second_chance_1.py +++ b/scripts/expertise/expertise_en_second_chance_1.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'entertainer_1a': - return - - actor.addSkill('expertise_en_second_chance_1') - - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'entertainer_1a': - return - - actor.removeSkill('expertise_en_second_chance_1') - - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - actor.addAbility('en_second_chance_buff_package') - + actor.addAbility("en_second_chance_buff_package") return def removeAbilities(core, actor, player): - - actor.removeAbility('en_second_chance_buff_package') - + actor.removeAbility("en_second_chance_buff_package") return diff --git a/scripts/expertise/expertise_en_show_stopper_1.py b/scripts/expertise/expertise_en_show_stopper_1.py index e462f413..bb347a8e 100644 --- a/scripts/expertise/expertise_en_show_stopper_1.py +++ b/scripts/expertise/expertise_en_show_stopper_1.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'entertainer_1a': - return - - actor.addSkill('expertise_en_show_stopper_1') - - actor.addSkillMod('expertise_critical_hit_reduction', 2) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'entertainer_1a': - return - - actor.removeSkill('expertise_en_show_stopper_1') - - actor.removeSkillMod('expertise_critical_hit_reduction', 2) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_en_show_stopper_1") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_en_show_stopper_1") return diff --git a/scripts/expertise/expertise_en_show_stopper_2.py b/scripts/expertise/expertise_en_show_stopper_2.py index 91828c58..99493ec7 100644 --- a/scripts/expertise/expertise_en_show_stopper_2.py +++ b/scripts/expertise/expertise_en_show_stopper_2.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'entertainer_1a': - return - - actor.addSkill('expertise_en_show_stopper_2') - - actor.addSkillMod('expertise_critical_hit_reduction', 2) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'entertainer_1a': - return - - actor.removeSkill('expertise_en_show_stopper_2') - - actor.removeSkillMod('expertise_critical_hit_reduction', 2) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_en_show_stopper_2") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_en_show_stopper_2") return diff --git a/scripts/expertise/expertise_en_show_stopper_3.py b/scripts/expertise/expertise_en_show_stopper_3.py index ea0d428b..4f70ff63 100644 --- a/scripts/expertise/expertise_en_show_stopper_3.py +++ b/scripts/expertise/expertise_en_show_stopper_3.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'entertainer_1a': - return - - actor.addSkill('expertise_en_show_stopper_3') - - actor.addSkillMod('expertise_critical_hit_reduction', 2) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'entertainer_1a': - return - - actor.removeSkill('expertise_en_show_stopper_3') - - actor.removeSkillMod('expertise_critical_hit_reduction', 2) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_en_show_stopper_3") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_en_show_stopper_3") return diff --git a/scripts/expertise/expertise_en_spiral_kick_1.py b/scripts/expertise/expertise_en_spiral_kick_1.py index f58c1624..f369c1c0 100644 --- a/scripts/expertise/expertise_en_spiral_kick_1.py +++ b/scripts/expertise/expertise_en_spiral_kick_1.py @@ -1,48 +1,22 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'entertainer_1a': - return - - actor.addSkill('expertise_en_spiral_kick_1') - - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'entertainer_1a': - return - - actor.removeSkill('expertise_en_spiral_kick_1') - - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - actor.addAbility('en_spiral_kick_0') - + if actor.getLevel() >= 34: + actor.addAbility("en_spiral_kick_0") + if actor.getLevel() >= 48: + actor.addAbility("en_spiral_kick_1") + if actor.getLevel() >= 62: + actor.addAbility("en_spiral_kick_2") + if actor.getLevel() >= 76: + actor.addAbility("en_spiral_kick_3") + if actor.getLevel() >= 90: + actor.addAbility("en_spiral_kick_4") return def removeAbilities(core, actor, player): - - actor.removeAbility('en_spiral_kick_0') - + actor.removeAbility("en_spiral_kick_0") + actor.removeAbility("en_spiral_kick_1") + actor.removeAbility("en_spiral_kick_2") + actor.removeAbility("en_spiral_kick_3") + actor.removeAbility("en_spiral_kick_4") return diff --git a/scripts/expertise/expertise_en_sprint_1.py b/scripts/expertise/expertise_en_sprint_1.py index c1c59fec..130650ef 100644 --- a/scripts/expertise/expertise_en_sprint_1.py +++ b/scripts/expertise/expertise_en_sprint_1.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'entertainer_1a': - return - - actor.addSkill('expertise_en_sprint_1') - - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'entertainer_1a': - return - - actor.removeSkill('expertise_en_sprint_1') - - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - actor.addAbility('en_sprint_1') - + actor.addAbility("en_sprint_1") return def removeAbilities(core, actor, player): - - actor.removeAbility('en_sprint_1') - + actor.removeAbility("en_sprint_1") return diff --git a/scripts/expertise/expertise_en_stage_presence_1.py b/scripts/expertise/expertise_en_stage_presence_1.py index 03d43717..073086aa 100644 --- a/scripts/expertise/expertise_en_stage_presence_1.py +++ b/scripts/expertise/expertise_en_stage_presence_1.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'entertainer_1a': - return - - actor.addSkill('expertise_en_stage_presence_1') - - actor.addSkillMod('expertise_dodge', 2) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'entertainer_1a': - return - - actor.removeSkill('expertise_en_stage_presence_1') - - actor.removeSkillMod('expertise_dodge', 2) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_en_stage_presence_1") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_en_stage_presence_1") return diff --git a/scripts/expertise/expertise_en_stage_presence_2.py b/scripts/expertise/expertise_en_stage_presence_2.py index 08d9c491..95a28985 100644 --- a/scripts/expertise/expertise_en_stage_presence_2.py +++ b/scripts/expertise/expertise_en_stage_presence_2.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'entertainer_1a': - return - - actor.addSkill('expertise_en_stage_presence_2') - - actor.addSkillMod('expertise_dodge', 2) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'entertainer_1a': - return - - actor.removeSkill('expertise_en_stage_presence_2') - - actor.removeSkillMod('expertise_dodge', 2) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_en_stage_presence_2") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_en_stage_presence_2") return diff --git a/scripts/expertise/expertise_en_stage_presence_3.py b/scripts/expertise/expertise_en_stage_presence_3.py index 6761e10e..827f44ea 100644 --- a/scripts/expertise/expertise_en_stage_presence_3.py +++ b/scripts/expertise/expertise_en_stage_presence_3.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'entertainer_1a': - return - - actor.addSkill('expertise_en_stage_presence_3') - - actor.addSkillMod('expertise_dodge', 2) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'entertainer_1a': - return - - actor.removeSkill('expertise_en_stage_presence_3') - - actor.removeSkillMod('expertise_dodge', 2) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_en_stage_presence_3") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_en_stage_presence_3") return diff --git a/scripts/expertise/expertise_en_strike_1.py b/scripts/expertise/expertise_en_strike_1.py index c254bca2..6e76a074 100644 --- a/scripts/expertise/expertise_en_strike_1.py +++ b/scripts/expertise/expertise_en_strike_1.py @@ -1,48 +1,28 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'entertainer_1a': - return - - actor.addSkill('expertise_en_strike_1') - - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'entertainer_1a': - return - - actor.removeSkill('expertise_en_strike_1') - - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - actor.addAbility('en_strike_0') - + if actor.getLevel() >= 10: + actor.addAbility("en_strike_0") + if actor.getLevel() >= 22: + actor.addAbility("en_strike_1") + if actor.getLevel() >= 34: + actor.addAbility("en_strike_2") + if actor.getLevel() >= 46: + actor.addAbility("en_strike_3") + if actor.getLevel() >= 58: + actor.addAbility("en_strike_4") + if actor.getLevel() >= 70: + actor.addAbility("en_strike_5") + if actor.getLevel() >= 82: + actor.addAbility("en_strike_6") return def removeAbilities(core, actor, player): - - actor.removeAbility('en_strike_0') - + actor.removeAbility("en_strike_0") + actor.removeAbility("en_strike_1") + actor.removeAbility("en_strike_2") + actor.removeAbility("en_strike_3") + actor.removeAbility("en_strike_4") + actor.removeAbility("en_strike_5") + actor.removeAbility("en_strike_6") return diff --git a/scripts/expertise/expertise_en_sweeping_pirouette_1.py b/scripts/expertise/expertise_en_sweeping_pirouette_1.py index 34fb24f9..906f27d2 100644 --- a/scripts/expertise/expertise_en_sweeping_pirouette_1.py +++ b/scripts/expertise/expertise_en_sweeping_pirouette_1.py @@ -1,48 +1,20 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'entertainer_1a': - return - - actor.addSkill('expertise_en_sweeping_pirouette_1') - - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'entertainer_1a': - return - - actor.removeSkill('expertise_en_sweeping_pirouette_1') - - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - actor.addAbility('en_sweeping_pirouette_0') - + if actor.getLevel() >= 26: + actor.addAbility("en_sweeping_pirouette_0") + if actor.getLevel() >= 38: + actor.addAbility("en_sweeping_pirouette_1") + if actor.getLevel() >= 50: + actor.addAbility("en_sweeping_pirouette_2") + if actor.getLevel() >= 62: + actor.addAbility("en_sweeping_pirouette_3") + if actor.getLevel() >= 74: + actor.addAbility("en_sweeping_pirouette_4") + if actor.getLevel() >= 86: + actor.addAbility("en_sweeping_pirouette_5") return def removeAbilities(core, actor, player): - - actor.removeAbility('en_sweeping_pirouette_0') - + actor.removeAbility("en_sweeping_pirouette_0") return diff --git a/scripts/expertise/expertise_en_thought_as_action_1.py b/scripts/expertise/expertise_en_thought_as_action_1.py index 773cdea4..8d109903 100644 --- a/scripts/expertise/expertise_en_thought_as_action_1.py +++ b/scripts/expertise/expertise_en_thought_as_action_1.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'entertainer_1a': - return - - actor.addSkill('expertise_en_thought_as_action_1') - - actor.addSkillMod('expertise_innate_protection_all', 250) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'entertainer_1a': - return - - actor.removeSkill('expertise_en_thought_as_action_1') - - actor.removeSkillMod('expertise_innate_protection_all', 250) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_en_thought_as_action_1") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_en_thought_as_action_1") return diff --git a/scripts/expertise/expertise_en_thought_as_action_2.py b/scripts/expertise/expertise_en_thought_as_action_2.py index a22d2466..bd397576 100644 --- a/scripts/expertise/expertise_en_thought_as_action_2.py +++ b/scripts/expertise/expertise_en_thought_as_action_2.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'entertainer_1a': - return - - actor.addSkill('expertise_en_thought_as_action_2') - - actor.addSkillMod('expertise_innate_protection_all', 250) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'entertainer_1a': - return - - actor.removeSkill('expertise_en_thought_as_action_2') - - actor.removeSkillMod('expertise_innate_protection_all', 250) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_en_thought_as_action_2") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_en_thought_as_action_2") return diff --git a/scripts/expertise/expertise_en_thought_as_action_3.py b/scripts/expertise/expertise_en_thought_as_action_3.py index 3f0d6007..abbee833 100644 --- a/scripts/expertise/expertise_en_thought_as_action_3.py +++ b/scripts/expertise/expertise_en_thought_as_action_3.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'entertainer_1a': - return - - actor.addSkill('expertise_en_thought_as_action_3') - - actor.addSkillMod('expertise_innate_protection_all', 250) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'entertainer_1a': - return - - actor.removeSkill('expertise_en_thought_as_action_3') - - actor.removeSkillMod('expertise_innate_protection_all', 250) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_en_thought_as_action_3") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_en_thought_as_action_3") return diff --git a/scripts/expertise/expertise_en_thought_as_action_4.py b/scripts/expertise/expertise_en_thought_as_action_4.py index 3df60d96..76958de5 100644 --- a/scripts/expertise/expertise_en_thought_as_action_4.py +++ b/scripts/expertise/expertise_en_thought_as_action_4.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'entertainer_1a': - return - - actor.addSkill('expertise_en_thought_as_action_4') - - actor.addSkillMod('expertise_innate_protection_all', 250) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'entertainer_1a': - return - - actor.removeSkill('expertise_en_thought_as_action_4') - - actor.removeSkillMod('expertise_innate_protection_all', 250) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_en_thought_as_action_4") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_en_thought_as_action_4") return diff --git a/scripts/expertise/expertise_en_thrill_1.py b/scripts/expertise/expertise_en_thrill_1.py index 7db5db05..82c68807 100644 --- a/scripts/expertise/expertise_en_thrill_1.py +++ b/scripts/expertise/expertise_en_thrill_1.py @@ -1,48 +1,16 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'entertainer_1a': - return - - actor.addSkill('expertise_en_thrill_1') - - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'entertainer_1a': - return - - actor.removeSkill('expertise_en_thrill_1') - - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - actor.addAbility('en_thrill') - + if actor.getLevel() >= 10: + actor.addAbility("en_thrill") + if actor.getLevel() >= 34: + actor.addAbility("en_thrill_1") + if actor.getLevel() >= 62: + actor.addAbility("en_thrill_2") return def removeAbilities(core, actor, player): - - actor.removeAbility('en_thrill') - + actor.removeAbility("en_thrill") + actor.removeAbility("en_thrill_1") + actor.removeAbility("en_thrill_2") return diff --git a/scripts/expertise/expertise_en_to_the_hilt_1.py b/scripts/expertise/expertise_en_to_the_hilt_1.py index 612021f5..18db5e7d 100644 --- a/scripts/expertise/expertise_en_to_the_hilt_1.py +++ b/scripts/expertise/expertise_en_to_the_hilt_1.py @@ -1,50 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'entertainer_1a': - return - - actor.addSkill('expertise_en_to_the_hilt_1') - - actor.addSkillMod('expertise_buff_duration_line_en_debuff_thrill', 2) - actor.addSkillMod('expertise_en_debuff_thrill_increase', 2) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'entertainer_1a': - return - - actor.removeSkill('expertise_en_to_the_hilt_1') - - actor.removeSkillMod('expertise_buff_duration_line_en_debuff_thrill', 2) - actor.removeSkillMod('expertise_en_debuff_thrill_increase', 2) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_en_to_the_hilt_1") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_en_to_the_hilt_1") return diff --git a/scripts/expertise/expertise_en_to_the_hilt_2.py b/scripts/expertise/expertise_en_to_the_hilt_2.py index 1e86749d..5546a211 100644 --- a/scripts/expertise/expertise_en_to_the_hilt_2.py +++ b/scripts/expertise/expertise_en_to_the_hilt_2.py @@ -1,50 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'entertainer_1a': - return - - actor.addSkill('expertise_en_to_the_hilt_2') - - actor.addSkillMod('expertise_buff_duration_line_en_debuff_thrill', 2) - actor.addSkillMod('expertise_en_debuff_thrill_increase', 2) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'entertainer_1a': - return - - actor.removeSkill('expertise_en_to_the_hilt_2') - - actor.removeSkillMod('expertise_buff_duration_line_en_debuff_thrill', 2) - actor.removeSkillMod('expertise_en_debuff_thrill_increase', 2) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_en_to_the_hilt_2") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_en_to_the_hilt_2") return diff --git a/scripts/expertise/expertise_en_unhealthy_fixation_1.py b/scripts/expertise/expertise_en_unhealthy_fixation_1.py index 9b22e915..2e2a2f30 100644 --- a/scripts/expertise/expertise_en_unhealthy_fixation_1.py +++ b/scripts/expertise/expertise_en_unhealthy_fixation_1.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'entertainer_1a': - return - - actor.addSkill('expertise_en_unhealthy_fixation_1') - - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'entertainer_1a': - return - - actor.removeSkill('expertise_en_unhealthy_fixation_1') - - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - actor.addAbility('en_unhealthy_fixation') - + actor.addAbility("en_unhealthy_fixation") return def removeAbilities(core, actor, player): - - actor.removeAbility('en_unhealthy_fixation') - + actor.removeAbility("en_unhealthy_fixation") return diff --git a/scripts/expertise/expertise_en_uprising_1.py b/scripts/expertise/expertise_en_uprising_1.py index efe9a7dd..dc55de01 100644 --- a/scripts/expertise/expertise_en_uprising_1.py +++ b/scripts/expertise/expertise_en_uprising_1.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'entertainer_1a': - return - - actor.addSkill('expertise_en_uprising_1') - - actor.addSkillMod('expertise_critical_line_en_spiral_kick', 5) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'entertainer_1a': - return - - actor.removeSkill('expertise_en_uprising_1') - - actor.removeSkillMod('expertise_critical_line_en_spiral_kick', 5) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_en_uprising_1") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_en_uprising_1") return diff --git a/scripts/expertise/expertise_en_uprising_2.py b/scripts/expertise/expertise_en_uprising_2.py index d05c6024..5540f85b 100644 --- a/scripts/expertise/expertise_en_uprising_2.py +++ b/scripts/expertise/expertise_en_uprising_2.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'entertainer_1a': - return - - actor.addSkill('expertise_en_uprising_2') - - actor.addSkillMod('expertise_critical_line_en_spiral_kick', 5) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'entertainer_1a': - return - - actor.removeSkill('expertise_en_uprising_2') - - actor.removeSkillMod('expertise_critical_line_en_spiral_kick', 5) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_en_uprising_2") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_en_uprising_2") return diff --git a/scripts/expertise/expertise_en_void_dance_1.py b/scripts/expertise/expertise_en_void_dance_1.py index 578b08a5..7127a2c4 100644 --- a/scripts/expertise/expertise_en_void_dance_1.py +++ b/scripts/expertise/expertise_en_void_dance_1.py @@ -1,48 +1,16 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'entertainer_1a': - return - - actor.addSkill('expertise_en_void_dance_1') - - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'entertainer_1a': - return - - actor.removeSkill('expertise_en_void_dance_1') - - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - actor.addAbility('en_void_dance') - + if actor.getLevel() >= 10: + actor.addAbility("en_void_dance_1") + if actor.getLevel() >= 34: + actor.addAbility("en_void_dance_2") + if actor.getLevel() >= 62: + actor.addAbility("en_void_dance_3") return def removeAbilities(core, actor, player): - - actor.removeAbility('en_void_dance') - + actor.removeAbility("en_void_dance_1") + actor.removeAbility("en_void_dance_2") + actor.removeAbility("en_void_dance_3") return diff --git a/scripts/expertise/expertise_engineering_artisan_advanced_theory_1.py b/scripts/expertise/expertise_engineering_artisan_advanced_theory_1.py index aaf17d68..bd6b7454 100644 --- a/scripts/expertise/expertise_engineering_artisan_advanced_theory_1.py +++ b/scripts/expertise/expertise_engineering_artisan_advanced_theory_1.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'trader_eng_1a': - return - - actor.addSkill('expertise_engineering_artisan_advanced_theory_1') - - actor.addSkillMod('general_experimentation', 10) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'trader_eng_1a': - return - - actor.removeSkill('expertise_engineering_artisan_advanced_theory_1') - - actor.removeSkillMod('general_experimentation', 10) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_engineering_artisan_advanced_theory_1") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_engineering_artisan_advanced_theory_1") return diff --git a/scripts/expertise/expertise_engineering_artisan_dexterity_1.py b/scripts/expertise/expertise_engineering_artisan_dexterity_1.py index 1f4d7860..3e103c16 100644 --- a/scripts/expertise/expertise_engineering_artisan_dexterity_1.py +++ b/scripts/expertise/expertise_engineering_artisan_dexterity_1.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'trader_eng_1a': - return - - actor.addSkill('expertise_engineering_artisan_dexterity_1') - - actor.addSkillMod('general_assembly', 5) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'trader_eng_1a': - return - - actor.removeSkill('expertise_engineering_artisan_dexterity_1') - - actor.removeSkillMod('general_assembly', 5) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_engineering_artisan_dexterity_1") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_engineering_artisan_dexterity_1") return diff --git a/scripts/expertise/expertise_engineering_artisan_dexterity_2.py b/scripts/expertise/expertise_engineering_artisan_dexterity_2.py index 28cff05e..50edc60b 100644 --- a/scripts/expertise/expertise_engineering_artisan_dexterity_2.py +++ b/scripts/expertise/expertise_engineering_artisan_dexterity_2.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'trader_eng_1a': - return - - actor.addSkill('expertise_engineering_artisan_dexterity_2') - - actor.addSkillMod('general_assembly', 5) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'trader_eng_1a': - return - - actor.removeSkill('expertise_engineering_artisan_dexterity_2') - - actor.removeSkillMod('general_assembly', 5) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_engineering_artisan_dexterity_2") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_engineering_artisan_dexterity_2") return diff --git a/scripts/expertise/expertise_engineering_artisan_dexterity_3.py b/scripts/expertise/expertise_engineering_artisan_dexterity_3.py index 11e3b091..0cd8c37e 100644 --- a/scripts/expertise/expertise_engineering_artisan_dexterity_3.py +++ b/scripts/expertise/expertise_engineering_artisan_dexterity_3.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'trader_eng_1a': - return - - actor.addSkill('expertise_engineering_artisan_dexterity_3') - - actor.addSkillMod('general_assembly', 5) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'trader_eng_1a': - return - - actor.removeSkill('expertise_engineering_artisan_dexterity_3') - - actor.removeSkillMod('general_assembly', 5) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_engineering_artisan_dexterity_3") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_engineering_artisan_dexterity_3") return diff --git a/scripts/expertise/expertise_engineering_artisan_dexterity_4.py b/scripts/expertise/expertise_engineering_artisan_dexterity_4.py index ae8bab3f..34c64977 100644 --- a/scripts/expertise/expertise_engineering_artisan_dexterity_4.py +++ b/scripts/expertise/expertise_engineering_artisan_dexterity_4.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'trader_eng_1a': - return - - actor.addSkill('expertise_engineering_artisan_dexterity_4') - - actor.addSkillMod('general_assembly', 5) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'trader_eng_1a': - return - - actor.removeSkill('expertise_engineering_artisan_dexterity_4') - - actor.removeSkillMod('general_assembly', 5) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_engineering_artisan_dexterity_4") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_engineering_artisan_dexterity_4") return diff --git a/scripts/expertise/expertise_engineering_artisan_hypothesis_1.py b/scripts/expertise/expertise_engineering_artisan_hypothesis_1.py index eb7b0aa0..c2daa093 100644 --- a/scripts/expertise/expertise_engineering_artisan_hypothesis_1.py +++ b/scripts/expertise/expertise_engineering_artisan_hypothesis_1.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'trader_eng_1a': - return - - actor.addSkill('expertise_engineering_artisan_hypothesis_1') - - actor.addSkillMod('expertise_experimentation_increase_artisan', 3) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'trader_eng_1a': - return - - actor.removeSkill('expertise_engineering_artisan_hypothesis_1') - - actor.removeSkillMod('expertise_experimentation_increase_artisan', 3) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_engineering_artisan_hypothesis_1") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_engineering_artisan_hypothesis_1") return diff --git a/scripts/expertise/expertise_engineering_artisan_hypothesis_2.py b/scripts/expertise/expertise_engineering_artisan_hypothesis_2.py index 14e79abd..96592a1b 100644 --- a/scripts/expertise/expertise_engineering_artisan_hypothesis_2.py +++ b/scripts/expertise/expertise_engineering_artisan_hypothesis_2.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'trader_eng_1a': - return - - actor.addSkill('expertise_engineering_artisan_hypothesis_2') - - actor.addSkillMod('expertise_experimentation_increase_artisan', 3) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'trader_eng_1a': - return - - actor.removeSkill('expertise_engineering_artisan_hypothesis_2') - - actor.removeSkillMod('expertise_experimentation_increase_artisan', 3) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_engineering_artisan_hypothesis_2") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_engineering_artisan_hypothesis_2") return diff --git a/scripts/expertise/expertise_engineering_artisan_hypothesis_3.py b/scripts/expertise/expertise_engineering_artisan_hypothesis_3.py index 29b90722..e4f6a8b1 100644 --- a/scripts/expertise/expertise_engineering_artisan_hypothesis_3.py +++ b/scripts/expertise/expertise_engineering_artisan_hypothesis_3.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'trader_eng_1a': - return - - actor.addSkill('expertise_engineering_artisan_hypothesis_3') - - actor.addSkillMod('expertise_experimentation_increase_artisan', 3) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'trader_eng_1a': - return - - actor.removeSkill('expertise_engineering_artisan_hypothesis_3') - - actor.removeSkillMod('expertise_experimentation_increase_artisan', 3) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_engineering_artisan_hypothesis_3") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_engineering_artisan_hypothesis_3") return diff --git a/scripts/expertise/expertise_engineering_artisan_hypothesis_4.py b/scripts/expertise/expertise_engineering_artisan_hypothesis_4.py index 1ffb1f9a..95f93fbd 100644 --- a/scripts/expertise/expertise_engineering_artisan_hypothesis_4.py +++ b/scripts/expertise/expertise_engineering_artisan_hypothesis_4.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'trader_eng_1a': - return - - actor.addSkill('expertise_engineering_artisan_hypothesis_4') - - actor.addSkillMod('expertise_experimentation_increase_artisan', 3) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'trader_eng_1a': - return - - actor.removeSkill('expertise_engineering_artisan_hypothesis_4') - - actor.removeSkillMod('expertise_experimentation_increase_artisan', 3) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_engineering_artisan_hypothesis_4") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_engineering_artisan_hypothesis_4") return diff --git a/scripts/expertise/expertise_engineering_cybernetic_advanced_theory_1.py b/scripts/expertise/expertise_engineering_cybernetic_advanced_theory_1.py index 2a99c79f..e7cf240d 100644 --- a/scripts/expertise/expertise_engineering_cybernetic_advanced_theory_1.py +++ b/scripts/expertise/expertise_engineering_cybernetic_advanced_theory_1.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'trader_eng_1a': - return - - actor.addSkill('expertise_engineering_cybernetic_advanced_theory_1') - - actor.addSkillMod('cybernetic_experimentation', 10) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'trader_eng_1a': - return - - actor.removeSkill('expertise_engineering_cybernetic_advanced_theory_1') - - actor.removeSkillMod('cybernetic_experimentation', 10) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_engineering_cybernetic_advanced_theory_1") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_engineering_cybernetic_advanced_theory_1") return diff --git a/scripts/expertise/expertise_engineering_cybernetic_hypothesis_1.py b/scripts/expertise/expertise_engineering_cybernetic_hypothesis_1.py index a23e203d..bbf9682e 100644 --- a/scripts/expertise/expertise_engineering_cybernetic_hypothesis_1.py +++ b/scripts/expertise/expertise_engineering_cybernetic_hypothesis_1.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'trader_eng_1a': - return - - actor.addSkill('expertise_engineering_cybernetic_hypothesis_1') - - actor.addSkillMod('expertise_experimentation_increase_cybernetic', 3) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'trader_eng_1a': - return - - actor.removeSkill('expertise_engineering_cybernetic_hypothesis_1') - - actor.removeSkillMod('expertise_experimentation_increase_cybernetic', 3) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_engineering_cybernetic_hypothesis_1") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_engineering_cybernetic_hypothesis_1") return diff --git a/scripts/expertise/expertise_engineering_cybernetic_hypothesis_2.py b/scripts/expertise/expertise_engineering_cybernetic_hypothesis_2.py index 017890cd..6c7d6b20 100644 --- a/scripts/expertise/expertise_engineering_cybernetic_hypothesis_2.py +++ b/scripts/expertise/expertise_engineering_cybernetic_hypothesis_2.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'trader_eng_1a': - return - - actor.addSkill('expertise_engineering_cybernetic_hypothesis_2') - - actor.addSkillMod('expertise_experimentation_increase_cybernetic', 3) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'trader_eng_1a': - return - - actor.removeSkill('expertise_engineering_cybernetic_hypothesis_2') - - actor.removeSkillMod('expertise_experimentation_increase_cybernetic', 3) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_engineering_cybernetic_hypothesis_2") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_engineering_cybernetic_hypothesis_2") return diff --git a/scripts/expertise/expertise_engineering_cybernetic_hypothesis_3.py b/scripts/expertise/expertise_engineering_cybernetic_hypothesis_3.py index adef4cc9..fc963038 100644 --- a/scripts/expertise/expertise_engineering_cybernetic_hypothesis_3.py +++ b/scripts/expertise/expertise_engineering_cybernetic_hypothesis_3.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'trader_eng_1a': - return - - actor.addSkill('expertise_engineering_cybernetic_hypothesis_3') - - actor.addSkillMod('expertise_experimentation_increase_cybernetic', 3) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'trader_eng_1a': - return - - actor.removeSkill('expertise_engineering_cybernetic_hypothesis_3') - - actor.removeSkillMod('expertise_experimentation_increase_cybernetic', 3) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_engineering_cybernetic_hypothesis_3") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_engineering_cybernetic_hypothesis_3") return diff --git a/scripts/expertise/expertise_engineering_cybernetic_hypothesis_4.py b/scripts/expertise/expertise_engineering_cybernetic_hypothesis_4.py index 85aab1da..4f15a6d8 100644 --- a/scripts/expertise/expertise_engineering_cybernetic_hypothesis_4.py +++ b/scripts/expertise/expertise_engineering_cybernetic_hypothesis_4.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'trader_eng_1a': - return - - actor.addSkill('expertise_engineering_cybernetic_hypothesis_4') - - actor.addSkillMod('expertise_experimentation_increase_cybernetic', 3) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'trader_eng_1a': - return - - actor.removeSkill('expertise_engineering_cybernetic_hypothesis_4') - - actor.removeSkillMod('expertise_experimentation_increase_cybernetic', 3) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_engineering_cybernetic_hypothesis_4") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_engineering_cybernetic_hypothesis_4") return diff --git a/scripts/expertise/expertise_engineering_cybernetic_negative_effects_reduction_1.py b/scripts/expertise/expertise_engineering_cybernetic_negative_effects_reduction_1.py index 1a6c2b4e..658dd7df 100644 --- a/scripts/expertise/expertise_engineering_cybernetic_negative_effects_reduction_1.py +++ b/scripts/expertise/expertise_engineering_cybernetic_negative_effects_reduction_1.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'trader_eng_1a': - return - - actor.addSkill('expertise_engineering_cybernetic_negative_effects_reduction_1') - - actor.addSkillMod('expertise_cybernetic_negative_effects_reduction', 5) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'trader_eng_1a': - return - - actor.removeSkill('expertise_engineering_cybernetic_negative_effects_reduction_1') - - actor.removeSkillMod('expertise_cybernetic_negative_effects_reduction', 5) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_engineering_cybernetic_negative_effects_reduction_1") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_engineering_cybernetic_negative_effects_reduction_1") return diff --git a/scripts/expertise/expertise_engineering_cybernetic_negative_effects_reduction_2.py b/scripts/expertise/expertise_engineering_cybernetic_negative_effects_reduction_2.py index 52dfd22b..d04160b0 100644 --- a/scripts/expertise/expertise_engineering_cybernetic_negative_effects_reduction_2.py +++ b/scripts/expertise/expertise_engineering_cybernetic_negative_effects_reduction_2.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'trader_eng_1a': - return - - actor.addSkill('expertise_engineering_cybernetic_negative_effects_reduction_2') - - actor.addSkillMod('expertise_cybernetic_negative_effects_reduction', 5) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'trader_eng_1a': - return - - actor.removeSkill('expertise_engineering_cybernetic_negative_effects_reduction_2') - - actor.removeSkillMod('expertise_cybernetic_negative_effects_reduction', 5) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_engineering_cybernetic_negative_effects_reduction_2") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_engineering_cybernetic_negative_effects_reduction_2") return diff --git a/scripts/expertise/expertise_engineering_cybernetic_negative_effects_reduction_3.py b/scripts/expertise/expertise_engineering_cybernetic_negative_effects_reduction_3.py index eb2c7532..9c98e65b 100644 --- a/scripts/expertise/expertise_engineering_cybernetic_negative_effects_reduction_3.py +++ b/scripts/expertise/expertise_engineering_cybernetic_negative_effects_reduction_3.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'trader_eng_1a': - return - - actor.addSkill('expertise_engineering_cybernetic_negative_effects_reduction_3') - - actor.addSkillMod('expertise_cybernetic_negative_effects_reduction', 5) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'trader_eng_1a': - return - - actor.removeSkill('expertise_engineering_cybernetic_negative_effects_reduction_3') - - actor.removeSkillMod('expertise_cybernetic_negative_effects_reduction', 5) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_engineering_cybernetic_negative_effects_reduction_3") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_engineering_cybernetic_negative_effects_reduction_3") return diff --git a/scripts/expertise/expertise_engineering_cybernetic_negative_effects_reduction_4.py b/scripts/expertise/expertise_engineering_cybernetic_negative_effects_reduction_4.py index da6d8d56..93bd0c81 100644 --- a/scripts/expertise/expertise_engineering_cybernetic_negative_effects_reduction_4.py +++ b/scripts/expertise/expertise_engineering_cybernetic_negative_effects_reduction_4.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'trader_eng_1a': - return - - actor.addSkill('expertise_engineering_cybernetic_negative_effects_reduction_4') - - actor.addSkillMod('expertise_cybernetic_negative_effects_reduction', 5) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'trader_eng_1a': - return - - actor.removeSkill('expertise_engineering_cybernetic_negative_effects_reduction_4') - - actor.removeSkillMod('expertise_cybernetic_negative_effects_reduction', 5) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_engineering_cybernetic_negative_effects_reduction_4") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_engineering_cybernetic_negative_effects_reduction_4") return diff --git a/scripts/expertise/expertise_engineering_cybernetic_s03_schematics_1.py b/scripts/expertise/expertise_engineering_cybernetic_s03_schematics_1.py index f20459ec..59dacda7 100644 --- a/scripts/expertise/expertise_engineering_cybernetic_s03_schematics_1.py +++ b/scripts/expertise/expertise_engineering_cybernetic_s03_schematics_1.py @@ -1,46 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'trader_eng_1a': - return - - actor.addSkill('expertise_engineering_cybernetic_s03_schematics_1') - - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'trader_eng_1a': - return - - actor.removeSkill('expertise_engineering_cybernetic_s03_schematics_1') - - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_engineering_cybernetic_s03_schematics_1") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_engineering_cybernetic_s03_schematics_1") return diff --git a/scripts/expertise/expertise_engineering_droid_advanced_theory_1.py b/scripts/expertise/expertise_engineering_droid_advanced_theory_1.py index 36c97c2d..8435fcae 100644 --- a/scripts/expertise/expertise_engineering_droid_advanced_theory_1.py +++ b/scripts/expertise/expertise_engineering_droid_advanced_theory_1.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'trader_eng_1a': - return - - actor.addSkill('expertise_engineering_droid_advanced_theory_1') - - actor.addSkillMod('droid_experimentation', 10) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'trader_eng_1a': - return - - actor.removeSkill('expertise_engineering_droid_advanced_theory_1') - - actor.removeSkillMod('droid_experimentation', 10) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_engineering_droid_advanced_theory_1") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_engineering_droid_advanced_theory_1") return diff --git a/scripts/expertise/expertise_engineering_droid_dexterity_1.py b/scripts/expertise/expertise_engineering_droid_dexterity_1.py index 4195d6b0..58da3ce9 100644 --- a/scripts/expertise/expertise_engineering_droid_dexterity_1.py +++ b/scripts/expertise/expertise_engineering_droid_dexterity_1.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'trader_eng_1a': - return - - actor.addSkill('expertise_engineering_droid_dexterity_1') - - actor.addSkillMod('droid_assembly', 5) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'trader_eng_1a': - return - - actor.removeSkill('expertise_engineering_droid_dexterity_1') - - actor.removeSkillMod('droid_assembly', 5) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_engineering_droid_dexterity_1") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_engineering_droid_dexterity_1") return diff --git a/scripts/expertise/expertise_engineering_droid_dexterity_2.py b/scripts/expertise/expertise_engineering_droid_dexterity_2.py index 53052f6a..5608862f 100644 --- a/scripts/expertise/expertise_engineering_droid_dexterity_2.py +++ b/scripts/expertise/expertise_engineering_droid_dexterity_2.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'trader_eng_1a': - return - - actor.addSkill('expertise_engineering_droid_dexterity_2') - - actor.addSkillMod('droid_assembly', 5) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'trader_eng_1a': - return - - actor.removeSkill('expertise_engineering_droid_dexterity_2') - - actor.removeSkillMod('droid_assembly', 5) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_engineering_droid_dexterity_2") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_engineering_droid_dexterity_2") return diff --git a/scripts/expertise/expertise_engineering_droid_dexterity_3.py b/scripts/expertise/expertise_engineering_droid_dexterity_3.py index 438fbf7c..a5f8e6df 100644 --- a/scripts/expertise/expertise_engineering_droid_dexterity_3.py +++ b/scripts/expertise/expertise_engineering_droid_dexterity_3.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'trader_eng_1a': - return - - actor.addSkill('expertise_engineering_droid_dexterity_3') - - actor.addSkillMod('droid_assembly', 5) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'trader_eng_1a': - return - - actor.removeSkill('expertise_engineering_droid_dexterity_3') - - actor.removeSkillMod('droid_assembly', 5) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_engineering_droid_dexterity_3") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_engineering_droid_dexterity_3") return diff --git a/scripts/expertise/expertise_engineering_droid_dexterity_4.py b/scripts/expertise/expertise_engineering_droid_dexterity_4.py index 6547a684..ce65339b 100644 --- a/scripts/expertise/expertise_engineering_droid_dexterity_4.py +++ b/scripts/expertise/expertise_engineering_droid_dexterity_4.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'trader_eng_1a': - return - - actor.addSkill('expertise_engineering_droid_dexterity_4') - - actor.addSkillMod('droid_assembly', 5) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'trader_eng_1a': - return - - actor.removeSkill('expertise_engineering_droid_dexterity_4') - - actor.removeSkillMod('droid_assembly', 5) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_engineering_droid_dexterity_4") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_engineering_droid_dexterity_4") return diff --git a/scripts/expertise/expertise_engineering_droid_hypothesis_1.py b/scripts/expertise/expertise_engineering_droid_hypothesis_1.py index a57e47ed..71ad763c 100644 --- a/scripts/expertise/expertise_engineering_droid_hypothesis_1.py +++ b/scripts/expertise/expertise_engineering_droid_hypothesis_1.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'trader_eng_1a': - return - - actor.addSkill('expertise_engineering_droid_hypothesis_1') - - actor.addSkillMod('expertise_experimentation_increase_droid', 3) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'trader_eng_1a': - return - - actor.removeSkill('expertise_engineering_droid_hypothesis_1') - - actor.removeSkillMod('expertise_experimentation_increase_droid', 3) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_engineering_droid_hypothesis_1") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_engineering_droid_hypothesis_1") return diff --git a/scripts/expertise/expertise_engineering_droid_hypothesis_2.py b/scripts/expertise/expertise_engineering_droid_hypothesis_2.py index 4658c156..56645f9b 100644 --- a/scripts/expertise/expertise_engineering_droid_hypothesis_2.py +++ b/scripts/expertise/expertise_engineering_droid_hypothesis_2.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'trader_eng_1a': - return - - actor.addSkill('expertise_engineering_droid_hypothesis_2') - - actor.addSkillMod('expertise_experimentation_increase_droid', 3) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'trader_eng_1a': - return - - actor.removeSkill('expertise_engineering_droid_hypothesis_2') - - actor.removeSkillMod('expertise_experimentation_increase_droid', 3) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_engineering_droid_hypothesis_2") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_engineering_droid_hypothesis_2") return diff --git a/scripts/expertise/expertise_engineering_droid_hypothesis_3.py b/scripts/expertise/expertise_engineering_droid_hypothesis_3.py index 3f8a59a1..dc413239 100644 --- a/scripts/expertise/expertise_engineering_droid_hypothesis_3.py +++ b/scripts/expertise/expertise_engineering_droid_hypothesis_3.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'trader_eng_1a': - return - - actor.addSkill('expertise_engineering_droid_hypothesis_3') - - actor.addSkillMod('expertise_experimentation_increase_droid', 3) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'trader_eng_1a': - return - - actor.removeSkill('expertise_engineering_droid_hypothesis_3') - - actor.removeSkillMod('expertise_experimentation_increase_droid', 3) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_engineering_droid_hypothesis_3") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_engineering_droid_hypothesis_3") return diff --git a/scripts/expertise/expertise_engineering_droid_hypothesis_4.py b/scripts/expertise/expertise_engineering_droid_hypothesis_4.py index fc794c58..7b5af620 100644 --- a/scripts/expertise/expertise_engineering_droid_hypothesis_4.py +++ b/scripts/expertise/expertise_engineering_droid_hypothesis_4.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'trader_eng_1a': - return - - actor.addSkill('expertise_engineering_droid_hypothesis_4') - - actor.addSkillMod('expertise_experimentation_increase_droid', 3) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'trader_eng_1a': - return - - actor.removeSkill('expertise_engineering_droid_hypothesis_4') - - actor.removeSkillMod('expertise_experimentation_increase_droid', 3) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_engineering_droid_hypothesis_4") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_engineering_droid_hypothesis_4") return diff --git a/scripts/expertise/expertise_engineering_droid_insight_1.py b/scripts/expertise/expertise_engineering_droid_insight_1.py index afb13261..6209cf4e 100644 --- a/scripts/expertise/expertise_engineering_droid_insight_1.py +++ b/scripts/expertise/expertise_engineering_droid_insight_1.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'trader_eng_1a': - return - - actor.addSkill('expertise_engineering_droid_insight_1') - - actor.addSkillMod('expertise_complexity_decrease_droid', 1) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'trader_eng_1a': - return - - actor.removeSkill('expertise_engineering_droid_insight_1') - - actor.removeSkillMod('expertise_complexity_decrease_droid', 1) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_engineering_droid_insight_1") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_engineering_droid_insight_1") return diff --git a/scripts/expertise/expertise_engineering_droid_insight_2.py b/scripts/expertise/expertise_engineering_droid_insight_2.py index 9a3ccca5..cfd7d326 100644 --- a/scripts/expertise/expertise_engineering_droid_insight_2.py +++ b/scripts/expertise/expertise_engineering_droid_insight_2.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'trader_eng_1a': - return - - actor.addSkill('expertise_engineering_droid_insight_2') - - actor.addSkillMod('expertise_complexity_decrease_droid', 1) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'trader_eng_1a': - return - - actor.removeSkill('expertise_engineering_droid_insight_2') - - actor.removeSkillMod('expertise_complexity_decrease_droid', 1) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_engineering_droid_insight_2") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_engineering_droid_insight_2") return diff --git a/scripts/expertise/expertise_engineering_droid_keen_understanding_1.py b/scripts/expertise/expertise_engineering_droid_keen_understanding_1.py index e47da182..471b9cf0 100644 --- a/scripts/expertise/expertise_engineering_droid_keen_understanding_1.py +++ b/scripts/expertise/expertise_engineering_droid_keen_understanding_1.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'trader_eng_1a': - return - - actor.addSkill('expertise_engineering_droid_keen_understanding_1') - - actor.addSkillMod('expertise_complexity_decrease_droid', 2) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'trader_eng_1a': - return - - actor.removeSkill('expertise_engineering_droid_keen_understanding_1') - - actor.removeSkillMod('expertise_complexity_decrease_droid', 2) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_engineering_droid_keen_understanding_1") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_engineering_droid_keen_understanding_1") return diff --git a/scripts/expertise/expertise_engineering_droid_keen_understanding_2.py b/scripts/expertise/expertise_engineering_droid_keen_understanding_2.py index 5cd3dd65..c7bd1ede 100644 --- a/scripts/expertise/expertise_engineering_droid_keen_understanding_2.py +++ b/scripts/expertise/expertise_engineering_droid_keen_understanding_2.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'trader_eng_1a': - return - - actor.addSkill('expertise_engineering_droid_keen_understanding_2') - - actor.addSkillMod('expertise_complexity_decrease_droid', 2) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'trader_eng_1a': - return - - actor.removeSkill('expertise_engineering_droid_keen_understanding_2') - - actor.removeSkillMod('expertise_complexity_decrease_droid', 2) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_engineering_droid_keen_understanding_2") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_engineering_droid_keen_understanding_2") return diff --git a/scripts/expertise/expertise_engineering_droid_schematic_1_1.py b/scripts/expertise/expertise_engineering_droid_schematic_1_1.py index 6340cdd7..c9a0234c 100644 --- a/scripts/expertise/expertise_engineering_droid_schematic_1_1.py +++ b/scripts/expertise/expertise_engineering_droid_schematic_1_1.py @@ -1,46 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'trader_eng_1a': - return - - actor.addSkill('expertise_engineering_droid_schematic_1_1') - - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'trader_eng_1a': - return - - actor.removeSkill('expertise_engineering_droid_schematic_1_1') - - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_engineering_droid_schematic_1_1") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_engineering_droid_schematic_1_1") return diff --git a/scripts/expertise/expertise_engineering_droid_schematic_2_1.py b/scripts/expertise/expertise_engineering_droid_schematic_2_1.py index 9ade7f61..c7e1a68f 100644 --- a/scripts/expertise/expertise_engineering_droid_schematic_2_1.py +++ b/scripts/expertise/expertise_engineering_droid_schematic_2_1.py @@ -1,46 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'trader_eng_1a': - return - - actor.addSkill('expertise_engineering_droid_schematic_2_1') - - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'trader_eng_1a': - return - - actor.removeSkill('expertise_engineering_droid_schematic_2_1') - - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_engineering_droid_schematic_2_1") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_engineering_droid_schematic_2_1") return diff --git a/scripts/expertise/expertise_engineering_resource_processing_1.py b/scripts/expertise/expertise_engineering_resource_processing_1.py index 6c8953a7..38aa0595 100644 --- a/scripts/expertise/expertise_engineering_resource_processing_1.py +++ b/scripts/expertise/expertise_engineering_resource_processing_1.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'trader_eng_1a': - return - - actor.addSkill('expertise_engineering_resource_processing_1') - - actor.addSkillMod('expertise_resource_quality_increase', 1) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'trader_eng_1a': - return - - actor.removeSkill('expertise_engineering_resource_processing_1') - - actor.removeSkillMod('expertise_resource_quality_increase', 1) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_engineering_resource_processing_1") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_engineering_resource_processing_1") return diff --git a/scripts/expertise/expertise_engineering_resource_processing_2.py b/scripts/expertise/expertise_engineering_resource_processing_2.py index e0d9b8cf..0e561add 100644 --- a/scripts/expertise/expertise_engineering_resource_processing_2.py +++ b/scripts/expertise/expertise_engineering_resource_processing_2.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'trader_eng_1a': - return - - actor.addSkill('expertise_engineering_resource_processing_2') - - actor.addSkillMod('expertise_resource_quality_increase', 1) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'trader_eng_1a': - return - - actor.removeSkill('expertise_engineering_resource_processing_2') - - actor.removeSkillMod('expertise_resource_quality_increase', 1) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_engineering_resource_processing_2") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_engineering_resource_processing_2") return diff --git a/scripts/expertise/expertise_engineering_resource_refinement_1.py b/scripts/expertise/expertise_engineering_resource_refinement_1.py index 635c1e44..476a968e 100644 --- a/scripts/expertise/expertise_engineering_resource_refinement_1.py +++ b/scripts/expertise/expertise_engineering_resource_refinement_1.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'trader_eng_1a': - return - - actor.addSkill('expertise_engineering_resource_refinement_1') - - actor.addSkillMod('expertise_resource_quality_increase', 1) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'trader_eng_1a': - return - - actor.removeSkill('expertise_engineering_resource_refinement_1') - - actor.removeSkillMod('expertise_resource_quality_increase', 1) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_engineering_resource_refinement_1") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_engineering_resource_refinement_1") return diff --git a/scripts/expertise/expertise_engineering_resource_refinement_2.py b/scripts/expertise/expertise_engineering_resource_refinement_2.py index 0246b71c..80b22ec3 100644 --- a/scripts/expertise/expertise_engineering_resource_refinement_2.py +++ b/scripts/expertise/expertise_engineering_resource_refinement_2.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'trader_eng_1a': - return - - actor.addSkill('expertise_engineering_resource_refinement_2') - - actor.addSkillMod('expertise_resource_quality_increase', 1) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'trader_eng_1a': - return - - actor.removeSkill('expertise_engineering_resource_refinement_2') - - actor.removeSkillMod('expertise_resource_quality_increase', 1) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_engineering_resource_refinement_2") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_engineering_resource_refinement_2") return diff --git a/scripts/expertise/expertise_engineering_weaponsmith_attachment_upgrade_1.py b/scripts/expertise/expertise_engineering_weaponsmith_attachment_upgrade_1.py index 8f59c85c..8045a598 100644 --- a/scripts/expertise/expertise_engineering_weaponsmith_attachment_upgrade_1.py +++ b/scripts/expertise/expertise_engineering_weaponsmith_attachment_upgrade_1.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'trader_eng_1a': - return - - actor.addSkill('expertise_engineering_weaponsmith_attachment_upgrade_1') - - actor.addSkillMod('expertise_attachment_upgrade', 1) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'trader_eng_1a': - return - - actor.removeSkill('expertise_engineering_weaponsmith_attachment_upgrade_1') - - actor.removeSkillMod('expertise_attachment_upgrade', 1) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_engineering_weaponsmith_attachment_upgrade_1") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_engineering_weaponsmith_attachment_upgrade_1") return diff --git a/scripts/expertise/expertise_engineering_weaponsmith_socket_bonus_1.py b/scripts/expertise/expertise_engineering_weaponsmith_socket_bonus_1.py index ea4bbe96..7fbbb3d1 100644 --- a/scripts/expertise/expertise_engineering_weaponsmith_socket_bonus_1.py +++ b/scripts/expertise/expertise_engineering_weaponsmith_socket_bonus_1.py @@ -1,46 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'trader_eng_1a': - return - - actor.addSkill('expertise_engineering_weaponsmith_socket_bonus_1') - - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'trader_eng_1a': - return - - actor.removeSkill('expertise_engineering_weaponsmith_socket_bonus_1') - - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_engineering_weaponsmith_socket_bonus_1") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_engineering_weaponsmith_socket_bonus_1") return diff --git a/scripts/expertise/expertise_fs_general_alacrity_1.py b/scripts/expertise/expertise_fs_general_alacrity_1.py index b9f17633..b69a7bc6 100644 --- a/scripts/expertise/expertise_fs_general_alacrity_1.py +++ b/scripts/expertise/expertise_fs_general_alacrity_1.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'force_sensitive_1a': - return - - actor.addSkill('expertise_fs_general_alacrity_1') - - core.skillModService.addSkillMod(actor, 'expertise_glancing_blow_all', 2) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'force_sensitive_1a': - return - - actor.removeSkill('expertise_fs_general_alacrity_1') - - core.skillModService.deductSkillMod(actor, 'expertise_glancing_blow_all', 2) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_fs_general_alacrity_1") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_fs_general_alacrity_1") return diff --git a/scripts/expertise/expertise_fs_general_alacrity_2.py b/scripts/expertise/expertise_fs_general_alacrity_2.py index c1a3f4b0..3c5d3f66 100644 --- a/scripts/expertise/expertise_fs_general_alacrity_2.py +++ b/scripts/expertise/expertise_fs_general_alacrity_2.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'force_sensitive_1a': - return - - actor.addSkill('expertise_fs_general_alacrity_2') - - core.skillModService.addSkillMod(actor, 'expertise_glancing_blow_all', 2) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'force_sensitive_1a': - return - - actor.removeSkill('expertise_fs_general_alacrity_2') - - core.skillModService.deductSkillMod(actor, 'expertise_glancing_blow_all', 2) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_fs_general_alacrity_2") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_fs_general_alacrity_2") return diff --git a/scripts/expertise/expertise_fs_general_alacrity_3.py b/scripts/expertise/expertise_fs_general_alacrity_3.py index bf182038..58282db9 100644 --- a/scripts/expertise/expertise_fs_general_alacrity_3.py +++ b/scripts/expertise/expertise_fs_general_alacrity_3.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'force_sensitive_1a': - return - - actor.addSkill('expertise_fs_general_alacrity_3') - - core.skillModService.addSkillMod(actor, 'expertise_glancing_blow_all', 2) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'force_sensitive_1a': - return - - actor.removeSkill('expertise_fs_general_alacrity_3') - - core.skillModService.deductSkillMod(actor, 'expertise_glancing_blow_all', 2) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_fs_general_alacrity_3") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_fs_general_alacrity_3") return diff --git a/scripts/expertise/expertise_fs_general_alacrity_4.py b/scripts/expertise/expertise_fs_general_alacrity_4.py index 1c89b7dc..641990c1 100644 --- a/scripts/expertise/expertise_fs_general_alacrity_4.py +++ b/scripts/expertise/expertise_fs_general_alacrity_4.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'force_sensitive_1a': - return - - actor.addSkill('expertise_fs_general_alacrity_4') - - core.skillModService.addSkillMod(actor, 'expertise_glancing_blow_all', 2) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'force_sensitive_1a': - return - - actor.removeSkill('expertise_fs_general_alacrity_4') - - core.skillModService.deductSkillMod(actor, 'expertise_glancing_blow_all', 2) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_fs_general_alacrity_4") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_fs_general_alacrity_4") return diff --git a/scripts/expertise/expertise_fs_general_enhanced_agility_1.py b/scripts/expertise/expertise_fs_general_enhanced_agility_1.py index 1ed244d3..b4133b1b 100644 --- a/scripts/expertise/expertise_fs_general_enhanced_agility_1.py +++ b/scripts/expertise/expertise_fs_general_enhanced_agility_1.py @@ -1,47 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'force_sensitive_1a': - return - - actor.addSkill('expertise_fs_general_enhanced_agility_1') - - core.skillModService.addSkillMod(actor, 'agility_modified', 25) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'force_sensitive_1a': - return - - actor.removeSkill('expertise_fs_general_enhanced_agility_1') - - core.skillModService.deductSkillMod(actor, 'agility_modified', 25) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - + actor.addAbility("expertise_fs_general_enhanced_agility_1") return def removeAbilities(core, actor, player): - + actor.removeAbility("expertise_fs_general_enhanced_agility_1") return - diff --git a/scripts/expertise/expertise_fs_general_enhanced_agility_2.py b/scripts/expertise/expertise_fs_general_enhanced_agility_2.py index e9e90307..48301d52 100644 --- a/scripts/expertise/expertise_fs_general_enhanced_agility_2.py +++ b/scripts/expertise/expertise_fs_general_enhanced_agility_2.py @@ -1,47 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'force_sensitive_1a': - return - - actor.addSkill('expertise_fs_general_enhanced_agility_2') - - core.skillModService.addSkillMod(actor, 'agility_modified', 25) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'force_sensitive_1a': - return - - actor.removeSkill('expertise_fs_general_enhanced_agility_2') - - core.skillModService.deductSkillMod(actor, 'agility_modified', 25) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - + actor.addAbility("expertise_fs_general_enhanced_agility_2") return def removeAbilities(core, actor, player): - + actor.removeAbility("expertise_fs_general_enhanced_agility_2") return - diff --git a/scripts/expertise/expertise_fs_general_enhanced_constitution_1.py b/scripts/expertise/expertise_fs_general_enhanced_constitution_1.py index 9db9e638..5521929c 100644 --- a/scripts/expertise/expertise_fs_general_enhanced_constitution_1.py +++ b/scripts/expertise/expertise_fs_general_enhanced_constitution_1.py @@ -1,47 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'force_sensitive_1a': - return - - actor.addSkill('expertise_fs_general_enhanced_constitution_1') - - core.skillModService.addSkillMod(actor, 'constitution_modified', 25) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'force_sensitive_1a': - return - - actor.removeSkill('expertise_fs_general_enhanced_constitution_1') - - core.skillModService.deductSkillMod(actor, 'constitution_modified', 25) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - + actor.addAbility("expertise_fs_general_enhanced_constitution_1") return def removeAbilities(core, actor, player): - + actor.removeAbility("expertise_fs_general_enhanced_constitution_1") return - diff --git a/scripts/expertise/expertise_fs_general_enhanced_constitution_2.py b/scripts/expertise/expertise_fs_general_enhanced_constitution_2.py index 7dad3160..f800a526 100644 --- a/scripts/expertise/expertise_fs_general_enhanced_constitution_2.py +++ b/scripts/expertise/expertise_fs_general_enhanced_constitution_2.py @@ -1,47 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'force_sensitive_1a': - return - - actor.addSkill('expertise_fs_general_enhanced_constitution_2') - - core.skillModService.addSkillMod(actor, 'constitution_modified', 25) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'force_sensitive_1a': - return - - actor.removeSkill('expertise_fs_general_enhanced_constitution_2') - - core.skillModService.addSkillMod(actor, 'constitution_modified', 25) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - + actor.addAbility("expertise_fs_general_enhanced_constitution_2") return def removeAbilities(core, actor, player): - + actor.removeAbility("expertise_fs_general_enhanced_constitution_2") return - diff --git a/scripts/expertise/expertise_fs_general_enhanced_stamina_1.py b/scripts/expertise/expertise_fs_general_enhanced_stamina_1.py index 7c760888..28be7fc3 100644 --- a/scripts/expertise/expertise_fs_general_enhanced_stamina_1.py +++ b/scripts/expertise/expertise_fs_general_enhanced_stamina_1.py @@ -1,47 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'force_sensitive_1a': - return - - actor.addSkill('expertise_fs_general_enhanced_stamina_1') - - core.skillModService.addSkillMod(actor, 'stamina_modified', 25) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'force_sensitive_1a': - return - - actor.removeSkill('expertise_fs_general_enhanced_stamina_1') - - core.skillModService.deductSkillMod(actor, 'stamina_modified', 25) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - + actor.addAbility("expertise_fs_general_enhanced_stamina_1") return def removeAbilities(core, actor, player): - + actor.removeAbility("expertise_fs_general_enhanced_stamina_1") return - diff --git a/scripts/expertise/expertise_fs_general_enhanced_stamina_2.py b/scripts/expertise/expertise_fs_general_enhanced_stamina_2.py index 1dc31c3d..57ad1cd6 100644 --- a/scripts/expertise/expertise_fs_general_enhanced_stamina_2.py +++ b/scripts/expertise/expertise_fs_general_enhanced_stamina_2.py @@ -1,47 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'force_sensitive_1a': - return - - actor.addSkill('expertise_fs_general_enhanced_stamina_2') - - core.skillModService.addSkillMod(actor, 'stamina_modified', 25) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'force_sensitive_1a': - return - - actor.removeSkill('expertise_fs_general_enhanced_stamina_2') - - core.skillModService.deductSkillMod(actor, 'stamina_modified', 25) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - + actor.addAbility("expertise_fs_general_enhanced_stamina_2") return def removeAbilities(core, actor, player): - + actor.removeAbility("expertise_fs_general_enhanced_stamina_2") return - diff --git a/scripts/expertise/expertise_fs_general_enhanced_strength_1.py b/scripts/expertise/expertise_fs_general_enhanced_strength_1.py index e4419423..881f9819 100644 --- a/scripts/expertise/expertise_fs_general_enhanced_strength_1.py +++ b/scripts/expertise/expertise_fs_general_enhanced_strength_1.py @@ -1,47 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'force_sensitive_1a': - return - - actor.addSkill('expertise_fs_general_enhanced_strength_1') - - core.skillModService.addSkillMod(actor, 'strength_modified', 25) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'force_sensitive_1a': - return - - actor.removeSkill('expertise_fs_general_enhanced_strength_1') - - core.skillModService.deductSkillMod(actor, 'strength_modified', 25) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - + actor.addAbility("expertise_fs_general_enhanced_strength_1") return def removeAbilities(core, actor, player): - + actor.removeAbility("expertise_fs_general_enhanced_strength_1") return - diff --git a/scripts/expertise/expertise_fs_general_enhanced_strength_2.py b/scripts/expertise/expertise_fs_general_enhanced_strength_2.py index b5193a5f..fed1b59a 100644 --- a/scripts/expertise/expertise_fs_general_enhanced_strength_2.py +++ b/scripts/expertise/expertise_fs_general_enhanced_strength_2.py @@ -1,47 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'force_sensitive_1a': - return - - actor.addSkill('expertise_fs_general_enhanced_strength_2') - - core.skillModService.addSkillMod(actor, 'strength_modified', 25) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'force_sensitive_1a': - return - - actor.removeSkill('expertise_fs_general_enhanced_strength_2') - - core.skillModService.deductSkillMod(actor, 'strength_modified', 25) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - + actor.addAbility("expertise_fs_general_enhanced_strength_2") return def removeAbilities(core, actor, player): - + actor.removeAbility("expertise_fs_general_enhanced_strength_2") return - diff --git a/scripts/expertise/expertise_fs_general_exacting_strikes_1.py b/scripts/expertise/expertise_fs_general_exacting_strikes_1.py index 2236311e..91ea8275 100644 --- a/scripts/expertise/expertise_fs_general_exacting_strikes_1.py +++ b/scripts/expertise/expertise_fs_general_exacting_strikes_1.py @@ -1,50 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'force_sensitive_1a': - return - - actor.addSkill('expertise_fs_general_exacting_strikes_1') - - actor.addSkillMod('expertise_damage_line_fs_sweep', 2) - actor.addSkillMod('expertise_damage_line_fs_dm', 2) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'force_sensitive_1a': - return - - actor.removeSkill('expertise_fs_general_exacting_strikes_1') - - actor.removeSkillMod('expertise_damage_line_fs_sweep', 2) - actor.removeSkillMod('expertise_damage_line_fs_dm', 2) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_fs_general_exacting_strike_1") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_fs_general_exacting_strike_1") return diff --git a/scripts/expertise/expertise_fs_general_exacting_strikes_2.py b/scripts/expertise/expertise_fs_general_exacting_strikes_2.py index 2b4161b2..c28e666c 100644 --- a/scripts/expertise/expertise_fs_general_exacting_strikes_2.py +++ b/scripts/expertise/expertise_fs_general_exacting_strikes_2.py @@ -1,50 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'force_sensitive_1a': - return - - actor.addSkill('expertise_fs_general_exacting_strikes_2') - - actor.addSkillMod('expertise_damage_line_fs_sweep', 2) - actor.addSkillMod('expertise_damage_line_fs_dm', 2) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'force_sensitive_1a': - return - - actor.removeSkill('expertise_fs_general_exacting_strikes_2') - - actor.removeSkillMod('expertise_damage_line_fs_sweep', 2) - actor.removeSkillMod('expertise_damage_line_fs_dm', 2) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_fs_general_exacting_strike_2") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_fs_general_exacting_strike_2") return diff --git a/scripts/expertise/expertise_fs_general_exacting_strikes_3.py b/scripts/expertise/expertise_fs_general_exacting_strikes_3.py index cc542875..5e711192 100644 --- a/scripts/expertise/expertise_fs_general_exacting_strikes_3.py +++ b/scripts/expertise/expertise_fs_general_exacting_strikes_3.py @@ -1,50 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'force_sensitive_1a': - return - - actor.addSkill('expertise_fs_general_exacting_strikes_3') - - actor.addSkillMod('expertise_damage_line_fs_sweep', 2) - actor.addSkillMod('expertise_damage_line_fs_dm', 2) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'force_sensitive_1a': - return - - actor.removeSkill('expertise_fs_general_exacting_strikes_3') - - actor.removeSkillMod('expertise_damage_line_fs_sweep', 2) - actor.removeSkillMod('expertise_damage_line_fs_dm', 2) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_fs_general_exacting_strike_3") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_fs_general_exacting_strike_3") return diff --git a/scripts/expertise/expertise_fs_general_exacting_strikes_4.py b/scripts/expertise/expertise_fs_general_exacting_strikes_4.py index 448389c0..86f573c0 100644 --- a/scripts/expertise/expertise_fs_general_exacting_strikes_4.py +++ b/scripts/expertise/expertise_fs_general_exacting_strikes_4.py @@ -1,50 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'force_sensitive_1a': - return - - actor.addSkill('expertise_fs_general_exacting_strikes_4') - - actor.addSkillMod('expertise_damage_line_fs_sweep', 2) - actor.addSkillMod('expertise_damage_line_fs_dm', 2) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'force_sensitive_1a': - return - - actor.removeSkill('expertise_fs_general_exacting_strikes_4') - - actor.removeSkillMod('expertise_damage_line_fs_sweep', 2) - actor.removeSkillMod('expertise_damage_line_fs_dm', 2) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_fs_general_exacting_strike_4") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_fs_general_exacting_strike_4") return diff --git a/scripts/expertise/expertise_fs_general_fidelity_1.py b/scripts/expertise/expertise_fs_general_fidelity_1.py index 7e78aef6..9817071f 100644 --- a/scripts/expertise/expertise_fs_general_fidelity_1.py +++ b/scripts/expertise/expertise_fs_general_fidelity_1.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'force_sensitive_1a': - return - - actor.addSkill('expertise_fs_general_fidelity_1') - - core.skillModService.addSkillMod(actor, 'expertise_damage_melee', 4) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'force_sensitive_1a': - return - - actor.removeSkill('expertise_fs_general_fidelity_1') - - core.skillModService.deductSkillMod(actor, 'expertise_damage_melee', 4) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_fs_general_fidelity_1") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_fs_general_fidelity_1") return diff --git a/scripts/expertise/expertise_fs_general_fidelity_2.py b/scripts/expertise/expertise_fs_general_fidelity_2.py index db68b4f5..19abb94c 100644 --- a/scripts/expertise/expertise_fs_general_fidelity_2.py +++ b/scripts/expertise/expertise_fs_general_fidelity_2.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'force_sensitive_1a': - return - - actor.addSkill('expertise_fs_general_fidelity_2') - - core.skillModService.addSkillMod(actor, 'expertise_damage_melee', 4) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'force_sensitive_1a': - return - - actor.removeSkill('expertise_fs_general_fidelity_2') - - core.skillModService.deductSkillMod(actor, 'expertise_damage_melee', 4) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_fs_general_fidelity_2") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_fs_general_fidelity_2") return diff --git a/scripts/expertise/expertise_fs_general_force_cloak_1.py b/scripts/expertise/expertise_fs_general_force_cloak_1.py index fd748f6d..5f9fc9d4 100644 --- a/scripts/expertise/expertise_fs_general_force_cloak_1.py +++ b/scripts/expertise/expertise_fs_general_force_cloak_1.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'force_sensitive_1a': - return - - actor.addSkill('expertise_fs_general_force_cloak_1') - - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'force_sensitive_1a': - return - - actor.removeSkill('expertise_fs_general_force_cloak_1') - - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - actor.addAbility('fs_buff_invis_1') - + actor.addAbility("fs_buff_invis_1") return def removeAbilities(core, actor, player): - - actor.removeAbility('fs_buff_invis_1') - + actor.removeAbility("fs_buff_invis_1") return diff --git a/scripts/expertise/expertise_fs_general_force_shockwave_1.py b/scripts/expertise/expertise_fs_general_force_shockwave_1.py index 05f5873a..a17dbe47 100644 --- a/scripts/expertise/expertise_fs_general_force_shockwave_1.py +++ b/scripts/expertise/expertise_fs_general_force_shockwave_1.py @@ -1,48 +1,22 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'force_sensitive_1a': - return - - actor.addSkill('expertise_fs_general_force_shockwave_1') - - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'force_sensitive_1a': - return - - actor.removeSkill('expertise_fs_general_force_shockwave_1') - - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - actor.addAbility('fs_dm_cc_crit_1') - + if actor.getLevel() >= 26: + actor.addAbility("fs_dm_cc_crit_1") + if actor.getLevel() >= 34: + actor.addAbility("fs_dm_cc_crit_2") + if actor.getLevel() >= 48: + actor.addAbility("fs_dm_cc_crit_3") + if actor.getLevel() >= 62: + actor.addAbility("fs_dm_cc_crit_4") + if actor.getLevel() >= 76: + actor.addAbility("fs_dm_cc_crit_5") return def removeAbilities(core, actor, player): - - actor.removeAbility('fs_dm_cc_crit_1') - + actor.removeAbility("fs_dm_cc_crit_1") + actor.removeAbility("fs_dm_cc_crit_2") + actor.removeAbility("fs_dm_cc_crit_3") + actor.removeAbility("fs_dm_cc_crit_4") + actor.removeAbility("fs_dm_cc_crit_5") return diff --git a/scripts/expertise/expertise_fs_general_grace_in_motion_1.py b/scripts/expertise/expertise_fs_general_grace_in_motion_1.py index e2207030..1bc3e355 100644 --- a/scripts/expertise/expertise_fs_general_grace_in_motion_1.py +++ b/scripts/expertise/expertise_fs_general_grace_in_motion_1.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'force_sensitive_1a': - return - - actor.addSkill('expertise_fs_general_grace_in_motion_1') - - actor.addSkillMod('expertise_action_lightsaber', 5) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'force_sensitive_1a': - return - - actor.removeSkill('expertise_fs_general_grace_in_motion_1') - - actor.removeSkillMod('expertise_action_lightsaber', 5) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_fs_general_grace_in_motion_1") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_fs_general_grace_in_motion_1") return diff --git a/scripts/expertise/expertise_fs_general_grace_in_motion_2.py b/scripts/expertise/expertise_fs_general_grace_in_motion_2.py index 9b520c39..fa2a708a 100644 --- a/scripts/expertise/expertise_fs_general_grace_in_motion_2.py +++ b/scripts/expertise/expertise_fs_general_grace_in_motion_2.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'force_sensitive_1a': - return - - actor.addSkill('expertise_fs_general_grace_in_motion_2') - - actor.addSkillMod('expertise_action_lightsaber', 5) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'force_sensitive_1a': - return - - actor.removeSkill('expertise_fs_general_grace_in_motion_2') - - actor.removeSkillMod('expertise_action_lightsaber', 5) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_fs_general_grace_in_motion_2") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_fs_general_grace_in_motion_2") return diff --git a/scripts/expertise/expertise_fs_general_grace_in_motion_3.py b/scripts/expertise/expertise_fs_general_grace_in_motion_3.py index acedaa7a..ea60fbe1 100644 --- a/scripts/expertise/expertise_fs_general_grace_in_motion_3.py +++ b/scripts/expertise/expertise_fs_general_grace_in_motion_3.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'force_sensitive_1a': - return - - actor.addSkill('expertise_fs_general_grace_in_motion_3') - - actor.addSkillMod('expertise_action_lightsaber', 5) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'force_sensitive_1a': - return - - actor.removeSkill('expertise_fs_general_grace_in_motion_3') - - actor.removeSkillMod('expertise_action_lightsaber', 5) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_fs_general_grace_in_motion_3") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_fs_general_grace_in_motion_3") return diff --git a/scripts/expertise/expertise_fs_general_heightened_speed_1.py b/scripts/expertise/expertise_fs_general_heightened_speed_1.py index 1f410c98..aa3be1b3 100644 --- a/scripts/expertise/expertise_fs_general_heightened_speed_1.py +++ b/scripts/expertise/expertise_fs_general_heightened_speed_1.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'force_sensitive_1a': - return - - actor.addSkill('expertise_fs_general_heightened_speed_1') - - actor.addSkillMod('expertise_movement_buff_fs_force_run', 10) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'force_sensitive_1a': - return - - actor.removeSkill('expertise_fs_general_heightened_speed_1') - - actor.removeSkillMod('expertise_movement_buff_fs_force_run', 10) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_fs_general_heightened_speed_1") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_fs_general_heightened_speed_1") return diff --git a/scripts/expertise/expertise_fs_general_heightened_speed_2.py b/scripts/expertise/expertise_fs_general_heightened_speed_2.py index 7aed8948..245c3478 100644 --- a/scripts/expertise/expertise_fs_general_heightened_speed_2.py +++ b/scripts/expertise/expertise_fs_general_heightened_speed_2.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'force_sensitive_1a': - return - - actor.addSkill('expertise_fs_general_heightened_speed_2') - - actor.addSkillMod('expertise_movement_buff_fs_force_run', 10) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'force_sensitive_1a': - return - - actor.removeSkill('expertise_fs_general_heightened_speed_2') - - actor.removeSkillMod('expertise_movement_buff_fs_force_run', 10) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_fs_general_heightened_speed_2") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_fs_general_heightened_speed_2") return diff --git a/scripts/expertise/expertise_fs_general_heightened_speed_3.py b/scripts/expertise/expertise_fs_general_heightened_speed_3.py index 847e3c06..e5517964 100644 --- a/scripts/expertise/expertise_fs_general_heightened_speed_3.py +++ b/scripts/expertise/expertise_fs_general_heightened_speed_3.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'force_sensitive_1a': - return - - actor.addSkill('expertise_fs_general_heightened_speed_3') - - actor.addSkillMod('expertise_movement_buff_fs_force_run', 10) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'force_sensitive_1a': - return - - actor.removeSkill('expertise_fs_general_heightened_speed_3') - - actor.removeSkillMod('expertise_movement_buff_fs_force_run', 10) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_fs_general_heightened_speed_3") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_fs_general_heightened_speed_3") return diff --git a/scripts/expertise/expertise_fs_general_heightened_speed_4.py b/scripts/expertise/expertise_fs_general_heightened_speed_4.py index 878c1750..e49ae9b4 100644 --- a/scripts/expertise/expertise_fs_general_heightened_speed_4.py +++ b/scripts/expertise/expertise_fs_general_heightened_speed_4.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'force_sensitive_1a': - return - - actor.addSkill('expertise_fs_general_heightened_speed_4') - - actor.addSkillMod('expertise_movement_buff_fs_force_run', 10) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'force_sensitive_1a': - return - - actor.removeSkill('expertise_fs_general_heightened_speed_4') - - actor.removeSkillMod('expertise_movement_buff_fs_force_run', 10) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_fs_general_heightened_speed_4") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_fs_general_heightened_speed_4") return diff --git a/scripts/expertise/expertise_fs_general_improved_crippling_accuracy_1.py b/scripts/expertise/expertise_fs_general_improved_crippling_accuracy_1.py index 7339e6cf..16c4a122 100644 --- a/scripts/expertise/expertise_fs_general_improved_crippling_accuracy_1.py +++ b/scripts/expertise/expertise_fs_general_improved_crippling_accuracy_1.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'force_sensitive_1a': - return - - actor.addSkill('expertise_fs_general_improved_crippling_accuracy_1') - - actor.addSkillMod('expertise_buff_duration_line_fs_force_throw', 2) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'force_sensitive_1a': - return - - actor.removeSkill('expertise_fs_general_improved_crippling_accuracy_1') - - actor.removeSkillMod('expertise_buff_duration_line_fs_force_throw', 2) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_fs_general_improved_crippling_accuracy_1") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_fs_general_improved_crippling_accuracy_1") return diff --git a/scripts/expertise/expertise_fs_general_improved_crippling_accuracy_2.py b/scripts/expertise/expertise_fs_general_improved_crippling_accuracy_2.py index 1535e2c6..1ca0b65b 100644 --- a/scripts/expertise/expertise_fs_general_improved_crippling_accuracy_2.py +++ b/scripts/expertise/expertise_fs_general_improved_crippling_accuracy_2.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'force_sensitive_1a': - return - - actor.addSkill('expertise_fs_general_improved_crippling_accuracy_2') - - actor.addSkillMod('expertise_buff_duration_line_fs_force_throw', 2) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'force_sensitive_1a': - return - - actor.removeSkill('expertise_fs_general_improved_crippling_accuracy_2') - - actor.removeSkillMod('expertise_buff_duration_line_fs_force_throw', 2) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_fs_general_improved_crippling_accuracy_2") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_fs_general_improved_crippling_accuracy_2") return diff --git a/scripts/expertise/expertise_fs_general_improved_crippling_accuracy_3.py b/scripts/expertise/expertise_fs_general_improved_crippling_accuracy_3.py index fb5ffa62..51018497 100644 --- a/scripts/expertise/expertise_fs_general_improved_crippling_accuracy_3.py +++ b/scripts/expertise/expertise_fs_general_improved_crippling_accuracy_3.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'force_sensitive_1a': - return - - actor.addSkill('expertise_fs_general_improved_crippling_accuracy_3') - - actor.addSkillMod('expertise_buff_duration_line_fs_force_throw', 2) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'force_sensitive_1a': - return - - actor.removeSkill('expertise_fs_general_improved_crippling_accuracy_3') - - actor.removeSkillMod('expertise_buff_duration_line_fs_force_throw', 2) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_fs_general_improved_crippling_accuracy_3") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_fs_general_improved_crippling_accuracy_3") return diff --git a/scripts/expertise/expertise_fs_general_improved_force_cloak_1.py b/scripts/expertise/expertise_fs_general_improved_force_cloak_1.py index 29eb5f11..bd140591 100644 --- a/scripts/expertise/expertise_fs_general_improved_force_cloak_1.py +++ b/scripts/expertise/expertise_fs_general_improved_force_cloak_1.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'force_sensitive_1a': - return - - actor.addSkill('expertise_fs_general_improved_force_cloak_1') - - actor.addSkillMod('expertise_force_cloak_combat_escape', 1) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'force_sensitive_1a': - return - - actor.removeSkill('expertise_fs_general_improved_force_cloak_1') - - actor.removeSkillMod('expertise_force_cloak_combat_escape', 1) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_fs_general_improved_force_cloak_1") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_fs_general_improved_force_cloak_1") return diff --git a/scripts/expertise/expertise_fs_general_improved_force_shockwave_1.py b/scripts/expertise/expertise_fs_general_improved_force_shockwave_1.py index 9eab98c3..0c675358 100644 --- a/scripts/expertise/expertise_fs_general_improved_force_shockwave_1.py +++ b/scripts/expertise/expertise_fs_general_improved_force_shockwave_1.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'force_sensitive_1a': - return - - actor.addSkill('expertise_fs_general_improved_force_shockwave_1') - - actor.addSkillMod('expertise_damage_line_fs_cc_crit', 10) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'force_sensitive_1a': - return - - actor.removeSkill('expertise_fs_general_improved_force_shockwave_1') - - actor.removeSkillMod('expertise_damage_line_fs_cc_crit', 10) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_fs_general_improved_force_shockwave_1") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_fs_general_improved_force_shockwave_1") return diff --git a/scripts/expertise/expertise_fs_general_improved_force_shockwave_2.py b/scripts/expertise/expertise_fs_general_improved_force_shockwave_2.py index f51b5f9e..e47b87b3 100644 --- a/scripts/expertise/expertise_fs_general_improved_force_shockwave_2.py +++ b/scripts/expertise/expertise_fs_general_improved_force_shockwave_2.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'force_sensitive_1a': - return - - actor.addSkill('expertise_fs_general_improved_force_shockwave_2') - - actor.addSkillMod('expertise_damage_line_fs_cc_crit', 10) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'force_sensitive_1a': - return - - actor.removeSkill('expertise_fs_general_improved_force_shockwave_2') - - actor.removeSkillMod('expertise_damage_line_fs_cc_crit', 10) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_fs_general_improved_force_shockwave_2") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_fs_general_improved_force_shockwave_2") return diff --git a/scripts/expertise/expertise_fs_general_improved_force_shockwave_3.py b/scripts/expertise/expertise_fs_general_improved_force_shockwave_3.py index 85d26f98..c7293502 100644 --- a/scripts/expertise/expertise_fs_general_improved_force_shockwave_3.py +++ b/scripts/expertise/expertise_fs_general_improved_force_shockwave_3.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'force_sensitive_1a': - return - - actor.addSkill('expertise_fs_general_improved_force_shockwave_3') - - actor.addSkillMod('expertise_damage_line_fs_cc_crit', 10) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'force_sensitive_1a': - return - - actor.removeSkill('expertise_fs_general_improved_force_shockwave_3') - - actor.removeSkillMod('expertise_damage_line_fs_cc_crit', 10) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_fs_general_improved_force_shockwave_3") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_fs_general_improved_force_shockwave_3") return diff --git a/scripts/expertise/expertise_fs_general_improved_force_throw_1.py b/scripts/expertise/expertise_fs_general_improved_force_throw_1.py index 982a4921..07264c82 100644 --- a/scripts/expertise/expertise_fs_general_improved_force_throw_1.py +++ b/scripts/expertise/expertise_fs_general_improved_force_throw_1.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'force_sensitive_1a': - return - - actor.addSkill('expertise_fs_general_improved_force_throw_1') - - actor.addSkillMod('expertise_damage_line_fs_force_throw', 5) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'force_sensitive_1a': - return - - actor.removeSkill('expertise_fs_general_improved_force_throw_1') - - actor.removeSkillMod('expertise_damage_line_fs_force_throw', 5) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_fs_general_improved_force_throw_1") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_fs_general_improved_force_throw_1") return diff --git a/scripts/expertise/expertise_fs_general_improved_force_throw_2.py b/scripts/expertise/expertise_fs_general_improved_force_throw_2.py index 303292ef..1d5d428b 100644 --- a/scripts/expertise/expertise_fs_general_improved_force_throw_2.py +++ b/scripts/expertise/expertise_fs_general_improved_force_throw_2.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'force_sensitive_1a': - return - - actor.addSkill('expertise_fs_general_improved_force_throw_2') - - actor.addSkillMod('expertise_damage_line_fs_force_throw', 5) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'force_sensitive_1a': - return - - actor.removeSkill('expertise_fs_general_improved_force_throw_2') - - actor.removeSkillMod('expertise_damage_line_fs_force_throw', 5) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_fs_general_improved_force_throw_2") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_fs_general_improved_force_throw_2") return diff --git a/scripts/expertise/expertise_fs_general_improved_saber_block_1.py b/scripts/expertise/expertise_fs_general_improved_saber_block_1.py index 25d545c9..41596ad9 100644 --- a/scripts/expertise/expertise_fs_general_improved_saber_block_1.py +++ b/scripts/expertise/expertise_fs_general_improved_saber_block_1.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'force_sensitive_1a': - return - - actor.addSkill('expertise_fs_general_improved_saber_block_1') - - actor.addSkillMod('expertise_saber_block', 5) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'force_sensitive_1a': - return - - actor.removeSkill('expertise_fs_general_improved_saber_block_1') - - actor.removeSkillMod('expertise_saber_block', 5) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_fs_general_improved_saber_block_1") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_fs_general_improved_saber_block_1") return diff --git a/scripts/expertise/expertise_fs_general_improved_saber_block_2.py b/scripts/expertise/expertise_fs_general_improved_saber_block_2.py index 066a2128..abc2f012 100644 --- a/scripts/expertise/expertise_fs_general_improved_saber_block_2.py +++ b/scripts/expertise/expertise_fs_general_improved_saber_block_2.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'force_sensitive_1a': - return - - actor.addSkill('expertise_fs_general_improved_saber_block_2') - - actor.addSkillMod('expertise_saber_block', 5) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'force_sensitive_1a': - return - - actor.removeSkill('expertise_fs_general_improved_saber_block_2') - - actor.removeSkillMod('expertise_saber_block', 5) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_fs_general_improved_saber_block_2") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_fs_general_improved_saber_block_2") return diff --git a/scripts/expertise/expertise_fs_general_improved_saber_block_3.py b/scripts/expertise/expertise_fs_general_improved_saber_block_3.py index 75e6e32b..37892890 100644 --- a/scripts/expertise/expertise_fs_general_improved_saber_block_3.py +++ b/scripts/expertise/expertise_fs_general_improved_saber_block_3.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'force_sensitive_1a': - return - - actor.addSkill('expertise_fs_general_improved_saber_block_3') - - actor.addSkillMod('expertise_saber_block', 5) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'force_sensitive_1a': - return - - actor.removeSkill('expertise_fs_general_improved_saber_block_3') - - actor.removeSkillMod('expertise_saber_block', 5) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_fs_general_improved_saber_block_3") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_fs_general_improved_saber_block_3") return diff --git a/scripts/expertise/expertise_fs_general_incisiveness_1.py b/scripts/expertise/expertise_fs_general_incisiveness_1.py index 9e171eca..b872f06e 100644 --- a/scripts/expertise/expertise_fs_general_incisiveness_1.py +++ b/scripts/expertise/expertise_fs_general_incisiveness_1.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'force_sensitive_1a': - return - - actor.addSkill('expertise_fs_general_incisiveness_1') - - core.skillModService.addSkillMod(actor, 'expertise_critical_niche_all', 2) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'force_sensitive_1a': - return - - actor.removeSkill('expertise_fs_general_incisiveness_1') - - core.skillModService.deductSkillMod(actor, 'expertise_critical_niche_all', 2) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_fs_general_incisiveness_1") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_fs_general_incisiveness_1") return diff --git a/scripts/expertise/expertise_fs_general_incisiveness_2.py b/scripts/expertise/expertise_fs_general_incisiveness_2.py index 97a54475..7d397ae3 100644 --- a/scripts/expertise/expertise_fs_general_incisiveness_2.py +++ b/scripts/expertise/expertise_fs_general_incisiveness_2.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'force_sensitive_1a': - return - - actor.addSkill('expertise_fs_general_incisiveness_2') - - core.skillModService.addSkillMod(actor, 'expertise_critical_niche_all', 2) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'force_sensitive_1a': - return - - actor.removeSkill('expertise_fs_general_incisiveness_2') - - core.skillModService.deductSkillMod(actor, 'expertise_critical_niche_all', 2) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_fs_general_incisiveness_2") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_fs_general_incisiveness_2") return diff --git a/scripts/expertise/expertise_fs_general_incisiveness_3.py b/scripts/expertise/expertise_fs_general_incisiveness_3.py index 773b7bee..58ea449d 100644 --- a/scripts/expertise/expertise_fs_general_incisiveness_3.py +++ b/scripts/expertise/expertise_fs_general_incisiveness_3.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'force_sensitive_1a': - return - - actor.addSkill('expertise_fs_general_incisiveness_3') - - core.skillModService.addSkillMod(actor, 'expertise_critical_niche_all', 2) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'force_sensitive_1a': - return - - actor.removeSkill('expertise_fs_general_incisiveness_3') - - core.skillModService.deductSkillMod(actor, 'expertise_critical_niche_all', 2) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_fs_general_incisiveness_3") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_fs_general_incisiveness_3") return diff --git a/scripts/expertise/expertise_fs_general_premonition_1.py b/scripts/expertise/expertise_fs_general_premonition_1.py index 95553815..c5510629 100644 --- a/scripts/expertise/expertise_fs_general_premonition_1.py +++ b/scripts/expertise/expertise_fs_general_premonition_1.py @@ -1,50 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'force_sensitive_1a': - return - - actor.addSkill('expertise_fs_general_premonition_1') - - core.skillModService.addSkillMod(actor, 'expertise_evasion_chance', 2) - core.skillModService.addSkillMod(actor, 'expertise_evasion_value', 8) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'force_sensitive_1a': - return - - actor.removeSkill('expertise_fs_general_premonition_1') - - core.skillModService.deductSkillMod(actor, 'expertise_evasion_chance', 2) - core.skillModService.deductSkillMod(actor, 'expertise_evasion_value', 8) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_fs_general_premonition_1") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_fs_general_premonition_1") return diff --git a/scripts/expertise/expertise_fs_general_premonition_2.py b/scripts/expertise/expertise_fs_general_premonition_2.py index 329f1496..ac6cbe24 100644 --- a/scripts/expertise/expertise_fs_general_premonition_2.py +++ b/scripts/expertise/expertise_fs_general_premonition_2.py @@ -1,50 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'force_sensitive_1a': - return - - actor.addSkill('expertise_fs_general_premonition_2') - - core.skillModService.addSkillMod(actor, 'expertise_evasion_chance', 2) - core.skillModService.addSkillMod(actor, 'expertise_evasion_value', 8) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'force_sensitive_1a': - return - - actor.removeSkill('expertise_fs_general_premonition_2') - - core.skillModService.deductSkillMod(actor, 'expertise_evasion_chance', 2) - core.skillModService.deductSkillMod(actor, 'expertise_evasion_value', 8) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_fs_general_premonition_2") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_fs_general_premonition_2") return diff --git a/scripts/expertise/expertise_fs_general_premonition_3.py b/scripts/expertise/expertise_fs_general_premonition_3.py index 7c1ae35e..4bfaf6eb 100644 --- a/scripts/expertise/expertise_fs_general_premonition_3.py +++ b/scripts/expertise/expertise_fs_general_premonition_3.py @@ -1,50 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'force_sensitive_1a': - return - - actor.addSkill('expertise_fs_general_premonition_3') - - core.skillModService.addSkillMod(actor, 'expertise_evasion_chance', 2) - core.skillModService.addSkillMod(actor, 'expertise_evasion_value', 8) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'force_sensitive_1a': - return - - actor.removeSkill('expertise_fs_general_premonition_3') - - core.skillModService.deductSkillMod(actor, 'expertise_evasion_chance', 2) - core.skillModService.deductSkillMod(actor, 'expertise_evasion_value', 8) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_fs_general_premonition_3") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_fs_general_premonition_3") return diff --git a/scripts/expertise/expertise_fs_general_premonition_4.py b/scripts/expertise/expertise_fs_general_premonition_4.py index ffc6fe53..751255e1 100644 --- a/scripts/expertise/expertise_fs_general_premonition_4.py +++ b/scripts/expertise/expertise_fs_general_premonition_4.py @@ -1,50 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'force_sensitive_1a': - return - - actor.addSkill('expertise_fs_general_premonition_4') - - core.skillModService.addSkillMod(actor, 'expertise_evasion_chance', 2) - core.skillModService.addSkillMod(actor, 'expertise_evasion_value', 8) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'force_sensitive_1a': - return - - actor.removeSkill('expertise_fs_general_premonition_4') - - core.skillModService.deductSkillMod(actor, 'expertise_evasion_chance', 2) - core.skillModService.deductSkillMod(actor, 'expertise_evasion_value', 8) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_fs_general_premonition_4") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_fs_general_premonition_4") return diff --git a/scripts/expertise/expertise_fs_general_second_wind_1.py b/scripts/expertise/expertise_fs_general_second_wind_1.py index e2bf66c3..90120855 100644 --- a/scripts/expertise/expertise_fs_general_second_wind_1.py +++ b/scripts/expertise/expertise_fs_general_second_wind_1.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'force_sensitive_1a': - return - - actor.addSkill('expertise_fs_general_second_wind_1') - - actor.addSkillMod('expertise_buff_duration_line_fs_force_run', 2) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'force_sensitive_1a': - return - - actor.removeSkill('expertise_fs_general_second_wind_1') - - actor.removeSkillMod('expertise_buff_duration_line_fs_force_run', 2) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_fs_general_second_wind_1") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_fs_general_second_wind_1") return diff --git a/scripts/expertise/expertise_fs_general_second_wind_2.py b/scripts/expertise/expertise_fs_general_second_wind_2.py index ed634e1a..5dc1cf7a 100644 --- a/scripts/expertise/expertise_fs_general_second_wind_2.py +++ b/scripts/expertise/expertise_fs_general_second_wind_2.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'force_sensitive_1a': - return - - actor.addSkill('expertise_fs_general_second_wind_2') - - actor.addSkillMod('expertise_buff_duration_line_fs_force_run', 2) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'force_sensitive_1a': - return - - actor.removeSkill('expertise_fs_general_second_wind_2') - - actor.removeSkillMod('expertise_buff_duration_line_fs_force_run', 2) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_fs_general_second_wind_2") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_fs_general_second_wind_2") return diff --git a/scripts/expertise/expertise_fs_general_stance_saber_block_1.py b/scripts/expertise/expertise_fs_general_stance_saber_block_1.py index 15799877..01313e59 100644 --- a/scripts/expertise/expertise_fs_general_stance_saber_block_1.py +++ b/scripts/expertise/expertise_fs_general_stance_saber_block_1.py @@ -1,46 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'force_sensitive_1a': - return - - actor.addSkill('expertise_fs_general_stance_saber_block_1') - - actor.addSkillMod('display_only_parry', 1000) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'force_sensitive_1a': - return - - actor.removeSkill('expertise_fs_general_stance_saber_block_1') - - actor.removeSkillMod('display_only_parry', 1000) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - + actor.addAbility("saberBlock") return def removeAbilities(core, actor, player): - + actor.removeAbility("saberBlock") return diff --git a/scripts/expertise/expertise_fs_path_anticipate_aggression_1.py b/scripts/expertise/expertise_fs_path_anticipate_aggression_1.py index ab29d84c..ac447738 100644 --- a/scripts/expertise/expertise_fs_path_anticipate_aggression_1.py +++ b/scripts/expertise/expertise_fs_path_anticipate_aggression_1.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'force_sensitive_1a': - return - - actor.addSkill('expertise_fs_path_anticipate_aggression_1') - - actor.addSkillMod('expertise_stance_anticipate_aggression', 4) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'force_sensitive_1a': - return - - actor.removeSkill('expertise_fs_path_anticipate_aggression_1') - - actor.removeSkillMod('expertise_stance_anticipate_aggression', 4) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_fs_path_anticipate_aggression_1") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_fs_path_anticipate_aggression_1") return diff --git a/scripts/expertise/expertise_fs_path_anticipate_aggression_2.py b/scripts/expertise/expertise_fs_path_anticipate_aggression_2.py index 89805eca..da421e8b 100644 --- a/scripts/expertise/expertise_fs_path_anticipate_aggression_2.py +++ b/scripts/expertise/expertise_fs_path_anticipate_aggression_2.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'force_sensitive_1a': - return - - actor.addSkill('expertise_fs_path_anticipate_aggression_2') - - actor.addSkillMod('expertise_stance_anticipate_aggression', 4) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'force_sensitive_1a': - return - - actor.removeSkill('expertise_fs_path_anticipate_aggression_2') - - actor.removeSkillMod('expertise_stance_anticipate_aggression', 4) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_fs_path_anticipate_aggression_2") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_fs_path_anticipate_aggression_2") return diff --git a/scripts/expertise/expertise_fs_path_brutality_1.py b/scripts/expertise/expertise_fs_path_brutality_1.py index 2bddedf4..b583d402 100644 --- a/scripts/expertise/expertise_fs_path_brutality_1.py +++ b/scripts/expertise/expertise_fs_path_brutality_1.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'force_sensitive_1a': - return - - actor.addSkill('expertise_fs_path_brutality_1') - - core.skillModService.addSkillMod(actor, 'expertise_focus_critical_buff_line', 1) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'force_sensitive_1a': - return - - actor.removeSkill('expertise_fs_path_brutality_1') - - core.skillModService.deductSkillMod(actor, 'expertise_focus_critical_buff_line', 1) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_fs_path_brutality_1") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_fs_path_brutality_1") return diff --git a/scripts/expertise/expertise_fs_path_brutality_2.py b/scripts/expertise/expertise_fs_path_brutality_2.py index 56aa4679..06c05ccd 100644 --- a/scripts/expertise/expertise_fs_path_brutality_2.py +++ b/scripts/expertise/expertise_fs_path_brutality_2.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'force_sensitive_1a': - return - - actor.addSkill('expertise_fs_path_brutality_2') - - core.skillModService.addSkillMod(actor, 'expertise_focus_critical_buff_line', 1) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'force_sensitive_1a': - return - - actor.removeSkill('expertise_fs_path_brutality_2') - - core.skillModService.deductSkillMod(actor, 'expertise_focus_critical_buff_line', 1) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_fs_path_brutality_2") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_fs_path_brutality_2") return diff --git a/scripts/expertise/expertise_fs_path_brutality_3.py b/scripts/expertise/expertise_fs_path_brutality_3.py index ae385f2c..63954836 100644 --- a/scripts/expertise/expertise_fs_path_brutality_3.py +++ b/scripts/expertise/expertise_fs_path_brutality_3.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'force_sensitive_1a': - return - - actor.addSkill('expertise_fs_path_brutality_3') - - core.skillModService.addSkillMod(actor, 'expertise_focus_critical_buff_line', 1) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'force_sensitive_1a': - return - - actor.removeSkill('expertise_fs_path_brutality_3') - - core.skillModService.deductSkillMod(actor, 'expertise_focus_critical_buff_line', 1) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_fs_path_brutality_3") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_fs_path_brutality_3") return diff --git a/scripts/expertise/expertise_fs_path_brutality_4.py b/scripts/expertise/expertise_fs_path_brutality_4.py index 7170710f..c922074e 100644 --- a/scripts/expertise/expertise_fs_path_brutality_4.py +++ b/scripts/expertise/expertise_fs_path_brutality_4.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'force_sensitive_1a': - return - - actor.addSkill('expertise_fs_path_brutality_4') - - core.skillModService.addSkillMod(actor, 'expertise_focus_critical_buff_line', 1) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'force_sensitive_1a': - return - - actor.removeSkill('expertise_fs_path_brutality_4') - - core.skillModService.deductSkillMod(actor, 'expertise_focus_critical_buff_line', 1) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_fs_path_brutality_4") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_fs_path_brutality_4") return diff --git a/scripts/expertise/expertise_fs_path_cautious_nature_1.py b/scripts/expertise/expertise_fs_path_cautious_nature_1.py index 84c462c0..d4d90133 100644 --- a/scripts/expertise/expertise_fs_path_cautious_nature_1.py +++ b/scripts/expertise/expertise_fs_path_cautious_nature_1.py @@ -1,52 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'force_sensitive_1a': - return - - actor.addSkill('expertise_fs_path_cautious_nature_1') - - core.skillModService.addSkillMod(actor, 'expertise_stance_constitution', 10) - core.skillModService.addSkillMod(actor, 'expertise_stance_parry', 1) - core.skillModService.addSkillMod(actor, 'expertise_stance_evasion', 1) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'force_sensitive_1a': - return - - actor.removeSkill('expertise_fs_path_cautious_nature_1') - - core.skillModService.deductSkillMod(actor, 'expertise_stance_constitution', 10) - core.skillModService.deductSkillMod(actor, 'expertise_stance_parry', 1) - core.skillModService.deductSkillMod(actor, 'expertise_stance_evasion', 1) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_fs_path_cautious_nature_1") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_fs_path_cautious_nature_1") return diff --git a/scripts/expertise/expertise_fs_path_cautious_nature_2.py b/scripts/expertise/expertise_fs_path_cautious_nature_2.py index 42d67d98..112514fd 100644 --- a/scripts/expertise/expertise_fs_path_cautious_nature_2.py +++ b/scripts/expertise/expertise_fs_path_cautious_nature_2.py @@ -1,52 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'force_sensitive_1a': - return - - actor.addSkill('expertise_fs_path_cautious_nature_2') - - core.skillModService.addSkillMod(actor, 'expertise_stance_constitution', 10) - core.skillModService.addSkillMod(actor, 'expertise_stance_parry', 1) - core.skillModService.addSkillMod(actor, 'expertise_stance_evasion', 1) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'force_sensitive_1a': - return - - actor.removeSkill('expertise_fs_path_cautious_nature_2') - - core.skillModService.deductSkillMod(actor, 'expertise_stance_constitution', 10) - core.skillModService.deductSkillMod(actor, 'expertise_stance_parry', 1) - core.skillModService.deductSkillMod(actor, 'expertise_stance_evasion', 1) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_fs_path_cautious_nature_2") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_fs_path_cautious_nature_2") return diff --git a/scripts/expertise/expertise_fs_path_cautious_nature_3.py b/scripts/expertise/expertise_fs_path_cautious_nature_3.py index dfcc3c24..05183a16 100644 --- a/scripts/expertise/expertise_fs_path_cautious_nature_3.py +++ b/scripts/expertise/expertise_fs_path_cautious_nature_3.py @@ -1,52 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'force_sensitive_1a': - return - - actor.addSkill('expertise_fs_path_cautious_nature_3') - - core.skillModService.addSkillMod(actor, 'expertise_stance_constitution', 10) - core.skillModService.addSkillMod(actor, 'expertise_stance_parry', 1) - core.skillModService.addSkillMod(actor, 'expertise_stance_evasion', 1) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'force_sensitive_1a': - return - - actor.removeSkill('expertise_fs_path_cautious_nature_3') - - core.skillModService.deductSkillMod(actor, 'expertise_stance_constitution', 10) - core.skillModService.deductSkillMod(actor, 'expertise_stance_parry', 1) - core.skillModService.deductSkillMod(actor, 'expertise_stance_evasion', 1) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_fs_path_cautious_nature_3") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_fs_path_cautious_nature_3") return diff --git a/scripts/expertise/expertise_fs_path_cautious_nature_4.py b/scripts/expertise/expertise_fs_path_cautious_nature_4.py index fa3a2980..d5f122dd 100644 --- a/scripts/expertise/expertise_fs_path_cautious_nature_4.py +++ b/scripts/expertise/expertise_fs_path_cautious_nature_4.py @@ -1,52 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'force_sensitive_1a': - return - - actor.addSkill('expertise_fs_path_cautious_nature_4') - - core.skillModService.addSkillMod(actor, 'expertise_stance_constitution', 10) - core.skillModService.addSkillMod(actor, 'expertise_stance_parry', 1) - core.skillModService.addSkillMod(actor, 'expertise_stance_evasion', 1) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'force_sensitive_1a': - return - - actor.removeSkill('expertise_fs_path_cautious_nature_4') - - core.skillModService.deductSkillMod(actor, 'expertise_stance_constitution', 10) - core.skillModService.deductSkillMod(actor, 'expertise_stance_parry', 1) - core.skillModService.deductSkillMod(actor, 'expertise_stance_evasion', 1) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_fs_path_cautious_nature_4") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_fs_path_cautious_nature_4") return diff --git a/scripts/expertise/expertise_fs_path_cloud_minds_1.py b/scripts/expertise/expertise_fs_path_cloud_minds_1.py index 6fa583aa..7b839729 100644 --- a/scripts/expertise/expertise_fs_path_cloud_minds_1.py +++ b/scripts/expertise/expertise_fs_path_cloud_minds_1.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'force_sensitive_1a': - return - - actor.addSkill('expertise_fs_path_cloud_minds_1') - - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'force_sensitive_1a': - return - - actor.removeSkill('expertise_fs_path_cloud_minds_1') - - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - actor.addAbility('fs_mind_trick_2') - + actor.addAbility("fs_mind_trick_2") return def removeAbilities(core, actor, player): - - actor.removeAbility('fs_mind_trick_2') - + actor.removeAbility("fs_mind_trick_2") return diff --git a/scripts/expertise/expertise_fs_path_dark_lightning_1.py b/scripts/expertise/expertise_fs_path_dark_lightning_1.py index 6bea7d3e..bd222493 100644 --- a/scripts/expertise/expertise_fs_path_dark_lightning_1.py +++ b/scripts/expertise/expertise_fs_path_dark_lightning_1.py @@ -1,48 +1,25 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'force_sensitive_1a': - return - - actor.addSkill('expertise_fs_path_dark_lightning_1') - - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'force_sensitive_1a': - return - - actor.removeSkill('expertise_fs_path_dark_lightning_1') - - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - actor.addAbility('fs_ae_dm_cc_1') - + if actor.getLevel() >= 26: + actor.addAbility("fs_ae_dm_cc_1") + if actor.getLevel() >= 34: + actor.addAbility("fs_ae_dm_cc_2") + if actor.getLevel() >= 48: + actor.addAbility("fs_ae_dm_cc_3") + if actor.getLevel() >= 62: + actor.addAbility("fs_ae_dm_cc_4") + if actor.getLevel() >= 76: + actor.addAbility("fs_ae_dm_cc_5") + if actor.getLevel() >= 90: + actor.addAbility("fs_ae_dm_cc_6") return def removeAbilities(core, actor, player): - - actor.removeAbility('fs_ae_dm_cc_1') - + actor.removeAbility("fs_ae_dm_cc_1") + actor.removeAbility("fs_ae_dm_cc_2") + actor.removeAbility("fs_ae_dm_cc_3") + actor.removeAbility("fs_ae_dm_cc_4") + actor.removeAbility("fs_ae_dm_cc_5") + actor.removeAbility("fs_ae_dm_cc_6") return diff --git a/scripts/expertise/expertise_fs_path_expansive_trickery_1.py b/scripts/expertise/expertise_fs_path_expansive_trickery_1.py index 4e48ff9c..f58232ed 100644 --- a/scripts/expertise/expertise_fs_path_expansive_trickery_1.py +++ b/scripts/expertise/expertise_fs_path_expansive_trickery_1.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'force_sensitive_1a': - return - - actor.addSkill('expertise_fs_path_expansive_trickery_1') - - actor.addSkillMod('expertise_area_size_single_fs_mind_trick_2', 4) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'force_sensitive_1a': - return - - actor.removeSkill('expertise_fs_path_expansive_trickery_1') - - actor.removeSkillMod('expertise_area_size_single_fs_mind_trick_2', 4) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_fs_path_expensive_trickery_2") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_fs_path_expensive_trickery_2") return diff --git a/scripts/expertise/expertise_fs_path_flurry.py b/scripts/expertise/expertise_fs_path_flurry.py index 0c9dbb88..1fc0486f 100644 --- a/scripts/expertise/expertise_fs_path_flurry.py +++ b/scripts/expertise/expertise_fs_path_flurry.py @@ -1,48 +1,29 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'force_sensitive_1a': - return - - actor.addSkill('expertise_fs_path_flurry') - - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'force_sensitive_1a': - return - - actor.removeSkill('expertise_fs_path_flurry') - - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - actor.addAbility('fs_flurry_1') - + if actor.getLevel() >= 4: + actor.addAbility("fs_flurry_1") + if actor.getLevel() >= 12: + actor.addAbility("fs_flurry_2") + if actor.getLevel() >= 20: + actor.addAbility("fs_flurry_3") + if actor.getLevel() >= 30: + actor.addAbility("fs_flurry_4") + if actor.getLevel() >= 38: + actor.addAbility("fs_flurry_5") + if actor.getLevel() >= 52: + actor.addAbility("fs_flurry_6") + if actor.getLevel() >= 62: + actor.addAbility("fs_flurry_7") return def removeAbilities(core, actor, player): - - actor.removeAbility('fs_flurry_1') + actor.removeAbility("fs_flurry_1") + actor.removeAbility("fs_flurry_2") + actor.removeAbility("fs_flurry_3") + actor.removeAbility("fs_flurry_4") + actor.removeAbility("fs_flurry_5") + actor.removeAbility("fs_flurry_6") + actor.removeAbility("fs_flurry_7") return diff --git a/scripts/expertise/expertise_fs_path_force_choke_1.py b/scripts/expertise/expertise_fs_path_force_choke_1.py index b38da3a8..ad9a5d82 100644 --- a/scripts/expertise/expertise_fs_path_force_choke_1.py +++ b/scripts/expertise/expertise_fs_path_force_choke_1.py @@ -1,48 +1,25 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'force_sensitive_1a': - return - - actor.addSkill('expertise_fs_path_force_choke_1') - - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'force_sensitive_1a': - return - - actor.removeSkill('expertise_fs_path_force_choke_1') - - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - actor.addAbility('fs_dm_cc_1') - + if actor.getLevel() >= 26: + actor.addAbility("fs_dm_cc_1") + if actor.getLevel() >= 34: + actor.addAbility("fs_dm_cc_2") + if actor.getLevel() >= 48: + actor.addAbility("fs_dm_cc_3") + if actor.getLevel() >= 62: + actor.addAbility("fs_dm_cc_4") + if actor.getLevel() >= 76: + actor.addAbility("fs_dm_cc_5") + if actor.getLevel() >= 90: + actor.addAbility("fs_dm_cc_6") return def removeAbilities(core, actor, player): - - actor.removeAbility('fs_dm_cc_1') - + actor.removeAbility("fs_dm_cc_1") + actor.removeAbility("fs_dm_cc_2") + actor.removeAbility("fs_dm_cc_3") + actor.removeAbility("fs_dm_cc_4") + actor.removeAbility("fs_dm_cc_5") + actor.removeAbility("fs_dm_cc_6") return diff --git a/scripts/expertise/expertise_fs_path_force_clarity_1.py b/scripts/expertise/expertise_fs_path_force_clarity_1.py index 651153f9..f511c020 100644 --- a/scripts/expertise/expertise_fs_path_force_clarity_1.py +++ b/scripts/expertise/expertise_fs_path_force_clarity_1.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'force_sensitive_1a': - return - - actor.addSkill('expertise_fs_path_force_clarity_1') - - actor.addSkillMod('expertise_stance_fs_force_clarity', 5) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'force_sensitive_1a': - return - - actor.removeSkill('expertise_fs_path_force_clarity_1') - - actor.removeSkillMod('expertise_stance_fs_force_clarity', 5) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_fs_path_force_clarity_1") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_fs_path_force_clarity_1") return diff --git a/scripts/expertise/expertise_fs_path_force_drain_1.py b/scripts/expertise/expertise_fs_path_force_drain_1.py index e8c5fee3..6d310e3a 100644 --- a/scripts/expertise/expertise_fs_path_force_drain_1.py +++ b/scripts/expertise/expertise_fs_path_force_drain_1.py @@ -1,48 +1,22 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'force_sensitive_1a': - return - - actor.addSkill('expertise_fs_path_force_drain_1') - - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'force_sensitive_1a': - return - - actor.removeSkill('expertise_fs_path_force_drain_1') - - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - actor.addAbility('fs_drain_1') - + if actor.getLevel() >= 26: + actor.addAbility("fs_drain_1") + if actor.getLevel() >= 34: + actor.addAbility("fs_drain_2") + if actor.getLevel() >= 48: + actor.addAbility("fs_drain_3") + if actor.getLevel() >= 62: + actor.addAbility("fs_drain_4") + if actor.getLevel() >= 76: + actor.addAbility("fs_drain_5") return def removeAbilities(core, actor, player): - - actor.removeAbility('fs_drain_1') - + actor.removeAbility("fs_drain_1") + actor.removeAbility("fs_drain_2") + actor.removeAbility("fs_drain_3") + actor.removeAbility("fs_drain_4") + actor.removeAbility("fs_drain_5") return diff --git a/scripts/expertise/expertise_fs_path_forsake_fear_1.py b/scripts/expertise/expertise_fs_path_forsake_fear_1.py index 6ef13e11..8ef08232 100644 --- a/scripts/expertise/expertise_fs_path_forsake_fear_1.py +++ b/scripts/expertise/expertise_fs_path_forsake_fear_1.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'force_sensitive_1a': - return - - actor.addSkill('expertise_fs_path_forsake_fear_1') - - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'force_sensitive_1a': - return - - actor.removeSkill('expertise_fs_path_forsake_fear_1') - - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - actor.addAbility('fs_forsake_fear') - + actor.addAbility("fs_forsake_fear") return def removeAbilities(core, actor, player): - - actor.removeAbility('fs_forsake_fear') - + actor.removeAbility("fs_forsake_fear") return diff --git a/scripts/expertise/expertise_fs_path_hermetic_touch_1.py b/scripts/expertise/expertise_fs_path_hermetic_touch_1.py index 8361fe7d..4e681b4e 100644 --- a/scripts/expertise/expertise_fs_path_hermetic_touch_1.py +++ b/scripts/expertise/expertise_fs_path_hermetic_touch_1.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'force_sensitive_1a': - return - - actor.addSkill('expertise_fs_path_hermetic_touch_1') - - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'force_sensitive_1a': - return - - actor.removeSkill('expertise_fs_path_hermetic_touch_1') - - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - actor.addAbility('fs_hermetic_touch') - + actor.addAbility("fs_hermetic_touch") return def removeAbilities(core, actor, player): - - actor.removeAbility('fs_hermetic_touch') - + actor.removeAbility("fs_hermetic_touch") return diff --git a/scripts/expertise/expertise_fs_path_improved_force_choke_1.py b/scripts/expertise/expertise_fs_path_improved_force_choke_1.py index e01d7586..6aef5ed0 100644 --- a/scripts/expertise/expertise_fs_path_improved_force_choke_1.py +++ b/scripts/expertise/expertise_fs_path_improved_force_choke_1.py @@ -1,50 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'force_sensitive_1a': - return - - actor.addSkill('expertise_fs_path_improved_force_choke_1') - - actor.addSkillMod('expertise_damage_line_fs_dm_cc', 10) - actor.addSkillMod('expertise_dot_damage_line_fs_dm_cc', 10) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'force_sensitive_1a': - return - - actor.removeSkill('expertise_fs_path_improved_force_choke_1') - - actor.removeSkillMod('expertise_damage_line_fs_dm_cc', 10) - actor.removeSkillMod('expertise_dot_damage_line_fs_dm_cc', 10) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_fs_path_improved_force_choke_1") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_fs_path_improved_force_choke_1") return diff --git a/scripts/expertise/expertise_fs_path_improved_force_choke_2.py b/scripts/expertise/expertise_fs_path_improved_force_choke_2.py index 53971b85..dc0cb249 100644 --- a/scripts/expertise/expertise_fs_path_improved_force_choke_2.py +++ b/scripts/expertise/expertise_fs_path_improved_force_choke_2.py @@ -1,50 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'force_sensitive_1a': - return - - actor.addSkill('expertise_fs_path_improved_force_choke_2') - - actor.addSkillMod('expertise_damage_line_fs_dm_cc', 10) - actor.addSkillMod('expertise_dot_damage_line_fs_dm_cc', 10) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'force_sensitive_1a': - return - - actor.removeSkill('expertise_fs_path_improved_force_choke_2') - - actor.removeSkillMod('expertise_damage_line_fs_dm_cc', 10) - actor.removeSkillMod('expertise_dot_damage_line_fs_dm_cc', 10) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_fs_path_improved_force_choke_2") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_fs_path_improved_force_choke_2") return diff --git a/scripts/expertise/expertise_fs_path_improved_force_drain_1.py b/scripts/expertise/expertise_fs_path_improved_force_drain_1.py index 2665853a..425f98c3 100644 --- a/scripts/expertise/expertise_fs_path_improved_force_drain_1.py +++ b/scripts/expertise/expertise_fs_path_improved_force_drain_1.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'force_sensitive_1a': - return - - actor.addSkill('expertise_fs_path_improved_force_drain_1') - - actor.addSkillMod('expertise_fs_imp_drain', 33) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'force_sensitive_1a': - return - - actor.removeSkill('expertise_fs_path_improved_force_drain_1') - - actor.removeSkillMod('expertise_fs_imp_drain', 33) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_fs_path_improved_force_drain_1") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_fs_path_improved_force_drain_1") return diff --git a/scripts/expertise/expertise_fs_path_improved_force_drain_2.py b/scripts/expertise/expertise_fs_path_improved_force_drain_2.py index 61d92bb5..a155578f 100644 --- a/scripts/expertise/expertise_fs_path_improved_force_drain_2.py +++ b/scripts/expertise/expertise_fs_path_improved_force_drain_2.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'force_sensitive_1a': - return - - actor.addSkill('expertise_fs_path_improved_force_drain_2') - - actor.addSkillMod('expertise_fs_imp_drain', 33) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'force_sensitive_1a': - return - - actor.removeSkill('expertise_fs_path_improved_force_drain_2') - - actor.removeSkillMod('expertise_fs_imp_drain', 33) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_fs_path_improved_force_drain_2") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_fs_path_improved_force_drain_2") return diff --git a/scripts/expertise/expertise_fs_path_improved_force_drain_3.py b/scripts/expertise/expertise_fs_path_improved_force_drain_3.py index 4ecb65bf..9fc7a049 100644 --- a/scripts/expertise/expertise_fs_path_improved_force_drain_3.py +++ b/scripts/expertise/expertise_fs_path_improved_force_drain_3.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'force_sensitive_1a': - return - - actor.addSkill('expertise_fs_path_improved_force_drain_3') - - actor.addSkillMod('expertise_fs_imp_drain', 34) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'force_sensitive_1a': - return - - actor.removeSkill('expertise_fs_path_improved_force_drain_3') - - actor.removeSkillMod('expertise_fs_imp_drain', 34) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_fs_path_improved_force_drain_3") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_fs_path_improved_force_drain_3") return diff --git a/scripts/expertise/expertise_fs_path_improved_saber_reflect_1.py b/scripts/expertise/expertise_fs_path_improved_saber_reflect_1.py index f68eb3ae..fcd8dab3 100644 --- a/scripts/expertise/expertise_fs_path_improved_saber_reflect_1.py +++ b/scripts/expertise/expertise_fs_path_improved_saber_reflect_1.py @@ -1,50 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'force_sensitive_1a': - return - - actor.addSkill('expertise_fs_path_improved_saber_reflect_1') - - actor.addSkillMod('expertise_damage_line_fs_saber_reflect', 50) - actor.addSkillMod('expertise_force_alacrity', 25) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'force_sensitive_1a': - return - - actor.removeSkill('expertise_fs_path_improved_saber_reflect_1') - - actor.removeSkillMod('expertise_damage_line_fs_saber_reflect', 50) - actor.removeSkillMod('expertise_force_alacrity', 25) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_fs_path_improved_saber_reflect_1") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_fs_path_improved_saber_reflect_1") return diff --git a/scripts/expertise/expertise_fs_path_improved_saber_reflect_2.py b/scripts/expertise/expertise_fs_path_improved_saber_reflect_2.py index 6d95b6e7..dc7a3f46 100644 --- a/scripts/expertise/expertise_fs_path_improved_saber_reflect_2.py +++ b/scripts/expertise/expertise_fs_path_improved_saber_reflect_2.py @@ -1,50 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'force_sensitive_1a': - return - - actor.addSkill('expertise_fs_path_improved_saber_reflect_2') - - actor.addSkillMod('expertise_damage_line_fs_saber_reflect', 50) - actor.addSkillMod('expertise_force_alacrity', 25) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'force_sensitive_1a': - return - - actor.removeSkill('expertise_fs_path_improved_saber_reflect_2') - - actor.removeSkillMod('expertise_damage_line_fs_saber_reflect', 50) - actor.removeSkillMod('expertise_force_alacrity', 25) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_fs_path_improved_saber_reflect_2") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_fs_path_improved_saber_reflect_2") return diff --git a/scripts/expertise/expertise_fs_path_lethargy_1.py b/scripts/expertise/expertise_fs_path_lethargy_1.py index 7039b6d8..a214883f 100644 --- a/scripts/expertise/expertise_fs_path_lethargy_1.py +++ b/scripts/expertise/expertise_fs_path_lethargy_1.py @@ -1,50 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'force_sensitive_1a': - return - - actor.addSkill('expertise_fs_path_lethargy_1') - - actor.addSkillMod('expertise_buff_duration_line_fs_mind_trick', 2) - actor.addSkillMod('expertise_action_damage_line_fs_mind_trick', 250) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'force_sensitive_1a': - return - - actor.removeSkill('expertise_fs_path_lethargy_1') - - actor.removeSkillMod('expertise_buff_duration_line_fs_mind_trick', 2) - actor.removeSkillMod('expertise_action_damage_line_fs_mind_trick', 250) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_fs_path_lethargy_1") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_fs_path_lethargy_1") return diff --git a/scripts/expertise/expertise_fs_path_lethargy_2.py b/scripts/expertise/expertise_fs_path_lethargy_2.py index 6b294600..b3191ac1 100644 --- a/scripts/expertise/expertise_fs_path_lethargy_2.py +++ b/scripts/expertise/expertise_fs_path_lethargy_2.py @@ -1,50 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'force_sensitive_1a': - return - - actor.addSkill('expertise_fs_path_lethargy_2') - - actor.addSkillMod('expertise_buff_duration_line_fs_mind_trick', 2) - actor.addSkillMod('expertise_action_damage_line_fs_mind_trick', 250) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'force_sensitive_1a': - return - - actor.removeSkill('expertise_fs_path_lethargy_2') - - actor.removeSkillMod('expertise_buff_duration_line_fs_mind_trick', 2) - actor.removeSkillMod('expertise_action_damage_line_fs_mind_trick', 250) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_fs_path_lethargy_2") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_fs_path_lethargy_2") return diff --git a/scripts/expertise/expertise_fs_path_lethargy_3.py b/scripts/expertise/expertise_fs_path_lethargy_3.py index 9966bbad..833037e2 100644 --- a/scripts/expertise/expertise_fs_path_lethargy_3.py +++ b/scripts/expertise/expertise_fs_path_lethargy_3.py @@ -1,50 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'force_sensitive_1a': - return - - actor.addSkill('expertise_fs_path_lethargy_3') - - actor.addSkillMod('expertise_buff_duration_line_fs_mind_trick', 2) - actor.addSkillMod('expertise_action_damage_line_fs_mind_trick', 250) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'force_sensitive_1a': - return - - actor.removeSkill('expertise_fs_path_lethargy_3') - - actor.removeSkillMod('expertise_buff_duration_line_fs_mind_trick', 2) - actor.removeSkillMod('expertise_action_damage_line_fs_mind_trick', 250) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_fs_path_lethargy_3") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_fs_path_lethargy_3") return diff --git a/scripts/expertise/expertise_fs_path_lethargy_4.py b/scripts/expertise/expertise_fs_path_lethargy_4.py index ca3b2e10..6fb09b25 100644 --- a/scripts/expertise/expertise_fs_path_lethargy_4.py +++ b/scripts/expertise/expertise_fs_path_lethargy_4.py @@ -1,50 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'force_sensitive_1a': - return - - actor.addSkill('expertise_fs_path_lethargy_4') - - actor.addSkillMod('expertise_buff_duration_line_fs_mind_trick', 2) - actor.addSkillMod('expertise_action_damage_line_fs_mind_trick', 250) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'force_sensitive_1a': - return - - actor.removeSkill('expertise_fs_path_lethargy_4') - - actor.removeSkillMod('expertise_buff_duration_line_fs_mind_trick', 2) - actor.removeSkillMod('expertise_action_damage_line_fs_mind_trick', 250) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_fs_path_lethargy_4") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_fs_path_lethargy_4") return diff --git a/scripts/expertise/expertise_fs_path_maelstrom_1.py b/scripts/expertise/expertise_fs_path_maelstrom_1.py index 39b07550..84a05ef5 100644 --- a/scripts/expertise/expertise_fs_path_maelstrom_1.py +++ b/scripts/expertise/expertise_fs_path_maelstrom_1.py @@ -1,48 +1,22 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'force_sensitive_1a': - return - - actor.addSkill('expertise_fs_path_maelstrom_1') - - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'force_sensitive_1a': - return - - actor.removeSkill('expertise_fs_path_maelstrom_1') - - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - actor.addAbility('fs_maelstrom_1') - + if actor.getLevel() >= 26: + actor.addAbility("fs_maelstrom_1") + if actor.getLevel() >= 34: + actor.addAbility("fs_maelstrom_2") + if actor.getLevel() >= 48: + actor.addAbility("fs_maelstrom_3") + if actor.getLevel() >= 62: + actor.addAbility("fs_maelstrom_4") + if actor.getLevel() >= 76: + actor.addAbility("fs_maelstrom_5") return def removeAbilities(core, actor, player): - - actor.removeAbility('fs_maelstrom_1') - + actor.removeAbility("fs_maelstrom_1") + actor.removeAbility("fs_maelstrom_2") + actor.removeAbility("fs_maelstrom_3") + actor.removeAbility("fs_maelstrom_4") + actor.removeAbility("fs_maelstrom_5") return diff --git a/scripts/expertise/expertise_fs_path_perceptive_sentinel_1.py b/scripts/expertise/expertise_fs_path_perceptive_sentinel_1.py index 3803bf98..c2bb199d 100644 --- a/scripts/expertise/expertise_fs_path_perceptive_sentinel_1.py +++ b/scripts/expertise/expertise_fs_path_perceptive_sentinel_1.py @@ -1,50 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'force_sensitive_1a': - return - - actor.addSkill('expertise_fs_path_perceptive_sentinel_1') - - actor.addSkillMod('expertise_stance_perceptive_sentinel', 1) - actor.addSkillMod('expertise_stance_perceptive_sentinel_pvp', 1) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'force_sensitive_1a': - return - - actor.removeSkill('expertise_fs_path_perceptive_sentinel_1') - - actor.removeSkillMod('expertise_stance_perceptive_sentinel', 1) - actor.removeSkillMod('expertise_stance_perceptive_sentinel_pvp', 1) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_fs_path_perceptive_sentinel_1") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_fs_path_perceptive_sentinel_1") return diff --git a/scripts/expertise/expertise_fs_path_perceptive_sentinel_2.py b/scripts/expertise/expertise_fs_path_perceptive_sentinel_2.py index e8944848..04c69b17 100644 --- a/scripts/expertise/expertise_fs_path_perceptive_sentinel_2.py +++ b/scripts/expertise/expertise_fs_path_perceptive_sentinel_2.py @@ -1,50 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'force_sensitive_1a': - return - - actor.addSkill('expertise_fs_path_perceptive_sentinel_2') - - actor.addSkillMod('expertise_stance_perceptive_sentinel', 1) - actor.addSkillMod('expertise_stance_perceptive_sentinel_pvp', 1) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'force_sensitive_1a': - return - - actor.removeSkill('expertise_fs_path_perceptive_sentinel_2') - - actor.removeSkillMod('expertise_stance_perceptive_sentinel', 1) - actor.removeSkillMod('expertise_stance_perceptive_sentinel_pvp', 1) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_fs_path_perceptive_sentinel_2") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_fs_path_perceptive_sentinel_2") return diff --git a/scripts/expertise/expertise_fs_path_perceptive_sentinel_3.py b/scripts/expertise/expertise_fs_path_perceptive_sentinel_3.py index a4bd42b0..83c4131f 100644 --- a/scripts/expertise/expertise_fs_path_perceptive_sentinel_3.py +++ b/scripts/expertise/expertise_fs_path_perceptive_sentinel_3.py @@ -1,50 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'force_sensitive_1a': - return - - actor.addSkill('expertise_fs_path_perceptive_sentinel_3') - - actor.addSkillMod('expertise_stance_perceptive_sentinel', 1) - actor.addSkillMod('expertise_stance_perceptive_sentinel_pvp', 1) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'force_sensitive_1a': - return - - actor.removeSkill('expertise_fs_path_perceptive_sentinel_3') - - actor.removeSkillMod('expertise_stance_perceptive_sentinel', 1) - actor.removeSkillMod('expertise_stance_perceptive_sentinel_pvp', 1) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_fs_path_perceptive_sentinel_3") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_fs_path_perceptive_sentinel_3") return diff --git a/scripts/expertise/expertise_fs_path_perceptive_sentinel_4.py b/scripts/expertise/expertise_fs_path_perceptive_sentinel_4.py index f3a94bb6..0f6276dc 100644 --- a/scripts/expertise/expertise_fs_path_perceptive_sentinel_4.py +++ b/scripts/expertise/expertise_fs_path_perceptive_sentinel_4.py @@ -1,50 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'force_sensitive_1a': - return - - actor.addSkill('expertise_fs_path_perceptive_sentinel_4') - - actor.addSkillMod('expertise_stance_perceptive_sentinel', 1) - actor.addSkillMod('expertise_stance_perceptive_sentinel_pvp', 1) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'force_sensitive_1a': - return - - actor.removeSkill('expertise_fs_path_perceptive_sentinel_4') - - actor.removeSkillMod('expertise_stance_perceptive_sentinel', 1) - actor.removeSkillMod('expertise_stance_perceptive_sentinel_pvp', 1) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_fs_path_perceptive_sentinel_4") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_fs_path_perceptive_sentinel_4") return diff --git a/scripts/expertise/expertise_fs_path_reactive_response_1.py b/scripts/expertise/expertise_fs_path_reactive_response_1.py index 7742793f..816c657d 100644 --- a/scripts/expertise/expertise_fs_path_reactive_response_1.py +++ b/scripts/expertise/expertise_fs_path_reactive_response_1.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'force_sensitive_1a': - return - - actor.addSkill('expertise_fs_path_reactive_response_1') - - actor.addSkillMod('expertise_stance_damage_add_to_action', 2) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'force_sensitive_1a': - return - - actor.removeSkill('expertise_fs_path_reactive_response_1') - - actor.removeSkillMod('expertise_stance_damage_add_to_action', 2) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_fs_path_reactive_response_1") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_fs_path_reactive_response_1") return diff --git a/scripts/expertise/expertise_fs_path_reactive_response_2.py b/scripts/expertise/expertise_fs_path_reactive_response_2.py index a46db04e..3a79b265 100644 --- a/scripts/expertise/expertise_fs_path_reactive_response_2.py +++ b/scripts/expertise/expertise_fs_path_reactive_response_2.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'force_sensitive_1a': - return - - actor.addSkill('expertise_fs_path_reactive_response_2') - - actor.addSkillMod('expertise_stance_damage_add_to_action', 2) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'force_sensitive_1a': - return - - actor.removeSkill('expertise_fs_path_reactive_response_2') - - actor.removeSkillMod('expertise_stance_damage_add_to_action', 2) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_fs_path_reactive_response_2") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_fs_path_reactive_response_2") return diff --git a/scripts/expertise/expertise_fs_path_remorseless_nature_1.py b/scripts/expertise/expertise_fs_path_remorseless_nature_1.py index a155f97c..1c4bee8a 100644 --- a/scripts/expertise/expertise_fs_path_remorseless_nature_1.py +++ b/scripts/expertise/expertise_fs_path_remorseless_nature_1.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'force_sensitive_1a': - return - - actor.addSkill('expertise_fs_path_remorseless_nature_1') - - actor.addSkillMod('expertise_focus_stamina', 10) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'force_sensitive_1a': - return - - actor.removeSkill('expertise_fs_path_remorseless_nature_1') - - actor.removeSkillMod('expertise_focus_stamina', 10) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_fs_path_remorseless_nature_1") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_fs_path_remorseless_nature_1") return diff --git a/scripts/expertise/expertise_fs_path_remorseless_nature_2.py b/scripts/expertise/expertise_fs_path_remorseless_nature_2.py index 28db8826..85d986d8 100644 --- a/scripts/expertise/expertise_fs_path_remorseless_nature_2.py +++ b/scripts/expertise/expertise_fs_path_remorseless_nature_2.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'force_sensitive_1a': - return - - actor.addSkill('expertise_fs_path_remorseless_nature_2') - - actor.addSkillMod('expertise_focus_stamina', 10) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'force_sensitive_1a': - return - - actor.removeSkill('expertise_fs_path_remorseless_nature_2') - - actor.removeSkillMod('expertise_focus_stamina', 10) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_fs_path_remorseless_nature_2") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_fs_path_remorseless_nature_2") return diff --git a/scripts/expertise/expertise_fs_path_remorseless_nature_3.py b/scripts/expertise/expertise_fs_path_remorseless_nature_3.py index 7089a65c..19dfa6fd 100644 --- a/scripts/expertise/expertise_fs_path_remorseless_nature_3.py +++ b/scripts/expertise/expertise_fs_path_remorseless_nature_3.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'force_sensitive_1a': - return - - actor.addSkill('expertise_fs_path_remorseless_nature_3') - - actor.addSkillMod('expertise_focus_stamina', 10) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'force_sensitive_1a': - return - - actor.removeSkill('expertise_fs_path_remorseless_nature_3') - - actor.removeSkillMod('expertise_focus_stamina', 10) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_fs_path_remorseless_nature_3") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_fs_path_remorseless_nature_3") return diff --git a/scripts/expertise/expertise_fs_path_remorseless_nature_4.py b/scripts/expertise/expertise_fs_path_remorseless_nature_4.py index 49440a2d..8d505b2f 100644 --- a/scripts/expertise/expertise_fs_path_remorseless_nature_4.py +++ b/scripts/expertise/expertise_fs_path_remorseless_nature_4.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'force_sensitive_1a': - return - - actor.addSkill('expertise_fs_path_remorseless_nature_4') - - actor.addSkillMod('expertise_focus_stamina', 10) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'force_sensitive_1a': - return - - actor.removeSkill('expertise_fs_path_remorseless_nature_4') - - actor.removeSkillMod('expertise_focus_stamina', 10) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_fs_path_remorseless_nature_4") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_fs_path_remorseless_nature_4") return diff --git a/scripts/expertise/expertise_fs_path_riposte_1.py b/scripts/expertise/expertise_fs_path_riposte_1.py index b7470a65..5ffa3594 100644 --- a/scripts/expertise/expertise_fs_path_riposte_1.py +++ b/scripts/expertise/expertise_fs_path_riposte_1.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'force_sensitive_1a': - return - - actor.addSkill('expertise_fs_path_riposte_1') - - actor.addSkillMod('expertise_stance_riposte', 25) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'force_sensitive_1a': - return - - actor.removeSkill('expertise_fs_path_riposte_1') - - actor.removeSkillMod('expertise_stance_riposte', 25) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_fs_path_riposte_1") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_fs_path_riposte_1") return diff --git a/scripts/expertise/expertise_fs_path_riposte_2.py b/scripts/expertise/expertise_fs_path_riposte_2.py index de7b4623..7704424c 100644 --- a/scripts/expertise/expertise_fs_path_riposte_2.py +++ b/scripts/expertise/expertise_fs_path_riposte_2.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'force_sensitive_1a': - return - - actor.addSkill('expertise_fs_path_riposte_2') - - actor.addSkillMod('expertise_stance_riposte', 25) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'force_sensitive_1a': - return - - actor.removeSkill('expertise_fs_path_riposte_2') - - actor.removeSkillMod('expertise_stance_riposte', 25) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_fs_path_riposte_2") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_fs_path_riposte_2") return diff --git a/scripts/expertise/expertise_fs_path_ruthless_precision_1.py b/scripts/expertise/expertise_fs_path_ruthless_precision_1.py index c90c209a..ad47cf20 100644 --- a/scripts/expertise/expertise_fs_path_ruthless_precision_1.py +++ b/scripts/expertise/expertise_fs_path_ruthless_precision_1.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'force_sensitive_1a': - return - - actor.addSkill('expertise_fs_path_ruthless_precision_1') - - core.skillModService.addSkillMod(actor, 'expertise_focus_damage_increase', 2) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'force_sensitive_1a': - return - - actor.removeSkill('expertise_fs_path_ruthless_precision_1') - - core.skillModService.deductSkillMod(actor, 'expertise_focus_damage_increase', 2) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_fs_path_ruthless_precision_1") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_fs_path_ruthless_precision_1") return diff --git a/scripts/expertise/expertise_fs_path_ruthless_precision_2.py b/scripts/expertise/expertise_fs_path_ruthless_precision_2.py index 87ad2d2d..c4ccc5ae 100644 --- a/scripts/expertise/expertise_fs_path_ruthless_precision_2.py +++ b/scripts/expertise/expertise_fs_path_ruthless_precision_2.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'force_sensitive_1a': - return - - actor.addSkill('expertise_fs_path_ruthless_precision_2') - - core.skillModService.addSkillMod(actor, 'expertise_focus_damage_increase', 2) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'force_sensitive_1a': - return - - actor.removeSkill('expertise_fs_path_ruthless_precision_2') - - core.skillModService.deductSkillMod(actor, 'expertise_focus_damage_increase', 2) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_fs_path_ruthless_precision_2") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_fs_path_ruthless_precision_2") return diff --git a/scripts/expertise/expertise_fs_path_ruthless_precision_3.py b/scripts/expertise/expertise_fs_path_ruthless_precision_3.py index b802e602..01546884 100644 --- a/scripts/expertise/expertise_fs_path_ruthless_precision_3.py +++ b/scripts/expertise/expertise_fs_path_ruthless_precision_3.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'force_sensitive_1a': - return - - actor.addSkill('expertise_fs_path_ruthless_precision_3') - - core.skillModService.addSkillMod(actor, 'expertise_focus_damage_increase', 2) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'force_sensitive_1a': - return - - actor.removeSkill('expertise_fs_path_ruthless_precision_3') - - core.skillModService.deductSkillMod(actor, 'expertise_focus_damage_increase', 2) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_fs_path_ruthless_precision_3") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_fs_path_ruthless_precision_3") return diff --git a/scripts/expertise/expertise_fs_path_ruthless_precision_4.py b/scripts/expertise/expertise_fs_path_ruthless_precision_4.py index f0f94fe5..6292bfe5 100644 --- a/scripts/expertise/expertise_fs_path_ruthless_precision_4.py +++ b/scripts/expertise/expertise_fs_path_ruthless_precision_4.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'force_sensitive_1a': - return - - actor.addSkill('expertise_fs_path_ruthless_precision_4') - - core.skillModService.addSkillMod(actor, 'expertise_focus_damage_increase', 2) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'force_sensitive_1a': - return - - actor.removeSkill('expertise_fs_path_ruthless_precision_4') - - core.skillModService.deductSkillMod(actor, 'expertise_focus_damage_increase', 2) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_fs_path_ruthless_precision_4") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_fs_path_ruthless_precision_4") return diff --git a/scripts/expertise/expertise_fs_path_saber_reflect_1.py b/scripts/expertise/expertise_fs_path_saber_reflect_1.py index 2895ccac..ff019b2d 100644 --- a/scripts/expertise/expertise_fs_path_saber_reflect_1.py +++ b/scripts/expertise/expertise_fs_path_saber_reflect_1.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'force_sensitive_1a': - return - - actor.addSkill('expertise_fs_path_saber_reflect_1') - - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'force_sensitive_1a': - return - - actor.removeSkill('expertise_fs_path_saber_reflect_1') - - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - actor.addAbility('fs_saber_reflect_buff') - + actor.addAbility("fs_saber_reflect_buff") return def removeAbilities(core, actor, player): - - actor.removeAbility('fs_saber_reflect_buff') - + actor.removeAbility("fs_saber_reflect_buff") return diff --git a/scripts/expertise/expertise_fs_path_saber_shackle_1.py b/scripts/expertise/expertise_fs_path_saber_shackle_1.py index 9f2fe63f..e7115fa0 100644 --- a/scripts/expertise/expertise_fs_path_saber_shackle_1.py +++ b/scripts/expertise/expertise_fs_path_saber_shackle_1.py @@ -1,52 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'force_sensitive_1a': - return - - actor.addSkill('expertise_fs_path_saber_shackle_1') - - actor.addSkillMod('expertise_stance_saber_throw_snare_chance', 25) - actor.addSkillMod('expertise_stance_saber_throw_root_chance', 2) - actor.addSkillMod('expertise_damage_line_fs_dm', 1) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'force_sensitive_1a': - return - - actor.removeSkill('expertise_fs_path_saber_shackle_1') - - actor.removeSkillMod('expertise_stance_saber_throw_snare_chance', 25) - actor.removeSkillMod('expertise_stance_saber_throw_root_chance', 2) - actor.removeSkillMod('expertise_damage_line_fs_dm', 1) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_fs_path_saber_shackle_1") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_fs_path_saber_shackle_1") return diff --git a/scripts/expertise/expertise_fs_path_saber_shackle_2.py b/scripts/expertise/expertise_fs_path_saber_shackle_2.py index 76d3d5fa..cc2cdab9 100644 --- a/scripts/expertise/expertise_fs_path_saber_shackle_2.py +++ b/scripts/expertise/expertise_fs_path_saber_shackle_2.py @@ -1,52 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'force_sensitive_1a': - return - - actor.addSkill('expertise_fs_path_saber_shackle_2') - - actor.addSkillMod('expertise_stance_saber_throw_snare_chance', 25) - actor.addSkillMod('expertise_stance_saber_throw_root_chance', 2) - actor.addSkillMod('expertise_damage_line_fs_dm', 1) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'force_sensitive_1a': - return - - actor.removeSkill('expertise_fs_path_saber_shackle_2') - - actor.removeSkillMod('expertise_stance_saber_throw_snare_chance', 25) - actor.removeSkillMod('expertise_stance_saber_throw_root_chance', 2) - actor.removeSkillMod('expertise_damage_line_fs_dm', 1) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_fs_path_saber_shackle_2") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_fs_path_saber_shackle_2") return diff --git a/scripts/expertise/expertise_fs_path_saber_shackle_3.py b/scripts/expertise/expertise_fs_path_saber_shackle_3.py index 7c4b0c3e..426199d1 100644 --- a/scripts/expertise/expertise_fs_path_saber_shackle_3.py +++ b/scripts/expertise/expertise_fs_path_saber_shackle_3.py @@ -1,52 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'force_sensitive_1a': - return - - actor.addSkill('expertise_fs_path_saber_shackle_3') - - actor.addSkillMod('expertise_stance_saber_throw_snare_chance', 25) - actor.addSkillMod('expertise_stance_saber_throw_root_chance', 2) - actor.addSkillMod('expertise_damage_line_fs_dm', 1) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'force_sensitive_1a': - return - - actor.removeSkill('expertise_fs_path_saber_shackle_3') - - actor.removeSkillMod('expertise_stance_saber_throw_snare_chance', 25) - actor.removeSkillMod('expertise_stance_saber_throw_root_chance', 2) - actor.removeSkillMod('expertise_damage_line_fs_dm', 1) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_fs_path_saber_shackle_3") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_fs_path_saber_shackle_3") return diff --git a/scripts/expertise/expertise_fs_path_saber_shackle_4.py b/scripts/expertise/expertise_fs_path_saber_shackle_4.py index 889e106d..a20668d8 100644 --- a/scripts/expertise/expertise_fs_path_saber_shackle_4.py +++ b/scripts/expertise/expertise_fs_path_saber_shackle_4.py @@ -1,52 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'force_sensitive_1a': - return - - actor.addSkill('expertise_fs_path_saber_shackle_4') - - actor.addSkillMod('expertise_stance_saber_throw_snare_chance', 25) - actor.addSkillMod('expertise_stance_saber_throw_root_chance', 2) - actor.addSkillMod('expertise_damage_line_fs_dm', 1) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'force_sensitive_1a': - return - - actor.removeSkill('expertise_fs_path_saber_shackle_4') - - actor.removeSkillMod('expertise_stance_saber_throw_snare_chance', 25) - actor.removeSkillMod('expertise_stance_saber_throw_root_chance', 2) - actor.removeSkillMod('expertise_damage_line_fs_dm', 1) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_fs_path_saber_shackle_4") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_fs_path_saber_shackle_4") return diff --git a/scripts/expertise/expertise_fs_path_soothing_aura_1.py b/scripts/expertise/expertise_fs_path_soothing_aura_1.py index d2ce8171..ab8c5c6b 100644 --- a/scripts/expertise/expertise_fs_path_soothing_aura_1.py +++ b/scripts/expertise/expertise_fs_path_soothing_aura_1.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'force_sensitive_1a': - return - - actor.addSkill('expertise_fs_path_soothing_aura_1') - - actor.addSkillMod('expertise_stance_healing_line_fs_heal', 25) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'force_sensitive_1a': - return - - actor.removeSkill('expertise_fs_path_soothing_aura_1') - - actor.removeSkillMod('expertise_stance_healing_line_fs_heal', 25) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_fs_path_soothing_aura_1") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_fs_path_soothing_aura_1") return diff --git a/scripts/expertise/expertise_fs_path_soothing_aura_2.py b/scripts/expertise/expertise_fs_path_soothing_aura_2.py index eb134506..e04ed993 100644 --- a/scripts/expertise/expertise_fs_path_soothing_aura_2.py +++ b/scripts/expertise/expertise_fs_path_soothing_aura_2.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'force_sensitive_1a': - return - - actor.addSkill('expertise_fs_path_soothing_aura_2') - - actor.addSkillMod('expertise_stance_healing_line_fs_heal', 25) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'force_sensitive_1a': - return - - actor.removeSkill('expertise_fs_path_soothing_aura_2') - - actor.removeSkillMod('expertise_stance_healing_line_fs_heal', 25) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_fs_path_soothing_aura_2") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_fs_path_soothing_aura_2") return diff --git a/scripts/expertise/expertise_fs_path_soothing_aura_3.py b/scripts/expertise/expertise_fs_path_soothing_aura_3.py index ea794b23..c7ec3e0b 100644 --- a/scripts/expertise/expertise_fs_path_soothing_aura_3.py +++ b/scripts/expertise/expertise_fs_path_soothing_aura_3.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'force_sensitive_1a': - return - - actor.addSkill('expertise_fs_path_soothing_aura_3') - - actor.addSkillMod('expertise_stance_healing_line_fs_heal', 25) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'force_sensitive_1a': - return - - actor.removeSkill('expertise_fs_path_soothing_aura_3') - - actor.removeSkillMod('expertise_stance_healing_line_fs_heal', 25) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_fs_path_soothing_aura_3") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_fs_path_soothing_aura_3") return diff --git a/scripts/expertise/expertise_fs_path_soothing_aura_4.py b/scripts/expertise/expertise_fs_path_soothing_aura_4.py index b209ea53..0e3bc9a1 100644 --- a/scripts/expertise/expertise_fs_path_soothing_aura_4.py +++ b/scripts/expertise/expertise_fs_path_soothing_aura_4.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'force_sensitive_1a': - return - - actor.addSkill('expertise_fs_path_soothing_aura_4') - - actor.addSkillMod('expertise_stance_healing_line_fs_heal', 25) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'force_sensitive_1a': - return - - actor.removeSkill('expertise_fs_path_soothing_aura_4') - - actor.removeSkillMod('expertise_stance_healing_line_fs_heal', 25) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_fs_path_soothing_aura_4") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_fs_path_soothing_aura_4") return diff --git a/scripts/expertise/expertise_fs_path_strangulation_1.py b/scripts/expertise/expertise_fs_path_strangulation_1.py index 7e57f9af..b1db621b 100644 --- a/scripts/expertise/expertise_fs_path_strangulation_1.py +++ b/scripts/expertise/expertise_fs_path_strangulation_1.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'force_sensitive_1a': - return - - actor.addSkill('expertise_fs_path_strangulation_1') - - actor.addSkillMod('expertise_fs_imp_choke', 10) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'force_sensitive_1a': - return - - actor.removeSkill('expertise_fs_path_strangulation_1') - - actor.removeSkillMod('expertise_fs_imp_choke', 10) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_fs_path_strangulation_1") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_fs_path_strangulation_1") return diff --git a/scripts/expertise/expertise_fs_path_strangulation_2.py b/scripts/expertise/expertise_fs_path_strangulation_2.py index 40534bff..43c05ab8 100644 --- a/scripts/expertise/expertise_fs_path_strangulation_2.py +++ b/scripts/expertise/expertise_fs_path_strangulation_2.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'force_sensitive_1a': - return - - actor.addSkill('expertise_fs_path_strangulation_2') - - actor.addSkillMod('expertise_fs_imp_choke', 10) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'force_sensitive_1a': - return - - actor.removeSkill('expertise_fs_path_strangulation_2') - - actor.removeSkillMod('expertise_fs_imp_choke', 10) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_fs_path_strangulation_2") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_fs_path_strangulation_2") return diff --git a/scripts/expertise/expertise_fs_path_tempt_hatred_1.py b/scripts/expertise/expertise_fs_path_tempt_hatred_1.py index 7bf99377..c8260021 100644 --- a/scripts/expertise/expertise_fs_path_tempt_hatred_1.py +++ b/scripts/expertise/expertise_fs_path_tempt_hatred_1.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'force_sensitive_1a': - return - - actor.addSkill('expertise_fs_path_tempt_hatred_1') - - actor.addSkillMod('expertise_focus_damage_add_to_action', 2) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'force_sensitive_1a': - return - - actor.removeSkill('expertise_fs_path_tempt_hatred_1') - - actor.removeSkillMod('expertise_focus_damage_add_to_action', 2) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_fs_path_tempt_hatred_1") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_fs_path_tempt_hatred_1") return diff --git a/scripts/expertise/expertise_fs_path_tempt_hatred_2.py b/scripts/expertise/expertise_fs_path_tempt_hatred_2.py index 9abf4c24..cced0afd 100644 --- a/scripts/expertise/expertise_fs_path_tempt_hatred_2.py +++ b/scripts/expertise/expertise_fs_path_tempt_hatred_2.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'force_sensitive_1a': - return - - actor.addSkill('expertise_fs_path_tempt_hatred_2') - - actor.addSkillMod('expertise_focus_damage_add_to_action', 2) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'force_sensitive_1a': - return - - actor.removeSkill('expertise_fs_path_tempt_hatred_2') - - actor.removeSkillMod('expertise_focus_damage_add_to_action', 2) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_fs_path_tempt_hatred_2") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_fs_path_tempt_hatred_2") return diff --git a/scripts/expertise/expertise_fs_path_wracking_energy_1.py b/scripts/expertise/expertise_fs_path_wracking_energy_1.py index 425b7931..25e70e11 100644 --- a/scripts/expertise/expertise_fs_path_wracking_energy_1.py +++ b/scripts/expertise/expertise_fs_path_wracking_energy_1.py @@ -1,52 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'force_sensitive_1a': - return - - actor.addSkill('expertise_fs_path_wracking_energy_1') - - actor.addSkillMod('expertise_fs_dm_armor_bypass', 25) - actor.addSkillMod('expertise_buff_duration_line_fs_ae_dm_cc', 2) - actor.addSkillMod('expertise_buff_chance_line_fs_ae_dm_cc', 100) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'force_sensitive_1a': - return - - actor.removeSkill('expertise_fs_path_wracking_energy_1') - - actor.removeSkillMod('expertise_fs_dm_armor_bypass', 25) - actor.removeSkillMod('expertise_buff_duration_line_fs_ae_dm_cc', 2) - actor.removeSkillMod('expertise_buff_chance_line_fs_ae_dm_cc', 100) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_fs_path_wracking_energy_1") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_fs_path_wracking_energy_1") return diff --git a/scripts/expertise/expertise_fs_path_wracking_energy_2.py b/scripts/expertise/expertise_fs_path_wracking_energy_2.py index 298130bc..cd1ed137 100644 --- a/scripts/expertise/expertise_fs_path_wracking_energy_2.py +++ b/scripts/expertise/expertise_fs_path_wracking_energy_2.py @@ -1,50 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'force_sensitive_1a': - return - - actor.addSkill('expertise_fs_path_wracking_energy_2') - - actor.addSkillMod('expertise_fs_dm_armor_bypass', 25) - actor.addSkillMod('expertise_buff_duration_line_fs_ae_dm_cc', 2) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'force_sensitive_1a': - return - - actor.removeSkill('expertise_fs_path_wracking_energy_2') - - actor.removeSkillMod('expertise_fs_dm_armor_bypass', 25) - actor.removeSkillMod('expertise_buff_duration_line_fs_ae_dm_cc', 2) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_fs_path_wracking_energy_2") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_fs_path_wracking_energy_2") return diff --git a/scripts/expertise/expertise_fs_path_wracking_energy_3.py b/scripts/expertise/expertise_fs_path_wracking_energy_3.py index 7ebb9e6a..00b73ffc 100644 --- a/scripts/expertise/expertise_fs_path_wracking_energy_3.py +++ b/scripts/expertise/expertise_fs_path_wracking_energy_3.py @@ -1,50 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'force_sensitive_1a': - return - - actor.addSkill('expertise_fs_path_wracking_energy_3') - - actor.addSkillMod('expertise_fs_dm_armor_bypass', 25) - actor.addSkillMod('expertise_buff_duration_line_fs_ae_dm_cc', 2) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'force_sensitive_1a': - return - - actor.removeSkill('expertise_fs_path_wracking_energy_3') - - actor.removeSkillMod('expertise_fs_dm_armor_bypass', 25) - actor.removeSkillMod('expertise_buff_duration_line_fs_ae_dm_cc', 2) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_fs_path_wracking_energy_3") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_fs_path_wracking_energy_3") return diff --git a/scripts/expertise/expertise_fs_path_wracking_energy_4.py b/scripts/expertise/expertise_fs_path_wracking_energy_4.py index 6818335f..86641a26 100644 --- a/scripts/expertise/expertise_fs_path_wracking_energy_4.py +++ b/scripts/expertise/expertise_fs_path_wracking_energy_4.py @@ -1,50 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'force_sensitive_1a': - return - - actor.addSkill('expertise_fs_path_wracking_energy_4') - - actor.addSkillMod('expertise_fs_dm_armor_bypass', 25) - actor.addSkillMod('expertise_buff_duration_line_fs_ae_dm_cc', 2) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'force_sensitive_1a': - return - - actor.removeSkill('expertise_fs_path_wracking_energy_4') - - actor.removeSkillMod('expertise_fs_dm_armor_bypass', 25) - actor.removeSkillMod('expertise_buff_duration_line_fs_ae_dm_cc', 2) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_fs_path_wracking_energy_4") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_fs_path_wracking_energy_4") return diff --git a/scripts/expertise/expertise_me_agility_1.py b/scripts/expertise/expertise_me_agility_1.py index 29ea50ff..62abf270 100644 --- a/scripts/expertise/expertise_me_agility_1.py +++ b/scripts/expertise/expertise_me_agility_1.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'medic_1a': - return - - actor.addSkill('expertise_me_agility_1') - - actor.addSkillMod('agility_modified', 25) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'medic_1a': - return - - actor.removeSkill('expertise_me_agility_1') - - actor.removeSkillMod('agility_modified', 25) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_me_agility_1") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_me_agility_1") return diff --git a/scripts/expertise/expertise_me_agility_2.py b/scripts/expertise/expertise_me_agility_2.py index f92f5a4b..d9f1bc7b 100644 --- a/scripts/expertise/expertise_me_agility_2.py +++ b/scripts/expertise/expertise_me_agility_2.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'medic_1a': - return - - actor.addSkill('expertise_me_agility_2') - - actor.addSkillMod('agility_modified', 25) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'medic_1a': - return - - actor.removeSkill('expertise_me_agility_2') - - actor.removeSkillMod('agility_modified', 25) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_me_agility_2") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_me_agility_2") return diff --git a/scripts/expertise/expertise_me_agility_3.py b/scripts/expertise/expertise_me_agility_3.py index 7441af33..1d58506f 100644 --- a/scripts/expertise/expertise_me_agility_3.py +++ b/scripts/expertise/expertise_me_agility_3.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'medic_1a': - return - - actor.addSkill('expertise_me_agility_3') - - actor.addSkillMod('agility_modified', 25) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'medic_1a': - return - - actor.removeSkill('expertise_me_agility_3') - - actor.removeSkillMod('agility_modified', 25) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_me_agility_3") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_me_agility_3") return diff --git a/scripts/expertise/expertise_me_agility_4.py b/scripts/expertise/expertise_me_agility_4.py index 89603b75..ab6d2201 100644 --- a/scripts/expertise/expertise_me_agility_4.py +++ b/scripts/expertise/expertise_me_agility_4.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'medic_1a': - return - - actor.addSkill('expertise_me_agility_4') - - actor.addSkillMod('agility_modified', 25) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'medic_1a': - return - - actor.removeSkill('expertise_me_agility_4') - - actor.removeSkillMod('agility_modified', 25) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_me_agility_4") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_me_agility_4") return diff --git a/scripts/expertise/expertise_me_agro_healing_1.py b/scripts/expertise/expertise_me_agro_healing_1.py index 5e44ee56..35bcdccc 100644 --- a/scripts/expertise/expertise_me_agro_healing_1.py +++ b/scripts/expertise/expertise_me_agro_healing_1.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'medic_1a': - return - - actor.addSkill('expertise_me_agro_healing_1') - - actor.addSkillMod('expertise_agro_healing', 10) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'medic_1a': - return - - actor.removeSkill('expertise_me_agro_healing_1') - - actor.removeSkillMod('expertise_agro_healing', 10) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_me_agro_healing_1") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_me_agro_healing_1") return diff --git a/scripts/expertise/expertise_me_agro_healing_2.py b/scripts/expertise/expertise_me_agro_healing_2.py index 454ce643..40fbc169 100644 --- a/scripts/expertise/expertise_me_agro_healing_2.py +++ b/scripts/expertise/expertise_me_agro_healing_2.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'medic_1a': - return - - actor.addSkill('expertise_me_agro_healing_2') - - actor.addSkillMod('expertise_agro_healing', 20) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'medic_1a': - return - - actor.removeSkill('expertise_me_agro_healing_2') - - actor.removeSkillMod('expertise_agro_healing', 20) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_me_agro_healing_2") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_me_agro_healing_2") return diff --git a/scripts/expertise/expertise_me_agro_healing_3.py b/scripts/expertise/expertise_me_agro_healing_3.py index b795406e..4deaea9a 100644 --- a/scripts/expertise/expertise_me_agro_healing_3.py +++ b/scripts/expertise/expertise_me_agro_healing_3.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'medic_1a': - return - - actor.addSkill('expertise_me_agro_healing_3') - - actor.addSkillMod('expertise_agro_healing', 20) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'medic_1a': - return - - actor.removeSkill('expertise_me_agro_healing_3') - - actor.removeSkillMod('expertise_agro_healing', 20) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_me_agro_healing_3") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_me_agro_healing_3") return diff --git a/scripts/expertise/expertise_me_bacta_bomb_1.py b/scripts/expertise/expertise_me_bacta_bomb_1.py index 64d190c5..40336997 100644 --- a/scripts/expertise/expertise_me_bacta_bomb_1.py +++ b/scripts/expertise/expertise_me_bacta_bomb_1.py @@ -1,48 +1,22 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'medic_1a': - return - - actor.addSkill('expertise_me_bacta_bomb_1') - - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'medic_1a': - return - - actor.removeSkill('expertise_me_bacta_bomb_1') - - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - actor.addAbility('me_bacta_bomb_1') - + if actor.getLevel() >= 26: + actor.addAbility("me_bacta_bomb_1") + if actor.getLevel() >= 34: + actor.addAbility("me_bacta_bomb_2") + if actor.getLevel() >= 48: + actor.addAbility("me_bacta_bomb_3") + if actor.getLevel() >= 62: + actor.addAbility("me_bacta_bomb_4") + if actor.getLevel() >= 76: + actor.addAbility("me_bacta_bomb_5") return def removeAbilities(core, actor, player): - - actor.removeAbility('me_bacta_bomb_1') - + actor.removeAbility("me_bacta_bomb_1") + actor.removeAbility("me_bacta_bomb_2") + actor.removeAbility("me_bacta_bomb_3") + actor.removeAbility("me_bacta_bomb_4") + actor.removeAbility("me_bacta_bomb_5") return diff --git a/scripts/expertise/expertise_me_bacta_grenade_1.py b/scripts/expertise/expertise_me_bacta_grenade_1.py index 2f16ef84..762bbabc 100644 --- a/scripts/expertise/expertise_me_bacta_grenade_1.py +++ b/scripts/expertise/expertise_me_bacta_grenade_1.py @@ -1,48 +1,22 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'medic_1a': - return - - actor.addSkill('expertise_me_bacta_grenade_1') - - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'medic_1a': - return - - actor.removeSkill('expertise_me_bacta_grenade_1') - - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - actor.addAbility('me_bacta_grenade_1') - + if actor.getLevel() >= 26: + actor.addAbility("me_bacta_grenade_1") + if actor.getLevel() >= 34: + actor.addAbility("me_bacta_grenade_2") + if actor.getLevel() >= 48: + actor.addAbility("me_bacta_grenade_3") + if actor.getLevel() >= 62: + actor.addAbility("me_bacta_grenade_4") + if actor.getLevel() >= 76: + actor.addAbility("me_bacta_grenade_5") return def removeAbilities(core, actor, player): - - actor.removeAbility('me_bacta_grenade_1') - + actor.removeAbility("me_bacta_grenade_1") + actor.removeAbility("me_bacta_grenade_2") + actor.removeAbility("me_bacta_grenade_3") + actor.removeAbility("me_bacta_grenade_4") + actor.removeAbility("me_bacta_grenade_5") return diff --git a/scripts/expertise/expertise_me_bacta_resistance_1.py b/scripts/expertise/expertise_me_bacta_resistance_1.py index 1c26ade5..f35efe8f 100644 --- a/scripts/expertise/expertise_me_bacta_resistance_1.py +++ b/scripts/expertise/expertise_me_bacta_resistance_1.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'medic_1a': - return - - actor.addSkill('expertise_me_bacta_resistance_1') - - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'medic_1a': - return - - actor.removeSkill('expertise_me_bacta_resistance_1') - - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - actor.addAbility('me_bacta_resistance_1') - + actor.addAbility("me_bacta_resistance_1") return def removeAbilities(core, actor, player): - - actor.removeAbility('me_bacta_resistance_1') - + actor.removeAbility("me_bacta_resistance_1") return diff --git a/scripts/expertise/expertise_me_blood_cleaners_1.py b/scripts/expertise/expertise_me_blood_cleaners_1.py index b4de82c1..7405f78d 100644 --- a/scripts/expertise/expertise_me_blood_cleaners_1.py +++ b/scripts/expertise/expertise_me_blood_cleaners_1.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'medic_1a': - return - - actor.addSkill('expertise_me_blood_cleaners_1') - - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'medic_1a': - return - - actor.removeSkill('expertise_me_blood_cleaners_1') - - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - actor.addAbility('me_blood_cleaners_1') - + actor.addAbility("me_blood_cleaners_1") return def removeAbilities(core, actor, player): - - actor.removeAbility('me_blood_cleaners_1') - + actor.removeAbility("me_blood_clearners_1") return diff --git a/scripts/expertise/expertise_me_burst_1.py b/scripts/expertise/expertise_me_burst_1.py index f9b65f16..2fff6848 100644 --- a/scripts/expertise/expertise_me_burst_1.py +++ b/scripts/expertise/expertise_me_burst_1.py @@ -1,48 +1,22 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'medic_1a': - return - - actor.addSkill('expertise_me_burst_1') - - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'medic_1a': - return - - actor.removeSkill('expertise_me_burst_1') - - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - actor.addAbility('me_burst_1') - + if actor.getLevel() >= 26: + actor.addAbility("me_burst_1") + if actor.getLevel() >= 34: + actor.addAbility("me_burst_2") + if actor.getLevel() >= 48: + actor.addAbility("me_burst_3") + if actor.getLevel() >= 62: + actor.addAbility("me_burst_4") + if actor.getLevel() >= 76: + actor.addAbility("me_burst_5") return def removeAbilities(core, actor, player): - - actor.removeAbility('me_burst_1') - + actor.removeAbility("me_burst_1") + actor.removeAbility("me_burst_2") + actor.removeAbility("me_burst_3") + actor.removeAbility("me_burst_4") + actor.removeAbility("me_burst_5") return diff --git a/scripts/expertise/expertise_me_carbine_damage_1.py b/scripts/expertise/expertise_me_carbine_damage_1.py index ae18ecf9..4cdfd0d0 100644 --- a/scripts/expertise/expertise_me_carbine_damage_1.py +++ b/scripts/expertise/expertise_me_carbine_damage_1.py @@ -1,50 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'medic_1a': - return - - actor.addSkill('expertise_me_carbine_damage_1') - - actor.addSkillMod('expertise_damage_weapon_1', 2) - actor.addSkillMod('expertise_damage_weapon_2', 2) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'medic_1a': - return - - actor.removeSkill('expertise_me_carbine_damage_1') - - actor.removeSkillMod('expertise_damage_weapon_1', 2) - actor.removeSkillMod('expertise_damage_weapon_2', 2) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_me_carbine_damage_1") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_me_carbine_damage_1") return diff --git a/scripts/expertise/expertise_me_carbine_damage_2.py b/scripts/expertise/expertise_me_carbine_damage_2.py index 50bd5fa2..2ca975d7 100644 --- a/scripts/expertise/expertise_me_carbine_damage_2.py +++ b/scripts/expertise/expertise_me_carbine_damage_2.py @@ -1,50 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'medic_1a': - return - - actor.addSkill('expertise_me_carbine_damage_2') - - actor.addSkillMod('expertise_damage_weapon_1', 2) - actor.addSkillMod('expertise_damage_weapon_2', 2) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'medic_1a': - return - - actor.removeSkill('expertise_me_carbine_damage_2') - - actor.removeSkillMod('expertise_damage_weapon_1', 2) - actor.removeSkillMod('expertise_damage_weapon_2', 2) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_me_carbine_damage_2") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_me_carbine_damage_2") return diff --git a/scripts/expertise/expertise_me_carbine_damage_3.py b/scripts/expertise/expertise_me_carbine_damage_3.py index 8a65e510..0fec9aac 100644 --- a/scripts/expertise/expertise_me_carbine_damage_3.py +++ b/scripts/expertise/expertise_me_carbine_damage_3.py @@ -1,50 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'medic_1a': - return - - actor.addSkill('expertise_me_carbine_damage_3') - - actor.addSkillMod('expertise_damage_weapon_1', 3) - actor.addSkillMod('expertise_damage_weapon_2', 3) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'medic_1a': - return - - actor.removeSkill('expertise_me_carbine_damage_3') - - actor.removeSkillMod('expertise_damage_weapon_1', 3) - actor.removeSkillMod('expertise_damage_weapon_2', 3) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_me_carbine_damage_3") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_me_carbine_damage_3") return diff --git a/scripts/expertise/expertise_me_carbine_damage_4.py b/scripts/expertise/expertise_me_carbine_damage_4.py index ddd1ca17..23dd0479 100644 --- a/scripts/expertise/expertise_me_carbine_damage_4.py +++ b/scripts/expertise/expertise_me_carbine_damage_4.py @@ -1,50 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'medic_1a': - return - - actor.addSkill('expertise_me_carbine_damage_4') - - actor.addSkillMod('expertise_damage_weapon_1', 3) - actor.addSkillMod('expertise_damage_weapon_2', 3) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'medic_1a': - return - - actor.removeSkill('expertise_me_carbine_damage_4') - - actor.removeSkillMod('expertise_damage_weapon_1', 3) - actor.removeSkillMod('expertise_damage_weapon_2', 3) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_me_carbine_damage_4") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_me_carbine_damage_4") return diff --git a/scripts/expertise/expertise_me_cranial_smash_1.py b/scripts/expertise/expertise_me_cranial_smash_1.py index 98d77547..220198de 100644 --- a/scripts/expertise/expertise_me_cranial_smash_1.py +++ b/scripts/expertise/expertise_me_cranial_smash_1.py @@ -1,48 +1,22 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'medic_1a': - return - - actor.addSkill('expertise_me_cranial_smash_1') - - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'medic_1a': - return - - actor.removeSkill('expertise_me_cranial_smash_1') - - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - actor.addAbility('me_cranial_smash_1') - + if actor.getLevel() >= 26: + actor.addAbility("me_cranial_smash_1") + if actor.getLevel() >= 34: + actor.addAbility("me_cranial_smash_2") + if actor.getLevel() >= 48: + actor.addAbility("me_cranial_smash_3) + if actor.getLevel() >= 62: + actor.addAbility("me_cranial_smash_4") + if actor.getLevel() >= 76: + actor.addAbility("me_cranial_smash_5") return def removeAbilities(core, actor, player): - - actor.removeAbility('me_cranial_smash_1') - + actor.removeAbility("me_cranial_smash_1") + actor.removeAbility("me_cranial_smash_2") + actor.removeAbility("me_cranial_smash_3") + actor.removeAbility("me_cranial_smash_4") + actor.removeAbility("me_cranial_smash_5") return diff --git a/scripts/expertise/expertise_me_cure_affliction_1.py b/scripts/expertise/expertise_me_cure_affliction_1.py index 6a794b64..7a783eea 100644 --- a/scripts/expertise/expertise_me_cure_affliction_1.py +++ b/scripts/expertise/expertise_me_cure_affliction_1.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'medic_1a': - return - - actor.addSkill('expertise_me_cure_affliction_1') - - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'medic_1a': - return - - actor.removeSkill('expertise_me_cure_affliction_1') - - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - actor.addAbility('me_cure_affliction_1') - + actor.addAbility("me_cure_affliction_1") return def removeAbilities(core, actor, player): - - actor.removeAbility('me_cure_affliction_1') - + actor.removeAbility("me_cure_affliction_1") return diff --git a/scripts/expertise/expertise_me_dot_damage_1.py b/scripts/expertise/expertise_me_dot_damage_1.py index 3251e445..163a8d86 100644 --- a/scripts/expertise/expertise_me_dot_damage_1.py +++ b/scripts/expertise/expertise_me_dot_damage_1.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'medic_1a': - return - - actor.addSkill('expertise_me_dot_damage_1') - - actor.addSkillMod('expertise_dot_increase', 5) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'medic_1a': - return - - actor.removeSkill('expertise_me_dot_damage_1') - - actor.removeSkillMod('expertise_dot_increase', 5) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_me_dot_damage_1") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_me_dot_damage_1") return diff --git a/scripts/expertise/expertise_me_dot_damage_2.py b/scripts/expertise/expertise_me_dot_damage_2.py index 4c361396..0deae54e 100644 --- a/scripts/expertise/expertise_me_dot_damage_2.py +++ b/scripts/expertise/expertise_me_dot_damage_2.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'medic_1a': - return - - actor.addSkill('expertise_me_dot_damage_2') - - actor.addSkillMod('expertise_dot_increase', 5) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'medic_1a': - return - - actor.removeSkill('expertise_me_dot_damage_2') - - actor.removeSkillMod('expertise_dot_increase', 5) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_me_dot_damage_2") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_me_dot_damage_2") return diff --git a/scripts/expertise/expertise_me_dot_damage_3.py b/scripts/expertise/expertise_me_dot_damage_3.py index 84865714..11ff1f05 100644 --- a/scripts/expertise/expertise_me_dot_damage_3.py +++ b/scripts/expertise/expertise_me_dot_damage_3.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'medic_1a': - return - - actor.addSkill('expertise_me_dot_damage_3') - - actor.addSkillMod('expertise_dot_increase', 5) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'medic_1a': - return - - actor.removeSkill('expertise_me_dot_damage_3') - - actor.removeSkillMod('expertise_dot_increase', 5) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_me_dot_damage_3") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_me_dot_damage_3") return diff --git a/scripts/expertise/expertise_me_dot_duration_1.py b/scripts/expertise/expertise_me_dot_duration_1.py index b7962f70..c3a9b6a5 100644 --- a/scripts/expertise/expertise_me_dot_duration_1.py +++ b/scripts/expertise/expertise_me_dot_duration_1.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'medic_1a': - return - - actor.addSkill('expertise_me_dot_duration_1') - - actor.addSkillMod('expertise_dot_duration_line_me_dot', 3) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'medic_1a': - return - - actor.removeSkill('expertise_me_dot_duration_1') - - actor.removeSkillMod('expertise_dot_duration_line_me_dot', 3) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_me_dot_duration_1") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_me_dot_duration_1") return diff --git a/scripts/expertise/expertise_me_dot_duration_2.py b/scripts/expertise/expertise_me_dot_duration_2.py index 7a514071..61309ba1 100644 --- a/scripts/expertise/expertise_me_dot_duration_2.py +++ b/scripts/expertise/expertise_me_dot_duration_2.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'medic_1a': - return - - actor.addSkill('expertise_me_dot_duration_2') - - actor.addSkillMod('expertise_dot_duration_line_me_dot', 3) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'medic_1a': - return - - actor.removeSkill('expertise_me_dot_duration_2') - - actor.removeSkillMod('expertise_dot_duration_line_me_dot', 3) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_me_dot_duration_2") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_me_dot_duration_2") return diff --git a/scripts/expertise/expertise_me_dot_duration_3.py b/scripts/expertise/expertise_me_dot_duration_3.py index 8b2bb169..6f7b45eb 100644 --- a/scripts/expertise/expertise_me_dot_duration_3.py +++ b/scripts/expertise/expertise_me_dot_duration_3.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'medic_1a': - return - - actor.addSkill('expertise_me_dot_duration_3') - - actor.addSkillMod('expertise_dot_duration_line_me_dot', 4) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'medic_1a': - return - - actor.removeSkill('expertise_me_dot_duration_3') - - actor.removeSkillMod('expertise_dot_duration_line_me_dot', 4) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_me_dot_duration_3") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_me_dot_duration_3") return diff --git a/scripts/expertise/expertise_me_dueterium_rounds_1.py b/scripts/expertise/expertise_me_dueterium_rounds_1.py index b7d57e44..ed57795c 100644 --- a/scripts/expertise/expertise_me_dueterium_rounds_1.py +++ b/scripts/expertise/expertise_me_dueterium_rounds_1.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'medic_1a': - return - - actor.addSkill('expertise_me_dueterium_rounds_1') - - actor.addSkillMod('expertise_dueterium_rounds_proc', 5) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'medic_1a': - return - - actor.removeSkill('expertise_me_dueterium_rounds_1') - - actor.removeSkillMod('expertise_dueterium_rounds_proc', 5) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_me_dueterium_rounds_1") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_me_dueterium_rounds_1") return diff --git a/scripts/expertise/expertise_me_electrolyte_drain_1.py b/scripts/expertise/expertise_me_electrolyte_drain_1.py index d7eb33ac..1daa98a3 100644 --- a/scripts/expertise/expertise_me_electrolyte_drain_1.py +++ b/scripts/expertise/expertise_me_electrolyte_drain_1.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'medic_1a': - return - - actor.addSkill('expertise_me_electrolyte_drain_1') - - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'medic_1a': - return - - actor.removeSkill('expertise_me_electrolyte_drain_1') - - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - actor.addAbility('me_electrolyte_drain_1') - + actor.addAbility("me_electrolyte_drain_1") return def removeAbilities(core, actor, player): - - actor.removeAbility('me_electrolyte_drain_1') - + actor.removeAbility("me_electrolyte_drain_1") return diff --git a/scripts/expertise/expertise_me_energy_armor_1.py b/scripts/expertise/expertise_me_energy_armor_1.py index 2fc984be..fd7c40f9 100644 --- a/scripts/expertise/expertise_me_energy_armor_1.py +++ b/scripts/expertise/expertise_me_energy_armor_1.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'medic_1a': - return - - actor.addSkill('expertise_me_energy_armor_1') - - actor.addSkillMod('expertise_innate_protection_all', 225) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'medic_1a': - return - - actor.removeSkill('expertise_me_energy_armor_1') - - actor.removeSkillMod('expertise_innate_protection_all', 225) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_me_energy_armor_1") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_me_energy_armor_1") return diff --git a/scripts/expertise/expertise_me_energy_armor_2.py b/scripts/expertise/expertise_me_energy_armor_2.py index 0d02a8a1..ace09ed5 100644 --- a/scripts/expertise/expertise_me_energy_armor_2.py +++ b/scripts/expertise/expertise_me_energy_armor_2.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'medic_1a': - return - - actor.addSkill('expertise_me_energy_armor_2') - - actor.addSkillMod('expertise_innate_protection_all', 225) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'medic_1a': - return - - actor.removeSkill('expertise_me_energy_armor_2') - - actor.removeSkillMod('expertise_innate_protection_all', 225) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_me_energy_armor_2") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_me_energy_armor_2") return diff --git a/scripts/expertise/expertise_me_energy_armor_3.py b/scripts/expertise/expertise_me_energy_armor_3.py index cfc6f250..1d161f38 100644 --- a/scripts/expertise/expertise_me_energy_armor_3.py +++ b/scripts/expertise/expertise_me_energy_armor_3.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'medic_1a': - return - - actor.addSkill('expertise_me_energy_armor_3') - - actor.addSkillMod('expertise_innate_protection_all', 225) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'medic_1a': - return - - actor.removeSkill('expertise_me_energy_armor_3') - - actor.removeSkillMod('expertise_innate_protection_all', 225) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_me_energy_armor_3") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_me_energy_armor_3") return diff --git a/scripts/expertise/expertise_me_energy_armor_4.py b/scripts/expertise/expertise_me_energy_armor_4.py index 76181747..84fad199 100644 --- a/scripts/expertise/expertise_me_energy_armor_4.py +++ b/scripts/expertise/expertise_me_energy_armor_4.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'medic_1a': - return - - actor.addSkill('expertise_me_energy_armor_4') - - actor.addSkillMod('expertise_innate_protection_all', 225) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'medic_1a': - return - - actor.removeSkill('expertise_me_energy_armor_4') - - actor.removeSkillMod('expertise_innate_protection_all', 225) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_me_energy_armor_4") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_me_energy_armor_4") return diff --git a/scripts/expertise/expertise_me_enhance_agility_1.py b/scripts/expertise/expertise_me_enhance_agility_1.py index fd112eb9..4b49ecc9 100644 --- a/scripts/expertise/expertise_me_enhance_agility_1.py +++ b/scripts/expertise/expertise_me_enhance_agility_1.py @@ -1,48 +1,16 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'medic_1a': - return - - actor.addSkill('expertise_me_enhance_agility_1') - - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'medic_1a': - return - - actor.removeSkill('expertise_me_enhance_agility_1') - - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - actor.addAbility('me_enhance_agility_1') - + if actor.getLevel() >= 10: + actor.addAbility("me_enhance_agility_1") + if actor.getLevel() >= 34: + actor.addAbility("me_enhance_agility_2") + if actor.getLevel() >= 62: + actor.addAbility("me_enhance_agility_3") return def removeAbilities(core, actor, player): - - actor.removeAbility('me_enhance_agility_1') - + actor.removeAbility("me_enhance_agility_1") + actor.removeAbility("me_enhance_agility_2") + actor.removeAbility("me_enhance_agility_3") return diff --git a/scripts/expertise/expertise_me_enhance_block_1.py b/scripts/expertise/expertise_me_enhance_block_1.py index 962c59d5..e6d4a3c6 100644 --- a/scripts/expertise/expertise_me_enhance_block_1.py +++ b/scripts/expertise/expertise_me_enhance_block_1.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'medic_1a': - return - - actor.addSkill('expertise_me_enhance_block_1') - - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'medic_1a': - return - - actor.removeSkill('expertise_me_enhance_block_1') - - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - actor.addAbility('me_enhance_block_1') - + actor.addAbility("me_enhance_block_1") return def removeAbilities(core, actor, player): - - actor.removeAbility('me_enhance_block_1') - + actor.removeAbility("me_enhance_block_1") return diff --git a/scripts/expertise/expertise_me_enhance_dodge_1.py b/scripts/expertise/expertise_me_enhance_dodge_1.py index 60af46b2..60b97cd6 100644 --- a/scripts/expertise/expertise_me_enhance_dodge_1.py +++ b/scripts/expertise/expertise_me_enhance_dodge_1.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'medic_1a': - return - - actor.addSkill('expertise_me_enhance_dodge_1') - - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'medic_1a': - return - - actor.removeSkill('expertise_me_enhance_dodge_1') - - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - actor.addAbility('me_enhance_dodge_1') - + actor.addAbility("me_enhance_dodge_1") return def removeAbilities(core, actor, player): - - actor.removeAbility('me_enhance_dodge_1') - + actor.removeAbility("me_enhance_dodge_1") return diff --git a/scripts/expertise/expertise_me_enhance_duration_1.py b/scripts/expertise/expertise_me_enhance_duration_1.py index 9b54c0a7..85c5c455 100644 --- a/scripts/expertise/expertise_me_enhance_duration_1.py +++ b/scripts/expertise/expertise_me_enhance_duration_1.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'medic_1a': - return - - actor.addSkill('expertise_me_enhance_duration_1') - - actor.addSkillMod('expertise_buff_duration_line_me_enhance', 300) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'medic_1a': - return - - actor.removeSkill('expertise_me_enhance_duration_1') - - actor.removeSkillMod('expertise_buff_duration_line_me_enhance', 300) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_me_enhance_duration_1") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_me_enhance_duration_1") return diff --git a/scripts/expertise/expertise_me_enhance_duration_2.py b/scripts/expertise/expertise_me_enhance_duration_2.py index 4b66e476..ffb8e438 100644 --- a/scripts/expertise/expertise_me_enhance_duration_2.py +++ b/scripts/expertise/expertise_me_enhance_duration_2.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'medic_1a': - return - - actor.addSkill('expertise_me_enhance_duration_2') - - actor.addSkillMod('expertise_buff_duration_line_me_enhance', 300) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'medic_1a': - return - - actor.removeSkill('expertise_me_enhance_duration_2') - - actor.removeSkillMod('expertise_buff_duration_line_me_enhance', 300) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_me_enhance_duration_2") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_me_enhance_duration_2") return diff --git a/scripts/expertise/expertise_me_enhance_duration_3.py b/scripts/expertise/expertise_me_enhance_duration_3.py index 336b9d27..53442947 100644 --- a/scripts/expertise/expertise_me_enhance_duration_3.py +++ b/scripts/expertise/expertise_me_enhance_duration_3.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'medic_1a': - return - - actor.addSkill('expertise_me_enhance_duration_3') - - actor.addSkillMod('expertise_buff_duration_line_me_enhance', 600) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'medic_1a': - return - - actor.removeSkill('expertise_me_enhance_duration_3') - - actor.removeSkillMod('expertise_buff_duration_line_me_enhance', 600) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_me_enhance_duration_3") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_me_enhance_duration_3") return diff --git a/scripts/expertise/expertise_me_enhance_precision_1.py b/scripts/expertise/expertise_me_enhance_precision_1.py index f12da671..c099937d 100644 --- a/scripts/expertise/expertise_me_enhance_precision_1.py +++ b/scripts/expertise/expertise_me_enhance_precision_1.py @@ -1,48 +1,16 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'medic_1a': - return - - actor.addSkill('expertise_me_enhance_precision_1') - - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'medic_1a': - return - - actor.removeSkill('expertise_me_enhance_precision_1') - - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - actor.addAbility('me_enhance_precision_1') - + if actor.getLevel() >= 10: + actor.addAbility("me_enhance_precision_1") + if actor.getLevel() >= 34: + actor.addAbility("me_enhance_precision_2") + if actor.getLevel() >= 62: + actor.addAbility("me_enhance_precision_3") return def removeAbilities(core, actor, player): - - actor.removeAbility('me_enhance_precision_1') - + actor.removeAbility("me_enhance_precision_1") + actor.removeAbility("me_enhance_precision_2") + actor.removeAbility("me_enhance_precision_3") return diff --git a/scripts/expertise/expertise_me_enhance_strength_1.py b/scripts/expertise/expertise_me_enhance_strength_1.py index 29bab818..693b0121 100644 --- a/scripts/expertise/expertise_me_enhance_strength_1.py +++ b/scripts/expertise/expertise_me_enhance_strength_1.py @@ -1,48 +1,16 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'medic_1a': - return - - actor.addSkill('expertise_me_enhance_strength_1') - - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'medic_1a': - return - - actor.removeSkill('expertise_me_enhance_strength_1') - - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - actor.addAbility('me_enhance_strength_1') - + if actor.getLevel() >= 10: + actor.addAbility("me_enhance_strength_1") + if actor.getLevel() >= 34: + actor.addAbility("me_enhance_strength_2") + if actor.getLevel() >= 62: + actor.addAbility("me_enhance_strength_3") return def removeAbilities(core, actor, player): - - actor.removeAbility('me_enhance_strength_1') - + actor.removeAbility("me_enhance_strength_1") + actor.removeAbility("me_enhance_strength_2") + actor.removeAbility("me_enhance_strength_3") return diff --git a/scripts/expertise/expertise_me_enhancement_specialist_1.py b/scripts/expertise/expertise_me_enhancement_specialist_1.py index 145b50e9..ebf28d79 100644 --- a/scripts/expertise/expertise_me_enhancement_specialist_1.py +++ b/scripts/expertise/expertise_me_enhancement_specialist_1.py @@ -1,48 +1,24 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'medic_1a': - return - - actor.addSkill('expertise_me_enhancement_specialist_1') - - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'medic_1a': - return - - actor.removeSkill('expertise_me_enhancement_specialist_1') - - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - actor.addAbility('me_enhance_action_1') - + if actor.getLevel() >= 10: + actor.addAbility("me_enhance_action_1") + if actor.getLevel() >= 34: + actor.addAbility("me_enhance_action_2") + if actor.getLevel() >= 62: + actor.addAbility("me_enhance_action_3") + + if actor.getLevel() >= 48: + actor.addAbility("me_buff_health_2") + if actor.getLevel() >= 76: + actor.addAbility("me_buff_health_3") return def removeAbilities(core, actor, player): + actor.removeAbility("me_enhance_action_1") + actor.removeAbility("me_enhance_action_2") + actor.removeAbility("me_enhance_action_3") - actor.removeAbility('me_enhance_action_1') - + actor.removeAbility("me_buff_health_2") + actor.removeAbility("me_buff_health_3") return diff --git a/scripts/expertise/expertise_me_evasion_1.py b/scripts/expertise/expertise_me_evasion_1.py index 7e62f496..2bbcfee2 100644 --- a/scripts/expertise/expertise_me_evasion_1.py +++ b/scripts/expertise/expertise_me_evasion_1.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'medic_1a': - return - - actor.addSkill('expertise_me_evasion_1') - - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'medic_1a': - return - - actor.removeSkill('expertise_me_evasion_1') - - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - actor.addAbility('me_evasion_1') - + actor.addAbility("me_evasion_1") return def removeAbilities(core, actor, player): - - actor.removeAbility('me_evasion_1') - + actor.removeAbility("me_evasion_1") return diff --git a/scripts/expertise/expertise_me_heal_action_1.py b/scripts/expertise/expertise_me_heal_action_1.py index 984b1b6e..33f3254f 100644 --- a/scripts/expertise/expertise_me_heal_action_1.py +++ b/scripts/expertise/expertise_me_heal_action_1.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'medic_1a': - return - - actor.addSkill('expertise_me_heal_action_1') - - actor.addSkillMod('expertise_action_line_me_heal', 10) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'medic_1a': - return - - actor.removeSkill('expertise_me_heal_action_1') - - actor.removeSkillMod('expertise_action_line_me_heal', 10) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_me_heal_action_1") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_me_heal_action_1") return diff --git a/scripts/expertise/expertise_me_heal_action_2.py b/scripts/expertise/expertise_me_heal_action_2.py index e650d1e5..b10d3548 100644 --- a/scripts/expertise/expertise_me_heal_action_2.py +++ b/scripts/expertise/expertise_me_heal_action_2.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'medic_1a': - return - - actor.addSkill('expertise_me_heal_action_2') - - actor.addSkillMod('expertise_action_line_me_heal', 10) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'medic_1a': - return - - actor.removeSkill('expertise_me_heal_action_2') - - actor.removeSkillMod('expertise_action_line_me_heal', 10) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_me_heal_action_2") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_me_heal_action_2") return diff --git a/scripts/expertise/expertise_me_heal_action_3.py b/scripts/expertise/expertise_me_heal_action_3.py index a5457655..c009d1ae 100644 --- a/scripts/expertise/expertise_me_heal_action_3.py +++ b/scripts/expertise/expertise_me_heal_action_3.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'medic_1a': - return - - actor.addSkill('expertise_me_heal_action_3') - - actor.addSkillMod('expertise_action_line_me_heal', 15) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'medic_1a': - return - - actor.removeSkill('expertise_me_heal_action_3') - - actor.removeSkillMod('expertise_action_line_me_heal', 15) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_me_heal_action_3") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_me_heal_action_3") return diff --git a/scripts/expertise/expertise_me_heal_damage_1.py b/scripts/expertise/expertise_me_heal_damage_1.py index 59b07cdf..ba2a72a5 100644 --- a/scripts/expertise/expertise_me_heal_damage_1.py +++ b/scripts/expertise/expertise_me_heal_damage_1.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'medic_1a': - return - - actor.addSkill('expertise_me_heal_damage_1') - - actor.addSkillMod('expertise_healing_line_me_heal', 5) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'medic_1a': - return - - actor.removeSkill('expertise_me_heal_damage_1') - - actor.removeSkillMod('expertise_healing_line_me_heal', 5) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_me_heal_damage_1") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_me_heal_damage_1") return diff --git a/scripts/expertise/expertise_me_heal_damage_2.py b/scripts/expertise/expertise_me_heal_damage_2.py index c059fc9b..050ba76f 100644 --- a/scripts/expertise/expertise_me_heal_damage_2.py +++ b/scripts/expertise/expertise_me_heal_damage_2.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'medic_1a': - return - - actor.addSkill('expertise_me_heal_damage_2') - - actor.addSkillMod('expertise_healing_line_me_heal', 5) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'medic_1a': - return - - actor.removeSkill('expertise_me_heal_damage_2') - - actor.removeSkillMod('expertise_healing_line_me_heal', 5) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_me_heal_damage_2") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_me_heal_damage_2") return diff --git a/scripts/expertise/expertise_me_heal_damage_3.py b/scripts/expertise/expertise_me_heal_damage_3.py index 94eb5732..3b85bde4 100644 --- a/scripts/expertise/expertise_me_heal_damage_3.py +++ b/scripts/expertise/expertise_me_heal_damage_3.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'medic_1a': - return - - actor.addSkill('expertise_me_heal_damage_3') - - actor.addSkillMod('expertise_healing_line_me_heal', 5) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'medic_1a': - return - - actor.removeSkill('expertise_me_heal_damage_3') - - actor.removeSkillMod('expertise_healing_line_me_heal', 5) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_me_heal_damage_3") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_me_heal_damage_3") return diff --git a/scripts/expertise/expertise_me_heal_damage_4.py b/scripts/expertise/expertise_me_heal_damage_4.py index 85a946e6..e58ddb1a 100644 --- a/scripts/expertise/expertise_me_heal_damage_4.py +++ b/scripts/expertise/expertise_me_heal_damage_4.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'medic_1a': - return - - actor.addSkill('expertise_me_heal_damage_4') - - actor.addSkillMod('expertise_healing_line_me_heal', 10) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'medic_1a': - return - - actor.removeSkill('expertise_me_heal_damage_4') - - actor.removeSkillMod('expertise_healing_line_me_heal', 10) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_me_heal_damage_4") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_me_heal_damage_4") return diff --git a/scripts/expertise/expertise_me_hot_duration_1.py b/scripts/expertise/expertise_me_hot_duration_1.py index dcdd6ac2..c18a4e36 100644 --- a/scripts/expertise/expertise_me_hot_duration_1.py +++ b/scripts/expertise/expertise_me_hot_duration_1.py @@ -1,50 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'medic_1a': - return - - actor.addSkill('expertise_me_hot_duration_1') - - actor.addSkillMod('expertise_healing_line_me_hot', 10) - actor.addSkillMod('expertise_healing_line_me_hot_ae', 10) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'medic_1a': - return - - actor.removeSkill('expertise_me_hot_duration_1') - - actor.removeSkillMod('expertise_healing_line_me_hot', 10) - actor.removeSkillMod('expertise_healing_line_me_hot_ae', 10) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_me_hot_duration_1") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_me_hot_duration_1") return diff --git a/scripts/expertise/expertise_me_hot_duration_2.py b/scripts/expertise/expertise_me_hot_duration_2.py index dccbe005..e89e515c 100644 --- a/scripts/expertise/expertise_me_hot_duration_2.py +++ b/scripts/expertise/expertise_me_hot_duration_2.py @@ -1,50 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'medic_1a': - return - - actor.addSkill('expertise_me_hot_duration_2') - - actor.addSkillMod('expertise_healing_line_me_hot', 10) - actor.addSkillMod('expertise_healing_line_me_hot_ae', 10) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'medic_1a': - return - - actor.removeSkill('expertise_me_hot_duration_2') - - actor.removeSkillMod('expertise_healing_line_me_hot', 10) - actor.removeSkillMod('expertise_healing_line_me_hot_ae', 10) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_me_hot_duration_2") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_me_hot_duration_2") return diff --git a/scripts/expertise/expertise_me_hot_duration_3.py b/scripts/expertise/expertise_me_hot_duration_3.py index 558430c1..ef238d8d 100644 --- a/scripts/expertise/expertise_me_hot_duration_3.py +++ b/scripts/expertise/expertise_me_hot_duration_3.py @@ -1,50 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'medic_1a': - return - - actor.addSkill('expertise_me_hot_duration_3') - - actor.addSkillMod('expertise_healing_line_me_hot', 15) - actor.addSkillMod('expertise_healing_line_me_hot_ae', 15) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'medic_1a': - return - - actor.removeSkill('expertise_me_hot_duration_3') - - actor.removeSkillMod('expertise_healing_line_me_hot', 15) - actor.removeSkillMod('expertise_healing_line_me_hot_ae', 15) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_me_hot_duration_3") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_me_hot_duration_3") return diff --git a/scripts/expertise/expertise_me_hot_duration_4.py b/scripts/expertise/expertise_me_hot_duration_4.py index 9783531f..16368742 100644 --- a/scripts/expertise/expertise_me_hot_duration_4.py +++ b/scripts/expertise/expertise_me_hot_duration_4.py @@ -1,50 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'medic_1a': - return - - actor.addSkill('expertise_me_hot_duration_4') - - actor.addSkillMod('expertise_healing_line_me_hot', 15) - actor.addSkillMod('expertise_healing_line_me_hot_ae', 15) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'medic_1a': - return - - actor.removeSkill('expertise_me_hot_duration_4') - - actor.removeSkillMod('expertise_healing_line_me_hot', 15) - actor.removeSkillMod('expertise_healing_line_me_hot_ae', 15) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_me_hot_duration_4") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_me_hot_duration_4") return diff --git a/scripts/expertise/expertise_me_humanoid_crits_1.py b/scripts/expertise/expertise_me_humanoid_crits_1.py index 4176b559..482342f3 100644 --- a/scripts/expertise/expertise_me_humanoid_crits_1.py +++ b/scripts/expertise/expertise_me_humanoid_crits_1.py @@ -1,50 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'medic_1a': - return - - actor.addSkill('expertise_me_humanoid_crits_1') - - actor.addSkillMod('expertise_critical_niche_pvp', 1) - actor.addSkillMod('expertise_critical_niche_npc', 1) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'medic_1a': - return - - actor.removeSkill('expertise_me_humanoid_crits_1') - - actor.removeSkillMod('expertise_critical_niche_pvp', 1) - actor.removeSkillMod('expertise_critical_niche_npc', 1) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_me_humanoid_crits_1") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_me_humanoid_crits_1") return diff --git a/scripts/expertise/expertise_me_humanoid_crits_2.py b/scripts/expertise/expertise_me_humanoid_crits_2.py index dd7995cb..085396cc 100644 --- a/scripts/expertise/expertise_me_humanoid_crits_2.py +++ b/scripts/expertise/expertise_me_humanoid_crits_2.py @@ -1,50 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'medic_1a': - return - - actor.addSkill('expertise_me_humanoid_crits_2') - - actor.addSkillMod('expertise_critical_niche_pvp', 2) - actor.addSkillMod('expertise_critical_niche_npc', 2) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'medic_1a': - return - - actor.removeSkill('expertise_me_humanoid_crits_2') - - actor.removeSkillMod('expertise_critical_niche_pvp', 2) - actor.removeSkillMod('expertise_critical_niche_npc', 2) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_me_humanoid_crits_2") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_me_humanoid_crits_2") return diff --git a/scripts/expertise/expertise_me_humanoid_crits_3.py b/scripts/expertise/expertise_me_humanoid_crits_3.py index 2351be93..7392d917 100644 --- a/scripts/expertise/expertise_me_humanoid_crits_3.py +++ b/scripts/expertise/expertise_me_humanoid_crits_3.py @@ -1,50 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'medic_1a': - return - - actor.addSkill('expertise_me_humanoid_crits_3') - - actor.addSkillMod('expertise_critical_niche_pvp', 2) - actor.addSkillMod('expertise_critical_niche_npc', 2) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'medic_1a': - return - - actor.removeSkill('expertise_me_humanoid_crits_3') - - actor.removeSkillMod('expertise_critical_niche_pvp', 2) - actor.removeSkillMod('expertise_critical_niche_npc', 2) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_me_humanoid_crits_3") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_me_humanoid_crits_3") return diff --git a/scripts/expertise/expertise_me_induce_insanity_1.py b/scripts/expertise/expertise_me_induce_insanity_1.py index 10f45c55..2817bc0a 100644 --- a/scripts/expertise/expertise_me_induce_insanity_1.py +++ b/scripts/expertise/expertise_me_induce_insanity_1.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'medic_1a': - return - - actor.addSkill('expertise_me_induce_insanity_1') - - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'medic_1a': - return - - actor.removeSkill('expertise_me_induce_insanity_1') - - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - actor.addAbility('me_induce_insanity_1') - + actor.addAbility("me_induce_insanity_1") return def removeAbilities(core, actor, player): - - actor.removeAbility('me_induce_insanity_1') - + actor.removeAbility("me_induce_insanity_1") return diff --git a/scripts/expertise/expertise_me_kinetic_armor_1.py b/scripts/expertise/expertise_me_kinetic_armor_1.py index 26b5dea7..8d78e253 100644 --- a/scripts/expertise/expertise_me_kinetic_armor_1.py +++ b/scripts/expertise/expertise_me_kinetic_armor_1.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'medic_1a': - return - - actor.addSkill('expertise_me_kinetic_armor_1') - - actor.addSkillMod('expertise_innate_protection_all', 225) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'medic_1a': - return - - actor.removeSkill('expertise_me_kinetic_armor_1') - - actor.removeSkillMod('expertise_innate_protection_all', 225) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_me_kinetic_armor_1") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_me_kinetic_armor_1") return diff --git a/scripts/expertise/expertise_me_kinetic_armor_2.py b/scripts/expertise/expertise_me_kinetic_armor_2.py index 72f3ba66..ab5c5e71 100644 --- a/scripts/expertise/expertise_me_kinetic_armor_2.py +++ b/scripts/expertise/expertise_me_kinetic_armor_2.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'medic_1a': - return - - actor.addSkill('expertise_me_kinetic_armor_2') - - actor.addSkillMod('expertise_innate_protection_all', 225) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'medic_1a': - return - - actor.removeSkill('expertise_me_kinetic_armor_2') - - actor.removeSkillMod('expertise_innate_protection_all', 225) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_me_kinetic_armor_2") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_me_kinetic_armor_2") return diff --git a/scripts/expertise/expertise_me_kinetic_armor_3.py b/scripts/expertise/expertise_me_kinetic_armor_3.py index 794c9185..dcdb9751 100644 --- a/scripts/expertise/expertise_me_kinetic_armor_3.py +++ b/scripts/expertise/expertise_me_kinetic_armor_3.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'medic_1a': - return - - actor.addSkill('expertise_me_kinetic_armor_3') - - actor.addSkillMod('expertise_innate_protection_all', 225) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'medic_1a': - return - - actor.removeSkill('expertise_me_kinetic_armor_3') - - actor.removeSkillMod('expertise_innate_protection_all', 225) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_me_kinetic_armor_3") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_me_kinetic_armor_3") return diff --git a/scripts/expertise/expertise_me_kinetic_armor_4.py b/scripts/expertise/expertise_me_kinetic_armor_4.py index 722e4b58..1982a785 100644 --- a/scripts/expertise/expertise_me_kinetic_armor_4.py +++ b/scripts/expertise/expertise_me_kinetic_armor_4.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'medic_1a': - return - - actor.addSkill('expertise_me_kinetic_armor_4') - - actor.addSkillMod('expertise_innate_protection_all', 225) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'medic_1a': - return - - actor.removeSkill('expertise_me_kinetic_armor_4') - - actor.removeSkillMod('expertise_innate_protection_all', 225) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_me_kinetic_armor_4") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_me_kinetic_armor_4") return diff --git a/scripts/expertise/expertise_me_poison_knuckle_1.py b/scripts/expertise/expertise_me_poison_knuckle_1.py index 2b6b617e..7b436d7b 100644 --- a/scripts/expertise/expertise_me_poison_knuckle_1.py +++ b/scripts/expertise/expertise_me_poison_knuckle_1.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'medic_1a': - return - - actor.addSkill('expertise_me_poison_knuckle_1') - - actor.addSkillMod('expertise_poison_knuckle_proc', 5) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'medic_1a': - return - - actor.removeSkill('expertise_me_poison_knuckle_1') - - actor.removeSkillMod('expertise_poison_knuckle_proc', 5) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_me_poison_knuckle_1") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_me_poison_knuckle_1") return diff --git a/scripts/expertise/expertise_me_precision_1.py b/scripts/expertise/expertise_me_precision_1.py index 8c6f96ed..0d344061 100644 --- a/scripts/expertise/expertise_me_precision_1.py +++ b/scripts/expertise/expertise_me_precision_1.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'medic_1a': - return - - actor.addSkill('expertise_me_precision_1') - - actor.addSkillMod('precision_modified', 25) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'medic_1a': - return - - actor.removeSkill('expertise_me_precision_1') - - actor.removeSkillMod('precision_modified', 25) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_me_precision_1") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_me_precision_1") return diff --git a/scripts/expertise/expertise_me_precision_2.py b/scripts/expertise/expertise_me_precision_2.py index 2873f46c..6857d3a2 100644 --- a/scripts/expertise/expertise_me_precision_2.py +++ b/scripts/expertise/expertise_me_precision_2.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'medic_1a': - return - - actor.addSkill('expertise_me_precision_2') - - actor.addSkillMod('precision_modified', 25) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'medic_1a': - return - - actor.removeSkill('expertise_me_precision_2') - - actor.removeSkillMod('precision_modified', 25) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_me_precision_2") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_me_precision_2") return diff --git a/scripts/expertise/expertise_me_precision_3.py b/scripts/expertise/expertise_me_precision_3.py index d8996229..bb36eea4 100644 --- a/scripts/expertise/expertise_me_precision_3.py +++ b/scripts/expertise/expertise_me_precision_3.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'medic_1a': - return - - actor.addSkill('expertise_me_precision_3') - - actor.addSkillMod('precision_modified', 25) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'medic_1a': - return - - actor.removeSkill('expertise_me_precision_3') - - actor.removeSkillMod('precision_modified', 25) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_me_precision_3") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_me_precision_3") return diff --git a/scripts/expertise/expertise_me_precision_4.py b/scripts/expertise/expertise_me_precision_4.py index 2a2643bb..c32b63ff 100644 --- a/scripts/expertise/expertise_me_precision_4.py +++ b/scripts/expertise/expertise_me_precision_4.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'medic_1a': - return - - actor.addSkill('expertise_me_precision_4') - - actor.addSkillMod('precision_modified', 25) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'medic_1a': - return - - actor.removeSkill('expertise_me_precision_4') - - actor.removeSkillMod('precision_modified', 25) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_me_precision_4") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_me_precision_4") return diff --git a/scripts/expertise/expertise_me_reckless_stimulation_1.py b/scripts/expertise/expertise_me_reckless_stimulation_1.py index d8085f3b..0be74ed4 100644 --- a/scripts/expertise/expertise_me_reckless_stimulation_1.py +++ b/scripts/expertise/expertise_me_reckless_stimulation_1.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'medic_1a': - return - - actor.addSkill('expertise_me_reckless_stimulation_1') - - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'medic_1a': - return - - actor.removeSkill('expertise_me_reckless_stimulation_1') - - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - actor.addAbility('me_reckless_stimulation_1') - + actor.addAbility("me_reckless_stimulation_1") return def removeAbilities(core, actor, player): - - actor.removeAbility('me_reckless_stimulation_1') - + actor.removeAbility("me_reckless_stimulation_1") return diff --git a/scripts/expertise/expertise_me_revive_duration_1.py b/scripts/expertise/expertise_me_revive_duration_1.py index 17a19551..d2bcc4ba 100644 --- a/scripts/expertise/expertise_me_revive_duration_1.py +++ b/scripts/expertise/expertise_me_revive_duration_1.py @@ -1,50 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'medic_1a': - return - - actor.addSkill('expertise_me_revive_duration_1') - - actor.addSkillMod('expertise_cooldown_line_me_revive', 5) - actor.addSkillMod('expertise_cooldown_line_me_aoe_revive', 5) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'medic_1a': - return - - actor.removeSkill('expertise_me_revive_duration_1') - - actor.removeSkillMod('expertise_cooldown_line_me_revive', 5) - actor.removeSkillMod('expertise_cooldown_line_me_aoe_revive', 5) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_me_revive_duration_1") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_me_revive_duration_1") return diff --git a/scripts/expertise/expertise_me_revive_duration_2.py b/scripts/expertise/expertise_me_revive_duration_2.py index ffe5144d..5c8a9035 100644 --- a/scripts/expertise/expertise_me_revive_duration_2.py +++ b/scripts/expertise/expertise_me_revive_duration_2.py @@ -1,50 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'medic_1a': - return - - actor.addSkill('expertise_me_revive_duration_2') - - actor.addSkillMod('expertise_cooldown_line_me_revive', 5) - actor.addSkillMod('expertise_cooldown_line_me_aoe_revive', 5) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'medic_1a': - return - - actor.removeSkill('expertise_me_revive_duration_2') - - actor.removeSkillMod('expertise_cooldown_line_me_revive', 5) - actor.removeSkillMod('expertise_cooldown_line_me_aoe_revive', 5) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_me_revive_duration_2") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_me_revive_duration_2") return diff --git a/scripts/expertise/expertise_me_revive_duration_3.py b/scripts/expertise/expertise_me_revive_duration_3.py index 4d89125e..0ed33a9b 100644 --- a/scripts/expertise/expertise_me_revive_duration_3.py +++ b/scripts/expertise/expertise_me_revive_duration_3.py @@ -1,50 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'medic_1a': - return - - actor.addSkill('expertise_me_revive_duration_3') - - actor.addSkillMod('expertise_cooldown_line_me_revive', 5) - actor.addSkillMod('expertise_cooldown_line_me_aoe_revive', 5) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'medic_1a': - return - - actor.removeSkill('expertise_me_revive_duration_3') - - actor.removeSkillMod('expertise_cooldown_line_me_revive', 5) - actor.removeSkillMod('expertise_cooldown_line_me_aoe_revive', 5) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_me_revive_duration_3") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_me_revive_duration_3") return diff --git a/scripts/expertise/expertise_me_serotonin_boost_1.py b/scripts/expertise/expertise_me_serotonin_boost_1.py index be920b81..13420734 100644 --- a/scripts/expertise/expertise_me_serotonin_boost_1.py +++ b/scripts/expertise/expertise_me_serotonin_boost_1.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'medic_1a': - return - - actor.addSkill('expertise_me_serotonin_boost_1') - - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'medic_1a': - return - - actor.removeSkill('expertise_me_serotonin_boost_1') - - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - actor.addAbility('me_serotonin_boost_1') - + actor.addAbility("me_serotonin_boost_1") return def removeAbilities(core, actor, player): - - actor.removeAbility('me_serotonin_boost_1') - + actor.removeAbility("me_serotonin_boost_1") return diff --git a/scripts/expertise/expertise_me_serotonin_purge_1.py b/scripts/expertise/expertise_me_serotonin_purge_1.py index 34a60137..54972a5b 100644 --- a/scripts/expertise/expertise_me_serotonin_purge_1.py +++ b/scripts/expertise/expertise_me_serotonin_purge_1.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'medic_1a': - return - - actor.addSkill('expertise_me_serotonin_purge_1') - - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'medic_1a': - return - - actor.removeSkill('expertise_me_serotonin_purge_1') - - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - actor.addAbility('me_serotonin_purge_1') - + actor.addAbility("me_serotonin_purge_1") return def removeAbilities(core, actor, player): - - actor.removeAbility('me_serotonin_purge_1') - + actor.removeAbility("me_serotonin_purge_1") return diff --git a/scripts/expertise/expertise_me_stasis_1.py b/scripts/expertise/expertise_me_stasis_1.py index f174c539..746687ba 100644 --- a/scripts/expertise/expertise_me_stasis_1.py +++ b/scripts/expertise/expertise_me_stasis_1.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'medic_1a': - return - - actor.addSkill('expertise_me_stasis_1') - - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'medic_1a': - return - - actor.removeSkill('expertise_me_stasis_1') - - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - actor.addAbility('me_stasis_1') - + actor.addAbility("me_stasis_1") return def removeAbilities(core, actor, player): - - actor.removeAbility('me_stasis_1') - + actor.removeAbility("me_stasis_1") return diff --git a/scripts/expertise/expertise_me_strength_1.py b/scripts/expertise/expertise_me_strength_1.py index b266ed84..9c3faac3 100644 --- a/scripts/expertise/expertise_me_strength_1.py +++ b/scripts/expertise/expertise_me_strength_1.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'medic_1a': - return - - actor.addSkill('expertise_me_strength_1') - - actor.addSkillMod('strength_modified', 25) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'medic_1a': - return - - actor.removeSkill('expertise_me_strength_1') - - actor.removeSkillMod('strength_modified', 25) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_me_strength_1") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_me_strength_1") return diff --git a/scripts/expertise/expertise_me_strength_2.py b/scripts/expertise/expertise_me_strength_2.py index 99f72bb5..fa2bc7b7 100644 --- a/scripts/expertise/expertise_me_strength_2.py +++ b/scripts/expertise/expertise_me_strength_2.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'medic_1a': - return - - actor.addSkill('expertise_me_strength_2') - - actor.addSkillMod('strength_modified', 25) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'medic_1a': - return - - actor.removeSkill('expertise_me_strength_2') - - actor.removeSkillMod('strength_modified', 25) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_me_strength_2") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_me_strength_2") return diff --git a/scripts/expertise/expertise_me_strength_3.py b/scripts/expertise/expertise_me_strength_3.py index f677cd7e..89f7a7a1 100644 --- a/scripts/expertise/expertise_me_strength_3.py +++ b/scripts/expertise/expertise_me_strength_3.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'medic_1a': - return - - actor.addSkill('expertise_me_strength_3') - - actor.addSkillMod('strength_modified', 25) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'medic_1a': - return - - actor.removeSkill('expertise_me_strength_3') - - actor.removeSkillMod('strength_modified', 25) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_me_strength_3") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_me_strength_3") return diff --git a/scripts/expertise/expertise_me_strength_4.py b/scripts/expertise/expertise_me_strength_4.py index 6da9d910..d3e48b21 100644 --- a/scripts/expertise/expertise_me_strength_4.py +++ b/scripts/expertise/expertise_me_strength_4.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'medic_1a': - return - - actor.addSkill('expertise_me_strength_4') - - actor.addSkillMod('strength_modified', 25) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'medic_1a': - return - - actor.removeSkill('expertise_me_strength_4') - - actor.removeSkillMod('strength_modified', 25) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_me_strength_4") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_me_strength_4") return diff --git a/scripts/expertise/expertise_me_thyroid_rupture_1.py b/scripts/expertise/expertise_me_thyroid_rupture_1.py index 229a2796..895d8882 100644 --- a/scripts/expertise/expertise_me_thyroid_rupture_1.py +++ b/scripts/expertise/expertise_me_thyroid_rupture_1.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'medic_1a': - return - - actor.addSkill('expertise_me_thyroid_rupture_1') - - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'medic_1a': - return - - actor.removeSkill('expertise_me_thyroid_rupture_1') - - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - actor.addAbility('me_thyroid_rupture_1') - + actor.addAbility("me_thyroid_rupture_1") return def removeAbilities(core, actor, player): - - actor.removeAbility('me_thyroid_rupture_1') - + actor.removeAbility("me_thyroid_rupture_1") return diff --git a/scripts/expertise/expertise_me_traumatize_1.py b/scripts/expertise/expertise_me_traumatize_1.py index 69856b36..4269ec8e 100644 --- a/scripts/expertise/expertise_me_traumatize_1.py +++ b/scripts/expertise/expertise_me_traumatize_1.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'medic_1a': - return - - actor.addSkill('expertise_me_traumatize_1') - - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'medic_1a': - return - - actor.removeSkill('expertise_me_traumatize_1') - - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - actor.addAbility('me_traumatize_1') - + actor.addAbility("me_traumatize_1") return def removeAbilities(core, actor, player): - - actor.removeAbility('me_traumatize_1') - + actor.removeAbility("me_traumatize_1") return diff --git a/scripts/expertise/expertise_me_unarmed_crit_1.py b/scripts/expertise/expertise_me_unarmed_crit_1.py index 77d9b653..529ff739 100644 --- a/scripts/expertise/expertise_me_unarmed_crit_1.py +++ b/scripts/expertise/expertise_me_unarmed_crit_1.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'medic_1a': - return - - actor.addSkill('expertise_me_unarmed_crit_1') - - actor.addSkillMod('expertise_undiminished_critical_melee', 1) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'medic_1a': - return - - actor.removeSkill('expertise_me_unarmed_crit_1') - - actor.removeSkillMod('expertise_undiminished_critical_melee', 1) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_me_unarmed_crit_1") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_me_unarmed_crit_1") return diff --git a/scripts/expertise/expertise_me_unarmed_crit_2.py b/scripts/expertise/expertise_me_unarmed_crit_2.py index 5a6bb469..4b18402e 100644 --- a/scripts/expertise/expertise_me_unarmed_crit_2.py +++ b/scripts/expertise/expertise_me_unarmed_crit_2.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'medic_1a': - return - - actor.addSkill('expertise_me_unarmed_crit_2') - - actor.addSkillMod('expertise_undiminished_critical_melee', 2) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'medic_1a': - return - - actor.removeSkill('expertise_me_unarmed_crit_2') - - actor.removeSkillMod('expertise_undiminished_critical_melee', 2) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_me_unarmed_crit_2") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_me_unarmed_crit_2") return diff --git a/scripts/expertise/expertise_me_unarmed_crit_3.py b/scripts/expertise/expertise_me_unarmed_crit_3.py index f5c332ea..8ba3de99 100644 --- a/scripts/expertise/expertise_me_unarmed_crit_3.py +++ b/scripts/expertise/expertise_me_unarmed_crit_3.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'medic_1a': - return - - actor.addSkill('expertise_me_unarmed_crit_3') - - actor.addSkillMod('expertise_undiminished_critical_melee', 2) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'medic_1a': - return - - actor.removeSkill('expertise_me_unarmed_crit_3') - - actor.removeSkillMod('expertise_undiminished_critical_melee', 2) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_me_unarmed_crit_3") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_me_unarmed_crit_3") return diff --git a/scripts/expertise/expertise_me_unarmed_damage_1.py b/scripts/expertise/expertise_me_unarmed_damage_1.py index aa61fb7e..6b81c0bb 100644 --- a/scripts/expertise/expertise_me_unarmed_damage_1.py +++ b/scripts/expertise/expertise_me_unarmed_damage_1.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'medic_1a': - return - - actor.addSkill('expertise_me_unarmed_damage_1') - - actor.addSkillMod('expertise_damage_melee', 3) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'medic_1a': - return - - actor.removeSkill('expertise_me_unarmed_damage_1') - - actor.removeSkillMod('expertise_damage_melee', 3) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_me_unarmed_damage_1") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_me_unarmed_damage_1") return diff --git a/scripts/expertise/expertise_me_unarmed_damage_2.py b/scripts/expertise/expertise_me_unarmed_damage_2.py index 7a11aedc..9bb4a83d 100644 --- a/scripts/expertise/expertise_me_unarmed_damage_2.py +++ b/scripts/expertise/expertise_me_unarmed_damage_2.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'medic_1a': - return - - actor.addSkill('expertise_me_unarmed_damage_2') - - actor.addSkillMod('expertise_damage_melee', 3) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'medic_1a': - return - - actor.removeSkill('expertise_me_unarmed_damage_2') - - actor.removeSkillMod('expertise_damage_melee', 3) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_me_unarmed_damage_2") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_me_unarmed_damage_2") return diff --git a/scripts/expertise/expertise_me_unarmed_damage_3.py b/scripts/expertise/expertise_me_unarmed_damage_3.py index 9ca773ae..cd4660fa 100644 --- a/scripts/expertise/expertise_me_unarmed_damage_3.py +++ b/scripts/expertise/expertise_me_unarmed_damage_3.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'medic_1a': - return - - actor.addSkill('expertise_me_unarmed_damage_3') - - actor.addSkillMod('expertise_damage_melee', 4) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'medic_1a': - return - - actor.removeSkill('expertise_me_unarmed_damage_3') - - actor.removeSkillMod('expertise_damage_melee', 4) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_me_unarmed_damage_3") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_me_unarmed_damage_3") return diff --git a/scripts/expertise/expertise_me_unarmed_damage_4.py b/scripts/expertise/expertise_me_unarmed_damage_4.py index 8164d9c5..8df37d4d 100644 --- a/scripts/expertise/expertise_me_unarmed_damage_4.py +++ b/scripts/expertise/expertise_me_unarmed_damage_4.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'medic_1a': - return - - actor.addSkill('expertise_me_unarmed_damage_4') - - actor.addSkillMod('expertise_damage_melee', 5) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'medic_1a': - return - - actor.removeSkill('expertise_me_unarmed_damage_4') - - actor.removeSkillMod('expertise_damage_melee', 5) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_me_unarmed_damage_4") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_me_unarmed_damage_4") return diff --git a/scripts/expertise/expertise_me_vital_action_1.py b/scripts/expertise/expertise_me_vital_action_1.py index ac935c5d..60a8e9e4 100644 --- a/scripts/expertise/expertise_me_vital_action_1.py +++ b/scripts/expertise/expertise_me_vital_action_1.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'medic_1a': - return - - actor.addSkill('expertise_me_vital_action_1') - - actor.addSkillMod('expertise_action_line_me_dm', 5) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'medic_1a': - return - - actor.removeSkill('expertise_me_vital_action_1') - - actor.removeSkillMod('expertise_action_line_me_dm', 5) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_me_vital_action_1") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_me_vital_action_1") return diff --git a/scripts/expertise/expertise_me_vital_action_2.py b/scripts/expertise/expertise_me_vital_action_2.py index a3614ac8..a8d0ea03 100644 --- a/scripts/expertise/expertise_me_vital_action_2.py +++ b/scripts/expertise/expertise_me_vital_action_2.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'medic_1a': - return - - actor.addSkill('expertise_me_vital_action_2') - - actor.addSkillMod('expertise_action_line_me_dm', 5) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'medic_1a': - return - - actor.removeSkill('expertise_me_vital_action_2') - - actor.removeSkillMod('expertise_action_line_me_dm', 5) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_me_vital_action_2") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_me_vital_action_2") return diff --git a/scripts/expertise/expertise_me_vital_action_3.py b/scripts/expertise/expertise_me_vital_action_3.py index cfdcac09..bd0965c7 100644 --- a/scripts/expertise/expertise_me_vital_action_3.py +++ b/scripts/expertise/expertise_me_vital_action_3.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'medic_1a': - return - - actor.addSkill('expertise_me_vital_action_3') - - actor.addSkillMod('expertise_action_line_me_dm', 5) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'medic_1a': - return - - actor.removeSkill('expertise_me_vital_action_3') - - actor.removeSkillMod('expertise_action_line_me_dm', 5) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_me_vital_action_3") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_me_vital_action_3") return diff --git a/scripts/expertise/expertise_me_vital_action_4.py b/scripts/expertise/expertise_me_vital_action_4.py index df14ebf9..ffcab6ff 100644 --- a/scripts/expertise/expertise_me_vital_action_4.py +++ b/scripts/expertise/expertise_me_vital_action_4.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'medic_1a': - return - - actor.addSkill('expertise_me_vital_action_4') - - actor.addSkillMod('expertise_action_line_me_dm', 10) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'medic_1a': - return - - actor.removeSkill('expertise_me_vital_action_4') - - actor.removeSkillMod('expertise_action_line_me_dm', 10) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_me_vital_action_4") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_me_vital_action_4") return diff --git a/scripts/expertise/expertise_me_vital_damage_1.py b/scripts/expertise/expertise_me_vital_damage_1.py index a3b86e64..8783041a 100644 --- a/scripts/expertise/expertise_me_vital_damage_1.py +++ b/scripts/expertise/expertise_me_vital_damage_1.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'medic_1a': - return - - actor.addSkill('expertise_me_vital_damage_1') - - actor.addSkillMod('expertise_damage_line_me_dm', 5) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'medic_1a': - return - - actor.removeSkill('expertise_me_vital_damage_1') - - actor.removeSkillMod('expertise_damage_line_me_dm', 5) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_me_vital_damage_1") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_me_vital_damage_1") return diff --git a/scripts/expertise/expertise_me_vital_damage_2.py b/scripts/expertise/expertise_me_vital_damage_2.py index 425891d3..727ee2fd 100644 --- a/scripts/expertise/expertise_me_vital_damage_2.py +++ b/scripts/expertise/expertise_me_vital_damage_2.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'medic_1a': - return - - actor.addSkill('expertise_me_vital_damage_2') - - actor.addSkillMod('expertise_damage_line_me_dm', 5) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'medic_1a': - return - - actor.removeSkill('expertise_me_vital_damage_2') - - actor.removeSkillMod('expertise_damage_line_me_dm', 5) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_me_vital_damage_2") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_me_vital_damage_2") return diff --git a/scripts/expertise/expertise_me_vital_damage_3.py b/scripts/expertise/expertise_me_vital_damage_3.py index d1c6b17d..0e35314c 100644 --- a/scripts/expertise/expertise_me_vital_damage_3.py +++ b/scripts/expertise/expertise_me_vital_damage_3.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'medic_1a': - return - - actor.addSkill('expertise_me_vital_damage_3') - - actor.addSkillMod('expertise_damage_line_me_dm', 5) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'medic_1a': - return - - actor.removeSkill('expertise_me_vital_damage_3') - - actor.removeSkillMod('expertise_damage_line_me_dm', 5) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_me_vital_damage_3") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_me_vital_damage_3") return diff --git a/scripts/expertise/expertise_me_vital_damage_4.py b/scripts/expertise/expertise_me_vital_damage_4.py index fbeb571c..bb634713 100644 --- a/scripts/expertise/expertise_me_vital_damage_4.py +++ b/scripts/expertise/expertise_me_vital_damage_4.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'medic_1a': - return - - actor.addSkill('expertise_me_vital_damage_4') - - actor.addSkillMod('expertise_damage_line_me_dm', 5) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'medic_1a': - return - - actor.removeSkill('expertise_me_vital_damage_4') - - actor.removeSkillMod('expertise_damage_line_me_dm', 5) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_me_vital_damage_4") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_me_vital_damage_4") return diff --git a/scripts/expertise/expertise_munition_armorsmith_advanced_theory_1.py b/scripts/expertise/expertise_munition_armorsmith_advanced_theory_1.py index c7b03de3..dd347899 100644 --- a/scripts/expertise/expertise_munition_armorsmith_advanced_theory_1.py +++ b/scripts/expertise/expertise_munition_armorsmith_advanced_theory_1.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'trader_mun_1a': - return - - actor.addSkill('expertise_munition_armorsmith_advanced_theory_1') - - actor.addSkillMod('armor_experimentation', 10) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'trader_mun_1a': - return - - actor.removeSkill('expertise_munition_armorsmith_advanced_theory_1') - - actor.removeSkillMod('armor_experimentation', 10) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_munition_armorsmith_advanced_theory_1") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_munition_armorsmith_advanced_theory_1") return diff --git a/scripts/expertise/expertise_munition_armorsmith_attachment_upgrade_1.py b/scripts/expertise/expertise_munition_armorsmith_attachment_upgrade_1.py index 00e4e545..4f4ae755 100644 --- a/scripts/expertise/expertise_munition_armorsmith_attachment_upgrade_1.py +++ b/scripts/expertise/expertise_munition_armorsmith_attachment_upgrade_1.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'trader_mun_1a': - return - - actor.addSkill('expertise_munition_armorsmith_attachment_upgrade_1') - - actor.addSkillMod('expertise_attachment_upgrade', 1) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'trader_mun_1a': - return - - actor.removeSkill('expertise_munition_armorsmith_attachment_upgrade_1') - - actor.removeSkillMod('expertise_attachment_upgrade', 1) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_munition_armorsmith_attachment_upgrade_1") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_munition_armorsmith_attachment_upgrade_1") return diff --git a/scripts/expertise/expertise_munition_armorsmith_dexterity_1.py b/scripts/expertise/expertise_munition_armorsmith_dexterity_1.py index 81d08c77..60cea356 100644 --- a/scripts/expertise/expertise_munition_armorsmith_dexterity_1.py +++ b/scripts/expertise/expertise_munition_armorsmith_dexterity_1.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'trader_mun_1a': - return - - actor.addSkill('expertise_munition_armorsmith_dexterity_1') - - actor.addSkillMod('armor_assembly', 5) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'trader_mun_1a': - return - - actor.removeSkill('expertise_munition_armorsmith_dexterity_1') - - actor.removeSkillMod('armor_assembly', 5) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_munition_armorsmith_dexterity_1") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_munition_armorsmith_dexterity_1") return diff --git a/scripts/expertise/expertise_munition_armorsmith_dexterity_2.py b/scripts/expertise/expertise_munition_armorsmith_dexterity_2.py index 9c217bba..1cfed98e 100644 --- a/scripts/expertise/expertise_munition_armorsmith_dexterity_2.py +++ b/scripts/expertise/expertise_munition_armorsmith_dexterity_2.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'trader_mun_1a': - return - - actor.addSkill('expertise_munition_armorsmith_dexterity_2') - - actor.addSkillMod('armor_assembly', 5) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'trader_mun_1a': - return - - actor.removeSkill('expertise_munition_armorsmith_dexterity_2') - - actor.removeSkillMod('armor_assembly', 5) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_munition_armorsmith_dexterity_2") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_munition_armorsmith_dexterity_2") return diff --git a/scripts/expertise/expertise_munition_armorsmith_dexterity_3.py b/scripts/expertise/expertise_munition_armorsmith_dexterity_3.py index e26013a5..550545ec 100644 --- a/scripts/expertise/expertise_munition_armorsmith_dexterity_3.py +++ b/scripts/expertise/expertise_munition_armorsmith_dexterity_3.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'trader_mun_1a': - return - - actor.addSkill('expertise_munition_armorsmith_dexterity_3') - - actor.addSkillMod('armor_assembly', 5) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'trader_mun_1a': - return - - actor.removeSkill('expertise_munition_armorsmith_dexterity_3') - - actor.removeSkillMod('armor_assembly', 5) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_munition_armorsmith_dexterity_3") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_munition_armorsmith_dexterity_3") return diff --git a/scripts/expertise/expertise_munition_armorsmith_dexterity_4.py b/scripts/expertise/expertise_munition_armorsmith_dexterity_4.py index 96c50f98..0467db0c 100644 --- a/scripts/expertise/expertise_munition_armorsmith_dexterity_4.py +++ b/scripts/expertise/expertise_munition_armorsmith_dexterity_4.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'trader_mun_1a': - return - - actor.addSkill('expertise_munition_armorsmith_dexterity_4') - - actor.addSkillMod('armor_assembly', 5) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'trader_mun_1a': - return - - actor.removeSkill('expertise_munition_armorsmith_dexterity_4') - - actor.removeSkillMod('armor_assembly', 5) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_munition_armorsmith_dexterity_4") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_munition_armorsmith_dexterity_4") return diff --git a/scripts/expertise/expertise_munition_armorsmith_hypothesis_1.py b/scripts/expertise/expertise_munition_armorsmith_hypothesis_1.py index df25bf70..a813988d 100644 --- a/scripts/expertise/expertise_munition_armorsmith_hypothesis_1.py +++ b/scripts/expertise/expertise_munition_armorsmith_hypothesis_1.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'trader_mun_1a': - return - - actor.addSkill('expertise_munition_armorsmith_hypothesis_1') - - actor.addSkillMod('expertise_experimentation_increase_armorsmith', 3) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'trader_mun_1a': - return - - actor.removeSkill('expertise_munition_armorsmith_hypothesis_1') - - actor.removeSkillMod('expertise_experimentation_increase_armorsmith', 3) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_munition_armorsmith_hypothesis_1") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_munition_armorsmith_hypothesis_1") return diff --git a/scripts/expertise/expertise_munition_armorsmith_hypothesis_2.py b/scripts/expertise/expertise_munition_armorsmith_hypothesis_2.py index 03d1cd9e..3e1df126 100644 --- a/scripts/expertise/expertise_munition_armorsmith_hypothesis_2.py +++ b/scripts/expertise/expertise_munition_armorsmith_hypothesis_2.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'trader_mun_1a': - return - - actor.addSkill('expertise_munition_armorsmith_hypothesis_2') - - actor.addSkillMod('expertise_experimentation_increase_armorsmith', 3) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'trader_mun_1a': - return - - actor.removeSkill('expertise_munition_armorsmith_hypothesis_2') - - actor.removeSkillMod('expertise_experimentation_increase_armorsmith', 3) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_munition_armorsmith_hypothesis_2") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_munition_armorsmith_hypothesis_2") return diff --git a/scripts/expertise/expertise_munition_armorsmith_hypothesis_3.py b/scripts/expertise/expertise_munition_armorsmith_hypothesis_3.py index 31e3d0a5..641c52c8 100644 --- a/scripts/expertise/expertise_munition_armorsmith_hypothesis_3.py +++ b/scripts/expertise/expertise_munition_armorsmith_hypothesis_3.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'trader_mun_1a': - return - - actor.addSkill('expertise_munition_armorsmith_hypothesis_3') - - actor.addSkillMod('expertise_experimentation_increase_armorsmith', 3) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'trader_mun_1a': - return - - actor.removeSkill('expertise_munition_armorsmith_hypothesis_3') - - actor.removeSkillMod('expertise_experimentation_increase_armorsmith', 3) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_munition_armorsmith_hypothesis_3") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_munition_armorsmith_hypothesis_3") return diff --git a/scripts/expertise/expertise_munition_armorsmith_hypothesis_4.py b/scripts/expertise/expertise_munition_armorsmith_hypothesis_4.py index 3aaf3ca5..94bf9c1e 100644 --- a/scripts/expertise/expertise_munition_armorsmith_hypothesis_4.py +++ b/scripts/expertise/expertise_munition_armorsmith_hypothesis_4.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'trader_mun_1a': - return - - actor.addSkill('expertise_munition_armorsmith_hypothesis_4') - - actor.addSkillMod('expertise_experimentation_increase_armorsmith', 3) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'trader_mun_1a': - return - - actor.removeSkill('expertise_munition_armorsmith_hypothesis_4') - - actor.removeSkillMod('expertise_experimentation_increase_armorsmith', 3) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_munition_armorsmith_hypothesis_4") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_munition_armorsmith_hypothesis_4") return diff --git a/scripts/expertise/expertise_munition_armorsmith_insight_1.py b/scripts/expertise/expertise_munition_armorsmith_insight_1.py index f4836dd3..682413ee 100644 --- a/scripts/expertise/expertise_munition_armorsmith_insight_1.py +++ b/scripts/expertise/expertise_munition_armorsmith_insight_1.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'trader_mun_1a': - return - - actor.addSkill('expertise_munition_armorsmith_insight_1') - - actor.addSkillMod('expertise_complexity_decrease_armorsmith', 1) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'trader_mun_1a': - return - - actor.removeSkill('expertise_munition_armorsmith_insight_1') - - actor.removeSkillMod('expertise_complexity_decrease_armorsmith', 1) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_munition_armorsmith_insight_1") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_munition_armorsmith_insight_1") return diff --git a/scripts/expertise/expertise_munition_armorsmith_insight_2.py b/scripts/expertise/expertise_munition_armorsmith_insight_2.py index d0b5d3b0..a1ddebae 100644 --- a/scripts/expertise/expertise_munition_armorsmith_insight_2.py +++ b/scripts/expertise/expertise_munition_armorsmith_insight_2.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'trader_mun_1a': - return - - actor.addSkill('expertise_munition_armorsmith_insight_2') - - actor.addSkillMod('expertise_complexity_decrease_armorsmith', 1) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'trader_mun_1a': - return - - actor.removeSkill('expertise_munition_armorsmith_insight_2') - - actor.removeSkillMod('expertise_complexity_decrease_armorsmith', 1) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_munition_armorsmith_insight_2") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_munition_armorsmith_insight_2") return diff --git a/scripts/expertise/expertise_munition_armorsmith_keen_understanding_1.py b/scripts/expertise/expertise_munition_armorsmith_keen_understanding_1.py index 9b7863bb..4b919776 100644 --- a/scripts/expertise/expertise_munition_armorsmith_keen_understanding_1.py +++ b/scripts/expertise/expertise_munition_armorsmith_keen_understanding_1.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'trader_mun_1a': - return - - actor.addSkill('expertise_munition_armorsmith_keen_understanding_1') - - actor.addSkillMod('expertise_complexity_decrease_armorsmith', 2) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'trader_mun_1a': - return - - actor.removeSkill('expertise_munition_armorsmith_keen_understanding_1') - - actor.removeSkillMod('expertise_complexity_decrease_armorsmith', 2) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_munition_armorsmith_keen_understanding_1") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_munition_armorsmith_keen_understanding_1") return diff --git a/scripts/expertise/expertise_munition_armorsmith_keen_understanding_2.py b/scripts/expertise/expertise_munition_armorsmith_keen_understanding_2.py index 9671c726..68063fba 100644 --- a/scripts/expertise/expertise_munition_armorsmith_keen_understanding_2.py +++ b/scripts/expertise/expertise_munition_armorsmith_keen_understanding_2.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'trader_mun_1a': - return - - actor.addSkill('expertise_munition_armorsmith_keen_understanding_2') - - actor.addSkillMod('expertise_complexity_decrease_armorsmith', 2) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'trader_mun_1a': - return - - actor.removeSkill('expertise_munition_armorsmith_keen_understanding_2') - - actor.removeSkillMod('expertise_complexity_decrease_armorsmith', 2) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_munition_armorsmith_keen_understand_2") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_munition_armorsmith_keen_understand_2") return diff --git a/scripts/expertise/expertise_munition_armorsmith_socket_bonus_1.py b/scripts/expertise/expertise_munition_armorsmith_socket_bonus_1.py index 31a4bf81..87f97e77 100644 --- a/scripts/expertise/expertise_munition_armorsmith_socket_bonus_1.py +++ b/scripts/expertise/expertise_munition_armorsmith_socket_bonus_1.py @@ -1,46 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'trader_mun_1a': - return - - actor.addSkill('expertise_munition_armorsmith_socket_bonus_1') - - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'trader_mun_1a': - return - - actor.removeSkill('expertise_munition_armorsmith_socket_bonus_1') - - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_munition_armorsmith_socket_bonus_1") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_munition_armorsmith_socket_bonus_1") return diff --git a/scripts/expertise/expertise_munition_artisan_advanced_theory_1.py b/scripts/expertise/expertise_munition_artisan_advanced_theory_1.py index 1e5fe723..52843271 100644 --- a/scripts/expertise/expertise_munition_artisan_advanced_theory_1.py +++ b/scripts/expertise/expertise_munition_artisan_advanced_theory_1.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'trader_mun_1a': - return - - actor.addSkill('expertise_munition_artisan_advanced_theory_1') - - actor.addSkillMod('general_experimentation', 10) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'trader_mun_1a': - return - - actor.removeSkill('expertise_munition_artisan_advanced_theory_1') - - actor.removeSkillMod('general_experimentation', 10) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_munition_artisan_advanced_theory_1") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_munition_artisan_advanced_theory_1") return diff --git a/scripts/expertise/expertise_munition_artisan_dexterity_1.py b/scripts/expertise/expertise_munition_artisan_dexterity_1.py index 638088a7..3c7654c3 100644 --- a/scripts/expertise/expertise_munition_artisan_dexterity_1.py +++ b/scripts/expertise/expertise_munition_artisan_dexterity_1.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'trader_mun_1a': - return - - actor.addSkill('expertise_munition_artisan_dexterity_1') - - actor.addSkillMod('general_assembly', 5) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'trader_mun_1a': - return - - actor.removeSkill('expertise_munition_artisan_dexterity_1') - - actor.removeSkillMod('general_assembly', 5) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_munition_artisan_dexterity_1") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_munition_artisan_dexterity_1") return diff --git a/scripts/expertise/expertise_munition_artisan_dexterity_2.py b/scripts/expertise/expertise_munition_artisan_dexterity_2.py index 447143e8..100dd414 100644 --- a/scripts/expertise/expertise_munition_artisan_dexterity_2.py +++ b/scripts/expertise/expertise_munition_artisan_dexterity_2.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'trader_mun_1a': - return - - actor.addSkill('expertise_munition_artisan_dexterity_2') - - actor.addSkillMod('general_assembly', 5) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'trader_mun_1a': - return - - actor.removeSkill('expertise_munition_artisan_dexterity_2') - - actor.removeSkillMod('general_assembly', 5) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_munition_artisan_dexterity_2") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_munition_artisan_dexterity_2") return diff --git a/scripts/expertise/expertise_munition_artisan_dexterity_3.py b/scripts/expertise/expertise_munition_artisan_dexterity_3.py index 2100f2c7..aa5cdd64 100644 --- a/scripts/expertise/expertise_munition_artisan_dexterity_3.py +++ b/scripts/expertise/expertise_munition_artisan_dexterity_3.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'trader_mun_1a': - return - - actor.addSkill('expertise_munition_artisan_dexterity_3') - - actor.addSkillMod('general_assembly', 5) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'trader_mun_1a': - return - - actor.removeSkill('expertise_munition_artisan_dexterity_3') - - actor.removeSkillMod('general_assembly', 5) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_munition_artisan_dexterity_3") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_munition_artisan_dexterity_3") return diff --git a/scripts/expertise/expertise_munition_artisan_dexterity_4.py b/scripts/expertise/expertise_munition_artisan_dexterity_4.py index 4442f4d5..4dd8ecbb 100644 --- a/scripts/expertise/expertise_munition_artisan_dexterity_4.py +++ b/scripts/expertise/expertise_munition_artisan_dexterity_4.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'trader_mun_1a': - return - - actor.addSkill('expertise_munition_artisan_dexterity_4') - - actor.addSkillMod('general_assembly', 5) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'trader_mun_1a': - return - - actor.removeSkill('expertise_munition_artisan_dexterity_4') - - actor.removeSkillMod('general_assembly', 5) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_munition_artisan_dexterity_4") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_munition_artisan_dexterity_4") return diff --git a/scripts/expertise/expertise_munition_artisan_hypothesis_1.py b/scripts/expertise/expertise_munition_artisan_hypothesis_1.py index 80d37471..24cb3aae 100644 --- a/scripts/expertise/expertise_munition_artisan_hypothesis_1.py +++ b/scripts/expertise/expertise_munition_artisan_hypothesis_1.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'trader_mun_1a': - return - - actor.addSkill('expertise_munition_artisan_hypothesis_1') - - actor.addSkillMod('expertise_experimentation_increase_artisan', 3) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'trader_mun_1a': - return - - actor.removeSkill('expertise_munition_artisan_hypothesis_1') - - actor.removeSkillMod('expertise_experimentation_increase_artisan', 3) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_munition_artisan_hypothesis_1") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_munition_artisan_hypothesis_1") return diff --git a/scripts/expertise/expertise_munition_artisan_hypothesis_2.py b/scripts/expertise/expertise_munition_artisan_hypothesis_2.py index d842f507..99447075 100644 --- a/scripts/expertise/expertise_munition_artisan_hypothesis_2.py +++ b/scripts/expertise/expertise_munition_artisan_hypothesis_2.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'trader_mun_1a': - return - - actor.addSkill('expertise_munition_artisan_hypothesis_2') - - actor.addSkillMod('expertise_experimentation_increase_artisan', 3) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'trader_mun_1a': - return - - actor.removeSkill('expertise_munition_artisan_hypothesis_2') - - actor.removeSkillMod('expertise_experimentation_increase_artisan', 3) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_munition_artisan_hypothesis_2") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_munition_artisan_hypothesis_2") return diff --git a/scripts/expertise/expertise_munition_artisan_hypothesis_3.py b/scripts/expertise/expertise_munition_artisan_hypothesis_3.py index c4498501..a18d8365 100644 --- a/scripts/expertise/expertise_munition_artisan_hypothesis_3.py +++ b/scripts/expertise/expertise_munition_artisan_hypothesis_3.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'trader_mun_1a': - return - - actor.addSkill('expertise_munition_artisan_hypothesis_3') - - actor.addSkillMod('expertise_experimentation_increase_artisan', 3) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'trader_mun_1a': - return - - actor.removeSkill('expertise_munition_artisan_hypothesis_3') - - actor.removeSkillMod('expertise_experimentation_increase_artisan', 3) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_munition_artisan_hypothesis_3") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_munition_artisan_hypothesis_3") return diff --git a/scripts/expertise/expertise_munition_artisan_hypothesis_4.py b/scripts/expertise/expertise_munition_artisan_hypothesis_4.py index 9e217fe9..35ee3e44 100644 --- a/scripts/expertise/expertise_munition_artisan_hypothesis_4.py +++ b/scripts/expertise/expertise_munition_artisan_hypothesis_4.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'trader_mun_1a': - return - - actor.addSkill('expertise_munition_artisan_hypothesis_4') - - actor.addSkillMod('expertise_experimentation_increase_artisan', 3) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'trader_mun_1a': - return - - actor.removeSkill('expertise_munition_artisan_hypothesis_4') - - actor.removeSkillMod('expertise_experimentation_increase_artisan', 3) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_munition_artisan_hypothesis_4") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_munition_artisan_hypothesis_4") return diff --git a/scripts/expertise/expertise_munition_resource_processing_1.py b/scripts/expertise/expertise_munition_resource_processing_1.py index cbbef8f6..46b265dc 100644 --- a/scripts/expertise/expertise_munition_resource_processing_1.py +++ b/scripts/expertise/expertise_munition_resource_processing_1.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'trader_mun_1a': - return - - actor.addSkill('expertise_munition_resource_processing_1') - - actor.addSkillMod('expertise_resource_quality_increase', 1) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'trader_mun_1a': - return - - actor.removeSkill('expertise_munition_resource_processing_1') - - actor.removeSkillMod('expertise_resource_quality_increase', 1) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_munition_resource_processing_1") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_munition_resource_processing_1") return diff --git a/scripts/expertise/expertise_munition_resource_processing_2.py b/scripts/expertise/expertise_munition_resource_processing_2.py index 02eed65b..f188f336 100644 --- a/scripts/expertise/expertise_munition_resource_processing_2.py +++ b/scripts/expertise/expertise_munition_resource_processing_2.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'trader_mun_1a': - return - - actor.addSkill('expertise_munition_resource_processing_2') - - actor.addSkillMod('expertise_resource_quality_increase', 1) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'trader_mun_1a': - return - - actor.removeSkill('expertise_munition_resource_processing_2') - - actor.removeSkillMod('expertise_resource_quality_increase', 1) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_munition_resource_processing_2") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_munition_resource_processing_2") return diff --git a/scripts/expertise/expertise_munition_resource_refinement_1.py b/scripts/expertise/expertise_munition_resource_refinement_1.py index 0d500f72..855d585b 100644 --- a/scripts/expertise/expertise_munition_resource_refinement_1.py +++ b/scripts/expertise/expertise_munition_resource_refinement_1.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'trader_mun_1a': - return - - actor.addSkill('expertise_munition_resource_refinement_1') - - actor.addSkillMod('expertise_resource_quality_increase', 1) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'trader_mun_1a': - return - - actor.removeSkill('expertise_munition_resource_refinement_1') - - actor.removeSkillMod('expertise_resource_quality_increase', 1) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_munition_resource_refinement_1") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_munition_resource_refinement_1") return diff --git a/scripts/expertise/expertise_munition_resource_refinement_2.py b/scripts/expertise/expertise_munition_resource_refinement_2.py index 5b794681..e4536a48 100644 --- a/scripts/expertise/expertise_munition_resource_refinement_2.py +++ b/scripts/expertise/expertise_munition_resource_refinement_2.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'trader_mun_1a': - return - - actor.addSkill('expertise_munition_resource_refinement_2') - - actor.addSkillMod('expertise_resource_quality_increase', 1) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'trader_mun_1a': - return - - actor.removeSkill('expertise_munition_resource_refinement_2') - - actor.removeSkillMod('expertise_resource_quality_increase', 1) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_munition_resource_refinement_2") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_munition_resource_refinement_2") return diff --git a/scripts/expertise/expertise_munition_weaponsmith_advanced_theory_1.py b/scripts/expertise/expertise_munition_weaponsmith_advanced_theory_1.py index bfd79df3..6b248343 100644 --- a/scripts/expertise/expertise_munition_weaponsmith_advanced_theory_1.py +++ b/scripts/expertise/expertise_munition_weaponsmith_advanced_theory_1.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'trader_mun_1a': - return - - actor.addSkill('expertise_munition_weaponsmith_advanced_theory_1') - - actor.addSkillMod('weapon_experimentation', 10) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'trader_mun_1a': - return - - actor.removeSkill('expertise_munition_weaponsmith_advanced_theory_1') - - actor.removeSkillMod('weapon_experimentation', 10) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_munition_weaponsmith_advanced_theory_1") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_munition_weaponsmith_advanced_theory_1") return diff --git a/scripts/expertise/expertise_munition_weaponsmith_dexterity_1.py b/scripts/expertise/expertise_munition_weaponsmith_dexterity_1.py index fd035fd8..78a141b6 100644 --- a/scripts/expertise/expertise_munition_weaponsmith_dexterity_1.py +++ b/scripts/expertise/expertise_munition_weaponsmith_dexterity_1.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'trader_mun_1a': - return - - actor.addSkill('expertise_munition_weaponsmith_dexterity_1') - - actor.addSkillMod('weapon_assembly', 5) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'trader_mun_1a': - return - - actor.removeSkill('expertise_munition_weaponsmith_dexterity_1') - - actor.removeSkillMod('weapon_assembly', 5) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_munition_weaponsmith_dexterity_1") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_munition_weaponsmith_dexterity_1") return diff --git a/scripts/expertise/expertise_munition_weaponsmith_dexterity_2.py b/scripts/expertise/expertise_munition_weaponsmith_dexterity_2.py index 6e0ace46..978ba95f 100644 --- a/scripts/expertise/expertise_munition_weaponsmith_dexterity_2.py +++ b/scripts/expertise/expertise_munition_weaponsmith_dexterity_2.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'trader_mun_1a': - return - - actor.addSkill('expertise_munition_weaponsmith_dexterity_2') - - actor.addSkillMod('weapon_assembly', 5) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'trader_mun_1a': - return - - actor.removeSkill('expertise_munition_weaponsmith_dexterity_2') - - actor.removeSkillMod('weapon_assembly', 5) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_munition_weaponsmith_dexterity_2") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_munition_weaponsmith_dexterity_2") return diff --git a/scripts/expertise/expertise_munition_weaponsmith_dexterity_3.py b/scripts/expertise/expertise_munition_weaponsmith_dexterity_3.py index 7ca11203..c386a1ac 100644 --- a/scripts/expertise/expertise_munition_weaponsmith_dexterity_3.py +++ b/scripts/expertise/expertise_munition_weaponsmith_dexterity_3.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'trader_mun_1a': - return - - actor.addSkill('expertise_munition_weaponsmith_dexterity_3') - - actor.addSkillMod('weapon_assembly', 5) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'trader_mun_1a': - return - - actor.removeSkill('expertise_munition_weaponsmith_dexterity_3') - - actor.removeSkillMod('weapon_assembly', 5) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_munition_weaponsmith_dexterity_3") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_munition_weaponsmith_dexterity_3") return diff --git a/scripts/expertise/expertise_munition_weaponsmith_dexterity_4.py b/scripts/expertise/expertise_munition_weaponsmith_dexterity_4.py index 492a2b7f..22d08692 100644 --- a/scripts/expertise/expertise_munition_weaponsmith_dexterity_4.py +++ b/scripts/expertise/expertise_munition_weaponsmith_dexterity_4.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'trader_mun_1a': - return - - actor.addSkill('expertise_munition_weaponsmith_dexterity_4') - - actor.addSkillMod('weapon_assembly', 5) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'trader_mun_1a': - return - - actor.removeSkill('expertise_munition_weaponsmith_dexterity_4') - - actor.removeSkillMod('weapon_assembly', 5) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_munition_weaponsmith_dexterity_4") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_munition_weaponsmith_dexterity_4") return diff --git a/scripts/expertise/expertise_munition_weaponsmith_hypothesis_1.py b/scripts/expertise/expertise_munition_weaponsmith_hypothesis_1.py index 01a84b79..33a64c97 100644 --- a/scripts/expertise/expertise_munition_weaponsmith_hypothesis_1.py +++ b/scripts/expertise/expertise_munition_weaponsmith_hypothesis_1.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'trader_mun_1a': - return - - actor.addSkill('expertise_munition_weaponsmith_hypothesis_1') - - actor.addSkillMod('expertise_experimentation_increase_weaponsmith', 3) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'trader_mun_1a': - return - - actor.removeSkill('expertise_munition_weaponsmith_hypothesis_1') - - actor.removeSkillMod('expertise_experimentation_increase_weaponsmith', 3) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_munition_weaponsmith_hypothesis_1") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_munition_weaponsmith_hypothesis_1") return diff --git a/scripts/expertise/expertise_munition_weaponsmith_hypothesis_2.py b/scripts/expertise/expertise_munition_weaponsmith_hypothesis_2.py index c55b807d..a38da0d9 100644 --- a/scripts/expertise/expertise_munition_weaponsmith_hypothesis_2.py +++ b/scripts/expertise/expertise_munition_weaponsmith_hypothesis_2.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'trader_mun_1a': - return - - actor.addSkill('expertise_munition_weaponsmith_hypothesis_2') - - actor.addSkillMod('expertise_experimentation_increase_weaponsmith', 3) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'trader_mun_1a': - return - - actor.removeSkill('expertise_munition_weaponsmith_hypothesis_2') - - actor.removeSkillMod('expertise_experimentation_increase_weaponsmith', 3) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_munition_weaponsmith_hypothesis_2") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_munition_weaponsmith_hypothesis_2") return diff --git a/scripts/expertise/expertise_munition_weaponsmith_hypothesis_3.py b/scripts/expertise/expertise_munition_weaponsmith_hypothesis_3.py index 1236e5a7..a6ecbf5a 100644 --- a/scripts/expertise/expertise_munition_weaponsmith_hypothesis_3.py +++ b/scripts/expertise/expertise_munition_weaponsmith_hypothesis_3.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'trader_mun_1a': - return - - actor.addSkill('expertise_munition_weaponsmith_hypothesis_3') - - actor.addSkillMod('expertise_experimentation_increase_weaponsmith', 3) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'trader_mun_1a': - return - - actor.removeSkill('expertise_munition_weaponsmith_hypothesis_3') - - actor.removeSkillMod('expertise_experimentation_increase_weaponsmith', 3) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_munition_weaponsmith_hypothesis_3") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_munition_weaponsmith_hypothesis_3") return diff --git a/scripts/expertise/expertise_munition_weaponsmith_hypothesis_4.py b/scripts/expertise/expertise_munition_weaponsmith_hypothesis_4.py index 233610d9..08e1855e 100644 --- a/scripts/expertise/expertise_munition_weaponsmith_hypothesis_4.py +++ b/scripts/expertise/expertise_munition_weaponsmith_hypothesis_4.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'trader_mun_1a': - return - - actor.addSkill('expertise_munition_weaponsmith_hypothesis_4') - - actor.addSkillMod('expertise_experimentation_increase_weaponsmith', 3) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'trader_mun_1a': - return - - actor.removeSkill('expertise_munition_weaponsmith_hypothesis_4') - - actor.removeSkillMod('expertise_experimentation_increase_weaponsmith', 3) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_munition_weaponsmith_hypothesis_4") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_munition_weaponsmith_hypothesis_4") return diff --git a/scripts/expertise/expertise_munition_weaponsmith_insight_1.py b/scripts/expertise/expertise_munition_weaponsmith_insight_1.py index f4775f7e..02ae306a 100644 --- a/scripts/expertise/expertise_munition_weaponsmith_insight_1.py +++ b/scripts/expertise/expertise_munition_weaponsmith_insight_1.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'trader_mun_1a': - return - - actor.addSkill('expertise_munition_weaponsmith_insight_1') - - actor.addSkillMod('expertise_complexity_decrease_weaponsmith', 1) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'trader_mun_1a': - return - - actor.removeSkill('expertise_munition_weaponsmith_insight_1') - - actor.removeSkillMod('expertise_complexity_decrease_weaponsmith', 1) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_munition_weaponsmith_insight_1") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_munition_weaponsmith_insight_1") return diff --git a/scripts/expertise/expertise_munition_weaponsmith_insight_2.py b/scripts/expertise/expertise_munition_weaponsmith_insight_2.py index 0bd0d617..fd8846c4 100644 --- a/scripts/expertise/expertise_munition_weaponsmith_insight_2.py +++ b/scripts/expertise/expertise_munition_weaponsmith_insight_2.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'trader_mun_1a': - return - - actor.addSkill('expertise_munition_weaponsmith_insight_2') - - actor.addSkillMod('expertise_complexity_decrease_weaponsmith', 1) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'trader_mun_1a': - return - - actor.removeSkill('expertise_munition_weaponsmith_insight_2') - - actor.removeSkillMod('expertise_complexity_decrease_weaponsmith', 1) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_munition_weaponsmith_insight_2") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_munition_weaponsmith_insight_2") return diff --git a/scripts/expertise/expertise_munition_weaponsmith_keen_understanding_1.py b/scripts/expertise/expertise_munition_weaponsmith_keen_understanding_1.py index bf78a146..3a4b9071 100644 --- a/scripts/expertise/expertise_munition_weaponsmith_keen_understanding_1.py +++ b/scripts/expertise/expertise_munition_weaponsmith_keen_understanding_1.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'trader_mun_1a': - return - - actor.addSkill('expertise_munition_weaponsmith_keen_understanding_1') - - actor.addSkillMod('expertise_complexity_decrease_weaponsmith', 2) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'trader_mun_1a': - return - - actor.removeSkill('expertise_munition_weaponsmith_keen_understanding_1') - - actor.removeSkillMod('expertise_complexity_decrease_weaponsmith', 2) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_munition_weaponsmith_keen_understanding_1") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_munition_weaponsmith_keen_understanding_1") return diff --git a/scripts/expertise/expertise_munition_weaponsmith_keen_understanding_2.py b/scripts/expertise/expertise_munition_weaponsmith_keen_understanding_2.py index 7bf75f62..14a0134d 100644 --- a/scripts/expertise/expertise_munition_weaponsmith_keen_understanding_2.py +++ b/scripts/expertise/expertise_munition_weaponsmith_keen_understanding_2.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'trader_mun_1a': - return - - actor.addSkill('expertise_munition_weaponsmith_keen_understanding_2') - - actor.addSkillMod('expertise_complexity_decrease_weaponsmith', 2) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'trader_mun_1a': - return - - actor.removeSkill('expertise_munition_weaponsmith_keen_understanding_2') - - actor.removeSkillMod('expertise_complexity_decrease_weaponsmith', 2) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_munition_weaponsmith_keen_understanding_2") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_munition_weaponsmith_keen_understanding_2") return diff --git a/scripts/expertise/expertise_of_1h_crit_1.py b/scripts/expertise/expertise_of_1h_crit_1.py index 461ff94d..5b1de38a 100644 --- a/scripts/expertise/expertise_of_1h_crit_1.py +++ b/scripts/expertise/expertise_of_1h_crit_1.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'officer_1a': - return - - actor.addSkill('expertise_of_1h_crit_1') - - actor.addSkillMod('expertise_undiminished_critical_melee', 5) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'officer_1a': - return - - actor.removeSkill('expertise_of_1h_crit_1') - - actor.removeSkillMod('expertise_undiminished_critical_melee', 5) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_of_1h_crit_1") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_of_1h_crit_1") return diff --git a/scripts/expertise/expertise_of_1h_crit_2.py b/scripts/expertise/expertise_of_1h_crit_2.py index 60a05278..6f5fa016 100644 --- a/scripts/expertise/expertise_of_1h_crit_2.py +++ b/scripts/expertise/expertise_of_1h_crit_2.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'officer_1a': - return - - actor.addSkill('expertise_of_1h_crit_2') - - actor.addSkillMod('expertise_undiminished_critical_melee', 5) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'officer_1a': - return - - actor.removeSkill('expertise_of_1h_crit_2') - - actor.removeSkillMod('expertise_undiminished_critical_melee', 5) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_of_1h_crit_2") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_of_1h_crit_2") return diff --git a/scripts/expertise/expertise_of_1h_dam_1.py b/scripts/expertise/expertise_of_1h_dam_1.py index b8be4494..f143981d 100644 --- a/scripts/expertise/expertise_of_1h_dam_1.py +++ b/scripts/expertise/expertise_of_1h_dam_1.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'officer_1a': - return - - actor.addSkill('expertise_of_1h_dam_1') - - actor.addSkillMod('expertise_damage_melee', 3) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'officer_1a': - return - - actor.removeSkill('expertise_of_1h_dam_1') - - actor.removeSkillMod('expertise_damage_melee', 3) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_of_1h_dam_1") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_of_1h_dam_1") return diff --git a/scripts/expertise/expertise_of_1h_dam_2.py b/scripts/expertise/expertise_of_1h_dam_2.py index e4edd536..65802383 100644 --- a/scripts/expertise/expertise_of_1h_dam_2.py +++ b/scripts/expertise/expertise_of_1h_dam_2.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'officer_1a': - return - - actor.addSkill('expertise_of_1h_dam_2') - - actor.addSkillMod('expertise_damage_melee', 3) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'officer_1a': - return - - actor.removeSkill('expertise_of_1h_dam_2') - - actor.removeSkillMod('expertise_damage_melee', 3) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_of_1h_dam_2") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_of_1h_dam_2") return diff --git a/scripts/expertise/expertise_of_1h_dam_3.py b/scripts/expertise/expertise_of_1h_dam_3.py index aa845e86..e1a3c0ad 100644 --- a/scripts/expertise/expertise_of_1h_dam_3.py +++ b/scripts/expertise/expertise_of_1h_dam_3.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'officer_1a': - return - - actor.addSkill('expertise_of_1h_dam_3') - - actor.addSkillMod('expertise_damage_melee', 3) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'officer_1a': - return - - actor.removeSkill('expertise_of_1h_dam_3') - - actor.removeSkillMod('expertise_damage_melee', 3) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_of_1h_dam_3") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_of_1h_dam_3") return diff --git a/scripts/expertise/expertise_of_1h_dam_4.py b/scripts/expertise/expertise_of_1h_dam_4.py index 8041c7e1..10539dc5 100644 --- a/scripts/expertise/expertise_of_1h_dam_4.py +++ b/scripts/expertise/expertise_of_1h_dam_4.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'officer_1a': - return - - actor.addSkill('expertise_of_1h_dam_4') - - actor.addSkillMod('expertise_damage_melee', 3) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'officer_1a': - return - - actor.removeSkill('expertise_of_1h_dam_4') - - actor.removeSkillMod('expertise_damage_melee', 3) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_of_1h_dam_4") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_of_1h_dam_4") return diff --git a/scripts/expertise/expertise_of_advanced_paint_1.py b/scripts/expertise/expertise_of_advanced_paint_1.py index 3174e3a1..aab196f3 100644 --- a/scripts/expertise/expertise_of_advanced_paint_1.py +++ b/scripts/expertise/expertise_of_advanced_paint_1.py @@ -1,48 +1,31 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'officer_1a': - return - - actor.addSkill('expertise_of_advanced_paint_1') - - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'officer_1a': - return - - actor.removeSkill('expertise_of_advanced_paint_1') - - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - actor.addAbility('of_deb_def_4') - + if actor.getLevel() >= 4: + actor.addAbility("of_deb_def_1") + if actor.getLevel() >= 12: + actor.addAbility("of_deb_def_2") + if actor.getLevel() >= 20: + actor.addAbility("of_deb_def_3") + if actor.getLevel() >= 30: + actor.addAbility("of_deb_def_4") + if actor.getLevel() >= 38: + actor.addAbility("of_deb_def_5") + if actor.getLevel() >= 52: + actor.addAbility("of_deb_def_6") + if actor.getLevel() >= 62: + actor.addAbility("of_deb_def_7") + if actor.getLevel() >= 72: + actor.addAbility("of_deb_def_8") return def removeAbilities(core, actor, player): - - actor.removeAbility('of_deb_def_4') - + actor.removeAbility("of_deb_def_1") + actor.removeAbility("of_deb_def_2") + actor.removeAbility("of_deb_def_3") + actor.removeAbility("of_deb_def_4") + actor.removeAbility("of_deb_def_5") + actor.removeAbility("of_deb_def_6") + actor.removeAbility("of_deb_def_7") + actor.removeAbility("of_deb_def_8") return diff --git a/scripts/expertise/expertise_of_advanced_tactics_1.py b/scripts/expertise/expertise_of_advanced_tactics_1.py index 1bbd138c..6a976e84 100644 --- a/scripts/expertise/expertise_of_advanced_tactics_1.py +++ b/scripts/expertise/expertise_of_advanced_tactics_1.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'officer_1a': - return - - actor.addSkill('expertise_of_advanced_tactics_1') - - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'officer_1a': - return - - actor.removeSkill('expertise_of_advanced_tactics_1') - - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - actor.addAbility('of_buff_def_4') - + actor.addAbility("of_buff_def_4") return def removeAbilities(core, actor, player): - - actor.removeAbility('of_buff_def_4') - + actor.removeAbility("of_buff_def_4") return diff --git a/scripts/expertise/expertise_of_aggro_channel_1.py b/scripts/expertise/expertise_of_aggro_channel_1.py index 854b3726..912c1b43 100644 --- a/scripts/expertise/expertise_of_aggro_channel_1.py +++ b/scripts/expertise/expertise_of_aggro_channel_1.py @@ -1,50 +1,11 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'officer_1a': - return - - actor.addSkill('expertise_of_aggro_channel_1') - - actor.addSkillMod('expertise_aggro_channel', 10) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'officer_1a': - return - - actor.removeSkill('expertise_of_aggro_channel_1') - - actor.removeSkillMod('expertise_aggro_channel', 10) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - actor.addAbility('of_aggro_channel') - + actor.addAbility("of_aggro_channel") + actor.addAbility("expertise_of_aggro_channel_1") return def removeAbilities(core, actor, player): - - actor.removeAbility('of_aggro_channel') - + actor.removeAbility("of_aggro_channel") + actor.removeAbility("expertise_of_aggro_channel_1") return diff --git a/scripts/expertise/expertise_of_aggro_channel_2.py b/scripts/expertise/expertise_of_aggro_channel_2.py new file mode 100644 index 00000000..69b37a58 --- /dev/null +++ b/scripts/expertise/expertise_of_aggro_channel_2.py @@ -0,0 +1,9 @@ +import sys + +def addAbilities(core, actor, player): + actor.addAbility("expertise_of_aggro_channel_2") + return + +def removeAbilities(core, actor, player): + actor.removeAbility("expertise_of_aggro_channel_2") + return diff --git a/scripts/expertise/expertise_of_aggro_channel_3.py b/scripts/expertise/expertise_of_aggro_channel_3.py new file mode 100644 index 00000000..59bb6863 --- /dev/null +++ b/scripts/expertise/expertise_of_aggro_channel_3.py @@ -0,0 +1,9 @@ +import sys + +def addAbilities(core, actor, player): + actor.addAbility("expertise_of_aggro_channel_3") + return + +def removeAbilities(core, actor, player): + actor.removeAbility("expertise_of_aggro_channel_3") + return diff --git a/scripts/expertise/expertise_of_aoe_act_1.py b/scripts/expertise/expertise_of_aoe_act_1.py index ca6b47a6..674c7d3a 100644 --- a/scripts/expertise/expertise_of_aoe_act_1.py +++ b/scripts/expertise/expertise_of_aoe_act_1.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'officer_1a': - return - - actor.addSkill('expertise_of_aoe_act_1') - - actor.addSkillMod('expertise_action_line_of_aoe', 5) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'officer_1a': - return - - actor.removeSkill('expertise_of_aoe_act_1') - - actor.removeSkillMod('expertise_action_line_of_aoe', 5) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_of_aoe_act_1") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_of_aoe_act_1") return diff --git a/scripts/expertise/expertise_of_aoe_act_2.py b/scripts/expertise/expertise_of_aoe_act_2.py index 7d2e2aaf..97120f62 100644 --- a/scripts/expertise/expertise_of_aoe_act_2.py +++ b/scripts/expertise/expertise_of_aoe_act_2.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'officer_1a': - return - - actor.addSkill('expertise_of_aoe_act_2') - - actor.addSkillMod('expertise_action_line_of_aoe', 5) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'officer_1a': - return - - actor.removeSkill('expertise_of_aoe_act_2') - - actor.removeSkillMod('expertise_action_line_of_aoe', 5) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_of_aoe_act_2") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_of_aoe_act_2") return diff --git a/scripts/expertise/expertise_of_aoe_act_3.py b/scripts/expertise/expertise_of_aoe_act_3.py index a07c0839..509996aa 100644 --- a/scripts/expertise/expertise_of_aoe_act_3.py +++ b/scripts/expertise/expertise_of_aoe_act_3.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'officer_1a': - return - - actor.addSkill('expertise_of_aoe_act_3') - - actor.addSkillMod('expertise_action_line_of_aoe', 5) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'officer_1a': - return - - actor.removeSkill('expertise_of_aoe_act_3') - - actor.removeSkillMod('expertise_action_line_of_aoe', 5) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_of_aoe_act_3") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_of_aoe_act_3") return diff --git a/scripts/expertise/expertise_of_aoe_act_4.py b/scripts/expertise/expertise_of_aoe_act_4.py index 221991d5..d6d15040 100644 --- a/scripts/expertise/expertise_of_aoe_act_4.py +++ b/scripts/expertise/expertise_of_aoe_act_4.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'officer_1a': - return - - actor.addSkill('expertise_of_aoe_act_4') - - actor.addSkillMod('expertise_action_line_of_aoe', 10) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'officer_1a': - return - - actor.removeSkill('expertise_of_aoe_act_4') - - actor.removeSkillMod('expertise_action_line_of_aoe', 10) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_of_aoe_act_4") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_of_aoe_act_4") return diff --git a/scripts/expertise/expertise_of_aoe_crit_1.py b/scripts/expertise/expertise_of_aoe_crit_1.py index f099eb09..f87e35f3 100644 --- a/scripts/expertise/expertise_of_aoe_crit_1.py +++ b/scripts/expertise/expertise_of_aoe_crit_1.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'officer_1a': - return - - actor.addSkill('expertise_of_aoe_crit_1') - - actor.addSkillMod('expertise_critical_line_of_aoe', 10) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'officer_1a': - return - - actor.removeSkill('expertise_of_aoe_crit_1') - - actor.removeSkillMod('expertise_critical_line_of_aoe', 10) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_of_aoe_crit_1") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_of_aoe_crit_1") return diff --git a/scripts/expertise/expertise_of_aoe_crit_2.py b/scripts/expertise/expertise_of_aoe_crit_2.py index 9c9f80e4..66c7da61 100644 --- a/scripts/expertise/expertise_of_aoe_crit_2.py +++ b/scripts/expertise/expertise_of_aoe_crit_2.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'officer_1a': - return - - actor.addSkill('expertise_of_aoe_crit_2') - - actor.addSkillMod('expertise_critical_line_of_aoe', 15) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'officer_1a': - return - - actor.removeSkill('expertise_of_aoe_crit_2') - - actor.removeSkillMod('expertise_critical_line_of_aoe', 15) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_of_aoe_crit_2") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_of_aoe_crit_2") return diff --git a/scripts/expertise/expertise_of_aoe_crit_3.py b/scripts/expertise/expertise_of_aoe_crit_3.py index e8c9cfaf..500ec01d 100644 --- a/scripts/expertise/expertise_of_aoe_crit_3.py +++ b/scripts/expertise/expertise_of_aoe_crit_3.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'officer_1a': - return - - actor.addSkill('expertise_of_aoe_crit_3') - - actor.addSkillMod('expertise_critical_line_of_aoe', 25) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'officer_1a': - return - - actor.removeSkill('expertise_of_aoe_crit_3') - - actor.removeSkillMod('expertise_critical_line_of_aoe', 25) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_of_aoe_crit_3") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_of_aoe_crit_3") return diff --git a/scripts/expertise/expertise_of_aoe_dam_1.py b/scripts/expertise/expertise_of_aoe_dam_1.py index aecafb91..89e60747 100644 --- a/scripts/expertise/expertise_of_aoe_dam_1.py +++ b/scripts/expertise/expertise_of_aoe_dam_1.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'officer_1a': - return - - actor.addSkill('expertise_of_aoe_dam_1') - - actor.addSkillMod('expertise_damage_line_of_aoe', 10) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'officer_1a': - return - - actor.removeSkill('expertise_of_aoe_dam_1') - - actor.removeSkillMod('expertise_damage_line_of_aoe', 10) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_of_aoe_dam_1") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_of_aoe_dam_1") return diff --git a/scripts/expertise/expertise_of_aoe_dam_2.py b/scripts/expertise/expertise_of_aoe_dam_2.py index b4051206..67ec6994 100644 --- a/scripts/expertise/expertise_of_aoe_dam_2.py +++ b/scripts/expertise/expertise_of_aoe_dam_2.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'officer_1a': - return - - actor.addSkill('expertise_of_aoe_dam_2') - - actor.addSkillMod('expertise_damage_line_of_aoe', 15) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'officer_1a': - return - - actor.removeSkill('expertise_of_aoe_dam_2') - - actor.removeSkillMod('expertise_damage_line_of_aoe', 15) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_of_aoe_dam_2") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_of_aoe_dam_2") return diff --git a/scripts/expertise/expertise_of_armor_eng_1.py b/scripts/expertise/expertise_of_armor_eng_1.py index bbcb6419..c5d4960e 100644 --- a/scripts/expertise/expertise_of_armor_eng_1.py +++ b/scripts/expertise/expertise_of_armor_eng_1.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'officer_1a': - return - - actor.addSkill('expertise_of_armor_eng_1') - - actor.addSkillMod('expertise_innate_protection_energy', 500) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'officer_1a': - return - - actor.removeSkill('expertise_of_armor_eng_1') - - actor.removeSkillMod('expertise_innate_protection_energy', 500) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_of_armor_eng_1") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_of_armor_eng_1") return diff --git a/scripts/expertise/expertise_of_armor_eng_2.py b/scripts/expertise/expertise_of_armor_eng_2.py index a3384177..ae551145 100644 --- a/scripts/expertise/expertise_of_armor_eng_2.py +++ b/scripts/expertise/expertise_of_armor_eng_2.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'officer_1a': - return - - actor.addSkill('expertise_of_armor_eng_2') - - actor.addSkillMod('expertise_innate_protection_energy', 500) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'officer_1a': - return - - actor.removeSkill('expertise_of_armor_eng_2') - - actor.removeSkillMod('expertise_innate_protection_energy', 500) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_of_armor_eng_2") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_of_armor_eng_2") return diff --git a/scripts/expertise/expertise_of_armor_kin_1.py b/scripts/expertise/expertise_of_armor_kin_1.py index 06713c28..98f1e9e7 100644 --- a/scripts/expertise/expertise_of_armor_kin_1.py +++ b/scripts/expertise/expertise_of_armor_kin_1.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'officer_1a': - return - - actor.addSkill('expertise_of_armor_kin_1') - - actor.addSkillMod('expertise_innate_protection_kinetic', 500) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'officer_1a': - return - - actor.removeSkill('expertise_of_armor_kin_1') - - actor.removeSkillMod('expertise_innate_protection_kinetic', 500) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_of_armor_kin_1") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_of_armor_kin_1") return diff --git a/scripts/expertise/expertise_of_armor_kin_2.py b/scripts/expertise/expertise_of_armor_kin_2.py index b1654a38..a67cdba1 100644 --- a/scripts/expertise/expertise_of_armor_kin_2.py +++ b/scripts/expertise/expertise_of_armor_kin_2.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'officer_1a': - return - - actor.addSkill('expertise_of_armor_kin_2') - - actor.addSkillMod('expertise_innate_protection_kinetic', 500) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'officer_1a': - return - - actor.removeSkill('expertise_of_armor_kin_2') - - actor.removeSkillMod('expertise_innate_protection_kinetic', 500) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_of_armor_kin_2") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_of_armor_kin_2") return diff --git a/scripts/expertise/expertise_of_charge_1.py b/scripts/expertise/expertise_of_charge_1.py index 14086fb6..5667cd17 100644 --- a/scripts/expertise/expertise_of_charge_1.py +++ b/scripts/expertise/expertise_of_charge_1.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'officer_1a': - return - - actor.addSkill('expertise_of_charge_1') - - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'officer_1a': - return - - actor.removeSkill('expertise_of_charge_1') - - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - actor.addAbility('of_charge_1') - + actor.addAbility("of_charge_1") return def removeAbilities(core, actor, player): - - actor.removeAbility('of_charge_1') - + actor.removeAbility("of_charge_1") return diff --git a/scripts/expertise/expertise_of_constitution_1.py b/scripts/expertise/expertise_of_constitution_1.py index 0e6e578c..33d66895 100644 --- a/scripts/expertise/expertise_of_constitution_1.py +++ b/scripts/expertise/expertise_of_constitution_1.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'officer_1a': - return - - actor.addSkill('expertise_of_constitution_1') - - actor.addSkillMod('constitution_modified', 25) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'officer_1a': - return - - actor.removeSkill('expertise_of_constitution_1') - - actor.removeSkillMod('constitution_modified', 25) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_of_constution_1") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_of_constution_1") return diff --git a/scripts/expertise/expertise_of_constitution_2.py b/scripts/expertise/expertise_of_constitution_2.py index 7332ea67..5afec279 100644 --- a/scripts/expertise/expertise_of_constitution_2.py +++ b/scripts/expertise/expertise_of_constitution_2.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'officer_1a': - return - - actor.addSkill('expertise_of_constitution_2') - - actor.addSkillMod('constitution_modified', 25) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'officer_1a': - return - - actor.removeSkill('expertise_of_constitution_2') - - actor.removeSkillMod('constitution_modified', 25) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_of_constution_2") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_of_constution_2") return diff --git a/scripts/expertise/expertise_of_constitution_3.py b/scripts/expertise/expertise_of_constitution_3.py index 96cb9137..eb215ec3 100644 --- a/scripts/expertise/expertise_of_constitution_3.py +++ b/scripts/expertise/expertise_of_constitution_3.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'officer_1a': - return - - actor.addSkill('expertise_of_constitution_3') - - actor.addSkillMod('constitution_modified', 25) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'officer_1a': - return - - actor.removeSkill('expertise_of_constitution_3') - - actor.removeSkillMod('constitution_modified', 25) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_of_constution_3") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_of_constution_3") return diff --git a/scripts/expertise/expertise_of_constitution_4.py b/scripts/expertise/expertise_of_constitution_4.py index 0ba009e9..75679a92 100644 --- a/scripts/expertise/expertise_of_constitution_4.py +++ b/scripts/expertise/expertise_of_constitution_4.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'officer_1a': - return - - actor.addSkill('expertise_of_constitution_4') - - actor.addSkillMod('constitution_modified', 25) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'officer_1a': - return - - actor.removeSkill('expertise_of_constitution_4') - - actor.removeSkillMod('constitution_modified', 25) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_of_constution_4") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_of_constution_4") return diff --git a/scripts/expertise/expertise_of_decapitate_1.py b/scripts/expertise/expertise_of_decapitate_1.py index 5cfb1494..1c6cc6ee 100644 --- a/scripts/expertise/expertise_of_decapitate_1.py +++ b/scripts/expertise/expertise_of_decapitate_1.py @@ -1,48 +1,25 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'officer_1a': - return - - actor.addSkill('expertise_of_decapitate_1') - - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'officer_1a': - return - - actor.removeSkill('expertise_of_decapitate_1') - - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - actor.addAbility('of_decapitate_1') - + if actor.getLevel() >= 26: + actor.addAbility("of_decapitate_1") + if actor.getLevel() >= 34: + actor.addAbility("of_decapitate_2") + if actor.getLevel() >= 48: + actor.addAbility("of_decapitate_3") + if actor.getLevel() >= 62: + actor.addAbility("of_decapitate_4") + if actor.getLevel() >= 76: + actor.addAbility("of_decapitate_5") + if actor.getLevel() >= 90: + actor.addAbility("of_decapitate_6") return def removeAbilities(core, actor, player): - - actor.removeAbility('of_decapitate_1') - + actor.removeAbility("of_decapitate_1") + actor.removeAbility("of_decapitate_2") + actor.removeAbility("of_decapitate_3") + actor.removeAbility("of_decapitate_4") + actor.removeAbility("of_decapitate_5") + actor.removeAbility("of_decapitate_6") return diff --git a/scripts/expertise/expertise_of_dm_1.py b/scripts/expertise/expertise_of_dm_1.py index 165617c2..22659ae7 100644 --- a/scripts/expertise/expertise_of_dm_1.py +++ b/scripts/expertise/expertise_of_dm_1.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'officer_1a': - return - - actor.addSkill('expertise_of_dm_1') - - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'officer_1a': - return - - actor.removeSkill('expertise_of_dm_1') - - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - actor.addAbility('of_pistol_dm') - + actor.addAbility("of_pistol_dm") return def removeAbilities(core, actor, player): - - actor.removeAbility('of_pistol_dm') - + actor.removeAbility("of_pistol_dm") return diff --git a/scripts/expertise/expertise_of_drillmaster_1.py b/scripts/expertise/expertise_of_drillmaster_1.py index 1216d427..1ffea25f 100644 --- a/scripts/expertise/expertise_of_drillmaster_1.py +++ b/scripts/expertise/expertise_of_drillmaster_1.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'officer_1a': - return - - actor.addSkill('expertise_of_drillmaster_1') - - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'officer_1a': - return - - actor.removeSkill('expertise_of_drillmaster_1') - - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - actor.addAbility('of_drillmaster_1') - + actor.addAbility("of_drillmaster_1") return def removeAbilities(core, actor, player): - - actor.removeAbility('of_drillmaster_1') - + actor.removeAbility("of_drillmaster_1") return diff --git a/scripts/expertise/expertise_of_emergency_shield.py b/scripts/expertise/expertise_of_emergency_shield.py index e3a8b519..c29afc3f 100644 --- a/scripts/expertise/expertise_of_emergency_shield.py +++ b/scripts/expertise/expertise_of_emergency_shield.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'officer_1a': - return - - actor.addSkill('expertise_of_emergency_shield') - - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'officer_1a': - return - - actor.removeSkill('expertise_of_emergency_shield') - - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - actor.addAbility('of_emergency_shield') - + actor.addAbility("of_emergency_shield") return def removeAbilities(core, actor, player): - - actor.removeAbility('of_emergency_shield') - + actor.removeAbility("of_emergency_shield") return diff --git a/scripts/expertise/expertise_of_firepower_1.py b/scripts/expertise/expertise_of_firepower_1.py index ff310741..ebdd34a9 100644 --- a/scripts/expertise/expertise_of_firepower_1.py +++ b/scripts/expertise/expertise_of_firepower_1.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'officer_1a': - return - - actor.addSkill('expertise_of_firepower_1') - - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'officer_1a': - return - - actor.removeSkill('expertise_of_firepower_1') - - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - actor.addAbility('of_firepower_1') - + actor.addAbility("of_firepower_1") return def removeAbilities(core, actor, player): - - actor.removeAbility('of_firepower_1') - + actor.removeAbility("of_firepower_1") return diff --git a/scripts/expertise/expertise_of_firepower_cool_1.py b/scripts/expertise/expertise_of_firepower_cool_1.py index d844f5f4..028ad25c 100644 --- a/scripts/expertise/expertise_of_firepower_cool_1.py +++ b/scripts/expertise/expertise_of_firepower_cool_1.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'officer_1a': - return - - actor.addSkill('expertise_of_firepower_cool_1') - - actor.addSkillMod('expertise_cooldown_line_of_firepower', 3) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'officer_1a': - return - - actor.removeSkill('expertise_of_firepower_cool_1') - - actor.removeSkillMod('expertise_cooldown_line_of_firepower', 3) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_of_firepower_1") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_of_firepower_1") return diff --git a/scripts/expertise/expertise_of_firepower_cool_2.py b/scripts/expertise/expertise_of_firepower_cool_2.py index b0fab74f..fdfcbaba 100644 --- a/scripts/expertise/expertise_of_firepower_cool_2.py +++ b/scripts/expertise/expertise_of_firepower_cool_2.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'officer_1a': - return - - actor.addSkill('expertise_of_firepower_cool_2') - - actor.addSkillMod('expertise_cooldown_line_of_firepower', 3) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'officer_1a': - return - - actor.removeSkill('expertise_of_firepower_cool_2') - - actor.removeSkillMod('expertise_cooldown_line_of_firepower', 3) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_of_firepower_2") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_of_firepower_2") return diff --git a/scripts/expertise/expertise_of_firepower_cool_3.py b/scripts/expertise/expertise_of_firepower_cool_3.py index 666c9647..28c63b2a 100644 --- a/scripts/expertise/expertise_of_firepower_cool_3.py +++ b/scripts/expertise/expertise_of_firepower_cool_3.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'officer_1a': - return - - actor.addSkill('expertise_of_firepower_cool_3') - - actor.addSkillMod('expertise_cooldown_line_of_firepower', 4) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'officer_1a': - return - - actor.removeSkill('expertise_of_firepower_cool_3') - - actor.removeSkillMod('expertise_cooldown_line_of_firepower', 4) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_of_firepower_3") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_of_firepower_3") return diff --git a/scripts/expertise/expertise_of_focus_fire_1.py b/scripts/expertise/expertise_of_focus_fire_1.py index 7b0cbaff..0dfc30c4 100644 --- a/scripts/expertise/expertise_of_focus_fire_1.py +++ b/scripts/expertise/expertise_of_focus_fire_1.py @@ -1,48 +1,25 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'officer_1a': - return - - actor.addSkill('expertise_of_focus_fire_1') - - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'officer_1a': - return - - actor.removeSkill('expertise_of_focus_fire_1') - - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - actor.addAbility('of_focus_fire_1') - + if actor.getLevel() >= 26: + actor.addAbility("of_focus_fire_1") + if actor.getLevel() >= 34: + actor.addAbility("of_focus_fire_2") + if actor.getLevel() >= 48: + actor.addAbility("of_focus_fire_3") + if actor.getLevel() >= 62: + actor.addAbility("of_focus_fire_4") + if actor.getLevel() >= 76: + actor.addAbility("of_focus_fire_5") + if actor.getLevel() >= 90: + actor.addAbility("of_focus_fire_6") return def removeAbilities(core, actor, player): - - actor.removeAbility('of_focus_fire_1') - + actor.removeAbility("of_focus_fire_1") + actor.removeAbility("of_focus_fire_2") + actor.removeAbility("of_focus_fire_3") + actor.removeAbility("of_focus_fire_4") + actor.removeAbility("of_focus_fire_5") + actor.removeAbility("of_focus_fire_6") return diff --git a/scripts/expertise/expertise_of_group_buff_duration_1.py b/scripts/expertise/expertise_of_group_buff_duration_1.py index 363bd385..dd53fe02 100644 --- a/scripts/expertise/expertise_of_group_buff_duration_1.py +++ b/scripts/expertise/expertise_of_group_buff_duration_1.py @@ -1,52 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'officer_1a': - return - - actor.addSkill('expertise_of_group_buff_duration_1') - - actor.addSkillMod('expertise_buff_duration_line_of_group_buff', 15) - actor.addSkillMod('expertise_aura_maintain', 1) - actor.addSkillMod('expertise_action_line_of_group_buff', 5) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'officer_1a': - return - - actor.removeSkill('expertise_of_group_buff_duration_1') - - actor.removeSkillMod('expertise_buff_duration_line_of_group_buff', 15) - actor.removeSkillMod('expertise_aura_maintain', 1) - actor.removeSkillMod('expertise_action_line_of_group_buff', 5) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_of_group_buff_duration_1") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_of_group_buff_duration_1") return diff --git a/scripts/expertise/expertise_of_group_buff_duration_2.py b/scripts/expertise/expertise_of_group_buff_duration_2.py index a8e441bc..3414a208 100644 --- a/scripts/expertise/expertise_of_group_buff_duration_2.py +++ b/scripts/expertise/expertise_of_group_buff_duration_2.py @@ -1,52 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'officer_1a': - return - - actor.addSkill('expertise_of_group_buff_duration_2') - - actor.addSkillMod('expertise_buff_duration_line_of_group_buff', 15) - actor.addSkillMod('expertise_aura_maintain', 1) - actor.addSkillMod('expertise_action_line_of_group_buff', 5) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'officer_1a': - return - - actor.removeSkill('expertise_of_group_buff_duration_2') - - actor.removeSkillMod('expertise_buff_duration_line_of_group_buff', 15) - actor.removeSkillMod('expertise_aura_maintain', 1) - actor.removeSkillMod('expertise_action_line_of_group_buff', 5) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_of_group_buff_duration_2") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_of_group_buff_duration_2") return diff --git a/scripts/expertise/expertise_of_heal_cool_1.py b/scripts/expertise/expertise_of_heal_cool_1.py index fe729bcf..9f3a849f 100644 --- a/scripts/expertise/expertise_of_heal_cool_1.py +++ b/scripts/expertise/expertise_of_heal_cool_1.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'officer_1a': - return - - actor.addSkill('expertise_of_heal_cool_1') - - actor.addSkillMod('expertise_cooldown_line_of_heal', 1) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'officer_1a': - return - - actor.removeSkill('expertise_of_heal_cool_1') - - actor.removeSkillMod('expertise_cooldown_line_of_heal', 1) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_of_heal_cool_1") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_of_heal_cool_1") return diff --git a/scripts/expertise/expertise_of_heal_cool_2.py b/scripts/expertise/expertise_of_heal_cool_2.py index 93d3f257..2f5a04ad 100644 --- a/scripts/expertise/expertise_of_heal_cool_2.py +++ b/scripts/expertise/expertise_of_heal_cool_2.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'officer_1a': - return - - actor.addSkill('expertise_of_heal_cool_2') - - actor.addSkillMod('expertise_cooldown_line_of_heal', 2) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'officer_1a': - return - - actor.removeSkill('expertise_of_heal_cool_2') - - actor.removeSkillMod('expertise_cooldown_line_of_heal', 2) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_of_heal_cool_2") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_of_heal_cool_2") return diff --git a/scripts/expertise/expertise_of_heal_dam_1.py b/scripts/expertise/expertise_of_heal_dam_1.py index 5040250a..b9263761 100644 --- a/scripts/expertise/expertise_of_heal_dam_1.py +++ b/scripts/expertise/expertise_of_heal_dam_1.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'officer_1a': - return - - actor.addSkill('expertise_of_heal_dam_1') - - actor.addSkillMod('expertise_healing_line_of_heal', 5) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'officer_1a': - return - - actor.removeSkill('expertise_of_heal_dam_1') - - actor.removeSkillMod('expertise_healing_line_of_heal', 5) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_of_heal_dam_1") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_of_heal_dam_1") return diff --git a/scripts/expertise/expertise_of_heal_dam_2.py b/scripts/expertise/expertise_of_heal_dam_2.py index 40917e3b..2975d55f 100644 --- a/scripts/expertise/expertise_of_heal_dam_2.py +++ b/scripts/expertise/expertise_of_heal_dam_2.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'officer_1a': - return - - actor.addSkill('expertise_of_heal_dam_2') - - actor.addSkillMod('expertise_healing_line_of_heal', 10) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'officer_1a': - return - - actor.removeSkill('expertise_of_heal_dam_2') - - actor.removeSkillMod('expertise_healing_line_of_heal', 10) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_of_heal_dam_2") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_of_heal_dam_2") return diff --git a/scripts/expertise/expertise_of_inspiration_1.py b/scripts/expertise/expertise_of_inspiration_1.py index 8905b42d..201c93dd 100644 --- a/scripts/expertise/expertise_of_inspiration_1.py +++ b/scripts/expertise/expertise_of_inspiration_1.py @@ -1,48 +1,25 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'officer_1a': - return - - actor.addSkill('expertise_of_inspiration_1') - - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'officer_1a': - return - - actor.removeSkill('expertise_of_inspiration_1') - - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - actor.addAbility('of_inspiration_1') - + if actor.getLevel() >= 26: + actor.addAbility("of_inspiration_1") + if actor.getLevel() >= 34: + actor.addAbility("of_inspiration_2") + if actor.getLevel() >= 48: + actor.addAbility("of_inspiration_3") + if actor.getLevel() >= 62: + actor.addAbility("of_inspiration_4") + if actor.getLevel() >= 76: + actor.addAbility("of_inspiration_5") + if actor.getLevel() >= 90: + actor.addAbility("of_inspiration_6") return def removeAbilities(core, actor, player): - - actor.removeAbility('of_inspiration_1') - + actor.removeAbility("of_inspiration_1") + actor.removeAbility("of_inspiration_2") + actor.removeAbility("of_inspiration_3") + actor.removeAbility("of_inspiration_4") + actor.removeAbility("of_inspiration_5") + actor.removeAbility("of_inspiration_6") return diff --git a/scripts/expertise/expertise_of_last_words_1.py b/scripts/expertise/expertise_of_last_words_1.py index 540a29c7..688c8727 100644 --- a/scripts/expertise/expertise_of_last_words_1.py +++ b/scripts/expertise/expertise_of_last_words_1.py @@ -1,46 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'officer_1a': - return - - actor.addSkill('expertise_of_last_words_1') - - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'officer_1a': - return - - actor.removeSkill('expertise_of_last_words_1') - - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - return def removeAbilities(core, actor, player): - return diff --git a/scripts/expertise/expertise_of_leg_strike_1.py b/scripts/expertise/expertise_of_leg_strike_1.py index 3eb59a01..30612f01 100644 --- a/scripts/expertise/expertise_of_leg_strike_1.py +++ b/scripts/expertise/expertise_of_leg_strike_1.py @@ -1,48 +1,28 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'officer_1a': - return - - actor.addSkill('expertise_of_leg_strike_1') - - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'officer_1a': - return - - actor.removeSkill('expertise_of_leg_strike_1') - - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - actor.addAbility('of_leg_strike_1') - + if actor.getLevel() >= 4: + actor.addAbility("of_leg_strike_1") + if actor.getLevel() >= 12: + actor.addAbility("of_leg_strike_2") + if actor.getLevel() >= 20: + actor.addAbility("of_leg_strike_3") + if actor.getLevel() >= 30: + actor.addAbility("of_leg_strike_4") + if actor.getLevel() >= 38: + actor.addAbility("of_leg_strike_5") + if actor.getLevel() >= 52: + actor.addAbility("of_leg_strike_6") + if actor.getLevel() >= 62: + actor.addAbility("of_leg_strike_7") return def removeAbilities(core, actor, player): - - actor.removeAbility('of_leg_strike_1') - + actor.removeAbility("of_leg_strike_1") + actor.removeAbility("of_leg_strike_2") + actor.removeAbility("of_leg_strike_3") + actor.removeAbility("of_leg_strike_4") + actor.removeAbility("of_leg_strike_5") + actor.removeAbility("of_leg_strike_6") + actor.removeAbility("of_leg_strike_7") return diff --git a/scripts/expertise/expertise_of_medical_sup_1.py b/scripts/expertise/expertise_of_medical_sup_1.py index 06c7287d..3b3e1915 100644 --- a/scripts/expertise/expertise_of_medical_sup_1.py +++ b/scripts/expertise/expertise_of_medical_sup_1.py @@ -1,48 +1,25 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'officer_1a': - return - - actor.addSkill('expertise_of_medical_sup_1') - - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'officer_1a': - return - - actor.removeSkill('expertise_of_medical_sup_1') - - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - actor.addAbility('of_medical_sup_1') - + if actor.getLevel() >= 18: + actor.addAbility("of_medical_sup_1") + if actor.getLevel() >= 30: + actor.addAbility("of_medical_sup_2") + if actor.getLevel() >= 44: + actor.addAbility("of_medical_sup_3") + if actor.getLevel() >= 58: + actor.addAbility("of_medical_sup_4") + if actor.getLevel() >= 72: + actor.addAbility("of_medical_sup_5") + if actor.getLevel() >= 86: + actor.addAbility("of_medical_sup_6") return def removeAbilities(core, actor, player): - - actor.removeAbility('of_medical_sup_1') - + actor.removeAbility("of_medical_sup_1") + actor.removeAbility("of_medical_sup_2") + actor.removeAbility("of_medical_sup_3") + actor.removeAbility("of_medical_sup_4") + actor.removeAbility("of_medical_sup_5") + actor.removeAbility("of_medical_sup_6") return diff --git a/scripts/expertise/expertise_of_paint_dam_1.py b/scripts/expertise/expertise_of_paint_dam_1.py index ba5725e3..9ba31a9b 100644 --- a/scripts/expertise/expertise_of_paint_dam_1.py +++ b/scripts/expertise/expertise_of_paint_dam_1.py @@ -1,50 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'officer_1a': - return - - actor.addSkill('expertise_of_paint_dam_1') - - actor.addSkillMod('expertise_damage_line_of_paint', 10) - actor.addSkillMod('expertise_action_line_of_paint', 10) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'officer_1a': - return - - actor.removeSkill('expertise_of_paint_dam_1') - - actor.removeSkillMod('expertise_damage_line_of_paint', 10) - actor.removeSkillMod('expertise_action_line_of_paint', 10) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_of_paint_dam_1") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_of_paint_dam_1") return diff --git a/scripts/expertise/expertise_of_paint_dam_2.py b/scripts/expertise/expertise_of_paint_dam_2.py index 12995cae..7733a8d2 100644 --- a/scripts/expertise/expertise_of_paint_dam_2.py +++ b/scripts/expertise/expertise_of_paint_dam_2.py @@ -1,50 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'officer_1a': - return - - actor.addSkill('expertise_of_paint_dam_2') - - actor.addSkillMod('expertise_damage_line_of_paint', 10) - actor.addSkillMod('expertise_action_line_of_paint', 10) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'officer_1a': - return - - actor.removeSkill('expertise_of_paint_dam_2') - - actor.removeSkillMod('expertise_damage_line_of_paint', 10) - actor.removeSkillMod('expertise_action_line_of_paint', 10) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_of_paint_dam_2") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_of_paint_dam_2") return diff --git a/scripts/expertise/expertise_of_paint_debuff_1.py b/scripts/expertise/expertise_of_paint_debuff_1.py index 5b2ac0cd..f3529a45 100644 --- a/scripts/expertise/expertise_of_paint_debuff_1.py +++ b/scripts/expertise/expertise_of_paint_debuff_1.py @@ -1,48 +1,31 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'officer_1a': - return - - actor.addSkill('expertise_of_paint_debuff_1') - - actor.addSkillMod('expertise_of_adv_paint_debuff', 1) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'officer_1a': - return - - actor.removeSkill('expertise_of_paint_debuff_1') - - actor.removeSkillMod('expertise_of_adv_paint_debuff', 1) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + if actor.getLevel() >= 4: + actor.addAbility("of_adv_paint_debuff_1") + if actor.getLevel() >= 12: + actor.addAbility("of_adv_paint_debuff_2") + if actor.getLevel() >= 20: + actor.addAbility("of_adv_paint_debuff_3") + if actor.getLevel() >= 30: + actor.addAbility("of_adv_paint_debuff_4") + if actor.getLevel() >= 38: + actor.addAbility("of_adv_paint_debuff_5") + if actor.getLevel() >= 52: + actor.addAbility("of_adv_paint_debuff_6") + if actor.getLevel() >= 62: + actor.addAbility("of_adv_paint_debuff_7") + if actor.getLevel() >= 72: + actor.addAbility("of_adv_paint_debuff_8") return def removeAbilities(core, actor, player): - - + actor.removeAbility("of_adv_paint_debuff_1") + actor.removeAbility("of_adv_paint_debuff_2") + actor.removeAbility("of_adv_paint_debuff_3") + actor.removeAbility("of_adv_paint_debuff_4") + actor.removeAbility("of_adv_paint_debuff_5") + actor.removeAbility("of_adv_paint_debuff_6") + actor.removeAbility("of_adv_paint_debuff_7") + actor.removeAbility("of_adv_paint_debuff_8") return diff --git a/scripts/expertise/expertise_of_paint_expose_1.py b/scripts/expertise/expertise_of_paint_expose_1.py index 91c6d84b..561882fd 100644 --- a/scripts/expertise/expertise_of_paint_expose_1.py +++ b/scripts/expertise/expertise_of_paint_expose_1.py @@ -1,48 +1,31 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'officer_1a': - return - - actor.addSkill('expertise_of_paint_expose_1') - - actor.addSkillMod('expertise_of_adv_paint_expose', 1) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'officer_1a': - return - - actor.removeSkill('expertise_of_paint_expose_1') - - actor.removeSkillMod('expertise_of_adv_paint_expose', 1) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + if actor.getLevel() >= 4: + actor.addAbility("of_adv_paint_expose_1") + if actor.getLevel() >= 12: + actor.addAbility("of_adv_paint_expose_2") + if actor.getLevel() >= 20: + actor.addAbility("of_adv_paint_expose_3") + if actor.getLevel() >= 30: + actor.addAbility("of_adv_paint_expose_4") + if actor.getLevel() >= 38: + actor.addAbility("of_adv_paint_expose_5") + if actor.getLevel() >= 52: + actor.addAbility("of_adv_paint_expose_6") + if actor.getLevel() >= 62: + actor.addAbility("of_adv_paint_expose_7") + if actor.getLevel() >= 72: + actor.addAbility("of_adv_paint_expose_8") return def removeAbilities(core, actor, player): - - + actor.removeAbility("of_adv_paint_expose_1") + actor.removeAbility("of_adv_paint_expose_2") + actor.removeAbility("of_adv_paint_expose_3") + actor.removeAbility("of_adv_paint_expose_4") + actor.removeAbility("of_adv_paint_expose_5") + actor.removeAbility("of_adv_paint_expose_6") + actor.removeAbility("of_adv_paint_expose_7") + actor.removeAbility("of_adv_paint_expose_8") return diff --git a/scripts/expertise/expertise_of_pistol_bleed.py b/scripts/expertise/expertise_of_pistol_bleed.py index 2c9835a0..38f923f5 100644 --- a/scripts/expertise/expertise_of_pistol_bleed.py +++ b/scripts/expertise/expertise_of_pistol_bleed.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'officer_1a': - return - - actor.addSkill('expertise_of_pistol_bleed') - - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'officer_1a': - return - - actor.removeSkill('expertise_of_pistol_bleed') - - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - actor.addAbility('of_pistol_bleed') - + actor.addAbility("of_pistol_bleed") return def removeAbilities(core, actor, player): - - actor.removeAbility('of_pistol_bleed') - + actor.removeAbility("of_pistol_bleed") return diff --git a/scripts/expertise/expertise_of_pistol_crit_1.py b/scripts/expertise/expertise_of_pistol_crit_1.py index bc787fd9..7e944647 100644 --- a/scripts/expertise/expertise_of_pistol_crit_1.py +++ b/scripts/expertise/expertise_of_pistol_crit_1.py @@ -1,52 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'officer_1a': - return - - actor.addSkill('expertise_of_pistol_crit_1') - - actor.addSkillMod('expertise_undiminished_critical_pistol', 5) - actor.addSkillMod('expertise_undiminished_critical_carbine', 5) - actor.addSkillMod('expertise_range_bonus_pistol', 4) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'officer_1a': - return - - actor.removeSkill('expertise_of_pistol_crit_1') - - actor.removeSkillMod('expertise_undiminished_critical_pistol', 5) - actor.removeSkillMod('expertise_undiminished_critical_carbine', 5) - actor.removeSkillMod('expertise_range_bonus_pistol', 4) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_of_pistol_crit_1") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_of_pistol_crit_1") return diff --git a/scripts/expertise/expertise_of_pistol_crit_2.py b/scripts/expertise/expertise_of_pistol_crit_2.py index 8d0101ba..d36a18b3 100644 --- a/scripts/expertise/expertise_of_pistol_crit_2.py +++ b/scripts/expertise/expertise_of_pistol_crit_2.py @@ -1,52 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'officer_1a': - return - - actor.addSkill('expertise_of_pistol_crit_2') - - actor.addSkillMod('expertise_undiminished_critical_pistol', 5) - actor.addSkillMod('expertise_undiminished_critical_carbine', 5) - actor.addSkillMod('expertise_range_bonus_pistol', 4) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'officer_1a': - return - - actor.removeSkill('expertise_of_pistol_crit_2') - - actor.removeSkillMod('expertise_undiminished_critical_pistol', 5) - actor.removeSkillMod('expertise_undiminished_critical_carbine', 5) - actor.removeSkillMod('expertise_range_bonus_pistol', 4) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_of_pistol_crit_2") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_of_pistol_crit_2") return diff --git a/scripts/expertise/expertise_of_pistol_dam_1.py b/scripts/expertise/expertise_of_pistol_dam_1.py index dc46dd87..877ac063 100644 --- a/scripts/expertise/expertise_of_pistol_dam_1.py +++ b/scripts/expertise/expertise_of_pistol_dam_1.py @@ -1,50 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'officer_1a': - return - - actor.addSkill('expertise_of_pistol_dam_1') - - actor.addSkillMod('expertise_damage_weapon_1', 2) - actor.addSkillMod('expertise_damage_weapon_2', 3) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'officer_1a': - return - - actor.removeSkill('expertise_of_pistol_dam_1') - - actor.removeSkillMod('expertise_damage_weapon_1', 2) - actor.removeSkillMod('expertise_damage_weapon_2', 3) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_of_pistol_dam_1") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_of_pistol_dam_1") return diff --git a/scripts/expertise/expertise_of_pistol_dam_2.py b/scripts/expertise/expertise_of_pistol_dam_2.py index efd000de..e01f6b55 100644 --- a/scripts/expertise/expertise_of_pistol_dam_2.py +++ b/scripts/expertise/expertise_of_pistol_dam_2.py @@ -1,50 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'officer_1a': - return - - actor.addSkill('expertise_of_pistol_dam_2') - - actor.addSkillMod('expertise_damage_weapon_1', 2) - actor.addSkillMod('expertise_damage_weapon_2', 3) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'officer_1a': - return - - actor.removeSkill('expertise_of_pistol_dam_2') - - actor.removeSkillMod('expertise_damage_weapon_1', 2) - actor.removeSkillMod('expertise_damage_weapon_2', 3) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_of_pistol_dam_2") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_of_pistol_dam_2") return diff --git a/scripts/expertise/expertise_of_pistol_dam_3.py b/scripts/expertise/expertise_of_pistol_dam_3.py index d433e2e7..8762ecfa 100644 --- a/scripts/expertise/expertise_of_pistol_dam_3.py +++ b/scripts/expertise/expertise_of_pistol_dam_3.py @@ -1,50 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'officer_1a': - return - - actor.addSkill('expertise_of_pistol_dam_3') - - actor.addSkillMod('expertise_damage_weapon_1', 2) - actor.addSkillMod('expertise_damage_weapon_2', 3) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'officer_1a': - return - - actor.removeSkill('expertise_of_pistol_dam_3') - - actor.removeSkillMod('expertise_damage_weapon_1', 2) - actor.removeSkillMod('expertise_damage_weapon_2', 3) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_of_pistol_dam_3") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_of_pistol_dam_3") return diff --git a/scripts/expertise/expertise_of_pistol_dam_4.py b/scripts/expertise/expertise_of_pistol_dam_4.py index a9dc63c6..478313ef 100644 --- a/scripts/expertise/expertise_of_pistol_dam_4.py +++ b/scripts/expertise/expertise_of_pistol_dam_4.py @@ -1,50 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'officer_1a': - return - - actor.addSkill('expertise_of_pistol_dam_4') - - actor.addSkillMod('expertise_damage_weapon_1', 2) - actor.addSkillMod('expertise_damage_weapon_2', 3) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'officer_1a': - return - - actor.removeSkill('expertise_of_pistol_dam_4') - - actor.removeSkillMod('expertise_damage_weapon_1', 2) - actor.removeSkillMod('expertise_damage_weapon_2', 3) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_of_pistol_dam_4") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_of_pistol_dam_4") return diff --git a/scripts/expertise/expertise_of_precision_1.py b/scripts/expertise/expertise_of_precision_1.py index 8933a340..fb5f45a2 100644 --- a/scripts/expertise/expertise_of_precision_1.py +++ b/scripts/expertise/expertise_of_precision_1.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'officer_1a': - return - - actor.addSkill('expertise_of_precision_1') - - actor.addSkillMod('precision_modified', 25) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'officer_1a': - return - - actor.removeSkill('expertise_of_precision_1') - - actor.removeSkillMod('precision_modified', 25) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_of_precision_1") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_of_precision_1") return diff --git a/scripts/expertise/expertise_of_precision_2.py b/scripts/expertise/expertise_of_precision_2.py index 0d2f5a03..95ba3853 100644 --- a/scripts/expertise/expertise_of_precision_2.py +++ b/scripts/expertise/expertise_of_precision_2.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'officer_1a': - return - - actor.addSkill('expertise_of_precision_2') - - actor.addSkillMod('precision_modified', 25) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'officer_1a': - return - - actor.removeSkill('expertise_of_precision_2') - - actor.removeSkillMod('precision_modified', 25) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_of_precision_2") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_of_precision_2") return diff --git a/scripts/expertise/expertise_of_precision_3.py b/scripts/expertise/expertise_of_precision_3.py index 78b48b4e..cfb27438 100644 --- a/scripts/expertise/expertise_of_precision_3.py +++ b/scripts/expertise/expertise_of_precision_3.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'officer_1a': - return - - actor.addSkill('expertise_of_precision_3') - - actor.addSkillMod('precision_modified', 25) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'officer_1a': - return - - actor.removeSkill('expertise_of_precision_3') - - actor.removeSkillMod('precision_modified', 25) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_of_precision_3") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_of_precision_3") return diff --git a/scripts/expertise/expertise_of_precision_4.py b/scripts/expertise/expertise_of_precision_4.py index 04824268..9ca52db1 100644 --- a/scripts/expertise/expertise_of_precision_4.py +++ b/scripts/expertise/expertise_of_precision_4.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'officer_1a': - return - - actor.addSkill('expertise_of_precision_4') - - actor.addSkillMod('precision_modified', 25) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'officer_1a': - return - - actor.removeSkill('expertise_of_precision_4') - - actor.removeSkillMod('precision_modified', 25) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_of_precision_4") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_of_precision_4") return diff --git a/scripts/expertise/expertise_of_purge_1.py b/scripts/expertise/expertise_of_purge_1.py index c6c4bdfa..3598d236 100644 --- a/scripts/expertise/expertise_of_purge_1.py +++ b/scripts/expertise/expertise_of_purge_1.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'officer_1a': - return - - actor.addSkill('expertise_of_purge_1') - - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'officer_1a': - return - - actor.removeSkill('expertise_of_purge_1') - - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - actor.addAbility('of_purge_1') - + actor.addAbility("of_purge_1") return def removeAbilities(core, actor, player): - - actor.removeAbility('of_purge_1') - + actor.removeAbility("of_purge_1") return diff --git a/scripts/expertise/expertise_of_reinforcements_1.py b/scripts/expertise/expertise_of_reinforcements_1.py index 7c68a80f..06aa5cad 100644 --- a/scripts/expertise/expertise_of_reinforcements_1.py +++ b/scripts/expertise/expertise_of_reinforcements_1.py @@ -1,48 +1,22 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'officer_1a': - return - - actor.addSkill('expertise_of_reinforcements_1') - - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'officer_1a': - return - - actor.removeSkill('expertise_of_reinforcements_1') - - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - actor.addAbility('of_reinforcements_1') - + if actor.getLevel() >= 10: + actor.addAbility("of_reinforcements_1") + if actor.getLevel() >= 34: + actor.addAbility("of_reinforcements_2") + if actor.getLevel() >= 48: + actor.addAbility("of_reinforcements_3") + if actor.getLevel() >= 62: + actor.addAbility("of_reinforcements_4") + if actor.getLevel() >= 76: + actor.addAbility("of_reinforcements_5") return def removeAbilities(core, actor, player): - - actor.removeAbility('of_reinforcements_1') - + actor.removeAbility("of_reinforcements_1") + actor.removeAbility("of_reinforcements_2") + actor.removeAbility("of_reinforcements_3") + actor.removeAbility("of_reinforcements_4") + actor.removeAbility("of_reinforcements_5") return diff --git a/scripts/expertise/expertise_of_scatter_1.py b/scripts/expertise/expertise_of_scatter_1.py index e9ce9565..85ab0ef8 100644 --- a/scripts/expertise/expertise_of_scatter_1.py +++ b/scripts/expertise/expertise_of_scatter_1.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'officer_1a': - return - - actor.addSkill('expertise_of_scatter_1') - - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'officer_1a': - return - - actor.removeSkill('expertise_of_scatter_1') - - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - actor.addAbility('of_scatter_1') - + actor.addAbility("of_scatter_1") return def removeAbilities(core, actor, player): - - actor.removeAbility('of_scatter_1') - + actor.removeAbility("of_scatter_1") return diff --git a/scripts/expertise/expertise_of_stamina_1.py b/scripts/expertise/expertise_of_stamina_1.py index deaa1e13..73155458 100644 --- a/scripts/expertise/expertise_of_stamina_1.py +++ b/scripts/expertise/expertise_of_stamina_1.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'officer_1a': - return - - actor.addSkill('expertise_of_stamina_1') - - actor.addSkillMod('stamina_modified', 25) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'officer_1a': - return - - actor.removeSkill('expertise_of_stamina_1') - - actor.removeSkillMod('stamina_modified', 25) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_of_stamina_1") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_of_stamina_1") return diff --git a/scripts/expertise/expertise_of_stamina_2.py b/scripts/expertise/expertise_of_stamina_2.py index 3dcfda6b..1cc498d9 100644 --- a/scripts/expertise/expertise_of_stamina_2.py +++ b/scripts/expertise/expertise_of_stamina_2.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'officer_1a': - return - - actor.addSkill('expertise_of_stamina_2') - - actor.addSkillMod('stamina_modified', 25) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'officer_1a': - return - - actor.removeSkill('expertise_of_stamina_2') - - actor.removeSkillMod('stamina_modified', 25) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_of_stamina_2") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_of_stamina_2") return diff --git a/scripts/expertise/expertise_of_stamina_3.py b/scripts/expertise/expertise_of_stamina_3.py index fa6810b5..63826671 100644 --- a/scripts/expertise/expertise_of_stamina_3.py +++ b/scripts/expertise/expertise_of_stamina_3.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'officer_1a': - return - - actor.addSkill('expertise_of_stamina_3') - - actor.addSkillMod('stamina_modified', 25) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'officer_1a': - return - - actor.removeSkill('expertise_of_stamina_3') - - actor.removeSkillMod('stamina_modified', 25) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_of_stamina_3") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_of_stamina_3") return diff --git a/scripts/expertise/expertise_of_stamina_4.py b/scripts/expertise/expertise_of_stamina_4.py index 94dbeab3..22e5cea3 100644 --- a/scripts/expertise/expertise_of_stamina_4.py +++ b/scripts/expertise/expertise_of_stamina_4.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'officer_1a': - return - - actor.addSkill('expertise_of_stamina_4') - - actor.addSkillMod('stamina_modified', 25) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'officer_1a': - return - - actor.removeSkill('expertise_of_stamina_4') - - actor.removeSkillMod('stamina_modified', 25) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_of_stamina_4") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_of_stamina_4") return diff --git a/scripts/expertise/expertise_of_stimulator_1.py b/scripts/expertise/expertise_of_stimulator_1.py index 6e66f3b4..10ab1e90 100644 --- a/scripts/expertise/expertise_of_stimulator_1.py +++ b/scripts/expertise/expertise_of_stimulator_1.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'officer_1a': - return - - actor.addSkill('expertise_of_stimulator_1') - - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'officer_1a': - return - - actor.removeSkill('expertise_of_stimulator_1') - - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - actor.addAbility('of_stimulator_1') - + actor.addAbility("of_stimulator_1") return def removeAbilities(core, actor, player): - - actor.removeAbility('of_stimulator_1') - + actor.removeAbility("of_stimulator_1") return diff --git a/scripts/expertise/expertise_of_strength_1.py b/scripts/expertise/expertise_of_strength_1.py index b2fa95d0..3decd9c7 100644 --- a/scripts/expertise/expertise_of_strength_1.py +++ b/scripts/expertise/expertise_of_strength_1.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'officer_1a': - return - - actor.addSkill('expertise_of_strength_1') - - actor.addSkillMod('strength_modified', 25) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'officer_1a': - return - - actor.removeSkill('expertise_of_strength_1') - - actor.removeSkillMod('strength_modified', 25) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_of_strength_1") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_of_strength_1") return diff --git a/scripts/expertise/expertise_of_strength_2.py b/scripts/expertise/expertise_of_strength_2.py index 8a05bcc3..676d8d92 100644 --- a/scripts/expertise/expertise_of_strength_2.py +++ b/scripts/expertise/expertise_of_strength_2.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'officer_1a': - return - - actor.addSkill('expertise_of_strength_2') - - actor.addSkillMod('strength_modified', 25) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'officer_1a': - return - - actor.removeSkill('expertise_of_strength_2') - - actor.removeSkillMod('strength_modified', 25) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_of_strength_2") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_of_strength_2") return diff --git a/scripts/expertise/expertise_of_strength_3.py b/scripts/expertise/expertise_of_strength_3.py index 6dbddcf1..d6780308 100644 --- a/scripts/expertise/expertise_of_strength_3.py +++ b/scripts/expertise/expertise_of_strength_3.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'officer_1a': - return - - actor.addSkill('expertise_of_strength_3') - - actor.addSkillMod('strength_modified', 25) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'officer_1a': - return - - actor.removeSkill('expertise_of_strength_3') - - actor.removeSkillMod('strength_modified', 25) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_of_strength_3") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_of_strength_3") return diff --git a/scripts/expertise/expertise_of_strength_4.py b/scripts/expertise/expertise_of_strength_4.py index 067d377a..4a59b20d 100644 --- a/scripts/expertise/expertise_of_strength_4.py +++ b/scripts/expertise/expertise_of_strength_4.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'officer_1a': - return - - actor.addSkill('expertise_of_strength_4') - - actor.addSkillMod('strength_modified', 25) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'officer_1a': - return - - actor.removeSkill('expertise_of_strength_4') - - actor.removeSkillMod('strength_modified', 25) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_of_strength_4") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_of_strength_4") return diff --git a/scripts/expertise/expertise_of_sup_cool_1.py b/scripts/expertise/expertise_of_sup_cool_1.py index aaa7224b..2e982ac3 100644 --- a/scripts/expertise/expertise_of_sup_cool_1.py +++ b/scripts/expertise/expertise_of_sup_cool_1.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'officer_1a': - return - - actor.addSkill('expertise_of_sup_cool_1') - - actor.addSkillMod('expertise_cooldown_line_of_sup', 3) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'officer_1a': - return - - actor.removeSkill('expertise_of_sup_cool_1') - - actor.removeSkillMod('expertise_cooldown_line_of_sup', 3) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_of_sup_cool_1") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_of_sup_cool_1") return diff --git a/scripts/expertise/expertise_of_sup_cool_2.py b/scripts/expertise/expertise_of_sup_cool_2.py index 8beb380c..1d469433 100644 --- a/scripts/expertise/expertise_of_sup_cool_2.py +++ b/scripts/expertise/expertise_of_sup_cool_2.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'officer_1a': - return - - actor.addSkill('expertise_of_sup_cool_2') - - actor.addSkillMod('expertise_cooldown_line_of_sup', 4) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'officer_1a': - return - - actor.removeSkill('expertise_of_sup_cool_2') - - actor.removeSkillMod('expertise_cooldown_line_of_sup', 4) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_of_sup_cool_2") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_of_sup_cool_2") return diff --git a/scripts/expertise/expertise_of_sup_cool_3.py b/scripts/expertise/expertise_of_sup_cool_3.py index 9e6e8c8d..32064d76 100644 --- a/scripts/expertise/expertise_of_sup_cool_3.py +++ b/scripts/expertise/expertise_of_sup_cool_3.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'officer_1a': - return - - actor.addSkill('expertise_of_sup_cool_3') - - actor.addSkillMod('expertise_cooldown_line_of_sup', 4) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'officer_1a': - return - - actor.removeSkill('expertise_of_sup_cool_3') - - actor.removeSkillMod('expertise_cooldown_line_of_sup', 4) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_of_sup_cool_3") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_of_sup_cool_3") return diff --git a/scripts/expertise/expertise_of_sup_cool_4.py b/scripts/expertise/expertise_of_sup_cool_4.py index 083f92ab..3a2418dc 100644 --- a/scripts/expertise/expertise_of_sup_cool_4.py +++ b/scripts/expertise/expertise_of_sup_cool_4.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'officer_1a': - return - - actor.addSkill('expertise_of_sup_cool_4') - - actor.addSkillMod('expertise_cooldown_line_of_sup', 4) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'officer_1a': - return - - actor.removeSkill('expertise_of_sup_cool_4') - - actor.removeSkillMod('expertise_cooldown_line_of_sup', 4) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_of_sup_cool_4") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_of_sup_cool_4") return diff --git a/scripts/expertise/expertise_of_sure_act_1.py b/scripts/expertise/expertise_of_sure_act_1.py index 14e31356..5d4f27cd 100644 --- a/scripts/expertise/expertise_of_sure_act_1.py +++ b/scripts/expertise/expertise_of_sure_act_1.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'officer_1a': - return - - actor.addSkill('expertise_of_sure_act_1') - - actor.addSkillMod('expertise_action_line_of_sure', 5) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'officer_1a': - return - - actor.removeSkill('expertise_of_sure_act_1') - - actor.removeSkillMod('expertise_action_line_of_sure', 5) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_of_sure_act_1") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_of_sure_act_1") return diff --git a/scripts/expertise/expertise_of_sure_act_2.py b/scripts/expertise/expertise_of_sure_act_2.py index 441a8ce7..208d6135 100644 --- a/scripts/expertise/expertise_of_sure_act_2.py +++ b/scripts/expertise/expertise_of_sure_act_2.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'officer_1a': - return - - actor.addSkill('expertise_of_sure_act_2') - - actor.addSkillMod('expertise_action_line_of_sure', 5) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'officer_1a': - return - - actor.removeSkill('expertise_of_sure_act_2') - - actor.removeSkillMod('expertise_action_line_of_sure', 5) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_of_sure_act_2") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_of_sure_act_2") return diff --git a/scripts/expertise/expertise_of_sure_act_3.py b/scripts/expertise/expertise_of_sure_act_3.py index 908d9e13..d66005c7 100644 --- a/scripts/expertise/expertise_of_sure_act_3.py +++ b/scripts/expertise/expertise_of_sure_act_3.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'officer_1a': - return - - actor.addSkill('expertise_of_sure_act_3') - - actor.addSkillMod('expertise_action_line_of_sure', 5) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'officer_1a': - return - - actor.removeSkill('expertise_of_sure_act_3') - - actor.removeSkillMod('expertise_action_line_of_sure', 5) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_of_sure_act_3") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_of_sure_act_3") return diff --git a/scripts/expertise/expertise_of_sure_act_4.py b/scripts/expertise/expertise_of_sure_act_4.py index b876afe3..75485c39 100644 --- a/scripts/expertise/expertise_of_sure_act_4.py +++ b/scripts/expertise/expertise_of_sure_act_4.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'officer_1a': - return - - actor.addSkill('expertise_of_sure_act_4') - - actor.addSkillMod('expertise_action_line_of_sure', 10) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'officer_1a': - return - - actor.removeSkill('expertise_of_sure_act_4') - - actor.removeSkillMod('expertise_action_line_of_sure', 10) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_of_sure_act_4") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_of_sure_act_4") return diff --git a/scripts/expertise/expertise_of_sure_dam_1.py b/scripts/expertise/expertise_of_sure_dam_1.py index 4a18bcb2..8acfba2d 100644 --- a/scripts/expertise/expertise_of_sure_dam_1.py +++ b/scripts/expertise/expertise_of_sure_dam_1.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'officer_1a': - return - - actor.addSkill('expertise_of_sure_dam_1') - - actor.addSkillMod('expertise_damage_line_of_sure', 5) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'officer_1a': - return - - actor.removeSkill('expertise_of_sure_dam_1') - - actor.removeSkillMod('expertise_damage_line_of_sure', 5) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_of_sure_dam_1") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_of_sure_dam_1") return diff --git a/scripts/expertise/expertise_of_sure_dam_2.py b/scripts/expertise/expertise_of_sure_dam_2.py index 9d199519..740150f1 100644 --- a/scripts/expertise/expertise_of_sure_dam_2.py +++ b/scripts/expertise/expertise_of_sure_dam_2.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'officer_1a': - return - - actor.addSkill('expertise_of_sure_dam_2') - - actor.addSkillMod('expertise_damage_line_of_sure', 5) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'officer_1a': - return - - actor.removeSkill('expertise_of_sure_dam_2') - - actor.removeSkillMod('expertise_damage_line_of_sure', 5) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_of_sure_dam_2") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_of_sure_dam_2") return diff --git a/scripts/expertise/expertise_of_sure_dam_3.py b/scripts/expertise/expertise_of_sure_dam_3.py index f39ac985..05c3d330 100644 --- a/scripts/expertise/expertise_of_sure_dam_3.py +++ b/scripts/expertise/expertise_of_sure_dam_3.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'officer_1a': - return - - actor.addSkill('expertise_of_sure_dam_3') - - actor.addSkillMod('expertise_damage_line_of_sure', 5) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'officer_1a': - return - - actor.removeSkill('expertise_of_sure_dam_3') - - actor.removeSkillMod('expertise_damage_line_of_sure', 5) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_of_sure_dam_3") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_of_sure_dam_3") return diff --git a/scripts/expertise/expertise_of_tactical_sup_1.py b/scripts/expertise/expertise_of_tactical_sup_1.py index ce701bb6..a3434b0e 100644 --- a/scripts/expertise/expertise_of_tactical_sup_1.py +++ b/scripts/expertise/expertise_of_tactical_sup_1.py @@ -1,46 +1,25 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'officer_1a': - return - - actor.addSkill('expertise_of_tactical_sup_1') - - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'officer_1a': - return - - actor.removeSkill('expertise_of_tactical_sup_1') - - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + if actor.getLevel() >= 10: + actor.addAbility("of_tactical_sup_1") + if actor.getLevel() >= 34: + actor.addAbility("of_tactical_sup_2") + if actor.getLevel() >= 48: + actor.addAbility("of_tactical_sup_3") + if actor.getLevel() >= 62: + actor.addAbility("of_tactical_sup_4") + if actor.getLevel() >= 76: + actor.addAbility("of_tactical_sup_5") + if actor.getLevel() >= 90: + actor.addAbility("of_tactical_sup_6") return def removeAbilities(core, actor, player): - - + actor.removeAbility("of_tactical_sup_1") + actor.removeAbility("of_tactical_sup_2") + actor.removeAbility("of_tactical_sup_3") + actor.removeAbility("of_tactical_sup_4") + actor.removeAbility("of_tactical_sup_5") + actor.removeAbility("of_tactical_sup_6") return diff --git a/scripts/expertise/expertise_of_vortex_1.py b/scripts/expertise/expertise_of_vortex_1.py index e2a24f55..a4f6f04c 100644 --- a/scripts/expertise/expertise_of_vortex_1.py +++ b/scripts/expertise/expertise_of_vortex_1.py @@ -1,48 +1,22 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'officer_1a': - return - - actor.addSkill('expertise_of_vortex_1') - - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'officer_1a': - return - - actor.removeSkill('expertise_of_vortex_1') - - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - actor.addAbility('of_vortex_1') - + if actor.getLevel() >= 26: + actor.addAbility("of_vortex_1") + if actor.getLevel() >= 34: + actor.addAbility("of_vortex_2") + if actor.getLevel() >= 48: + actor.addAbility("of_vortex_3") + if actor.getLevel() >= 62: + actor.addAbility("of_vortex_4") + if actor.getLevel() >= 76: + actor.addAbility("of_vortex_5") return def removeAbilities(core, actor, player): - - actor.removeAbility('of_vortex_1') - + actor.removeAbility("of_vortex_1") + actor.removeAbility("of_vortex_2") + actor.removeAbility("of_vortex_3") + actor.removeAbility("of_vortex_4") + actor.removeAbility("of_vortex_5") return diff --git a/scripts/expertise/expertise_sm_general_bad_odds_1.py b/scripts/expertise/expertise_sm_general_bad_odds_1.py index e2c44993..5435e2e9 100644 --- a/scripts/expertise/expertise_sm_general_bad_odds_1.py +++ b/scripts/expertise/expertise_sm_general_bad_odds_1.py @@ -1,48 +1,22 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'smuggler_1a': - return - - actor.addSkill('expertise_sm_general_bad_odds_1') - - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'smuggler_1a': - return - - actor.removeSkill('expertise_sm_general_bad_odds_1') - - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - actor.addAbility('sm_bad_odds_1') - + if actor.getLevel() >= 34: + actor.addAbility("sm_bad_odds_1") + if actor.getLevel() >= 46: + actor.addAbility("sm_bad_odds_2") + if actor.getLevel() >= 58: + actor.addAbility("sm_bad_odds_3") + if actor.getLevel() >= 74: + actor.addAbility("sm_bad_odds_4") + if actor.getLevel() >= 84: + actor.addAbility("sm_bad_odds_5") return def removeAbilities(core, actor, player): - - actor.removeAbility('sm_bad_odds_1') - + actor.removeAbility("sm_bad_odds_1") + actor.removeAbility("sm_bad_odds_2") + actor.removeAbility("sm_bad_odds_3") + actor.removeAbility("sm_bad_odds_4") + actor.removeAbility("sm_bad_odds_5") return diff --git a/scripts/expertise/expertise_sm_general_break_the_deal_1.py b/scripts/expertise/expertise_sm_general_break_the_deal_1.py index f12dfb8f..757e75f9 100644 --- a/scripts/expertise/expertise_sm_general_break_the_deal_1.py +++ b/scripts/expertise/expertise_sm_general_break_the_deal_1.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'smuggler_1a': - return - - actor.addSkill('expertise_sm_general_break_the_deal_1') - - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'smuggler_1a': - return - - actor.removeSkill('expertise_sm_general_break_the_deal_1') - - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - actor.addAbility('sm_break_the_deal') - + actor.addAbility("sm_break_the_deal") return def removeAbilities(core, actor, player): - - actor.removeAbility('sm_break_the_deal') - + actor.removeAbility("sm_break_the_deal") return diff --git a/scripts/expertise/expertise_sm_general_double_deal_1.py b/scripts/expertise/expertise_sm_general_double_deal_1.py index 237b1cbd..8dbe17db 100644 --- a/scripts/expertise/expertise_sm_general_double_deal_1.py +++ b/scripts/expertise/expertise_sm_general_double_deal_1.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'smuggler_1a': - return - - actor.addSkill('expertise_sm_general_double_deal_1') - - actor.addSkillMod('expertise_double_deal_chance', 10) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'smuggler_1a': - return - - actor.removeSkill('expertise_sm_general_double_deal_1') - - actor.removeSkillMod('expertise_double_deal_chance', 10) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_sm_general_double_deal_1") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_sm_general_double_deal_1") return diff --git a/scripts/expertise/expertise_sm_general_double_deal_2.py b/scripts/expertise/expertise_sm_general_double_deal_2.py index f5b3e464..5215636e 100644 --- a/scripts/expertise/expertise_sm_general_double_deal_2.py +++ b/scripts/expertise/expertise_sm_general_double_deal_2.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'smuggler_1a': - return - - actor.addSkill('expertise_sm_general_double_deal_2') - - actor.addSkillMod('expertise_double_deal_chance', 10) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'smuggler_1a': - return - - actor.removeSkill('expertise_sm_general_double_deal_2') - - actor.removeSkillMod('expertise_double_deal_chance', 10) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_sm_general_double_deal_2") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_sm_general_double_deal_2") return diff --git a/scripts/expertise/expertise_sm_general_elbow_grease_1.py b/scripts/expertise/expertise_sm_general_elbow_grease_1.py index 92f55ca2..b0ff55ad 100644 --- a/scripts/expertise/expertise_sm_general_elbow_grease_1.py +++ b/scripts/expertise/expertise_sm_general_elbow_grease_1.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'smuggler_1a': - return - - actor.addSkill('expertise_sm_general_elbow_grease_1') - - actor.addSkillMod('expertise_action_weapon_melee', 5) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'smuggler_1a': - return - - actor.removeSkill('expertise_sm_general_elbow_grease_1') - - actor.removeSkillMod('expertise_action_weapon_melee', 5) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_sm_general_elbow_grease_1") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_sm_general_elbow_grease_1") return diff --git a/scripts/expertise/expertise_sm_general_end_of_the_line_1.py b/scripts/expertise/expertise_sm_general_end_of_the_line_1.py index 3afc6b0b..05ec2f19 100644 --- a/scripts/expertise/expertise_sm_general_end_of_the_line_1.py +++ b/scripts/expertise/expertise_sm_general_end_of_the_line_1.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'smuggler_1a': - return - - actor.addSkill('expertise_sm_general_end_of_the_line_1') - - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'smuggler_1a': - return - - actor.removeSkill('expertise_sm_general_end_of_the_line_1') - - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - actor.addAbility('sm_end_of_the_line') - + actor.addAbility("sm_end_of_the_line") return def removeAbilities(core, actor, player): - - actor.removeAbility('sm_end_of_the_line') - + actor.removeAbility("sm_end_of_the_line") return diff --git a/scripts/expertise/expertise_sm_general_enhanced_luck_1.py b/scripts/expertise/expertise_sm_general_enhanced_luck_1.py index 3446d7af..347e28e3 100644 --- a/scripts/expertise/expertise_sm_general_enhanced_luck_1.py +++ b/scripts/expertise/expertise_sm_general_enhanced_luck_1.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'smuggler_1a': - return - - actor.addSkill('expertise_sm_general_enhanced_luck_1') - - actor.addSkillMod('strength_modified', 25) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'smuggler_1a': - return - - actor.removeSkill('expertise_sm_general_enhanced_luck_1') - - actor.removeSkillMod('strength_modified', 25) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_sm_general_enhanced_luck_1") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_sm_general_enhanced_luck_1") return diff --git a/scripts/expertise/expertise_sm_general_enhanced_luck_2.py b/scripts/expertise/expertise_sm_general_enhanced_luck_2.py index f0402408..2f9d1747 100644 --- a/scripts/expertise/expertise_sm_general_enhanced_luck_2.py +++ b/scripts/expertise/expertise_sm_general_enhanced_luck_2.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'smuggler_1a': - return - - actor.addSkill('expertise_sm_general_enhanced_luck_2') - - actor.addSkillMod('strength_modified', 25) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'smuggler_1a': - return - - actor.removeSkill('expertise_sm_general_enhanced_luck_2') - - actor.removeSkillMod('strength_modified', 25) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_sm_general_enhanced_luck_2") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_sm_general_enhanced_luck_2") return diff --git a/scripts/expertise/expertise_sm_general_enhanced_luck_3.py b/scripts/expertise/expertise_sm_general_enhanced_luck_3.py index dc8fb800..ad637ef1 100644 --- a/scripts/expertise/expertise_sm_general_enhanced_luck_3.py +++ b/scripts/expertise/expertise_sm_general_enhanced_luck_3.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'smuggler_1a': - return - - actor.addSkill('expertise_sm_general_enhanced_luck_3') - - actor.addSkillMod('strength_modified', 25) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'smuggler_1a': - return - - actor.removeSkill('expertise_sm_general_enhanced_luck_3') - - actor.removeSkillMod('strength_modified', 25) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_sm_general_enhanced_luck_3") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_sm_general_enhanced_luck_3") return diff --git a/scripts/expertise/expertise_sm_general_enhanced_luck_4.py b/scripts/expertise/expertise_sm_general_enhanced_luck_4.py index 6c844743..acbe531d 100644 --- a/scripts/expertise/expertise_sm_general_enhanced_luck_4.py +++ b/scripts/expertise/expertise_sm_general_enhanced_luck_4.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'smuggler_1a': - return - - actor.addSkill('expertise_sm_general_enhanced_luck_4') - - actor.addSkillMod('strength_modified', 25) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'smuggler_1a': - return - - actor.removeSkill('expertise_sm_general_enhanced_luck_4') - - actor.removeSkillMod('strength_modified', 25) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_sm_general_enhanced_luck_4") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_sm_general_enhanced_luck_4") return diff --git a/scripts/expertise/expertise_sm_general_enhanced_precision_1.py b/scripts/expertise/expertise_sm_general_enhanced_precision_1.py index 9a865689..959579d6 100644 --- a/scripts/expertise/expertise_sm_general_enhanced_precision_1.py +++ b/scripts/expertise/expertise_sm_general_enhanced_precision_1.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'smuggler_1a': - return - - actor.addSkill('expertise_sm_general_enhanced_precision_1') - - actor.addSkillMod('agility_modified', 25) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'smuggler_1a': - return - - actor.removeSkill('expertise_sm_general_enhanced_precision_1') - - actor.removeSkillMod('agility_modified', 25) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_sm_general_enhanced_precision_1") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_sm_general_enhanced_precision_1") return diff --git a/scripts/expertise/expertise_sm_general_enhanced_precision_2.py b/scripts/expertise/expertise_sm_general_enhanced_precision_2.py index dda076b0..a50e08ba 100644 --- a/scripts/expertise/expertise_sm_general_enhanced_precision_2.py +++ b/scripts/expertise/expertise_sm_general_enhanced_precision_2.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'smuggler_1a': - return - - actor.addSkill('expertise_sm_general_enhanced_precision_2') - - actor.addSkillMod('agility_modified', 25) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'smuggler_1a': - return - - actor.removeSkill('expertise_sm_general_enhanced_precision_2') - - actor.removeSkillMod('agility_modified', 25) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_sm_general_enhanced_precision_2") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_sm_general_enhanced_precision_2") return diff --git a/scripts/expertise/expertise_sm_general_enhanced_precision_3.py b/scripts/expertise/expertise_sm_general_enhanced_precision_3.py index 3d93777f..58c40a83 100644 --- a/scripts/expertise/expertise_sm_general_enhanced_precision_3.py +++ b/scripts/expertise/expertise_sm_general_enhanced_precision_3.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'smuggler_1a': - return - - actor.addSkill('expertise_sm_general_enhanced_precision_3') - - actor.addSkillMod('agility_modified', 25) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'smuggler_1a': - return - - actor.removeSkill('expertise_sm_general_enhanced_precision_3') - - actor.removeSkillMod('agility_modified', 25) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_sm_general_enhanced_precision_3") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_sm_general_enhanced_precision_3") return diff --git a/scripts/expertise/expertise_sm_general_enhanced_precision_4.py b/scripts/expertise/expertise_sm_general_enhanced_precision_4.py index 3aa85853..938574a4 100644 --- a/scripts/expertise/expertise_sm_general_enhanced_precision_4.py +++ b/scripts/expertise/expertise_sm_general_enhanced_precision_4.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'smuggler_1a': - return - - actor.addSkill('expertise_sm_general_enhanced_precision_4') - - actor.addSkillMod('agility_modified', 25) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'smuggler_1a': - return - - actor.removeSkill('expertise_sm_general_enhanced_precision_4') - - actor.removeSkillMod('agility_modified', 25) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_sm_general_enhanced_precision_4") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_sm_general_enhanced_precision_4") return diff --git a/scripts/expertise/expertise_sm_general_gun_oil_1.py b/scripts/expertise/expertise_sm_general_gun_oil_1.py index f71e62d5..618b2f14 100644 --- a/scripts/expertise/expertise_sm_general_gun_oil_1.py +++ b/scripts/expertise/expertise_sm_general_gun_oil_1.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'smuggler_1a': - return - - actor.addSkill('expertise_sm_general_gun_oil_1') - - actor.addSkillMod('expertise_action_weapon_2', 5) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'smuggler_1a': - return - - actor.removeSkill('expertise_sm_general_gun_oil_1') - - actor.removeSkillMod('expertise_action_weapon_2', 5) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_sm_general_gun_oil_1") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_sm_general_gun_oil_1") return diff --git a/scripts/expertise/expertise_sm_general_hair_trigger_1.py b/scripts/expertise/expertise_sm_general_hair_trigger_1.py index 0bc61fb4..981958f2 100644 --- a/scripts/expertise/expertise_sm_general_hair_trigger_1.py +++ b/scripts/expertise/expertise_sm_general_hair_trigger_1.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'smuggler_1a': - return - - actor.addSkill('expertise_sm_general_hair_trigger_1') - - actor.addSkillMod('expertise_action_line_sm_dm', 4) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'smuggler_1a': - return - - actor.removeSkill('expertise_sm_general_hair_trigger_1') - - actor.removeSkillMod('expertise_action_line_sm_dm', 4) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_sm_general_hair_trigger_1") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_sm_general_hair_trigger_1") return diff --git a/scripts/expertise/expertise_sm_general_hair_trigger_2.py b/scripts/expertise/expertise_sm_general_hair_trigger_2.py index 9dc7f200..0e8537b5 100644 --- a/scripts/expertise/expertise_sm_general_hair_trigger_2.py +++ b/scripts/expertise/expertise_sm_general_hair_trigger_2.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'smuggler_1a': - return - - actor.addSkill('expertise_sm_general_hair_trigger_2') - - actor.addSkillMod('expertise_action_line_sm_dm', 4) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'smuggler_1a': - return - - actor.removeSkill('expertise_sm_general_hair_trigger_2') - - actor.removeSkillMod('expertise_action_line_sm_dm', 4) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_sm_general_hair_trigger_2") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_sm_general_hair_trigger_2") return diff --git a/scripts/expertise/expertise_sm_general_hair_trigger_3.py b/scripts/expertise/expertise_sm_general_hair_trigger_3.py index 0d81af85..9e3f61fc 100644 --- a/scripts/expertise/expertise_sm_general_hair_trigger_3.py +++ b/scripts/expertise/expertise_sm_general_hair_trigger_3.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'smuggler_1a': - return - - actor.addSkill('expertise_sm_general_hair_trigger_3') - - actor.addSkillMod('expertise_action_line_sm_dm', 4) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'smuggler_1a': - return - - actor.removeSkill('expertise_sm_general_hair_trigger_3') - - actor.removeSkillMod('expertise_action_line_sm_dm', 4) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_sm_general_hair_trigger_3") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_sm_general_hair_trigger_3") return diff --git a/scripts/expertise/expertise_sm_general_hair_trigger_4.py b/scripts/expertise/expertise_sm_general_hair_trigger_4.py index 5309084c..78108d29 100644 --- a/scripts/expertise/expertise_sm_general_hair_trigger_4.py +++ b/scripts/expertise/expertise_sm_general_hair_trigger_4.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'smuggler_1a': - return - - actor.addSkill('expertise_sm_general_hair_trigger_4') - - actor.addSkillMod('expertise_action_line_sm_dm', 4) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'smuggler_1a': - return - - actor.removeSkill('expertise_sm_general_hair_trigger_4') - - actor.removeSkillMod('expertise_action_line_sm_dm', 4) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_sm_general_hair_trigger_4") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_sm_general_hair_trigger_4") return diff --git a/scripts/expertise/expertise_sm_general_hammer_fanning_1.py b/scripts/expertise/expertise_sm_general_hammer_fanning_1.py index 8108302d..d0a970f5 100644 --- a/scripts/expertise/expertise_sm_general_hammer_fanning_1.py +++ b/scripts/expertise/expertise_sm_general_hammer_fanning_1.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'smuggler_1a': - return - - actor.addSkill('expertise_sm_general_hammer_fanning_1') - - actor.addSkillMod('expertise_sm_ranged_shot_proc', 5) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'smuggler_1a': - return - - actor.removeSkill('expertise_sm_general_hammer_fanning_1') - - actor.removeSkillMod('expertise_sm_ranged_shot_proc', 5) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_sm_general_hammer_fanning_1") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_sm_general_hammer_fanning_1") return diff --git a/scripts/expertise/expertise_sm_general_hammer_fanning_2.py b/scripts/expertise/expertise_sm_general_hammer_fanning_2.py index d15065e5..9d157ddb 100644 --- a/scripts/expertise/expertise_sm_general_hammer_fanning_2.py +++ b/scripts/expertise/expertise_sm_general_hammer_fanning_2.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'smuggler_1a': - return - - actor.addSkill('expertise_sm_general_hammer_fanning_2') - - actor.addSkillMod('expertise_sm_ranged_shot_proc', 5) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'smuggler_1a': - return - - actor.removeSkill('expertise_sm_general_hammer_fanning_2') - - actor.removeSkillMod('expertise_sm_ranged_shot_proc', 5) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_sm_general_hammer_fanning_2") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_sm_general_hammer_fanning_2") return diff --git a/scripts/expertise/expertise_sm_general_hammer_fanning_3.py b/scripts/expertise/expertise_sm_general_hammer_fanning_3.py index f37b9495..24b7a3fb 100644 --- a/scripts/expertise/expertise_sm_general_hammer_fanning_3.py +++ b/scripts/expertise/expertise_sm_general_hammer_fanning_3.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'smuggler_1a': - return - - actor.addSkill('expertise_sm_general_hammer_fanning_3') - - actor.addSkillMod('expertise_sm_ranged_shot_proc', 5) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'smuggler_1a': - return - - actor.removeSkill('expertise_sm_general_hammer_fanning_3') - - actor.removeSkillMod('expertise_sm_ranged_shot_proc', 5) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_sm_general_hammer_fanning_3") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_sm_general_hammer_fanning_3") return diff --git a/scripts/expertise/expertise_sm_general_hammer_fanning_4.py b/scripts/expertise/expertise_sm_general_hammer_fanning_4.py index de5f58b2..5db77165 100644 --- a/scripts/expertise/expertise_sm_general_hammer_fanning_4.py +++ b/scripts/expertise/expertise_sm_general_hammer_fanning_4.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'smuggler_1a': - return - - actor.addSkill('expertise_sm_general_hammer_fanning_4') - - actor.addSkillMod('expertise_sm_ranged_shot_proc', 5) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'smuggler_1a': - return - - actor.removeSkill('expertise_sm_general_hammer_fanning_4') - - actor.removeSkillMod('expertise_sm_ranged_shot_proc', 5) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_sm_general_hammer_fanning_4") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_sm_general_hammer_fanning_4") return diff --git a/scripts/expertise/expertise_sm_general_head_crack_1.py b/scripts/expertise/expertise_sm_general_head_crack_1.py index 41521dc6..7f20d29f 100644 --- a/scripts/expertise/expertise_sm_general_head_crack_1.py +++ b/scripts/expertise/expertise_sm_general_head_crack_1.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'smuggler_1a': - return - - actor.addSkill('expertise_sm_general_head_crack_1') - - actor.addSkillMod('expertise_sm_melee_stun_proc', 6) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'smuggler_1a': - return - - actor.removeSkill('expertise_sm_general_head_crack_1') - - actor.removeSkillMod('expertise_sm_melee_stun_proc', 6) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_sm_general_head_crack_1") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_sm_general_head_crack_1") return diff --git a/scripts/expertise/expertise_sm_general_head_crack_2.py b/scripts/expertise/expertise_sm_general_head_crack_2.py index 44d451ed..abe7628c 100644 --- a/scripts/expertise/expertise_sm_general_head_crack_2.py +++ b/scripts/expertise/expertise_sm_general_head_crack_2.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'smuggler_1a': - return - - actor.addSkill('expertise_sm_general_head_crack_2') - - actor.addSkillMod('expertise_sm_melee_stun_proc', 6) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'smuggler_1a': - return - - actor.removeSkill('expertise_sm_general_head_crack_2') - - actor.removeSkillMod('expertise_sm_melee_stun_proc', 6) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_sm_general_head_crack_2") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_sm_general_head_crack_2") return diff --git a/scripts/expertise/expertise_sm_general_hidden_padding_1.py b/scripts/expertise/expertise_sm_general_hidden_padding_1.py index e0294af3..07cceb20 100644 --- a/scripts/expertise/expertise_sm_general_hidden_padding_1.py +++ b/scripts/expertise/expertise_sm_general_hidden_padding_1.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'smuggler_1a': - return - - actor.addSkill('expertise_sm_general_hidden_padding_1') - - actor.addSkillMod('expertise_overridable_protection_generic', 1475) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'smuggler_1a': - return - - actor.removeSkill('expertise_sm_general_hidden_padding_1') - - actor.removeSkillMod('expertise_overridable_protection_generic', 1475) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_sm_general_hidden_padding_1") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_sm_general_hidden_padding_1") return diff --git a/scripts/expertise/expertise_sm_general_hidden_padding_2.py b/scripts/expertise/expertise_sm_general_hidden_padding_2.py index e3662b44..3c2cc318 100644 --- a/scripts/expertise/expertise_sm_general_hidden_padding_2.py +++ b/scripts/expertise/expertise_sm_general_hidden_padding_2.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'smuggler_1a': - return - - actor.addSkill('expertise_sm_general_hidden_padding_2') - - actor.addSkillMod('expertise_overridable_protection_generic', 1475) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'smuggler_1a': - return - - actor.removeSkill('expertise_sm_general_hidden_padding_2') - - actor.removeSkillMod('expertise_overridable_protection_generic', 1475) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_sm_general_hidden_padding_2") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_sm_general_hidden_padding_2") return diff --git a/scripts/expertise/expertise_sm_general_idiot_proof_plan_1.py b/scripts/expertise/expertise_sm_general_idiot_proof_plan_1.py index d9c15db8..05db4ebf 100644 --- a/scripts/expertise/expertise_sm_general_idiot_proof_plan_1.py +++ b/scripts/expertise/expertise_sm_general_idiot_proof_plan_1.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'smuggler_1a': - return - - actor.addSkill('expertise_sm_general_idiot_proof_plan_1') - - actor.addSkillMod('damage_decrease_percentage', 3) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'smuggler_1a': - return - - actor.removeSkill('expertise_sm_general_idiot_proof_plan_1') - - actor.removeSkillMod('damage_decrease_percentage', 3) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_sm_general_idiot_proof_plan_1") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_sm_general_idiot_proof_plan_1") return diff --git a/scripts/expertise/expertise_sm_general_idiot_proof_plan_2.py b/scripts/expertise/expertise_sm_general_idiot_proof_plan_2.py index 6cd3dace..3baa2e23 100644 --- a/scripts/expertise/expertise_sm_general_idiot_proof_plan_2.py +++ b/scripts/expertise/expertise_sm_general_idiot_proof_plan_2.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'smuggler_1a': - return - - actor.addSkill('expertise_sm_general_idiot_proof_plan_2') - - actor.addSkillMod('damage_decrease_percentage', 3) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'smuggler_1a': - return - - actor.removeSkill('expertise_sm_general_idiot_proof_plan_2') - - actor.removeSkillMod('damage_decrease_percentage', 3) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_sm_general_idiot_proof_plan_2") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_sm_general_idiot_proof_plan_2") return diff --git a/scripts/expertise/expertise_sm_general_lined_pockets_1.py b/scripts/expertise/expertise_sm_general_lined_pockets_1.py index 5d53be45..e22e98ad 100644 --- a/scripts/expertise/expertise_sm_general_lined_pockets_1.py +++ b/scripts/expertise/expertise_sm_general_lined_pockets_1.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'smuggler_1a': - return - - actor.addSkill('expertise_sm_general_lined_pockets_1') - - actor.addSkillMod('expertise_overridable_protection_generic', 1475) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'smuggler_1a': - return - - actor.removeSkill('expertise_sm_general_lined_pockets_1') - - actor.removeSkillMod('expertise_overridable_protection_generic', 1475) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_sm_general_lined_pockets_1") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_sm_general_lined_pockets_1") return diff --git a/scripts/expertise/expertise_sm_general_lined_pockets_2.py b/scripts/expertise/expertise_sm_general_lined_pockets_2.py index 03209a76..08bf5f8d 100644 --- a/scripts/expertise/expertise_sm_general_lined_pockets_2.py +++ b/scripts/expertise/expertise_sm_general_lined_pockets_2.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'smuggler_1a': - return - - actor.addSkill('expertise_sm_general_lined_pockets_2') - - actor.addSkillMod('expertise_overridable_protection_generic', 1475) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'smuggler_1a': - return - - actor.removeSkill('expertise_sm_general_lined_pockets_2') - - actor.removeSkillMod('expertise_overridable_protection_generic', 1475) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_sm_general_lined_pockets_2") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_sm_general_lined_pockets_2") return diff --git a/scripts/expertise/expertise_sm_general_meager_fortune_1.py b/scripts/expertise/expertise_sm_general_meager_fortune_1.py index 557528ad..40018dbd 100644 --- a/scripts/expertise/expertise_sm_general_meager_fortune_1.py +++ b/scripts/expertise/expertise_sm_general_meager_fortune_1.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'smuggler_1a': - return - - actor.addSkill('expertise_sm_general_meager_fortune_1') - - actor.addSkillMod('expertise_spot_a_sucker_critical_decrease', 50) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'smuggler_1a': - return - - actor.removeSkill('expertise_sm_general_meager_fortune_1') - - actor.removeSkillMod('expertise_spot_a_sucker_critical_decrease', 50) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_sm_general_meager_fortune_1") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_sm_general_meager_fortune_1") return diff --git a/scripts/expertise/expertise_sm_general_narrow_escape_1.py b/scripts/expertise/expertise_sm_general_narrow_escape_1.py index 3993e41e..4f1029a9 100644 --- a/scripts/expertise/expertise_sm_general_narrow_escape_1.py +++ b/scripts/expertise/expertise_sm_general_narrow_escape_1.py @@ -1,48 +1,19 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'smuggler_1a': - return - - actor.addSkill('expertise_sm_general_narrow_escape_1') - - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'smuggler_1a': - return - - actor.removeSkill('expertise_sm_general_narrow_escape_1') - - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - actor.addAbility('sm_narrow_escape_1') - + if actor.getLevel() >= 34: + actor.addAbility("sm_narrow_escape_1") + if actor.getLevel() >= 50: + actor.addAbility("sm_narrow_escape_2") + if actor.getLevel() >= 66: + actor.addAbility("sm_narrow_escape_3") + if actor.getLevel() >= 82: + actor.addAbility("sm_narrow_escape_4") return def removeAbilities(core, actor, player): - - actor.removeAbility('sm_narrow_escape_1') - + actor.removeAbility("sm_narrow_escape_1") + actor.removeAbility("sm_narrow_escape_2") + actor.removeAbility("sm_narrow_escape_3") + actor.removeAbility("sm_narrow_escape_4") return diff --git a/scripts/expertise/expertise_sm_general_nerf_herder_1.py b/scripts/expertise/expertise_sm_general_nerf_herder_1.py index 127d4f16..bf1ed358 100644 --- a/scripts/expertise/expertise_sm_general_nerf_herder_1.py +++ b/scripts/expertise/expertise_sm_general_nerf_herder_1.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'smuggler_1a': - return - - actor.addSkill('expertise_sm_general_nerf_herder_1') - - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'smuggler_1a': - return - - actor.removeSkill('expertise_sm_general_nerf_herder_1') - - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - actor.addAbility('sm_nerf_herder') - + actor.addAbility("sm_general_nerf_herder") return def removeAbilities(core, actor, player): - - actor.removeAbility('sm_nerf_herder') - + actor.removeAbility("sm_general_nerf_herder") return diff --git a/scripts/expertise/expertise_sm_general_off_the_cuff_1.py b/scripts/expertise/expertise_sm_general_off_the_cuff_1.py index fec22b4e..9b7fd56a 100644 --- a/scripts/expertise/expertise_sm_general_off_the_cuff_1.py +++ b/scripts/expertise/expertise_sm_general_off_the_cuff_1.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'smuggler_1a': - return - - actor.addSkill('expertise_sm_general_off_the_cuff_1') - - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'smuggler_1a': - return - - actor.removeSkill('expertise_sm_general_off_the_cuff_1') - - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - actor.addAbility('sm_off_the_cuff') - + actor.addAbility("sm_off_the_cuff") return def removeAbilities(core, actor, player): - - actor.removeAbility('sm_off_the_cuff') - + actor.removeAbility("sm_off_the_cuff") return diff --git a/scripts/expertise/expertise_sm_general_one_two_pummel_1.py b/scripts/expertise/expertise_sm_general_one_two_pummel_1.py index b9eb89bd..0fbb25e1 100644 --- a/scripts/expertise/expertise_sm_general_one_two_pummel_1.py +++ b/scripts/expertise/expertise_sm_general_one_two_pummel_1.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'smuggler_1a': - return - - actor.addSkill('expertise_sm_general_one_two_pummel_1') - - actor.addSkillMod('expertise_sm_melee_proc', 4) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'smuggler_1a': - return - - actor.removeSkill('expertise_sm_general_one_two_pummel_1') - - actor.removeSkillMod('expertise_sm_melee_proc', 4) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_sm_general_one_two_pummel_1") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_sm_general_one_two_pummel_1") return diff --git a/scripts/expertise/expertise_sm_general_one_two_pummel_2.py b/scripts/expertise/expertise_sm_general_one_two_pummel_2.py index dbd447d9..f33d6cca 100644 --- a/scripts/expertise/expertise_sm_general_one_two_pummel_2.py +++ b/scripts/expertise/expertise_sm_general_one_two_pummel_2.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'smuggler_1a': - return - - actor.addSkill('expertise_sm_general_one_two_pummel_2') - - actor.addSkillMod('expertise_sm_melee_proc', 4) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'smuggler_1a': - return - - actor.removeSkill('expertise_sm_general_one_two_pummel_2') - - actor.removeSkillMod('expertise_sm_melee_proc', 4) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_sm_general_one_two_pummel_2") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_sm_general_one_two_pummel_2") return diff --git a/scripts/expertise/expertise_sm_general_one_two_pummel_3.py b/scripts/expertise/expertise_sm_general_one_two_pummel_3.py index 98060a5d..31f91153 100644 --- a/scripts/expertise/expertise_sm_general_one_two_pummel_3.py +++ b/scripts/expertise/expertise_sm_general_one_two_pummel_3.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'smuggler_1a': - return - - actor.addSkill('expertise_sm_general_one_two_pummel_3') - - actor.addSkillMod('expertise_sm_melee_proc', 4) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'smuggler_1a': - return - - actor.removeSkill('expertise_sm_general_one_two_pummel_3') - - actor.removeSkillMod('expertise_sm_melee_proc', 4) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_sm_general_one_two_pummel_3") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_sm_general_one_two_pummel_3") return diff --git a/scripts/expertise/expertise_sm_general_one_two_pummel_4.py b/scripts/expertise/expertise_sm_general_one_two_pummel_4.py index 6b7e15b7..7832734e 100644 --- a/scripts/expertise/expertise_sm_general_one_two_pummel_4.py +++ b/scripts/expertise/expertise_sm_general_one_two_pummel_4.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'smuggler_1a': - return - - actor.addSkill('expertise_sm_general_one_two_pummel_4') - - actor.addSkillMod('expertise_sm_melee_proc', 4) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'smuggler_1a': - return - - actor.removeSkill('expertise_sm_general_one_two_pummel_4') - - actor.removeSkillMod('expertise_sm_melee_proc', 4) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_sm_general_one_two_pummel_4") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_sm_general_one_two_pummel_4") return diff --git a/scripts/expertise/expertise_sm_general_poor_prospect_1.py b/scripts/expertise/expertise_sm_general_poor_prospect_1.py index d1d9d03c..6cbf1c51 100644 --- a/scripts/expertise/expertise_sm_general_poor_prospect_1.py +++ b/scripts/expertise/expertise_sm_general_poor_prospect_1.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'smuggler_1a': - return - - actor.addSkill('expertise_sm_general_poor_prospect_1') - - actor.addSkillMod('expertise_spot_a_sucker_damage_decrease_chance', 25) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'smuggler_1a': - return - - actor.removeSkill('expertise_sm_general_poor_prospect_1') - - actor.removeSkillMod('expertise_spot_a_sucker_damage_decrease_chance', 25) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_sm_general_poor_prospect_1") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_sm_general_poor_prospect_1") return diff --git a/scripts/expertise/expertise_sm_general_poor_prospect_2.py b/scripts/expertise/expertise_sm_general_poor_prospect_2.py index ba6e97ae..18d810f7 100644 --- a/scripts/expertise/expertise_sm_general_poor_prospect_2.py +++ b/scripts/expertise/expertise_sm_general_poor_prospect_2.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'smuggler_1a': - return - - actor.addSkill('expertise_sm_general_poor_prospect_2') - - actor.addSkillMod('expertise_spot_a_sucker_damage_decrease_chance', 25) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'smuggler_1a': - return - - actor.removeSkill('expertise_sm_general_poor_prospect_2') - - actor.removeSkillMod('expertise_spot_a_sucker_damage_decrease_chance', 25) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_sm_general_poor_prospect_2") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_sm_general_poor_prospect_2") return diff --git a/scripts/expertise/expertise_sm_general_precise_bead_1.py b/scripts/expertise/expertise_sm_general_precise_bead_1.py index e2d219f6..427e2f61 100644 --- a/scripts/expertise/expertise_sm_general_precise_bead_1.py +++ b/scripts/expertise/expertise_sm_general_precise_bead_1.py @@ -1,50 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'smuggler_1a': - return - - actor.addSkill('expertise_sm_general_precise_bead_1') - - actor.addSkillMod('expertise_undiminished_critical_pistol', 5) - actor.addSkillMod('expertise_range_bonus_pistol', 5) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'smuggler_1a': - return - - actor.removeSkill('expertise_sm_general_precise_bead_1') - - actor.removeSkillMod('expertise_undiminished_critical_pistol', 5) - actor.removeSkillMod('expertise_range_bonus_pistol', 5) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_sm_general_precise_bead_1") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_sm_general_precise_bead_1") return diff --git a/scripts/expertise/expertise_sm_general_precise_bead_2.py b/scripts/expertise/expertise_sm_general_precise_bead_2.py index b3ae274d..941d326d 100644 --- a/scripts/expertise/expertise_sm_general_precise_bead_2.py +++ b/scripts/expertise/expertise_sm_general_precise_bead_2.py @@ -1,50 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'smuggler_1a': - return - - actor.addSkill('expertise_sm_general_precise_bead_2') - - actor.addSkillMod('expertise_undiminished_critical_pistol', 5) - actor.addSkillMod('expertise_range_bonus_pistol', 5) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'smuggler_1a': - return - - actor.removeSkill('expertise_sm_general_precise_bead_2') - - actor.removeSkillMod('expertise_undiminished_critical_pistol', 5) - actor.removeSkillMod('expertise_range_bonus_pistol', 5) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_sm_general_precise_bead_2") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_sm_general_precise_bead_2") return diff --git a/scripts/expertise/expertise_sm_general_spot_a_sucker_1.py b/scripts/expertise/expertise_sm_general_spot_a_sucker_1.py index 18b3ce1c..d043338d 100644 --- a/scripts/expertise/expertise_sm_general_spot_a_sucker_1.py +++ b/scripts/expertise/expertise_sm_general_spot_a_sucker_1.py @@ -1,48 +1,19 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'smuggler_1a': - return - - actor.addSkill('expertise_sm_general_spot_a_sucker_1') - - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'smuggler_1a': - return - - actor.removeSkill('expertise_sm_general_spot_a_sucker_1') - - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - actor.addAbility('sm_spot_a_sucker_1') - + if actor.getLevel() >= 34: + actor.addAbility("sm_spot_a_sucker_1") + if actor.getLevel() >= 50: + actor.addAbility("sm_spot_a_sucker_2") + if actor.getLevel() >= 66: + actor.addAbility("sm_spot_a_sucker_3") + if actor.getLevel() >= 82: + actor.addAbility("sm_spot_a_sucker_4") return def removeAbilities(core, actor, player): - - actor.removeAbility('sm_spot_a_sucker_1') - + actor.removeAbility("sm_spot_a_sucker_1") + actor.removeAbility("sm_spot_a_sucker_2") + actor.removeAbility("sm_spot_a_sucker_3") + actor.removeAbility("sm_spot_a_sucker_4") return diff --git a/scripts/expertise/expertise_sm_general_switcheroo_1.py b/scripts/expertise/expertise_sm_general_switcheroo_1.py index bec0a317..50d08045 100644 --- a/scripts/expertise/expertise_sm_general_switcheroo_1.py +++ b/scripts/expertise/expertise_sm_general_switcheroo_1.py @@ -1,50 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'smuggler_1a': - return - - actor.addSkill('expertise_sm_general_switcheroo_1') - - actor.addSkillMod('expertise_critical_hit_reduction', 1) - actor.addSkillMod('expertise_glancing_blow_all', 2) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'smuggler_1a': - return - - actor.removeSkill('expertise_sm_general_switcheroo_1') - - actor.removeSkillMod('expertise_critical_hit_reduction', 1) - actor.removeSkillMod('expertise_glancing_blow_all', 2) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_sm_general_switcheroo_1") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_sm_general_switcheroo_1") return diff --git a/scripts/expertise/expertise_sm_general_switcheroo_2.py b/scripts/expertise/expertise_sm_general_switcheroo_2.py index eb79a782..e66bad5a 100644 --- a/scripts/expertise/expertise_sm_general_switcheroo_2.py +++ b/scripts/expertise/expertise_sm_general_switcheroo_2.py @@ -1,50 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'smuggler_1a': - return - - actor.addSkill('expertise_sm_general_switcheroo_2') - - actor.addSkillMod('expertise_critical_hit_reduction', 1) - actor.addSkillMod('expertise_glancing_blow_all', 2) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'smuggler_1a': - return - - actor.removeSkill('expertise_sm_general_switcheroo_2') - - actor.removeSkillMod('expertise_critical_hit_reduction', 1) - actor.removeSkillMod('expertise_glancing_blow_all', 2) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_sm_general_switcheroo_2") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_sm_general_switcheroo_2") return diff --git a/scripts/expertise/expertise_sm_general_switcheroo_3.py b/scripts/expertise/expertise_sm_general_switcheroo_3.py index 9732dbf7..e7e1dcf9 100644 --- a/scripts/expertise/expertise_sm_general_switcheroo_3.py +++ b/scripts/expertise/expertise_sm_general_switcheroo_3.py @@ -1,50 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'smuggler_1a': - return - - actor.addSkill('expertise_sm_general_switcheroo_3') - - actor.addSkillMod('expertise_critical_hit_reduction', 1) - actor.addSkillMod('expertise_glancing_blow_all', 2) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'smuggler_1a': - return - - actor.removeSkill('expertise_sm_general_switcheroo_3') - - actor.removeSkillMod('expertise_critical_hit_reduction', 1) - actor.removeSkillMod('expertise_glancing_blow_all', 2) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_sm_general_switcheroo_3") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_sm_general_switcheroo_3") return diff --git a/scripts/expertise/expertise_sm_general_switcheroo_4.py b/scripts/expertise/expertise_sm_general_switcheroo_4.py index b5d082a5..c52c8ddf 100644 --- a/scripts/expertise/expertise_sm_general_switcheroo_4.py +++ b/scripts/expertise/expertise_sm_general_switcheroo_4.py @@ -1,50 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'smuggler_1a': - return - - actor.addSkill('expertise_sm_general_switcheroo_4') - - actor.addSkillMod('expertise_critical_hit_reduction', 1) - actor.addSkillMod('expertise_glancing_blow_all', 2) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'smuggler_1a': - return - - actor.removeSkill('expertise_sm_general_switcheroo_4') - - actor.removeSkillMod('expertise_critical_hit_reduction', 1) - actor.removeSkillMod('expertise_glancing_blow_all', 2) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_sm_general_switcheroo_4") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_sm_general_switcheroo_4") return diff --git a/scripts/expertise/expertise_sm_general_wretched_fate_1.py b/scripts/expertise/expertise_sm_general_wretched_fate_1.py index 25287ad7..e1c1ba8d 100644 --- a/scripts/expertise/expertise_sm_general_wretched_fate_1.py +++ b/scripts/expertise/expertise_sm_general_wretched_fate_1.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'smuggler_1a': - return - - actor.addSkill('expertise_sm_general_wretched_fate_1') - - actor.addSkillMod('expertise_spot_a_sucker_glance_chance', 50) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'smuggler_1a': - return - - actor.removeSkill('expertise_sm_general_wretched_fate_1') - - actor.removeSkillMod('expertise_spot_a_sucker_glance_chance', 50) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_sm_general_wretched_fate_1") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_sm_general_wretched_fate_1") return diff --git a/scripts/expertise/expertise_sm_path_beat_down_1.py b/scripts/expertise/expertise_sm_path_beat_down_1.py index af1829d9..ac0f35cb 100644 --- a/scripts/expertise/expertise_sm_path_beat_down_1.py +++ b/scripts/expertise/expertise_sm_path_beat_down_1.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'smuggler_1a': - return - - actor.addSkill('expertise_sm_path_beat_down_1') - - actor.addSkillMod('expertise_buff_duration_line_sm_pistol_whip', 1) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'smuggler_1a': - return - - actor.removeSkill('expertise_sm_path_beat_down_1') - - actor.removeSkillMod('expertise_buff_duration_line_sm_pistol_whip', 1) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_sm_path_beat_down_1") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_sm_path_beat_down_1") return diff --git a/scripts/expertise/expertise_sm_path_beat_down_2.py b/scripts/expertise/expertise_sm_path_beat_down_2.py index 692ea516..49463363 100644 --- a/scripts/expertise/expertise_sm_path_beat_down_2.py +++ b/scripts/expertise/expertise_sm_path_beat_down_2.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'smuggler_1a': - return - - actor.addSkill('expertise_sm_path_beat_down_2') - - actor.addSkillMod('expertise_buff_duration_line_sm_pistol_whip', 1) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'smuggler_1a': - return - - actor.removeSkill('expertise_sm_path_beat_down_2') - - actor.removeSkillMod('expertise_buff_duration_line_sm_pistol_whip', 1) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_sm_path_beat_down_2") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_sm_path_beat_down_2") return diff --git a/scripts/expertise/expertise_sm_path_best_deal_ever_1.py b/scripts/expertise/expertise_sm_path_best_deal_ever_1.py index 2abbe97f..5ff94eb3 100644 --- a/scripts/expertise/expertise_sm_path_best_deal_ever_1.py +++ b/scripts/expertise/expertise_sm_path_best_deal_ever_1.py @@ -1,50 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'smuggler_1a': - return - - actor.addSkill('expertise_sm_path_best_deal_ever_1') - - actor.addSkillMod('expertise_buff_best_deal_ever', 3) - actor.addSkillMod('expertise_junk_dealer_cut', 5) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'smuggler_1a': - return - - actor.removeSkill('expertise_sm_path_best_deal_ever_1') - - actor.removeSkillMod('expertise_buff_best_deal_ever', 3) - actor.removeSkillMod('expertise_junk_dealer_cut', 5) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_sm_path_best_deal_ever_1") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_sm_path_best_deal_ever_1") return diff --git a/scripts/expertise/expertise_sm_path_best_deal_ever_2.py b/scripts/expertise/expertise_sm_path_best_deal_ever_2.py index 8d50a957..60cf82ff 100644 --- a/scripts/expertise/expertise_sm_path_best_deal_ever_2.py +++ b/scripts/expertise/expertise_sm_path_best_deal_ever_2.py @@ -1,50 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'smuggler_1a': - return - - actor.addSkill('expertise_sm_path_best_deal_ever_2') - - actor.addSkillMod('expertise_buff_best_deal_ever', 3) - actor.addSkillMod('expertise_junk_dealer_cut', 5) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'smuggler_1a': - return - - actor.removeSkill('expertise_sm_path_best_deal_ever_2') - - actor.removeSkillMod('expertise_buff_best_deal_ever', 3) - actor.removeSkillMod('expertise_junk_dealer_cut', 5) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_sm_path_best_deal_ever_2") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_sm_path_best_deal_ever_2") return diff --git a/scripts/expertise/expertise_sm_path_blaster_at_your_side_1.py b/scripts/expertise/expertise_sm_path_blaster_at_your_side_1.py index fcbf88bf..93b9fb75 100644 --- a/scripts/expertise/expertise_sm_path_blaster_at_your_side_1.py +++ b/scripts/expertise/expertise_sm_path_blaster_at_your_side_1.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'smuggler_1a': - return - - actor.addSkill('expertise_sm_path_blaster_at_your_side_1') - - actor.addSkillMod('level_add_to_damage', 100) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'smuggler_1a': - return - - actor.removeSkill('expertise_sm_path_blaster_at_your_side_1') - - actor.removeSkillMod('level_add_to_damage', 100) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_sm_path_blaster_at_your_side_1") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_sm_path_blaster_at_your_side_1") return diff --git a/scripts/expertise/expertise_sm_path_blaster_at_your_side_2.py b/scripts/expertise/expertise_sm_path_blaster_at_your_side_2.py index d1297d00..71b64cd7 100644 --- a/scripts/expertise/expertise_sm_path_blaster_at_your_side_2.py +++ b/scripts/expertise/expertise_sm_path_blaster_at_your_side_2.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'smuggler_1a': - return - - actor.addSkill('expertise_sm_path_blaster_at_your_side_2') - - actor.addSkillMod('level_add_to_damage', 100) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'smuggler_1a': - return - - actor.removeSkill('expertise_sm_path_blaster_at_your_side_2') - - actor.removeSkillMod('level_add_to_damage', 100) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_sm_path_blaster_at_your_side_2") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_sm_path_blaster_at_your_side_2") return diff --git a/scripts/expertise/expertise_sm_path_blindside_1.py b/scripts/expertise/expertise_sm_path_blindside_1.py index 082ed6a7..8914b449 100644 --- a/scripts/expertise/expertise_sm_path_blindside_1.py +++ b/scripts/expertise/expertise_sm_path_blindside_1.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'smuggler_1a': - return - - actor.addSkill('expertise_sm_path_blindside_1') - - actor.addSkillMod('expertise_buff_duration_line_sm_skullduggery', 13) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'smuggler_1a': - return - - actor.removeSkill('expertise_sm_path_blindside_1') - - actor.removeSkillMod('expertise_buff_duration_line_sm_skullduggery', 13) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_sm_path_blindside_1") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_sm_path_blindside_1") return diff --git a/scripts/expertise/expertise_sm_path_blindside_2.py b/scripts/expertise/expertise_sm_path_blindside_2.py index 3af5ea33..85ff65e6 100644 --- a/scripts/expertise/expertise_sm_path_blindside_2.py +++ b/scripts/expertise/expertise_sm_path_blindside_2.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'smuggler_1a': - return - - actor.addSkill('expertise_sm_path_blindside_2') - - actor.addSkillMod('expertise_buff_duration_line_sm_skullduggery', 13) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'smuggler_1a': - return - - actor.removeSkill('expertise_sm_path_blindside_2') - - actor.removeSkillMod('expertise_buff_duration_line_sm_skullduggery', 13) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_sm_path_blindside_2") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_sm_path_blindside_2") return diff --git a/scripts/expertise/expertise_sm_path_card_up_your_sleeve_1.py b/scripts/expertise/expertise_sm_path_card_up_your_sleeve_1.py index 14d4ae68..c8664074 100644 --- a/scripts/expertise/expertise_sm_path_card_up_your_sleeve_1.py +++ b/scripts/expertise/expertise_sm_path_card_up_your_sleeve_1.py @@ -1,52 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'smuggler_1a': - return - - actor.addSkill('expertise_sm_path_card_up_your_sleeve_1') - - actor.addSkillMod('expertise_double_hit_chance', 10) - actor.addSkillMod('expertise_sm_card_ranged_proc', 25) - actor.addSkillMod('expertise_sm_card_melee_proc', 25) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'smuggler_1a': - return - - actor.removeSkill('expertise_sm_path_card_up_your_sleeve_1') - - actor.removeSkillMod('expertise_double_hit_chance', 10) - actor.removeSkillMod('expertise_sm_card_ranged_proc', 25) - actor.removeSkillMod('expertise_sm_card_melee_proc', 25) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_sm_path_card_up_your_sleeve_1") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_sm_path_card_up_your_sleeve_1") return diff --git a/scripts/expertise/expertise_sm_path_card_up_your_sleeve_2.py b/scripts/expertise/expertise_sm_path_card_up_your_sleeve_2.py index 56aaad3a..350c78a6 100644 --- a/scripts/expertise/expertise_sm_path_card_up_your_sleeve_2.py +++ b/scripts/expertise/expertise_sm_path_card_up_your_sleeve_2.py @@ -1,52 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'smuggler_1a': - return - - actor.addSkill('expertise_sm_path_card_up_your_sleeve_2') - - actor.addSkillMod('expertise_double_hit_chance', 10) - actor.addSkillMod('expertise_sm_card_ranged_proc', 25) - actor.addSkillMod('expertise_sm_card_melee_proc', 25) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'smuggler_1a': - return - - actor.removeSkill('expertise_sm_path_card_up_your_sleeve_2') - - actor.removeSkillMod('expertise_double_hit_chance', 10) - actor.removeSkillMod('expertise_sm_card_ranged_proc', 25) - actor.removeSkillMod('expertise_sm_card_melee_proc', 25) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_sm_path_card_up_your_sleeve_2") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_sm_path_card_up_your_sleeve_2") return diff --git a/scripts/expertise/expertise_sm_path_card_up_your_sleeve_3.py b/scripts/expertise/expertise_sm_path_card_up_your_sleeve_3.py index e86ff955..36a56da8 100644 --- a/scripts/expertise/expertise_sm_path_card_up_your_sleeve_3.py +++ b/scripts/expertise/expertise_sm_path_card_up_your_sleeve_3.py @@ -1,52 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'smuggler_1a': - return - - actor.addSkill('expertise_sm_path_card_up_your_sleeve_3') - - actor.addSkillMod('expertise_double_hit_chance', 10) - actor.addSkillMod('expertise_sm_card_ranged_proc', 25) - actor.addSkillMod('expertise_sm_card_melee_proc', 25) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'smuggler_1a': - return - - actor.removeSkill('expertise_sm_path_card_up_your_sleeve_3') - - actor.removeSkillMod('expertise_double_hit_chance', 10) - actor.removeSkillMod('expertise_sm_card_ranged_proc', 25) - actor.removeSkillMod('expertise_sm_card_melee_proc', 25) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_sm_path_card_up_your_sleeve_3") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_sm_path_card_up_your_sleeve_3") return diff --git a/scripts/expertise/expertise_sm_path_card_up_your_sleeve_4.py b/scripts/expertise/expertise_sm_path_card_up_your_sleeve_4.py index e687b8de..2c273743 100644 --- a/scripts/expertise/expertise_sm_path_card_up_your_sleeve_4.py +++ b/scripts/expertise/expertise_sm_path_card_up_your_sleeve_4.py @@ -1,52 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'smuggler_1a': - return - - actor.addSkill('expertise_sm_path_card_up_your_sleeve_4') - - actor.addSkillMod('expertise_double_hit_chance', 10) - actor.addSkillMod('expertise_sm_card_ranged_proc', 25) - actor.addSkillMod('expertise_sm_card_melee_proc', 25) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'smuggler_1a': - return - - actor.removeSkill('expertise_sm_path_card_up_your_sleeve_4') - - actor.removeSkillMod('expertise_double_hit_chance', 10) - actor.removeSkillMod('expertise_sm_card_ranged_proc', 25) - actor.removeSkillMod('expertise_sm_card_melee_proc', 25) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_sm_path_card_up_your_sleeve_4") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_sm_path_card_up_your_sleeve_4") return diff --git a/scripts/expertise/expertise_sm_path_easy_money_1.py b/scripts/expertise/expertise_sm_path_easy_money_1.py index 9d8550f0..9891035b 100644 --- a/scripts/expertise/expertise_sm_path_easy_money_1.py +++ b/scripts/expertise/expertise_sm_path_easy_money_1.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'smuggler_1a': - return - - actor.addSkill('expertise_sm_path_easy_money_1') - - actor.addSkillMod('luck_modified', 25) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'smuggler_1a': - return - - actor.removeSkill('expertise_sm_path_easy_money_1') - - actor.removeSkillMod('luck_modified', 25) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_sm_path_easy_money_1") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_sm_path_easy_money_1") return diff --git a/scripts/expertise/expertise_sm_path_easy_money_2.py b/scripts/expertise/expertise_sm_path_easy_money_2.py index 70412fba..a02f24f8 100644 --- a/scripts/expertise/expertise_sm_path_easy_money_2.py +++ b/scripts/expertise/expertise_sm_path_easy_money_2.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'smuggler_1a': - return - - actor.addSkill('expertise_sm_path_easy_money_2') - - actor.addSkillMod('luck_modified', 25) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'smuggler_1a': - return - - actor.removeSkill('expertise_sm_path_easy_money_2') - - actor.removeSkillMod('luck_modified', 25) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_sm_path_easy_money_2") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_sm_path_easy_money_2") return diff --git a/scripts/expertise/expertise_sm_path_easy_money_3.py b/scripts/expertise/expertise_sm_path_easy_money_3.py index 3a44209a..18684c32 100644 --- a/scripts/expertise/expertise_sm_path_easy_money_3.py +++ b/scripts/expertise/expertise_sm_path_easy_money_3.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'smuggler_1a': - return - - actor.addSkill('expertise_sm_path_easy_money_3') - - actor.addSkillMod('luck_modified', 25) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'smuggler_1a': - return - - actor.removeSkill('expertise_sm_path_easy_money_3') - - actor.removeSkillMod('luck_modified', 25) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_sm_path_easy_money_3") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_sm_path_easy_money_3") return diff --git a/scripts/expertise/expertise_sm_path_easy_money_4.py b/scripts/expertise/expertise_sm_path_easy_money_4.py index aaf2d0ef..3241291b 100644 --- a/scripts/expertise/expertise_sm_path_easy_money_4.py +++ b/scripts/expertise/expertise_sm_path_easy_money_4.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'smuggler_1a': - return - - actor.addSkill('expertise_sm_path_easy_money_4') - - actor.addSkillMod('luck_modified', 25) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'smuggler_1a': - return - - actor.removeSkill('expertise_sm_path_easy_money_4') - - actor.removeSkillMod('luck_modified', 25) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_sm_path_easy_money_4") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_sm_path_easy_money_4") return diff --git a/scripts/expertise/expertise_sm_path_eat_dirt_1.py b/scripts/expertise/expertise_sm_path_eat_dirt_1.py index 7f3776b3..54211af3 100644 --- a/scripts/expertise/expertise_sm_path_eat_dirt_1.py +++ b/scripts/expertise/expertise_sm_path_eat_dirt_1.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'smuggler_1a': - return - - actor.addSkill('expertise_sm_path_eat_dirt_1') - - actor.addSkillMod('expertise_miss_by_luck', 6) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'smuggler_1a': - return - - actor.removeSkill('expertise_sm_path_eat_dirt_1') - - actor.removeSkillMod('expertise_miss_by_luck', 6) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_sm_path_eat_dirt_1") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_sm_path_eat_dirt_1") return diff --git a/scripts/expertise/expertise_sm_path_eat_dirt_2.py b/scripts/expertise/expertise_sm_path_eat_dirt_2.py index 897d340c..da074616 100644 --- a/scripts/expertise/expertise_sm_path_eat_dirt_2.py +++ b/scripts/expertise/expertise_sm_path_eat_dirt_2.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'smuggler_1a': - return - - actor.addSkill('expertise_sm_path_eat_dirt_2') - - actor.addSkillMod('expertise_miss_by_luck', 6) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'smuggler_1a': - return - - actor.removeSkill('expertise_sm_path_eat_dirt_2') - - actor.removeSkillMod('expertise_miss_by_luck', 6) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_sm_path_eat_dirt_2") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_sm_path_eat_dirt_2") return diff --git a/scripts/expertise/expertise_sm_path_fake_goods_1.py b/scripts/expertise/expertise_sm_path_fake_goods_1.py index 5b414151..bd727012 100644 --- a/scripts/expertise/expertise_sm_path_fake_goods_1.py +++ b/scripts/expertise/expertise_sm_path_fake_goods_1.py @@ -1,50 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'smuggler_1a': - return - - actor.addSkill('expertise_sm_path_fake_goods_1') - - actor.addSkillMod('expertise_buff_duration_line_sm_false_hope', 1) - actor.addSkillMod('expertise_delay_reduce_line_sm_false_hope', 1) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'smuggler_1a': - return - - actor.removeSkill('expertise_sm_path_fake_goods_1') - - actor.removeSkillMod('expertise_buff_duration_line_sm_false_hope', 1) - actor.removeSkillMod('expertise_delay_reduce_line_sm_false_hope', 1) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_sm_path_fake_goods_1") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_sm_path_fake_goods_1") return diff --git a/scripts/expertise/expertise_sm_path_fake_goods_2.py b/scripts/expertise/expertise_sm_path_fake_goods_2.py index 75d5968e..3419faae 100644 --- a/scripts/expertise/expertise_sm_path_fake_goods_2.py +++ b/scripts/expertise/expertise_sm_path_fake_goods_2.py @@ -1,50 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'smuggler_1a': - return - - actor.addSkill('expertise_sm_path_fake_goods_2') - - actor.addSkillMod('expertise_buff_duration_line_sm_false_hope', 1) - actor.addSkillMod('expertise_delay_reduce_line_sm_false_hope', 1) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'smuggler_1a': - return - - actor.removeSkill('expertise_sm_path_fake_goods_2') - - actor.removeSkillMod('expertise_buff_duration_line_sm_false_hope', 1) - actor.removeSkillMod('expertise_delay_reduce_line_sm_false_hope', 1) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_sm_path_fake_goods_2") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_sm_path_fake_goods_2") return diff --git a/scripts/expertise/expertise_sm_path_false_hope_1.py b/scripts/expertise/expertise_sm_path_false_hope_1.py index 92c2b34d..b1a72de3 100644 --- a/scripts/expertise/expertise_sm_path_false_hope_1.py +++ b/scripts/expertise/expertise_sm_path_false_hope_1.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'smuggler_1a': - return - - actor.addSkill('expertise_sm_path_false_hope_1') - - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'smuggler_1a': - return - - actor.removeSkill('expertise_sm_path_false_hope_1') - - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - actor.addAbility('sm_false_hope') - + actor.addAbility("sm_false_hope") return def removeAbilities(core, actor, player): - - actor.removeAbility('sm_false_hope') - + actor.removeAbility("sm_false_hope") return diff --git a/scripts/expertise/expertise_sm_path_feeling_lucky_1.py b/scripts/expertise/expertise_sm_path_feeling_lucky_1.py index 93fd0635..1f38b885 100644 --- a/scripts/expertise/expertise_sm_path_feeling_lucky_1.py +++ b/scripts/expertise/expertise_sm_path_feeling_lucky_1.py @@ -1,50 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'smuggler_1a': - return - - actor.addSkill('expertise_sm_path_feeling_lucky_1') - - actor.addSkillMod('expertise_increase_smuggler_loot', 1) - actor.addSkillMod('expertise_sm_feeling_lucky_chance_proc', 1) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'smuggler_1a': - return - - actor.removeSkill('expertise_sm_path_feeling_lucky_1') - - actor.removeSkillMod('expertise_increase_smuggler_loot', 1) - actor.removeSkillMod('expertise_sm_feeling_lucky_chance_proc', 1) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_sm_feeling_lucky_1") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_sm_feeling_lucky_1") return diff --git a/scripts/expertise/expertise_sm_path_feeling_lucky_2.py b/scripts/expertise/expertise_sm_path_feeling_lucky_2.py index ea2f7d6b..6c5af161 100644 --- a/scripts/expertise/expertise_sm_path_feeling_lucky_2.py +++ b/scripts/expertise/expertise_sm_path_feeling_lucky_2.py @@ -1,50 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'smuggler_1a': - return - - actor.addSkill('expertise_sm_path_feeling_lucky_2') - - actor.addSkillMod('expertise_increase_smuggler_loot', 1) - actor.addSkillMod('expertise_sm_feeling_lucky_chance_proc', 1) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'smuggler_1a': - return - - actor.removeSkill('expertise_sm_path_feeling_lucky_2') - - actor.removeSkillMod('expertise_increase_smuggler_loot', 1) - actor.removeSkillMod('expertise_sm_feeling_lucky_chance_proc', 1) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_sm_feeling_lucky_2") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_sm_feeling_lucky_2") return diff --git a/scripts/expertise/expertise_sm_path_feeling_lucky_3.py b/scripts/expertise/expertise_sm_path_feeling_lucky_3.py index a18e89b4..7965558c 100644 --- a/scripts/expertise/expertise_sm_path_feeling_lucky_3.py +++ b/scripts/expertise/expertise_sm_path_feeling_lucky_3.py @@ -1,50 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'smuggler_1a': - return - - actor.addSkill('expertise_sm_path_feeling_lucky_3') - - actor.addSkillMod('expertise_increase_smuggler_loot', 1) - actor.addSkillMod('expertise_sm_feeling_lucky_chance_proc', 1) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'smuggler_1a': - return - - actor.removeSkill('expertise_sm_path_feeling_lucky_3') - - actor.removeSkillMod('expertise_increase_smuggler_loot', 1) - actor.removeSkillMod('expertise_sm_feeling_lucky_chance_proc', 1) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_sm_feeling_lucky_3") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_sm_feeling_lucky_3") return diff --git a/scripts/expertise/expertise_sm_path_feeling_lucky_4.py b/scripts/expertise/expertise_sm_path_feeling_lucky_4.py index 4a924398..b9299149 100644 --- a/scripts/expertise/expertise_sm_path_feeling_lucky_4.py +++ b/scripts/expertise/expertise_sm_path_feeling_lucky_4.py @@ -1,50 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'smuggler_1a': - return - - actor.addSkill('expertise_sm_path_feeling_lucky_4') - - actor.addSkillMod('expertise_increase_smuggler_loot', 1) - actor.addSkillMod('expertise_sm_feeling_lucky_chance_proc', 1) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'smuggler_1a': - return - - actor.removeSkill('expertise_sm_path_feeling_lucky_4') - - actor.removeSkillMod('expertise_increase_smuggler_loot', 1) - actor.removeSkillMod('expertise_sm_feeling_lucky_chance_proc', 1) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_sm_feeling_lucky_4") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_sm_feeling_lucky_4") return diff --git a/scripts/expertise/expertise_sm_path_flying_tackle_1.py b/scripts/expertise/expertise_sm_path_flying_tackle_1.py index cb696d20..5fbcd2eb 100644 --- a/scripts/expertise/expertise_sm_path_flying_tackle_1.py +++ b/scripts/expertise/expertise_sm_path_flying_tackle_1.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'smuggler_1a': - return - - actor.addSkill('expertise_sm_path_flying_tackle_1') - - actor.addSkillMod('expertise_stun_line_sm_pistol_whip', 50) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'smuggler_1a': - return - - actor.removeSkill('expertise_sm_path_flying_tackle_1') - - actor.removeSkillMod('expertise_stun_line_sm_pistol_whip', 50) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_sm_path_flying_tackle_1") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_sm_path_flying_tackle_1") return diff --git a/scripts/expertise/expertise_sm_path_flying_tackle_2.py b/scripts/expertise/expertise_sm_path_flying_tackle_2.py index fdf47b07..249e61b5 100644 --- a/scripts/expertise/expertise_sm_path_flying_tackle_2.py +++ b/scripts/expertise/expertise_sm_path_flying_tackle_2.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'smuggler_1a': - return - - actor.addSkill('expertise_sm_path_flying_tackle_2') - - actor.addSkillMod('expertise_stun_line_sm_pistol_whip', 50) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'smuggler_1a': - return - - actor.removeSkill('expertise_sm_path_flying_tackle_2') - - actor.removeSkillMod('expertise_stun_line_sm_pistol_whip', 50) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_sm_path_flying_tackle_2") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_sm_path_flying_tackle_2") return diff --git a/scripts/expertise/expertise_sm_path_healthy_profits_1.py b/scripts/expertise/expertise_sm_path_healthy_profits_1.py index 431019aa..8145066b 100644 --- a/scripts/expertise/expertise_sm_path_healthy_profits_1.py +++ b/scripts/expertise/expertise_sm_path_healthy_profits_1.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'smuggler_1a': - return - - actor.addSkill('expertise_sm_path_healthy_profits_1') - - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'smuggler_1a': - return - - actor.removeSkill('expertise_sm_path_healthy_profits_1') - - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - actor.addAbility('sm_summon_medic') - + actor.addAbility("sm_summon_medic") return def removeAbilities(core, actor, player): - - actor.removeAbility('sm_summon_medic') - + actor.removeAbility("sm_summon_medic") return diff --git a/scripts/expertise/expertise_sm_path_impossible_odds_1.py b/scripts/expertise/expertise_sm_path_impossible_odds_1.py index 63e78de4..3191ef8f 100644 --- a/scripts/expertise/expertise_sm_path_impossible_odds_1.py +++ b/scripts/expertise/expertise_sm_path_impossible_odds_1.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'smuggler_1a': - return - - actor.addSkill('expertise_sm_path_impossible_odds_1') - - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'smuggler_1a': - return - - actor.removeSkill('expertise_sm_path_impossible_odds_1') - - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - actor.addAbility('sm_impossible_odds') - + actor.addAbility("sm_impossible_odds") return def removeAbilities(core, actor, player): - - actor.removeAbility('sm_impossible_odds') - + actor.removeAbility("sm_impossible_odds") return diff --git a/scripts/expertise/expertise_sm_path_inside_information_1.py b/scripts/expertise/expertise_sm_path_inside_information_1.py index 3bdba930..508ee947 100644 --- a/scripts/expertise/expertise_sm_path_inside_information_1.py +++ b/scripts/expertise/expertise_sm_path_inside_information_1.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'smuggler_1a': - return - - actor.addSkill('expertise_sm_path_inside_information_1') - - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'smuggler_1a': - return - - actor.removeSkill('expertise_sm_path_inside_information_1') - - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - actor.addAbility('sm_inside_information') - + actor.addAbility("sm_inside_information") return def removeAbilities(core, actor, player): - - actor.removeAbility('sm_inside_information') - + actor.removeAbility("sm_inside_information") return diff --git a/scripts/expertise/expertise_sm_path_loaded_chance_dice_1.py b/scripts/expertise/expertise_sm_path_loaded_chance_dice_1.py index ccc1e6ba..a73977ba 100644 --- a/scripts/expertise/expertise_sm_path_loaded_chance_dice_1.py +++ b/scripts/expertise/expertise_sm_path_loaded_chance_dice_1.py @@ -1,50 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'smuggler_1a': - return - - actor.addSkill('expertise_sm_path_loaded_chance_dice_1') - - actor.addSkillMod('expertise_increase_hit_by_luck', 5) - actor.addSkillMod('expertise_buff_duration_line_sm_impossible_odds', 13) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'smuggler_1a': - return - - actor.removeSkill('expertise_sm_path_loaded_chance_dice_1') - - actor.removeSkillMod('expertise_increase_hit_by_luck', 5) - actor.removeSkillMod('expertise_buff_duration_line_sm_impossible_odds', 13) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_sm_path_loaded_chance_dice_1") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_sm_path_loaded_chance_dice_1") return diff --git a/scripts/expertise/expertise_sm_path_loaded_chance_dice_2.py b/scripts/expertise/expertise_sm_path_loaded_chance_dice_2.py index 1af5ac14..ec00a3d4 100644 --- a/scripts/expertise/expertise_sm_path_loaded_chance_dice_2.py +++ b/scripts/expertise/expertise_sm_path_loaded_chance_dice_2.py @@ -1,50 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'smuggler_1a': - return - - actor.addSkill('expertise_sm_path_loaded_chance_dice_2') - - actor.addSkillMod('expertise_increase_hit_by_luck', 5) - actor.addSkillMod('expertise_buff_duration_line_sm_impossible_odds', 13) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'smuggler_1a': - return - - actor.removeSkill('expertise_sm_path_loaded_chance_dice_2') - - actor.removeSkillMod('expertise_increase_hit_by_luck', 5) - actor.removeSkillMod('expertise_buff_duration_line_sm_impossible_odds', 13) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_sm_path_loaded_chance_dice_2") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_sm_path_loaded_chance_dice_2") return diff --git a/scripts/expertise/expertise_sm_path_lucky_break_1.py b/scripts/expertise/expertise_sm_path_lucky_break_1.py index df59283b..2beff304 100644 --- a/scripts/expertise/expertise_sm_path_lucky_break_1.py +++ b/scripts/expertise/expertise_sm_path_lucky_break_1.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'smuggler_1a': - return - - actor.addSkill('expertise_sm_path_lucky_break_1') - - actor.addSkillMod('expertise_lucky_break_chance', 1) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'smuggler_1a': - return - - actor.removeSkill('expertise_sm_path_lucky_break_1') - - actor.removeSkillMod('expertise_lucky_break_chance', 1) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_sm_path_lucky_break_1") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_sm_path_lucky_break_1") return diff --git a/scripts/expertise/expertise_sm_path_lucky_break_2.py b/scripts/expertise/expertise_sm_path_lucky_break_2.py index fabd837e..5a40d6c0 100644 --- a/scripts/expertise/expertise_sm_path_lucky_break_2.py +++ b/scripts/expertise/expertise_sm_path_lucky_break_2.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'smuggler_1a': - return - - actor.addSkill('expertise_sm_path_lucky_break_2') - - actor.addSkillMod('expertise_lucky_break_chance', 1) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'smuggler_1a': - return - - actor.removeSkill('expertise_sm_path_lucky_break_2') - - actor.removeSkillMod('expertise_lucky_break_chance', 1) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_sm_path_lucky_break_2") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_sm_path_lucky_break_2") return diff --git a/scripts/expertise/expertise_sm_path_lucky_break_3.py b/scripts/expertise/expertise_sm_path_lucky_break_3.py index 572d050f..b1507e0b 100644 --- a/scripts/expertise/expertise_sm_path_lucky_break_3.py +++ b/scripts/expertise/expertise_sm_path_lucky_break_3.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'smuggler_1a': - return - - actor.addSkill('expertise_sm_path_lucky_break_3') - - actor.addSkillMod('expertise_lucky_break_chance', 1) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'smuggler_1a': - return - - actor.removeSkill('expertise_sm_path_lucky_break_3') - - actor.removeSkillMod('expertise_lucky_break_chance', 1) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_sm_path_lucky_break_3") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_sm_path_lucky_break_3") return diff --git a/scripts/expertise/expertise_sm_path_lucky_break_4.py b/scripts/expertise/expertise_sm_path_lucky_break_4.py index 8a29ac79..b30641cc 100644 --- a/scripts/expertise/expertise_sm_path_lucky_break_4.py +++ b/scripts/expertise/expertise_sm_path_lucky_break_4.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'smuggler_1a': - return - - actor.addSkill('expertise_sm_path_lucky_break_4') - - actor.addSkillMod('expertise_lucky_break_chance', 1) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'smuggler_1a': - return - - actor.removeSkill('expertise_sm_path_lucky_break_4') - - actor.removeSkillMod('expertise_lucky_break_chance', 1) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_sm_path_lucky_break_4") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_sm_path_lucky_break_4") return diff --git a/scripts/expertise/expertise_sm_path_off_the_books_1.py b/scripts/expertise/expertise_sm_path_off_the_books_1.py index eeac5c97..c42eeff2 100644 --- a/scripts/expertise/expertise_sm_path_off_the_books_1.py +++ b/scripts/expertise/expertise_sm_path_off_the_books_1.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'smuggler_1a': - return - - actor.addSkill('expertise_sm_path_off_the_books_1') - - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'smuggler_1a': - return - - actor.removeSkill('expertise_sm_path_off_the_books_1') - - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - actor.addAbility('sm_off_the_books') - + actor.addAbility("sm_off_the_books") return def removeAbilities(core, actor, player): - - actor.removeAbility('sm_off_the_books') - + actor.removeAbility("sm_off_the_books") return diff --git a/scripts/expertise/expertise_sm_path_pistol_whip_1.py b/scripts/expertise/expertise_sm_path_pistol_whip_1.py index e1dd1a3f..e38045db 100644 --- a/scripts/expertise/expertise_sm_path_pistol_whip_1.py +++ b/scripts/expertise/expertise_sm_path_pistol_whip_1.py @@ -1,48 +1,19 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'smuggler_1a': - return - - actor.addSkill('expertise_sm_path_pistol_whip_1') - - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'smuggler_1a': - return - - actor.removeSkill('expertise_sm_path_pistol_whip_1') - - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - actor.addAbility('sm_pistol_whip_1') - + if actor.getLevel() >= 34: + actor.addAbility("sm_pistol_whip_1") + if actor.getLevel() >= 50: + actor.addAbility("sm_pistol_whip_2") + if actor.getLevel() >= 66: + actor.addAbility("sm_pistol_whip_3") + if actor.getLevel() >= 82: + actor.addAbility("sm_pistol_whip_4") return def removeAbilities(core, actor, player): - - actor.removeAbility('sm_pistol_whip_1') - + actor.removeAbility("sm_pistol_whip_1") + actor.removeAbility("sm_pistol_whip_2") + actor.removeAbility("sm_pistol_whip_3") + actor.removeAbility("sm_pistol_whip_4") return diff --git a/scripts/expertise/expertise_sm_path_ploy_1.py b/scripts/expertise/expertise_sm_path_ploy_1.py index 972f5cf6..956c9d43 100644 --- a/scripts/expertise/expertise_sm_path_ploy_1.py +++ b/scripts/expertise/expertise_sm_path_ploy_1.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'smuggler_1a': - return - - actor.addSkill('expertise_sm_path_ploy_1') - - actor.addSkillMod('precision_modified', 25) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'smuggler_1a': - return - - actor.removeSkill('expertise_sm_path_ploy_1') - - actor.removeSkillMod('precision_modified', 25) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_sm_path_ploy_1") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_sm_path_ploy_1") return diff --git a/scripts/expertise/expertise_sm_path_ploy_2.py b/scripts/expertise/expertise_sm_path_ploy_2.py index a49453d7..fe707dc0 100644 --- a/scripts/expertise/expertise_sm_path_ploy_2.py +++ b/scripts/expertise/expertise_sm_path_ploy_2.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'smuggler_1a': - return - - actor.addSkill('expertise_sm_path_ploy_2') - - actor.addSkillMod('precision_modified', 25) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'smuggler_1a': - return - - actor.removeSkill('expertise_sm_path_ploy_2') - - actor.removeSkillMod('precision_modified', 25) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_sm_path_ploy_2") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_sm_path_ploy_2") return diff --git a/scripts/expertise/expertise_sm_path_ploy_3.py b/scripts/expertise/expertise_sm_path_ploy_3.py index 84904cdf..cecca14e 100644 --- a/scripts/expertise/expertise_sm_path_ploy_3.py +++ b/scripts/expertise/expertise_sm_path_ploy_3.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'smuggler_1a': - return - - actor.addSkill('expertise_sm_path_ploy_3') - - actor.addSkillMod('precision_modified', 25) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'smuggler_1a': - return - - actor.removeSkill('expertise_sm_path_ploy_3') - - actor.removeSkillMod('precision_modified', 25) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_sm_path_ploy_3") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_sm_path_ploy_3") return diff --git a/scripts/expertise/expertise_sm_path_ploy_4.py b/scripts/expertise/expertise_sm_path_ploy_4.py index 4ca79a1f..de968f40 100644 --- a/scripts/expertise/expertise_sm_path_ploy_4.py +++ b/scripts/expertise/expertise_sm_path_ploy_4.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'smuggler_1a': - return - - actor.addSkill('expertise_sm_path_ploy_4') - - actor.addSkillMod('precision_modified', 25) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'smuggler_1a': - return - - actor.removeSkill('expertise_sm_path_ploy_4') - - actor.removeSkillMod('precision_modified', 25) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_sm_path_ploy_4") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_sm_path_ploy_4") return diff --git a/scripts/expertise/expertise_sm_path_quick_fix_1.py b/scripts/expertise/expertise_sm_path_quick_fix_1.py index 522a120c..68fa7682 100644 --- a/scripts/expertise/expertise_sm_path_quick_fix_1.py +++ b/scripts/expertise/expertise_sm_path_quick_fix_1.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'smuggler_1a': - return - - actor.addSkill('expertise_sm_path_quick_fix_1') - - actor.addSkillMod('expertise_healing_line_sm_heal', 10) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'smuggler_1a': - return - - actor.removeSkill('expertise_sm_path_quick_fix_1') - - actor.removeSkillMod('expertise_healing_line_sm_heal', 10) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_sm_path_quick_fix_1") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_sm_path_quick_fix_1") return diff --git a/scripts/expertise/expertise_sm_path_quick_fix_2.py b/scripts/expertise/expertise_sm_path_quick_fix_2.py index 2f4cdc81..7426e059 100644 --- a/scripts/expertise/expertise_sm_path_quick_fix_2.py +++ b/scripts/expertise/expertise_sm_path_quick_fix_2.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'smuggler_1a': - return - - actor.addSkill('expertise_sm_path_quick_fix_2') - - actor.addSkillMod('expertise_healing_line_sm_heal', 10) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'smuggler_1a': - return - - actor.removeSkill('expertise_sm_path_quick_fix_2') - - actor.removeSkillMod('expertise_healing_line_sm_heal', 10) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_sm_path_quick_fix_2") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_sm_path_quick_fix_2") return diff --git a/scripts/expertise/expertise_sm_path_quick_fix_3.py b/scripts/expertise/expertise_sm_path_quick_fix_3.py index 42f74088..c469d4ed 100644 --- a/scripts/expertise/expertise_sm_path_quick_fix_3.py +++ b/scripts/expertise/expertise_sm_path_quick_fix_3.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'smuggler_1a': - return - - actor.addSkill('expertise_sm_path_quick_fix_3') - - actor.addSkillMod('expertise_healing_line_sm_heal', 10) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'smuggler_1a': - return - - actor.removeSkill('expertise_sm_path_quick_fix_3') - - actor.removeSkillMod('expertise_healing_line_sm_heal', 10) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_sm_path_quick_fix_3") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_sm_path_quick_fix_3") return diff --git a/scripts/expertise/expertise_sm_path_quick_fix_4.py b/scripts/expertise/expertise_sm_path_quick_fix_4.py index c041fb6e..cebeae68 100644 --- a/scripts/expertise/expertise_sm_path_quick_fix_4.py +++ b/scripts/expertise/expertise_sm_path_quick_fix_4.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'smuggler_1a': - return - - actor.addSkill('expertise_sm_path_quick_fix_4') - - actor.addSkillMod('expertise_healing_line_sm_heal', 10) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'smuggler_1a': - return - - actor.removeSkill('expertise_sm_path_quick_fix_4') - - actor.removeSkillMod('expertise_healing_line_sm_heal', 10) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_sm_path_quick_fix_4") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_sm_path_quick_fix_4") return diff --git a/scripts/expertise/expertise_sm_path_scandal_1.py b/scripts/expertise/expertise_sm_path_scandal_1.py index d3201976..e4f9b9b0 100644 --- a/scripts/expertise/expertise_sm_path_scandal_1.py +++ b/scripts/expertise/expertise_sm_path_scandal_1.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'smuggler_1a': - return - - actor.addSkill('expertise_sm_path_scandal_1') - - actor.addSkillMod('expertise_damage_area_effect', 1) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'smuggler_1a': - return - - actor.removeSkill('expertise_sm_path_scandal_1') - - actor.removeSkillMod('expertise_damage_area_effect', 1) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_sm_path_scandal_1") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_sm_path_scandal_1") return diff --git a/scripts/expertise/expertise_sm_path_scandal_2.py b/scripts/expertise/expertise_sm_path_scandal_2.py index 5a14559b..39dc1d2b 100644 --- a/scripts/expertise/expertise_sm_path_scandal_2.py +++ b/scripts/expertise/expertise_sm_path_scandal_2.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'smuggler_1a': - return - - actor.addSkill('expertise_sm_path_scandal_2') - - actor.addSkillMod('expertise_damage_area_effect', 1) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'smuggler_1a': - return - - actor.removeSkill('expertise_sm_path_scandal_2') - - actor.removeSkillMod('expertise_damage_area_effect', 1) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_sm_path_scandal_2") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_sm_path_scandal_2) return diff --git a/scripts/expertise/expertise_sm_path_scandal_3.py b/scripts/expertise/expertise_sm_path_scandal_3.py index 0d7ae351..4094a791 100644 --- a/scripts/expertise/expertise_sm_path_scandal_3.py +++ b/scripts/expertise/expertise_sm_path_scandal_3.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'smuggler_1a': - return - - actor.addSkill('expertise_sm_path_scandal_3') - - actor.addSkillMod('expertise_damage_area_effect', 1) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'smuggler_1a': - return - - actor.removeSkill('expertise_sm_path_scandal_3') - - actor.removeSkillMod('expertise_damage_area_effect', 1) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_sm_path_scandal_3") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_sm_path_scandal_3") return diff --git a/scripts/expertise/expertise_sm_path_scandal_4.py b/scripts/expertise/expertise_sm_path_scandal_4.py index 96b3235c..6352b2e1 100644 --- a/scripts/expertise/expertise_sm_path_scandal_4.py +++ b/scripts/expertise/expertise_sm_path_scandal_4.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'smuggler_1a': - return - - actor.addSkill('expertise_sm_path_scandal_4') - - actor.addSkillMod('expertise_damage_area_effect', 1) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'smuggler_1a': - return - - actor.removeSkill('expertise_sm_path_scandal_4') - - actor.removeSkillMod('expertise_damage_area_effect', 1) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_sm_path_scandal_4") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_sm_path_scandal_4") return diff --git a/scripts/expertise/expertise_sm_path_shoot_first_1.py b/scripts/expertise/expertise_sm_path_shoot_first_1.py index af429bb5..3dbc049f 100644 --- a/scripts/expertise/expertise_sm_path_shoot_first_1.py +++ b/scripts/expertise/expertise_sm_path_shoot_first_1.py @@ -1,48 +1,22 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'smuggler_1a': - return - - actor.addSkill('expertise_sm_path_shoot_first_1') - - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'smuggler_1a': - return - - actor.removeSkill('expertise_sm_path_shoot_first_1') - - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - actor.addAbility('sm_shoot_first_1') - + if actor.getLevel() >= 34: + actor.addAbility("sm_shoot_first_1") + if actor.getLevel() >= 46: + actor.addAbility("sm_shoot_first_2") + if actor.getLevel() >= 62: + actor.addAbility("sm_shoot_first_3") + if actor.getLevel() >= 74: + actor.addAbility("sm_shoot_first_4") + if actor.getLevel() >= 90: + actor.addAbility("sm_shoot_first_5") return def removeAbilities(core, actor, player): - - actor.removeAbility('sm_shoot_first_1') - + actor.removeAbility("sm_shoot_first_1") + actor.removeAbility("sm_shoot_first_2") + actor.removeAbility("sm_shoot_first_3") + actor.removeAbility("sm_shoot_first_4") + actor.removeAbility("sm_shoot_first_5") return diff --git a/scripts/expertise/expertise_sm_path_skullduggery_1.py b/scripts/expertise/expertise_sm_path_skullduggery_1.py index 3da59a99..7c662b84 100644 --- a/scripts/expertise/expertise_sm_path_skullduggery_1.py +++ b/scripts/expertise/expertise_sm_path_skullduggery_1.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'smuggler_1a': - return - - actor.addSkill('expertise_sm_path_skullduggery_1') - - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'smuggler_1a': - return - - actor.removeSkill('expertise_sm_path_skullduggery_1') - - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - actor.addAbility('sm_skullduggery') - + actor.addAbility("sm_path_skullduggery") return def removeAbilities(core, actor, player): - - actor.removeAbility('sm_skullduggery') - + actor.removeAbility("sm_path_skullduggery") return diff --git a/scripts/expertise/expertise_sm_path_sleight_of_hand_1.py b/scripts/expertise/expertise_sm_path_sleight_of_hand_1.py index 555dc04d..98907737 100644 --- a/scripts/expertise/expertise_sm_path_sleight_of_hand_1.py +++ b/scripts/expertise/expertise_sm_path_sleight_of_hand_1.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'smuggler_1a': - return - - actor.addSkill('expertise_sm_path_sleight_of_hand_1') - - actor.addSkillMod('expertise_hit_by_luck', 8) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'smuggler_1a': - return - - actor.removeSkill('expertise_sm_path_sleight_of_hand_1') - - actor.removeSkillMod('expertise_hit_by_luck', 8) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_sm_path_sleight_of_hand_1") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_sm_path_sleight_of_hand_1") return diff --git a/scripts/expertise/expertise_sm_path_sleight_of_hand_2.py b/scripts/expertise/expertise_sm_path_sleight_of_hand_2.py index 50a5b317..88bdf88d 100644 --- a/scripts/expertise/expertise_sm_path_sleight_of_hand_2.py +++ b/scripts/expertise/expertise_sm_path_sleight_of_hand_2.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'smuggler_1a': - return - - actor.addSkill('expertise_sm_path_sleight_of_hand_2') - - actor.addSkillMod('expertise_hit_by_luck', 8) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'smuggler_1a': - return - - actor.removeSkill('expertise_sm_path_sleight_of_hand_2') - - actor.removeSkillMod('expertise_hit_by_luck', 8) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_sm_path_sleight_of_hand_2") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_sm_path_sleight_of_hand_2") return diff --git a/scripts/expertise/expertise_sm_path_smooth_move_1.py b/scripts/expertise/expertise_sm_path_smooth_move_1.py index c04b10a0..0f766064 100644 --- a/scripts/expertise/expertise_sm_path_smooth_move_1.py +++ b/scripts/expertise/expertise_sm_path_smooth_move_1.py @@ -1,50 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'smuggler_1a': - return - - actor.addSkill('expertise_sm_path_smooth_move_1') - - actor.addSkillMod('expertise_damage_melee', 1) - actor.addSkillMod('expertise_damage_weapon_2', 1) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'smuggler_1a': - return - - actor.removeSkill('expertise_sm_path_smooth_move_1') - - actor.removeSkillMod('expertise_damage_melee', 1) - actor.removeSkillMod('expertise_damage_weapon_2', 1) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_sm_path_smooth_move_1") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_sm_path_smooth_move_1") return diff --git a/scripts/expertise/expertise_sm_path_smooth_move_2.py b/scripts/expertise/expertise_sm_path_smooth_move_2.py index e7f8a910..d27d5c81 100644 --- a/scripts/expertise/expertise_sm_path_smooth_move_2.py +++ b/scripts/expertise/expertise_sm_path_smooth_move_2.py @@ -1,50 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'smuggler_1a': - return - - actor.addSkill('expertise_sm_path_smooth_move_2') - - actor.addSkillMod('expertise_damage_melee', 1) - actor.addSkillMod('expertise_damage_weapon_2', 1) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'smuggler_1a': - return - - actor.removeSkill('expertise_sm_path_smooth_move_2') - - actor.removeSkillMod('expertise_damage_melee', 1) - actor.removeSkillMod('expertise_damage_weapon_2', 1) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_sm_path_smooth_move_2") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_sm_path_smooth_move_2") return diff --git a/scripts/expertise/expertise_sm_path_smooth_move_3.py b/scripts/expertise/expertise_sm_path_smooth_move_3.py index 036e78ed..888bd5d2 100644 --- a/scripts/expertise/expertise_sm_path_smooth_move_3.py +++ b/scripts/expertise/expertise_sm_path_smooth_move_3.py @@ -1,50 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'smuggler_1a': - return - - actor.addSkill('expertise_sm_path_smooth_move_3') - - actor.addSkillMod('expertise_damage_melee', 1) - actor.addSkillMod('expertise_damage_weapon_2', 1) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'smuggler_1a': - return - - actor.removeSkill('expertise_sm_path_smooth_move_3') - - actor.removeSkillMod('expertise_damage_melee', 1) - actor.removeSkillMod('expertise_damage_weapon_2', 1) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_sm_path_smooth_move_3") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_sm_path_smooth_move_3") return diff --git a/scripts/expertise/expertise_sm_path_smooth_move_4.py b/scripts/expertise/expertise_sm_path_smooth_move_4.py index c608477d..52572e2a 100644 --- a/scripts/expertise/expertise_sm_path_smooth_move_4.py +++ b/scripts/expertise/expertise_sm_path_smooth_move_4.py @@ -1,50 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'smuggler_1a': - return - - actor.addSkill('expertise_sm_path_smooth_move_4') - - actor.addSkillMod('expertise_damage_melee', 1) - actor.addSkillMod('expertise_damage_weapon_2', 1) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'smuggler_1a': - return - - actor.removeSkill('expertise_sm_path_smooth_move_4') - - actor.removeSkillMod('expertise_damage_melee', 1) - actor.removeSkillMod('expertise_damage_weapon_2', 1) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_sm_path_smooth_move_4") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_sm_path_smooth_move_4") return diff --git a/scripts/expertise/expertise_sm_path_under_the_counter_1.py b/scripts/expertise/expertise_sm_path_under_the_counter_1.py index 563ac15f..4ca94bdb 100644 --- a/scripts/expertise/expertise_sm_path_under_the_counter_1.py +++ b/scripts/expertise/expertise_sm_path_under_the_counter_1.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'smuggler_1a': - return - - actor.addSkill('expertise_sm_path_under_the_counter_1') - - actor.addSkillMod('expertise_buff_under_the_counter', 25) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'smuggler_1a': - return - - actor.removeSkill('expertise_sm_path_under_the_counter_1') - - actor.removeSkillMod('expertise_buff_under_the_counter', 25) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_path_under_the_counter_1") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_path_under_the_counter_1") return diff --git a/scripts/expertise/expertise_sm_path_under_the_counter_2.py b/scripts/expertise/expertise_sm_path_under_the_counter_2.py index f4a1f72c..5769c9d6 100644 --- a/scripts/expertise/expertise_sm_path_under_the_counter_2.py +++ b/scripts/expertise/expertise_sm_path_under_the_counter_2.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'smuggler_1a': - return - - actor.addSkill('expertise_sm_path_under_the_counter_2') - - actor.addSkillMod('expertise_buff_under_the_counter', 25) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'smuggler_1a': - return - - actor.removeSkill('expertise_sm_path_under_the_counter_2') - - actor.removeSkillMod('expertise_buff_under_the_counter', 25) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_path_under_the_counter_2") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_path_under_the_counter_2") return diff --git a/scripts/expertise/expertise_sp_assassins_blade_1.py b/scripts/expertise/expertise_sp_assassins_blade_1.py index 93a526dd..e022fcf7 100644 --- a/scripts/expertise/expertise_sp_assassins_blade_1.py +++ b/scripts/expertise/expertise_sp_assassins_blade_1.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'spy_1a': - return - - actor.addSkill('expertise_sp_assassins_blade_1') - - actor.addSkillMod('expertise_strikethrough_chance', 2) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'spy_1a': - return - - actor.removeSkill('expertise_sp_assassins_blade_1') - - actor.removeSkillMod('expertise_strikethrough_chance', 2) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_sp_assassins_blade_1") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_sp_assassins_blade_1") return diff --git a/scripts/expertise/expertise_sp_assassins_blade_2.py b/scripts/expertise/expertise_sp_assassins_blade_2.py index ec05ff91..19d3ca7d 100644 --- a/scripts/expertise/expertise_sp_assassins_blade_2.py +++ b/scripts/expertise/expertise_sp_assassins_blade_2.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'spy_1a': - return - - actor.addSkill('expertise_sp_assassins_blade_2') - - actor.addSkillMod('expertise_strikethrough_chance', 2) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'spy_1a': - return - - actor.removeSkill('expertise_sp_assassins_blade_2') - - actor.removeSkillMod('expertise_strikethrough_chance', 2) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_sp_assassins_blade_2") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_sp_assassins_blade_2") return diff --git a/scripts/expertise/expertise_sp_assassins_blade_4.py b/scripts/expertise/expertise_sp_assassins_blade_4.py index 1c18ae9f..810a2d9c 100644 --- a/scripts/expertise/expertise_sp_assassins_blade_4.py +++ b/scripts/expertise/expertise_sp_assassins_blade_4.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'spy_1a': - return - - actor.addSkill('expertise_sp_assassins_blade_4') - - actor.addSkillMod('expertise_strikethrough_chance', 1) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'spy_1a': - return - - actor.removeSkill('expertise_sp_assassins_blade_4') - - actor.removeSkillMod('expertise_strikethrough_chance', 1) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_sp_assassins_blade_3") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_sp_assassins_blade_3") return diff --git a/scripts/expertise/expertise_sp_assassins_mark.py b/scripts/expertise/expertise_sp_assassins_mark.py index c15c1096..08e35d4d 100644 --- a/scripts/expertise/expertise_sp_assassins_mark.py +++ b/scripts/expertise/expertise_sp_assassins_mark.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'spy_1a': - return - - actor.addSkill('expertise_sp_assassins_mark') - - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'spy_1a': - return - - actor.removeSkill('expertise_sp_assassins_mark') - - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - actor.addAbility('sp_assassins_mark') - + actor.addAbility("sp_assassins_mark") return def removeAbilities(core, actor, player): - - actor.removeAbility('sp_assassins_mark') - + actor.removeAbility("sp_assassins_mark") return diff --git a/scripts/expertise/expertise_sp_avoid_damage_1.py b/scripts/expertise/expertise_sp_avoid_damage_1.py index 8e706bc7..723ca08c 100644 --- a/scripts/expertise/expertise_sp_avoid_damage_1.py +++ b/scripts/expertise/expertise_sp_avoid_damage_1.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'spy_1a': - return - - actor.addSkill('expertise_sp_avoid_damage_1') - - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'spy_1a': - return - - actor.removeSkill('expertise_sp_avoid_damage_1') - - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - actor.addAbility('sp_avoid_damage') - + actor.addAbility("sp_avoid_damage") return def removeAbilities(core, actor, player): - - actor.removeAbility('sp_avoid_damage') - + actor.removeAbility("sp_avoid_damage") return diff --git a/scripts/expertise/expertise_sp_burst_of_shadows_1.py b/scripts/expertise/expertise_sp_burst_of_shadows_1.py index a15ceaf2..8f106d74 100644 --- a/scripts/expertise/expertise_sp_burst_of_shadows_1.py +++ b/scripts/expertise/expertise_sp_burst_of_shadows_1.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'spy_1a': - return - - actor.addSkill('expertise_sp_burst_of_shadows_1') - - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'spy_1a': - return - - actor.removeSkill('expertise_sp_burst_of_shadows_1') - - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - actor.addAbility('sp_burst_of_shadows') - + actor.addAbility("sp_burst_of_shadows") return def removeAbilities(core, actor, player): - - actor.removeAbility('sp_burst_of_shadows') - + actor.removeAbility("sp_burst_of_shadows") return diff --git a/scripts/expertise/expertise_sp_careful_observation_1.py b/scripts/expertise/expertise_sp_careful_observation_1.py index 16654a46..158e2de9 100644 --- a/scripts/expertise/expertise_sp_careful_observation_1.py +++ b/scripts/expertise/expertise_sp_careful_observation_1.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'spy_1a': - return - - actor.addSkill('expertise_sp_careful_observation_1') - - actor.addSkillMod('detect_hidden', 25) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'spy_1a': - return - - actor.removeSkill('expertise_sp_careful_observation_1') - - actor.removeSkillMod('detect_hidden', 25) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_sp_careful_observation_1") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_sp_careful_observation_1") return diff --git a/scripts/expertise/expertise_sp_careful_observation_2.py b/scripts/expertise/expertise_sp_careful_observation_2.py index 24e1430f..64ab18fe 100644 --- a/scripts/expertise/expertise_sp_careful_observation_2.py +++ b/scripts/expertise/expertise_sp_careful_observation_2.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'spy_1a': - return - - actor.addSkill('expertise_sp_careful_observation_2') - - actor.addSkillMod('detect_hidden', 25) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'spy_1a': - return - - actor.removeSkill('expertise_sp_careful_observation_2') - - actor.removeSkillMod('detect_hidden', 25) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_sp_careful_observation_2") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_sp_careful_observation_2") return diff --git a/scripts/expertise/expertise_sp_cheap_shots_1.py b/scripts/expertise/expertise_sp_cheap_shots_1.py index 25e6ce82..4c45be85 100644 --- a/scripts/expertise/expertise_sp_cheap_shots_1.py +++ b/scripts/expertise/expertise_sp_cheap_shots_1.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'spy_1a': - return - - actor.addSkill('expertise_sp_cheap_shots_1') - - actor.addSkillMod('expertise_action_weapon_ranged', 5) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'spy_1a': - return - - actor.removeSkill('expertise_sp_cheap_shots_1') - - actor.removeSkillMod('expertise_action_weapon_ranged', 5) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_sp_cheap_shots_1") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_sp_cheap_shots_1") return diff --git a/scripts/expertise/expertise_sp_cheap_shots_2.py b/scripts/expertise/expertise_sp_cheap_shots_2.py index 80c50bbd..6f1510ff 100644 --- a/scripts/expertise/expertise_sp_cheap_shots_2.py +++ b/scripts/expertise/expertise_sp_cheap_shots_2.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'spy_1a': - return - - actor.addSkill('expertise_sp_cheap_shots_2') - - actor.addSkillMod('expertise_action_weapon_ranged', 5) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'spy_1a': - return - - actor.removeSkill('expertise_sp_cheap_shots_2') - - actor.removeSkillMod('expertise_action_weapon_ranged', 5) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_sp_cheap_shots_2") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_sp_cheap_shots_2") return diff --git a/scripts/expertise/expertise_sp_cheap_shots_3.py b/scripts/expertise/expertise_sp_cheap_shots_3.py index b109039c..a44a75a0 100644 --- a/scripts/expertise/expertise_sp_cheap_shots_3.py +++ b/scripts/expertise/expertise_sp_cheap_shots_3.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'spy_1a': - return - - actor.addSkill('expertise_sp_cheap_shots_3') - - actor.addSkillMod('expertise_action_weapon_ranged', 5) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'spy_1a': - return - - actor.removeSkill('expertise_sp_cheap_shots_3') - - actor.removeSkillMod('expertise_action_weapon_ranged', 5) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_sp_cheap_shots_3") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_sp_cheap_shots_3") return diff --git a/scripts/expertise/expertise_sp_cheap_shots_4.py b/scripts/expertise/expertise_sp_cheap_shots_4.py index 473d1c54..be49ce20 100644 --- a/scripts/expertise/expertise_sp_cheap_shots_4.py +++ b/scripts/expertise/expertise_sp_cheap_shots_4.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'spy_1a': - return - - actor.addSkill('expertise_sp_cheap_shots_4') - - actor.addSkillMod('expertise_action_weapon_ranged', 5) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'spy_1a': - return - - actor.removeSkill('expertise_sp_cheap_shots_4') - - actor.removeSkillMod('expertise_action_weapon_ranged', 5) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_sp_cheap_shots_4") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_sp_cheap_shots_4") return diff --git a/scripts/expertise/expertise_sp_cheap_strikes_1.py b/scripts/expertise/expertise_sp_cheap_strikes_1.py index b32c86b8..bf64aff5 100644 --- a/scripts/expertise/expertise_sp_cheap_strikes_1.py +++ b/scripts/expertise/expertise_sp_cheap_strikes_1.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'spy_1a': - return - - actor.addSkill('expertise_sp_cheap_strikes_1') - - actor.addSkillMod('expertise_action_weapon_melee', 5) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'spy_1a': - return - - actor.removeSkill('expertise_sp_cheap_strikes_1') - - actor.removeSkillMod('expertise_action_weapon_melee', 5) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_sp_cheap_strikes_1") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_sp_cheap_strikes_1") return diff --git a/scripts/expertise/expertise_sp_cheap_strikes_2.py b/scripts/expertise/expertise_sp_cheap_strikes_2.py index a88b5b7a..2264e3cc 100644 --- a/scripts/expertise/expertise_sp_cheap_strikes_2.py +++ b/scripts/expertise/expertise_sp_cheap_strikes_2.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'spy_1a': - return - - actor.addSkill('expertise_sp_cheap_strikes_2') - - actor.addSkillMod('expertise_action_weapon_melee', 5) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'spy_1a': - return - - actor.removeSkill('expertise_sp_cheap_strikes_2') - - actor.removeSkillMod('expertise_action_weapon_melee', 5) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_sp_cheap_strikes_2") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_sp_cheap_strikes_2") return diff --git a/scripts/expertise/expertise_sp_cheap_strikes_3.py b/scripts/expertise/expertise_sp_cheap_strikes_3.py index c3e9a8a0..110acea8 100644 --- a/scripts/expertise/expertise_sp_cheap_strikes_3.py +++ b/scripts/expertise/expertise_sp_cheap_strikes_3.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'spy_1a': - return - - actor.addSkill('expertise_sp_cheap_strikes_3') - - actor.addSkillMod('expertise_action_weapon_melee', 5) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'spy_1a': - return - - actor.removeSkill('expertise_sp_cheap_strikes_3') - - actor.removeSkillMod('expertise_action_weapon_melee', 5) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_sp_cheap_strikes_3") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_sp_cheap_strikes_3") return diff --git a/scripts/expertise/expertise_sp_cheap_strikes_4.py b/scripts/expertise/expertise_sp_cheap_strikes_4.py index 2f58d895..97a2d0f6 100644 --- a/scripts/expertise/expertise_sp_cheap_strikes_4.py +++ b/scripts/expertise/expertise_sp_cheap_strikes_4.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'spy_1a': - return - - actor.addSkill('expertise_sp_cheap_strikes_4') - - actor.addSkillMod('expertise_action_weapon_melee', 5) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'spy_1a': - return - - actor.removeSkill('expertise_sp_cheap_strikes_4') - - actor.removeSkillMod('expertise_action_weapon_melee', 5) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_sp_cheap_strikes_4") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_sp_cheap_strikes_4") return diff --git a/scripts/expertise/expertise_sp_cloak_and_dagger_1.py b/scripts/expertise/expertise_sp_cloak_and_dagger_1.py index f1333f00..55d9c884 100644 --- a/scripts/expertise/expertise_sp_cloak_and_dagger_1.py +++ b/scripts/expertise/expertise_sp_cloak_and_dagger_1.py @@ -1,54 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'spy_1a': - return - - actor.addSkill('expertise_sp_cloak_and_dagger_1') - - actor.addSkillMod('expertise_damage_line_sp_stealth_melee', 20) - actor.addSkillMod('expertise_damage_line_sp_stealth_ranged', 20) - actor.addSkillMod('expertise_dot_damage_line_sp_stealth_melee', 20) - actor.addSkillMod('expertise_dot_damage_line_sp_stealth_ranged', 20) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'spy_1a': - return - - actor.removeSkill('expertise_sp_cloak_and_dagger_1') - - actor.removeSkillMod('expertise_damage_line_sp_stealth_melee', 20) - actor.removeSkillMod('expertise_damage_line_sp_stealth_ranged', 20) - actor.removeSkillMod('expertise_dot_damage_line_sp_stealth_melee', 20) - actor.removeSkillMod('expertise_dot_damage_line_sp_stealth_ranged', 20) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_sp_cloak_and_dagger_1") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_sp_cloak_and_dagger_1") return diff --git a/scripts/expertise/expertise_sp_cloak_and_dagger_2.py b/scripts/expertise/expertise_sp_cloak_and_dagger_2.py index f9ac5034..1ee3ca02 100644 --- a/scripts/expertise/expertise_sp_cloak_and_dagger_2.py +++ b/scripts/expertise/expertise_sp_cloak_and_dagger_2.py @@ -1,54 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'spy_1a': - return - - actor.addSkill('expertise_sp_cloak_and_dagger_2') - - actor.addSkillMod('expertise_damage_line_sp_stealth_melee', 20) - actor.addSkillMod('expertise_damage_line_sp_stealth_ranged', 20) - actor.addSkillMod('expertise_dot_damage_line_sp_stealth_melee', 20) - actor.addSkillMod('expertise_dot_damage_line_sp_stealth_ranged', 20) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'spy_1a': - return - - actor.removeSkill('expertise_sp_cloak_and_dagger_2') - - actor.removeSkillMod('expertise_damage_line_sp_stealth_melee', 20) - actor.removeSkillMod('expertise_damage_line_sp_stealth_ranged', 20) - actor.removeSkillMod('expertise_dot_damage_line_sp_stealth_melee', 20) - actor.removeSkillMod('expertise_dot_damage_line_sp_stealth_ranged', 20) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_sp_cloak_and_dagger_2") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_sp_cloak_and_dagger_2") return diff --git a/scripts/expertise/expertise_sp_cloak_and_dagger_3.py b/scripts/expertise/expertise_sp_cloak_and_dagger_3.py index 977c7b67..c46d0390 100644 --- a/scripts/expertise/expertise_sp_cloak_and_dagger_3.py +++ b/scripts/expertise/expertise_sp_cloak_and_dagger_3.py @@ -1,54 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'spy_1a': - return - - actor.addSkill('expertise_sp_cloak_and_dagger_3') - - actor.addSkillMod('expertise_damage_line_sp_stealth_melee', 20) - actor.addSkillMod('expertise_damage_line_sp_stealth_ranged', 20) - actor.addSkillMod('expertise_dot_damage_line_sp_stealth_melee', 20) - actor.addSkillMod('expertise_dot_damage_line_sp_stealth_ranged', 20) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'spy_1a': - return - - actor.removeSkill('expertise_sp_cloak_and_dagger_3') - - actor.removeSkillMod('expertise_damage_line_sp_stealth_melee', 20) - actor.removeSkillMod('expertise_damage_line_sp_stealth_ranged', 20) - actor.removeSkillMod('expertise_dot_damage_line_sp_stealth_melee', 20) - actor.removeSkillMod('expertise_dot_damage_line_sp_stealth_ranged', 20) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_sp_cloak_and_dagger_3") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_sp_cloak_and_dagger_3") return diff --git a/scripts/expertise/expertise_sp_cloak_and_dagger_4.py b/scripts/expertise/expertise_sp_cloak_and_dagger_4.py index bc53f9a9..7e78d832 100644 --- a/scripts/expertise/expertise_sp_cloak_and_dagger_4.py +++ b/scripts/expertise/expertise_sp_cloak_and_dagger_4.py @@ -1,54 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'spy_1a': - return - - actor.addSkill('expertise_sp_cloak_and_dagger_4') - - actor.addSkillMod('expertise_damage_line_sp_stealth_melee', 20) - actor.addSkillMod('expertise_damage_line_sp_stealth_ranged', 20) - actor.addSkillMod('expertise_dot_damage_line_sp_stealth_melee', 20) - actor.addSkillMod('expertise_dot_damage_line_sp_stealth_ranged', 20) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'spy_1a': - return - - actor.removeSkill('expertise_sp_cloak_and_dagger_4') - - actor.removeSkillMod('expertise_damage_line_sp_stealth_melee', 20) - actor.removeSkillMod('expertise_damage_line_sp_stealth_ranged', 20) - actor.removeSkillMod('expertise_dot_damage_line_sp_stealth_melee', 20) - actor.removeSkillMod('expertise_dot_damage_line_sp_stealth_ranged', 20) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_sp_cloak_and_dagger_4") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_sp_cloak_and_dagger_4") return diff --git a/scripts/expertise/expertise_sp_cloaked_attacks_1.py b/scripts/expertise/expertise_sp_cloaked_attacks_1.py index d96a977e..9f979c33 100644 --- a/scripts/expertise/expertise_sp_cloaked_attacks_1.py +++ b/scripts/expertise/expertise_sp_cloaked_attacks_1.py @@ -1,48 +1,52 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'spy_1a': - return - - actor.addSkill('expertise_sp_cloaked_attacks_1') - - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'spy_1a': - return - - actor.removeSkill('expertise_sp_cloaked_attacks_1') - - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - actor.addAbility('sp_ambush_snipe_0') - + if actor.getLevel() >= 10: + actor.addAbility("sp_stealth_melee_0") + if actor.getLevel() >= 20: + actor.addAbility("sp_stealth_melee_1") + if actor.getLevel() >= 32: + actor.addAbility("sp_stealth_melee_2") + if actor.getLevel() >= 46: + actor.addAbility("sp_stealth_melee_3") + if actor.getLevel() >= 60: + actor.addAbility("sp_stealth_melee_4") + if actor.getLevel() >= 70: + actor.addAbility("sp_stealth_melee_5") + if actor.getLevel() >= 86: + actor.addAbility("sp_stealth_melee_6") + + if actor.getLevel() >= 10: + actor.addAbility("sp_stealth_ranged_0") + if actor.getLevel() >= 20: + actor.addAbility("sp_stealth_ranged_1") + if actor.getLevel() >= 32: + actor.addAbility("sp_stealth_ranged_2") + if actor.getLevel() >= 46: + actor.addAbility("sp_stealth_ranged_3") + if actor.getLevel() >= 60: + actor.addAbility("sp_stealth_ranged_4") + if actor.getLevel() >= 70: + actor.addAbility("sp_stealth_ranged_5") + if actor.getLevel() >= 86: + actor.addAbility("sp_stealth_ranged_6") return def removeAbilities(core, actor, player): - - actor.removeAbility('sp_ambush_snipe_0') - + actor.removeAbility("sp_stealth_melee_0") + actor.removeAbility("sp_stealth_melee_1") + actor.removeAbility("sp_stealth_melee_2") + actor.removeAbility("sp_stealth_melee_3") + actor.removeAbility("sp_stealth_melee_4") + actor.removeAbility("sp_stealth_melee_5") + actor.removeAbility("sp_stealth_melee_6") + + actor.removeAbility("sp_stealth_ranged_0") + actor.removeAbility("sp_stealth_ranged_1") + actor.removeAbility("sp_stealth_ranged_2") + actor.removeAbility("sp_stealth_ranged_3") + actor.removeAbility("sp_stealth_ranged_4") + actor.removeAbility("sp_stealth_ranged_5") + actor.removeAbility("sp_stealth_ranged_6") return + diff --git a/scripts/expertise/expertise_sp_cloaked_recovery_1.py b/scripts/expertise/expertise_sp_cloaked_recovery_1.py index 17e8cb25..5e8ffb01 100644 --- a/scripts/expertise/expertise_sp_cloaked_recovery_1.py +++ b/scripts/expertise/expertise_sp_cloaked_recovery_1.py @@ -1,48 +1,22 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'spy_1a': - return - - actor.addSkill('expertise_sp_cloaked_recovery_1') - - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'spy_1a': - return - - actor.removeSkill('expertise_sp_cloaked_recovery_1') - - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - actor.addAbility('sp_cloaked_recovery_0') - + if actor.getLevel() >= 10: + actor.addAbility("sp_cloaked_recovery_0") + if actor.getLevel() >= 28: + actor.addAbility("sp_cloaked_recovery_1") + if actor.getLevel() >= 54: + actor.addAbility("sp_cloaked_recovery_2") + if actor.getLevel() >= 70: + actor.addAbility("sp_cloaked_recovery_3") + if actor.getLevel() >= 86: + actor.addAbility("sp_cloaked_recovery_4") return def removeAbilities(core, actor, player): - - actor.removeAbility('sp_cloaked_recovery_0') - + actor.removeAbility("sp_cloaked_recovery_0") + actor.removeAbility("sp_cloaked_recovery_1") + actor.removeAbility("sp_cloaked_recovery_2") + actor.removeAbility("sp_cloaked_recovery_3") + actor.removeAbility("sp_cloaked_recovery_4") return diff --git a/scripts/expertise/expertise_sp_cloaking_armor_1.py b/scripts/expertise/expertise_sp_cloaking_armor_1.py index 80d1afc1..4d29b500 100644 --- a/scripts/expertise/expertise_sp_cloaking_armor_1.py +++ b/scripts/expertise/expertise_sp_cloaking_armor_1.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'spy_1a': - return - - actor.addSkill('expertise_sp_cloaking_armor_1') - - actor.addSkillMod('camouflage', 35) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'spy_1a': - return - - actor.removeSkill('expertise_sp_cloaking_armor_1') - - actor.removeSkillMod('camouflage', 35) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_sp_cloaking_armor_1") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_sp_cloaking_armor_1") return diff --git a/scripts/expertise/expertise_sp_cloaking_armor_2.py b/scripts/expertise/expertise_sp_cloaking_armor_2.py index 79cb0d6f..7aef08d8 100644 --- a/scripts/expertise/expertise_sp_cloaking_armor_2.py +++ b/scripts/expertise/expertise_sp_cloaking_armor_2.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'spy_1a': - return - - actor.addSkill('expertise_sp_cloaking_armor_2') - - actor.addSkillMod('camouflage', 40) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'spy_1a': - return - - actor.removeSkill('expertise_sp_cloaking_armor_2') - - actor.removeSkillMod('camouflage', 40) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_sp_cloaking_armor_2") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_sp_cloaking_armor_2") return diff --git a/scripts/expertise/expertise_sp_close_quarters_1.py b/scripts/expertise/expertise_sp_close_quarters_1.py index 7f47d8c4..e98a053f 100644 --- a/scripts/expertise/expertise_sp_close_quarters_1.py +++ b/scripts/expertise/expertise_sp_close_quarters_1.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'spy_1a': - return - - actor.addSkill('expertise_sp_close_quarters_1') - - actor.addSkillMod('expertise_damage_melee', 2) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'spy_1a': - return - - actor.removeSkill('expertise_sp_close_quarters_1') - - actor.removeSkillMod('expertise_damage_melee', 2) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_sp_close_quarters_1") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_sp_close_quarters_1") return diff --git a/scripts/expertise/expertise_sp_close_quarters_2.py b/scripts/expertise/expertise_sp_close_quarters_2.py index 11685e64..6a94d3e4 100644 --- a/scripts/expertise/expertise_sp_close_quarters_2.py +++ b/scripts/expertise/expertise_sp_close_quarters_2.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'spy_1a': - return - - actor.addSkill('expertise_sp_close_quarters_2') - - actor.addSkillMod('expertise_damage_melee', 2) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'spy_1a': - return - - actor.removeSkill('expertise_sp_close_quarters_2') - - actor.removeSkillMod('expertise_damage_melee', 2) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_sp_close_quarters_2") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_sp_close_quarters_2") return diff --git a/scripts/expertise/expertise_sp_close_quarters_3.py b/scripts/expertise/expertise_sp_close_quarters_3.py index ee025e54..3b9e0088 100644 --- a/scripts/expertise/expertise_sp_close_quarters_3.py +++ b/scripts/expertise/expertise_sp_close_quarters_3.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'spy_1a': - return - - actor.addSkill('expertise_sp_close_quarters_3') - - actor.addSkillMod('expertise_damage_melee', 2) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'spy_1a': - return - - actor.removeSkill('expertise_sp_close_quarters_3') - - actor.removeSkillMod('expertise_damage_melee', 2) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_sp_close_quarters_3") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_sp_close_quarters_3") return diff --git a/scripts/expertise/expertise_sp_covert_mastery_1.py b/scripts/expertise/expertise_sp_covert_mastery_1.py index 114d70b6..56e5d7df 100644 --- a/scripts/expertise/expertise_sp_covert_mastery_1.py +++ b/scripts/expertise/expertise_sp_covert_mastery_1.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'spy_1a': - return - - actor.addSkill('expertise_sp_covert_mastery_1') - - actor.addSkillMod('expertise_covert_mastery', 1) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'spy_1a': - return - - actor.removeSkill('expertise_sp_covert_mastery_1') - - actor.removeSkillMod('expertise_covert_mastery', 1) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_sp_covert_mastery_1") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_sp_covert_mastery_1") return diff --git a/scripts/expertise/expertise_sp_crippling_traps_1.py b/scripts/expertise/expertise_sp_crippling_traps_1.py index 9189c956..f414594b 100644 --- a/scripts/expertise/expertise_sp_crippling_traps_1.py +++ b/scripts/expertise/expertise_sp_crippling_traps_1.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'spy_1a': - return - - actor.addSkill('expertise_sp_crippling_traps_1') - - actor.addSkillMod('expertise_sp_cripple_trap_proc_increase', 50) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'spy_1a': - return - - actor.removeSkill('expertise_sp_crippling_traps_1') - - actor.removeSkillMod('expertise_sp_cripple_trap_proc_increase', 50) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_sp_crippling_traps_1") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_sp_crippling_traps_1") return diff --git a/scripts/expertise/expertise_sp_crippling_traps_2.py b/scripts/expertise/expertise_sp_crippling_traps_2.py index c7b2170e..f5899f9c 100644 --- a/scripts/expertise/expertise_sp_crippling_traps_2.py +++ b/scripts/expertise/expertise_sp_crippling_traps_2.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'spy_1a': - return - - actor.addSkill('expertise_sp_crippling_traps_2') - - actor.addSkillMod('expertise_sp_cripple_trap_proc_increase', 50) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'spy_1a': - return - - actor.removeSkill('expertise_sp_crippling_traps_2') - - actor.removeSkillMod('expertise_sp_cripple_trap_proc_increase', 50) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_sp_crippling_traps_2") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_sp_crippling_traps_2") return diff --git a/scripts/expertise/expertise_sp_deadly_pistols_1.py b/scripts/expertise/expertise_sp_deadly_pistols_1.py index fc98249a..16e02540 100644 --- a/scripts/expertise/expertise_sp_deadly_pistols_1.py +++ b/scripts/expertise/expertise_sp_deadly_pistols_1.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'spy_1a': - return - - actor.addSkill('expertise_sp_deadly_pistols_1') - - actor.addSkillMod('expertise_damage_ranged', 2) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'spy_1a': - return - - actor.removeSkill('expertise_sp_deadly_pistols_1') - - actor.removeSkillMod('expertise_damage_ranged', 2) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_sp_deadly_pistols_1") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_sp_deadly_pistols_1") return diff --git a/scripts/expertise/expertise_sp_deadly_pistols_2.py b/scripts/expertise/expertise_sp_deadly_pistols_2.py index 6f51bb5e..dc23941c 100644 --- a/scripts/expertise/expertise_sp_deadly_pistols_2.py +++ b/scripts/expertise/expertise_sp_deadly_pistols_2.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'spy_1a': - return - - actor.addSkill('expertise_sp_deadly_pistols_2') - - actor.addSkillMod('expertise_damage_ranged', 2) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'spy_1a': - return - - actor.removeSkill('expertise_sp_deadly_pistols_2') - - actor.removeSkillMod('expertise_damage_ranged', 2) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_sp_deadly_pistols_2") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_sp_deadly_pistols_2") return diff --git a/scripts/expertise/expertise_sp_deadly_pistols_3.py b/scripts/expertise/expertise_sp_deadly_pistols_3.py index 2e75294c..42077da1 100644 --- a/scripts/expertise/expertise_sp_deadly_pistols_3.py +++ b/scripts/expertise/expertise_sp_deadly_pistols_3.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'spy_1a': - return - - actor.addSkill('expertise_sp_deadly_pistols_3') - - actor.addSkillMod('expertise_damage_ranged', 2) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'spy_1a': - return - - actor.removeSkill('expertise_sp_deadly_pistols_3') - - actor.removeSkillMod('expertise_damage_ranged', 2) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_sp_deadly_pistols_3") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_sp_deadly_pistols_3") return diff --git a/scripts/expertise/expertise_sp_deadly_toxins_1.py b/scripts/expertise/expertise_sp_deadly_toxins_1.py index 7e8dc0c9..cc5432e9 100644 --- a/scripts/expertise/expertise_sp_deadly_toxins_1.py +++ b/scripts/expertise/expertise_sp_deadly_toxins_1.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'spy_1a': - return - - actor.addSkill('expertise_sp_deadly_toxins_1') - - actor.addSkillMod('expertise_critical_line_fldmot', 10) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'spy_1a': - return - - actor.removeSkill('expertise_sp_deadly_toxins_1') - - actor.removeSkillMod('expertise_critical_line_fldmot', 10) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_sp_deadly_toxins_1") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_sp_deadly_toxins_1") return diff --git a/scripts/expertise/expertise_sp_deadly_toxins_2.py b/scripts/expertise/expertise_sp_deadly_toxins_2.py index 1995b0dc..f5f3be36 100644 --- a/scripts/expertise/expertise_sp_deadly_toxins_2.py +++ b/scripts/expertise/expertise_sp_deadly_toxins_2.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'spy_1a': - return - - actor.addSkill('expertise_sp_deadly_toxins_2') - - actor.addSkillMod('expertise_critical_line_fldmot', 10) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'spy_1a': - return - - actor.removeSkill('expertise_sp_deadly_toxins_2') - - actor.removeSkillMod('expertise_critical_line_fldmot', 10) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_sp_deadly_toxins_2") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_sp_deadly_toxins_2") return diff --git a/scripts/expertise/expertise_sp_decoy_1.py b/scripts/expertise/expertise_sp_decoy_1.py index 4888c20c..50f9dcc6 100644 --- a/scripts/expertise/expertise_sp_decoy_1.py +++ b/scripts/expertise/expertise_sp_decoy_1.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'spy_1a': - return - - actor.addSkill('expertise_sp_decoy_1') - - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'spy_1a': - return - - actor.removeSkill('expertise_sp_decoy_1') - - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - actor.addAbility('sp_decoy') - + actor.addAbility("sp_decoy") return def removeAbilities(core, actor, player): - - actor.removeAbility('sp_decoy') - + actor.removeAbility("sp_decoy") return diff --git a/scripts/expertise/expertise_sp_diversion_1.py b/scripts/expertise/expertise_sp_diversion_1.py index aa564906..fdd847e9 100644 --- a/scripts/expertise/expertise_sp_diversion_1.py +++ b/scripts/expertise/expertise_sp_diversion_1.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'spy_1a': - return - - actor.addSkill('expertise_sp_diversion_1') - - actor.addSkillMod('expertise_improved_decoy', 1) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'spy_1a': - return - - actor.removeSkill('expertise_sp_diversion_1') - - actor.removeSkillMod('expertise_improved_decoy', 1) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_sp_diversion_1") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_sp_diversion_1") return diff --git a/scripts/expertise/expertise_sp_diversion_2.py b/scripts/expertise/expertise_sp_diversion_2.py index d8b6c134..7dddf6ba 100644 --- a/scripts/expertise/expertise_sp_diversion_2.py +++ b/scripts/expertise/expertise_sp_diversion_2.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'spy_1a': - return - - actor.addSkill('expertise_sp_diversion_2') - - actor.addSkillMod('expertise_improved_decoy', 1) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'spy_1a': - return - - actor.removeSkill('expertise_sp_diversion_2') - - actor.removeSkillMod('expertise_improved_decoy', 1) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_sp_diversion_2") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_sp_diversion_2") return diff --git a/scripts/expertise/expertise_sp_equilibrium.py b/scripts/expertise/expertise_sp_equilibrium.py index d42cdb4d..1ebdcbd1 100644 --- a/scripts/expertise/expertise_sp_equilibrium.py +++ b/scripts/expertise/expertise_sp_equilibrium.py @@ -1,52 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'spy_1a': - return - - actor.addSkill('expertise_sp_equilibrium') - - actor.addSkillMod('freeshot_case_miss', 1) - actor.addSkillMod('freeshot_case_dodge', 1) - actor.addSkillMod('freeshot_case_parry', 1) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'spy_1a': - return - - actor.removeSkill('expertise_sp_equilibrium') - - actor.removeSkillMod('freeshot_case_miss', 1) - actor.removeSkillMod('freeshot_case_dodge', 1) - actor.removeSkillMod('freeshot_case_parry', 1) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_sp_equilibrium") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_sp_equilibrium") return diff --git a/scripts/expertise/expertise_sp_expose_shadows_1.py b/scripts/expertise/expertise_sp_expose_shadows_1.py index 4b08472a..22769831 100644 --- a/scripts/expertise/expertise_sp_expose_shadows_1.py +++ b/scripts/expertise/expertise_sp_expose_shadows_1.py @@ -1,52 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'spy_1a': - return - - actor.addSkill('expertise_sp_expose_shadows_1') - - actor.addSkillMod('expertise_sp_reveal_shadows_distance_increase', 5) - actor.addSkillMod('expertise_sp_reveal_shadows_detect_chance_increase', 3) - actor.addSkillMod('expertise_cooldown_line_sp_reveal_shadows', 10) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'spy_1a': - return - - actor.removeSkill('expertise_sp_expose_shadows_1') - - actor.removeSkillMod('expertise_sp_reveal_shadows_distance_increase', 5) - actor.removeSkillMod('expertise_sp_reveal_shadows_detect_chance_increase', 3) - actor.removeSkillMod('expertise_cooldown_line_sp_reveal_shadows', 10) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_sp_expose_shadows_1") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_sp_expose_shadows_1") return diff --git a/scripts/expertise/expertise_sp_expose_shadows_2.py b/scripts/expertise/expertise_sp_expose_shadows_2.py index 79a4cf58..ff7f014f 100644 --- a/scripts/expertise/expertise_sp_expose_shadows_2.py +++ b/scripts/expertise/expertise_sp_expose_shadows_2.py @@ -1,52 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'spy_1a': - return - - actor.addSkill('expertise_sp_expose_shadows_2') - - actor.addSkillMod('expertise_sp_reveal_shadows_distance_increase', 5) - actor.addSkillMod('expertise_sp_reveal_shadows_detect_chance_increase', 3) - actor.addSkillMod('expertise_cooldown_line_sp_reveal_shadows', 10) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'spy_1a': - return - - actor.removeSkill('expertise_sp_expose_shadows_2') - - actor.removeSkillMod('expertise_sp_reveal_shadows_distance_increase', 5) - actor.removeSkillMod('expertise_sp_reveal_shadows_detect_chance_increase', 3) - actor.removeSkillMod('expertise_cooldown_line_sp_reveal_shadows', 10) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_sp_expose_shadows_2") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_sp_expose_shadows_2") return diff --git a/scripts/expertise/expertise_sp_expose_shadows_3.py b/scripts/expertise/expertise_sp_expose_shadows_3.py index 648a6cb4..209eb428 100644 --- a/scripts/expertise/expertise_sp_expose_shadows_3.py +++ b/scripts/expertise/expertise_sp_expose_shadows_3.py @@ -1,52 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'spy_1a': - return - - actor.addSkill('expertise_sp_expose_shadows_3') - - actor.addSkillMod('expertise_sp_reveal_shadows_distance_increase', 5) - actor.addSkillMod('expertise_sp_reveal_shadows_detect_chance_increase', 3) - actor.addSkillMod('expertise_cooldown_line_sp_reveal_shadows', 10) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'spy_1a': - return - - actor.removeSkill('expertise_sp_expose_shadows_3') - - actor.removeSkillMod('expertise_sp_reveal_shadows_distance_increase', 5) - actor.removeSkillMod('expertise_sp_reveal_shadows_detect_chance_increase', 3) - actor.removeSkillMod('expertise_cooldown_line_sp_reveal_shadows', 10) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_sp_expose_shadows_3") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_sp_expose_shadows_3") return diff --git a/scripts/expertise/expertise_sp_expose_shadows_4.py b/scripts/expertise/expertise_sp_expose_shadows_4.py index cce077b5..2afdddf2 100644 --- a/scripts/expertise/expertise_sp_expose_shadows_4.py +++ b/scripts/expertise/expertise_sp_expose_shadows_4.py @@ -1,52 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'spy_1a': - return - - actor.addSkill('expertise_sp_expose_shadows_4') - - actor.addSkillMod('expertise_sp_reveal_shadows_distance_increase', 5) - actor.addSkillMod('expertise_sp_reveal_shadows_detect_chance_increase', 3) - actor.addSkillMod('expertise_cooldown_line_sp_reveal_shadows', 10) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'spy_1a': - return - - actor.removeSkill('expertise_sp_expose_shadows_4') - - actor.removeSkillMod('expertise_sp_reveal_shadows_distance_increase', 5) - actor.removeSkillMod('expertise_sp_reveal_shadows_detect_chance_increase', 3) - actor.removeSkillMod('expertise_cooldown_line_sp_reveal_shadows', 10) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_sp_expose_shadows_4") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_sp_expose_shadows_4") return diff --git a/scripts/expertise/expertise_sp_glancing_armor_1.py b/scripts/expertise/expertise_sp_glancing_armor_1.py index 2bc35f22..f1e04872 100644 --- a/scripts/expertise/expertise_sp_glancing_armor_1.py +++ b/scripts/expertise/expertise_sp_glancing_armor_1.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'spy_1a': - return - - actor.addSkill('expertise_sp_glancing_armor_1') - - actor.addSkillMod('expertise_dodge', 5) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'spy_1a': - return - - actor.removeSkill('expertise_sp_glancing_armor_1') - - actor.removeSkillMod('expertise_dodge', 5) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_sp_glancing_armor_1") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_sp_glancing_armor_1") return diff --git a/scripts/expertise/expertise_sp_glancing_armor_2.py b/scripts/expertise/expertise_sp_glancing_armor_2.py index 84e0e50d..42c8c808 100644 --- a/scripts/expertise/expertise_sp_glancing_armor_2.py +++ b/scripts/expertise/expertise_sp_glancing_armor_2.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'spy_1a': - return - - actor.addSkill('expertise_sp_glancing_armor_2') - - actor.addSkillMod('expertise_dodge', 5) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'spy_1a': - return - - actor.removeSkill('expertise_sp_glancing_armor_2') - - actor.removeSkillMod('expertise_dodge', 5) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_sp_glancing_armor_2") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_sp_glancing_armor_2") return diff --git a/scripts/expertise/expertise_sp_hidden_daggers_1.py b/scripts/expertise/expertise_sp_hidden_daggers_1.py index 2b947a0c..38c849d5 100644 --- a/scripts/expertise/expertise_sp_hidden_daggers_1.py +++ b/scripts/expertise/expertise_sp_hidden_daggers_1.py @@ -1,48 +1,51 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'spy_1a': - return - - actor.addSkill('expertise_sp_hidden_daggers_1') - - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'spy_1a': - return - - actor.removeSkill('expertise_sp_hidden_daggers_1') - - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): + if actor.getLevel() >= 10: + actor.addAbility("sp_hd_melee_0") + if actor.getLevel() >= 18: + actor.addAbility("sp_hd_melee_1") + if actor.getLevel() >= 32: + actor.addAbility("sp_hd_melee_2") + if actor.getLevel() >= 46: + actor.addAbility("sp_hd_melee_3") + if actor.getLevel() >= 58: + actor.addAbility("sp_hd_melee_4") + if actor.getLevel() >= 70: + actor.addAbility("sp_hd_melee_5") + if actor.getLevel() >= 84: + actor.addAbility("sp_hd_melee_6") - actor.addAbility('sp_hd_ability_0') - + if actor.getLevel() >= 10: + actor.addAbility("sp_hd_range_0") + if actor.getLevel() >= 18: + actor.addAbility("sp_hd_range_1") + if actor.getLevel() >= 32: + actor.addAbility("sp_hd_range_2") + if actor.getLevel() >= 46: + actor.addAbility("sp_hd_range_3") + if actor.getLevel() >= 58: + actor.addAbility("sp_hd_range_4") + if actor.getLevel() >= 70: + actor.addAbility("sp_hd_range_5") + if actor.getLevel() >= 84: + actor.addAbility("sp_hd_range_6") return def removeAbilities(core, actor, player): + actor.removeAbility("sp_hd_melee_0") + actor.removeAbility("sp_hd_melee_1") + actor.removeAbility("sp_hd_melee_2") + actor.removeAbility("sp_hd_melee_3") + actor.removeAbility("sp_hd_melee_4") + actor.removeAbility("sp_hd_melee_5") + actor.removeAbility("sp_hd_melee_6") - actor.removeAbility('sp_hd_ability_0') - + actor.removeAbility("sp_hd_range_0") + actor.removeAbility("sp_hd_range_1") + actor.removeAbility("sp_hd_range_2") + actor.removeAbility("sp_hd_range_3") + actor.removeAbility("sp_hd_range_4") + actor.removeAbility("sp_hd_range_5") + actor.removeAbility("sp_hd_range_6") return diff --git a/scripts/expertise/expertise_sp_hidden_daggers_2.py b/scripts/expertise/expertise_sp_hidden_daggers_2.py new file mode 100644 index 00000000..9b197112 --- /dev/null +++ b/scripts/expertise/expertise_sp_hidden_daggers_2.py @@ -0,0 +1,9 @@ +import sys + +def addAbilities(core, actor, player): + actor.addAbility("sp_hd_range_0") + return + +def removeAbilities(core, actor, player): + actor.removeAbility("sp_hd_range_0") + return diff --git a/scripts/expertise/expertise_sp_improved_arachnids_web_1.py b/scripts/expertise/expertise_sp_improved_arachnids_web_1.py new file mode 100644 index 00000000..b9c80355 --- /dev/null +++ b/scripts/expertise/expertise_sp_improved_arachnids_web_1.py @@ -0,0 +1,19 @@ +import sys + +def addAbilities(core, actor, player): + if actor.getLevel() >= 34: + actor.addAbility("sp_improved_cc_dot_1") + if actor.getLevel() >= 50: + actor.addAbility("sp_improved_cc_dot_2") + if actor.getLevel() >= 66: + actor.addAbility("sp_improved_cc_dot_3") + if actor.getLevel() >= 82: + actor.addAbility("sp_improved_cc_dot_4") + return + +def removeAbilities(core, actor, player): + actor.removeAbility("sp_improved_cc_dot_1") + actor.removeAbility("sp_improved_cc_dot_2") + actor.removeAbility("sp_improved_cc_dot_3") + actor.removeAbility("sp_improved_cc_dot_4") + return diff --git a/scripts/expertise/expertise_sp_improved_first_aid_1.py b/scripts/expertise/expertise_sp_improved_first_aid_1.py index 302ef8e0..7e866996 100644 --- a/scripts/expertise/expertise_sp_improved_first_aid_1.py +++ b/scripts/expertise/expertise_sp_improved_first_aid_1.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'spy_1a': - return - - actor.addSkill('expertise_sp_improved_first_aid_1') - - actor.addSkillMod('expertise_target_healing_bonus', 10) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'spy_1a': - return - - actor.removeSkill('expertise_sp_improved_first_aid_1') - - actor.removeSkillMod('expertise_target_healing_bonus', 10) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_sp_improved_first_aid_1") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_sp_improved_first_aid_1") return diff --git a/scripts/expertise/expertise_sp_improved_first_aid_2.py b/scripts/expertise/expertise_sp_improved_first_aid_2.py index 5c810822..cec8de8b 100644 --- a/scripts/expertise/expertise_sp_improved_first_aid_2.py +++ b/scripts/expertise/expertise_sp_improved_first_aid_2.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'spy_1a': - return - - actor.addSkill('expertise_sp_improved_first_aid_2') - - actor.addSkillMod('expertise_target_healing_bonus', 10) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'spy_1a': - return - - actor.removeSkill('expertise_sp_improved_first_aid_2') - - actor.removeSkillMod('expertise_target_healing_bonus', 10) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_sp_improved_first_aid_2") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_sp_improved_first_aid_2") return diff --git a/scripts/expertise/expertise_sp_improved_spys_fang_1.py b/scripts/expertise/expertise_sp_improved_spys_fang_1.py index a91bbc75..5a085702 100644 --- a/scripts/expertise/expertise_sp_improved_spys_fang_1.py +++ b/scripts/expertise/expertise_sp_improved_spys_fang_1.py @@ -1,48 +1,25 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'spy_1a': - return - - actor.addSkill('expertise_sp_improved_spys_fang_1') - - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'spy_1a': - return - - actor.removeSkill('expertise_sp_improved_spys_fang_1') - - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - actor.addAbility('sp_dot_0') - + if actor.getLevel() >= 10: + actor.addAbility("sp_dot_0") + if actor.getLevel() >= 28: + actor.addAbility("sp_dot_1") + if actor.getLevel() >= 46: + actor.addAbility("sp_dot_2") + if actor.getLevel() >= 58: + actor.addAbility("sp_dot_3") + if actor.getLevel() >= 72: + actor.addAbility("sp_dot_4") + if actor.getLevel() >= 88: + actor.addAbility("sp_dot_5") return def removeAbilities(core, actor, player): - - actor.removeAbility('sp_dot_0') - + actor.removeAbility("sp_dot_0") + actor.removeAbility("sp_dot_1") + actor.removeAbility("sp_dot_2") + actor.removeAbility("sp_dot_3") + actor.removeAbility("sp_dot_4") + actor.removeAbility("sp_dot_5") return diff --git a/scripts/expertise/expertise_sp_increased_agility_1.py b/scripts/expertise/expertise_sp_increased_agility_1.py index e3c8d957..3b62fbf5 100644 --- a/scripts/expertise/expertise_sp_increased_agility_1.py +++ b/scripts/expertise/expertise_sp_increased_agility_1.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'spy_1a': - return - - actor.addSkill('expertise_sp_increased_agility_1') - - actor.addSkillMod('agility_modified', 25) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'spy_1a': - return - - actor.removeSkill('expertise_sp_increased_agility_1') - - actor.removeSkillMod('agility_modified', 25) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_sp_increased_agility_1") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_sp_increased_agility_1") return diff --git a/scripts/expertise/expertise_sp_increased_agility_2.py b/scripts/expertise/expertise_sp_increased_agility_2.py index b5728cc0..dea0db05 100644 --- a/scripts/expertise/expertise_sp_increased_agility_2.py +++ b/scripts/expertise/expertise_sp_increased_agility_2.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'spy_1a': - return - - actor.addSkill('expertise_sp_increased_agility_2') - - actor.addSkillMod('agility_modified', 25) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'spy_1a': - return - - actor.removeSkill('expertise_sp_increased_agility_2') - - actor.removeSkillMod('agility_modified', 25) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_sp_increased_agility_2") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_sp_increased_agility_2") return diff --git a/scripts/expertise/expertise_sp_increased_strength_1.py b/scripts/expertise/expertise_sp_increased_strength_1.py index 005cf60d..b1bec56f 100644 --- a/scripts/expertise/expertise_sp_increased_strength_1.py +++ b/scripts/expertise/expertise_sp_increased_strength_1.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'spy_1a': - return - - actor.addSkill('expertise_sp_increased_strength_1') - - actor.addSkillMod('strength_modified', 25) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'spy_1a': - return - - actor.removeSkill('expertise_sp_increased_strength_1') - - actor.removeSkillMod('strength_modified', 25) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_sp_increased_strength_1") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_sp_increased_strength_1") return diff --git a/scripts/expertise/expertise_sp_increased_strength_2.py b/scripts/expertise/expertise_sp_increased_strength_2.py index 16b7b90f..ae61711d 100644 --- a/scripts/expertise/expertise_sp_increased_strength_2.py +++ b/scripts/expertise/expertise_sp_increased_strength_2.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'spy_1a': - return - - actor.addSkill('expertise_sp_increased_strength_2') - - actor.addSkillMod('strength_modified', 25) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'spy_1a': - return - - actor.removeSkill('expertise_sp_increased_strength_2') - - actor.removeSkillMod('strength_modified', 25) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_sp_increased_strength_2") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_sp_increased_strength_2") return diff --git a/scripts/expertise/expertise_sp_initiative_1.py b/scripts/expertise/expertise_sp_initiative_1.py index edb3db3d..9032c21a 100644 --- a/scripts/expertise/expertise_sp_initiative_1.py +++ b/scripts/expertise/expertise_sp_initiative_1.py @@ -1,50 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'spy_1a': - return - - actor.addSkill('expertise_sp_initiative_1') - - actor.addSkillMod('expertise_critical_line_sp_stealth_melee', 15) - actor.addSkillMod('expertise_critical_line_sp_stealth_ranged', 15) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'spy_1a': - return - - actor.removeSkill('expertise_sp_initiative_1') - - actor.removeSkillMod('expertise_critical_line_sp_stealth_melee', 15) - actor.removeSkillMod('expertise_critical_line_sp_stealth_ranged', 15) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_sp_initiative_1") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_sp_initiative_1") return diff --git a/scripts/expertise/expertise_sp_initiative_2.py b/scripts/expertise/expertise_sp_initiative_2.py index fefb02bf..ea719348 100644 --- a/scripts/expertise/expertise_sp_initiative_2.py +++ b/scripts/expertise/expertise_sp_initiative_2.py @@ -1,50 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'spy_1a': - return - - actor.addSkill('expertise_sp_initiative_2') - - actor.addSkillMod('expertise_critical_line_sp_stealth_melee', 15) - actor.addSkillMod('expertise_critical_line_sp_stealth_ranged', 15) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'spy_1a': - return - - actor.removeSkill('expertise_sp_initiative_2') - - actor.removeSkillMod('expertise_critical_line_sp_stealth_melee', 15) - actor.removeSkillMod('expertise_critical_line_sp_stealth_ranged', 15) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_sp_initiative_2") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_sp_initiative_2") return diff --git a/scripts/expertise/expertise_sp_initiative_3.py b/scripts/expertise/expertise_sp_initiative_3.py index 56a20d27..15748ad9 100644 --- a/scripts/expertise/expertise_sp_initiative_3.py +++ b/scripts/expertise/expertise_sp_initiative_3.py @@ -1,50 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'spy_1a': - return - - actor.addSkill('expertise_sp_initiative_3') - - actor.addSkillMod('expertise_critical_line_sp_stealth_melee', 15) - actor.addSkillMod('expertise_critical_line_sp_stealth_ranged', 15) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'spy_1a': - return - - actor.removeSkill('expertise_sp_initiative_3') - - actor.removeSkillMod('expertise_critical_line_sp_stealth_melee', 15) - actor.removeSkillMod('expertise_critical_line_sp_stealth_ranged', 15) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_sp_initiative_3") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_sp_initiative_3") return diff --git a/scripts/expertise/expertise_sp_initiative_4.py b/scripts/expertise/expertise_sp_initiative_4.py index a3847b2a..d013c718 100644 --- a/scripts/expertise/expertise_sp_initiative_4.py +++ b/scripts/expertise/expertise_sp_initiative_4.py @@ -1,50 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'spy_1a': - return - - actor.addSkill('expertise_sp_initiative_4') - - actor.addSkillMod('expertise_critical_line_sp_stealth_melee', 15) - actor.addSkillMod('expertise_critical_line_sp_stealth_ranged', 15) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'spy_1a': - return - - actor.removeSkill('expertise_sp_initiative_4') - - actor.removeSkillMod('expertise_critical_line_sp_stealth_melee', 15) - actor.removeSkillMod('expertise_critical_line_sp_stealth_ranged', 15) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_sp_initiative_4") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_sp_initiative_4") return diff --git a/scripts/expertise/expertise_sp_jagged_edge_1.py b/scripts/expertise/expertise_sp_jagged_edge_1.py index 3b094630..2043cb12 100644 --- a/scripts/expertise/expertise_sp_jagged_edge_1.py +++ b/scripts/expertise/expertise_sp_jagged_edge_1.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'spy_1a': - return - - actor.addSkill('expertise_sp_jagged_edge_1') - - actor.addSkillMod('expertise_critical_damage_increase', 5) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'spy_1a': - return - - actor.removeSkill('expertise_sp_jagged_edge_1') - - actor.removeSkillMod('expertise_critical_damage_increase', 5) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_sp_jagged_edge_1") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_sp_jagged_edge_1") return diff --git a/scripts/expertise/expertise_sp_jagged_edge_2.py b/scripts/expertise/expertise_sp_jagged_edge_2.py index b63c3a03..4360a1af 100644 --- a/scripts/expertise/expertise_sp_jagged_edge_2.py +++ b/scripts/expertise/expertise_sp_jagged_edge_2.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'spy_1a': - return - - actor.addSkill('expertise_sp_jagged_edge_2') - - actor.addSkillMod('expertise_critical_damage_increase', 5) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'spy_1a': - return - - actor.removeSkill('expertise_sp_jagged_edge_2') - - actor.removeSkillMod('expertise_critical_damage_increase', 5) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_sp_jagged_edge_2") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_sp_jagged_edge_2") return diff --git a/scripts/expertise/expertise_sp_jagged_edge_3.py b/scripts/expertise/expertise_sp_jagged_edge_3.py index 467a8ecb..e2d8f310 100644 --- a/scripts/expertise/expertise_sp_jagged_edge_3.py +++ b/scripts/expertise/expertise_sp_jagged_edge_3.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'spy_1a': - return - - actor.addSkill('expertise_sp_jagged_edge_3') - - actor.addSkillMod('expertise_critical_damage_increase', 5) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'spy_1a': - return - - actor.removeSkill('expertise_sp_jagged_edge_3') - - actor.removeSkillMod('expertise_critical_damage_increase', 5) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_sp_jagged_edge_3") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_sp_jagged_edge_3") return diff --git a/scripts/expertise/expertise_sp_noxious_traps_1.py b/scripts/expertise/expertise_sp_noxious_traps_1.py index 6bdcfe7d..8bf68635 100644 --- a/scripts/expertise/expertise_sp_noxious_traps_1.py +++ b/scripts/expertise/expertise_sp_noxious_traps_1.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'spy_1a': - return - - actor.addSkill('expertise_sp_noxious_traps_1') - - actor.addSkillMod('expertise_damage_line_fldmot', 15) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'spy_1a': - return - - actor.removeSkill('expertise_sp_noxious_traps_1') - - actor.removeSkillMod('expertise_damage_line_fldmot', 15) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_sp_noxious_traps_1") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_sp_noxious_traps_1") return diff --git a/scripts/expertise/expertise_sp_noxious_traps_2.py b/scripts/expertise/expertise_sp_noxious_traps_2.py index 27dbf617..3d684ce2 100644 --- a/scripts/expertise/expertise_sp_noxious_traps_2.py +++ b/scripts/expertise/expertise_sp_noxious_traps_2.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'spy_1a': - return - - actor.addSkill('expertise_sp_noxious_traps_2') - - actor.addSkillMod('expertise_damage_line_fldmot', 15) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'spy_1a': - return - - actor.removeSkill('expertise_sp_noxious_traps_2') - - actor.removeSkillMod('expertise_damage_line_fldmot', 15) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_sp_noxious_traps_2") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_sp_noxious_traps_2") return diff --git a/scripts/expertise/expertise_sp_opportunity_1.py b/scripts/expertise/expertise_sp_opportunity_1.py index a775b549..ce63f8f1 100644 --- a/scripts/expertise/expertise_sp_opportunity_1.py +++ b/scripts/expertise/expertise_sp_opportunity_1.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'spy_1a': - return - - actor.addSkill('expertise_sp_opportunity_1') - - actor.addSkillMod('expertise_critical_niche_all', 2) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'spy_1a': - return - - actor.removeSkill('expertise_sp_opportunity_1') - - actor.removeSkillMod('expertise_critical_niche_all', 2) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_sp_opportunity_1") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_sp_opportunity_1") return diff --git a/scripts/expertise/expertise_sp_opportunity_2.py b/scripts/expertise/expertise_sp_opportunity_2.py index d8a596ae..92941b78 100644 --- a/scripts/expertise/expertise_sp_opportunity_2.py +++ b/scripts/expertise/expertise_sp_opportunity_2.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'spy_1a': - return - - actor.addSkill('expertise_sp_opportunity_2') - - actor.addSkillMod('expertise_critical_niche_all', 2) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'spy_1a': - return - - actor.removeSkill('expertise_sp_opportunity_2') - - actor.removeSkillMod('expertise_critical_niche_all', 2) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_sp_opportunity_2") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_sp_opportunity_2") return diff --git a/scripts/expertise/expertise_sp_opportunity_3.py b/scripts/expertise/expertise_sp_opportunity_3.py index 92872b63..f69db076 100644 --- a/scripts/expertise/expertise_sp_opportunity_3.py +++ b/scripts/expertise/expertise_sp_opportunity_3.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'spy_1a': - return - - actor.addSkill('expertise_sp_opportunity_3') - - actor.addSkillMod('expertise_critical_niche_all', 2) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'spy_1a': - return - - actor.removeSkill('expertise_sp_opportunity_3') - - actor.removeSkillMod('expertise_critical_niche_all', 2) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_sp_opportunity_3") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_sp_opportunity_3") return diff --git a/scripts/expertise/expertise_sp_opportunity_4.py b/scripts/expertise/expertise_sp_opportunity_4.py index 021557d0..5c11573c 100644 --- a/scripts/expertise/expertise_sp_opportunity_4.py +++ b/scripts/expertise/expertise_sp_opportunity_4.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'spy_1a': - return - - actor.addSkill('expertise_sp_opportunity_4') - - actor.addSkillMod('expertise_critical_niche_all', 2) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'spy_1a': - return - - actor.removeSkill('expertise_sp_opportunity_4') - - actor.removeSkillMod('expertise_critical_niche_all', 2) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_sp_opportunity_4") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_sp_opportunity_4") return diff --git a/scripts/expertise/expertise_sp_precision_1.py b/scripts/expertise/expertise_sp_precision_1.py index 0838078e..fc82b38c 100644 --- a/scripts/expertise/expertise_sp_precision_1.py +++ b/scripts/expertise/expertise_sp_precision_1.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'spy_1a': - return - - actor.addSkill('expertise_sp_precision_1') - - actor.addSkillMod('precision_modified', 25) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'spy_1a': - return - - actor.removeSkill('expertise_sp_precision_1') - - actor.removeSkillMod('precision_modified', 25) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_sp_precision_1") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_sp_precision_1") return diff --git a/scripts/expertise/expertise_sp_precision_2.py b/scripts/expertise/expertise_sp_precision_2.py index 646d2555..7dbf6345 100644 --- a/scripts/expertise/expertise_sp_precision_2.py +++ b/scripts/expertise/expertise_sp_precision_2.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'spy_1a': - return - - actor.addSkill('expertise_sp_precision_2') - - actor.addSkillMod('precision_modified', 25) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'spy_1a': - return - - actor.removeSkill('expertise_sp_precision_2') - - actor.removeSkillMod('precision_modified', 25) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_sp_precision_2") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_sp_precision_2") return diff --git a/scripts/expertise/expertise_sp_preparation_1.py b/scripts/expertise/expertise_sp_preparation_1.py index f9642ef1..4a81cc8f 100644 --- a/scripts/expertise/expertise_sp_preparation_1.py +++ b/scripts/expertise/expertise_sp_preparation_1.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'spy_1a': - return - - actor.addSkill('expertise_sp_preparation_1') - - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'spy_1a': - return - - actor.removeSkill('expertise_sp_preparation_1') - - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - actor.addAbility('sp_preparation') - + actor.addAbility("sp_preparation") return def removeAbilities(core, actor, player): - - actor.removeAbility('sp_preparation') - + actor.removeAbility("sp_preparation") return diff --git a/scripts/expertise/expertise_sp_protective_armor_1.py b/scripts/expertise/expertise_sp_protective_armor_1.py index cc1f4fce..e4b17d21 100644 --- a/scripts/expertise/expertise_sp_protective_armor_1.py +++ b/scripts/expertise/expertise_sp_protective_armor_1.py @@ -1,50 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'spy_1a': - return - - actor.addSkill('expertise_sp_protective_armor_1') - - actor.addSkillMod('expertise_innate_protection_kinetic', 300) - actor.addSkillMod('expertise_innate_protection_energy', 300) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'spy_1a': - return - - actor.removeSkill('expertise_sp_protective_armor_1') - - actor.removeSkillMod('expertise_innate_protection_kinetic', 300) - actor.removeSkillMod('expertise_innate_protection_energy', 300) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_sp_protective_armor_1") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_sp_protective_armor_1") return diff --git a/scripts/expertise/expertise_sp_protective_armor_2.py b/scripts/expertise/expertise_sp_protective_armor_2.py index d28b98fa..1e9e1495 100644 --- a/scripts/expertise/expertise_sp_protective_armor_2.py +++ b/scripts/expertise/expertise_sp_protective_armor_2.py @@ -1,50 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'spy_1a': - return - - actor.addSkill('expertise_sp_protective_armor_2') - - actor.addSkillMod('expertise_innate_protection_kinetic', 300) - actor.addSkillMod('expertise_innate_protection_energy', 300) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'spy_1a': - return - - actor.removeSkill('expertise_sp_protective_armor_2') - - actor.removeSkillMod('expertise_innate_protection_kinetic', 300) - actor.removeSkillMod('expertise_innate_protection_energy', 300) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_sp_protective_armor_2") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_sp_protective_armor_2") return diff --git a/scripts/expertise/expertise_sp_protective_armor_3.py b/scripts/expertise/expertise_sp_protective_armor_3.py index 362cf151..daaaae35 100644 --- a/scripts/expertise/expertise_sp_protective_armor_3.py +++ b/scripts/expertise/expertise_sp_protective_armor_3.py @@ -1,50 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'spy_1a': - return - - actor.addSkill('expertise_sp_protective_armor_3') - - actor.addSkillMod('expertise_innate_protection_kinetic', 300) - actor.addSkillMod('expertise_innate_protection_energy', 300) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'spy_1a': - return - - actor.removeSkill('expertise_sp_protective_armor_3') - - actor.removeSkillMod('expertise_innate_protection_kinetic', 300) - actor.removeSkillMod('expertise_innate_protection_energy', 300) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_sp_protective_armor_3") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_sp_protective_armor_3") return diff --git a/scripts/expertise/expertise_sp_protective_armor_4.py b/scripts/expertise/expertise_sp_protective_armor_4.py index 217d1cf2..14b113f9 100644 --- a/scripts/expertise/expertise_sp_protective_armor_4.py +++ b/scripts/expertise/expertise_sp_protective_armor_4.py @@ -1,50 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'spy_1a': - return - - actor.addSkill('expertise_sp_protective_armor_4') - - actor.addSkillMod('expertise_innate_protection_kinetic', 300) - actor.addSkillMod('expertise_innate_protection_energy', 300) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'spy_1a': - return - - actor.removeSkill('expertise_sp_protective_armor_4') - - actor.removeSkillMod('expertise_innate_protection_kinetic', 300) - actor.removeSkillMod('expertise_innate_protection_energy', 300) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_sp_protective_armor_4") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_sp_protective_armor_4") return diff --git a/scripts/expertise/expertise_sp_puncturing_strikes_1.py b/scripts/expertise/expertise_sp_puncturing_strikes_1.py index b6a49540..07849a4d 100644 --- a/scripts/expertise/expertise_sp_puncturing_strikes_1.py +++ b/scripts/expertise/expertise_sp_puncturing_strikes_1.py @@ -1,52 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'spy_1a': - return - - actor.addSkill('expertise_sp_puncturing_strikes_1') - - actor.addSkillMod('expertise_damage_line_sp_stealth_melee', 10) - actor.addSkillMod('expertise_damage_line_sp_hd_melee', 10) - actor.addSkillMod('expertise_damage_line_sp_stealth_ranged', 10) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'spy_1a': - return - - actor.removeSkill('expertise_sp_puncturing_strikes_1') - - actor.removeSkillMod('expertise_damage_line_sp_stealth_melee', 10) - actor.removeSkillMod('expertise_damage_line_sp_hd_melee', 10) - actor.removeSkillMod('expertise_damage_line_sp_stealth_ranged', 10) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_sp_puncturing_strikes_1") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_sp_puncturing_strikes_1") return diff --git a/scripts/expertise/expertise_sp_puncturing_strikes_2.py b/scripts/expertise/expertise_sp_puncturing_strikes_2.py index 9b72c541..d1526657 100644 --- a/scripts/expertise/expertise_sp_puncturing_strikes_2.py +++ b/scripts/expertise/expertise_sp_puncturing_strikes_2.py @@ -1,52 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'spy_1a': - return - - actor.addSkill('expertise_sp_puncturing_strikes_2') - - actor.addSkillMod('expertise_damage_line_sp_stealth_melee', 10) - actor.addSkillMod('expertise_damage_line_sp_hd_melee', 10) - actor.addSkillMod('expertise_damage_line_sp_stealth_ranged', 10) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'spy_1a': - return - - actor.removeSkill('expertise_sp_puncturing_strikes_2') - - actor.removeSkillMod('expertise_damage_line_sp_stealth_melee', 10) - actor.removeSkillMod('expertise_damage_line_sp_hd_melee', 10) - actor.removeSkillMod('expertise_damage_line_sp_stealth_ranged', 10) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_sp_puncturing_strikes_2") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_sp_puncturing_strikes_2") return diff --git a/scripts/expertise/expertise_sp_puncturing_strikes_3.py b/scripts/expertise/expertise_sp_puncturing_strikes_3.py index f744abd6..20173336 100644 --- a/scripts/expertise/expertise_sp_puncturing_strikes_3.py +++ b/scripts/expertise/expertise_sp_puncturing_strikes_3.py @@ -1,52 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'spy_1a': - return - - actor.addSkill('expertise_sp_puncturing_strikes_3') - - actor.addSkillMod('expertise_damage_line_sp_stealth_melee', 10) - actor.addSkillMod('expertise_damage_line_sp_hd_melee', 10) - actor.addSkillMod('expertise_damage_line_sp_stealth_ranged', 10) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'spy_1a': - return - - actor.removeSkill('expertise_sp_puncturing_strikes_3') - - actor.removeSkillMod('expertise_damage_line_sp_stealth_melee', 10) - actor.removeSkillMod('expertise_damage_line_sp_hd_melee', 10) - actor.removeSkillMod('expertise_damage_line_sp_stealth_ranged', 10) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_sp_puncturing_strikes_3") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_sp_puncturing_strikes_3") return diff --git a/scripts/expertise/expertise_sp_puncturing_strikes_4.py b/scripts/expertise/expertise_sp_puncturing_strikes_4.py index 4ff64223..858d86c0 100644 --- a/scripts/expertise/expertise_sp_puncturing_strikes_4.py +++ b/scripts/expertise/expertise_sp_puncturing_strikes_4.py @@ -1,52 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'spy_1a': - return - - actor.addSkill('expertise_sp_puncturing_strikes_4') - - actor.addSkillMod('expertise_damage_line_sp_stealth_melee', 10) - actor.addSkillMod('expertise_damage_line_sp_hd_melee', 10) - actor.addSkillMod('expertise_damage_line_sp_stealth_ranged', 10) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'spy_1a': - return - - actor.removeSkill('expertise_sp_puncturing_strikes_4') - - actor.removeSkillMod('expertise_damage_line_sp_stealth_melee', 10) - actor.removeSkillMod('expertise_damage_line_sp_hd_melee', 10) - actor.removeSkillMod('expertise_damage_line_sp_stealth_ranged', 10) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_sp_puncturing_strikes_4") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_sp_puncturing_strikes_4") return diff --git a/scripts/expertise/expertise_sp_quiet_steps_1.py b/scripts/expertise/expertise_sp_quiet_steps_1.py index bf0844a0..a9ffb99e 100644 --- a/scripts/expertise/expertise_sp_quiet_steps_1.py +++ b/scripts/expertise/expertise_sp_quiet_steps_1.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'spy_1a': - return - - actor.addSkill('expertise_sp_quiet_steps_1') - - actor.addSkillMod('expertise_avoidance_overpower', 2) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'spy_1a': - return - - actor.removeSkill('expertise_sp_quiet_steps_1') - - actor.removeSkillMod('expertise_avoidance_overpower', 2) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_sp_quiet_steps_1") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_sp_quiet_steps_1") return diff --git a/scripts/expertise/expertise_sp_quiet_steps_2.py b/scripts/expertise/expertise_sp_quiet_steps_2.py index e9cee417..9dc38491 100644 --- a/scripts/expertise/expertise_sp_quiet_steps_2.py +++ b/scripts/expertise/expertise_sp_quiet_steps_2.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'spy_1a': - return - - actor.addSkill('expertise_sp_quiet_steps_2') - - actor.addSkillMod('expertise_avoidance_overpower', 3) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'spy_1a': - return - - actor.removeSkill('expertise_sp_quiet_steps_2') - - actor.removeSkillMod('expertise_avoidance_overpower', 3) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_sp_quiet_steps_2") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_sp_quiet_steps_2") return diff --git a/scripts/expertise/expertise_sp_rapid_concealment_1.py b/scripts/expertise/expertise_sp_rapid_concealment_1.py index a2e0ad1a..a9c2efb4 100644 --- a/scripts/expertise/expertise_sp_rapid_concealment_1.py +++ b/scripts/expertise/expertise_sp_rapid_concealment_1.py @@ -1,50 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'spy_1a': - return - - actor.addSkill('expertise_sp_rapid_concealment_1') - - actor.addSkillMod('expertise_cooldown_line_sp_smoke', 30) - actor.addSkillMod('expertise_cooldown_line_sp_burst_shadows', 30) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'spy_1a': - return - - actor.removeSkill('expertise_sp_rapid_concealment_1') - - actor.removeSkillMod('expertise_cooldown_line_sp_smoke', 30) - actor.removeSkillMod('expertise_cooldown_line_sp_burst_shadows', 30) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_sp_rapid_concealment_1") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_sp_rapid_concealment_1") return diff --git a/scripts/expertise/expertise_sp_rapid_concealment_2.py b/scripts/expertise/expertise_sp_rapid_concealment_2.py index 7ab413ab..5397db2e 100644 --- a/scripts/expertise/expertise_sp_rapid_concealment_2.py +++ b/scripts/expertise/expertise_sp_rapid_concealment_2.py @@ -1,50 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'spy_1a': - return - - actor.addSkill('expertise_sp_rapid_concealment_2') - - actor.addSkillMod('expertise_cooldown_line_sp_smoke', 30) - actor.addSkillMod('expertise_cooldown_line_sp_burst_shadows', 30) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'spy_1a': - return - - actor.removeSkill('expertise_sp_rapid_concealment_2') - - actor.removeSkillMod('expertise_cooldown_line_sp_smoke', 30) - actor.removeSkillMod('expertise_cooldown_line_sp_burst_shadows', 30) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_sp_rapid_concealment_2") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_sp_rapid_concealment_2") return diff --git a/scripts/expertise/expertise_sp_rapid_concealment_3.py b/scripts/expertise/expertise_sp_rapid_concealment_3.py index d8cc0332..ce36df91 100644 --- a/scripts/expertise/expertise_sp_rapid_concealment_3.py +++ b/scripts/expertise/expertise_sp_rapid_concealment_3.py @@ -1,50 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'spy_1a': - return - - actor.addSkill('expertise_sp_rapid_concealment_3') - - actor.addSkillMod('expertise_cooldown_line_sp_smoke', 30) - actor.addSkillMod('expertise_cooldown_line_sp_burst_shadows', 30) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'spy_1a': - return - - actor.removeSkill('expertise_sp_rapid_concealment_3') - - actor.removeSkillMod('expertise_cooldown_line_sp_smoke', 30) - actor.removeSkillMod('expertise_cooldown_line_sp_burst_shadows', 30) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_sp_rapid_concealment_3") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_sp_rapid_concealment_3") return diff --git a/scripts/expertise/expertise_sp_rapid_concealment_4.py b/scripts/expertise/expertise_sp_rapid_concealment_4.py index 179d007a..1b0d16bc 100644 --- a/scripts/expertise/expertise_sp_rapid_concealment_4.py +++ b/scripts/expertise/expertise_sp_rapid_concealment_4.py @@ -1,50 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'spy_1a': - return - - actor.addSkill('expertise_sp_rapid_concealment_4') - - actor.addSkillMod('expertise_cooldown_line_sp_smoke', 30) - actor.addSkillMod('expertise_cooldown_line_sp_burst_shadows', 30) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'spy_1a': - return - - actor.removeSkill('expertise_sp_rapid_concealment_4') - - actor.removeSkillMod('expertise_cooldown_line_sp_smoke', 30) - actor.removeSkillMod('expertise_cooldown_line_sp_burst_shadows', 30) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_sp_rapid_concealment_4") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_sp_rapid_concealment_4") return diff --git a/scripts/expertise/expertise_sp_resonance.py b/scripts/expertise/expertise_sp_resonance.py index 1f0fd64c..815f559a 100644 --- a/scripts/expertise/expertise_sp_resonance.py +++ b/scripts/expertise/expertise_sp_resonance.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'spy_1a': - return - - actor.addSkill('expertise_sp_resonance') - - actor.addSkillMod('expertise_onstrikethrough_proc_sp_resonance', 1) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'spy_1a': - return - - actor.removeSkill('expertise_sp_resonance') - - actor.removeSkillMod('expertise_onstrikethrough_proc_sp_resonance', 1) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_sp_resonance") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_sp_resonance") return diff --git a/scripts/expertise/expertise_sp_reveal_shadows_1.py b/scripts/expertise/expertise_sp_reveal_shadows_1.py index 12bd2510..94e45084 100644 --- a/scripts/expertise/expertise_sp_reveal_shadows_1.py +++ b/scripts/expertise/expertise_sp_reveal_shadows_1.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'spy_1a': - return - - actor.addSkill('expertise_sp_reveal_shadows_1') - - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'spy_1a': - return - - actor.removeSkill('expertise_sp_reveal_shadows_1') - - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - actor.addAbility('sp_reveal_shadows') - + actor.addAbility("sp_reveal_shadows") return def removeAbilities(core, actor, player): - - actor.removeAbility('sp_reveal_shadows') - + actor.removeAbility("sp_reveal_shadows") return diff --git a/scripts/expertise/expertise_sp_run_its_course_1.py b/scripts/expertise/expertise_sp_run_its_course_1.py index 15365503..5534253b 100644 --- a/scripts/expertise/expertise_sp_run_its_course_1.py +++ b/scripts/expertise/expertise_sp_run_its_course_1.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'spy_1a': - return - - actor.addSkill('expertise_sp_run_its_course_1') - - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'spy_1a': - return - - actor.removeSkill('expertise_sp_run_its_course_1') - - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - actor.addAbility('sp_run_its_course') - + actor.addAbility("sp_run_its_course") return def removeAbilities(core, actor, player): - - actor.removeAbility('sp_run_its_course') - + actor.removeAbility("sp_run_its_course") return diff --git a/scripts/expertise/expertise_sp_savagery.py b/scripts/expertise/expertise_sp_savagery.py index fce6867c..b8522cc2 100644 --- a/scripts/expertise/expertise_sp_savagery.py +++ b/scripts/expertise/expertise_sp_savagery.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'spy_1a': - return - - actor.addSkill('expertise_sp_savagery') - - actor.addSkillMod('expertise_oncrit_proc_sp_savagery', 1) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'spy_1a': - return - - actor.removeSkill('expertise_sp_savagery') - - actor.removeSkillMod('expertise_oncrit_proc_sp_savagery', 1) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_sp_savagery") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_sp_savagery") return diff --git a/scripts/expertise/expertise_sp_shadows_embrace_1.py b/scripts/expertise/expertise_sp_shadows_embrace_1.py index 8acb23d6..b0e83dee 100644 --- a/scripts/expertise/expertise_sp_shadows_embrace_1.py +++ b/scripts/expertise/expertise_sp_shadows_embrace_1.py @@ -1,50 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'spy_1a': - return - - actor.addSkill('expertise_sp_shadows_embrace_1') - - actor.addSkillMod('expertise_buff_duration_line_sp_burst_shadows', 2) - actor.addSkillMod('expertise_cooldown_line_sp_burst_shadows', 30) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'spy_1a': - return - - actor.removeSkill('expertise_sp_shadows_embrace_1') - - actor.removeSkillMod('expertise_buff_duration_line_sp_burst_shadows', 2) - actor.removeSkillMod('expertise_cooldown_line_sp_burst_shadows', 30) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_sp_shadows_embrace_1") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_sp_shadows_embrace_1") return diff --git a/scripts/expertise/expertise_sp_shadows_embrace_2.py b/scripts/expertise/expertise_sp_shadows_embrace_2.py index 7f894561..ccd8c71e 100644 --- a/scripts/expertise/expertise_sp_shadows_embrace_2.py +++ b/scripts/expertise/expertise_sp_shadows_embrace_2.py @@ -1,50 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'spy_1a': - return - - actor.addSkill('expertise_sp_shadows_embrace_2') - - actor.addSkillMod('expertise_buff_duration_line_sp_burst_shadows', 2) - actor.addSkillMod('expertise_cooldown_line_sp_burst_shadows', 30) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'spy_1a': - return - - actor.removeSkill('expertise_sp_shadows_embrace_2') - - actor.removeSkillMod('expertise_buff_duration_line_sp_burst_shadows', 2) - actor.removeSkillMod('expertise_cooldown_line_sp_burst_shadows', 30) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_sp_shadows_embrace_2") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_sp_shadows_embrace_2") return diff --git a/scripts/expertise/expertise_sp_shadows_embrace_3.py b/scripts/expertise/expertise_sp_shadows_embrace_3.py index ab5023c0..ac459d05 100644 --- a/scripts/expertise/expertise_sp_shadows_embrace_3.py +++ b/scripts/expertise/expertise_sp_shadows_embrace_3.py @@ -1,50 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'spy_1a': - return - - actor.addSkill('expertise_sp_shadows_embrace_3') - - actor.addSkillMod('expertise_buff_duration_line_sp_burst_shadows', 2) - actor.addSkillMod('expertise_cooldown_line_sp_burst_shadows', 30) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'spy_1a': - return - - actor.removeSkill('expertise_sp_shadows_embrace_3') - - actor.removeSkillMod('expertise_buff_duration_line_sp_burst_shadows', 2) - actor.removeSkillMod('expertise_cooldown_line_sp_burst_shadows', 30) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_sp_shadows_embrace_3") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_sp_shadows_embrace_3") return diff --git a/scripts/expertise/expertise_sp_shadows_embrace_4.py b/scripts/expertise/expertise_sp_shadows_embrace_4.py index a98522ee..ef6195ea 100644 --- a/scripts/expertise/expertise_sp_shadows_embrace_4.py +++ b/scripts/expertise/expertise_sp_shadows_embrace_4.py @@ -1,50 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'spy_1a': - return - - actor.addSkill('expertise_sp_shadows_embrace_4') - - actor.addSkillMod('expertise_buff_duration_line_sp_burst_shadows', 2) - actor.addSkillMod('expertise_cooldown_line_sp_burst_shadows', 30) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'spy_1a': - return - - actor.removeSkill('expertise_sp_shadows_embrace_4') - - actor.removeSkillMod('expertise_buff_duration_line_sp_burst_shadows', 2) - actor.removeSkillMod('expertise_cooldown_line_sp_burst_shadows', 30) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_sp_shadows_embrace_4") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_sp_shadows_embrace_4") return diff --git a/scripts/expertise/expertise_sp_shifty_setup_1.py b/scripts/expertise/expertise_sp_shifty_setup_1.py index 90865851..76bf26d8 100644 --- a/scripts/expertise/expertise_sp_shifty_setup_1.py +++ b/scripts/expertise/expertise_sp_shifty_setup_1.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'spy_1a': - return - - actor.addSkill('expertise_sp_shifty_setup_1') - - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'spy_1a': - return - - actor.removeSkill('expertise_sp_shifty_setup_1') - - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - actor.addAbility('sp_shifty_setup') - + actor.addAbility("sp_shifty_setup") return def removeAbilities(core, actor, player): - - actor.removeAbility('sp_shifty_setup') - + actor.removeAbility("sp_shifty_setup") return diff --git a/scripts/expertise/expertise_sp_smoke_mirrors.py b/scripts/expertise/expertise_sp_smoke_mirrors.py index 5e88dd3e..4b720c0a 100644 --- a/scripts/expertise/expertise_sp_smoke_mirrors.py +++ b/scripts/expertise/expertise_sp_smoke_mirrors.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'spy_1a': - return - - actor.addSkill('expertise_sp_smoke_mirrors') - - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'spy_1a': - return - - actor.removeSkill('expertise_sp_smoke_mirrors') - - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - actor.addAbility('sp_smoke_mirrors') - + actor.addAbility("sp_smoke_mirrors") return def removeAbilities(core, actor, player): - - actor.removeAbility('sp_smoke_mirrors') - + actor.removeAbility("sp_smoke_mirrors") return diff --git a/scripts/expertise/expertise_sp_smoke_screen_1.py b/scripts/expertise/expertise_sp_smoke_screen_1.py index 1deb5789..b3e851b3 100644 --- a/scripts/expertise/expertise_sp_smoke_screen_1.py +++ b/scripts/expertise/expertise_sp_smoke_screen_1.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'spy_1a': - return - - actor.addSkill('expertise_sp_smoke_screen_1') - - actor.addSkillMod('expertise_movement_buff_invis_sp_buff_invis_1', -10) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'spy_1a': - return - - actor.removeSkill('expertise_sp_smoke_screen_1') - - actor.removeSkillMod('expertise_movement_buff_invis_sp_buff_invis_1', -10) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_sp_smoke_screen_1") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_sp_smoke_screen_1") return diff --git a/scripts/expertise/expertise_sp_smoke_screen_2.py b/scripts/expertise/expertise_sp_smoke_screen_2.py index e091741b..2873cd10 100644 --- a/scripts/expertise/expertise_sp_smoke_screen_2.py +++ b/scripts/expertise/expertise_sp_smoke_screen_2.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'spy_1a': - return - - actor.addSkill('expertise_sp_smoke_screen_2') - - actor.addSkillMod('expertise_movement_buff_invis_sp_buff_invis_1', -10) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'spy_1a': - return - - actor.removeSkill('expertise_sp_smoke_screen_2') - - actor.removeSkillMod('expertise_movement_buff_invis_sp_buff_invis_1', -10) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_sp_smoke_screen_2") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_sp_smoke_screen_2") return diff --git a/scripts/expertise/expertise_sp_smoke_screen_3.py b/scripts/expertise/expertise_sp_smoke_screen_3.py index c8ba6991..57be23e9 100644 --- a/scripts/expertise/expertise_sp_smoke_screen_3.py +++ b/scripts/expertise/expertise_sp_smoke_screen_3.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'spy_1a': - return - - actor.addSkill('expertise_sp_smoke_screen_3') - - actor.addSkillMod('expertise_movement_buff_invis_sp_buff_invis_1', -10) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'spy_1a': - return - - actor.removeSkill('expertise_sp_smoke_screen_3') - - actor.removeSkillMod('expertise_movement_buff_invis_sp_buff_invis_1', -10) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_sp_smoke_screen_3") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_sp_smoke_screen_3") return diff --git a/scripts/expertise/expertise_sp_smoke_screen_4.py b/scripts/expertise/expertise_sp_smoke_screen_4.py index f4f00aa4..0ec9ab54 100644 --- a/scripts/expertise/expertise_sp_smoke_screen_4.py +++ b/scripts/expertise/expertise_sp_smoke_screen_4.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'spy_1a': - return - - actor.addSkill('expertise_sp_smoke_screen_4') - - actor.addSkillMod('expertise_movement_buff_invis_sp_buff_invis_1', -10) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'spy_1a': - return - - actor.removeSkill('expertise_sp_smoke_screen_4') - - actor.removeSkillMod('expertise_movement_buff_invis_sp_buff_invis_1', -10) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_sp_smoke_screen_4") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_sp_smoke_screen_4") return diff --git a/scripts/expertise/expertise_sp_steup_1.py b/scripts/expertise/expertise_sp_steup_1.py index b039c564..80eed675 100644 --- a/scripts/expertise/expertise_sp_steup_1.py +++ b/scripts/expertise/expertise_sp_steup_1.py @@ -1,50 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'spy_1a': - return - - actor.addSkill('expertise_sp_steup_1') - - actor.addSkillMod('expertise_action_line_sp_stealth_melee', 5) - actor.addSkillMod('expertise_action_line_sp_stealth_ranged', 5) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'spy_1a': - return - - actor.removeSkill('expertise_sp_steup_1') - - actor.removeSkillMod('expertise_action_line_sp_stealth_melee', 5) - actor.removeSkillMod('expertise_action_line_sp_stealth_ranged', 5) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_sp_steup_1") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_sp_steup_1") return diff --git a/scripts/expertise/expertise_sp_steup_2.py b/scripts/expertise/expertise_sp_steup_2.py index 9450fa6a..3a6b451b 100644 --- a/scripts/expertise/expertise_sp_steup_2.py +++ b/scripts/expertise/expertise_sp_steup_2.py @@ -1,50 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'spy_1a': - return - - actor.addSkill('expertise_sp_steup_2') - - actor.addSkillMod('expertise_action_line_sp_stealth_melee', 5) - actor.addSkillMod('expertise_action_line_sp_stealth_ranged', 5) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'spy_1a': - return - - actor.removeSkill('expertise_sp_steup_2') - - actor.removeSkillMod('expertise_action_line_sp_stealth_melee', 5) - actor.removeSkillMod('expertise_action_line_sp_stealth_ranged', 5) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_sp_steup_2") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_sp_steup_2") return diff --git a/scripts/expertise/expertise_sp_steup_3.py b/scripts/expertise/expertise_sp_steup_3.py index d0b36017..3ab4f758 100644 --- a/scripts/expertise/expertise_sp_steup_3.py +++ b/scripts/expertise/expertise_sp_steup_3.py @@ -1,50 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'spy_1a': - return - - actor.addSkill('expertise_sp_steup_3') - - actor.addSkillMod('expertise_action_line_sp_stealth_melee', 5) - actor.addSkillMod('expertise_action_line_sp_stealth_ranged', 5) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'spy_1a': - return - - actor.removeSkill('expertise_sp_steup_3') - - actor.removeSkillMod('expertise_action_line_sp_stealth_melee', 5) - actor.removeSkillMod('expertise_action_line_sp_stealth_ranged', 5) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_sp_steup_3") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_sp_steup_3") return diff --git a/scripts/expertise/expertise_sp_steup_4.py b/scripts/expertise/expertise_sp_steup_4.py index dd9ce2f4..b2eb1e65 100644 --- a/scripts/expertise/expertise_sp_steup_4.py +++ b/scripts/expertise/expertise_sp_steup_4.py @@ -1,50 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'spy_1a': - return - - actor.addSkill('expertise_sp_steup_4') - - actor.addSkillMod('expertise_action_line_sp_stealth_melee', 5) - actor.addSkillMod('expertise_action_line_sp_stealth_ranged', 5) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'spy_1a': - return - - actor.removeSkill('expertise_sp_steup_4') - - actor.removeSkillMod('expertise_action_line_sp_stealth_melee', 5) - actor.removeSkillMod('expertise_action_line_sp_stealth_ranged', 5) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_sp_steup_4") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_sp_steup_4") return diff --git a/scripts/expertise/expertise_sp_undercover_1.py b/scripts/expertise/expertise_sp_undercover_1.py index 05754013..3c67e708 100644 --- a/scripts/expertise/expertise_sp_undercover_1.py +++ b/scripts/expertise/expertise_sp_undercover_1.py @@ -1,50 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'spy_1a': - return - - actor.addSkill('expertise_sp_undercover_1') - - actor.addSkillMod('expertise_movement_buff_invis_sp_buff_invis_1', -5) - actor.addSkillMod('expertise_movement_buff_invis_sp_buff_stealth_1', -20) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'spy_1a': - return - - actor.removeSkill('expertise_sp_undercover_1') - - actor.removeSkillMod('expertise_movement_buff_invis_sp_buff_invis_1', -5) - actor.removeSkillMod('expertise_movement_buff_invis_sp_buff_stealth_1', -20) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_sp_undercover_1") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_sp_undercover_1") return diff --git a/scripts/expertise/expertise_sp_undercover_2.py b/scripts/expertise/expertise_sp_undercover_2.py index 50edd523..b6660db2 100644 --- a/scripts/expertise/expertise_sp_undercover_2.py +++ b/scripts/expertise/expertise_sp_undercover_2.py @@ -1,50 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'spy_1a': - return - - actor.addSkill('expertise_sp_undercover_2') - - actor.addSkillMod('expertise_movement_buff_invis_sp_buff_invis_1', -5) - actor.addSkillMod('expertise_movement_buff_invis_sp_buff_stealth_1', -20) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'spy_1a': - return - - actor.removeSkill('expertise_sp_undercover_2') - - actor.removeSkillMod('expertise_movement_buff_invis_sp_buff_invis_1', -5) - actor.removeSkillMod('expertise_movement_buff_invis_sp_buff_stealth_1', -20) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_sp_undercover_2") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_sp_undercover_2") return diff --git a/scripts/expertise/expertise_sp_undercover_3.py b/scripts/expertise/expertise_sp_undercover_3.py index 23d181c5..39c4394d 100644 --- a/scripts/expertise/expertise_sp_undercover_3.py +++ b/scripts/expertise/expertise_sp_undercover_3.py @@ -1,50 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'spy_1a': - return - - actor.addSkill('expertise_sp_undercover_3') - - actor.addSkillMod('expertise_movement_buff_invis_sp_buff_invis_1', -5) - actor.addSkillMod('expertise_movement_buff_invis_sp_buff_stealth_1', -20) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'spy_1a': - return - - actor.removeSkill('expertise_sp_undercover_3') - - actor.removeSkillMod('expertise_movement_buff_invis_sp_buff_invis_1', -5) - actor.removeSkillMod('expertise_movement_buff_invis_sp_buff_stealth_1', -20) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_sp_undercover_3") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_sp_undercover_3") return diff --git a/scripts/expertise/expertise_sp_vibrogenerator_1.py b/scripts/expertise/expertise_sp_vibrogenerator_1.py index 90cb92c6..ed2f90ea 100644 --- a/scripts/expertise/expertise_sp_vibrogenerator_1.py +++ b/scripts/expertise/expertise_sp_vibrogenerator_1.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'spy_1a': - return - - actor.addSkill('expertise_sp_vibrogenerator_1') - - actor.addSkillMod('expertise_armor_neglect', 2) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'spy_1a': - return - - actor.removeSkill('expertise_sp_vibrogenerator_1') - - actor.removeSkillMod('expertise_armor_neglect', 2) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_sp_vibrogenerator_1") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_sp_vibrogenerator_1") return diff --git a/scripts/expertise/expertise_sp_vibrogenerator_2.py b/scripts/expertise/expertise_sp_vibrogenerator_2.py index 4d047dc5..84e4e570 100644 --- a/scripts/expertise/expertise_sp_vibrogenerator_2.py +++ b/scripts/expertise/expertise_sp_vibrogenerator_2.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'spy_1a': - return - - actor.addSkill('expertise_sp_vibrogenerator_2') - - actor.addSkillMod('expertise_armor_neglect', 2) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'spy_1a': - return - - actor.removeSkill('expertise_sp_vibrogenerator_2') - - actor.removeSkillMod('expertise_armor_neglect', 2) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_sp_vibrogenerator_2") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_sp_vibrogenerator_2") return diff --git a/scripts/expertise/expertise_sp_vibrogenerator_3.py b/scripts/expertise/expertise_sp_vibrogenerator_3.py index 810b8b4d..592cb4d4 100644 --- a/scripts/expertise/expertise_sp_vibrogenerator_3.py +++ b/scripts/expertise/expertise_sp_vibrogenerator_3.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'spy_1a': - return - - actor.addSkill('expertise_sp_vibrogenerator_3') - - actor.addSkillMod('expertise_armor_neglect', 2) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'spy_1a': - return - - actor.removeSkill('expertise_sp_vibrogenerator_3') - - actor.removeSkillMod('expertise_armor_neglect', 2) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_sp_vibrogenerator_3") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_sp_vibrogenerator_3") return diff --git a/scripts/expertise/expertise_sp_without_a_trace_1.py b/scripts/expertise/expertise_sp_without_a_trace_1.py index 35327fdf..ebe2f8f3 100644 --- a/scripts/expertise/expertise_sp_without_a_trace_1.py +++ b/scripts/expertise/expertise_sp_without_a_trace_1.py @@ -1,46 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'spy_1a': - return - - actor.addSkill('expertise_sp_without_a_trace_1') - - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'spy_1a': - return - - actor.removeSkill('expertise_sp_without_a_trace_1') - - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("sp_without_a_trace") return def removeAbilities(core, actor, player): - - + actor.removeAbility("sp_without_a_trace") return diff --git a/scripts/expertise/expertise_structure_architect_advanced_theory_1.py b/scripts/expertise/expertise_structure_architect_advanced_theory_1.py index 762a10ca..42e72115 100644 --- a/scripts/expertise/expertise_structure_architect_advanced_theory_1.py +++ b/scripts/expertise/expertise_structure_architect_advanced_theory_1.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'trader_struct_1a': - return - - actor.addSkill('expertise_structure_architect_advanced_theory_1') - - actor.addSkillMod('structure_experimentation', 10) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'trader_struct_1a': - return - - actor.removeSkill('expertise_structure_architect_advanced_theory_1') - - actor.removeSkillMod('structure_experimentation', 10) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_structure_architect_theory_1") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_structure_architect_theory_1") return diff --git a/scripts/expertise/expertise_structure_architect_dexterity_1.py b/scripts/expertise/expertise_structure_architect_dexterity_1.py index eaf875af..b3644dbd 100644 --- a/scripts/expertise/expertise_structure_architect_dexterity_1.py +++ b/scripts/expertise/expertise_structure_architect_dexterity_1.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'trader_struct_1a': - return - - actor.addSkill('expertise_structure_architect_dexterity_1') - - actor.addSkillMod('structure_assembly', 5) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'trader_struct_1a': - return - - actor.removeSkill('expertise_structure_architect_dexterity_1') - - actor.removeSkillMod('structure_assembly', 5) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_structure_architect_dexterity_1") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_structure_architect_dexterity_1") return diff --git a/scripts/expertise/expertise_structure_architect_dexterity_2.py b/scripts/expertise/expertise_structure_architect_dexterity_2.py index e3a98a3d..d87f7a01 100644 --- a/scripts/expertise/expertise_structure_architect_dexterity_2.py +++ b/scripts/expertise/expertise_structure_architect_dexterity_2.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'trader_struct_1a': - return - - actor.addSkill('expertise_structure_architect_dexterity_2') - - actor.addSkillMod('structure_assembly', 5) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'trader_struct_1a': - return - - actor.removeSkill('expertise_structure_architect_dexterity_2') - - actor.removeSkillMod('structure_assembly', 5) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_structure_architect_dexterity_2") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_structure_architect_dexterity_2") return diff --git a/scripts/expertise/expertise_structure_architect_dexterity_3.py b/scripts/expertise/expertise_structure_architect_dexterity_3.py index ca3b2d31..f07fb9ae 100644 --- a/scripts/expertise/expertise_structure_architect_dexterity_3.py +++ b/scripts/expertise/expertise_structure_architect_dexterity_3.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'trader_struct_1a': - return - - actor.addSkill('expertise_structure_architect_dexterity_3') - - actor.addSkillMod('structure_assembly', 5) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'trader_struct_1a': - return - - actor.removeSkill('expertise_structure_architect_dexterity_3') - - actor.removeSkillMod('structure_assembly', 5) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_structure_architect_dexterity_3") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_structure_architect_dexterity_3") return diff --git a/scripts/expertise/expertise_structure_architect_dexterity_4.py b/scripts/expertise/expertise_structure_architect_dexterity_4.py index a3d8534f..339e3773 100644 --- a/scripts/expertise/expertise_structure_architect_dexterity_4.py +++ b/scripts/expertise/expertise_structure_architect_dexterity_4.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'trader_struct_1a': - return - - actor.addSkill('expertise_structure_architect_dexterity_4') - - actor.addSkillMod('structure_assembly', 5) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'trader_struct_1a': - return - - actor.removeSkill('expertise_structure_architect_dexterity_4') - - actor.removeSkillMod('structure_assembly', 5) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_structure_architect_dexterity_4") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_structure_architect_dexterity_4") return diff --git a/scripts/expertise/expertise_structure_architect_hypothesis_1.py b/scripts/expertise/expertise_structure_architect_hypothesis_1.py index b5eafa01..7c1de09a 100644 --- a/scripts/expertise/expertise_structure_architect_hypothesis_1.py +++ b/scripts/expertise/expertise_structure_architect_hypothesis_1.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'trader_struct_1a': - return - - actor.addSkill('expertise_structure_architect_hypothesis_1') - - actor.addSkillMod('expertise_experimentation_increase_architect', 3) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'trader_struct_1a': - return - - actor.removeSkill('expertise_structure_architect_hypothesis_1') - - actor.removeSkillMod('expertise_experimentation_increase_architect', 3) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_structure_architect_hypothesis_1") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_structure_architect_hypothesis_1") return diff --git a/scripts/expertise/expertise_structure_architect_hypothesis_2.py b/scripts/expertise/expertise_structure_architect_hypothesis_2.py index ec83d7d4..e9acaf9b 100644 --- a/scripts/expertise/expertise_structure_architect_hypothesis_2.py +++ b/scripts/expertise/expertise_structure_architect_hypothesis_2.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'trader_struct_1a': - return - - actor.addSkill('expertise_structure_architect_hypothesis_2') - - actor.addSkillMod('expertise_experimentation_increase_architect', 3) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'trader_struct_1a': - return - - actor.removeSkill('expertise_structure_architect_hypothesis_2') - - actor.removeSkillMod('expertise_experimentation_increase_architect', 3) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_structure_architect_hypothesis_2") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_structure_architect_hypothesis_2") return diff --git a/scripts/expertise/expertise_structure_architect_hypothesis_3.py b/scripts/expertise/expertise_structure_architect_hypothesis_3.py index 15ddc720..b43dc039 100644 --- a/scripts/expertise/expertise_structure_architect_hypothesis_3.py +++ b/scripts/expertise/expertise_structure_architect_hypothesis_3.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'trader_struct_1a': - return - - actor.addSkill('expertise_structure_architect_hypothesis_3') - - actor.addSkillMod('expertise_experimentation_increase_architect', 3) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'trader_struct_1a': - return - - actor.removeSkill('expertise_structure_architect_hypothesis_3') - - actor.removeSkillMod('expertise_experimentation_increase_architect', 3) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_structure_architect_hypothesis_3") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_structure_architect_hypothesis_3") return diff --git a/scripts/expertise/expertise_structure_architect_hypothesis_4.py b/scripts/expertise/expertise_structure_architect_hypothesis_4.py index 00e33f1b..7a184294 100644 --- a/scripts/expertise/expertise_structure_architect_hypothesis_4.py +++ b/scripts/expertise/expertise_structure_architect_hypothesis_4.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'trader_struct_1a': - return - - actor.addSkill('expertise_structure_architect_hypothesis_4') - - actor.addSkillMod('expertise_experimentation_increase_architect', 3) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'trader_struct_1a': - return - - actor.removeSkill('expertise_structure_architect_hypothesis_4') - - actor.removeSkillMod('expertise_experimentation_increase_architect', 3) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_structure_architect_hypothesis_4") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_structure_architect_hypothesis_4") return diff --git a/scripts/expertise/expertise_structure_architect_insight_1.py b/scripts/expertise/expertise_structure_architect_insight_1.py index ff19b257..9ff69aa3 100644 --- a/scripts/expertise/expertise_structure_architect_insight_1.py +++ b/scripts/expertise/expertise_structure_architect_insight_1.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'trader_struct_1a': - return - - actor.addSkill('expertise_structure_architect_insight_1') - - actor.addSkillMod('expertise_complexity_decrease_architect', 1) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'trader_struct_1a': - return - - actor.removeSkill('expertise_structure_architect_insight_1') - - actor.removeSkillMod('expertise_complexity_decrease_architect', 1) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_structure_architect_insight_1") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_structure_architect_insight_1") return diff --git a/scripts/expertise/expertise_structure_architect_insight_2.py b/scripts/expertise/expertise_structure_architect_insight_2.py index e48c07f5..b5acc5e0 100644 --- a/scripts/expertise/expertise_structure_architect_insight_2.py +++ b/scripts/expertise/expertise_structure_architect_insight_2.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'trader_struct_1a': - return - - actor.addSkill('expertise_structure_architect_insight_2') - - actor.addSkillMod('expertise_complexity_decrease_architect', 1) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'trader_struct_1a': - return - - actor.removeSkill('expertise_structure_architect_insight_2') - - actor.removeSkillMod('expertise_complexity_decrease_architect', 1) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_structure_architect_insight_2") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_structure_architect_insight_2") return diff --git a/scripts/expertise/expertise_structure_architect_keen_understanding_1.py b/scripts/expertise/expertise_structure_architect_keen_understanding_1.py index 1ff82037..5e63c078 100644 --- a/scripts/expertise/expertise_structure_architect_keen_understanding_1.py +++ b/scripts/expertise/expertise_structure_architect_keen_understanding_1.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'trader_struct_1a': - return - - actor.addSkill('expertise_structure_architect_keen_understanding_1') - - actor.addSkillMod('expertise_complexity_decrease_architect', 2) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'trader_struct_1a': - return - - actor.removeSkill('expertise_structure_architect_keen_understanding_1') - - actor.removeSkillMod('expertise_complexity_decrease_architect', 2) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_structure_architect_keen_understanding_1") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_structure_architect_keen_understanding_1") return diff --git a/scripts/expertise/expertise_structure_architect_keen_understanding_2.py b/scripts/expertise/expertise_structure_architect_keen_understanding_2.py index 552ebd65..a35ab95e 100644 --- a/scripts/expertise/expertise_structure_architect_keen_understanding_2.py +++ b/scripts/expertise/expertise_structure_architect_keen_understanding_2.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'trader_struct_1a': - return - - actor.addSkill('expertise_structure_architect_keen_understanding_2') - - actor.addSkillMod('expertise_complexity_decrease_architect', 2) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'trader_struct_1a': - return - - actor.removeSkill('expertise_structure_architect_keen_understanding_2') - - actor.removeSkillMod('expertise_complexity_decrease_architect', 2) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_structure_architect_keen_understanding_2") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_structure_architect_keen_understanding_2") return diff --git a/scripts/expertise/expertise_structure_architect_schematic_1_1.py b/scripts/expertise/expertise_structure_architect_schematic_1_1.py index 7ef6e4eb..77d60042 100644 --- a/scripts/expertise/expertise_structure_architect_schematic_1_1.py +++ b/scripts/expertise/expertise_structure_architect_schematic_1_1.py @@ -1,46 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'trader_struct_1a': - return - - actor.addSkill('expertise_structure_architect_schematic_1_1') - - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'trader_struct_1a': - return - - actor.removeSkill('expertise_structure_architect_schematic_1_1') - - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_structure_architect_schematic_1_1") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_structure_architect_schematic_1_1") return diff --git a/scripts/expertise/expertise_structure_architect_schematic_2_1.py b/scripts/expertise/expertise_structure_architect_schematic_2_1.py index 7df673d9..9db9ab48 100644 --- a/scripts/expertise/expertise_structure_architect_schematic_2_1.py +++ b/scripts/expertise/expertise_structure_architect_schematic_2_1.py @@ -1,46 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'trader_struct_1a': - return - - actor.addSkill('expertise_structure_architect_schematic_2_1') - - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'trader_struct_1a': - return - - actor.removeSkill('expertise_structure_architect_schematic_2_1') - - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_structure_architect_schematic_2_1") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_structure_architect_schematic_2_1") return diff --git a/scripts/expertise/expertise_structure_artisan_advanced_theory_1.py b/scripts/expertise/expertise_structure_artisan_advanced_theory_1.py index f2498949..59364e96 100644 --- a/scripts/expertise/expertise_structure_artisan_advanced_theory_1.py +++ b/scripts/expertise/expertise_structure_artisan_advanced_theory_1.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'trader_struct_1a': - return - - actor.addSkill('expertise_structure_artisan_advanced_theory_1') - - actor.addSkillMod('general_experimentation', 10) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'trader_struct_1a': - return - - actor.removeSkill('expertise_structure_artisan_advanced_theory_1') - - actor.removeSkillMod('general_experimentation', 10) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_structure_artisan_advanced_theory_1") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_structure_artisan_advanced_theory_1") return diff --git a/scripts/expertise/expertise_structure_artisan_dexterity_1.py b/scripts/expertise/expertise_structure_artisan_dexterity_1.py index 5dd3479f..6b4364cf 100644 --- a/scripts/expertise/expertise_structure_artisan_dexterity_1.py +++ b/scripts/expertise/expertise_structure_artisan_dexterity_1.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'trader_struct_1a': - return - - actor.addSkill('expertise_structure_artisan_dexterity_1') - - actor.addSkillMod('general_assembly', 5) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'trader_struct_1a': - return - - actor.removeSkill('expertise_structure_artisan_dexterity_1') - - actor.removeSkillMod('general_assembly', 5) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_structure_artisan_dexterity_1") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_structure_artisan_dexterity_1") return diff --git a/scripts/expertise/expertise_structure_artisan_dexterity_2.py b/scripts/expertise/expertise_structure_artisan_dexterity_2.py index 7390c520..e5bee87f 100644 --- a/scripts/expertise/expertise_structure_artisan_dexterity_2.py +++ b/scripts/expertise/expertise_structure_artisan_dexterity_2.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'trader_struct_1a': - return - - actor.addSkill('expertise_structure_artisan_dexterity_2') - - actor.addSkillMod('general_assembly', 5) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'trader_struct_1a': - return - - actor.removeSkill('expertise_structure_artisan_dexterity_2') - - actor.removeSkillMod('general_assembly', 5) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_structure_artisan_dexterity_2") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_structure_artisan_dexterity_2") return diff --git a/scripts/expertise/expertise_structure_artisan_dexterity_3.py b/scripts/expertise/expertise_structure_artisan_dexterity_3.py index 91971842..fb2b5c62 100644 --- a/scripts/expertise/expertise_structure_artisan_dexterity_3.py +++ b/scripts/expertise/expertise_structure_artisan_dexterity_3.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'trader_struct_1a': - return - - actor.addSkill('expertise_structure_artisan_dexterity_3') - - actor.addSkillMod('general_assembly', 5) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'trader_struct_1a': - return - - actor.removeSkill('expertise_structure_artisan_dexterity_3') - - actor.removeSkillMod('general_assembly', 5) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_structure_artisan_dexterity_3") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_structure_artisan_dexterity_3") return diff --git a/scripts/expertise/expertise_structure_artisan_dexterity_4.py b/scripts/expertise/expertise_structure_artisan_dexterity_4.py index 4cb0041e..c4fea7ab 100644 --- a/scripts/expertise/expertise_structure_artisan_dexterity_4.py +++ b/scripts/expertise/expertise_structure_artisan_dexterity_4.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'trader_struct_1a': - return - - actor.addSkill('expertise_structure_artisan_dexterity_4') - - actor.addSkillMod('general_assembly', 5) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'trader_struct_1a': - return - - actor.removeSkill('expertise_structure_artisan_dexterity_4') - - actor.removeSkillMod('general_assembly', 5) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_structure_artisan_dexterity_4") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_structure_artisan_dexterity_4") return diff --git a/scripts/expertise/expertise_structure_artisan_hypothesis_1.py b/scripts/expertise/expertise_structure_artisan_hypothesis_1.py index 18cbdb54..c5ec040c 100644 --- a/scripts/expertise/expertise_structure_artisan_hypothesis_1.py +++ b/scripts/expertise/expertise_structure_artisan_hypothesis_1.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'trader_struct_1a': - return - - actor.addSkill('expertise_structure_artisan_hypothesis_1') - - actor.addSkillMod('expertise_experimentation_increase_artisan', 3) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'trader_struct_1a': - return - - actor.removeSkill('expertise_structure_artisan_hypothesis_1') - - actor.removeSkillMod('expertise_experimentation_increase_artisan', 3) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_structure_artisan_hypothesis_1") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_structure_artisan_hypothesis_1") return diff --git a/scripts/expertise/expertise_structure_artisan_hypothesis_2.py b/scripts/expertise/expertise_structure_artisan_hypothesis_2.py index 1260a16f..c8803e0c 100644 --- a/scripts/expertise/expertise_structure_artisan_hypothesis_2.py +++ b/scripts/expertise/expertise_structure_artisan_hypothesis_2.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'trader_struct_1a': - return - - actor.addSkill('expertise_structure_artisan_hypothesis_2') - - actor.addSkillMod('expertise_experimentation_increase_artisan', 3) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'trader_struct_1a': - return - - actor.removeSkill('expertise_structure_artisan_hypothesis_2') - - actor.removeSkillMod('expertise_experimentation_increase_artisan', 3) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_structure_artisan_hypothesis_2") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_structure_artisan_hypothesis_2") return diff --git a/scripts/expertise/expertise_structure_artisan_hypothesis_3.py b/scripts/expertise/expertise_structure_artisan_hypothesis_3.py index 5101ccc2..0995112b 100644 --- a/scripts/expertise/expertise_structure_artisan_hypothesis_3.py +++ b/scripts/expertise/expertise_structure_artisan_hypothesis_3.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'trader_struct_1a': - return - - actor.addSkill('expertise_structure_artisan_hypothesis_3') - - actor.addSkillMod('expertise_experimentation_increase_artisan', 3) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'trader_struct_1a': - return - - actor.removeSkill('expertise_structure_artisan_hypothesis_3') - - actor.removeSkillMod('expertise_experimentation_increase_artisan', 3) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_structure_artisan_hypothesis_3") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_structure_artisan_hypothesis_3") return diff --git a/scripts/expertise/expertise_structure_artisan_hypothesis_4.py b/scripts/expertise/expertise_structure_artisan_hypothesis_4.py index ae1c642f..d5a30bc6 100644 --- a/scripts/expertise/expertise_structure_artisan_hypothesis_4.py +++ b/scripts/expertise/expertise_structure_artisan_hypothesis_4.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'trader_struct_1a': - return - - actor.addSkill('expertise_structure_artisan_hypothesis_4') - - actor.addSkillMod('expertise_experimentation_increase_artisan', 3) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'trader_struct_1a': - return - - actor.removeSkill('expertise_structure_artisan_hypothesis_4') - - actor.removeSkillMod('expertise_experimentation_increase_artisan', 3) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_structure_artisan_hypothesis_4") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_structure_artisan_hypothesis_4") return diff --git a/scripts/expertise/expertise_structure_resource_processing_1.py b/scripts/expertise/expertise_structure_resource_processing_1.py index 80444cc0..38475c6d 100644 --- a/scripts/expertise/expertise_structure_resource_processing_1.py +++ b/scripts/expertise/expertise_structure_resource_processing_1.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'trader_struct_1a': - return - - actor.addSkill('expertise_structure_resource_processing_1') - - actor.addSkillMod('expertise_resource_quality_increase', 1) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'trader_struct_1a': - return - - actor.removeSkill('expertise_structure_resource_processing_1') - - actor.removeSkillMod('expertise_resource_quality_increase', 1) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_structure_resource_processing_1") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_structure_resource_processing_1") return diff --git a/scripts/expertise/expertise_structure_resource_processing_2.py b/scripts/expertise/expertise_structure_resource_processing_2.py index 89253106..79d11128 100644 --- a/scripts/expertise/expertise_structure_resource_processing_2.py +++ b/scripts/expertise/expertise_structure_resource_processing_2.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'trader_struct_1a': - return - - actor.addSkill('expertise_structure_resource_processing_2') - - actor.addSkillMod('expertise_resource_quality_increase', 1) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'trader_struct_1a': - return - - actor.removeSkill('expertise_structure_resource_processing_2') - - actor.removeSkillMod('expertise_resource_quality_increase', 1) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_structure_resource_processing_2") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_structure_resource_processing_2") return diff --git a/scripts/expertise/expertise_structure_resource_refinement_1.py b/scripts/expertise/expertise_structure_resource_refinement_1.py index 948b3822..5b55ffb2 100644 --- a/scripts/expertise/expertise_structure_resource_refinement_1.py +++ b/scripts/expertise/expertise_structure_resource_refinement_1.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'trader_struct_1a': - return - - actor.addSkill('expertise_structure_resource_refinement_1') - - actor.addSkillMod('expertise_resource_quality_increase', 1) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'trader_struct_1a': - return - - actor.removeSkill('expertise_structure_resource_refinement_1') - - actor.removeSkillMod('expertise_resource_quality_increase', 1) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_structure_resource_refinement_1") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_structure_resource_refinement_1") return diff --git a/scripts/expertise/expertise_structure_resource_refinement_2.py b/scripts/expertise/expertise_structure_resource_refinement_2.py index bc8e7478..d9347d52 100644 --- a/scripts/expertise/expertise_structure_resource_refinement_2.py +++ b/scripts/expertise/expertise_structure_resource_refinement_2.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'trader_struct_1a': - return - - actor.addSkill('expertise_structure_resource_refinement_2') - - actor.addSkillMod('expertise_resource_quality_increase', 1) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'trader_struct_1a': - return - - actor.removeSkill('expertise_structure_resource_refinement_2') - - actor.removeSkillMod('expertise_resource_quality_increase', 1) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_structure_resource_refinement_2") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_structure_resource_refinement_2") return diff --git a/scripts/expertise/expertise_structure_shipwright_advanced_theory_1.py b/scripts/expertise/expertise_structure_shipwright_advanced_theory_1.py index 3ad59ca5..7077e0e4 100644 --- a/scripts/expertise/expertise_structure_shipwright_advanced_theory_1.py +++ b/scripts/expertise/expertise_structure_shipwright_advanced_theory_1.py @@ -1,60 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'trader_struct_1a': - return - - actor.addSkill('expertise_structure_shipwright_advanced_theory_1') - - actor.addSkillMod('chassis_experimentation', 10) - actor.addSkillMod('weapon_systems_experimentation', 10) - actor.addSkillMod('engine_experimentation', 10) - actor.addSkillMod('booster_experimentation', 10) - actor.addSkillMod('power_systems_experimentation', 10) - actor.addSkillMod('shields_experimentation', 10) - actor.addSkillMod('advanced_ship_experimentation', 10) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'trader_struct_1a': - return - - actor.removeSkill('expertise_structure_shipwright_advanced_theory_1') - - actor.removeSkillMod('chassis_experimentation', 10) - actor.removeSkillMod('weapon_systems_experimentation', 10) - actor.removeSkillMod('engine_experimentation', 10) - actor.removeSkillMod('booster_experimentation', 10) - actor.removeSkillMod('power_systems_experimentation', 10) - actor.removeSkillMod('shields_experimentation', 10) - actor.removeSkillMod('advanced_ship_experimentation', 10) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_structure_shipwright_advanced_theory_1") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_structure_shipwright_advanced_theory_1") return diff --git a/scripts/expertise/expertise_structure_shipwright_dexterity_1.py b/scripts/expertise/expertise_structure_shipwright_dexterity_1.py index 210f669b..f3bd8da5 100644 --- a/scripts/expertise/expertise_structure_shipwright_dexterity_1.py +++ b/scripts/expertise/expertise_structure_shipwright_dexterity_1.py @@ -1,60 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'trader_struct_1a': - return - - actor.addSkill('expertise_structure_shipwright_dexterity_1') - - actor.addSkillMod('chassis_assembly', 5) - actor.addSkillMod('engine_assembly', 5) - actor.addSkillMod('booster_assembly', 5) - actor.addSkillMod('power_systems', 5) - actor.addSkillMod('weapon_systems', 5) - actor.addSkillMod('shields_assembly', 5) - actor.addSkillMod('advanced_assembly', 5) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'trader_struct_1a': - return - - actor.removeSkill('expertise_structure_shipwright_dexterity_1') - - actor.removeSkillMod('chassis_assembly', 5) - actor.removeSkillMod('engine_assembly', 5) - actor.removeSkillMod('booster_assembly', 5) - actor.removeSkillMod('power_systems', 5) - actor.removeSkillMod('weapon_systems', 5) - actor.removeSkillMod('shields_assembly', 5) - actor.removeSkillMod('advanced_assembly', 5) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_structure_shipwright_dexterity_1") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_structure_shipwright_dexterity_1") return diff --git a/scripts/expertise/expertise_structure_shipwright_dexterity_2.py b/scripts/expertise/expertise_structure_shipwright_dexterity_2.py index b1bc4bd6..c242e7f8 100644 --- a/scripts/expertise/expertise_structure_shipwright_dexterity_2.py +++ b/scripts/expertise/expertise_structure_shipwright_dexterity_2.py @@ -1,60 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'trader_struct_1a': - return - - actor.addSkill('expertise_structure_shipwright_dexterity_2') - - actor.addSkillMod('chassis_assembly', 5) - actor.addSkillMod('engine_assembly', 5) - actor.addSkillMod('booster_assembly', 5) - actor.addSkillMod('power_systems', 5) - actor.addSkillMod('weapon_systems', 5) - actor.addSkillMod('shields_assembly', 5) - actor.addSkillMod('advanced_assembly', 5) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'trader_struct_1a': - return - - actor.removeSkill('expertise_structure_shipwright_dexterity_2') - - actor.removeSkillMod('chassis_assembly', 5) - actor.removeSkillMod('engine_assembly', 5) - actor.removeSkillMod('booster_assembly', 5) - actor.removeSkillMod('power_systems', 5) - actor.removeSkillMod('weapon_systems', 5) - actor.removeSkillMod('shields_assembly', 5) - actor.removeSkillMod('advanced_assembly', 5) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_structure_shipwright_dexterity_2") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_structure_shipwright_dexterity_2") return diff --git a/scripts/expertise/expertise_structure_shipwright_dexterity_3.py b/scripts/expertise/expertise_structure_shipwright_dexterity_3.py index 09592b62..7690812b 100644 --- a/scripts/expertise/expertise_structure_shipwright_dexterity_3.py +++ b/scripts/expertise/expertise_structure_shipwright_dexterity_3.py @@ -1,60 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'trader_struct_1a': - return - - actor.addSkill('expertise_structure_shipwright_dexterity_3') - - actor.addSkillMod('chassis_assembly', 5) - actor.addSkillMod('engine_assembly', 5) - actor.addSkillMod('booster_assembly', 5) - actor.addSkillMod('power_systems', 5) - actor.addSkillMod('weapon_systems', 5) - actor.addSkillMod('shields_assembly', 5) - actor.addSkillMod('advanced_assembly', 5) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'trader_struct_1a': - return - - actor.removeSkill('expertise_structure_shipwright_dexterity_3') - - actor.removeSkillMod('chassis_assembly', 5) - actor.removeSkillMod('engine_assembly', 5) - actor.removeSkillMod('booster_assembly', 5) - actor.removeSkillMod('power_systems', 5) - actor.removeSkillMod('weapon_systems', 5) - actor.removeSkillMod('shields_assembly', 5) - actor.removeSkillMod('advanced_assembly', 5) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_structure_shipwright_dexterity_3") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_structure_shipwright_dexterity_3") return diff --git a/scripts/expertise/expertise_structure_shipwright_dexterity_4.py b/scripts/expertise/expertise_structure_shipwright_dexterity_4.py index 242ccbd2..a63652c5 100644 --- a/scripts/expertise/expertise_structure_shipwright_dexterity_4.py +++ b/scripts/expertise/expertise_structure_shipwright_dexterity_4.py @@ -1,60 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'trader_struct_1a': - return - - actor.addSkill('expertise_structure_shipwright_dexterity_4') - - actor.addSkillMod('chassis_assembly', 5) - actor.addSkillMod('engine_assembly', 5) - actor.addSkillMod('booster_assembly', 5) - actor.addSkillMod('power_systems', 5) - actor.addSkillMod('weapon_systems', 5) - actor.addSkillMod('shields_assembly', 5) - actor.addSkillMod('advanced_assembly', 5) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'trader_struct_1a': - return - - actor.removeSkill('expertise_structure_shipwright_dexterity_4') - - actor.removeSkillMod('chassis_assembly', 5) - actor.removeSkillMod('engine_assembly', 5) - actor.removeSkillMod('booster_assembly', 5) - actor.removeSkillMod('power_systems', 5) - actor.removeSkillMod('weapon_systems', 5) - actor.removeSkillMod('shields_assembly', 5) - actor.removeSkillMod('advanced_assembly', 5) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_structure_shipwright_dexterity_4") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_structure_shipwright_dexterity_4") return diff --git a/scripts/expertise/expertise_structure_shipwright_hypothesis_1.py b/scripts/expertise/expertise_structure_shipwright_hypothesis_1.py index 6fc0b225..65ef4ba2 100644 --- a/scripts/expertise/expertise_structure_shipwright_hypothesis_1.py +++ b/scripts/expertise/expertise_structure_shipwright_hypothesis_1.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'trader_struct_1a': - return - - actor.addSkill('expertise_structure_shipwright_hypothesis_1') - - actor.addSkillMod('expertise_experimentation_increase_shipwright', 3) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'trader_struct_1a': - return - - actor.removeSkill('expertise_structure_shipwright_hypothesis_1') - - actor.removeSkillMod('expertise_experimentation_increase_shipwright', 3) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_structure_shipwright_hypothesis_1") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_structure_shipwright_hypothesis_1") return diff --git a/scripts/expertise/expertise_structure_shipwright_hypothesis_2.py b/scripts/expertise/expertise_structure_shipwright_hypothesis_2.py index 101a7342..4ab8f864 100644 --- a/scripts/expertise/expertise_structure_shipwright_hypothesis_2.py +++ b/scripts/expertise/expertise_structure_shipwright_hypothesis_2.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'trader_struct_1a': - return - - actor.addSkill('expertise_structure_shipwright_hypothesis_2') - - actor.addSkillMod('expertise_experimentation_increase_shipwright', 3) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'trader_struct_1a': - return - - actor.removeSkill('expertise_structure_shipwright_hypothesis_2') - - actor.removeSkillMod('expertise_experimentation_increase_shipwright', 3) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_structure_shipwright_hypothesis_2") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_structure_shipwright_hypothesis_2") return diff --git a/scripts/expertise/expertise_structure_shipwright_hypothesis_3.py b/scripts/expertise/expertise_structure_shipwright_hypothesis_3.py index 2c00785c..af933c60 100644 --- a/scripts/expertise/expertise_structure_shipwright_hypothesis_3.py +++ b/scripts/expertise/expertise_structure_shipwright_hypothesis_3.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'trader_struct_1a': - return - - actor.addSkill('expertise_structure_shipwright_hypothesis_3') - - actor.addSkillMod('expertise_experimentation_increase_shipwright', 3) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'trader_struct_1a': - return - - actor.removeSkill('expertise_structure_shipwright_hypothesis_3') - - actor.removeSkillMod('expertise_experimentation_increase_shipwright', 3) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_structure_shipwright_hypothesis_3") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_structure_shipwright_hypothesis_3") return diff --git a/scripts/expertise/expertise_structure_shipwright_hypothesis_4.py b/scripts/expertise/expertise_structure_shipwright_hypothesis_4.py index d723697e..4b120a10 100644 --- a/scripts/expertise/expertise_structure_shipwright_hypothesis_4.py +++ b/scripts/expertise/expertise_structure_shipwright_hypothesis_4.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'trader_struct_1a': - return - - actor.addSkill('expertise_structure_shipwright_hypothesis_4') - - actor.addSkillMod('expertise_experimentation_increase_shipwright', 3) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'trader_struct_1a': - return - - actor.removeSkill('expertise_structure_shipwright_hypothesis_4') - - actor.removeSkillMod('expertise_experimentation_increase_shipwright', 3) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_structure_shipwright_hypothesis_4") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_structure_shipwright_hypothesis_4") return diff --git a/scripts/expertise/expertise_structure_shipwright_insight_1.py b/scripts/expertise/expertise_structure_shipwright_insight_1.py index 82b35892..43dd055e 100644 --- a/scripts/expertise/expertise_structure_shipwright_insight_1.py +++ b/scripts/expertise/expertise_structure_shipwright_insight_1.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'trader_struct_1a': - return - - actor.addSkill('expertise_structure_shipwright_insight_1') - - actor.addSkillMod('expertise_complexity_decrease_shipwright', 1) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'trader_struct_1a': - return - - actor.removeSkill('expertise_structure_shipwright_insight_1') - - actor.removeSkillMod('expertise_complexity_decrease_shipwright', 1) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_structure_shipwright_insight_1") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_structure_shipwright_insight_1") return diff --git a/scripts/expertise/expertise_structure_shipwright_insight_2.py b/scripts/expertise/expertise_structure_shipwright_insight_2.py index d50e67a5..0fe7dd52 100644 --- a/scripts/expertise/expertise_structure_shipwright_insight_2.py +++ b/scripts/expertise/expertise_structure_shipwright_insight_2.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'trader_struct_1a': - return - - actor.addSkill('expertise_structure_shipwright_insight_2') - - actor.addSkillMod('expertise_complexity_decrease_shipwright', 1) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'trader_struct_1a': - return - - actor.removeSkill('expertise_structure_shipwright_insight_2') - - actor.removeSkillMod('expertise_complexity_decrease_shipwright', 1) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_structure_shipwright_insight_2") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_structure_shipwright_insight_2") return diff --git a/scripts/expertise/expertise_structure_shipwright_keen_understanding_1.py b/scripts/expertise/expertise_structure_shipwright_keen_understanding_1.py index 06d07813..211217c1 100644 --- a/scripts/expertise/expertise_structure_shipwright_keen_understanding_1.py +++ b/scripts/expertise/expertise_structure_shipwright_keen_understanding_1.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'trader_struct_1a': - return - - actor.addSkill('expertise_structure_shipwright_keen_understanding_1') - - actor.addSkillMod('expertise_complexity_decrease_shipwright', 2) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'trader_struct_1a': - return - - actor.removeSkill('expertise_structure_shipwright_keen_understanding_1') - - actor.removeSkillMod('expertise_complexity_decrease_shipwright', 2) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_structure_shipwright_keen_understanding_1") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_structure_shipwright_keen_understanding_1") return diff --git a/scripts/expertise/expertise_structure_shipwright_keen_understanding_2.py b/scripts/expertise/expertise_structure_shipwright_keen_understanding_2.py index bd0f235a..c11a18a0 100644 --- a/scripts/expertise/expertise_structure_shipwright_keen_understanding_2.py +++ b/scripts/expertise/expertise_structure_shipwright_keen_understanding_2.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'trader_struct_1a': - return - - actor.addSkill('expertise_structure_shipwright_keen_understanding_2') - - actor.addSkillMod('expertise_complexity_decrease_shipwright', 2) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'trader_struct_1a': - return - - actor.removeSkill('expertise_structure_shipwright_keen_understanding_2') - - actor.removeSkillMod('expertise_complexity_decrease_shipwright', 2) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_structure_shipwright_keen_understanding_2") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_structure_shipwright_keen_understanding_2") return diff --git a/scripts/expertise/expertise_structure_shipwright_schematic_1_1.py b/scripts/expertise/expertise_structure_shipwright_schematic_1_1.py index 7e8de7a2..2cce7bef 100644 --- a/scripts/expertise/expertise_structure_shipwright_schematic_1_1.py +++ b/scripts/expertise/expertise_structure_shipwright_schematic_1_1.py @@ -1,46 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'trader_struct_1a': - return - - actor.addSkill('expertise_structure_shipwright_schematic_1_1') - - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'trader_struct_1a': - return - - actor.removeSkill('expertise_structure_shipwright_schematic_1_1') - - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_structure_shipwright_schmematic_1_1") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_structure_shipwright_schmematic_1_1") return diff --git a/scripts/expertise/expertise_structure_shipwright_schematic_2_1.py b/scripts/expertise/expertise_structure_shipwright_schematic_2_1.py index 71c2d9b5..b23f6f2c 100644 --- a/scripts/expertise/expertise_structure_shipwright_schematic_2_1.py +++ b/scripts/expertise/expertise_structure_shipwright_schematic_2_1.py @@ -1,46 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'trader_struct_1a': - return - - actor.addSkill('expertise_structure_shipwright_schematic_2_1') - - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'trader_struct_1a': - return - - actor.removeSkill('expertise_structure_shipwright_schematic_2_1') - - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_structure_shipwright_schmematic_2_1") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_structure_shipwright_schmematic_2_1") return diff --git a/scripts/expertise/expertise_trader_business_accounting_1.py b/scripts/expertise/expertise_trader_business_accounting_1.py index 79324ca3..115fc5cd 100644 --- a/scripts/expertise/expertise_trader_business_accounting_1.py +++ b/scripts/expertise/expertise_trader_business_accounting_1.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'trader_1a': - return - - actor.addSkill('expertise_trader_business_accounting_1') - - actor.addSkillMod('expertise_vendor_cost_decrease', 1) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'trader_1a': - return - - actor.removeSkill('expertise_trader_business_accounting_1') - - actor.removeSkillMod('expertise_vendor_cost_decrease', 1) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_trader_business_accounting_1") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_trader_business_accounting_1") return diff --git a/scripts/expertise/expertise_trader_business_accounting_2.py b/scripts/expertise/expertise_trader_business_accounting_2.py index 86469f30..24e5d569 100644 --- a/scripts/expertise/expertise_trader_business_accounting_2.py +++ b/scripts/expertise/expertise_trader_business_accounting_2.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'trader_1a': - return - - actor.addSkill('expertise_trader_business_accounting_2') - - actor.addSkillMod('expertise_vendor_cost_decrease', 1) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'trader_1a': - return - - actor.removeSkill('expertise_trader_business_accounting_2') - - actor.removeSkillMod('expertise_vendor_cost_decrease', 1) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_trader_business_accounting_2") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_trader_business_accounting_2") return diff --git a/scripts/expertise/expertise_trader_business_accounting_3.py b/scripts/expertise/expertise_trader_business_accounting_3.py index cc43a91d..d0d619c7 100644 --- a/scripts/expertise/expertise_trader_business_accounting_3.py +++ b/scripts/expertise/expertise_trader_business_accounting_3.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'trader_1a': - return - - actor.addSkill('expertise_trader_business_accounting_3') - - actor.addSkillMod('expertise_vendor_cost_decrease', 1) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'trader_1a': - return - - actor.removeSkill('expertise_trader_business_accounting_3') - - actor.removeSkillMod('expertise_vendor_cost_decrease', 1) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_trader_business_accounting_3") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_trader_business_accounting_3") return diff --git a/scripts/expertise/expertise_trader_business_accounting_4.py b/scripts/expertise/expertise_trader_business_accounting_4.py index 0c751506..62d4ef7a 100644 --- a/scripts/expertise/expertise_trader_business_accounting_4.py +++ b/scripts/expertise/expertise_trader_business_accounting_4.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'trader_1a': - return - - actor.addSkill('expertise_trader_business_accounting_4') - - actor.addSkillMod('expertise_vendor_cost_decrease', 1) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'trader_1a': - return - - actor.removeSkill('expertise_trader_business_accounting_4') - - actor.removeSkillMod('expertise_vendor_cost_decrease', 1) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_trader_business_accounting_4") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_trader_business_accounting_4") return diff --git a/scripts/expertise/expertise_trader_factory_energy_1.py b/scripts/expertise/expertise_trader_factory_energy_1.py index cd7525fc..0c42837e 100644 --- a/scripts/expertise/expertise_trader_factory_energy_1.py +++ b/scripts/expertise/expertise_trader_factory_energy_1.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'trader_1a': - return - - actor.addSkill('expertise_trader_factory_energy_1') - - actor.addSkillMod('expertise_factory_energy_decrease', 5) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'trader_1a': - return - - actor.removeSkill('expertise_trader_factory_energy_1') - - actor.removeSkillMod('expertise_factory_energy_decrease', 5) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_trader_factory_energy_1") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_trader_factory_energy_1") return diff --git a/scripts/expertise/expertise_trader_factory_energy_2.py b/scripts/expertise/expertise_trader_factory_energy_2.py index ab07aa02..5a89f344 100644 --- a/scripts/expertise/expertise_trader_factory_energy_2.py +++ b/scripts/expertise/expertise_trader_factory_energy_2.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'trader_1a': - return - - actor.addSkill('expertise_trader_factory_energy_2') - - actor.addSkillMod('expertise_factory_energy_decrease', 5) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'trader_1a': - return - - actor.removeSkill('expertise_trader_factory_energy_2') - - actor.removeSkillMod('expertise_factory_energy_decrease', 5) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_trader_factory_energy_2") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_trader_factory_energy_2") return diff --git a/scripts/expertise/expertise_trader_factory_energy_3.py b/scripts/expertise/expertise_trader_factory_energy_3.py index 04bac30c..998dd932 100644 --- a/scripts/expertise/expertise_trader_factory_energy_3.py +++ b/scripts/expertise/expertise_trader_factory_energy_3.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'trader_1a': - return - - actor.addSkill('expertise_trader_factory_energy_3') - - actor.addSkillMod('expertise_factory_energy_decrease', 5) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'trader_1a': - return - - actor.removeSkill('expertise_trader_factory_energy_3') - - actor.removeSkillMod('expertise_factory_energy_decrease', 5) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_trader_factory_energy_3") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_trader_factory_energy_3") return diff --git a/scripts/expertise/expertise_trader_factory_energy_4.py b/scripts/expertise/expertise_trader_factory_energy_4.py index b2012ebc..dbed8294 100644 --- a/scripts/expertise/expertise_trader_factory_energy_4.py +++ b/scripts/expertise/expertise_trader_factory_energy_4.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'trader_1a': - return - - actor.addSkill('expertise_trader_factory_energy_4') - - actor.addSkillMod('expertise_factory_energy_decrease', 5) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'trader_1a': - return - - actor.removeSkill('expertise_trader_factory_energy_4') - - actor.removeSkillMod('expertise_factory_energy_decrease', 5) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_trader_factory_energy_4") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_trader_factory_energy_4") return diff --git a/scripts/expertise/expertise_trader_factory_maintenance_1.py b/scripts/expertise/expertise_trader_factory_maintenance_1.py index 539c8406..cc4ea7c8 100644 --- a/scripts/expertise/expertise_trader_factory_maintenance_1.py +++ b/scripts/expertise/expertise_trader_factory_maintenance_1.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'trader_1a': - return - - actor.addSkill('expertise_trader_factory_maintenance_1') - - actor.addSkillMod('expertise_factory_maintenance_decrease', 10) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'trader_1a': - return - - actor.removeSkill('expertise_trader_factory_maintenance_1') - - actor.removeSkillMod('expertise_factory_maintenance_decrease', 10) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_trader_factory_maintenance_1") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_trader_factory_maintenance_1") return diff --git a/scripts/expertise/expertise_trader_factory_maintenance_2.py b/scripts/expertise/expertise_trader_factory_maintenance_2.py index 917acca1..701595a4 100644 --- a/scripts/expertise/expertise_trader_factory_maintenance_2.py +++ b/scripts/expertise/expertise_trader_factory_maintenance_2.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'trader_1a': - return - - actor.addSkill('expertise_trader_factory_maintenance_2') - - actor.addSkillMod('expertise_factory_maintenance_decrease', 5) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'trader_1a': - return - - actor.removeSkill('expertise_trader_factory_maintenance_2') - - actor.removeSkillMod('expertise_factory_maintenance_decrease', 5) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_trader_factory_maintenance_2") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_trader_factory_maintenance_2") return diff --git a/scripts/expertise/expertise_trader_factory_maintenance_3.py b/scripts/expertise/expertise_trader_factory_maintenance_3.py index 58fdaa1d..f192b2e5 100644 --- a/scripts/expertise/expertise_trader_factory_maintenance_3.py +++ b/scripts/expertise/expertise_trader_factory_maintenance_3.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'trader_1a': - return - - actor.addSkill('expertise_trader_factory_maintenance_3') - - actor.addSkillMod('expertise_factory_maintenance_decrease', 5) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'trader_1a': - return - - actor.removeSkill('expertise_trader_factory_maintenance_3') - - actor.removeSkillMod('expertise_factory_maintenance_decrease', 5) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_trader_factory_maintenance_3") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_trader_factory_maintenance_3") return diff --git a/scripts/expertise/expertise_trader_factory_maintenance_4.py b/scripts/expertise/expertise_trader_factory_maintenance_4.py index 51f4dff6..2af47dac 100644 --- a/scripts/expertise/expertise_trader_factory_maintenance_4.py +++ b/scripts/expertise/expertise_trader_factory_maintenance_4.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'trader_1a': - return - - actor.addSkill('expertise_trader_factory_maintenance_4') - - actor.addSkillMod('expertise_factory_maintenance_decrease', 10) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'trader_1a': - return - - actor.removeSkill('expertise_trader_factory_maintenance_4') - - actor.removeSkillMod('expertise_factory_maintenance_decrease', 10) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_trader_factory_maintenance_4") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_trader_factory_maintenance_4") return diff --git a/scripts/expertise/expertise_trader_factory_production_1.py b/scripts/expertise/expertise_trader_factory_production_1.py index 9f82bcae..1d1f755b 100644 --- a/scripts/expertise/expertise_trader_factory_production_1.py +++ b/scripts/expertise/expertise_trader_factory_production_1.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'trader_1a': - return - - actor.addSkill('expertise_trader_factory_production_1') - - actor.addSkillMod('factory_speed', 5) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'trader_1a': - return - - actor.removeSkill('expertise_trader_factory_production_1') - - actor.removeSkillMod('factory_speed', 5) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_trader_factory_production_1") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_trader_factory_production_1") return diff --git a/scripts/expertise/expertise_trader_factory_production_2.py b/scripts/expertise/expertise_trader_factory_production_2.py index 97a69abe..8feb2585 100644 --- a/scripts/expertise/expertise_trader_factory_production_2.py +++ b/scripts/expertise/expertise_trader_factory_production_2.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'trader_1a': - return - - actor.addSkill('expertise_trader_factory_production_2') - - actor.addSkillMod('factory_speed', 5) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'trader_1a': - return - - actor.removeSkill('expertise_trader_factory_production_2') - - actor.removeSkillMod('factory_speed', 5) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_trader_factory_production_2") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_trader_factory_production_2") return diff --git a/scripts/expertise/expertise_trader_harvester_collection_1.py b/scripts/expertise/expertise_trader_harvester_collection_1.py index f509b4ce..3b7b2f6e 100644 --- a/scripts/expertise/expertise_trader_harvester_collection_1.py +++ b/scripts/expertise/expertise_trader_harvester_collection_1.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'trader_1a': - return - - actor.addSkill('expertise_trader_harvester_collection_1') - - actor.addSkillMod('expertise_harvester_collection_increase', 20) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'trader_1a': - return - - actor.removeSkill('expertise_trader_harvester_collection_1') - - actor.removeSkillMod('expertise_harvester_collection_increase', 20) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_trader_harvester_collection_1") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_trader_harvester_collection_1") return diff --git a/scripts/expertise/expertise_trader_harvester_collection_2.py b/scripts/expertise/expertise_trader_harvester_collection_2.py index fb287890..1959a0fb 100644 --- a/scripts/expertise/expertise_trader_harvester_collection_2.py +++ b/scripts/expertise/expertise_trader_harvester_collection_2.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'trader_1a': - return - - actor.addSkill('expertise_trader_harvester_collection_2') - - actor.addSkillMod('expertise_harvester_collection_increase', 10) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'trader_1a': - return - - actor.removeSkill('expertise_trader_harvester_collection_2') - - actor.removeSkillMod('expertise_harvester_collection_increase', 10) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_trader_harvester_collection_2") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_trader_harvester_collection_2") return diff --git a/scripts/expertise/expertise_trader_harvester_energy_1.py b/scripts/expertise/expertise_trader_harvester_energy_1.py index b0a7f738..ef79a694 100644 --- a/scripts/expertise/expertise_trader_harvester_energy_1.py +++ b/scripts/expertise/expertise_trader_harvester_energy_1.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'trader_1a': - return - - actor.addSkill('expertise_trader_harvester_energy_1') - - actor.addSkillMod('expertise_harvester_energy_decrease', 5) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'trader_1a': - return - - actor.removeSkill('expertise_trader_harvester_energy_1') - - actor.removeSkillMod('expertise_harvester_energy_decrease', 5) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_trader_harvester_energy_1") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_trader_harvester_energy_1") return diff --git a/scripts/expertise/expertise_trader_harvester_energy_2.py b/scripts/expertise/expertise_trader_harvester_energy_2.py index d6822bed..6ae294a9 100644 --- a/scripts/expertise/expertise_trader_harvester_energy_2.py +++ b/scripts/expertise/expertise_trader_harvester_energy_2.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'trader_1a': - return - - actor.addSkill('expertise_trader_harvester_energy_2') - - actor.addSkillMod('expertise_harvester_energy_decrease', 5) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'trader_1a': - return - - actor.removeSkill('expertise_trader_harvester_energy_2') - - actor.removeSkillMod('expertise_harvester_energy_decrease', 5) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_trader_harvester_energy_2") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_trader_harvester_energy_2") return diff --git a/scripts/expertise/expertise_trader_harvester_energy_3.py b/scripts/expertise/expertise_trader_harvester_energy_3.py index 35e85782..247b53c3 100644 --- a/scripts/expertise/expertise_trader_harvester_energy_3.py +++ b/scripts/expertise/expertise_trader_harvester_energy_3.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'trader_1a': - return - - actor.addSkill('expertise_trader_harvester_energy_3') - - actor.addSkillMod('expertise_harvester_energy_decrease', 5) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'trader_1a': - return - - actor.removeSkill('expertise_trader_harvester_energy_3') - - actor.removeSkillMod('expertise_harvester_energy_decrease', 5) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_trader_harvester_energy_3") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_trader_harvester_energy_3") return diff --git a/scripts/expertise/expertise_trader_harvester_energy_4.py b/scripts/expertise/expertise_trader_harvester_energy_4.py index f7132f84..8d6225be 100644 --- a/scripts/expertise/expertise_trader_harvester_energy_4.py +++ b/scripts/expertise/expertise_trader_harvester_energy_4.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'trader_1a': - return - - actor.addSkill('expertise_trader_harvester_energy_4') - - actor.addSkillMod('expertise_harvester_energy_decrease', 5) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'trader_1a': - return - - actor.removeSkill('expertise_trader_harvester_energy_4') - - actor.removeSkillMod('expertise_harvester_energy_decrease', 5) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_trader_harvester_energy_4") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_trader_harvester_energy_4") return diff --git a/scripts/expertise/expertise_trader_harvester_maintenance_1.py b/scripts/expertise/expertise_trader_harvester_maintenance_1.py index 0dbf85ca..da891720 100644 --- a/scripts/expertise/expertise_trader_harvester_maintenance_1.py +++ b/scripts/expertise/expertise_trader_harvester_maintenance_1.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'trader_1a': - return - - actor.addSkill('expertise_trader_harvester_maintenance_1') - - actor.addSkillMod('expertise_harvester_maintenance_decrease', 4) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'trader_1a': - return - - actor.removeSkill('expertise_trader_harvester_maintenance_1') - - actor.removeSkillMod('expertise_harvester_maintenance_decrease', 4) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_trader_harvester_maintenance_1") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_trader_harvester_maintenance_1") return diff --git a/scripts/expertise/expertise_trader_harvester_maintenance_2.py b/scripts/expertise/expertise_trader_harvester_maintenance_2.py index e581d20d..fd1f96cd 100644 --- a/scripts/expertise/expertise_trader_harvester_maintenance_2.py +++ b/scripts/expertise/expertise_trader_harvester_maintenance_2.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'trader_1a': - return - - actor.addSkill('expertise_trader_harvester_maintenance_2') - - actor.addSkillMod('expertise_harvester_maintenance_decrease', 4) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'trader_1a': - return - - actor.removeSkill('expertise_trader_harvester_maintenance_2') - - actor.removeSkillMod('expertise_harvester_maintenance_decrease', 4) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_trader_harvester_maintenance_2") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_trader_harvester_maintenance_2") return diff --git a/scripts/expertise/expertise_trader_harvester_maintenance_3.py b/scripts/expertise/expertise_trader_harvester_maintenance_3.py index 85c77180..d1d62f39 100644 --- a/scripts/expertise/expertise_trader_harvester_maintenance_3.py +++ b/scripts/expertise/expertise_trader_harvester_maintenance_3.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'trader_1a': - return - - actor.addSkill('expertise_trader_harvester_maintenance_3') - - actor.addSkillMod('expertise_harvester_maintenance_decrease', 4) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'trader_1a': - return - - actor.removeSkill('expertise_trader_harvester_maintenance_3') - - actor.removeSkillMod('expertise_harvester_maintenance_decrease', 4) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_trader_harvester_maintenance_3") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_trader_harvester_maintenance_3") return diff --git a/scripts/expertise/expertise_trader_harvester_maintenance_4.py b/scripts/expertise/expertise_trader_harvester_maintenance_4.py index e04f5f73..54e4b04e 100644 --- a/scripts/expertise/expertise_trader_harvester_maintenance_4.py +++ b/scripts/expertise/expertise_trader_harvester_maintenance_4.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'trader_1a': - return - - actor.addSkill('expertise_trader_harvester_maintenance_4') - - actor.addSkillMod('expertise_harvester_maintenance_decrease', 4) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'trader_1a': - return - - actor.removeSkill('expertise_trader_harvester_maintenance_4') - - actor.removeSkillMod('expertise_harvester_maintenance_decrease', 4) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_trader_harvester_maintenance_4") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_trader_harvester_maintenance_4") return diff --git a/scripts/expertise/expertise_trader_harvester_storage_1.py b/scripts/expertise/expertise_trader_harvester_storage_1.py index ad6c85ee..a1a9c7c8 100644 --- a/scripts/expertise/expertise_trader_harvester_storage_1.py +++ b/scripts/expertise/expertise_trader_harvester_storage_1.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'trader_1a': - return - - actor.addSkill('expertise_trader_harvester_storage_1') - - actor.addSkillMod('expertise_havester_storage_increase', 3) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'trader_1a': - return - - actor.removeSkill('expertise_trader_harvester_storage_1') - - actor.removeSkillMod('expertise_havester_storage_increase', 3) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_trader_harvester_storage_1") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_trader_harvester_storage_1") return diff --git a/scripts/expertise/expertise_trader_harvester_storage_2.py b/scripts/expertise/expertise_trader_harvester_storage_2.py index 9ac213e9..4f4dc914 100644 --- a/scripts/expertise/expertise_trader_harvester_storage_2.py +++ b/scripts/expertise/expertise_trader_harvester_storage_2.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'trader_1a': - return - - actor.addSkill('expertise_trader_harvester_storage_2') - - actor.addSkillMod('expertise_havester_storage_increase', 3) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'trader_1a': - return - - actor.removeSkill('expertise_trader_harvester_storage_2') - - actor.removeSkillMod('expertise_havester_storage_increase', 3) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_trader_harvester_storage_2") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_trader_harvester_storage_2") return diff --git a/scripts/expertise/expertise_trader_harvester_storage_3.py b/scripts/expertise/expertise_trader_harvester_storage_3.py index 1c2abe57..d0c04a3d 100644 --- a/scripts/expertise/expertise_trader_harvester_storage_3.py +++ b/scripts/expertise/expertise_trader_harvester_storage_3.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'trader_1a': - return - - actor.addSkill('expertise_trader_harvester_storage_3') - - actor.addSkillMod('expertise_havester_storage_increase', 3) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'trader_1a': - return - - actor.removeSkill('expertise_trader_harvester_storage_3') - - actor.removeSkillMod('expertise_havester_storage_increase', 3) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_trader_harvester_storage_3") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_trader_harvester_storage_3") return diff --git a/scripts/expertise/expertise_trader_harvester_storage_4.py b/scripts/expertise/expertise_trader_harvester_storage_4.py index 9abc452b..6e2b769b 100644 --- a/scripts/expertise/expertise_trader_harvester_storage_4.py +++ b/scripts/expertise/expertise_trader_harvester_storage_4.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'trader_1a': - return - - actor.addSkill('expertise_trader_harvester_storage_4') - - actor.addSkillMod('expertise_havester_storage_increase', 3) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'trader_1a': - return - - actor.removeSkill('expertise_trader_harvester_storage_4') - - actor.removeSkillMod('expertise_havester_storage_increase', 3) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_trader_harvester_storage_4") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_trader_harvester_storage_4") return diff --git a/scripts/expertise/expertise_trader_personnel_management_1.py b/scripts/expertise/expertise_trader_personnel_management_1.py index 9e618df1..e44aba53 100644 --- a/scripts/expertise/expertise_trader_personnel_management_1.py +++ b/scripts/expertise/expertise_trader_personnel_management_1.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'trader_1a': - return - - actor.addSkill('expertise_trader_personnel_management_1') - - actor.addSkillMod('manage_vendor', 1) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'trader_1a': - return - - actor.removeSkill('expertise_trader_personnel_management_1') - - actor.removeSkillMod('manage_vendor', 1) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_trader_personnel_management_1") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_trader_personnel_management_1") return diff --git a/scripts/expertise/expertise_trader_personnel_management_2.py b/scripts/expertise/expertise_trader_personnel_management_2.py index 465e9b8e..064d6415 100644 --- a/scripts/expertise/expertise_trader_personnel_management_2.py +++ b/scripts/expertise/expertise_trader_personnel_management_2.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'trader_1a': - return - - actor.addSkill('expertise_trader_personnel_management_2') - - actor.addSkillMod('manage_vendor', 1) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'trader_1a': - return - - actor.removeSkill('expertise_trader_personnel_management_2') - - actor.removeSkillMod('manage_vendor', 1) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_trader_personnel_management_2") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_trader_personnel_management_2") return diff --git a/scripts/expertise/expertise_trader_reverse_engineering_1.py b/scripts/expertise/expertise_trader_reverse_engineering_1.py index 6c6a1599..26f209bc 100644 --- a/scripts/expertise/expertise_trader_reverse_engineering_1.py +++ b/scripts/expertise/expertise_trader_reverse_engineering_1.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'trader_1a': - return - - actor.addSkill('expertise_trader_reverse_engineering_1') - - actor.addSkillMod('expertise_reverse_engineering_bonus', 5) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'trader_1a': - return - - actor.removeSkill('expertise_trader_reverse_engineering_1') - - actor.removeSkillMod('expertise_reverse_engineering_bonus', 5) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_trader_reverse_engineering_1") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_trader_reverse_engineering_1") return diff --git a/scripts/expertise/expertise_trader_reverse_engineering_2.py b/scripts/expertise/expertise_trader_reverse_engineering_2.py index a0716403..2192e020 100644 --- a/scripts/expertise/expertise_trader_reverse_engineering_2.py +++ b/scripts/expertise/expertise_trader_reverse_engineering_2.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'trader_1a': - return - - actor.addSkill('expertise_trader_reverse_engineering_2') - - actor.addSkillMod('expertise_reverse_engineering_bonus', 5) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'trader_1a': - return - - actor.removeSkill('expertise_trader_reverse_engineering_2') - - actor.removeSkillMod('expertise_reverse_engineering_bonus', 5) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_trader_reverse_engineering_2") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_trader_reverse_engineering_2") return diff --git a/scripts/expertise/expertise_trader_sampling_collection_1.py b/scripts/expertise/expertise_trader_sampling_collection_1.py index cb6861b2..4935bf9d 100644 --- a/scripts/expertise/expertise_trader_sampling_collection_1.py +++ b/scripts/expertise/expertise_trader_sampling_collection_1.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'trader_1a': - return - - actor.addSkill('expertise_trader_sampling_collection_1') - - actor.addSkillMod('expertise_resource_sampling_increase', 25) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'trader_1a': - return - - actor.removeSkill('expertise_trader_sampling_collection_1') - - actor.removeSkillMod('expertise_resource_sampling_increase', 25) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_trader_sampling_collection_1") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_trader_sampling_collection_1") return diff --git a/scripts/expertise/expertise_trader_sampling_collection_2.py b/scripts/expertise/expertise_trader_sampling_collection_2.py index f1c55a3d..1fa225fc 100644 --- a/scripts/expertise/expertise_trader_sampling_collection_2.py +++ b/scripts/expertise/expertise_trader_sampling_collection_2.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'trader_1a': - return - - actor.addSkill('expertise_trader_sampling_collection_2') - - actor.addSkillMod('expertise_resource_sampling_increase', 25) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'trader_1a': - return - - actor.removeSkill('expertise_trader_sampling_collection_2') - - actor.removeSkillMod('expertise_resource_sampling_increase', 25) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_trader_sampling_collection_2") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_trader_sampling_collection_2") return diff --git a/scripts/expertise/expertise_trader_sampling_collection_3.py b/scripts/expertise/expertise_trader_sampling_collection_3.py index b6a31585..9a7a1174 100644 --- a/scripts/expertise/expertise_trader_sampling_collection_3.py +++ b/scripts/expertise/expertise_trader_sampling_collection_3.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'trader_1a': - return - - actor.addSkill('expertise_trader_sampling_collection_3') - - actor.addSkillMod('expertise_resource_sampling_increase', 25) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'trader_1a': - return - - actor.removeSkill('expertise_trader_sampling_collection_3') - - actor.removeSkillMod('expertise_resource_sampling_increase', 25) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_trader_sampling_collection_3") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_trader_sampling_collection_3") return diff --git a/scripts/expertise/expertise_trader_sampling_collection_4.py b/scripts/expertise/expertise_trader_sampling_collection_4.py index 08805c30..158ca5da 100644 --- a/scripts/expertise/expertise_trader_sampling_collection_4.py +++ b/scripts/expertise/expertise_trader_sampling_collection_4.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'trader_1a': - return - - actor.addSkill('expertise_trader_sampling_collection_4') - - actor.addSkillMod('expertise_resource_sampling_increase', 25) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'trader_1a': - return - - actor.removeSkill('expertise_trader_sampling_collection_4') - - actor.removeSkillMod('expertise_resource_sampling_increase', 25) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_trader_sampling_collection_4") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_trader_sampling_collection_4") return diff --git a/scripts/expertise/expertise_trader_sampling_efficiency_1.py b/scripts/expertise/expertise_trader_sampling_efficiency_1.py index 0722f5bb..2f4c90f2 100644 --- a/scripts/expertise/expertise_trader_sampling_efficiency_1.py +++ b/scripts/expertise/expertise_trader_sampling_efficiency_1.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'trader_1a': - return - - actor.addSkill('expertise_trader_sampling_efficiency_1') - - actor.addSkillMod('expertise_resource_sampling_time_decrease', 5) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'trader_1a': - return - - actor.removeSkill('expertise_trader_sampling_efficiency_1') - - actor.removeSkillMod('expertise_resource_sampling_time_decrease', 5) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_trader_sampling_efficiency_1") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_trader_sampling_efficiency_1") return diff --git a/scripts/expertise/expertise_trader_sampling_efficiency_2.py b/scripts/expertise/expertise_trader_sampling_efficiency_2.py index c9043c3f..f197eff0 100644 --- a/scripts/expertise/expertise_trader_sampling_efficiency_2.py +++ b/scripts/expertise/expertise_trader_sampling_efficiency_2.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'trader_1a': - return - - actor.addSkill('expertise_trader_sampling_efficiency_2') - - actor.addSkillMod('expertise_resource_sampling_time_decrease', 5) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'trader_1a': - return - - actor.removeSkill('expertise_trader_sampling_efficiency_2') - - actor.removeSkillMod('expertise_resource_sampling_time_decrease', 5) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_trader_sampling_efficiency_2") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_trader_sampling_efficiency_2") return diff --git a/scripts/expertise/expertise_trader_sampling_efficiency_3.py b/scripts/expertise/expertise_trader_sampling_efficiency_3.py index 2d3d621c..cf2e5c0c 100644 --- a/scripts/expertise/expertise_trader_sampling_efficiency_3.py +++ b/scripts/expertise/expertise_trader_sampling_efficiency_3.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'trader_1a': - return - - actor.addSkill('expertise_trader_sampling_efficiency_3') - - actor.addSkillMod('expertise_resource_sampling_time_decrease', 5) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'trader_1a': - return - - actor.removeSkill('expertise_trader_sampling_efficiency_3') - - actor.removeSkillMod('expertise_resource_sampling_time_decrease', 5) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_trader_sampling_efficiency_3") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_trader_sampling_efficiency_3") return diff --git a/scripts/expertise/expertise_trader_warehousing_1.py b/scripts/expertise/expertise_trader_warehousing_1.py index c865daf6..9ca8b894 100644 --- a/scripts/expertise/expertise_trader_warehousing_1.py +++ b/scripts/expertise/expertise_trader_warehousing_1.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'trader_1a': - return - - actor.addSkill('expertise_trader_warehousing_1') - - actor.addSkillMod('vendor_item_limit', 50) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'trader_1a': - return - - actor.removeSkill('expertise_trader_warehousing_1') - - actor.removeSkillMod('vendor_item_limit', 50) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_trader_trader_warehousing_1") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_trader_trader_warehousing_1") return diff --git a/scripts/expertise/expertise_trader_warehousing_2.py b/scripts/expertise/expertise_trader_warehousing_2.py index 99f6db9d..5541c71e 100644 --- a/scripts/expertise/expertise_trader_warehousing_2.py +++ b/scripts/expertise/expertise_trader_warehousing_2.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'trader_1a': - return - - actor.addSkill('expertise_trader_warehousing_2') - - actor.addSkillMod('vendor_item_limit', 50) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'trader_1a': - return - - actor.removeSkill('expertise_trader_warehousing_2') - - actor.removeSkillMod('vendor_item_limit', 50) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_trader_trader_warehousing_2") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_trader_trader_warehousing_2") return diff --git a/scripts/expertise/expertise_trader_warehousing_3.py b/scripts/expertise/expertise_trader_warehousing_3.py index 19d00373..eb1dc350 100644 --- a/scripts/expertise/expertise_trader_warehousing_3.py +++ b/scripts/expertise/expertise_trader_warehousing_3.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'trader_1a': - return - - actor.addSkill('expertise_trader_warehousing_3') - - actor.addSkillMod('vendor_item_limit', 50) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'trader_1a': - return - - actor.removeSkill('expertise_trader_warehousing_3') - - actor.removeSkillMod('vendor_item_limit', 50) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_trader_trader_warehousing_3") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_trader_trader_warehousing_3") return diff --git a/scripts/expertise/expertise_trader_warehousing_4.py b/scripts/expertise/expertise_trader_warehousing_4.py index cb2f936c..96495edd 100644 --- a/scripts/expertise/expertise_trader_warehousing_4.py +++ b/scripts/expertise/expertise_trader_warehousing_4.py @@ -1,48 +1,9 @@ import sys -def addExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'trader_1a': - return - - actor.addSkill('expertise_trader_warehousing_4') - - actor.addSkillMod('vendor_item_limit', 50) - - addAbilities(core, actor, player) - - return - -def removeExpertisePoint(core, actor): - - player = actor.getSlottedObject('ghost') - - if not player: - return - - if not player.getProfession() == 'trader_1a': - return - - actor.removeSkill('expertise_trader_warehousing_4') - - actor.removeSkillMod('vendor_item_limit', 50) - - removeAbilities(core, actor, player) - - return - -# this checks what abilities the player gets by level, need to also call this on level-up def addAbilities(core, actor, player): - - + actor.addAbility("expertise_trader_trader_warehousing_4") return def removeAbilities(core, actor, player): - - + actor.removeAbility("expertise_trader_trader_warehousing_4") return diff --git a/scripts/faction/aakuans.py b/scripts/faction/aakuans.py new file mode 100644 index 00000000..a8fc0c39 --- /dev/null +++ b/scripts/faction/aakuans.py @@ -0,0 +1,9 @@ +import sys + +def isAlly(ally): + return 0 + +def isEnemy(enemy): + if enemy == 'fed_dub' or enemy == 'binayre' or enemy == 'liberation_party': + return 1 + return 0 \ No newline at end of file diff --git a/scripts/faction/afarathu.py b/scripts/faction/afarathu.py new file mode 100644 index 00000000..80a24805 --- /dev/null +++ b/scripts/faction/afarathu.py @@ -0,0 +1,9 @@ +import sys + +def isAlly(ally): + return 0 + +def isEnemy(enemy): + if enemy == 'corsec': + return 1 + return 0 \ No newline at end of file diff --git a/scripts/faction/alkhara.py b/scripts/faction/alkhara.py new file mode 100644 index 00000000..3553adcd --- /dev/null +++ b/scripts/faction/alkhara.py @@ -0,0 +1,9 @@ +import sys + +def isAlly(ally): + return 0 + +def isEnemy(enemy): + if enemy == 'tusken_raider': + return 1 + return 0 \ No newline at end of file diff --git a/scripts/faction/bandit.py b/scripts/faction/bandit.py new file mode 100644 index 00000000..bd97f757 --- /dev/null +++ b/scripts/faction/bandit.py @@ -0,0 +1,9 @@ +import sys + +def isAlly(ally): + return 0 + +def isEnemy(enemy): + if enemy == 'townsperson': + return 1 + return 0 \ No newline at end of file diff --git a/scripts/faction/beldonnas_league.py b/scripts/faction/beldonnas_league.py new file mode 100644 index 00000000..c15dab6d --- /dev/null +++ b/scripts/faction/beldonnas_league.py @@ -0,0 +1,11 @@ +import sys + +def isAlly(ally): + if ally == 'corsec': + return 1 + return 0 + +def isEnemy(enemy): + if enemy == 'followers_of_lord_nyax' or enemy == 'lost_aqualish': + return 1 + return 0 \ No newline at end of file diff --git a/scripts/faction/binayre.py b/scripts/faction/binayre.py new file mode 100644 index 00000000..5eb7703b --- /dev/null +++ b/scripts/faction/binayre.py @@ -0,0 +1,9 @@ +import sys + +def isAlly(ally): + return 0 + +def isEnemy(enemy): + if enemy == 'fed_dub' or enemy == 'aakuans' or enemy == 'corsec': + return 1 + return 0 \ No newline at end of file diff --git a/scripts/faction/bloodrazor.py b/scripts/faction/bloodrazor.py new file mode 100644 index 00000000..78220da0 --- /dev/null +++ b/scripts/faction/bloodrazor.py @@ -0,0 +1,9 @@ +import sys + +def isAlly(ally): + return 0 + +def isEnemy(enemy): + if enemy == 'canyon_corsair' or enemy == 'nym': + return 1 + return 0 \ No newline at end of file diff --git a/scripts/faction/borvo.py b/scripts/faction/borvo.py new file mode 100644 index 00000000..1dfa01f8 --- /dev/null +++ b/scripts/faction/borvo.py @@ -0,0 +1,9 @@ +import sys + +def isAlly(ally): + return 0 + +def isEnemy(enemy): + if enemy == 'gungan' or enemy == 'trade_federation' or enemy == 'jabba': + return 1 + return 0 \ No newline at end of file diff --git a/scripts/faction/canyon_corsair.py b/scripts/faction/canyon_corsair.py new file mode 100644 index 00000000..f978debe --- /dev/null +++ b/scripts/faction/canyon_corsair.py @@ -0,0 +1,9 @@ +import sys + +def isAlly(ally): + return 0 + +def isEnemy(enemy): + if enemy == 'bloodrazor' or enemy == 'nym': + return 1 + return 0 \ No newline at end of file diff --git a/scripts/faction/cobral.py b/scripts/faction/cobral.py new file mode 100644 index 00000000..139fe6a1 --- /dev/null +++ b/scripts/faction/cobral.py @@ -0,0 +1,9 @@ +import sys + +def isAlly(ally): + return 0 + +def isEnemy(enemy): + if enemy == 'restuss': + return 1 + return 0 \ No newline at end of file diff --git a/scripts/faction/cor_swoop.py b/scripts/faction/cor_swoop.py new file mode 100644 index 00000000..7d2ffab5 --- /dev/null +++ b/scripts/faction/cor_swoop.py @@ -0,0 +1,9 @@ +import sys + +def isAlly(ally): + return 0 + +def isEnemy(enemy): + if enemy == 'smashball': + return 1 + return 0 \ No newline at end of file diff --git a/scripts/faction/corsec.py b/scripts/faction/corsec.py new file mode 100644 index 00000000..30ca26bf --- /dev/null +++ b/scripts/faction/corsec.py @@ -0,0 +1,9 @@ +import sys + +def isAlly(ally): + return 0 + +def isEnemy(enemy): + if enemy == 'afarathu' or enemy == 'followers_of_lord_nyax' or enemy == 'beldonnas_league' or enemy == 'monumenter' or enemy == 'rogue_corsec' or enemy == 'lost_aqualish': + return 1 + return 0 \ No newline at end of file diff --git a/scripts/faction/dantari_raiders.py b/scripts/faction/dantari_raiders.py new file mode 100644 index 00000000..f1dd456b --- /dev/null +++ b/scripts/faction/dantari_raiders.py @@ -0,0 +1,9 @@ +import sys + +def isAlly(ally): + return 0 + +def isEnemy(enemy): + if enemy == 'kunga_tribe' or enemy == 'mokk_tribe' or enemy == 'janta_tribe': + return 1 + return 0 \ No newline at end of file diff --git a/scripts/faction/desert_demon.py b/scripts/faction/desert_demon.py new file mode 100644 index 00000000..9dd1a4d4 --- /dev/null +++ b/scripts/faction/desert_demon.py @@ -0,0 +1,9 @@ +import sys + +def isAlly(ally): + return 0 + +def isEnemy(enemy): + if enemy == 'swoop': + return 1 + return 0 \ No newline at end of file diff --git a/scripts/faction/donkuwah_tribe.py b/scripts/faction/donkuwah_tribe.py new file mode 100644 index 00000000..6db0ca51 --- /dev/null +++ b/scripts/faction/donkuwah_tribe.py @@ -0,0 +1,9 @@ +import sys + +def isAlly(ally): + return 0 + +def isEnemy(enemy): + if enemy == 'gondula_tribe' or enemy == 'panshee_tribe': + return 1 + return 0 \ No newline at end of file diff --git a/scripts/faction/drall.py b/scripts/faction/drall.py new file mode 100644 index 00000000..5059caaf --- /dev/null +++ b/scripts/faction/drall.py @@ -0,0 +1,9 @@ +import sys + +def isAlly(ally): + return 0 + +def isEnemy(enemy): + if enemy == 'corsec' or enemy == 'fed_dub': + return 1 + return 0 \ No newline at end of file diff --git a/scripts/faction/endor_marauder.py b/scripts/faction/endor_marauder.py new file mode 100644 index 00000000..6db0ca51 --- /dev/null +++ b/scripts/faction/endor_marauder.py @@ -0,0 +1,9 @@ +import sys + +def isAlly(ally): + return 0 + +def isEnemy(enemy): + if enemy == 'gondula_tribe' or enemy == 'panshee_tribe': + return 1 + return 0 \ No newline at end of file diff --git a/scripts/faction/fed_dub.py b/scripts/faction/fed_dub.py new file mode 100644 index 00000000..20a018fb --- /dev/null +++ b/scripts/faction/fed_dub.py @@ -0,0 +1,9 @@ +import sys + +def isAlly(ally): + return 0 + +def isEnemy(enemy): + if enemy == 'liberation_party' or enemy == 'binayre' or enemy == 'lost_aqualish' or enemy == 'drall': + return 1 + return 0 \ No newline at end of file diff --git a/scripts/faction/flail.py b/scripts/faction/flail.py new file mode 100644 index 00000000..37a3ff1d --- /dev/null +++ b/scripts/faction/flail.py @@ -0,0 +1,9 @@ +import sys + +def isAlly(ally): + return 0 + +def isEnemy(enemy): + if enemy == 'hidden_daggers': + return 1 + return 0 \ No newline at end of file diff --git a/scripts/faction/followers_of_lord_nyax.py b/scripts/faction/followers_of_lord_nyax.py new file mode 100644 index 00000000..35c07b91 --- /dev/null +++ b/scripts/faction/followers_of_lord_nyax.py @@ -0,0 +1,9 @@ +import sys + +def isAlly(ally): + return 0 + +def isEnemy(enemy): + if enemy == 'corsec' or enemy == 'beldonnas_league': + return 1 + return 0 \ No newline at end of file diff --git a/scripts/faction/forest_kerritamba.py b/scripts/faction/forest_kerritamba.py new file mode 100644 index 00000000..1213cf20 --- /dev/null +++ b/scripts/faction/forest_kerritamba.py @@ -0,0 +1,9 @@ +import sys + +def isAlly(ally): + return 0 + +def isEnemy(enemy): + if enemy == 'forest_outcast': + return 1 + return 0 \ No newline at end of file diff --git a/scripts/faction/forest_outcast.py b/scripts/faction/forest_outcast.py new file mode 100644 index 00000000..05faa8d3 --- /dev/null +++ b/scripts/faction/forest_outcast.py @@ -0,0 +1,9 @@ +import sys + +def isAlly(ally): + return 0 + +def isEnemy(enemy): + if enemy == 'forest_kerritamba': + return 1 + return 0 \ No newline at end of file diff --git a/scripts/faction/fs_villager.py b/scripts/faction/fs_villager.py new file mode 100644 index 00000000..0fd5d988 --- /dev/null +++ b/scripts/faction/fs_villager.py @@ -0,0 +1,9 @@ +import sys + +def isAlly(ally): + return 0 + +def isEnemy(enemy): + if enemy == 'sith_shadow': + return 1 + return 0 \ No newline at end of file diff --git a/scripts/faction/garyn.py b/scripts/faction/garyn.py new file mode 100644 index 00000000..139fe6a1 --- /dev/null +++ b/scripts/faction/garyn.py @@ -0,0 +1,9 @@ +import sys + +def isAlly(ally): + return 0 + +def isEnemy(enemy): + if enemy == 'restuss': + return 1 + return 0 \ No newline at end of file diff --git a/scripts/faction/gondula_tribe.py b/scripts/faction/gondula_tribe.py new file mode 100644 index 00000000..c0078e6a --- /dev/null +++ b/scripts/faction/gondula_tribe.py @@ -0,0 +1,9 @@ +import sys + +def isAlly(ally): + return 0 + +def isEnemy(enemy): + if enemy == 'donkuwah_tribe' or enemy == 'korga_tribe' or enemy == 'panshee_tribe' or enemy == 'pubam' or enemy == 'endor_marauder': + return 1 + return 0 \ No newline at end of file diff --git a/scripts/faction/gungan.py b/scripts/faction/gungan.py new file mode 100644 index 00000000..1f9355e5 --- /dev/null +++ b/scripts/faction/gungan.py @@ -0,0 +1,9 @@ +import sys + +def isAlly(ally): + return 0 + +def isEnemy(enemy): + if enemy == 'plasma_thief' or enemy == 'swamp_rat' or enemy == 'borvo': + return 1 + return 0 \ No newline at end of file diff --git a/scripts/faction/hidden_daggers.py b/scripts/faction/hidden_daggers.py new file mode 100644 index 00000000..34c20129 --- /dev/null +++ b/scripts/faction/hidden_daggers.py @@ -0,0 +1,11 @@ +import sys + +def isAlly(ally): + if ally == 'rogue_corsec': + return 1 + return 0 + +def isEnemy(enemy): + if enemy == 'corsec' or enemy == 'beldonnas_league' or enemy == 'flail': + return 1 + return 0 \ No newline at end of file diff --git a/scripts/faction/hutt.py b/scripts/faction/hutt.py new file mode 100644 index 00000000..0d468932 --- /dev/null +++ b/scripts/faction/hutt.py @@ -0,0 +1,11 @@ +import sys + +def isAlly(ally): + if ally == 'panshee_tribe': + return 1 + return 0 + +def isEnemy(enemy): + if enemy == 'naboo_security_force' or enemy == 'nym' or enemy == 'imperial' or enemy == 'jabba' or enemy == 'borvo' or enemy == 'corsec' or enemy == 'narmle': + return 1 + return 0 \ No newline at end of file diff --git a/scripts/faction/imperial.py b/scripts/faction/imperial.py new file mode 100644 index 00000000..b5bc8cc0 --- /dev/null +++ b/scripts/faction/imperial.py @@ -0,0 +1,9 @@ +import sys + +def isAlly(ally): + return 0 + +def isEnemy(enemy): + if enemy == 'rebel': + return 1 + return 0 \ No newline at end of file diff --git a/scripts/faction/jabba.py b/scripts/faction/jabba.py new file mode 100644 index 00000000..5840595b --- /dev/null +++ b/scripts/faction/jabba.py @@ -0,0 +1,11 @@ +import sys + +def isAlly(ally): + if ally == 'hutt': + return 1 + return 0 + +def isEnemy(enemy): + if enemy == 'valarian' or enemy == 'borvo': + return 1 + return 0 \ No newline at end of file diff --git a/scripts/faction/janta_tribe.py b/scripts/faction/janta_tribe.py new file mode 100644 index 00000000..b446a0a0 --- /dev/null +++ b/scripts/faction/janta_tribe.py @@ -0,0 +1,9 @@ +import sys + +def isAlly(ally): + return 0 + +def isEnemy(enemy): + if enemy == 'kunga_tribe' or enemy == 'dantari_raiders': + return 1 + return 0 \ No newline at end of file diff --git a/scripts/faction/jawa.py b/scripts/faction/jawa.py new file mode 100644 index 00000000..3553adcd --- /dev/null +++ b/scripts/faction/jawa.py @@ -0,0 +1,9 @@ +import sys + +def isAlly(ally): + return 0 + +def isEnemy(enemy): + if enemy == 'tusken_raider': + return 1 + return 0 \ No newline at end of file diff --git a/scripts/faction/kobola.py b/scripts/faction/kobola.py new file mode 100644 index 00000000..8befaec5 --- /dev/null +++ b/scripts/faction/kobola.py @@ -0,0 +1,9 @@ +import sys + +def isAlly(ally): + return 0 + +def isEnemy(enemy): + if enemy == 'narmle' or enemy == 'spice_collective': + return 1 + return 0 \ No newline at end of file diff --git a/scripts/faction/korga_tribe.py b/scripts/faction/korga_tribe.py new file mode 100644 index 00000000..6db0ca51 --- /dev/null +++ b/scripts/faction/korga_tribe.py @@ -0,0 +1,9 @@ +import sys + +def isAlly(ally): + return 0 + +def isEnemy(enemy): + if enemy == 'gondula_tribe' or enemy == 'panshee_tribe': + return 1 + return 0 \ No newline at end of file diff --git a/scripts/faction/kunga_tribe.py b/scripts/faction/kunga_tribe.py new file mode 100644 index 00000000..52e241cb --- /dev/null +++ b/scripts/faction/kunga_tribe.py @@ -0,0 +1,9 @@ +import sys + +def isAlly(ally): + return 0 + +def isEnemy(enemy): + if enemy == 'mokk_tribe' or enemy == 'dantari_raiders': + return 1 + return 0 \ No newline at end of file diff --git a/scripts/faction/liberation_party.py b/scripts/faction/liberation_party.py new file mode 100644 index 00000000..2fff2b6f --- /dev/null +++ b/scripts/faction/liberation_party.py @@ -0,0 +1,9 @@ +import sys + +def isAlly(ally): + return 0 + +def isEnemy(enemy): + if enemy == 'fed_dub' or enemy == 'corsec': + return 1 + return 0 \ No newline at end of file diff --git a/scripts/faction/lok_mercenaries.py b/scripts/faction/lok_mercenaries.py new file mode 100644 index 00000000..ebf10bf9 --- /dev/null +++ b/scripts/faction/lok_mercenaries.py @@ -0,0 +1,9 @@ +import sys + +def isAlly(ally): + return 0 + +def isEnemy(enemy): + if enemy == 'bloodrazor' or enemy == 'canyon_corsair': + return 1 + return 0 \ No newline at end of file diff --git a/scripts/faction/lost_aqualish.py b/scripts/faction/lost_aqualish.py new file mode 100644 index 00000000..9aef6e55 --- /dev/null +++ b/scripts/faction/lost_aqualish.py @@ -0,0 +1,9 @@ +import sys + +def isAlly(ally): + return 0 + +def isEnemy(enemy): + if enemy == 'beldonnas_league' or enemy == 'fed_dub' or enemy == 'corsec': + return 1 + return 0 \ No newline at end of file diff --git a/scripts/faction/meatlump.py b/scripts/faction/meatlump.py new file mode 100644 index 00000000..3e432825 --- /dev/null +++ b/scripts/faction/meatlump.py @@ -0,0 +1,9 @@ +import sys + +def isAlly(ally): + return 0 + +def isEnemy(enemy): + if enemy == 'corsec' or enemy == 'rogue_corsec' or enemy == 'beldonnas_league': + return 1 + return 0 \ No newline at end of file diff --git a/scripts/faction/mokk_tribe.py b/scripts/faction/mokk_tribe.py new file mode 100644 index 00000000..93e05b64 --- /dev/null +++ b/scripts/faction/mokk_tribe.py @@ -0,0 +1,9 @@ +import sys + +def isAlly(ally): + return 0 + +def isEnemy(enemy): + if enemy == 'janta_tribe' or enemy == 'dantari_raiders': + return 1 + return 0 \ No newline at end of file diff --git a/scripts/faction/monumenter.py b/scripts/faction/monumenter.py new file mode 100644 index 00000000..35c07b91 --- /dev/null +++ b/scripts/faction/monumenter.py @@ -0,0 +1,9 @@ +import sys + +def isAlly(ally): + return 0 + +def isEnemy(enemy): + if enemy == 'corsec' or enemy == 'beldonnas_league': + return 1 + return 0 \ No newline at end of file diff --git a/scripts/faction/mtn_clan.py b/scripts/faction/mtn_clan.py new file mode 100644 index 00000000..e2b7c145 --- /dev/null +++ b/scripts/faction/mtn_clan.py @@ -0,0 +1,9 @@ +import sys + +def isAlly(ally): + return 0 + +def isEnemy(enemy): + if enemy == 'nightsister': + return 1 + return 0 \ No newline at end of file diff --git a/scripts/faction/naboo.py b/scripts/faction/naboo.py new file mode 100644 index 00000000..22519151 --- /dev/null +++ b/scripts/faction/naboo.py @@ -0,0 +1,9 @@ +import sys + +def isAlly(ally): + return 0 + +def isEnemy(enemy): + if enemy == 'borvo': + return 1 + return 0 \ No newline at end of file diff --git a/scripts/faction/naboo_pirate.py b/scripts/faction/naboo_pirate.py new file mode 100644 index 00000000..d409c4ff --- /dev/null +++ b/scripts/faction/naboo_pirate.py @@ -0,0 +1,9 @@ +import sys + +def isAlly(ally): + return 0 + +def isEnemy(enemy): + if enemy == 'naboo_security_force': + return 1 + return 0 \ No newline at end of file diff --git a/scripts/faction/naboo_security_force.py b/scripts/faction/naboo_security_force.py new file mode 100644 index 00000000..ec32a708 --- /dev/null +++ b/scripts/faction/naboo_security_force.py @@ -0,0 +1,9 @@ +import sys + +def isAlly(ally): + return 0 + +def isEnemy(enemy): + if enemy == 'borvo' or enemy == 'naboo_pirate' or enemy == 'plasma_thief' or enemy == 'swamp_rat' or enemy == 'trade_federation': + return 1 + return 0 \ No newline at end of file diff --git a/scripts/faction/narmle.py b/scripts/faction/narmle.py new file mode 100644 index 00000000..3188e87c --- /dev/null +++ b/scripts/faction/narmle.py @@ -0,0 +1,11 @@ +import sys + +def isAlly(ally): + if ally == 'restuss': + return 1 + return 0 + +def isEnemy(enemy): + if enemy == 'narmle' or enemy == 'spice_collective' or enemy == 'kobola': + return 1 + return 0 \ No newline at end of file diff --git a/scripts/faction/nightsister.py b/scripts/faction/nightsister.py new file mode 100644 index 00000000..cf1f8c4e --- /dev/null +++ b/scripts/faction/nightsister.py @@ -0,0 +1,9 @@ +import sys + +def isAlly(ally): + return 0 + +def isEnemy(enemy): + if enemy == 'mtn_clan' or enemy == 'imperial': + return 1 + return 0 \ No newline at end of file diff --git a/scripts/faction/nym.py b/scripts/faction/nym.py new file mode 100644 index 00000000..ebf10bf9 --- /dev/null +++ b/scripts/faction/nym.py @@ -0,0 +1,9 @@ +import sys + +def isAlly(ally): + return 0 + +def isEnemy(enemy): + if enemy == 'bloodrazor' or enemy == 'canyon_corsair': + return 1 + return 0 \ No newline at end of file diff --git a/scripts/faction/olag_greck.py b/scripts/faction/olag_greck.py new file mode 100644 index 00000000..35c07b91 --- /dev/null +++ b/scripts/faction/olag_greck.py @@ -0,0 +1,9 @@ +import sys + +def isAlly(ally): + return 0 + +def isEnemy(enemy): + if enemy == 'corsec' or enemy == 'beldonnas_league': + return 1 + return 0 \ No newline at end of file diff --git a/scripts/faction/panshee_tribe.py b/scripts/faction/panshee_tribe.py new file mode 100644 index 00000000..6ea96a0d --- /dev/null +++ b/scripts/faction/panshee_tribe.py @@ -0,0 +1,9 @@ +import sys + +def isAlly(ally): + return 0 + +def isEnemy(enemy): + if enemy == 'donkuwah_tribe' or enemy == 'korga_tribe' or enemy == 'gondula_tribe' or enemy == 'pubam' or enemy == 'endor_marauder': + return 1 + return 0 \ No newline at end of file diff --git a/scripts/faction/pirate.py b/scripts/faction/pirate.py new file mode 100644 index 00000000..a8fc0c39 --- /dev/null +++ b/scripts/faction/pirate.py @@ -0,0 +1,9 @@ +import sys + +def isAlly(ally): + return 0 + +def isEnemy(enemy): + if enemy == 'fed_dub' or enemy == 'binayre' or enemy == 'liberation_party': + return 1 + return 0 \ No newline at end of file diff --git a/scripts/faction/plasma_thief.py b/scripts/faction/plasma_thief.py new file mode 100644 index 00000000..89a851e9 --- /dev/null +++ b/scripts/faction/plasma_thief.py @@ -0,0 +1,9 @@ +import sys + +def isAlly(ally): + return 0 + +def isEnemy(enemy): + if enemy == 'gungan': + return 1 + return 0 \ No newline at end of file diff --git a/scripts/faction/pubam.py b/scripts/faction/pubam.py new file mode 100644 index 00000000..6db0ca51 --- /dev/null +++ b/scripts/faction/pubam.py @@ -0,0 +1,9 @@ +import sys + +def isAlly(ally): + return 0 + +def isEnemy(enemy): + if enemy == 'gondula_tribe' or enemy == 'panshee_tribe': + return 1 + return 0 \ No newline at end of file diff --git a/scripts/faction/rebel.py b/scripts/faction/rebel.py new file mode 100644 index 00000000..0d685a6a --- /dev/null +++ b/scripts/faction/rebel.py @@ -0,0 +1,9 @@ +import sys + +def isAlly(ally): + return 0 + +def isEnemy(enemy): + if enemy == 'imperial': + return 1 + return 0 \ No newline at end of file diff --git a/scripts/faction/restuss.py b/scripts/faction/restuss.py new file mode 100644 index 00000000..9ce8318a --- /dev/null +++ b/scripts/faction/restuss.py @@ -0,0 +1,11 @@ +import sys + +def isAlly(ally): + if ally == 'narmle': + return 1 + return 0 + +def isEnemy(enemy): + if enemy == 'garyn' or enemy == 'cobral': + return 1 + return 0 \ No newline at end of file diff --git a/scripts/faction/rogue_corsec.py b/scripts/faction/rogue_corsec.py new file mode 100644 index 00000000..38fd4f3a --- /dev/null +++ b/scripts/faction/rogue_corsec.py @@ -0,0 +1,11 @@ +import sys + +def isAlly(ally): + if ally == 'hidden_daggers': + return 1 + return 0 + +def isEnemy(enemy): + if enemy == 'corsec': + return 1 + return 0 \ No newline at end of file diff --git a/scripts/faction/rorgungan.py b/scripts/faction/rorgungan.py new file mode 100644 index 00000000..f39573c6 --- /dev/null +++ b/scripts/faction/rorgungan.py @@ -0,0 +1,9 @@ +import sys + +def isAlly(ally): + return 0 + +def isEnemy(enemy): + if enemy == 'spice_collective': + return 1 + return 0 \ No newline at end of file diff --git a/scripts/faction/sif.py b/scripts/faction/sif.py new file mode 100644 index 00000000..04d90a0e --- /dev/null +++ b/scripts/faction/sif.py @@ -0,0 +1,11 @@ +import sys + +def isAlly(ally): + if ally == 'hutt': + return 1 + return 0 + +def isEnemy(enemy): + if enemy == 'rebel' or enemy == 'imperial': + return 1 + return 0 \ No newline at end of file diff --git a/scripts/faction/sith_shadow.py b/scripts/faction/sith_shadow.py new file mode 100644 index 00000000..e89c90da --- /dev/null +++ b/scripts/faction/sith_shadow.py @@ -0,0 +1,11 @@ +import sys + +def isAlly(ally): + if ally == 'rebel' or ally == 'imperial': + return 1 + return 0 + +def isEnemy(enemy): + if enemy == 'fs_villager': + return 1 + return 0 \ No newline at end of file diff --git a/scripts/faction/smashball.py b/scripts/faction/smashball.py new file mode 100644 index 00000000..89e21659 --- /dev/null +++ b/scripts/faction/smashball.py @@ -0,0 +1,9 @@ +import sys + +def isAlly(ally): + return 0 + +def isEnemy(enemy): + if enemy == 'corsec' or enemy == 'cor_swoop': + return 1 + return 0 \ No newline at end of file diff --git a/scripts/faction/spice_collective.py b/scripts/faction/spice_collective.py new file mode 100644 index 00000000..a95f585e --- /dev/null +++ b/scripts/faction/spice_collective.py @@ -0,0 +1,9 @@ +import sys + +def isAlly(ally): + return 0 + +def isEnemy(enemy): + if enemy == 'narmle' or enemy == 'rorgungan' or enemy == 'kobola': + return 1 + return 0 \ No newline at end of file diff --git a/scripts/faction/spider_nightsister.py b/scripts/faction/spider_nightsister.py new file mode 100644 index 00000000..90a4f892 --- /dev/null +++ b/scripts/faction/spider_nightsister.py @@ -0,0 +1,9 @@ +import sys + +def isAlly(ally): + return 0 + +def isEnemy(enemy): + if enemy == 'mtn_clan': + return 1 + return 0 \ No newline at end of file diff --git a/scripts/faction/swamp_rat.py b/scripts/faction/swamp_rat.py new file mode 100644 index 00000000..89a851e9 --- /dev/null +++ b/scripts/faction/swamp_rat.py @@ -0,0 +1,9 @@ +import sys + +def isAlly(ally): + return 0 + +def isEnemy(enemy): + if enemy == 'gungan': + return 1 + return 0 \ No newline at end of file diff --git a/scripts/faction/swoop.py b/scripts/faction/swoop.py new file mode 100644 index 00000000..24e9984a --- /dev/null +++ b/scripts/faction/swoop.py @@ -0,0 +1,9 @@ +import sys + +def isAlly(ally): + return 0 + +def isEnemy(enemy): + if enemy == 'desert_demon': + return 1 + return 0 \ No newline at end of file diff --git a/scripts/faction/thug.py b/scripts/faction/thug.py new file mode 100644 index 00000000..bd97f757 --- /dev/null +++ b/scripts/faction/thug.py @@ -0,0 +1,9 @@ +import sys + +def isAlly(ally): + return 0 + +def isEnemy(enemy): + if enemy == 'townsperson': + return 1 + return 0 \ No newline at end of file diff --git a/scripts/faction/townsperson.py b/scripts/faction/townsperson.py new file mode 100644 index 00000000..e747a256 --- /dev/null +++ b/scripts/faction/townsperson.py @@ -0,0 +1,11 @@ +import sys + +def isAlly(ally): + if ally == 'rebel' or ally == 'imperial': + return 1 + return 0 + +def isEnemy(enemy): + if enemy == 'thug' or enemy == 'bandit': + return 1 + return 0 \ No newline at end of file diff --git a/scripts/faction/trade_federation.py b/scripts/faction/trade_federation.py new file mode 100644 index 00000000..74674464 --- /dev/null +++ b/scripts/faction/trade_federation.py @@ -0,0 +1,9 @@ +import sys + +def isAlly(ally): + return 0 + +def isEnemy(enemy): + if enemy == 'borvo' or enemy == 'naboo_security_force': + return 1 + return 0 \ No newline at end of file diff --git a/scripts/faction/tusken_raider.py b/scripts/faction/tusken_raider.py new file mode 100644 index 00000000..4a81e25b --- /dev/null +++ b/scripts/faction/tusken_raider.py @@ -0,0 +1,9 @@ +import sys + +def isAlly(ally): + return 0 + +def isEnemy(enemy): + if enemy == 'jawa' or enemy == 'alkhara': + return 1 + return 0 \ No newline at end of file diff --git a/scripts/faction/valarian.py b/scripts/faction/valarian.py new file mode 100644 index 00000000..9d5ef701 --- /dev/null +++ b/scripts/faction/valarian.py @@ -0,0 +1,9 @@ +import sys + +def isAlly(ally): + return 0 + +def isEnemy(enemy): + if enemy == 'jabba': + return 1 + return 0 \ No newline at end of file diff --git a/scripts/faction/yavin_scavenger.py b/scripts/faction/yavin_scavenger.py new file mode 100644 index 00000000..0c95933c --- /dev/null +++ b/scripts/faction/yavin_scavenger.py @@ -0,0 +1,9 @@ +import sys + +def isAlly(ally): + return 0 + +def isEnemy(enemy): + if enemy == 'hutt' or enemy == 'jabba': + return 1 + return 0 \ No newline at end of file diff --git a/scripts/houses/player_cityhall_corellia_style_01.py b/scripts/houses/player_cityhall_corellia_style_01.py new file mode 100644 index 00000000..ff396cb0 --- /dev/null +++ b/scripts/houses/player_cityhall_corellia_style_01.py @@ -0,0 +1,16 @@ +import sys +from services.housing import HouseTemplate +from engine.resources.scene import Point3D + +def setup(housingTemplates): + houseTemplate = HouseTemplate("object/tangible/deed/city_deed/shared_cityhall_corellia_deed.iff", "object/building/player/city/shared_cityhall_corellia.iff", 0) + + houseTemplate.addBuildingSign("object/tangible/sign/player/shared_house_address.iff", Point3D(1, 2, 3)) + houseTemplate.addPlaceablePlanet("corellia") + houseTemplate.addPlaceablePlanet("talus") + houseTemplate.setDefaultItemLimit(400) + houseTemplate.setBaseMaintenanceRate(308) + + housingTemplates.put(houseTemplate.getDeedTemplate(), houseTemplate) + + return \ No newline at end of file diff --git a/scripts/houses/player_cityhall_naboo_style_01.py b/scripts/houses/player_cityhall_naboo_style_01.py new file mode 100644 index 00000000..8bb52c69 --- /dev/null +++ b/scripts/houses/player_cityhall_naboo_style_01.py @@ -0,0 +1,16 @@ +import sys +from services.housing import HouseTemplate +from engine.resources.scene import Point3D + +def setup(housingTemplates): + houseTemplate = HouseTemplate("object/tangible/deed/city_deed/shared_cityhall_naboo_deed.iff", "object/building/player/city/shared_cityhall_naboo.iff", 0) + + houseTemplate.addBuildingSign("object/tangible/sign/player/shared_house_address.iff", Point3D(1, 2, 3)) + houseTemplate.addPlaceablePlanet("naboo") + houseTemplate.addPlaceablePlanet("rori") + houseTemplate.addPlaceablePlanet("dantooine") + houseTemplate.setDefaultItemLimit(400) + houseTemplate.setBaseMaintenanceRate(308) + + housingTemplates.put(houseTemplate.getDeedTemplate(), houseTemplate) + return \ No newline at end of file diff --git a/scripts/houses/player_cityhall_tatooine_style_01.py b/scripts/houses/player_cityhall_tatooine_style_01.py new file mode 100644 index 00000000..766ed7cf --- /dev/null +++ b/scripts/houses/player_cityhall_tatooine_style_01.py @@ -0,0 +1,16 @@ +import sys +from services.housing import HouseTemplate +from engine.resources.scene import Point3D + +def setup(housingTemplates): + houseTemplate = HouseTemplate("object/tangible/deed/city_deed/shared_cityhall_tatooine_deed.iff", "object/building/player/city/shared_cityhall_tatooine.iff", 0) + + houseTemplate.addBuildingSign("object/tangible/sign/player/shared_house_address.iff", Point3D(1, 2, 3)) + houseTemplate.addPlaceablePlanet("tatooine") + houseTemplate.addPlaceablePlanet("dantooine") + houseTemplate.addPlaceablePlanet("lok") + houseTemplate.setDefaultItemLimit(400) + houseTemplate.setBaseMaintenanceRate(308) + + housingTemplates.put(houseTemplate.getDeedTemplate(), houseTemplate) + return \ No newline at end of file diff --git a/scripts/houses/player_garden_tatooine_sml_01.py b/scripts/houses/player_garden_tatooine_sml_01.py new file mode 100644 index 00000000..ed3b2981 --- /dev/null +++ b/scripts/houses/player_garden_tatooine_sml_01.py @@ -0,0 +1,15 @@ +import sys +from services.housing import HouseTemplate +from engine.resources.scene import Point3D + +def setup(housingTemplates): + houseTemplate = HouseTemplate("object/tangible/deed/city_deed/shared_garden_tatooine_sml_01_deed.iff", "object/building/player/city/shared_garden_tatooine_sml_01.iff", 0) + + houseTemplate.addBuildingSign("object/tangible/sign/player/shared_house_address.iff", Point3D(1, 2, 3)) + houseTemplate.addPlaceablePlanet("tatooine") + houseTemplate.addPlaceablePlanet("dantooine") + houseTemplate.addPlaceablePlanet("lok") + houseTemplate.setDefaultItemLimit(0) + + housingTemplates.put(houseTemplate.getDeedTemplate(), houseTemplate) + return \ No newline at end of file diff --git a/scripts/houses/player_guildhall_corellia_style_01.py b/scripts/houses/player_guildhall_corellia_style_01.py new file mode 100644 index 00000000..31cb89f8 --- /dev/null +++ b/scripts/houses/player_guildhall_corellia_style_01.py @@ -0,0 +1,15 @@ +import sys +from services.housing import HouseTemplate +from engine.resources.scene import Point3D + +def setup(housingTemplates): + houseTemplate = HouseTemplate("object/tangible/deed/guild_deed/shared_corellia_guild_deed.iff", "object/building/player/shared_player_guildhall_corellia_style_01.iff", 5) + + houseTemplate.addBuildingSign("object/tangible/sign/player/shared_house_address.iff", Point3D(float(6), float(3), float(18.4))) + houseTemplate.addPlaceablePlanet("corellia") + houseTemplate.addPlaceablePlanet("talus") + houseTemplate.setDefaultItemLimit(400) + houseTemplate.setBaseMaintenanceRate(100) + + housingTemplates.put(houseTemplate.getDeedTemplate(), houseTemplate) + return \ No newline at end of file diff --git a/scripts/houses/player_guildhall_generic_style_01.py b/scripts/houses/player_guildhall_generic_style_01.py new file mode 100644 index 00000000..a60c94d6 --- /dev/null +++ b/scripts/houses/player_guildhall_generic_style_01.py @@ -0,0 +1,20 @@ +import sys +from services.housing import HouseTemplate +from engine.resources.scene import Point3D + +def setup(housingTemplates): + houseTemplate = HouseTemplate("object/tangible/deed/guild_deed/shared_generic_guild_deed.iff", "object/building/player/shared_player_guildhall_generic_style_01.iff", 5) + + houseTemplate.addBuildingSign("object/tangible/sign/player/shared_house_address.iff", Point3D(float(6), float(3), float(18.4))) + houseTemplate.addPlaceablePlanet("tatooine") + houseTemplate.addPlaceablePlanet("corellia") + houseTemplate.addPlaceablePlanet("naboo") + houseTemplate.addPlaceablePlanet("talus") + houseTemplate.addPlaceablePlanet("rori") + houseTemplate.addPlaceablePlanet("dantooine") + houseTemplate.addPlaceablePlanet("lok") + houseTemplate.setDefaultItemLimit(400) + houseTemplate.setBaseMaintenanceRate(100) + + housingTemplates.put(houseTemplate.getDeedTemplate(), houseTemplate) + return \ No newline at end of file diff --git a/scripts/houses/player_guildhall_naboo_style_01.py b/scripts/houses/player_guildhall_naboo_style_01.py new file mode 100644 index 00000000..c9a2777e --- /dev/null +++ b/scripts/houses/player_guildhall_naboo_style_01.py @@ -0,0 +1,16 @@ +import sys +from services.housing import HouseTemplate +from engine.resources.scene import Point3D + +def setup(housingTemplates): + houseTemplate = HouseTemplate("object/tangible/deed/guild_deed/shared_naboo_guild_deed.iff", "object/building/player/shared_player_guildhall_naboo_style_01.iff", 5) + + houseTemplate.addBuildingSign("object/tangible/sign/player/shared_house_address.iff", Point3D(float(6), float(3), float(18.4))) + houseTemplate.addPlaceablePlanet("naboo") + houseTemplate.addPlaceablePlanet("rori") + houseTemplate.addPlaceablePlanet("dantooine") + houseTemplate.setDefaultItemLimit(400) + houseTemplate.setBaseMaintenanceRate(100) + + housingTemplates.put(houseTemplate.getDeedTemplate(), houseTemplate) + return \ No newline at end of file diff --git a/scripts/houses/player_guildhall_tatooine_style_01.py b/scripts/houses/player_guildhall_tatooine_style_01.py new file mode 100644 index 00000000..05a70c0c --- /dev/null +++ b/scripts/houses/player_guildhall_tatooine_style_01.py @@ -0,0 +1,16 @@ +import sys +from services.housing import HouseTemplate +from engine.resources.scene import Point3D + +def setup(housingTemplates): + houseTemplate = HouseTemplate("object/tangible/deed/guild_deed/shared_tatooine_guild_deed.iff", "object/building/player/shared_player_guildhall_tatooine_style_01.iff", 5) + + houseTemplate.addBuildingSign("object/tangible/sign/player/shared_house_address.iff", Point3D(float(6), float(3), float(18.4))) + houseTemplate.addPlaceablePlanet("tatooine") + houseTemplate.addPlaceablePlanet("dantooine") + houseTemplate.addPlaceablePlanet("lok") + houseTemplate.setDefaultItemLimit(400) + houseTemplate.setBaseMaintenanceRate(100) + + housingTemplates.put(houseTemplate.getDeedTemplate(), houseTemplate) + return \ No newline at end of file diff --git a/scripts/houses/player_guildhall_tatooine_style_02.py b/scripts/houses/player_guildhall_tatooine_style_02.py new file mode 100644 index 00000000..451bb05a --- /dev/null +++ b/scripts/houses/player_guildhall_tatooine_style_02.py @@ -0,0 +1,16 @@ +import sys +from services.housing import HouseTemplate +from engine.resources.scene import Point3D + +def setup(housingTemplates): + houseTemplate = HouseTemplate("object/tangible/deed/guild_deed/shared_tatooine_guild_style_02_deed.iff", "object/building/player/shared_player_guildhall_tatooine_style_02.iff", 5) + + houseTemplate.addBuildingSign("object/tangible/sign/player/shared_house_address.iff", Point3D(float(5.5), float(4), float(12.7))) + houseTemplate.addPlaceablePlanet("tatooine") + houseTemplate.addPlaceablePlanet("dantooine") + houseTemplate.addPlaceablePlanet("lok") + houseTemplate.setDefaultItemLimit(400) + houseTemplate.setBaseMaintenanceRate(100) + + housingTemplates.put(houseTemplate.getDeedTemplate(), houseTemplate) + return \ No newline at end of file diff --git a/scripts/houses/player_house_atat.py b/scripts/houses/player_house_atat.py new file mode 100644 index 00000000..1ff4e466 --- /dev/null +++ b/scripts/houses/player_house_atat.py @@ -0,0 +1,20 @@ +import sys +from services.housing import HouseTemplate +from engine.resources.scene import Point3D + +def setup(housingTemplates): + houseTemplate = HouseTemplate("object/tangible/tcg/series5/shared_structure_deed_player_house_atat.iff", "object/building/player/shared_player_house_atat.iff", 3) + + houseTemplate.addBuildingSign("object/tangible/sign/player/shared_house_address.iff", Point3D(float(-3.8), float(5.86), float(15.1))) + houseTemplate.addPlaceablePlanet("tatooine") + houseTemplate.addPlaceablePlanet("corellia") + houseTemplate.addPlaceablePlanet("naboo") + houseTemplate.addPlaceablePlanet("talus") + houseTemplate.addPlaceablePlanet("rori") + houseTemplate.addPlaceablePlanet("dantooine") + houseTemplate.addPlaceablePlanet("lok") + houseTemplate.setDefaultItemLimit(350) + houseTemplate.setBaseMaintenanceRate(8) + + housingTemplates.put(houseTemplate.getDeedTemplate(), houseTemplate) + return \ No newline at end of file diff --git a/scripts/houses/player_house_corellia_large_style_01.py b/scripts/houses/player_house_corellia_large_style_01.py new file mode 100644 index 00000000..9c1382ce --- /dev/null +++ b/scripts/houses/player_house_corellia_large_style_01.py @@ -0,0 +1,15 @@ +import sys +from services.housing import HouseTemplate +from engine.resources.scene import Point3D + +def setup(housingTemplates): + houseTemplate = HouseTemplate("object/tangible/deed/player_house_deed/shared_corellia_house_large_deed.iff", "object/building/player/shared_player_house_corellia_large_style_01.iff", 5) + + houseTemplate.addBuildingSign("object/tangible/sign/player/shared_house_address.iff", Point3D(float(6), float(3), float(13.4))) + houseTemplate.addPlaceablePlanet("corellia") + houseTemplate.addPlaceablePlanet("talus") + houseTemplate.setDefaultItemLimit(500) + houseTemplate.setBaseMaintenanceRate(26) + + housingTemplates.put(houseTemplate.getDeedTemplate(), houseTemplate) + return \ No newline at end of file diff --git a/scripts/houses/player_house_corellia_large_style_02.py b/scripts/houses/player_house_corellia_large_style_02.py new file mode 100644 index 00000000..7bc5f2da --- /dev/null +++ b/scripts/houses/player_house_corellia_large_style_02.py @@ -0,0 +1,15 @@ +import sys +from services.housing import HouseTemplate +from engine.resources.scene import Point3D + +def setup(housingTemplates): + houseTemplate = HouseTemplate("object/tangible/deed/player_house_deed/shared_corellia_house_large_style_02_deed.iff", "object/building/player/shared_player_house_generic_large_style_02.iff", 5) + + houseTemplate.addBuildingSign("object/tangible/sign/player/shared_house_address.iff", Point3D(float(-13.4), float(3), float(9.1))) + houseTemplate.addPlaceablePlanet("corellia") + houseTemplate.addPlaceablePlanet("talus") + houseTemplate.setDefaultItemLimit(500) + houseTemplate.setBaseMaintenanceRate(26) + + housingTemplates.put(houseTemplate.getDeedTemplate(), houseTemplate) + return \ No newline at end of file diff --git a/scripts/houses/player_house_corellia_medium_style_01.py b/scripts/houses/player_house_corellia_medium_style_01.py new file mode 100644 index 00000000..48167fda --- /dev/null +++ b/scripts/houses/player_house_corellia_medium_style_01.py @@ -0,0 +1,15 @@ +import sys +from services.housing import HouseTemplate +from engine.resources.scene import Point3D + +def setup(housingTemplates): + houseTemplate = HouseTemplate("object/tangible/deed/player_house_deed/shared_corellia_house_medium_deed.iff", "object/building/player/shared_player_house_corellia_medium_style_01.iff", 2) + + houseTemplate.addBuildingSign("object/tangible/sign/player/shared_house_address.iff", Point3D(float(5.3),float(2.26),float(7.7))) + houseTemplate.addPlaceablePlanet("corellia") + houseTemplate.addPlaceablePlanet("talus") + houseTemplate.setDefaultItemLimit(200) + houseTemplate.setBaseMaintenanceRate(18) + housingTemplates.put(houseTemplate.getDeedTemplate(), houseTemplate) + + return \ No newline at end of file diff --git a/scripts/houses/player_house_corellia_medium_style_02.py b/scripts/houses/player_house_corellia_medium_style_02.py new file mode 100644 index 00000000..41559ba0 --- /dev/null +++ b/scripts/houses/player_house_corellia_medium_style_02.py @@ -0,0 +1,15 @@ +import sys +from services.housing import HouseTemplate +from engine.resources.scene import Point3D + +def setup(housingTemplates): + houseTemplate = HouseTemplate("object/tangible/deed/player_house_deed/shared_corellia_house_medium_style_02_deed.iff", "object/building/player/shared_player_house_corellia_medium_style_02.iff", 2) + + houseTemplate.addBuildingSign("object/tangible/sign/player/shared_house_address.iff", Point3D(float(5.3), float(2.26), float(7.7))) + houseTemplate.addPlaceablePlanet("corellia") + houseTemplate.addPlaceablePlanet("talus") + houseTemplate.setDefaultItemLimit(200) + houseTemplate.setBaseMaintenanceRate(18) + housingTemplates.put(houseTemplate.getDeedTemplate(), houseTemplate) + + return \ No newline at end of file diff --git a/scripts/houses/player_house_corellia_small_style_01.py b/scripts/houses/player_house_corellia_small_style_01.py new file mode 100644 index 00000000..96de8802 --- /dev/null +++ b/scripts/houses/player_house_corellia_small_style_01.py @@ -0,0 +1,15 @@ +import sys +from services.housing import HouseTemplate +from engine.resources.scene import Point3D + +def setup(housingTemplates): + houseTemplate = HouseTemplate("object/tangible/deed/player_house_deed/shared_corellia_house_small_deed.iff", "object/building/player/shared_player_house_corellia_small_style_01.iff", 2) + + houseTemplate.addBuildingSign("object/tangible/sign/player/shared_house_address.iff", Point3D(float(-7.39), float(2.36), float(2))) + houseTemplate.addPlaceablePlanet("corellia") + houseTemplate.addPlaceablePlanet("talus") + houseTemplate.setDefaultItemLimit(200) + houseTemplate.setBaseMaintenanceRate(8) + + housingTemplates.put(houseTemplate.getDeedTemplate(), houseTemplate) + return \ No newline at end of file diff --git a/scripts/houses/player_house_corellia_small_style_01_floorplan_02.py b/scripts/houses/player_house_corellia_small_style_01_floorplan_02.py new file mode 100644 index 00000000..bf670367 --- /dev/null +++ b/scripts/houses/player_house_corellia_small_style_01_floorplan_02.py @@ -0,0 +1,15 @@ +import sys +from services.housing import HouseTemplate +from engine.resources.scene import Point3D + +def setup(housingTemplates): + houseTemplate = HouseTemplate("object/tangible/deed/player_house_deed/shared_corellia_house_small_floor_02_deed.iff", "object/building/player/shared_player_house_corellia_small_style_01_floorplan_02.iff", 2) + + houseTemplate.addBuildingSign("object/tangible/sign/player/shared_house_address.iff", Point3D(float(-7.39), float(2.36), float(2))) + houseTemplate.addPlaceablePlanet("corellia") + houseTemplate.addPlaceablePlanet("talus") + houseTemplate.setDefaultItemLimit(200) + houseTemplate.setBaseMaintenanceRate(8) + + housingTemplates.put(houseTemplate.getDeedTemplate(), houseTemplate) + return \ No newline at end of file diff --git a/scripts/houses/player_house_corellia_small_style_02.py b/scripts/houses/player_house_corellia_small_style_02.py new file mode 100644 index 00000000..5baf48fd --- /dev/null +++ b/scripts/houses/player_house_corellia_small_style_02.py @@ -0,0 +1,15 @@ +import sys +from services.housing import HouseTemplate +from engine.resources.scene import Point3D + +def setup(housingTemplates): + houseTemplate = HouseTemplate("object/tangible/deed/player_house_deed/shared_corellia_house_small_style_02_deed.iff", "object/building/player/shared_player_house_corellia_small_style_02.iff", 2) + + houseTemplate.addBuildingSign("object/tangible/sign/player/shared_house_address.iff", Point3D(float(-1.9), float(2.86), float(8.35))) + houseTemplate.addPlaceablePlanet("corellia") + houseTemplate.addPlaceablePlanet("talus") + houseTemplate.setDefaultItemLimit(200) + houseTemplate.setBaseMaintenanceRate(8) + + housingTemplates.put(houseTemplate.getDeedTemplate(), houseTemplate) + return \ No newline at end of file diff --git a/scripts/houses/player_house_corellia_small_style_02_floorplan_02.py b/scripts/houses/player_house_corellia_small_style_02_floorplan_02.py new file mode 100644 index 00000000..914fa313 --- /dev/null +++ b/scripts/houses/player_house_corellia_small_style_02_floorplan_02.py @@ -0,0 +1,15 @@ +import sys +from services.housing import HouseTemplate +from engine.resources.scene import Point3D + +def setup(housingTemplates): + houseTemplate = HouseTemplate("object/tangible/deed/player_house_deed/shared_corellia_house_small_style_02_floor_02_deed.iff", "object/building/player/shared_player_house_corellia_small_style_02_floorplan_02.iff", 2) + + houseTemplate.addBuildingSign("object/tangible/sign/player/shared_house_address.iff", Point3D(float(-1.9), float(2.86), float(8.35))) + houseTemplate.addPlaceablePlanet("corellia") + houseTemplate.addPlaceablePlanet("talus") + houseTemplate.setDefaultItemLimit(200) + houseTemplate.setBaseMaintenanceRate(8) + + housingTemplates.put(houseTemplate.getDeedTemplate(), houseTemplate) + return \ No newline at end of file diff --git a/scripts/houses/player_house_generic_large_style_01.py b/scripts/houses/player_house_generic_large_style_01.py new file mode 100644 index 00000000..aa933d9d --- /dev/null +++ b/scripts/houses/player_house_generic_large_style_01.py @@ -0,0 +1,20 @@ +import sys +from services.housing import HouseTemplate +from engine.resources.scene import Point3D + +def setup(housingTemplates): + houseTemplate = HouseTemplate("object/tangible/deed/player_house_deed/shared_generic_house_large_style_02_deed.iff", "object/building/player/shared_player_house_generic_large_style_02.iff", 5) + + houseTemplate.addBuildingSign("object/tangible/sign/player/shared_house_address.iff", Point3D(float(6), float(3), float(13.4))) + houseTemplate.addPlaceablePlanet("tatooine") + houseTemplate.addPlaceablePlanet("corellia") + houseTemplate.addPlaceablePlanet("naboo") + houseTemplate.addPlaceablePlanet("talus") + houseTemplate.addPlaceablePlanet("rori") + houseTemplate.addPlaceablePlanet("dantooine") + houseTemplate.addPlaceablePlanet("lok") + houseTemplate.setDefaultItemLimit(500) + houseTemplate.setBaseMaintenanceRate(26) + + housingTemplates.put(houseTemplate.getDeedTemplate(), houseTemplate) + return \ No newline at end of file diff --git a/scripts/houses/player_house_generic_large_style_02.py b/scripts/houses/player_house_generic_large_style_02.py new file mode 100644 index 00000000..a64b27dc --- /dev/null +++ b/scripts/houses/player_house_generic_large_style_02.py @@ -0,0 +1,20 @@ +import sys +from services.housing import HouseTemplate +from engine.resources.scene import Point3D + +def setup(housingTemplates): + houseTemplate = HouseTemplate("object/tangible/deed/player_house_deed/shared_generic_house_large_deed.iff", "object/building/player/shared_player_house_generic_large_style_01.iff", 2) + + houseTemplate.addBuildingSign("object/tangible/sign/player/shared_house_address.iff", Point3D(float(-13.4), float(3), float(9.1))) + houseTemplate.addPlaceablePlanet("tatooine") + houseTemplate.addPlaceablePlanet("corellia") + houseTemplate.addPlaceablePlanet("naboo") + houseTemplate.addPlaceablePlanet("talus") + houseTemplate.addPlaceablePlanet("rori") + houseTemplate.addPlaceablePlanet("dantooine") + houseTemplate.addPlaceablePlanet("lok") + houseTemplate.setDefaultItemLimit(500) + houseTemplate.setBaseMaintenanceRate(26) + + housingTemplates.put(houseTemplate.getDeedTemplate(), houseTemplate) + return \ No newline at end of file diff --git a/scripts/houses/player_house_generic_large_window_s01.py b/scripts/houses/player_house_generic_large_window_s01.py new file mode 100644 index 00000000..031f8296 --- /dev/null +++ b/scripts/houses/player_house_generic_large_window_s01.py @@ -0,0 +1,20 @@ +import sys +from services.housing import HouseTemplate +from engine.resources.scene import Point3D + +def setup(housingTemplates): + houseTemplate = HouseTemplate("object/tangible/deed/player_house_deed/shared_generic_house_large_window_s01_deed.iff", "object/building/player/shared_player_house_generic_large_window_s01.iff", 2) + + houseTemplate.addBuildingSign("object/tangible/sign/player/shared_house_address.iff", Point3D(float(-13.7), float(3), float(9.1))) + houseTemplate.addPlaceablePlanet("tatooine") + houseTemplate.addPlaceablePlanet("corellia") + houseTemplate.addPlaceablePlanet("naboo") + houseTemplate.addPlaceablePlanet("talus") + houseTemplate.addPlaceablePlanet("rori") + houseTemplate.addPlaceablePlanet("dantooine") + houseTemplate.addPlaceablePlanet("lok") + houseTemplate.setDefaultItemLimit(500) + houseTemplate.setBaseMaintenanceRate(26) + + housingTemplates.put(houseTemplate.getDeedTemplate(), houseTemplate) + return \ No newline at end of file diff --git a/scripts/houses/player_house_generic_large_window_s02.py b/scripts/houses/player_house_generic_large_window_s02.py new file mode 100644 index 00000000..d5919f4d --- /dev/null +++ b/scripts/houses/player_house_generic_large_window_s02.py @@ -0,0 +1,20 @@ +import sys +from services.housing import HouseTemplate +from engine.resources.scene import Point3D + +def setup(housingTemplates): + houseTemplate = HouseTemplate("object/tangible/deed/player_house_deed/shared_generic_house_large_window_s02_deed.iff", "object/building/player/shared_player_house_generic_large_window_s02.iff", 2) + + houseTemplate.addBuildingSign("object/tangible/sign/player/shared_house_address.iff", Point3D(float(10.4), float(3), float(-11))) + houseTemplate.addPlaceablePlanet("tatooine") + houseTemplate.addPlaceablePlanet("corellia") + houseTemplate.addPlaceablePlanet("naboo") + houseTemplate.addPlaceablePlanet("talus") + houseTemplate.addPlaceablePlanet("rori") + houseTemplate.addPlaceablePlanet("dantooine") + houseTemplate.addPlaceablePlanet("lok") + houseTemplate.setDefaultItemLimit(500) + houseTemplate.setBaseMaintenanceRate(26) + + housingTemplates.put(houseTemplate.getDeedTemplate(), houseTemplate) + return \ No newline at end of file diff --git a/scripts/houses/player_house_generic_medium_style_01.py b/scripts/houses/player_house_generic_medium_style_01.py new file mode 100644 index 00000000..3d0beb4e --- /dev/null +++ b/scripts/houses/player_house_generic_medium_style_01.py @@ -0,0 +1,20 @@ +import sys +from services.housing import HouseTemplate +from engine.resources.scene import Point3D + +def setup(housingTemplates): + houseTemplate = HouseTemplate("object/tangible/deed/player_house_deed/shared_generic_house_medium_deed.iff", "object/building/player/shared_player_house_generic_medium_style_01.iff", 2) + + houseTemplate.addBuildingSign("object/tangible/sign/player/shared_house_address.iff", Point3D(float(5.3),float(2.26),float(7.7))) + houseTemplate.addPlaceablePlanet("tatooine") + houseTemplate.addPlaceablePlanet("corellia") + houseTemplate.addPlaceablePlanet("naboo") + houseTemplate.addPlaceablePlanet("talus") + houseTemplate.addPlaceablePlanet("rori") + houseTemplate.addPlaceablePlanet("dantooine") + houseTemplate.addPlaceablePlanet("lok") + houseTemplate.setDefaultItemLimit(200) + houseTemplate.setBaseMaintenanceRate(18) + + housingTemplates.put(houseTemplate.getDeedTemplate(), houseTemplate) + return \ No newline at end of file diff --git a/scripts/houses/player_house_generic_medium_style_02.py b/scripts/houses/player_house_generic_medium_style_02.py new file mode 100644 index 00000000..b8aa1bf6 --- /dev/null +++ b/scripts/houses/player_house_generic_medium_style_02.py @@ -0,0 +1,20 @@ +import sys +from services.housing import HouseTemplate +from engine.resources.scene import Point3D + +def setup(housingTemplates): + houseTemplate = HouseTemplate("object/tangible/deed/player_house_deed/shared_generic_house_medium_style_02_deed.iff", "object/building/player/shared_player_house_generic_medium_style_02.iff", 2) + + houseTemplate.addBuildingSign("object/tangible/sign/player/shared_house_address.iff", Point3D(float(5.3), float(2.26), float(7.7))) + houseTemplate.addPlaceablePlanet("tatooine") + houseTemplate.addPlaceablePlanet("corellia") + houseTemplate.addPlaceablePlanet("naboo") + houseTemplate.addPlaceablePlanet("talus") + houseTemplate.addPlaceablePlanet("rori") + houseTemplate.addPlaceablePlanet("dantooine") + houseTemplate.addPlaceablePlanet("lok") + houseTemplate.setDefaultItemLimit(200) + houseTemplate.setBaseMaintenanceRate(18) + + housingTemplates.put(houseTemplate.getDeedTemplate(), houseTemplate) + return \ No newline at end of file diff --git a/scripts/houses/player_house_generic_medium_windowed.py b/scripts/houses/player_house_generic_medium_windowed.py new file mode 100644 index 00000000..9ddc528a --- /dev/null +++ b/scripts/houses/player_house_generic_medium_windowed.py @@ -0,0 +1,20 @@ +import sys +from services.housing import HouseTemplate +from engine.resources.scene import Point3D + +def setup(housingTemplates): + houseTemplate = HouseTemplate("object/tangible/deed/player_house_deed/shared_generic_house_medium_windowed_deed.iff", "object/building/player/shared_player_house_generic_medium_windowed.iff", 2) + + houseTemplate.addBuildingSign("object/tangible/sign/player/shared_house_address.iff", Point3D(float(5.5), float(2.26), float(7.8))) + houseTemplate.addPlaceablePlanet("tatooine") + houseTemplate.addPlaceablePlanet("corellia") + houseTemplate.addPlaceablePlanet("naboo") + houseTemplate.addPlaceablePlanet("talus") + houseTemplate.addPlaceablePlanet("rori") + houseTemplate.addPlaceablePlanet("dantooine") + houseTemplate.addPlaceablePlanet("lok") + houseTemplate.setDefaultItemLimit(200) + houseTemplate.setBaseMaintenanceRate(18) + + housingTemplates.put(houseTemplate.getDeedTemplate(), houseTemplate) + return \ No newline at end of file diff --git a/scripts/houses/player_house_generic_medium_windowed_s02.py b/scripts/houses/player_house_generic_medium_windowed_s02.py new file mode 100644 index 00000000..692f620b --- /dev/null +++ b/scripts/houses/player_house_generic_medium_windowed_s02.py @@ -0,0 +1,20 @@ +import sys +from services.housing import HouseTemplate +from engine.resources.scene import Point3D + +def setup(housingTemplates): + houseTemplate = HouseTemplate("object/tangible/deed/player_house_deed/shared_generic_house_medium_windowed_s02_deed.iff", "object/building/player/shared_player_house_generic_medium_windowed_s02.iff", 2) + + houseTemplate.addBuildingSign("object/tangible/sign/player/shared_house_address.iff", Point3D(float(5.5), float(2.26), float(7.8))) + houseTemplate.addPlaceablePlanet("tatooine") + houseTemplate.addPlaceablePlanet("corellia") + houseTemplate.addPlaceablePlanet("naboo") + houseTemplate.addPlaceablePlanet("talus") + houseTemplate.addPlaceablePlanet("rori") + houseTemplate.addPlaceablePlanet("dantooine") + houseTemplate.addPlaceablePlanet("lok") + houseTemplate.setDefaultItemLimit(200) + houseTemplate.setBaseMaintenanceRate(18) + + housingTemplates.put(houseTemplate.getDeedTemplate(), houseTemplate) + return \ No newline at end of file diff --git a/scripts/houses/player_house_generic_small_style_01.py b/scripts/houses/player_house_generic_small_style_01.py new file mode 100644 index 00000000..3c225c31 --- /dev/null +++ b/scripts/houses/player_house_generic_small_style_01.py @@ -0,0 +1,20 @@ +import sys +from services.housing import HouseTemplate +from engine.resources.scene import Point3D + +def setup(housingTemplates): + houseTemplate = HouseTemplate("object/tangible/deed/player_house_deed/shared_generic_house_small_deed.iff", "object/building/player/shared_player_house_generic_small_style_01.iff", 2) + + houseTemplate.addBuildingSign("object/tangible/sign/player/shared_house_address.iff", Point3D(float(-7.39), float(2.36), float(2))) + houseTemplate.addPlaceablePlanet("tatooine") + houseTemplate.addPlaceablePlanet("corellia") + houseTemplate.addPlaceablePlanet("naboo") + houseTemplate.addPlaceablePlanet("talus") + houseTemplate.addPlaceablePlanet("rori") + houseTemplate.addPlaceablePlanet("dantooine") + houseTemplate.addPlaceablePlanet("lok") + houseTemplate.setDefaultItemLimit(200) + houseTemplate.setBaseMaintenanceRate(8) + + housingTemplates.put(houseTemplate.getDeedTemplate(), houseTemplate) + return \ No newline at end of file diff --git a/scripts/houses/player_house_generic_small_style_01_floorplan_02.py b/scripts/houses/player_house_generic_small_style_01_floorplan_02.py new file mode 100644 index 00000000..e06a6316 --- /dev/null +++ b/scripts/houses/player_house_generic_small_style_01_floorplan_02.py @@ -0,0 +1,20 @@ +import sys +from services.housing import HouseTemplate +from engine.resources.scene import Point3D + +def setup(housingTemplates): + houseTemplate = HouseTemplate("object/tangible/deed/player_house_deed/shared_generic_house_small_floor_02_deed.iff", "object/building/player/shared_player_house_generic_small_style_01_floorplan_02.iff", 2) + + houseTemplate.addBuildingSign("object/tangible/sign/player/shared_house_address.iff", Point3D(float(-7.39), float(2.36), float(2))) + houseTemplate.addPlaceablePlanet("tatooine") + houseTemplate.addPlaceablePlanet("corellia") + houseTemplate.addPlaceablePlanet("naboo") + houseTemplate.addPlaceablePlanet("talus") + houseTemplate.addPlaceablePlanet("rori") + houseTemplate.addPlaceablePlanet("dantooine") + houseTemplate.addPlaceablePlanet("lok") + houseTemplate.setDefaultItemLimit(200) + houseTemplate.setBaseMaintenanceRate(8) + + housingTemplates.put(houseTemplate.getDeedTemplate(), houseTemplate) + return \ No newline at end of file diff --git a/scripts/houses/player_house_generic_small_style_02.py b/scripts/houses/player_house_generic_small_style_02.py new file mode 100644 index 00000000..c32a0b84 --- /dev/null +++ b/scripts/houses/player_house_generic_small_style_02.py @@ -0,0 +1,20 @@ +import sys +from services.housing import HouseTemplate +from engine.resources.scene import Point3D + +def setup(housingTemplates): + houseTemplate = HouseTemplate("object/tangible/deed/player_house_deed/shared_generic_house_small_style_02_deed.iff", "object/building/player/shared_player_house_generic_small_style_02.iff", 2) + + houseTemplate.addBuildingSign("object/tangible/sign/player/shared_house_address.iff", Point3D(float(-1.9), float(2.86), float(8.35))) + houseTemplate.addPlaceablePlanet("tatooine") + houseTemplate.addPlaceablePlanet("corellia") + houseTemplate.addPlaceablePlanet("naboo") + houseTemplate.addPlaceablePlanet("talus") + houseTemplate.addPlaceablePlanet("rori") + houseTemplate.addPlaceablePlanet("dantooine") + houseTemplate.addPlaceablePlanet("lok") + houseTemplate.setDefaultItemLimit(200) + houseTemplate.setBaseMaintenanceRate(8) + + housingTemplates.put(houseTemplate.getDeedTemplate(), houseTemplate) + return \ No newline at end of file diff --git a/scripts/houses/player_house_generic_small_style_02_floorplan_02.py b/scripts/houses/player_house_generic_small_style_02_floorplan_02.py new file mode 100644 index 00000000..a2ffe757 --- /dev/null +++ b/scripts/houses/player_house_generic_small_style_02_floorplan_02.py @@ -0,0 +1,20 @@ +import sys +from services.housing import HouseTemplate +from engine.resources.scene import Point3D + +def setup(housingTemplates): + houseTemplate = HouseTemplate("object/tangible/deed/player_house_deed/shared_generic_house_small_style_02_floor_02_deed.iff", "object/building/player/shared_player_house_generic_small_style_02_floorplan_02.iff", 2) + + houseTemplate.addBuildingSign("object/tangible/sign/player/shared_house_address.iff", Point3D(float(-1.9), float(2.86), float(8.35))) + houseTemplate.addPlaceablePlanet("tatooine") + houseTemplate.addPlaceablePlanet("corellia") + houseTemplate.addPlaceablePlanet("naboo") + houseTemplate.addPlaceablePlanet("talus") + houseTemplate.addPlaceablePlanet("rori") + houseTemplate.addPlaceablePlanet("dantooine") + houseTemplate.addPlaceablePlanet("lok") + houseTemplate.setDefaultItemLimit(200) + houseTemplate.setBaseMaintenanceRate(8) + + housingTemplates.put(houseTemplate.getDeedTemplate(), houseTemplate) + return \ No newline at end of file diff --git a/scripts/houses/player_house_generic_small_window_style_03.py b/scripts/houses/player_house_generic_small_window_style_03.py new file mode 100644 index 00000000..9adf8ff0 --- /dev/null +++ b/scripts/houses/player_house_generic_small_window_style_03.py @@ -0,0 +1,20 @@ +import sys +from services.housing import HouseTemplate +from engine.resources.scene import Point3D + +def setup(housingTemplates): + houseTemplate = HouseTemplate("object/tangible/deed/player_house_deed/shared_generic_house_small_window_style_03_deed.iff", "object/building/player/shared_player_house_generic_small_window_style_03.iff", 2) + + houseTemplate.addBuildingSign("object/tangible/sign/player/shared_house_address.iff", Point3D(float(-6.6), float(2.36), float(6.3))) + houseTemplate.addPlaceablePlanet("tatooine") + houseTemplate.addPlaceablePlanet("corellia") + houseTemplate.addPlaceablePlanet("naboo") + houseTemplate.addPlaceablePlanet("talus") + houseTemplate.addPlaceablePlanet("rori") + houseTemplate.addPlaceablePlanet("dantooine") + houseTemplate.addPlaceablePlanet("lok") + houseTemplate.setDefaultItemLimit(200) + houseTemplate.setBaseMaintenanceRate(8) + + housingTemplates.put(houseTemplate.getDeedTemplate(), houseTemplate) + return \ No newline at end of file diff --git a/scripts/houses/player_house_generic_small_windowed.py b/scripts/houses/player_house_generic_small_windowed.py new file mode 100644 index 00000000..71439b6a --- /dev/null +++ b/scripts/houses/player_house_generic_small_windowed.py @@ -0,0 +1,20 @@ +import sys +from services.housing import HouseTemplate +from engine.resources.scene import Point3D + +def setup(housingTemplates): + houseTemplate = HouseTemplate("object/tangible/deed/player_house_deed/shared_generic_house_small_window_deed.iff", "object/building/player/shared_player_house_generic_small_windowed.iff", 2) + + houseTemplate.addBuildingSign("object/tangible/sign/player/shared_house_address.iff", Point3D(float(-7.39), float(2.36), float(2))) + houseTemplate.addPlaceablePlanet("tatooine") + houseTemplate.addPlaceablePlanet("corellia") + houseTemplate.addPlaceablePlanet("naboo") + houseTemplate.addPlaceablePlanet("talus") + houseTemplate.addPlaceablePlanet("rori") + houseTemplate.addPlaceablePlanet("dantooine") + houseTemplate.addPlaceablePlanet("lok") + houseTemplate.setDefaultItemLimit(200) + houseTemplate.setBaseMaintenanceRate(8) + + housingTemplates.put(houseTemplate.getDeedTemplate(), houseTemplate) + return \ No newline at end of file diff --git a/scripts/houses/player_house_hangar.py b/scripts/houses/player_house_hangar.py new file mode 100644 index 00000000..01373883 --- /dev/null +++ b/scripts/houses/player_house_hangar.py @@ -0,0 +1,20 @@ +import sys +from services.housing import HouseTemplate +from engine.resources.scene import Point3D + +def setup(housingTemplates): + houseTemplate = HouseTemplate("object/tangible/tcg/series5/shared_structure_deed_player_house_hangar.iff", "object/building/player/shared_player_house_hangar.iff", 3) + + houseTemplate.addBuildingSign("object/tangible/sign/player/shared_house_address.iff", Point3D(float(9.2), float(2.86), float(0.8))) + houseTemplate.addPlaceablePlanet("tatooine") + houseTemplate.addPlaceablePlanet("corellia") + houseTemplate.addPlaceablePlanet("naboo") + houseTemplate.addPlaceablePlanet("talus") + houseTemplate.addPlaceablePlanet("rori") + houseTemplate.addPlaceablePlanet("dantooine") + houseTemplate.addPlaceablePlanet("lok") + houseTemplate.setDefaultItemLimit(350) + houseTemplate.setBaseMaintenanceRate(8) + + housingTemplates.put(houseTemplate.getDeedTemplate(), houseTemplate) + return \ No newline at end of file diff --git a/scripts/houses/player_house_jabbas_sail_barge.py b/scripts/houses/player_house_jabbas_sail_barge.py new file mode 100644 index 00000000..c39e9c25 --- /dev/null +++ b/scripts/houses/player_house_jabbas_sail_barge.py @@ -0,0 +1,20 @@ +import sys +from services.housing import HouseTemplate +from engine.resources.scene import Point3D + +def setup(housingTemplates): + houseTemplate = HouseTemplate("object/tangible/deed/player_house_deed/shared_jabbas_sail_barge_deed.iff", "object/building/player/shared_player_house_jabbas_sail_barge.iff", 3) + + houseTemplate.addBuildingSign("object/tangible/sign/player/shared_house_address.iff", Point3D(float(0), float(2.86), float(-3.5))) + houseTemplate.addPlaceablePlanet("tatooine") + houseTemplate.addPlaceablePlanet("corellia") + houseTemplate.addPlaceablePlanet("naboo") + houseTemplate.addPlaceablePlanet("talus") + houseTemplate.addPlaceablePlanet("rori") + houseTemplate.addPlaceablePlanet("dantooine") + houseTemplate.addPlaceablePlanet("lok") + houseTemplate.setDefaultItemLimit(350) + houseTemplate.setBaseMaintenanceRate(8) + + housingTemplates.put(houseTemplate.getDeedTemplate(), houseTemplate) + return \ No newline at end of file diff --git a/scripts/houses/player_house_jedi_meditation_room.py b/scripts/houses/player_house_jedi_meditation_room.py new file mode 100644 index 00000000..6ed97065 --- /dev/null +++ b/scripts/houses/player_house_jedi_meditation_room.py @@ -0,0 +1,20 @@ +import sys +from services.housing import HouseTemplate +from engine.resources.scene import Point3D + +def setup(housingTemplates): + houseTemplate = HouseTemplate("object/tangible/tcg/series3/shared_structure_deed_jedi_meditation_room_deed.iff", "object/building/player/shared_player_house_jedi_meditation_room.iff", 3) + + houseTemplate.addBuildingSign("object/tangible/sign/player/shared_house_address.iff", Point3D(float(0), float(2.86), float(-3.5))) + houseTemplate.addPlaceablePlanet("tatooine") + houseTemplate.addPlaceablePlanet("corellia") + houseTemplate.addPlaceablePlanet("naboo") + houseTemplate.addPlaceablePlanet("talus") + houseTemplate.addPlaceablePlanet("rori") + houseTemplate.addPlaceablePlanet("dantooine") + houseTemplate.addPlaceablePlanet("lok") + houseTemplate.setDefaultItemLimit(350) + houseTemplate.setBaseMaintenanceRate(8) + + housingTemplates.put(houseTemplate.getDeedTemplate(), houseTemplate) + return \ No newline at end of file diff --git a/scripts/houses/player_house_mustafar_lg.py b/scripts/houses/player_house_mustafar_lg.py new file mode 100644 index 00000000..891c9e09 --- /dev/null +++ b/scripts/houses/player_house_mustafar_lg.py @@ -0,0 +1,20 @@ +import sys +from services.housing import HouseTemplate +from engine.resources.scene import Point3D + +def setup(housingTemplates): + houseTemplate = HouseTemplate("object/tangible/deed/player_house_deed/shared_mustafar_house_lg.iff", "object/building/player/shared_player_house_mustafar_lg.iff", 5) + + houseTemplate.addBuildingSign("object/tangible/sign/player/shared_house_address.iff", Point3D(float(1.5), float(2.86), float(13.7))) + houseTemplate.addPlaceablePlanet("tatooine") + houseTemplate.addPlaceablePlanet("corellia") + houseTemplate.addPlaceablePlanet("naboo") + houseTemplate.addPlaceablePlanet("talus") + houseTemplate.addPlaceablePlanet("rori") + houseTemplate.addPlaceablePlanet("dantooine") + houseTemplate.addPlaceablePlanet("lok") + houseTemplate.setDefaultItemLimit(200) + houseTemplate.setBaseMaintenanceRate(8) + + housingTemplates.put(houseTemplate.getDeedTemplate(), houseTemplate) + return \ No newline at end of file diff --git a/scripts/houses/player_house_naboo_large_style_01.py b/scripts/houses/player_house_naboo_large_style_01.py new file mode 100644 index 00000000..a75ee9c9 --- /dev/null +++ b/scripts/houses/player_house_naboo_large_style_01.py @@ -0,0 +1,16 @@ +import sys +from services.housing import HouseTemplate +from engine.resources.scene import Point3D + +def setup(housingTemplates): + houseTemplate = HouseTemplate("object/tangible/deed/player_house_deed/shared_naboo_house_large_deed.iff", "object/building/player/shared_player_house_naboo_large_style_01.iff", 5) + + houseTemplate.addBuildingSign("object/tangible/sign/player/shared_house_address.iff", Point3D(float(-7), float(3), float(-15.5))) + houseTemplate.addPlaceablePlanet("naboo") + houseTemplate.addPlaceablePlanet("rori") + houseTemplate.addPlaceablePlanet("dantooine") + houseTemplate.setDefaultItemLimit(500) + houseTemplate.setBaseMaintenanceRate(8) + + housingTemplates.put(houseTemplate.getDeedTemplate(), houseTemplate) + return \ No newline at end of file diff --git a/scripts/houses/player_house_naboo_medium_style_01.py b/scripts/houses/player_house_naboo_medium_style_01.py new file mode 100644 index 00000000..c5cf6211 --- /dev/null +++ b/scripts/houses/player_house_naboo_medium_style_01.py @@ -0,0 +1,15 @@ +import sys +from services.housing import HouseTemplate +from engine.resources.scene import Point3D + +def setup(housingTemplates): + houseTemplate = HouseTemplate("object/tangible/deed/player_house_deed/shared_naboo_house_medium_deed.iff", "object/building/player/shared_player_house_naboo_medium_style_01.iff", 2) + + houseTemplate.addBuildingSign("object/tangible/sign/player/shared_house_address.iff", Point3D(float(-2.2),float(3),float(-11.5))) + houseTemplate.addPlaceablePlanet("naboo") + houseTemplate.addPlaceablePlanet("rori") + houseTemplate.addPlaceablePlanet("dantooine") + houseTemplate.setDefaultItemLimit(200) + houseTemplate.setBaseMaintenanceRate(18) + housingTemplates.put(houseTemplate.getDeedTemplate(), houseTemplate) + return \ No newline at end of file diff --git a/scripts/houses/player_house_naboo_small_style_01.py b/scripts/houses/player_house_naboo_small_style_01.py new file mode 100644 index 00000000..7fdd3716 --- /dev/null +++ b/scripts/houses/player_house_naboo_small_style_01.py @@ -0,0 +1,15 @@ +import sys +from services.housing import HouseTemplate +from engine.resources.scene import Point3D + +def setup(housingTemplates): + houseTemplate = HouseTemplate("object/tangible/deed/player_house_deed/shared_naboo_house_small_deed.iff", "object/building/player/shared_player_house_naboo_small_style_01.iff", 2) + + houseTemplate.addBuildingSign("object/tangible/sign/player/shared_house_address.iff", Point3D(float(-1.7),float(3),float(8.2))) + houseTemplate.addPlaceablePlanet("naboo") + houseTemplate.addPlaceablePlanet("rori") + houseTemplate.addPlaceablePlanet("dantooine") + houseTemplate.setDefaultItemLimit(200) + houseTemplate.setBaseMaintenanceRate(18) + housingTemplates.put(houseTemplate.getDeedTemplate(), houseTemplate) + return \ No newline at end of file diff --git a/scripts/houses/player_house_naboo_small_style_02.py b/scripts/houses/player_house_naboo_small_style_02.py new file mode 100644 index 00000000..05f46d81 --- /dev/null +++ b/scripts/houses/player_house_naboo_small_style_02.py @@ -0,0 +1,15 @@ +import sys +from services.housing import HouseTemplate +from engine.resources.scene import Point3D + +def setup(housingTemplates): + houseTemplate = HouseTemplate("object/tangible/deed/player_house_deed/shared_naboo_house_small_style_02_deed.iff", "object/building/player/shared_player_house_naboo_small_style_02.iff", 1) + + houseTemplate.addBuildingSign("object/tangible/sign/player/shared_house_address.iff", Point3D(float(8.4),float(3),float(7.2))) + houseTemplate.addPlaceablePlanet("naboo") + houseTemplate.addPlaceablePlanet("rori") + houseTemplate.addPlaceablePlanet("dantooine") + houseTemplate.setDefaultItemLimit(100) + houseTemplate.setBaseMaintenanceRate(18) + housingTemplates.put(houseTemplate.getDeedTemplate(), houseTemplate) + return \ No newline at end of file diff --git a/scripts/houses/player_house_naboo_small_window_style_01.py b/scripts/houses/player_house_naboo_small_window_style_01.py new file mode 100644 index 00000000..375af434 --- /dev/null +++ b/scripts/houses/player_house_naboo_small_window_style_01.py @@ -0,0 +1,15 @@ +import sys +from services.housing import HouseTemplate +from engine.resources.scene import Point3D + +def setup(housingTemplates): + houseTemplate = HouseTemplate("object/tangible/deed/player_house_deed/shared_naboo_house_small_window_deed.iff", "object/building/player/shared_player_house_naboo_small_window_style_01.iff", 2) + + houseTemplate.addBuildingSign("object/tangible/sign/player/shared_house_address.iff", Point3D(float(-1.7),float(3),float(8.2))) + houseTemplate.addPlaceablePlanet("naboo") + houseTemplate.addPlaceablePlanet("rori") + houseTemplate.addPlaceablePlanet("dantooine") + houseTemplate.setDefaultItemLimit(200) + houseTemplate.setBaseMaintenanceRate(18) + housingTemplates.put(houseTemplate.getDeedTemplate(), houseTemplate) + return \ No newline at end of file diff --git a/scripts/houses/player_house_sandcrawler.py b/scripts/houses/player_house_sandcrawler.py new file mode 100644 index 00000000..3d33b10f --- /dev/null +++ b/scripts/houses/player_house_sandcrawler.py @@ -0,0 +1,20 @@ +import sys +from services.housing import HouseTemplate +from engine.resources.scene import Point3D + +def setup(housingTemplates): + houseTemplate = HouseTemplate("object/tangible/saga_system/rewards/shared_structure_deed_player_house_sandcrawler.iff", "object/building/player/shared_player_house_sandcrawler.iff", 5) + + houseTemplate.addBuildingSign("object/tangible/sign/player/shared_house_address.iff", Point3D(float(-8.75), float(3.86), float(1))) + houseTemplate.addPlaceablePlanet("tatooine") + houseTemplate.addPlaceablePlanet("corellia") + houseTemplate.addPlaceablePlanet("naboo") + houseTemplate.addPlaceablePlanet("talus") + houseTemplate.addPlaceablePlanet("rori") + houseTemplate.addPlaceablePlanet("dantooine") + houseTemplate.addPlaceablePlanet("lok") + houseTemplate.setDefaultItemLimit(350) + houseTemplate.setBaseMaintenanceRate(26) + + housingTemplates.put(houseTemplate.getDeedTemplate(), houseTemplate) + return \ No newline at end of file diff --git a/scripts/houses/player_house_sith_meditation_room.py b/scripts/houses/player_house_sith_meditation_room.py new file mode 100644 index 00000000..e1e6a892 --- /dev/null +++ b/scripts/houses/player_house_sith_meditation_room.py @@ -0,0 +1,20 @@ +import sys +from services.housing import HouseTemplate +from engine.resources.scene import Point3D + +def setup(housingTemplates): + houseTemplate = HouseTemplate("object/tangible/tcg/series3/shared_structure_deed_sith_meditation_room_deed.iff", "object/building/player/shared_player_house_sith_meditation_room.iff", 3) + + houseTemplate.addBuildingSign("object/tangible/sign/player/shared_house_address.iff", Point3D(float(3), float(2.86), float(5.7))) + houseTemplate.addPlaceablePlanet("tatooine") + houseTemplate.addPlaceablePlanet("corellia") + houseTemplate.addPlaceablePlanet("naboo") + houseTemplate.addPlaceablePlanet("talus") + houseTemplate.addPlaceablePlanet("rori") + houseTemplate.addPlaceablePlanet("dantooine") + houseTemplate.addPlaceablePlanet("lok") + houseTemplate.setDefaultItemLimit(350) + houseTemplate.setBaseMaintenanceRate(8) + + housingTemplates.put(houseTemplate.getDeedTemplate(), houseTemplate) + return \ No newline at end of file diff --git a/scripts/houses/player_house_tatooine_large_style_01.py b/scripts/houses/player_house_tatooine_large_style_01.py new file mode 100644 index 00000000..37a9b894 --- /dev/null +++ b/scripts/houses/player_house_tatooine_large_style_01.py @@ -0,0 +1,16 @@ +import sys +from services.housing import HouseTemplate +from engine.resources.scene import Point3D + +def setup(housingTemplates): + houseTemplate = HouseTemplate("object/tangible/deed/player_house_deed/shared_tatooine_house_large_deed.iff", "object/building/player/shared_player_house_tatooine_large_style_01.iff", 5) + + houseTemplate.addBuildingSign("object/tangible/sign/player/shared_house_address.iff", Point3D(float(-3), float(3), float(15.8))) + houseTemplate.addPlaceablePlanet("tatooine") + houseTemplate.addPlaceablePlanet("lok") + houseTemplate.addPlaceablePlanet("dantooine") + houseTemplate.setDefaultItemLimit(500) + houseTemplate.setBaseMaintenanceRate(26) + + housingTemplates.put(houseTemplate.getDeedTemplate(), houseTemplate) + return \ No newline at end of file diff --git a/scripts/houses/player_house_tatooine_medium_style_01.py b/scripts/houses/player_house_tatooine_medium_style_01.py new file mode 100644 index 00000000..959cbb7e --- /dev/null +++ b/scripts/houses/player_house_tatooine_medium_style_01.py @@ -0,0 +1,15 @@ +import sys +from services.housing import HouseTemplate +from engine.resources.scene import Point3D + +def setup(housingTemplates): + houseTemplate = HouseTemplate("object/tangible/deed/player_house_deed/shared_tatooine_house_medium_deed.iff", "object/building/player/shared_player_house_tatooine_medium_style_01.iff", 2) + + houseTemplate.addBuildingSign("object/tangible/sign/player/shared_house_address.iff", Point3D(float(4.3),float(2.26),float(12.5))) + houseTemplate.addPlaceablePlanet("tatooine") + houseTemplate.addPlaceablePlanet("lok") + houseTemplate.addPlaceablePlanet("dantooine") + houseTemplate.setDefaultItemLimit(200) + houseTemplate.setBaseMaintenanceRate(18) + housingTemplates.put(houseTemplate.getDeedTemplate(), houseTemplate) + return \ No newline at end of file diff --git a/scripts/houses/player_house_tatooine_small_style_01.py b/scripts/houses/player_house_tatooine_small_style_01.py new file mode 100644 index 00000000..1e2579c2 --- /dev/null +++ b/scripts/houses/player_house_tatooine_small_style_01.py @@ -0,0 +1,15 @@ +import sys +from services.housing import HouseTemplate +from engine.resources.scene import Point3D + +def setup(housingTemplates): + houseTemplate = HouseTemplate("object/tangible/deed/player_house_deed/shared_tatooine_house_small_deed.iff", "object/building/player/shared_player_house_tatooine_small_style_01.iff", 2) + + houseTemplate.addBuildingSign("object/tangible/sign/player/shared_house_address.iff", Point3D(float(-1.7),float(3),float(7.9))) + houseTemplate.addPlaceablePlanet("tatooine") + houseTemplate.addPlaceablePlanet("lok") + houseTemplate.addPlaceablePlanet("dantooine") + houseTemplate.setDefaultItemLimit(200) + houseTemplate.setBaseMaintenanceRate(8) + housingTemplates.put(houseTemplate.getDeedTemplate(), houseTemplate) + return \ No newline at end of file diff --git a/scripts/houses/player_house_tatooine_small_style_02.py b/scripts/houses/player_house_tatooine_small_style_02.py new file mode 100644 index 00000000..8c953386 --- /dev/null +++ b/scripts/houses/player_house_tatooine_small_style_02.py @@ -0,0 +1,15 @@ +import sys +from services.housing import HouseTemplate +from engine.resources.scene import Point3D + +def setup(housingTemplates): + houseTemplate = HouseTemplate("object/tangible/deed/player_house_deed/shared_tatooine_house_small_style_02_deed.iff", "object/building/player/shared_player_house_tatooine_small_style_02.iff", 2) + + houseTemplate.addBuildingSign("object/tangible/sign/player/shared_house_address.iff", Point3D(float(-1.7),float(3),float(8.2))) + houseTemplate.addPlaceablePlanet("tatooine") + houseTemplate.addPlaceablePlanet("lok") + houseTemplate.addPlaceablePlanet("dantooine") + houseTemplate.setDefaultItemLimit(200) + houseTemplate.setBaseMaintenanceRate(8) + housingTemplates.put(houseTemplate.getDeedTemplate(), houseTemplate) + return \ No newline at end of file diff --git a/scripts/houses/player_house_tatooine_small_window_style_01.py b/scripts/houses/player_house_tatooine_small_window_style_01.py new file mode 100644 index 00000000..1e2579c2 --- /dev/null +++ b/scripts/houses/player_house_tatooine_small_window_style_01.py @@ -0,0 +1,15 @@ +import sys +from services.housing import HouseTemplate +from engine.resources.scene import Point3D + +def setup(housingTemplates): + houseTemplate = HouseTemplate("object/tangible/deed/player_house_deed/shared_tatooine_house_small_deed.iff", "object/building/player/shared_player_house_tatooine_small_style_01.iff", 2) + + houseTemplate.addBuildingSign("object/tangible/sign/player/shared_house_address.iff", Point3D(float(-1.7),float(3),float(7.9))) + houseTemplate.addPlaceablePlanet("tatooine") + houseTemplate.addPlaceablePlanet("lok") + houseTemplate.addPlaceablePlanet("dantooine") + houseTemplate.setDefaultItemLimit(200) + houseTemplate.setBaseMaintenanceRate(8) + housingTemplates.put(houseTemplate.getDeedTemplate(), houseTemplate) + return \ No newline at end of file diff --git a/scripts/houses/player_house_tcg_8_bespin_house.py b/scripts/houses/player_house_tcg_8_bespin_house.py new file mode 100644 index 00000000..2f37c85a --- /dev/null +++ b/scripts/houses/player_house_tcg_8_bespin_house.py @@ -0,0 +1,20 @@ +import sys +from services.housing import HouseTemplate +from engine.resources.scene import Point3D + +def setup(housingTemplates): + houseTemplate = HouseTemplate("object/tangible/deed/player_house_deed/shared_player_house_tcg_8_bespin_house_deed.iff", "object/building/player/shared_player_house_tcg_8_bespin_house.iff", 3) + + houseTemplate.addBuildingSign("object/tangible/sign/player/shared_house_address.iff", Point3D(float(0), float(2.86), float(-3.5))) + houseTemplate.addPlaceablePlanet("tatooine") + houseTemplate.addPlaceablePlanet("corellia") + houseTemplate.addPlaceablePlanet("naboo") + houseTemplate.addPlaceablePlanet("talus") + houseTemplate.addPlaceablePlanet("rori") + houseTemplate.addPlaceablePlanet("dantooine") + houseTemplate.addPlaceablePlanet("lok") + houseTemplate.setDefaultItemLimit(350) + houseTemplate.setBaseMaintenanceRate(8) + + housingTemplates.put(houseTemplate.getDeedTemplate(), houseTemplate) + return \ No newline at end of file diff --git a/scripts/houses/player_merchant_tent_style_01.py b/scripts/houses/player_merchant_tent_style_01.py new file mode 100644 index 00000000..684cbcb6 --- /dev/null +++ b/scripts/houses/player_merchant_tent_style_01.py @@ -0,0 +1,19 @@ +import sys +from services.housing import HouseTemplate +from engine.resources.scene import Point3D + +def setup(housingTemplates): + houseTemplate = HouseTemplate("object/tangible/deed/player_house_deed/shared_merchant_tent_style_01_deed.iff", "object/building/player/shared_player_merchant_tent_style_01.iff", 1) + + houseTemplate.addBuildingSign("object/tangible/sign/player/shared_house_address.iff", Point3D(float(3.5),float(-0.3),float(3.5))) + houseTemplate.addPlaceablePlanet("tatooine") + houseTemplate.addPlaceablePlanet("corellia") + houseTemplate.addPlaceablePlanet("naboo") + houseTemplate.addPlaceablePlanet("talus") + houseTemplate.addPlaceablePlanet("rori") + houseTemplate.addPlaceablePlanet("dantooine") + houseTemplate.addPlaceablePlanet("lok") + houseTemplate.setDefaultItemLimit(200) + houseTemplate.setBaseMaintenanceRate(8) + housingTemplates.put(houseTemplate.getDeedTemplate(), houseTemplate) + return \ No newline at end of file diff --git a/scripts/houses/player_merchant_tent_style_02.py b/scripts/houses/player_merchant_tent_style_02.py new file mode 100644 index 00000000..96668f8d --- /dev/null +++ b/scripts/houses/player_merchant_tent_style_02.py @@ -0,0 +1,19 @@ +import sys +from services.housing import HouseTemplate +from engine.resources.scene import Point3D + +def setup(housingTemplates): + houseTemplate = HouseTemplate("object/tangible/deed/player_house_deed/shared_merchant_tent_style_02_deed.iff", "object/building/player/shared_player_merchant_tent_style_02.iff", 1) + + houseTemplate.addBuildingSign("object/tangible/sign/player/shared_house_address.iff", Point3D(float(3.5),float(-0.3),float(3.5))) + houseTemplate.addPlaceablePlanet("tatooine") + houseTemplate.addPlaceablePlanet("corellia") + houseTemplate.addPlaceablePlanet("naboo") + houseTemplate.addPlaceablePlanet("talus") + houseTemplate.addPlaceablePlanet("rori") + houseTemplate.addPlaceablePlanet("dantooine") + houseTemplate.addPlaceablePlanet("lok") + houseTemplate.setDefaultItemLimit(200) + houseTemplate.setBaseMaintenanceRate(8) + housingTemplates.put(houseTemplate.getDeedTemplate(), houseTemplate) + return \ No newline at end of file diff --git a/scripts/houses/player_merchant_tent_style_03.py b/scripts/houses/player_merchant_tent_style_03.py new file mode 100644 index 00000000..abfa4196 --- /dev/null +++ b/scripts/houses/player_merchant_tent_style_03.py @@ -0,0 +1,19 @@ +import sys +from services.housing import HouseTemplate +from engine.resources.scene import Point3D + +def setup(housingTemplates): + houseTemplate = HouseTemplate("object/tangible/deed/player_house_deed/shared_merchant_tent_style_03_deed.iff", "object/building/player/shared_player_merchant_tent_style_03.iff", 1) + + houseTemplate.addBuildingSign("object/tangible/sign/player/shared_house_address.iff", Point3D(float(3.5),float(-0.3),float(3.5))) + houseTemplate.addPlaceablePlanet("tatooine") + houseTemplate.addPlaceablePlanet("corellia") + houseTemplate.addPlaceablePlanet("naboo") + houseTemplate.addPlaceablePlanet("talus") + houseTemplate.addPlaceablePlanet("rori") + houseTemplate.addPlaceablePlanet("dantooine") + houseTemplate.addPlaceablePlanet("lok") + houseTemplate.setDefaultItemLimit(200) + houseTemplate.setBaseMaintenanceRate(8) + housingTemplates.put(houseTemplate.getDeedTemplate(), houseTemplate) + return \ No newline at end of file diff --git a/scripts/houses/player_shuttleport_tatooine.py b/scripts/houses/player_shuttleport_tatooine.py new file mode 100644 index 00000000..4d7e480f --- /dev/null +++ b/scripts/houses/player_shuttleport_tatooine.py @@ -0,0 +1,12 @@ +import sys +from services.housing import HouseTemplate +from engine.resources.scene import Point3D + +def setup(housingTemplates): + houseTemplate = HouseTemplate("object/tangible/deed/city_deed/shared_shuttleport_tatooine_deed.iff", "object/building/tatooine/shared_shuttleport_tatooine.iff", 1) + + houseTemplate.addBuildingSign("object/tangible/sign/player/shared_house_address.iff", Point3D(float(3.5),float(-0.3),float(3.5))) + houseTemplate.addPlaceablePlanet("tatooine") + houseTemplate.setDefaultItemLimit(0) + housingTemplates.put(houseTemplate.getDeedTemplate(), houseTemplate) + return \ No newline at end of file diff --git a/scripts/instances/heroic_exar_kun.py b/scripts/instances/heroic_exar_kun.py new file mode 100644 index 00000000..d961fee0 --- /dev/null +++ b/scripts/instances/heroic_exar_kun.py @@ -0,0 +1,53 @@ +import sys +import services.InstanceService.Instance + +def getTerrain(): + return 'terrain/dungeon1.trn' + +def getBuilding(): + return 'object/building/heroic/shared_exar_kun_tomb.iff' + +def getCellId(): + return 1 + +def getSpawnPosition(position): + position.x = float(-11.918457) + position.y = float(0.601063) + position.z = float(-125.692871) + return + +def getDuration(): + return 120 + +# NK lockout time was 30 minutes. Most instances were 0 and got reset at 12AM PTC. +def getLockoutTime(): + return 0 + +def getExitTerrain(): + return 'terrain/yavin4.trn' + +def getExitPosition(position): + position.x = float(5097) + position.y = float(0) + position.z = float(5537) + return + +# Called on instance creation to spawn npcs and objects. +def setup(core, instance): + return + +# Called when there is a new participant added to the instance. +def add(core, instance, actor): + return + +# Called when a participant is removed from the instance. +def remove(core, instance, actor): + return + +# Any operations that need to be carried out regularly +def run(core, instance): + return + +# Called on instance destruction to destroy the instance. +def destroy(core, instance): + return \ No newline at end of file diff --git a/scripts/instances/heroic_star_destroyer.py b/scripts/instances/heroic_star_destroyer.py new file mode 100644 index 00000000..2109ea39 --- /dev/null +++ b/scripts/instances/heroic_star_destroyer.py @@ -0,0 +1,53 @@ +import sys +import services.InstanceService.Instance + +def getTerrain(): + return 'terrain/dungeon1.trn' + +def getBuilding(): + return 'object/building/general/shared_space_dungeon_star_destroyer.iff' + +def getCellId(): + return 36 + +def getSpawnPosition(position): + position.x = float(0) + position.y = float(173.834625) + position.z = float(30) + return + +def getDuration(): + return 120 + +# NK lockout time was 30 minutes. Most instances were 0 and got reset at 12AM PTC. +def getLockoutTime(): + return 0 + +def getExitTerrain(): + return 'terrain/corellia.trn' + +def getExitPosition(position): + position.x = float(-131) + position.y = float(0) + position.z = float(-4723) + return + +# Called on instance creation to spawn npcs and objects. +def setup(core, instance): + return + +# Called when there is a new participant added to the instance. +def add(core, instance, actor): + return + +# Called when a participant is removed from the instance. +def remove(core, instance, actor): + return + +# Any operations that need to be carried out regularly +def run(core, instance): + return + +# Called on instance destruction to destroy the instance. +def destroy(core, instance): + return \ No newline at end of file diff --git a/scripts/loot/lootItems/armor/bone/bone_armor_bicep_left.py b/scripts/loot/lootItems/armor/bone/bone_armor_bicep_left.py new file mode 100644 index 00000000..fe66e1ab --- /dev/null +++ b/scripts/loot/lootItems/armor/bone/bone_armor_bicep_left.py @@ -0,0 +1,31 @@ + +def itemTemplate(): + + return ['object/tangible/wearables/armor/bone/shared_armor_bone_s01_bicep_l.iff'] + +#def customItemName(): + +# return 'Bone Armor Bicep Left' + +def customItemStackCount(): + + return 1 + +def customizationAttributes(): + + return [] + +def customizationValues(): + + return [] + +def itemStats(): + + stats = ['armor_efficiency_kinetic','5000','6800'] + stats += ['armor_efficiency_energy','3000','4800'] + stats += ['special_protection_heat','4000','5800'] + stats += ['special_protection_cold','4000','5800'] + stats += ['special_protection_acid','4000','5800'] + stats += ['special_protection_electricity','4000','5800'] + + return stats diff --git a/scripts/loot/lootItems/armor/bone/bone_armor_bicep_right.py b/scripts/loot/lootItems/armor/bone/bone_armor_bicep_right.py new file mode 100644 index 00000000..09b6ad68 --- /dev/null +++ b/scripts/loot/lootItems/armor/bone/bone_armor_bicep_right.py @@ -0,0 +1,31 @@ + +def itemTemplate(): + + return ['object/tangible/wearables/armor/bone/shared_armor_bone_s01_bicep_r.iff'] + +def customItemName(): + + return 'Bone Armor Bicep Right' + +def customItemStackCount(): + + return 1 + +def customizationAttributes(): + + return [] + +def customizationValues(): + + return [] + +def itemStats(): + + stats = ['armor_efficiency_kinetic','5000','6800'] + stats += ['armor_efficiency_energy','3000','4800'] + stats += ['special_protection_heat','4000','5800'] + stats += ['special_protection_cold','4000','5800'] + stats += ['special_protection_acid','4000','5800'] + stats += ['special_protection_electricity','4000','5800'] + + return stats diff --git a/scripts/loot/lootItems/armor/bone/bone_armor_boots.py b/scripts/loot/lootItems/armor/bone/bone_armor_boots.py new file mode 100644 index 00000000..da526052 --- /dev/null +++ b/scripts/loot/lootItems/armor/bone/bone_armor_boots.py @@ -0,0 +1,24 @@ + +def itemTemplate(): + + return ['object/tangible/wearables/armor/bone/shared_armor_bone_s01_boots.iff'] + +def customItemName(): + + return 'Bone Armor Boots' + +def customItemStackCount(): + + return 1 + +def customizationAttributes(): + + return [] + +def customizationValues(): + + return [] + +def itemStats(): + + return [] diff --git a/scripts/loot/lootItems/armor/bone/bone_armor_bracer_left.py b/scripts/loot/lootItems/armor/bone/bone_armor_bracer_left.py new file mode 100644 index 00000000..75e01372 --- /dev/null +++ b/scripts/loot/lootItems/armor/bone/bone_armor_bracer_left.py @@ -0,0 +1,31 @@ + +def itemTemplate(): + + return ['object/tangible/wearables/armor/bone/shared_armor_bone_s01_bracer_l.iff'] + +def customItemName(): + + return 'Bone Armor Bracer Left' + +def customItemStackCount(): + + return 1 + +def customizationAttributes(): + + return [] + +def customizationValues(): + + return [] + +def itemStats(): + + stats = ['armor_efficiency_kinetic','5000','6800'] + stats += ['armor_efficiency_energy','3000','4800'] + stats += ['special_protection_heat','4000','5800'] + stats += ['special_protection_cold','4000','5800'] + stats += ['special_protection_acid','4000','5800'] + stats += ['special_protection_electricity','4000','5800'] + + return stats diff --git a/scripts/loot/lootItems/armor/bone/bone_armor_bracer_right.py b/scripts/loot/lootItems/armor/bone/bone_armor_bracer_right.py new file mode 100644 index 00000000..a7049c68 --- /dev/null +++ b/scripts/loot/lootItems/armor/bone/bone_armor_bracer_right.py @@ -0,0 +1,31 @@ + +def itemTemplate(): + + return ['object/tangible/wearables/armor/bone/shared_armor_bone_s01_bracer_r.iff'] + +def customItemName(): + + return 'Bone Armor Bracer Right' + +def customItemStackCount(): + + return 1 + +def customizationAttributes(): + + return [] + +def customizationValues(): + + return [] + +def itemStats(): + + stats = ['armor_efficiency_kinetic','5000','6800'] + stats += ['armor_efficiency_energy','3000','4800'] + stats += ['special_protection_heat','4000','5800'] + stats += ['special_protection_cold','4000','5800'] + stats += ['special_protection_acid','4000','5800'] + stats += ['special_protection_electricity','4000','5800'] + + return stats diff --git a/scripts/loot/lootItems/armor/bone/bone_armor_chestplate.py b/scripts/loot/lootItems/armor/bone/bone_armor_chestplate.py new file mode 100644 index 00000000..dd41276b --- /dev/null +++ b/scripts/loot/lootItems/armor/bone/bone_armor_chestplate.py @@ -0,0 +1,31 @@ + +def itemTemplate(): + + return ['object/tangible/wearables/armor/bone/shared_armor_bone_s01_chest_plate.iff'] + +def customItemName(): + + return 'Bone Armor Chestplate' + +def customItemStackCount(): + + return 1 + +def customizationAttributes(): + + return [] + +def customizationValues(): + + return [] + +def itemStats(): + + stats = ['armor_efficiency_kinetic','5000','6800'] + stats += ['armor_efficiency_energy','3000','4800'] + stats += ['special_protection_heat','4000','5800'] + stats += ['special_protection_cold','4000','5800'] + stats += ['special_protection_acid','4000','5800'] + stats += ['special_protection_electricity','4000','5800'] + + return stats diff --git a/scripts/loot/lootItems/armor/bone/bone_armor_gloves.py b/scripts/loot/lootItems/armor/bone/bone_armor_gloves.py new file mode 100644 index 00000000..a4730f12 --- /dev/null +++ b/scripts/loot/lootItems/armor/bone/bone_armor_gloves.py @@ -0,0 +1,24 @@ + +def itemTemplate(): + + return ['object/tangible/wearables/armor/bone/shared_armor_bone_s01_gloves.iff'] + +def customItemName(): + + return 'Bone Armor Gloves' + +def customItemStackCount(): + + return 1 + +def customizationAttributes(): + + return [] + +def customizationValues(): + + return [] + +def itemStats(): + + return [] diff --git a/scripts/loot/lootItems/armor/bone/bone_armor_helmet.py b/scripts/loot/lootItems/armor/bone/bone_armor_helmet.py new file mode 100644 index 00000000..88cab026 --- /dev/null +++ b/scripts/loot/lootItems/armor/bone/bone_armor_helmet.py @@ -0,0 +1,31 @@ + +def itemTemplate(): + + return ['object/tangible/wearables/armor/bone/shared_armor_bone_s01_helmet.iff'] + +def customItemName(): + + return 'Bone Armor Helmet' + +def customItemStackCount(): + + return 1 + +def customizationAttributes(): + + return [] + +def customizationValues(): + + return [] + +def itemStats(): + + stats = ['armor_efficiency_kinetic','5000','6800'] + stats += ['armor_efficiency_energy','3000','4800'] + stats += ['special_protection_heat','4000','5800'] + stats += ['special_protection_cold','4000','5800'] + stats += ['special_protection_acid','4000','5800'] + stats += ['special_protection_electricity','4000','5800'] + + return stats diff --git a/scripts/loot/lootItems/armor/bone/bone_armor_leggings.py b/scripts/loot/lootItems/armor/bone/bone_armor_leggings.py new file mode 100644 index 00000000..2c3f2671 --- /dev/null +++ b/scripts/loot/lootItems/armor/bone/bone_armor_leggings.py @@ -0,0 +1,31 @@ + +def itemTemplate(): + + return ['object/tangible/wearables/armor/bone/shared_armor_bone_s01_leggings.iff'] + +def customItemName(): + + return 'Bone Armor Leggings' + +def customItemStackCount(): + + return 1 + +def customizationAttributes(): + + return [] + +def customizationValues(): + + return [] + +def itemStats(): + + stats = ['armor_efficiency_kinetic','5000','6800'] + stats += ['armor_efficiency_energy','3000','4800'] + stats += ['special_protection_heat','4000','5800'] + stats += ['special_protection_cold','4000','5800'] + stats += ['special_protection_acid','4000','5800'] + stats += ['special_protection_electricity','4000','5800'] + + return stats diff --git a/scripts/loot/lootItems/armor/chitin/chitin_armor_bicep_left.py b/scripts/loot/lootItems/armor/chitin/chitin_armor_bicep_left.py new file mode 100644 index 00000000..d70540c8 --- /dev/null +++ b/scripts/loot/lootItems/armor/chitin/chitin_armor_bicep_left.py @@ -0,0 +1,31 @@ + +def itemTemplate(): + + return ['object/tangible/wearables/armor/chitin/shared_armor_chitin_s01_bicep_l.iff'] + +def customItemName(): + + return 'Chitin Armor Bicep Left' + +def customItemStackCount(): + + return 1 + +def customizationAttributes(): + + return [] + +def customizationValues(): + + return [] + +def itemStats(): + + stats = ['armor_efficiency_kinetic','5000','6800'] + stats += ['armor_efficiency_energy','3000','4800'] + stats += ['special_protection_heat','4000','5800'] + stats += ['special_protection_cold','4000','5800'] + stats += ['special_protection_acid','4000','5800'] + stats += ['special_protection_electricity','4000','5800'] + + return stats diff --git a/scripts/loot/lootItems/armor/chitin/chitin_armor_bicep_right.py b/scripts/loot/lootItems/armor/chitin/chitin_armor_bicep_right.py new file mode 100644 index 00000000..76a9ff3d --- /dev/null +++ b/scripts/loot/lootItems/armor/chitin/chitin_armor_bicep_right.py @@ -0,0 +1,31 @@ + +def itemTemplate(): + + return ['object/tangible/wearables/armor/chitin/shared_armor_chitin_s01_bicep_r.iff'] + +def customItemName(): + + return 'Chitin Armor Bicep Right' + +def customItemStackCount(): + + return 1 + +def customizationAttributes(): + + return [] + +def customizationValues(): + + return [] + +def itemStats(): + + stats = ['armor_efficiency_kinetic','5000','6800'] + stats += ['armor_efficiency_energy','3000','4800'] + stats += ['special_protection_heat','4000','5800'] + stats += ['special_protection_cold','4000','5800'] + stats += ['special_protection_acid','4000','5800'] + stats += ['special_protection_electricity','4000','5800'] + + return stats diff --git a/scripts/loot/lootItems/armor/chitin/chitin_armor_boots.py b/scripts/loot/lootItems/armor/chitin/chitin_armor_boots.py new file mode 100644 index 00000000..127dd61d --- /dev/null +++ b/scripts/loot/lootItems/armor/chitin/chitin_armor_boots.py @@ -0,0 +1,24 @@ + +def itemTemplate(): + + return ['object/tangible/wearables/armor/chitin/shared_armor_chitin_s01_boots.iff'] + +def customItemName(): + + return 'Chitin Armor Boots' + +def customItemStackCount(): + + return 1 + +def customizationAttributes(): + + return [] + +def customizationValues(): + + return [] + +def itemStats(): + + return [] diff --git a/scripts/loot/lootItems/armor/chitin/chitin_armor_bracer_left.py b/scripts/loot/lootItems/armor/chitin/chitin_armor_bracer_left.py new file mode 100644 index 00000000..70f1135c --- /dev/null +++ b/scripts/loot/lootItems/armor/chitin/chitin_armor_bracer_left.py @@ -0,0 +1,31 @@ + +def itemTemplate(): + + return ['object/tangible/wearables/armor/chitin/shared_armor_chitin_s01_bracer_l.iff'] + +def customItemName(): + + return 'Chitin Armor Bracer Left' + +def customItemStackCount(): + + return 1 + +def customizationAttributes(): + + return [] + +def customizationValues(): + + return [] + +def itemStats(): + + stats = ['armor_efficiency_kinetic','5000','6800'] + stats += ['armor_efficiency_energy','3000','4800'] + stats += ['special_protection_heat','4000','5800'] + stats += ['special_protection_cold','4000','5800'] + stats += ['special_protection_acid','4000','5800'] + stats += ['special_protection_electricity','4000','5800'] + + return stats diff --git a/scripts/loot/lootItems/armor/chitin/chitin_armor_bracer_right.py b/scripts/loot/lootItems/armor/chitin/chitin_armor_bracer_right.py new file mode 100644 index 00000000..5ae0a4f3 --- /dev/null +++ b/scripts/loot/lootItems/armor/chitin/chitin_armor_bracer_right.py @@ -0,0 +1,31 @@ + +def itemTemplate(): + + return ['object/tangible/wearables/armor/chitin/shared_armor_chitin_s01_bracer_r.iff'] + +def customItemName(): + + return 'Chitin Armor Bracer Right' + +def customItemStackCount(): + + return 1 + +def customizationAttributes(): + + return [] + +def customizationValues(): + + return [] + +def itemStats(): + + stats = ['armor_efficiency_kinetic','5000','6800'] + stats += ['armor_efficiency_energy','3000','4800'] + stats += ['special_protection_heat','4000','5800'] + stats += ['special_protection_cold','4000','5800'] + stats += ['special_protection_acid','4000','5800'] + stats += ['special_protection_electricity','4000','5800'] + + return stats diff --git a/scripts/loot/lootItems/armor/chitin/chitin_armor_chestplate.py b/scripts/loot/lootItems/armor/chitin/chitin_armor_chestplate.py new file mode 100644 index 00000000..29450398 --- /dev/null +++ b/scripts/loot/lootItems/armor/chitin/chitin_armor_chestplate.py @@ -0,0 +1,31 @@ + +def itemTemplate(): + + return ['object/tangible/wearables/armor/chitin/shared_armor_chitin_s01_chest_plate.iff'] + +def customItemName(): + + return 'Chitin Armor Chestplate' + +def customItemStackCount(): + + return 1 + +def customizationAttributes(): + + return [] + +def customizationValues(): + + return [] + +def itemStats(): + + stats = ['armor_efficiency_kinetic','5000','6800'] + stats += ['armor_efficiency_energy','3000','4800'] + stats += ['special_protection_heat','4000','5800'] + stats += ['special_protection_cold','4000','5800'] + stats += ['special_protection_acid','4000','5800'] + stats += ['special_protection_electricity','4000','5800'] + + return stats diff --git a/scripts/loot/lootItems/armor/chitin/chitin_armor_gloves.py b/scripts/loot/lootItems/armor/chitin/chitin_armor_gloves.py new file mode 100644 index 00000000..30701432 --- /dev/null +++ b/scripts/loot/lootItems/armor/chitin/chitin_armor_gloves.py @@ -0,0 +1,24 @@ + +def itemTemplate(): + + return ['object/tangible/wearables/armor/chitin/shared_armor_chitin_s01_gloves.iff'] + +def customItemName(): + + return 'Chitin Armor Gloves' + +def customItemStackCount(): + + return 1 + +def customizationAttributes(): + + return [] + +def customizationValues(): + + return [] + +def itemStats(): + + return [] diff --git a/scripts/loot/lootItems/armor/chitin/chitin_armor_helmet.py b/scripts/loot/lootItems/armor/chitin/chitin_armor_helmet.py new file mode 100644 index 00000000..16fea8fd --- /dev/null +++ b/scripts/loot/lootItems/armor/chitin/chitin_armor_helmet.py @@ -0,0 +1,31 @@ + +def itemTemplate(): + + return ['object/tangible/wearables/armor/chitin/shared_armor_chitin_s01_helmet.iff'] + +def customItemName(): + + return 'Chitin Armor Helmet' + +def customItemStackCount(): + + return 1 + +def customizationAttributes(): + + return [] + +def customizationValues(): + + return [] + +def itemStats(): + + stats = ['armor_efficiency_kinetic','5000','6800'] + stats += ['armor_efficiency_energy','3000','4800'] + stats += ['special_protection_heat','4000','5800'] + stats += ['special_protection_cold','4000','5800'] + stats += ['special_protection_acid','4000','5800'] + stats += ['special_protection_electricity','4000','5800'] + + return stats diff --git a/scripts/loot/lootItems/armor/chitin/chitin_armor_leggings.py b/scripts/loot/lootItems/armor/chitin/chitin_armor_leggings.py new file mode 100644 index 00000000..f98f26c2 --- /dev/null +++ b/scripts/loot/lootItems/armor/chitin/chitin_armor_leggings.py @@ -0,0 +1,31 @@ + +def itemTemplate(): + + return ['object/tangible/wearables/armor/chitin/shared_armor_chitin_s01_leggings.iff'] + +def customItemName(): + + return 'Chitin Armor Leggings' + +def customItemStackCount(): + + return 1 + +def customizationAttributes(): + + return [] + +def customizationValues(): + + return [] + +def itemStats(): + + stats = ['armor_efficiency_kinetic','5000','6800'] + stats += ['armor_efficiency_energy','3000','4800'] + stats += ['special_protection_heat','4000','5800'] + stats += ['special_protection_cold','4000','5800'] + stats += ['special_protection_acid','4000','5800'] + stats += ['special_protection_electricity','4000','5800'] + + return stats diff --git a/scripts/loot/lootItems/armor/composite/composite_armor_bicep_left.py b/scripts/loot/lootItems/armor/composite/composite_armor_bicep_left.py new file mode 100644 index 00000000..d5089e38 --- /dev/null +++ b/scripts/loot/lootItems/armor/composite/composite_armor_bicep_left.py @@ -0,0 +1,31 @@ + +def itemTemplate(): + + return ['object/tangible/wearables/armor/composite/shared_armor_composite_bicep_l.iff'] + +def customItemName(): + + return 'Composite Armor Left Bicep' + +def customItemStackCount(): + + return 1 + +def customizationAttributes(): + + return [] + +def customizationValues(): + + return [] + +def itemStats(): + + stats = ['armor_efficiency_kinetic','5000','6800'] + stats += ['armor_efficiency_energy','3000','4800'] + stats += ['special_protection_heat','4000','5800'] + stats += ['special_protection_cold','4000','5800'] + stats += ['special_protection_acid','4000','5800'] + stats += ['special_protection_electricity','4000','5800'] + + return stats diff --git a/scripts/loot/lootItems/armor/composite/composite_armor_bicep_right.py b/scripts/loot/lootItems/armor/composite/composite_armor_bicep_right.py new file mode 100644 index 00000000..5e04243e --- /dev/null +++ b/scripts/loot/lootItems/armor/composite/composite_armor_bicep_right.py @@ -0,0 +1,31 @@ + +def itemTemplate(): + + return ['object/tangible/wearables/armor/composite/shared_armor_composite_bicep_r.iff'] + +def customItemName(): + + return 'Composite Armor Right Bicep' + +def customItemStackCount(): + + return 1 + +def customizationAttributes(): + + return [] + +def customizationValues(): + + return [] + +def itemStats(): + + stats = ['armor_efficiency_kinetic','5000','6800'] + stats += ['armor_efficiency_energy','3000','4800'] + stats += ['special_protection_heat','4000','5800'] + stats += ['special_protection_cold','4000','5800'] + stats += ['special_protection_acid','4000','5800'] + stats += ['special_protection_electricity','4000','5800'] + + return stats diff --git a/scripts/loot/lootItems/armor/composite/composite_armor_boots.py b/scripts/loot/lootItems/armor/composite/composite_armor_boots.py new file mode 100644 index 00000000..9ae88c3a --- /dev/null +++ b/scripts/loot/lootItems/armor/composite/composite_armor_boots.py @@ -0,0 +1,24 @@ + +def itemTemplate(): + + return ['object/tangible/wearables/armor/composite/shared_armor_composite_boots.iff'] + +def customItemName(): + + return 'Composite Armor Boots' + +def customItemStackCount(): + + return 1 + +def customizationAttributes(): + + return [] + +def customizationValues(): + + return [] + +def itemStats(): + + return [] diff --git a/scripts/loot/lootItems/armor/composite/composite_armor_bracer_left.py b/scripts/loot/lootItems/armor/composite/composite_armor_bracer_left.py new file mode 100644 index 00000000..7d805114 --- /dev/null +++ b/scripts/loot/lootItems/armor/composite/composite_armor_bracer_left.py @@ -0,0 +1,31 @@ + +def itemTemplate(): + + return ['object/tangible/wearables/armor/composite/shared_armor_composite_bracer_l.iff'] + +def customItemName(): + + return 'Composite Armor Bracer Left' + +def customItemStackCount(): + + return 1 + +def customizationAttributes(): + + return [] + +def customizationValues(): + + return [] + +def itemStats(): + + stats = ['armor_efficiency_kinetic','5000','6800'] + stats += ['armor_efficiency_energy','3000','4800'] + stats += ['special_protection_heat','4000','5800'] + stats += ['special_protection_cold','4000','5800'] + stats += ['special_protection_acid','4000','5800'] + stats += ['special_protection_electricity','4000','5800'] + + return stats diff --git a/scripts/loot/lootItems/armor/composite/composite_armor_bracer_right.py b/scripts/loot/lootItems/armor/composite/composite_armor_bracer_right.py new file mode 100644 index 00000000..deb22a6c --- /dev/null +++ b/scripts/loot/lootItems/armor/composite/composite_armor_bracer_right.py @@ -0,0 +1,31 @@ + +def itemTemplate(): + + return ['object/tangible/wearables/armor/composite/shared_armor_composite_bracer_r.iff'] + +def customItemName(): + + return 'Composite Armor Bracer Right' + +def customItemStackCount(): + + return 1 + +def customizationAttributes(): + + return [] + +def customizationValues(): + + return [] + +def itemStats(): + + stats = ['armor_efficiency_kinetic','5000','6800'] + stats += ['armor_efficiency_energy','3000','4800'] + stats += ['special_protection_heat','4000','5800'] + stats += ['special_protection_cold','4000','5800'] + stats += ['special_protection_acid','4000','5800'] + stats += ['special_protection_electricity','4000','5800'] + + return stats diff --git a/scripts/loot/lootItems/armor/composite/composite_armor_chestplate.py b/scripts/loot/lootItems/armor/composite/composite_armor_chestplate.py new file mode 100644 index 00000000..b569da42 --- /dev/null +++ b/scripts/loot/lootItems/armor/composite/composite_armor_chestplate.py @@ -0,0 +1,31 @@ + +def itemTemplate(): + + return ['object/tangible/wearables/armor/composite/shared_armor_composite_chest_plate.iff'] + +def customItemName(): + + return 'Composite Armor Chestplate' + +def customItemStackCount(): + + return 1 + +def customizationAttributes(): + + return [] + +def customizationValues(): + + return [] + +def itemStats(): + + stats = ['armor_efficiency_kinetic','5000','6800'] + stats += ['armor_efficiency_energy','3000','4800'] + stats += ['special_protection_heat','4000','5800'] + stats += ['special_protection_cold','4000','5800'] + stats += ['special_protection_acid','4000','5800'] + stats += ['special_protection_electricity','4000','5800'] + + return stats diff --git a/scripts/loot/lootItems/armor/composite/composite_armor_gloves.py b/scripts/loot/lootItems/armor/composite/composite_armor_gloves.py new file mode 100644 index 00000000..91d2be4c --- /dev/null +++ b/scripts/loot/lootItems/armor/composite/composite_armor_gloves.py @@ -0,0 +1,24 @@ + +def itemTemplate(): + + return ['object/tangible/wearables/armor/composite/shared_armor_composite_gloves.iff'] + +def customItemName(): + + return 'Composite Armor Gloves' + +def customItemStackCount(): + + return 1 + +def customizationAttributes(): + + return [] + +def customizationValues(): + + return [] + +def itemStats(): + + return [] diff --git a/scripts/loot/lootItems/armor/composite/composite_armor_helmet.py b/scripts/loot/lootItems/armor/composite/composite_armor_helmet.py new file mode 100644 index 00000000..d5fe36de --- /dev/null +++ b/scripts/loot/lootItems/armor/composite/composite_armor_helmet.py @@ -0,0 +1,31 @@ + +def itemTemplate(): + + return ['object/tangible/wearables/armor/composite/shared_armor_composite_helmet.iff'] + +def customItemName(): + + return 'Composite Armor Helmet' + +def customItemStackCount(): + + return 1 + +def customizationAttributes(): + + return [] + +def customizationValues(): + + return [] + +def itemStats(): + + stats = ['armor_efficiency_kinetic','5000','6800'] + stats += ['armor_efficiency_energy','3000','4800'] + stats += ['special_protection_heat','4000','5800'] + stats += ['special_protection_cold','4000','5800'] + stats += ['special_protection_acid','4000','5800'] + stats += ['special_protection_electricity','4000','5800'] + + return stats diff --git a/scripts/loot/lootItems/armor/composite/composite_armor_leggings.py b/scripts/loot/lootItems/armor/composite/composite_armor_leggings.py new file mode 100644 index 00000000..a48864a4 --- /dev/null +++ b/scripts/loot/lootItems/armor/composite/composite_armor_leggings.py @@ -0,0 +1,31 @@ + +def itemTemplate(): + + return ['object/tangible/wearables/armor/composite/shared_armor_composite_leggings.iff'] + +def customItemName(): + + return 'Composite Armor Leggings' + +def customItemStackCount(): + + return 1 + +def customizationAttributes(): + + return [] + +def customizationValues(): + + return [] + +def itemStats(): + + stats = ['armor_efficiency_kinetic','5000','6800'] + stats += ['armor_efficiency_energy','3000','4800'] + stats += ['special_protection_heat','4000','5800'] + stats += ['special_protection_cold','4000','5800'] + stats += ['special_protection_acid','4000','5800'] + stats += ['special_protection_electricity','4000','5800'] + + return stats diff --git a/scripts/loot/lootItems/armor/ithorian_defender/ithorian_defender_armor_bicep_left.py b/scripts/loot/lootItems/armor/ithorian_defender/ithorian_defender_armor_bicep_left.py new file mode 100644 index 00000000..06abafbd --- /dev/null +++ b/scripts/loot/lootItems/armor/ithorian_defender/ithorian_defender_armor_bicep_left.py @@ -0,0 +1,31 @@ + +def itemTemplate(): + + return ['object/tangible/wearables/armor/ithorian_defender/shared_ith_armor_s01_bicep_l.iff'] + +def customItemName(): + + return 'Ithorian Defender Armor Bicep Left' + +def customItemStackCount(): + + return 1 + +def customizationAttributes(): + + return [] + +def customizationValues(): + + return [] + +def itemStats(): + + stats = ['armor_efficiency_kinetic','5000','6800'] + stats += ['armor_efficiency_energy','3000','4800'] + stats += ['special_protection_heat','4000','5800'] + stats += ['special_protection_cold','4000','5800'] + stats += ['special_protection_acid','4000','5800'] + stats += ['special_protection_electricity','4000','5800'] + + return stats diff --git a/scripts/loot/lootItems/armor/ithorian_defender/ithorian_defender_armor_bicep_right.py b/scripts/loot/lootItems/armor/ithorian_defender/ithorian_defender_armor_bicep_right.py new file mode 100644 index 00000000..3a226c23 --- /dev/null +++ b/scripts/loot/lootItems/armor/ithorian_defender/ithorian_defender_armor_bicep_right.py @@ -0,0 +1,31 @@ + +def itemTemplate(): + + return ['object/tangible/wearables/armor/ithorian_defender/shared_ith_armor_s01_bicep_r.iff'] + +def customItemName(): + + return 'Ithorian Defender Armor Bicep Right' + +def customItemStackCount(): + + return 1 + +def customizationAttributes(): + + return [] + +def customizationValues(): + + return [] + +def itemStats(): + + stats = ['armor_efficiency_kinetic','5000','6800'] + stats += ['armor_efficiency_energy','3000','4800'] + stats += ['special_protection_heat','4000','5800'] + stats += ['special_protection_cold','4000','5800'] + stats += ['special_protection_acid','4000','5800'] + stats += ['special_protection_electricity','4000','5800'] + + return stats diff --git a/scripts/loot/lootItems/armor/ithorian_defender/ithorian_defender_armor_boots.py b/scripts/loot/lootItems/armor/ithorian_defender/ithorian_defender_armor_boots.py new file mode 100644 index 00000000..bccf5133 --- /dev/null +++ b/scripts/loot/lootItems/armor/ithorian_defender/ithorian_defender_armor_boots.py @@ -0,0 +1,24 @@ + +def itemTemplate(): + + return ['object/tangible/wearables/armor/ithorian_defender/shared_ith_armor_s01_boots.iff'] + +def customItemName(): + + return 'Ithorian Defender Armor Boots' + +def customItemStackCount(): + + return 1 + +def customizationAttributes(): + + return [] + +def customizationValues(): + + return [] + +def itemStats(): + + return [] diff --git a/scripts/loot/lootItems/armor/ithorian_defender/ithorian_defender_armor_bracer_left.py b/scripts/loot/lootItems/armor/ithorian_defender/ithorian_defender_armor_bracer_left.py new file mode 100644 index 00000000..607baa7f --- /dev/null +++ b/scripts/loot/lootItems/armor/ithorian_defender/ithorian_defender_armor_bracer_left.py @@ -0,0 +1,31 @@ + +def itemTemplate(): + + return ['object/tangible/wearables/armor/ithorian_defender/shared_ith_armor_s01_bracer_l.iff'] + +def customItemName(): + + return 'Ithorian Defender Armor Bracer Left' + +def customItemStackCount(): + + return 1 + +def customizationAttributes(): + + return [] + +def customizationValues(): + + return [] + +def itemStats(): + + stats = ['armor_efficiency_kinetic','5000','6800'] + stats += ['armor_efficiency_energy','3000','4800'] + stats += ['special_protection_heat','4000','5800'] + stats += ['special_protection_cold','4000','5800'] + stats += ['special_protection_acid','4000','5800'] + stats += ['special_protection_electricity','4000','5800'] + + return stats diff --git a/scripts/loot/lootItems/armor/ithorian_defender/ithorian_defender_armor_bracer_right.py b/scripts/loot/lootItems/armor/ithorian_defender/ithorian_defender_armor_bracer_right.py new file mode 100644 index 00000000..63cb0e4b --- /dev/null +++ b/scripts/loot/lootItems/armor/ithorian_defender/ithorian_defender_armor_bracer_right.py @@ -0,0 +1,31 @@ + +def itemTemplate(): + + return ['object/tangible/wearables/armor/ithorian_defender/shared_ith_armor_s01_bracer_r.iff'] + +def customItemName(): + + return 'Ithorian Defender Armor Bracer Right' + +def customItemStackCount(): + + return 1 + +def customizationAttributes(): + + return [] + +def customizationValues(): + + return [] + +def itemStats(): + + stats = ['armor_efficiency_kinetic','5000','6800'] + stats += ['armor_efficiency_energy','3000','4800'] + stats += ['special_protection_heat','4000','5800'] + stats += ['special_protection_cold','4000','5800'] + stats += ['special_protection_acid','4000','5800'] + stats += ['special_protection_electricity','4000','5800'] + + return stats diff --git a/scripts/loot/lootItems/armor/ithorian_defender/ithorian_defender_armor_chestplate.py b/scripts/loot/lootItems/armor/ithorian_defender/ithorian_defender_armor_chestplate.py new file mode 100644 index 00000000..0c0d699b --- /dev/null +++ b/scripts/loot/lootItems/armor/ithorian_defender/ithorian_defender_armor_chestplate.py @@ -0,0 +1,31 @@ + +def itemTemplate(): + + return ['object/tangible/wearables/armor/ithorian_defender/shared_ith_armor_s01_chest_plate.iff'] + +def customItemName(): + + return 'Ithorian Defender Armor Chestplate' + +def customItemStackCount(): + + return 1 + +def customizationAttributes(): + + return [] + +def customizationValues(): + + return [] + +def itemStats(): + + stats = ['armor_efficiency_kinetic','5000','6800'] + stats += ['armor_efficiency_energy','3000','4800'] + stats += ['special_protection_heat','4000','5800'] + stats += ['special_protection_cold','4000','5800'] + stats += ['special_protection_acid','4000','5800'] + stats += ['special_protection_electricity','4000','5800'] + + return stats diff --git a/scripts/loot/lootItems/armor/ithorian_defender/ithorian_defender_armor_gloves.py b/scripts/loot/lootItems/armor/ithorian_defender/ithorian_defender_armor_gloves.py new file mode 100644 index 00000000..0804e505 --- /dev/null +++ b/scripts/loot/lootItems/armor/ithorian_defender/ithorian_defender_armor_gloves.py @@ -0,0 +1,24 @@ + +def itemTemplate(): + + return ['object/tangible/wearables/armor/ithorian_defender/shared_ith_armor_s01_gloves.iff'] + +def customItemName(): + + return 'Ithorian Defender Armor Gloves' + +def customItemStackCount(): + + return 1 + +def customizationAttributes(): + + return [] + +def customizationValues(): + + return [] + +def itemStats(): + + return [] diff --git a/scripts/loot/lootItems/armor/ithorian_defender/ithorian_defender_armor_helmet.py b/scripts/loot/lootItems/armor/ithorian_defender/ithorian_defender_armor_helmet.py new file mode 100644 index 00000000..7828a56b --- /dev/null +++ b/scripts/loot/lootItems/armor/ithorian_defender/ithorian_defender_armor_helmet.py @@ -0,0 +1,31 @@ + +def itemTemplate(): + + return ['object/tangible/wearables/armor/ithorian_defender/shared_ith_armor_s01_helmet.iff'] + +def customItemName(): + + return 'Ithorian Defender Armor Helmet' + +def customItemStackCount(): + + return 1 + +def customizationAttributes(): + + return [] + +def customizationValues(): + + return [] + +def itemStats(): + + stats = ['armor_efficiency_kinetic','5000','6800'] + stats += ['armor_efficiency_energy','3000','4800'] + stats += ['special_protection_heat','4000','5800'] + stats += ['special_protection_cold','4000','5800'] + stats += ['special_protection_acid','4000','5800'] + stats += ['special_protection_electricity','4000','5800'] + + return stats diff --git a/scripts/loot/lootItems/armor/ithorian_defender/ithorian_defender_armor_leggings.py b/scripts/loot/lootItems/armor/ithorian_defender/ithorian_defender_armor_leggings.py new file mode 100644 index 00000000..f95cff3f --- /dev/null +++ b/scripts/loot/lootItems/armor/ithorian_defender/ithorian_defender_armor_leggings.py @@ -0,0 +1,31 @@ + +def itemTemplate(): + + return ['object/tangible/wearables/armor/ithorian_defender/shared_ith_armor_s01_leggings.iff'] + +def customItemName(): + + return 'Ithorian Defender Armor Leggings' + +def customItemStackCount(): + + return 1 + +def customizationAttributes(): + + return [] + +def customizationValues(): + + return [] + +def itemStats(): + + stats = ['armor_efficiency_kinetic','5000','6800'] + stats += ['armor_efficiency_energy','3000','4800'] + stats += ['special_protection_heat','4000','5800'] + stats += ['special_protection_cold','4000','5800'] + stats += ['special_protection_acid','4000','5800'] + stats += ['special_protection_electricity','4000','5800'] + + return stats diff --git a/scripts/loot/lootItems/armor/ithorian_guardian/ithorian_guardian_armor_bicep_left.py b/scripts/loot/lootItems/armor/ithorian_guardian/ithorian_guardian_armor_bicep_left.py new file mode 100644 index 00000000..eedb6c9b --- /dev/null +++ b/scripts/loot/lootItems/armor/ithorian_guardian/ithorian_guardian_armor_bicep_left.py @@ -0,0 +1,31 @@ + +def itemTemplate(): + + return ['object/tangible/wearables/armor/ithorian_guardian/shared_ith_armor_s02_bicep_l.iff'] + +def customItemName(): + + return 'Ithorian Guardian Armor Bicep Left' + +def customItemStackCount(): + + return 1 + +def customizationAttributes(): + + return [] + +def customizationValues(): + + return [] + +def itemStats(): + + stats = ['armor_efficiency_kinetic','5000','6800'] + stats += ['armor_efficiency_energy','3000','4800'] + stats += ['special_protection_heat','4000','5800'] + stats += ['special_protection_cold','4000','5800'] + stats += ['special_protection_acid','4000','5800'] + stats += ['special_protection_electricity','4000','5800'] + + return stats diff --git a/scripts/loot/lootItems/armor/ithorian_guardian/ithorian_guardian_armor_bicep_right.py b/scripts/loot/lootItems/armor/ithorian_guardian/ithorian_guardian_armor_bicep_right.py new file mode 100644 index 00000000..b0edd6d9 --- /dev/null +++ b/scripts/loot/lootItems/armor/ithorian_guardian/ithorian_guardian_armor_bicep_right.py @@ -0,0 +1,31 @@ + +def itemTemplate(): + + return ['object/tangible/wearables/armor/ithorian_guardian/shared_ith_armor_s02_bicep_r.iff'] + +def customItemName(): + + return 'Ithorian Guardian Armor Bicep Right' + +def customItemStackCount(): + + return 1 + +def customizationAttributes(): + + return [] + +def customizationValues(): + + return [] + +def itemStats(): + + stats = ['armor_efficiency_kinetic','5000','6800'] + stats += ['armor_efficiency_energy','3000','4800'] + stats += ['special_protection_heat','4000','5800'] + stats += ['special_protection_cold','4000','5800'] + stats += ['special_protection_acid','4000','5800'] + stats += ['special_protection_electricity','4000','5800'] + + return stats diff --git a/scripts/loot/lootItems/armor/ithorian_guardian/ithorian_guardian_armor_boots.py b/scripts/loot/lootItems/armor/ithorian_guardian/ithorian_guardian_armor_boots.py new file mode 100644 index 00000000..fe01888d --- /dev/null +++ b/scripts/loot/lootItems/armor/ithorian_guardian/ithorian_guardian_armor_boots.py @@ -0,0 +1,24 @@ + +def itemTemplate(): + + return ['object/tangible/wearables/armor/ithorian_guardian/shared_ith_armor_s02_boots.iff'] + +def customItemName(): + + return 'Ithorian Guardian Armor Boots' + +def customItemStackCount(): + + return 1 + +def customizationAttributes(): + + return [] + +def customizationValues(): + + return [] + +def itemStats(): + + return [] diff --git a/scripts/loot/lootItems/armor/ithorian_guardian/ithorian_guardian_armor_bracer_left.py b/scripts/loot/lootItems/armor/ithorian_guardian/ithorian_guardian_armor_bracer_left.py new file mode 100644 index 00000000..3f72841a --- /dev/null +++ b/scripts/loot/lootItems/armor/ithorian_guardian/ithorian_guardian_armor_bracer_left.py @@ -0,0 +1,31 @@ + +def itemTemplate(): + + return ['object/tangible/wearables/armor/ithorian_guardian/shared_ith_armor_s02_bracer_l.iff'] + +def customItemName(): + + return 'Ithorian Guardian Armor Bracer Left' + +def customItemStackCount(): + + return 1 + +def customizationAttributes(): + + return [] + +def customizationValues(): + + return [] + +def itemStats(): + + stats = ['armor_efficiency_kinetic','5000','6800'] + stats += ['armor_efficiency_energy','3000','4800'] + stats += ['special_protection_heat','4000','5800'] + stats += ['special_protection_cold','4000','5800'] + stats += ['special_protection_acid','4000','5800'] + stats += ['special_protection_electricity','4000','5800'] + + return stats diff --git a/scripts/loot/lootItems/armor/ithorian_guardian/ithorian_guardian_armor_bracer_right.py b/scripts/loot/lootItems/armor/ithorian_guardian/ithorian_guardian_armor_bracer_right.py new file mode 100644 index 00000000..9072b494 --- /dev/null +++ b/scripts/loot/lootItems/armor/ithorian_guardian/ithorian_guardian_armor_bracer_right.py @@ -0,0 +1,31 @@ + +def itemTemplate(): + + return ['object/tangible/wearables/armor/ithorian_guardian/shared_ith_armor_s02_bracer_r.iff'] + +def customItemName(): + + return 'Ithorian Guardian Armor Bracer Right' + +def customItemStackCount(): + + return 1 + +def customizationAttributes(): + + return [] + +def customizationValues(): + + return [] + +def itemStats(): + + stats = ['armor_efficiency_kinetic','5000','6800'] + stats += ['armor_efficiency_energy','3000','4800'] + stats += ['special_protection_heat','4000','5800'] + stats += ['special_protection_cold','4000','5800'] + stats += ['special_protection_acid','4000','5800'] + stats += ['special_protection_electricity','4000','5800'] + + return stats diff --git a/scripts/loot/lootItems/armor/ithorian_guardian/ithorian_guardian_armor_chestplate.py b/scripts/loot/lootItems/armor/ithorian_guardian/ithorian_guardian_armor_chestplate.py new file mode 100644 index 00000000..6ec13a5e --- /dev/null +++ b/scripts/loot/lootItems/armor/ithorian_guardian/ithorian_guardian_armor_chestplate.py @@ -0,0 +1,31 @@ + +def itemTemplate(): + + return ['object/tangible/wearables/armor/ithorian_guardian/shared_ith_armor_s02_chest_plate.iff'] + +def customItemName(): + + return 'Ithorian Guardian Armor Chestplate' + +def customItemStackCount(): + + return 1 + +def customizationAttributes(): + + return [] + +def customizationValues(): + + return [] + +def itemStats(): + + stats = ['armor_efficiency_kinetic','5000','6800'] + stats += ['armor_efficiency_energy','3000','4800'] + stats += ['special_protection_heat','4000','5800'] + stats += ['special_protection_cold','4000','5800'] + stats += ['special_protection_acid','4000','5800'] + stats += ['special_protection_electricity','4000','5800'] + + return stats diff --git a/scripts/loot/lootItems/armor/ithorian_guardian/ithorian_guardian_armor_gloves.py b/scripts/loot/lootItems/armor/ithorian_guardian/ithorian_guardian_armor_gloves.py new file mode 100644 index 00000000..2b413665 --- /dev/null +++ b/scripts/loot/lootItems/armor/ithorian_guardian/ithorian_guardian_armor_gloves.py @@ -0,0 +1,24 @@ + +def itemTemplate(): + + return ['object/tangible/wearables/armor/ithorian_guardian/shared_ith_armor_s02_gloves.iff'] + +def customItemName(): + + return 'Ithorian Guardian Armor Gloves' + +def customItemStackCount(): + + return 1 + +def customizationAttributes(): + + return [] + +def customizationValues(): + + return [] + +def itemStats(): + + return [] diff --git a/scripts/loot/lootItems/armor/ithorian_guardian/ithorian_guardian_armor_helmet.py b/scripts/loot/lootItems/armor/ithorian_guardian/ithorian_guardian_armor_helmet.py new file mode 100644 index 00000000..418501a6 --- /dev/null +++ b/scripts/loot/lootItems/armor/ithorian_guardian/ithorian_guardian_armor_helmet.py @@ -0,0 +1,31 @@ + +def itemTemplate(): + + return ['object/tangible/wearables/armor/ithorian_guardian/shared_ith_armor_s02_helmet.iff'] + +def customItemName(): + + return 'Ithorian Guardian Armor Helmet' + +def customItemStackCount(): + + return 1 + +def customizationAttributes(): + + return [] + +def customizationValues(): + + return [] + +def itemStats(): + + stats = ['armor_efficiency_kinetic','5000','6800'] + stats += ['armor_efficiency_energy','3000','4800'] + stats += ['special_protection_heat','4000','5800'] + stats += ['special_protection_cold','4000','5800'] + stats += ['special_protection_acid','4000','5800'] + stats += ['special_protection_electricity','4000','5800'] + + return stats diff --git a/scripts/loot/lootItems/armor/ithorian_guardian/ithorian_guardian_armor_leggings.py b/scripts/loot/lootItems/armor/ithorian_guardian/ithorian_guardian_armor_leggings.py new file mode 100644 index 00000000..bcc43166 --- /dev/null +++ b/scripts/loot/lootItems/armor/ithorian_guardian/ithorian_guardian_armor_leggings.py @@ -0,0 +1,31 @@ + +def itemTemplate(): + + return ['object/tangible/wearables/armor/ithorian_guardian/shared_ith_armor_s02_leggings.iff'] + +def customItemName(): + + return 'Ithorian Guardian Armor Leggings' + +def customItemStackCount(): + + return 1 + +def customizationAttributes(): + + return [] + +def customizationValues(): + + return [] + +def itemStats(): + + stats = ['armor_efficiency_kinetic','5000','6800'] + stats += ['armor_efficiency_energy','3000','4800'] + stats += ['special_protection_heat','4000','5800'] + stats += ['special_protection_cold','4000','5800'] + stats += ['special_protection_acid','4000','5800'] + stats += ['special_protection_electricity','4000','5800'] + + return stats diff --git a/scripts/loot/lootItems/armor/ithorian_sentinel/ithorian_sentinel_armor_bicep_left.py b/scripts/loot/lootItems/armor/ithorian_sentinel/ithorian_sentinel_armor_bicep_left.py new file mode 100644 index 00000000..0963cfc9 --- /dev/null +++ b/scripts/loot/lootItems/armor/ithorian_sentinel/ithorian_sentinel_armor_bicep_left.py @@ -0,0 +1,31 @@ + +def itemTemplate(): + + return ['object/tangible/wearables/armor/ithorian_sentinel/shared_ith_armor_s03_bicep_l.iff'] + +def customItemName(): + + return 'Ithorian Sentinel Armor Bicep Left' + +def customItemStackCount(): + + return 1 + +def customizationAttributes(): + + return [] + +def customizationValues(): + + return [] + +def itemStats(): + + stats = ['armor_efficiency_kinetic','5000','6800'] + stats += ['armor_efficiency_energy','3000','4800'] + stats += ['special_protection_heat','4000','5800'] + stats += ['special_protection_cold','4000','5800'] + stats += ['special_protection_acid','4000','5800'] + stats += ['special_protection_electricity','4000','5800'] + + return stats diff --git a/scripts/loot/lootItems/armor/ithorian_sentinel/ithorian_sentinel_armor_bicep_right.py b/scripts/loot/lootItems/armor/ithorian_sentinel/ithorian_sentinel_armor_bicep_right.py new file mode 100644 index 00000000..acd5473f --- /dev/null +++ b/scripts/loot/lootItems/armor/ithorian_sentinel/ithorian_sentinel_armor_bicep_right.py @@ -0,0 +1,31 @@ + +def itemTemplate(): + + return ['object/tangible/wearables/armor/ithorian_sentinel/shared_ith_armor_s03_bicep_r.iff'] + +def customItemName(): + + return 'Ithorian Sentinel Armor Bicep Right' + +def customItemStackCount(): + + return 1 + +def customizationAttributes(): + + return [] + +def customizationValues(): + + return [] + +def itemStats(): + + stats = ['armor_efficiency_kinetic','5000','6800'] + stats += ['armor_efficiency_energy','3000','4800'] + stats += ['special_protection_heat','4000','5800'] + stats += ['special_protection_cold','4000','5800'] + stats += ['special_protection_acid','4000','5800'] + stats += ['special_protection_electricity','4000','5800'] + + return stats diff --git a/scripts/loot/lootItems/armor/ithorian_sentinel/ithorian_sentinel_armor_boots.py b/scripts/loot/lootItems/armor/ithorian_sentinel/ithorian_sentinel_armor_boots.py new file mode 100644 index 00000000..8e14d51b --- /dev/null +++ b/scripts/loot/lootItems/armor/ithorian_sentinel/ithorian_sentinel_armor_boots.py @@ -0,0 +1,24 @@ + +def itemTemplate(): + + return ['object/tangible/wearables/armor/ithorian_sentinel/shared_ith_armor_s03_boots.iff'] + +def customItemName(): + + return 'Ithorian Sentinel Armor Boots' + +def customItemStackCount(): + + return 1 + +def customizationAttributes(): + + return [] + +def customizationValues(): + + return [] + +def itemStats(): + + return [] diff --git a/scripts/loot/lootItems/armor/ithorian_sentinel/ithorian_sentinel_armor_bracer_left.py b/scripts/loot/lootItems/armor/ithorian_sentinel/ithorian_sentinel_armor_bracer_left.py new file mode 100644 index 00000000..fd73de77 --- /dev/null +++ b/scripts/loot/lootItems/armor/ithorian_sentinel/ithorian_sentinel_armor_bracer_left.py @@ -0,0 +1,31 @@ + +def itemTemplate(): + + return ['object/tangible/wearables/armor/ithorian_sentinel/shared_ith_armor_s03_bracer_l.iff'] + +def customItemName(): + + return 'Ithorian Sentinel Armor Bracer Left' + +def customItemStackCount(): + + return 1 + +def customizationAttributes(): + + return [] + +def customizationValues(): + + return [] + +def itemStats(): + + stats = ['armor_efficiency_kinetic','5000','6800'] + stats += ['armor_efficiency_energy','3000','4800'] + stats += ['special_protection_heat','4000','5800'] + stats += ['special_protection_cold','4000','5800'] + stats += ['special_protection_acid','4000','5800'] + stats += ['special_protection_electricity','4000','5800'] + + return stats diff --git a/scripts/loot/lootItems/armor/ithorian_sentinel/ithorian_sentinel_armor_bracer_right.py b/scripts/loot/lootItems/armor/ithorian_sentinel/ithorian_sentinel_armor_bracer_right.py new file mode 100644 index 00000000..dba70a3c --- /dev/null +++ b/scripts/loot/lootItems/armor/ithorian_sentinel/ithorian_sentinel_armor_bracer_right.py @@ -0,0 +1,31 @@ + +def itemTemplate(): + + return ['object/tangible/wearables/armor/ithorian_sentinel/shared_ith_armor_s03_bracer_r.iff'] + +def customItemName(): + + return 'Ithorian Sentinel Armor Bracer Right' + +def customItemStackCount(): + + return 1 + +def customizationAttributes(): + + return [] + +def customizationValues(): + + return [] + +def itemStats(): + + stats = ['armor_efficiency_kinetic','5000','6800'] + stats += ['armor_efficiency_energy','3000','4800'] + stats += ['special_protection_heat','4000','5800'] + stats += ['special_protection_cold','4000','5800'] + stats += ['special_protection_acid','4000','5800'] + stats += ['special_protection_electricity','4000','5800'] + + return stats diff --git a/scripts/loot/lootItems/armor/ithorian_sentinel/ithorian_sentinel_armor_chestplate.py b/scripts/loot/lootItems/armor/ithorian_sentinel/ithorian_sentinel_armor_chestplate.py new file mode 100644 index 00000000..2bde059c --- /dev/null +++ b/scripts/loot/lootItems/armor/ithorian_sentinel/ithorian_sentinel_armor_chestplate.py @@ -0,0 +1,31 @@ + +def itemTemplate(): + + return ['object/tangible/wearables/armor/ithorian_sentinel/shared_ith_armor_s03_chest_plate.iff'] + +def customItemName(): + + return 'Ithorian Sentinel Armor Chestplate' + +def customItemStackCount(): + + return 1 + +def customizationAttributes(): + + return [] + +def customizationValues(): + + return [] + +def itemStats(): + + stats = ['armor_efficiency_kinetic','5000','6800'] + stats += ['armor_efficiency_energy','3000','4800'] + stats += ['special_protection_heat','4000','5800'] + stats += ['special_protection_cold','4000','5800'] + stats += ['special_protection_acid','4000','5800'] + stats += ['special_protection_electricity','4000','5800'] + + return stats diff --git a/scripts/loot/lootItems/armor/ithorian_sentinel/ithorian_sentinel_armor_gloves.py b/scripts/loot/lootItems/armor/ithorian_sentinel/ithorian_sentinel_armor_gloves.py new file mode 100644 index 00000000..5dce5bc1 --- /dev/null +++ b/scripts/loot/lootItems/armor/ithorian_sentinel/ithorian_sentinel_armor_gloves.py @@ -0,0 +1,24 @@ + +def itemTemplate(): + + return ['object/tangible/wearables/armor/ithorian_sentinel/shared_ith_armor_s03_gloves.iff'] + +def customItemName(): + + return 'Ithorian Sentinel Armor Gloves' + +def customItemStackCount(): + + return 1 + +def customizationAttributes(): + + return [] + +def customizationValues(): + + return [] + +def itemStats(): + + return [] diff --git a/scripts/loot/lootItems/armor/ithorian_sentinel/ithorian_sentinel_armor_helmet.py b/scripts/loot/lootItems/armor/ithorian_sentinel/ithorian_sentinel_armor_helmet.py new file mode 100644 index 00000000..efc9a054 --- /dev/null +++ b/scripts/loot/lootItems/armor/ithorian_sentinel/ithorian_sentinel_armor_helmet.py @@ -0,0 +1,31 @@ + +def itemTemplate(): + + return ['object/tangible/wearables/armor/ithorian_sentinel/shared_ith_armor_s03_helmet.iff'] + +def customItemName(): + + return 'Ithorian Sentinel Armor Helmet' + +def customItemStackCount(): + + return 1 + +def customizationAttributes(): + + return [] + +def customizationValues(): + + return [] + +def itemStats(): + + stats = ['armor_efficiency_kinetic','5000','6800'] + stats += ['armor_efficiency_energy','3000','4800'] + stats += ['special_protection_heat','4000','5800'] + stats += ['special_protection_cold','4000','5800'] + stats += ['special_protection_acid','4000','5800'] + stats += ['special_protection_electricity','4000','5800'] + + return stats diff --git a/scripts/loot/lootItems/armor/ithorian_sentinel/ithorian_sentinel_armor_leggings.py b/scripts/loot/lootItems/armor/ithorian_sentinel/ithorian_sentinel_armor_leggings.py new file mode 100644 index 00000000..b4f3eafc --- /dev/null +++ b/scripts/loot/lootItems/armor/ithorian_sentinel/ithorian_sentinel_armor_leggings.py @@ -0,0 +1,31 @@ + +def itemTemplate(): + + return ['object/tangible/wearables/armor/ithorian_sentinel/shared_ith_armor_s03_leggings.iff'] + +def customItemName(): + + return 'Ithorian Sentinel Armor Leggings' + +def customItemStackCount(): + + return 1 + +def customizationAttributes(): + + return [] + +def customizationValues(): + + return [] + +def itemStats(): + + stats = ['armor_efficiency_kinetic','5000','6800'] + stats += ['armor_efficiency_energy','3000','4800'] + stats += ['special_protection_heat','4000','5800'] + stats += ['special_protection_cold','4000','5800'] + stats += ['special_protection_acid','4000','5800'] + stats += ['special_protection_electricity','4000','5800'] + + return stats diff --git a/scripts/loot/lootItems/armor/kashyyykian_black_mtn/kashyyykian_black_mtn_armor_bicep_left.py b/scripts/loot/lootItems/armor/kashyyykian_black_mtn/kashyyykian_black_mtn_armor_bicep_left.py new file mode 100644 index 00000000..2f6e2b95 --- /dev/null +++ b/scripts/loot/lootItems/armor/kashyyykian_black_mtn/kashyyykian_black_mtn_armor_bicep_left.py @@ -0,0 +1,31 @@ + +def itemTemplate(): + + return ['object/tangible/wearables/armor/kashyyykian_black_mtn/shared_armor_kashyyykian_black_mtn_bicep_l.iff'] + +def customItemName(): + + return 'Kashyyykian Black Mountain Bicep Left' + +def customItemStackCount(): + + return 1 + +def customizationAttributes(): + + return [] + +def customizationValues(): + + return [] + +def itemStats(): + + stats = ['armor_efficiency_kinetic','5000','6800'] + stats += ['armor_efficiency_energy','3000','4800'] + stats += ['special_protection_heat','4000','5800'] + stats += ['special_protection_cold','4000','5800'] + stats += ['special_protection_acid','4000','5800'] + stats += ['special_protection_electricity','4000','5800'] + + return stats diff --git a/scripts/loot/lootItems/armor/kashyyykian_black_mtn/kashyyykian_black_mtn_armor_bicep_right.py b/scripts/loot/lootItems/armor/kashyyykian_black_mtn/kashyyykian_black_mtn_armor_bicep_right.py new file mode 100644 index 00000000..8cec0f7d --- /dev/null +++ b/scripts/loot/lootItems/armor/kashyyykian_black_mtn/kashyyykian_black_mtn_armor_bicep_right.py @@ -0,0 +1,31 @@ + +def itemTemplate(): + + return ['object/tangible/wearables/armor/kashyyykian_black_mtn/shared_armor_kashyyykian_black_mtn_bicep_r.iff'] + +def customItemName(): + + return 'Kashyyykian Black Mountain Bicep Right' + +def customItemStackCount(): + + return 1 + +def customizationAttributes(): + + return [] + +def customizationValues(): + + return [] + +def itemStats(): + + stats = ['armor_efficiency_kinetic','5000','6800'] + stats += ['armor_efficiency_energy','3000','4800'] + stats += ['special_protection_heat','4000','5800'] + stats += ['special_protection_cold','4000','5800'] + stats += ['special_protection_acid','4000','5800'] + stats += ['special_protection_electricity','4000','5800'] + + return stats diff --git a/scripts/loot/lootItems/armor/kashyyykian_black_mtn/kashyyykian_black_mtn_armor_bracer_left.py b/scripts/loot/lootItems/armor/kashyyykian_black_mtn/kashyyykian_black_mtn_armor_bracer_left.py new file mode 100644 index 00000000..64ee47c3 --- /dev/null +++ b/scripts/loot/lootItems/armor/kashyyykian_black_mtn/kashyyykian_black_mtn_armor_bracer_left.py @@ -0,0 +1,31 @@ + +def itemTemplate(): + + return ['object/tangible/wearables/armor/kashyyykian_black_mtn/shared_armor_kashyyykian_black_mtn_bracer_l.iff'] + +def customItemName(): + + return 'Kashyyykian Black Mountain Bracer Left' + +def customItemStackCount(): + + return 1 + +def customizationAttributes(): + + return [] + +def customizationValues(): + + return [] + +def itemStats(): + + stats = ['armor_efficiency_kinetic','5000','6800'] + stats += ['armor_efficiency_energy','3000','4800'] + stats += ['special_protection_heat','4000','5800'] + stats += ['special_protection_cold','4000','5800'] + stats += ['special_protection_acid','4000','5800'] + stats += ['special_protection_electricity','4000','5800'] + + return stats diff --git a/scripts/loot/lootItems/armor/kashyyykian_black_mtn/kashyyykian_black_mtn_armor_bracer_right.py b/scripts/loot/lootItems/armor/kashyyykian_black_mtn/kashyyykian_black_mtn_armor_bracer_right.py new file mode 100644 index 00000000..c17c1c47 --- /dev/null +++ b/scripts/loot/lootItems/armor/kashyyykian_black_mtn/kashyyykian_black_mtn_armor_bracer_right.py @@ -0,0 +1,31 @@ + +def itemTemplate(): + + return ['object/tangible/wearables/armor/kashyyykian_black_mtn/shared_armor_kashyyykian_black_mtn_bracer_r.iff'] + +def customItemName(): + + return 'Kashyyykian Black Mountain Bracer Right' + +def customItemStackCount(): + + return 1 + +def customizationAttributes(): + + return [] + +def customizationValues(): + + return [] + +def itemStats(): + + stats = ['armor_efficiency_kinetic','5000','6800'] + stats += ['armor_efficiency_energy','3000','4800'] + stats += ['special_protection_heat','4000','5800'] + stats += ['special_protection_cold','4000','5800'] + stats += ['special_protection_acid','4000','5800'] + stats += ['special_protection_electricity','4000','5800'] + + return stats diff --git a/scripts/loot/lootItems/armor/kashyyykian_black_mtn/kashyyykian_black_mtn_armor_chestplate.py b/scripts/loot/lootItems/armor/kashyyykian_black_mtn/kashyyykian_black_mtn_armor_chestplate.py new file mode 100644 index 00000000..618d2a57 --- /dev/null +++ b/scripts/loot/lootItems/armor/kashyyykian_black_mtn/kashyyykian_black_mtn_armor_chestplate.py @@ -0,0 +1,31 @@ + +def itemTemplate(): + + return ['object/tangible/wearables/armor/kashyyykian_black_mtn/shared_armor_kashyyykian_black_mtn_chestplate.iff'] + +def customItemName(): + + return 'Kashyyykian Black Mountain Chestplate' + +def customItemStackCount(): + + return 1 + +def customizationAttributes(): + + return [] + +def customizationValues(): + + return [] + +def itemStats(): + + stats = ['armor_efficiency_kinetic','5000','6800'] + stats += ['armor_efficiency_energy','3000','4800'] + stats += ['special_protection_heat','4000','5800'] + stats += ['special_protection_cold','4000','5800'] + stats += ['special_protection_acid','4000','5800'] + stats += ['special_protection_electricity','4000','5800'] + + return stats diff --git a/scripts/loot/lootItems/armor/kashyyykian_black_mtn/kashyyykian_black_mtn_leggings.py b/scripts/loot/lootItems/armor/kashyyykian_black_mtn/kashyyykian_black_mtn_leggings.py new file mode 100644 index 00000000..0118c616 --- /dev/null +++ b/scripts/loot/lootItems/armor/kashyyykian_black_mtn/kashyyykian_black_mtn_leggings.py @@ -0,0 +1,31 @@ + +def itemTemplate(): + + return ['object/tangible/wearables/armor/kashyyykian_black_mtn/shared_armor_kashyyykian_black_mtn_leggings.iff'] + +def customItemName(): + + return 'Kashyyykian Black Mountain Leggings' + +def customItemStackCount(): + + return 1 + +def customizationAttributes(): + + return [] + +def customizationValues(): + + return [] + +def itemStats(): + + stats = ['armor_efficiency_kinetic','5000','6800'] + stats += ['armor_efficiency_energy','3000','4800'] + stats += ['special_protection_heat','4000','5800'] + stats += ['special_protection_cold','4000','5800'] + stats += ['special_protection_acid','4000','5800'] + stats += ['special_protection_electricity','4000','5800'] + + return stats diff --git a/scripts/loot/lootItems/armor/kashyyykian_ceremonial/kashyyykian_ceremonial_bicep_left.py b/scripts/loot/lootItems/armor/kashyyykian_ceremonial/kashyyykian_ceremonial_bicep_left.py new file mode 100644 index 00000000..6f2e204e --- /dev/null +++ b/scripts/loot/lootItems/armor/kashyyykian_ceremonial/kashyyykian_ceremonial_bicep_left.py @@ -0,0 +1,31 @@ + +def itemTemplate(): + + return ['object/tangible/wearables/armor/kashyyykian_ceremonial/shared_armor_kashyyykian_ceremonial_bicep_l.iff'] + +def customItemName(): + + return 'Kashyyykian Ceremonial Bicep Left' + +def customItemStackCount(): + + return 1 + +def customizationAttributes(): + + return [] + +def customizationValues(): + + return [] + +def itemStats(): + + stats = ['armor_efficiency_kinetic','5000','6800'] + stats += ['armor_efficiency_energy','3000','4800'] + stats += ['special_protection_heat','4000','5800'] + stats += ['special_protection_cold','4000','5800'] + stats += ['special_protection_acid','4000','5800'] + stats += ['special_protection_electricity','4000','5800'] + + return stats diff --git a/scripts/loot/lootItems/armor/kashyyykian_ceremonial/kashyyykian_ceremonial_bicep_right.py b/scripts/loot/lootItems/armor/kashyyykian_ceremonial/kashyyykian_ceremonial_bicep_right.py new file mode 100644 index 00000000..b8e67983 --- /dev/null +++ b/scripts/loot/lootItems/armor/kashyyykian_ceremonial/kashyyykian_ceremonial_bicep_right.py @@ -0,0 +1,31 @@ + +def itemTemplate(): + + return ['object/tangible/wearables/armor/kashyyykian_ceremonial/shared_armor_kashyyykian_ceremonial_bicep_r.iff'] + +def customItemName(): + + return 'Kashyyykian Ceremonial Bicep Right' + +def customItemStackCount(): + + return 1 + +def customizationAttributes(): + + return [] + +def customizationValues(): + + return [] + +def itemStats(): + + stats = ['armor_efficiency_kinetic','5000','6800'] + stats += ['armor_efficiency_energy','3000','4800'] + stats += ['special_protection_heat','4000','5800'] + stats += ['special_protection_cold','4000','5800'] + stats += ['special_protection_acid','4000','5800'] + stats += ['special_protection_electricity','4000','5800'] + + return stats diff --git a/scripts/loot/lootItems/armor/kashyyykian_ceremonial/kashyyykian_ceremonial_bracer_left.py b/scripts/loot/lootItems/armor/kashyyykian_ceremonial/kashyyykian_ceremonial_bracer_left.py new file mode 100644 index 00000000..3e27ce7f --- /dev/null +++ b/scripts/loot/lootItems/armor/kashyyykian_ceremonial/kashyyykian_ceremonial_bracer_left.py @@ -0,0 +1,31 @@ + +def itemTemplate(): + + return ['object/tangible/wearables/armor/kashyyykian_ceremonial/shared_armor_kashyyykian_ceremonial_bracer_l.iff'] + +def customItemName(): + + return 'Kashyyykian Ceremonial Bracer Left' + +def customItemStackCount(): + + return 1 + +def customizationAttributes(): + + return [] + +def customizationValues(): + + return [] + +def itemStats(): + + stats = ['armor_efficiency_kinetic','5000','6800'] + stats += ['armor_efficiency_energy','3000','4800'] + stats += ['special_protection_heat','4000','5800'] + stats += ['special_protection_cold','4000','5800'] + stats += ['special_protection_acid','4000','5800'] + stats += ['special_protection_electricity','4000','5800'] + + return stats diff --git a/scripts/loot/lootItems/armor/kashyyykian_ceremonial/kashyyykian_ceremonial_bracer_right.py b/scripts/loot/lootItems/armor/kashyyykian_ceremonial/kashyyykian_ceremonial_bracer_right.py new file mode 100644 index 00000000..fa389235 --- /dev/null +++ b/scripts/loot/lootItems/armor/kashyyykian_ceremonial/kashyyykian_ceremonial_bracer_right.py @@ -0,0 +1,31 @@ + +def itemTemplate(): + + return ['object/tangible/wearables/armor/kashyyykian_ceremonial/shared_armor_kashyyykian_ceremonial_bracer_r.iff'] + +def customItemName(): + + return 'Kashyyykian Ceremonial Bracer Left' + +def customItemStackCount(): + + return 1 + +def customizationAttributes(): + + return [] + +def customizationValues(): + + return [] + +def itemStats(): + + stats = ['armor_efficiency_kinetic','5000','6800'] + stats += ['armor_efficiency_energy','3000','4800'] + stats += ['special_protection_heat','4000','5800'] + stats += ['special_protection_cold','4000','5800'] + stats += ['special_protection_acid','4000','5800'] + stats += ['special_protection_electricity','4000','5800'] + + return stats diff --git a/scripts/loot/lootItems/armor/kashyyykian_ceremonial/kashyyykian_ceremonial_chestplate.py b/scripts/loot/lootItems/armor/kashyyykian_ceremonial/kashyyykian_ceremonial_chestplate.py new file mode 100644 index 00000000..de3f29d8 --- /dev/null +++ b/scripts/loot/lootItems/armor/kashyyykian_ceremonial/kashyyykian_ceremonial_chestplate.py @@ -0,0 +1,31 @@ + +def itemTemplate(): + + return ['object/tangible/wearables/armor/kashyyykian_ceremonial/shared_armor_kashyyykian_ceremonial_chestplate.iff'] + +def customItemName(): + + return 'Kashyyykian Ceremonial Chestplate' + +def customItemStackCount(): + + return 1 + +def customizationAttributes(): + + return [] + +def customizationValues(): + + return [] + +def itemStats(): + + stats = ['armor_efficiency_kinetic','5000','6800'] + stats += ['armor_efficiency_energy','3000','4800'] + stats += ['special_protection_heat','4000','5800'] + stats += ['special_protection_cold','4000','5800'] + stats += ['special_protection_acid','4000','5800'] + stats += ['special_protection_electricity','4000','5800'] + + return stats diff --git a/scripts/loot/lootItems/armor/kashyyykian_ceremonial/kashyyykian_ceremonial_leggings.py b/scripts/loot/lootItems/armor/kashyyykian_ceremonial/kashyyykian_ceremonial_leggings.py new file mode 100644 index 00000000..5ffea758 --- /dev/null +++ b/scripts/loot/lootItems/armor/kashyyykian_ceremonial/kashyyykian_ceremonial_leggings.py @@ -0,0 +1,31 @@ + +def itemTemplate(): + + return ['object/tangible/wearables/armor/kashyyykian_ceremonial/shared_armor_kashyyykian_ceremonial_leggings.iff'] + +def customItemName(): + + return 'Kashyyykian Ceremonial Leggings' + +def customItemStackCount(): + + return 1 + +def customizationAttributes(): + + return [] + +def customizationValues(): + + return [] + +def itemStats(): + + stats = ['armor_efficiency_kinetic','5000','6800'] + stats += ['armor_efficiency_energy','3000','4800'] + stats += ['special_protection_heat','4000','5800'] + stats += ['special_protection_cold','4000','5800'] + stats += ['special_protection_acid','4000','5800'] + stats += ['special_protection_electricity','4000','5800'] + + return stats diff --git a/scripts/loot/lootItems/armor/kashyyykian_hunting/kashyyykian_hunting_bicep_left.py b/scripts/loot/lootItems/armor/kashyyykian_hunting/kashyyykian_hunting_bicep_left.py new file mode 100644 index 00000000..02717dc3 --- /dev/null +++ b/scripts/loot/lootItems/armor/kashyyykian_hunting/kashyyykian_hunting_bicep_left.py @@ -0,0 +1,31 @@ + +def itemTemplate(): + + return ['object/tangible/wearables/armor/kashyyykian_hunting/shared_armor_kashyyykian_hunting_bicep_l.iff'] + +def customItemName(): + + return 'Kashyyykian Hunting Bicep Left' + +def customItemStackCount(): + + return 1 + +def customizationAttributes(): + + return [] + +def customizationValues(): + + return [] + +def itemStats(): + + stats = ['armor_efficiency_kinetic','5000','6800'] + stats += ['armor_efficiency_energy','3000','4800'] + stats += ['special_protection_heat','4000','5800'] + stats += ['special_protection_cold','4000','5800'] + stats += ['special_protection_acid','4000','5800'] + stats += ['special_protection_electricity','4000','5800'] + + return stats diff --git a/scripts/loot/lootItems/armor/kashyyykian_hunting/kashyyykian_hunting_bicep_right.py b/scripts/loot/lootItems/armor/kashyyykian_hunting/kashyyykian_hunting_bicep_right.py new file mode 100644 index 00000000..70aba08f --- /dev/null +++ b/scripts/loot/lootItems/armor/kashyyykian_hunting/kashyyykian_hunting_bicep_right.py @@ -0,0 +1,31 @@ + +def itemTemplate(): + + return ['object/tangible/wearables/armor/kashyyykian_hunting/shared_armor_kashyyykian_hunting_bicep_r.iff'] + +def customItemName(): + + return 'Kashyyykian Hunting Bicep Right' + +def customItemStackCount(): + + return 1 + +def customizationAttributes(): + + return [] + +def customizationValues(): + + return [] + +def itemStats(): + + stats = ['armor_efficiency_kinetic','5000','6800'] + stats += ['armor_efficiency_energy','3000','4800'] + stats += ['special_protection_heat','4000','5800'] + stats += ['special_protection_cold','4000','5800'] + stats += ['special_protection_acid','4000','5800'] + stats += ['special_protection_electricity','4000','5800'] + + return stats diff --git a/scripts/loot/lootItems/armor/kashyyykian_hunting/kashyyykian_hunting_bracer_left.py b/scripts/loot/lootItems/armor/kashyyykian_hunting/kashyyykian_hunting_bracer_left.py new file mode 100644 index 00000000..601c880d --- /dev/null +++ b/scripts/loot/lootItems/armor/kashyyykian_hunting/kashyyykian_hunting_bracer_left.py @@ -0,0 +1,31 @@ + +def itemTemplate(): + + return ['object/tangible/wearables/armor/kashyyykian_hunting/shared_armor_kashyyykian_hunting_bracer_l.iff'] + +def customItemName(): + + return 'Kashyyykian Hunting Bracer Left' + +def customItemStackCount(): + + return 1 + +def customizationAttributes(): + + return [] + +def customizationValues(): + + return [] + +def itemStats(): + + stats = ['armor_efficiency_kinetic','5000','6800'] + stats += ['armor_efficiency_energy','3000','4800'] + stats += ['special_protection_heat','4000','5800'] + stats += ['special_protection_cold','4000','5800'] + stats += ['special_protection_acid','4000','5800'] + stats += ['special_protection_electricity','4000','5800'] + + return stats diff --git a/scripts/loot/lootItems/armor/kashyyykian_hunting/kashyyykian_hunting_bracer_right.py b/scripts/loot/lootItems/armor/kashyyykian_hunting/kashyyykian_hunting_bracer_right.py new file mode 100644 index 00000000..b00a3420 --- /dev/null +++ b/scripts/loot/lootItems/armor/kashyyykian_hunting/kashyyykian_hunting_bracer_right.py @@ -0,0 +1,31 @@ + +def itemTemplate(): + + return ['object/tangible/wearables/armor/kashyyykian_hunting/shared_armor_kashyyykian_hunting_bracer_r.iff'] + +def customItemName(): + + return 'Kashyyykian Hunting Bracer Right' + +def customItemStackCount(): + + return 1 + +def customizationAttributes(): + + return [] + +def customizationValues(): + + return [] + +def itemStats(): + + stats = ['armor_efficiency_kinetic','5000','6800'] + stats += ['armor_efficiency_energy','3000','4800'] + stats += ['special_protection_heat','4000','5800'] + stats += ['special_protection_cold','4000','5800'] + stats += ['special_protection_acid','4000','5800'] + stats += ['special_protection_electricity','4000','5800'] + + return stats diff --git a/scripts/loot/lootItems/armor/kashyyykian_hunting/kashyyykian_hunting_chestplate.py b/scripts/loot/lootItems/armor/kashyyykian_hunting/kashyyykian_hunting_chestplate.py new file mode 100644 index 00000000..692bca15 --- /dev/null +++ b/scripts/loot/lootItems/armor/kashyyykian_hunting/kashyyykian_hunting_chestplate.py @@ -0,0 +1,31 @@ + +def itemTemplate(): + + return ['object/tangible/wearables/armor/kashyyykian_hunting/shared_armor_kashyyykian_hunting_chest_plate.iff'] + +def customItemName(): + + return 'Kashyyykian Hunting Chestplate' + +def customItemStackCount(): + + return 1 + +def customizationAttributes(): + + return [] + +def customizationValues(): + + return [] + +def itemStats(): + + stats = ['armor_efficiency_kinetic','5000','6800'] + stats += ['armor_efficiency_energy','3000','4800'] + stats += ['special_protection_heat','4000','5800'] + stats += ['special_protection_cold','4000','5800'] + stats += ['special_protection_acid','4000','5800'] + stats += ['special_protection_electricity','4000','5800'] + + return stats diff --git a/scripts/loot/lootItems/armor/kashyyykian_hunting/kashyyykian_hunting_leggings.py b/scripts/loot/lootItems/armor/kashyyykian_hunting/kashyyykian_hunting_leggings.py new file mode 100644 index 00000000..ff7c10c1 --- /dev/null +++ b/scripts/loot/lootItems/armor/kashyyykian_hunting/kashyyykian_hunting_leggings.py @@ -0,0 +1,31 @@ + +def itemTemplate(): + + return ['object/tangible/wearables/armor/kashyyykian_hunting/shared_armor_kashyyykian_hunting_leggings.iff'] + +def customItemName(): + + return 'Kashyyykian Hunting Leggings' + +def customItemStackCount(): + + return 1 + +def customizationAttributes(): + + return [] + +def customizationValues(): + + return [] + +def itemStats(): + + stats = ['armor_efficiency_kinetic','5000','6800'] + stats += ['armor_efficiency_energy','3000','4800'] + stats += ['special_protection_heat','4000','5800'] + stats += ['special_protection_cold','4000','5800'] + stats += ['special_protection_acid','4000','5800'] + stats += ['special_protection_electricity','4000','5800'] + + return stats diff --git a/scripts/loot/lootItems/armor/marauder/marauder_armor_bicep_left.py b/scripts/loot/lootItems/armor/marauder/marauder_armor_bicep_left.py new file mode 100644 index 00000000..5311bb2a --- /dev/null +++ b/scripts/loot/lootItems/armor/marauder/marauder_armor_bicep_left.py @@ -0,0 +1,31 @@ + +def itemTemplate(): + + return ['object/tangible/wearables/armor/marauder/shared_armor_marauder_s01_bicep_l.iff','object/tangible/wearables/armor/marauder/shared_armor_marauder_s02_bicep_l.iff','object/tangible/wearables/armor/marauder/shared_armor_marauder_s03_bicep_l.iff'] + +def customItemName(): + + return 'Marauder Armor Bicep Left' + +def customItemStackCount(): + + return 1 + +def customizationAttributes(): + + return [] + +def customizationValues(): + + return [] + +def itemStats(): + + stats = ['armor_efficiency_kinetic','5000','6800'] + stats += ['armor_efficiency_energy','3000','4800'] + stats += ['special_protection_heat','4000','5800'] + stats += ['special_protection_cold','4000','5800'] + stats += ['special_protection_acid','4000','5800'] + stats += ['special_protection_electricity','4000','5800'] + + return stats diff --git a/scripts/loot/lootItems/armor/marauder/marauder_armor_bicep_right.py b/scripts/loot/lootItems/armor/marauder/marauder_armor_bicep_right.py new file mode 100644 index 00000000..ec4725e9 --- /dev/null +++ b/scripts/loot/lootItems/armor/marauder/marauder_armor_bicep_right.py @@ -0,0 +1,31 @@ + +def itemTemplate(): + + return ['object/tangible/wearables/armor/marauder/shared_armor_marauder_s01_bicep_r.iff','object/tangible/wearables/armor/marauder/shared_armor_marauder_s02_bicep_r.iff','object/tangible/wearables/armor/marauder/shared_armor_marauder_s03_bicep_r.iff'] + +def customItemName(): + + return 'Marauder Armor Bicep Right' + +def customItemStackCount(): + + return 1 + +def customizationAttributes(): + + return [] + +def customizationValues(): + + return [] + +def itemStats(): + + stats = ['armor_efficiency_kinetic','5000','6800'] + stats += ['armor_efficiency_energy','3000','4800'] + stats += ['special_protection_heat','4000','5800'] + stats += ['special_protection_cold','4000','5800'] + stats += ['special_protection_acid','4000','5800'] + stats += ['special_protection_electricity','4000','5800'] + + return stats diff --git a/scripts/loot/lootItems/armor/marauder/marauder_armor_boots.py b/scripts/loot/lootItems/armor/marauder/marauder_armor_boots.py new file mode 100644 index 00000000..ad6e208c --- /dev/null +++ b/scripts/loot/lootItems/armor/marauder/marauder_armor_boots.py @@ -0,0 +1,24 @@ + +def itemTemplate(): + + return ['object/tangible/wearables/armor/marauder/shared_armor_marauder_s01_boots.iff','object/tangible/wearables/armor/marauder/shared_armor_marauder_s02_boots.iff','object/tangible/wearables/armor/marauder/shared_armor_marauder_s03_boots.iff'] + +def customItemName(): + + return 'Marauder Armor Boots' + +def customItemStackCount(): + + return 1 + +def customizationAttributes(): + + return [] + +def customizationValues(): + + return [] + +def itemStats(): + + return [] diff --git a/scripts/loot/lootItems/armor/marauder/marauder_armor_bracer_left.py b/scripts/loot/lootItems/armor/marauder/marauder_armor_bracer_left.py new file mode 100644 index 00000000..13e8df13 --- /dev/null +++ b/scripts/loot/lootItems/armor/marauder/marauder_armor_bracer_left.py @@ -0,0 +1,31 @@ + +def itemTemplate(): + + return ['object/tangible/wearables/armor/marauder/shared_armor_marauder_s01_bracer_l.iff','object/tangible/wearables/armor/marauder/shared_armor_marauder_s02_bracer_l.iff','object/tangible/wearables/armor/marauder/shared_armor_marauder_s03_bracer_l.iff'] + +def customItemName(): + + return 'Marauder Armor Bracer Left' + +def customItemStackCount(): + + return 1 + +def customizationAttributes(): + + return [] + +def customizationValues(): + + return [] + +def itemStats(): + + stats = ['armor_efficiency_kinetic','5000','6800'] + stats += ['armor_efficiency_energy','3000','4800'] + stats += ['special_protection_heat','4000','5800'] + stats += ['special_protection_cold','4000','5800'] + stats += ['special_protection_acid','4000','5800'] + stats += ['special_protection_electricity','4000','5800'] + + return stats diff --git a/scripts/loot/lootItems/armor/marauder/marauder_armor_bracer_right.py b/scripts/loot/lootItems/armor/marauder/marauder_armor_bracer_right.py new file mode 100644 index 00000000..7d7938f0 --- /dev/null +++ b/scripts/loot/lootItems/armor/marauder/marauder_armor_bracer_right.py @@ -0,0 +1,31 @@ + +def itemTemplate(): + + return ['object/tangible/wearables/armor/marauder/shared_armor_marauder_s01_bracer_r.iff','object/tangible/wearables/armor/marauder/shared_armor_marauder_s02_bracer_r.iff','object/tangible/wearables/armor/marauder/shared_armor_marauder_s03_bracer_r.iff'] + +def customItemName(): + + return 'Marauder Armor Bracer Right' + +def customItemStackCount(): + + return 1 + +def customizationAttributes(): + + return [] + +def customizationValues(): + + return [] + +def itemStats(): + + stats = ['armor_efficiency_kinetic','5000','6800'] + stats += ['armor_efficiency_energy','3000','4800'] + stats += ['special_protection_heat','4000','5800'] + stats += ['special_protection_cold','4000','5800'] + stats += ['special_protection_acid','4000','5800'] + stats += ['special_protection_electricity','4000','5800'] + + return stats diff --git a/scripts/loot/lootItems/armor/marauder/marauder_armor_chestplate.py b/scripts/loot/lootItems/armor/marauder/marauder_armor_chestplate.py new file mode 100644 index 00000000..2372a663 --- /dev/null +++ b/scripts/loot/lootItems/armor/marauder/marauder_armor_chestplate.py @@ -0,0 +1,31 @@ + +def itemTemplate(): + + return ['object/tangible/wearables/armor/marauder/shared_armor_marauder_s01_chest_plate.iff','object/tangible/wearables/armor/marauder/shared_armor_marauder_s02_chest_plate.iff','object/tangible/wearables/armor/marauder/shared_armor_marauder_s03_chest_plate.iff'] + +def customItemName(): + + return 'Marauder Armor Chestplate' + +def customItemStackCount(): + + return 1 + +def customizationAttributes(): + + return [] + +def customizationValues(): + + return [] + +def itemStats(): + + stats = ['armor_efficiency_kinetic','5000','6800'] + stats += ['armor_efficiency_energy','3000','4800'] + stats += ['special_protection_heat','4000','5800'] + stats += ['special_protection_cold','4000','5800'] + stats += ['special_protection_acid','4000','5800'] + stats += ['special_protection_electricity','4000','5800'] + + return stats diff --git a/scripts/loot/lootItems/armor/marauder/marauder_armor_gloves.py b/scripts/loot/lootItems/armor/marauder/marauder_armor_gloves.py new file mode 100644 index 00000000..abb7b2a4 --- /dev/null +++ b/scripts/loot/lootItems/armor/marauder/marauder_armor_gloves.py @@ -0,0 +1,24 @@ + +def itemTemplate(): + + return ['object/tangible/wearables/armor/marauder/shared_armor_marauder_s01_gloves.iff','object/tangible/wearables/armor/marauder/shared_armor_marauder_s02_gloves.iff','object/tangible/wearables/armor/marauder/shared_armor_marauder_s03_gloves.iff'] + +def customItemName(): + + return 'Marauder Armor Gloves' + +def customItemStackCount(): + + return 1 + +def customizationAttributes(): + + return [] + +def customizationValues(): + + return [] + +def itemStats(): + + return [] diff --git a/scripts/loot/lootItems/armor/marauder/marauder_armor_helmet.py b/scripts/loot/lootItems/armor/marauder/marauder_armor_helmet.py new file mode 100644 index 00000000..0e8674f7 --- /dev/null +++ b/scripts/loot/lootItems/armor/marauder/marauder_armor_helmet.py @@ -0,0 +1,31 @@ + +def itemTemplate(): + + return ['object/tangible/wearables/armor/marauder/shared_armor_marauder_s01_helmet.iff','object/tangible/wearables/armor/marauder/shared_armor_marauder_s02_helmet.iff','object/tangible/wearables/armor/marauder/shared_armor_marauder_s03_helmet.iff'] + +def customItemName(): + + return 'Marauder Armor Helmet' + +def customItemStackCount(): + + return 1 + +def customizationAttributes(): + + return [] + +def customizationValues(): + + return [] + +def itemStats(): + + stats = ['armor_efficiency_kinetic','5000','6800'] + stats += ['armor_efficiency_energy','3000','4800'] + stats += ['special_protection_heat','4000','5800'] + stats += ['special_protection_cold','4000','5800'] + stats += ['special_protection_acid','4000','5800'] + stats += ['special_protection_electricity','4000','5800'] + + return stats diff --git a/scripts/loot/lootItems/armor/marauder/marauder_armor_leggings.py b/scripts/loot/lootItems/armor/marauder/marauder_armor_leggings.py new file mode 100644 index 00000000..8e613148 --- /dev/null +++ b/scripts/loot/lootItems/armor/marauder/marauder_armor_leggings.py @@ -0,0 +1,31 @@ + +def itemTemplate(): + + return ['object/tangible/wearables/armor/marauder/shared_armor_marauder_s01_leggings.iff','object/tangible/wearables/armor/marauder/shared_armor_marauder_s02_leggings.iff','object/tangible/wearables/armor/marauder/shared_armor_marauder_s03_leggings.iff'] + +def customItemName(): + + return 'Marauder Armor Leggings' + +def customItemStackCount(): + + return 1 + +def customizationAttributes(): + + return [] + +def customizationValues(): + + return [] + +def itemStats(): + + stats = ['armor_efficiency_kinetic','5000','6800'] + stats += ['armor_efficiency_energy','3000','4800'] + stats += ['special_protection_heat','4000','5800'] + stats += ['special_protection_cold','4000','5800'] + stats += ['special_protection_acid','4000','5800'] + stats += ['special_protection_electricity','4000','5800'] + + return stats diff --git a/scripts/loot/lootItems/armor/padded/padded_armor_bicep_left.py b/scripts/loot/lootItems/armor/padded/padded_armor_bicep_left.py new file mode 100644 index 00000000..c2f93b24 --- /dev/null +++ b/scripts/loot/lootItems/armor/padded/padded_armor_bicep_left.py @@ -0,0 +1,31 @@ + +def itemTemplate(): + + return ['object/tangible/wearables/armor/padded/shared_armor_padded_s01_bicep_l.iff'] + +def customItemName(): + + return 'Padded Armor Bicep Left' + +def customItemStackCount(): + + return 1 + +def customizationAttributes(): + + return [] + +def customizationValues(): + + return [] + +def itemStats(): + + stats = ['armor_efficiency_kinetic','5000','6800'] + stats += ['armor_efficiency_energy','3000','4800'] + stats += ['special_protection_heat','4000','5800'] + stats += ['special_protection_cold','4000','5800'] + stats += ['special_protection_acid','4000','5800'] + stats += ['special_protection_electricity','4000','5800'] + + return stats diff --git a/scripts/loot/lootItems/armor/padded/padded_armor_bicep_right.py b/scripts/loot/lootItems/armor/padded/padded_armor_bicep_right.py new file mode 100644 index 00000000..30d77a43 --- /dev/null +++ b/scripts/loot/lootItems/armor/padded/padded_armor_bicep_right.py @@ -0,0 +1,31 @@ + +def itemTemplate(): + + return ['object/tangible/wearables/armor/padded/shared_armor_padded_s01_bicep_r.iff'] + +def customItemName(): + + return 'Padded Armor Bicep Right' + +def customItemStackCount(): + + return 1 + +def customizationAttributes(): + + return [] + +def customizationValues(): + + return [] + +def itemStats(): + + stats = ['armor_efficiency_kinetic','5000','6800'] + stats += ['armor_efficiency_energy','3000','4800'] + stats += ['special_protection_heat','4000','5800'] + stats += ['special_protection_cold','4000','5800'] + stats += ['special_protection_acid','4000','5800'] + stats += ['special_protection_electricity','4000','5800'] + + return stats diff --git a/scripts/loot/lootItems/armor/padded/padded_armor_boots.py b/scripts/loot/lootItems/armor/padded/padded_armor_boots.py new file mode 100644 index 00000000..407c80a0 --- /dev/null +++ b/scripts/loot/lootItems/armor/padded/padded_armor_boots.py @@ -0,0 +1,24 @@ + +def itemTemplate(): + + return ['object/tangible/wearables/armor/padded/shared_armor_padded_s01_boots.iff'] + +def customItemName(): + + return 'Padded Armor Boots' + +def customItemStackCount(): + + return 1 + +def customizationAttributes(): + + return [] + +def customizationValues(): + + return [] + +def itemStats(): + + return [] diff --git a/scripts/loot/lootItems/armor/padded/padded_armor_bracer_left.py b/scripts/loot/lootItems/armor/padded/padded_armor_bracer_left.py new file mode 100644 index 00000000..2eb2c45c --- /dev/null +++ b/scripts/loot/lootItems/armor/padded/padded_armor_bracer_left.py @@ -0,0 +1,31 @@ + +def itemTemplate(): + + return ['object/tangible/wearables/armor/padded/shared_armor_padded_s01_bracer_l.iff'] + +def customItemName(): + + return 'Padded Armor Bracer Left' + +def customItemStackCount(): + + return 1 + +def customizationAttributes(): + + return [] + +def customizationValues(): + + return [] + +def itemStats(): + + stats = ['armor_efficiency_kinetic','5000','6800'] + stats += ['armor_efficiency_energy','3000','4800'] + stats += ['special_protection_heat','4000','5800'] + stats += ['special_protection_cold','4000','5800'] + stats += ['special_protection_acid','4000','5800'] + stats += ['special_protection_electricity','4000','5800'] + + return stats diff --git a/scripts/loot/lootItems/armor/padded/padded_armor_bracer_right.py b/scripts/loot/lootItems/armor/padded/padded_armor_bracer_right.py new file mode 100644 index 00000000..182131bf --- /dev/null +++ b/scripts/loot/lootItems/armor/padded/padded_armor_bracer_right.py @@ -0,0 +1,31 @@ + +def itemTemplate(): + + return ['object/tangible/wearables/armor/padded/shared_armor_padded_s01_bracer_r.iff'] + +def customItemName(): + + return 'Padded Armor Bracer Right' + +def customItemStackCount(): + + return 1 + +def customizationAttributes(): + + return [] + +def customizationValues(): + + return [] + +def itemStats(): + + stats = ['armor_efficiency_kinetic','5000','6800'] + stats += ['armor_efficiency_energy','3000','4800'] + stats += ['special_protection_heat','4000','5800'] + stats += ['special_protection_cold','4000','5800'] + stats += ['special_protection_acid','4000','5800'] + stats += ['special_protection_electricity','4000','5800'] + + return stats diff --git a/scripts/loot/lootItems/armor/padded/padded_armor_chestplate.py b/scripts/loot/lootItems/armor/padded/padded_armor_chestplate.py new file mode 100644 index 00000000..7b3c84d5 --- /dev/null +++ b/scripts/loot/lootItems/armor/padded/padded_armor_chestplate.py @@ -0,0 +1,31 @@ + +def itemTemplate(): + + return ['object/tangible/wearables/armor/padded/shared_armor_padded_s01_chest_plate.iff'] + +def customItemName(): + + return 'Padded Armor Chestplate' + +def customItemStackCount(): + + return 1 + +def customizationAttributes(): + + return [] + +def customizationValues(): + + return [] + +def itemStats(): + + stats = ['armor_efficiency_kinetic','5000','6800'] + stats += ['armor_efficiency_energy','3000','4800'] + stats += ['special_protection_heat','4000','5800'] + stats += ['special_protection_cold','4000','5800'] + stats += ['special_protection_acid','4000','5800'] + stats += ['special_protection_electricity','4000','5800'] + + return stats diff --git a/scripts/loot/lootItems/armor/padded/padded_armor_gloves.py b/scripts/loot/lootItems/armor/padded/padded_armor_gloves.py new file mode 100644 index 00000000..bf324908 --- /dev/null +++ b/scripts/loot/lootItems/armor/padded/padded_armor_gloves.py @@ -0,0 +1,24 @@ + +def itemTemplate(): + + return ['object/tangible/wearables/armor/padded/shared_armor_padded_s01_gloves.iff'] + +def customItemName(): + + return 'Padded Armor Gloves' + +def customItemStackCount(): + + return 1 + +def customizationAttributes(): + + return [] + +def customizationValues(): + + return [] + +def itemStats(): + + return [] diff --git a/scripts/loot/lootItems/armor/padded/padded_armor_helmet.py b/scripts/loot/lootItems/armor/padded/padded_armor_helmet.py new file mode 100644 index 00000000..575e5b98 --- /dev/null +++ b/scripts/loot/lootItems/armor/padded/padded_armor_helmet.py @@ -0,0 +1,31 @@ + +def itemTemplate(): + + return ['object/tangible/wearables/armor/padded/shared_armor_padded_s01_helmet.iff'] + +def customItemName(): + + return 'Padded Armor Helmet' + +def customItemStackCount(): + + return 1 + +def customizationAttributes(): + + return [] + +def customizationValues(): + + return [] + +def itemStats(): + + stats = ['armor_efficiency_kinetic','5000','6800'] + stats += ['armor_efficiency_energy','3000','4800'] + stats += ['special_protection_heat','4000','5800'] + stats += ['special_protection_cold','4000','5800'] + stats += ['special_protection_acid','4000','5800'] + stats += ['special_protection_electricity','4000','5800'] + + return stats diff --git a/scripts/loot/lootItems/armor/padded/padded_armor_leggings.py b/scripts/loot/lootItems/armor/padded/padded_armor_leggings.py new file mode 100644 index 00000000..c6c299d5 --- /dev/null +++ b/scripts/loot/lootItems/armor/padded/padded_armor_leggings.py @@ -0,0 +1,31 @@ + +def itemTemplate(): + + return ['object/tangible/wearables/armor/padded/shared_armor_padded_s01_leggings.iff'] + +def customItemName(): + + return 'Padded Armor Leggings' + +def customItemStackCount(): + + return 1 + +def customizationAttributes(): + + return [] + +def customizationValues(): + + return [] + +def itemStats(): + + stats = ['armor_efficiency_kinetic','5000','6800'] + stats += ['armor_efficiency_energy','3000','4800'] + stats += ['special_protection_heat','4000','5800'] + stats += ['special_protection_cold','4000','5800'] + stats += ['special_protection_acid','4000','5800'] + stats += ['special_protection_electricity','4000','5800'] + + return stats diff --git a/scripts/loot/lootItems/armor/tantel/tantel_armor_bicep_left.py b/scripts/loot/lootItems/armor/tantel/tantel_armor_bicep_left.py new file mode 100644 index 00000000..4705777e --- /dev/null +++ b/scripts/loot/lootItems/armor/tantel/tantel_armor_bicep_left.py @@ -0,0 +1,31 @@ + +def itemTemplate(): + + return ['object/tangible/wearables/armor/tantel/shared_armor_tantel_skreej_bicep_l.iff'] + +def customItemName(): + + return 'Tantel Armor Bicep Left' + +def customItemStackCount(): + + return 1 + +def customizationAttributes(): + + return [] + +def customizationValues(): + + return [] + +def itemStats(): + + stats = ['armor_efficiency_kinetic','5000','6800'] + stats += ['armor_efficiency_energy','3000','4800'] + stats += ['special_protection_heat','4000','5800'] + stats += ['special_protection_cold','4000','5800'] + stats += ['special_protection_acid','4000','5800'] + stats += ['special_protection_electricity','4000','5800'] + + return stats diff --git a/scripts/loot/lootItems/armor/tantel/tantel_armor_bicep_right.py b/scripts/loot/lootItems/armor/tantel/tantel_armor_bicep_right.py new file mode 100644 index 00000000..6da6c94b --- /dev/null +++ b/scripts/loot/lootItems/armor/tantel/tantel_armor_bicep_right.py @@ -0,0 +1,31 @@ + +def itemTemplate(): + + return ['object/tangible/wearables/armor/tantel/shared_armor_tantel_skreej_bicep_r.iff'] + +def customItemName(): + + return 'Tantel Armor Bicep Right' + +def customItemStackCount(): + + return 1 + +def customizationAttributes(): + + return [] + +def customizationValues(): + + return [] + +def itemStats(): + + stats = ['armor_efficiency_kinetic','5000','6800'] + stats += ['armor_efficiency_energy','3000','4800'] + stats += ['special_protection_heat','4000','5800'] + stats += ['special_protection_cold','4000','5800'] + stats += ['special_protection_acid','4000','5800'] + stats += ['special_protection_electricity','4000','5800'] + + return stats diff --git a/scripts/loot/lootItems/armor/tantel/tantel_armor_boots.py b/scripts/loot/lootItems/armor/tantel/tantel_armor_boots.py new file mode 100644 index 00000000..3f4374f5 --- /dev/null +++ b/scripts/loot/lootItems/armor/tantel/tantel_armor_boots.py @@ -0,0 +1,24 @@ + +def itemTemplate(): + + return ['object/tangible/wearables/armor/tantel/shared_armor_tantel_skreej_boots.iff'] + +def customItemName(): + + return 'Tantel Armor Boots' + +def customItemStackCount(): + + return 1 + +def customizationAttributes(): + + return [] + +def customizationValues(): + + return [] + +def itemStats(): + + return [] diff --git a/scripts/loot/lootItems/armor/tantel/tantel_armor_bracer_left.py b/scripts/loot/lootItems/armor/tantel/tantel_armor_bracer_left.py new file mode 100644 index 00000000..70c573f3 --- /dev/null +++ b/scripts/loot/lootItems/armor/tantel/tantel_armor_bracer_left.py @@ -0,0 +1,31 @@ + +def itemTemplate(): + + return ['object/tangible/wearables/armor/tantel/shared_armor_tantel_skreej_bracer_l.iff'] + +def customItemName(): + + return 'Tantel Armor Bracer Left' + +def customItemStackCount(): + + return 1 + +def customizationAttributes(): + + return [] + +def customizationValues(): + + return [] + +def itemStats(): + + stats = ['armor_efficiency_kinetic','5000','6800'] + stats += ['armor_efficiency_energy','3000','4800'] + stats += ['special_protection_heat','4000','5800'] + stats += ['special_protection_cold','4000','5800'] + stats += ['special_protection_acid','4000','5800'] + stats += ['special_protection_electricity','4000','5800'] + + return stats diff --git a/scripts/loot/lootItems/armor/tantel/tantel_armor_bracer_right.py b/scripts/loot/lootItems/armor/tantel/tantel_armor_bracer_right.py new file mode 100644 index 00000000..ff47d129 --- /dev/null +++ b/scripts/loot/lootItems/armor/tantel/tantel_armor_bracer_right.py @@ -0,0 +1,31 @@ + +def itemTemplate(): + + return ['object/tangible/wearables/armor/tantel/shared_armor_tantel_skreej_bracer_r.iff'] + +def customItemName(): + + return 'Tantel Armor Bracer Right' + +def customItemStackCount(): + + return 1 + +def customizationAttributes(): + + return [] + +def customizationValues(): + + return [] + +def itemStats(): + + stats = ['armor_efficiency_kinetic','5000','6800'] + stats += ['armor_efficiency_energy','3000','4800'] + stats += ['special_protection_heat','4000','5800'] + stats += ['special_protection_cold','4000','5800'] + stats += ['special_protection_acid','4000','5800'] + stats += ['special_protection_electricity','4000','5800'] + + return stats diff --git a/scripts/loot/lootItems/armor/tantel/tantel_armor_chestplate.py b/scripts/loot/lootItems/armor/tantel/tantel_armor_chestplate.py new file mode 100644 index 00000000..d6babe12 --- /dev/null +++ b/scripts/loot/lootItems/armor/tantel/tantel_armor_chestplate.py @@ -0,0 +1,31 @@ + +def itemTemplate(): + + return ['object/tangible/wearables/armor/tantel/shared_armor_tantel_skreej_chest_plate.iff'] + +def customItemName(): + + return 'Tantel Armor Chestplate' + +def customItemStackCount(): + + return 1 + +def customizationAttributes(): + + return [] + +def customizationValues(): + + return [] + +def itemStats(): + + stats = ['armor_efficiency_kinetic','5000','6800'] + stats += ['armor_efficiency_energy','3000','4800'] + stats += ['special_protection_heat','4000','5800'] + stats += ['special_protection_cold','4000','5800'] + stats += ['special_protection_acid','4000','5800'] + stats += ['special_protection_electricity','4000','5800'] + + return stats diff --git a/scripts/loot/lootItems/armor/tantel/tantel_armor_gloves.py b/scripts/loot/lootItems/armor/tantel/tantel_armor_gloves.py new file mode 100644 index 00000000..4bfcb2ca --- /dev/null +++ b/scripts/loot/lootItems/armor/tantel/tantel_armor_gloves.py @@ -0,0 +1,24 @@ + +def itemTemplate(): + + return ['object/tangible/wearables/armor/tantel/shared_armor_tantel_skreej_gloves.iff'] + +def customItemName(): + + return 'Tantel Armor Gloves' + +def customItemStackCount(): + + return 1 + +def customizationAttributes(): + + return [] + +def customizationValues(): + + return [] + +def itemStats(): + + return [] diff --git a/scripts/loot/lootItems/armor/tantel/tantel_armor_helmet.py b/scripts/loot/lootItems/armor/tantel/tantel_armor_helmet.py new file mode 100644 index 00000000..211b9735 --- /dev/null +++ b/scripts/loot/lootItems/armor/tantel/tantel_armor_helmet.py @@ -0,0 +1,31 @@ + +def itemTemplate(): + + return ['object/tangible/wearables/armor/tantel/shared_armor_tantel_skreej_helmet.iff'] + +def customItemName(): + + return 'Tantel Armor Helmet' + +def customItemStackCount(): + + return 1 + +def customizationAttributes(): + + return [] + +def customizationValues(): + + return [] + +def itemStats(): + + stats = ['armor_efficiency_kinetic','5000','6800'] + stats += ['armor_efficiency_energy','3000','4800'] + stats += ['special_protection_heat','4000','5800'] + stats += ['special_protection_cold','4000','5800'] + stats += ['special_protection_acid','4000','5800'] + stats += ['special_protection_electricity','4000','5800'] + + return stats diff --git a/scripts/loot/lootItems/armor/tantel/tantel_armor_leggings.py b/scripts/loot/lootItems/armor/tantel/tantel_armor_leggings.py new file mode 100644 index 00000000..8550f9a9 --- /dev/null +++ b/scripts/loot/lootItems/armor/tantel/tantel_armor_leggings.py @@ -0,0 +1,31 @@ + +def itemTemplate(): + + return ['object/tangible/wearables/armor/tantel/shared_armor_tantel_skreej_leggings.iff'] + +def customItemName(): + + return 'Tantel Armor Leggings' + +def customItemStackCount(): + + return 1 + +def customizationAttributes(): + + return [] + +def customizationValues(): + + return [] + +def itemStats(): + + stats = ['armor_efficiency_kinetic','5000','6800'] + stats += ['armor_efficiency_energy','3000','4800'] + stats += ['special_protection_heat','4000','5800'] + stats += ['special_protection_cold','4000','5800'] + stats += ['special_protection_acid','4000','5800'] + stats += ['special_protection_electricity','4000','5800'] + + return stats diff --git a/scripts/loot/lootItems/armor/ubese/ubese_armor_bandolier.py b/scripts/loot/lootItems/armor/ubese/ubese_armor_bandolier.py new file mode 100644 index 00000000..40c275b0 --- /dev/null +++ b/scripts/loot/lootItems/armor/ubese/ubese_armor_bandolier.py @@ -0,0 +1,24 @@ + +def itemTemplate(): + + return ['object/tangible/wearables/armor/ubese/shared_armor_ubese_bandolier.iff'] + +def customItemName(): + + return 'Ubese Armor Bandolier' + +def customItemStackCount(): + + return 1 + +def customizationAttributes(): + + return [] + +def customizationValues(): + + return [] + +def itemStats(): + + return stats diff --git a/scripts/loot/lootItems/armor/ubese/ubese_armor_boots.py b/scripts/loot/lootItems/armor/ubese/ubese_armor_boots.py new file mode 100644 index 00000000..eb3b46d6 --- /dev/null +++ b/scripts/loot/lootItems/armor/ubese/ubese_armor_boots.py @@ -0,0 +1,24 @@ + +def itemTemplate(): + + return ['object/tangible/wearables/armor/ubese/shared_armor_ubese_boots.iff'] + +def customItemName(): + + return 'Ubese Armor Boots' + +def customItemStackCount(): + + return 1 + +def customizationAttributes(): + + return [] + +def customizationValues(): + + return [] + +def itemStats(): + + return [] diff --git a/scripts/loot/lootItems/armor/ubese/ubese_armor_bracer_left.py b/scripts/loot/lootItems/armor/ubese/ubese_armor_bracer_left.py new file mode 100644 index 00000000..6f2d6dd4 --- /dev/null +++ b/scripts/loot/lootItems/armor/ubese/ubese_armor_bracer_left.py @@ -0,0 +1,31 @@ + +def itemTemplate(): + + return ['object/tangible/wearables/armor/ubese/shared_armor_ubese_bracer_l.iff'] + +def customItemName(): + + return 'Ubese Armor Bracer Left' + +def customItemStackCount(): + + return 1 + +def customizationAttributes(): + + return [] + +def customizationValues(): + + return [] + +def itemStats(): + + stats = ['armor_efficiency_kinetic','5000','6800'] + stats += ['armor_efficiency_energy','3000','4800'] + stats += ['special_protection_heat','4000','5800'] + stats += ['special_protection_cold','4000','5800'] + stats += ['special_protection_acid','4000','5800'] + stats += ['special_protection_electricity','4000','5800'] + + return stats diff --git a/scripts/loot/lootItems/armor/ubese/ubese_armor_bracer_right.py b/scripts/loot/lootItems/armor/ubese/ubese_armor_bracer_right.py new file mode 100644 index 00000000..a1fbed28 --- /dev/null +++ b/scripts/loot/lootItems/armor/ubese/ubese_armor_bracer_right.py @@ -0,0 +1,31 @@ + +def itemTemplate(): + + return ['object/tangible/wearables/armor/ubese/shared_armor_ubese_bracer_r.iff'] + +def customItemName(): + + return 'Ubese Armor Bracer Right' + +def customItemStackCount(): + + return 1 + +def customizationAttributes(): + + return [] + +def customizationValues(): + + return [] + +def itemStats(): + + stats = ['armor_efficiency_kinetic','5000','6800'] + stats += ['armor_efficiency_energy','3000','4800'] + stats += ['special_protection_heat','4000','5800'] + stats += ['special_protection_cold','4000','5800'] + stats += ['special_protection_acid','4000','5800'] + stats += ['special_protection_electricity','4000','5800'] + + return stats diff --git a/scripts/loot/lootItems/armor/ubese/ubese_armor_gloves.py b/scripts/loot/lootItems/armor/ubese/ubese_armor_gloves.py new file mode 100644 index 00000000..3a4063c9 --- /dev/null +++ b/scripts/loot/lootItems/armor/ubese/ubese_armor_gloves.py @@ -0,0 +1,24 @@ + +def itemTemplate(): + + return ['object/tangible/wearables/armor/ubese/shared_armor_ubese_gloves.iff'] + +def customItemName(): + + return 'test' + +def customItemStackCount(): + + return 1 + +def customizationAttributes(): + + return [] + +def customizationValues(): + + return [] + +def itemStats(): + + return [] diff --git a/scripts/loot/lootItems/armor/ubese/ubese_armor_helmet.py b/scripts/loot/lootItems/armor/ubese/ubese_armor_helmet.py new file mode 100644 index 00000000..ff18ad4a --- /dev/null +++ b/scripts/loot/lootItems/armor/ubese/ubese_armor_helmet.py @@ -0,0 +1,31 @@ + +def itemTemplate(): + + return ['object/tangible/wearables/armor/ubese/shared_armor_ubese_helmet.iff'] + +def customItemName(): + + return 'Ubese Armor Helmet' + +def customItemStackCount(): + + return 1 + +def customizationAttributes(): + + return [] + +def customizationValues(): + + return [] + +def itemStats(): + + stats = ['armor_efficiency_kinetic','5000','6800'] + stats += ['armor_efficiency_energy','3000','4800'] + stats += ['special_protection_heat','4000','5800'] + stats += ['special_protection_cold','4000','5800'] + stats += ['special_protection_acid','4000','5800'] + stats += ['special_protection_electricity','4000','5800'] + + return stats diff --git a/scripts/loot/lootItems/armor/ubese/ubese_armor_jacket.py b/scripts/loot/lootItems/armor/ubese/ubese_armor_jacket.py new file mode 100644 index 00000000..98a7fedd --- /dev/null +++ b/scripts/loot/lootItems/armor/ubese/ubese_armor_jacket.py @@ -0,0 +1,31 @@ + +def itemTemplate(): + + return ['object/tangible/wearables/armor/ubese/shared_armor_ubese_jacket.iff'] + +def customItemName(): + + return 'Ubese Armor Jacket' + +def customItemStackCount(): + + return 1 + +def customizationAttributes(): + + return [] + +def customizationValues(): + + return [] + +def itemStats(): + + stats = ['armor_efficiency_kinetic','5000','6800'] + stats += ['armor_efficiency_energy','3000','4800'] + stats += ['special_protection_heat','4000','5800'] + stats += ['special_protection_cold','4000','5800'] + stats += ['special_protection_acid','4000','5800'] + stats += ['special_protection_electricity','4000','5800'] + + return stats diff --git a/scripts/loot/lootItems/armor/ubese/ubese_armor_shirt.py b/scripts/loot/lootItems/armor/ubese/ubese_armor_shirt.py new file mode 100644 index 00000000..edbe2572 --- /dev/null +++ b/scripts/loot/lootItems/armor/ubese/ubese_armor_shirt.py @@ -0,0 +1,24 @@ + +def itemTemplate(): + + return ['object/tangible/wearables/armor/ubese/shared_armor_ubese_shirt.iff'] + +def customItemName(): + + return 'Ubese Armor Shirt' + +def customItemStackCount(): + + return 1 + +def customizationAttributes(): + + return [] + +def customizationValues(): + + return [] + +def itemStats(): + + return [] diff --git a/scripts/loot/lootItems/chroniclerelics/chronicle_relic_fragment.py b/scripts/loot/lootItems/chroniclerelics/chronicle_relic_fragment.py new file mode 100644 index 00000000..e69de29b diff --git a/scripts/loot/lootItems/clothing/robes/apprentice_robe.py b/scripts/loot/lootItems/clothing/robes/apprentice_robe.py new file mode 100644 index 00000000..a717ac1b --- /dev/null +++ b/scripts/loot/lootItems/clothing/robes/apprentice_robe.py @@ -0,0 +1,7 @@ +def itemTemplate(): + + return ['object/tangible/wearables/robe/shared_robe_jedi_light_s02.iff'] + +def customItemName(): + + return 'Apprentice Robe' diff --git a/scripts/loot/lootItems/clothing/suits/reinforced_jumpsuit.py b/scripts/loot/lootItems/clothing/suits/reinforced_jumpsuit.py new file mode 100644 index 00000000..e69de29b diff --git a/scripts/loot/lootItems/clothing/suits/traders_flightsuit.py b/scripts/loot/lootItems/clothing/suits/traders_flightsuit.py new file mode 100644 index 00000000..e69de29b diff --git a/scripts/loot/lootItems/clothing/tusken/tusken_raider_bandolier.py b/scripts/loot/lootItems/clothing/tusken/tusken_raider_bandolier.py new file mode 100644 index 00000000..163a87ea --- /dev/null +++ b/scripts/loot/lootItems/clothing/tusken/tusken_raider_bandolier.py @@ -0,0 +1,8 @@ + +def itemTemplate(): + + return ['object/tangible/wearables/bandolier/shared_bandolier_tusken_raider_s01.iff','object/tangible/wearables/bandolier/shared_bandolier_tusken_raider_s02.iff','object/tangible/wearables/bandolier/shared_bandolier_tusken_raider_s03.iff'] + +def customItemName(): + + return 'Tusken Raider Bandolier' diff --git a/scripts/loot/lootItems/clothing/tusken/tusken_raider_boots.py b/scripts/loot/lootItems/clothing/tusken/tusken_raider_boots.py new file mode 100644 index 00000000..81cb35af --- /dev/null +++ b/scripts/loot/lootItems/clothing/tusken/tusken_raider_boots.py @@ -0,0 +1,8 @@ + +def itemTemplate(): + + return ['object/tangible/wearables/boots/shared_boots_tusken_raider.iff'] + +def customItemName(): + + return 'Tusken Raider Boots' diff --git a/scripts/loot/lootItems/clothing/tusken/tusken_raider_dress.py b/scripts/loot/lootItems/clothing/tusken/tusken_raider_dress.py new file mode 100644 index 00000000..c697642b --- /dev/null +++ b/scripts/loot/lootItems/clothing/tusken/tusken_raider_dress.py @@ -0,0 +1,8 @@ + +def itemTemplate(): + + return ['object/tangible/wearables/robe/shared_robe_tusken_raider_s01.iff','object/tangible/wearables/robe/shared_robe_tusken_raider_s02.iff'] + +def customItemName(): + + return 'Tusken Raider Dress' diff --git a/scripts/loot/lootItems/clothing/tusken/tusken_raider_gloves.py b/scripts/loot/lootItems/clothing/tusken/tusken_raider_gloves.py new file mode 100644 index 00000000..a942a1d3 --- /dev/null +++ b/scripts/loot/lootItems/clothing/tusken/tusken_raider_gloves.py @@ -0,0 +1,8 @@ + +def itemTemplate(): + + return ['object/tangible/wearables/gloves/shared_gloves_tusken_raider.iff'] + +def customItemName(): + + return 'Tusken Raider Gloves' diff --git a/scripts/loot/lootItems/clothing/tusken/tusken_raider_helmet.py b/scripts/loot/lootItems/clothing/tusken/tusken_raider_helmet.py new file mode 100644 index 00000000..d4e539d4 --- /dev/null +++ b/scripts/loot/lootItems/clothing/tusken/tusken_raider_helmet.py @@ -0,0 +1,8 @@ + +def itemTemplate(): + + return ['object/tangible/wearables/helmet/shared_helmet_tusken_raider_s01.iff','object/tangible/wearables/helmet/shared_helmet_tusken_raider_s02.iff'] + +def customItemName(): + + return 'Tusken Raider Helmet' diff --git a/scripts/loot/lootItems/colorcrystal.py b/scripts/loot/lootItems/colorcrystal.py new file mode 100644 index 00000000..1458e1be --- /dev/null +++ b/scripts/loot/lootItems/colorcrystal.py @@ -0,0 +1,4 @@ + +def itemTemplate(): + + return ['object/tangible/component/weapon/lightsaber/shared_lightsaber_module_force_crystal.iff'] diff --git a/scripts/loot/lootItems/creatureloot/antenna.py b/scripts/loot/lootItems/creatureloot/antenna.py new file mode 100644 index 00000000..62113b2d --- /dev/null +++ b/scripts/loot/lootItems/creatureloot/antenna.py @@ -0,0 +1,8 @@ + +def itemTemplate(): + + return ['object/tangible/loot/creature_loot/generic/shared_generic_antennae.iff'] + +def customItemName(): + + return 'Antenna' diff --git a/scripts/loot/lootItems/creatureloot/brain.py b/scripts/loot/lootItems/creatureloot/brain.py new file mode 100644 index 00000000..107add91 --- /dev/null +++ b/scripts/loot/lootItems/creatureloot/brain.py @@ -0,0 +1,8 @@ + +def itemTemplate(): + + return ['object/tangible/loot/creature_loot/generic/shared_brain_s01.iff'] + +def customItemName(): + + return 'Brain' \ No newline at end of file diff --git a/scripts/loot/lootItems/creatureloot/eye.py b/scripts/loot/lootItems/creatureloot/eye.py new file mode 100644 index 00000000..076ce324 --- /dev/null +++ b/scripts/loot/lootItems/creatureloot/eye.py @@ -0,0 +1,8 @@ + +def itemTemplate(): + + return ['object/tangible/loot/creature_loot/generic/shared_generic_eye.iff'] + +def customItemName(): + + return 'Eye' diff --git a/scripts/loot/lootItems/creatureloot/gland.py b/scripts/loot/lootItems/creatureloot/gland.py new file mode 100644 index 00000000..ccf78284 --- /dev/null +++ b/scripts/loot/lootItems/creatureloot/gland.py @@ -0,0 +1,8 @@ + +def itemTemplate(): + + return ['object/tangible/loot/creature_loot/generic/shared_lungs_gland.iff'] + +def customItemName(): + + return 'Gland' \ No newline at end of file diff --git a/scripts/loot/lootItems/creatureloot/heart.py b/scripts/loot/lootItems/creatureloot/heart.py new file mode 100644 index 00000000..8232f7a7 --- /dev/null +++ b/scripts/loot/lootItems/creatureloot/heart.py @@ -0,0 +1,8 @@ + +def itemTemplate(): + + return ['object/tangible/loot/creature_loot/generic/shared_generic_heart.iff'] + +def customItemName(): + + return 'Heart' diff --git a/scripts/loot/lootItems/creatureloot/stomach.py b/scripts/loot/lootItems/creatureloot/stomach.py new file mode 100644 index 00000000..47042a7d --- /dev/null +++ b/scripts/loot/lootItems/creatureloot/stomach.py @@ -0,0 +1,8 @@ + +def itemTemplate(): + + return ['object/tangible/loot/creature_loot/generic/shared_generic_stomach.iff'] + +def customItemName(): + + return 'Stomach' diff --git a/scripts/loot/lootItems/exceptionallootchest/advertisement_rodian.py b/scripts/loot/lootItems/exceptionallootchest/advertisement_rodian.py new file mode 100644 index 00000000..195e2ca5 --- /dev/null +++ b/scripts/loot/lootItems/exceptionallootchest/advertisement_rodian.py @@ -0,0 +1,4 @@ + +def itemTemplate(): + + return ['object/tangible/painting/shared_painting_rodian_f_ad_01.iff'] diff --git a/scripts/loot/lootItems/exceptionallootchest/bacta_tank.py b/scripts/loot/lootItems/exceptionallootchest/bacta_tank.py new file mode 100644 index 00000000..46704737 --- /dev/null +++ b/scripts/loot/lootItems/exceptionallootchest/bacta_tank.py @@ -0,0 +1,5 @@ + +def itemTemplate(): + + return ['object/tangible/loot/generic_usable/shared_bacta_tank.iff'] + diff --git a/scripts/loot/lootItems/exceptionallootchest/cunning_of_tyranus.py b/scripts/loot/lootItems/exceptionallootchest/cunning_of_tyranus.py new file mode 100644 index 00000000..fe363b99 --- /dev/null +++ b/scripts/loot/lootItems/exceptionallootchest/cunning_of_tyranus.py @@ -0,0 +1,23 @@ + +def itemTemplate(): + + return ['object/tangible/component/weapon/lightsaber/shared_lightsaber_module_force_crystal.iff'] + +def customItemName(): + + return "Cunning Of Tyranus" + +def customColor1(): + + return 0 + +def lootDescriptor(): + + return 'rarecolorcrystal' + +def itemStats(): + + stats = ['elemtype','heat','heat'] + stats +=['elemdamage','6','6'] + + return stats diff --git a/scripts/loot/lootItems/exceptionallootchest/dna_storage_device.py b/scripts/loot/lootItems/exceptionallootchest/dna_storage_device.py new file mode 100644 index 00000000..43ca2f4a --- /dev/null +++ b/scripts/loot/lootItems/exceptionallootchest/dna_storage_device.py @@ -0,0 +1,5 @@ + +def itemTemplate(): + + return ['object/tangible/item/beast/barn_lite/shared_beast_dna_storage_device.iff'] + diff --git a/scripts/loot/lootItems/exceptionallootchest/dusk_in_kachirho.py b/scripts/loot/lootItems/exceptionallootchest/dusk_in_kachirho.py new file mode 100644 index 00000000..577bde9b --- /dev/null +++ b/scripts/loot/lootItems/exceptionallootchest/dusk_in_kachirho.py @@ -0,0 +1,4 @@ + +def itemTemplate(): + + return ['object/tangible/veteran_reward/one_year_anniversary/shared_painting_10.iff'] diff --git a/scripts/loot/lootItems/exceptionallootchest/emperors_senate_office_chair.py b/scripts/loot/lootItems/exceptionallootchest/emperors_senate_office_chair.py new file mode 100644 index 00000000..d52cedd2 --- /dev/null +++ b/scripts/loot/lootItems/exceptionallootchest/emperors_senate_office_chair.py @@ -0,0 +1,4 @@ + +def itemTemplate(): + + return ['object/tangible/furniture/house_cleanup/shared_emperor_chair.iff'] diff --git a/scripts/loot/lootItems/exceptionallootchest/fighter.py b/scripts/loot/lootItems/exceptionallootchest/fighter.py new file mode 100644 index 00000000..b30a875a --- /dev/null +++ b/scripts/loot/lootItems/exceptionallootchest/fighter.py @@ -0,0 +1,4 @@ + +def itemTemplate(): + + return ['object/tangible/painting/shared_painting_rodian_m.iff'] diff --git a/scripts/loot/lootItems/exceptionallootchest/gungan_statue_style_1_schematic.py b/scripts/loot/lootItems/exceptionallootchest/gungan_statue_style_1_schematic.py new file mode 100644 index 00000000..a6ba0c1b --- /dev/null +++ b/scripts/loot/lootItems/exceptionallootchest/gungan_statue_style_1_schematic.py @@ -0,0 +1,4 @@ + +def itemTemplate(): + + return ['object/draft_schematic/furniture/shared_furniture_statue_gungan_statue_s01.iff'] diff --git a/scripts/loot/lootItems/exceptionallootchest/gungan_statue_style_2_schematic.py b/scripts/loot/lootItems/exceptionallootchest/gungan_statue_style_2_schematic.py new file mode 100644 index 00000000..f71c1747 --- /dev/null +++ b/scripts/loot/lootItems/exceptionallootchest/gungan_statue_style_2_schematic.py @@ -0,0 +1,4 @@ + +def itemTemplate(): + + return ['object/draft_schematic/furniture/shared_furniture_statue_gungan_statue_s02.iff'] diff --git a/scripts/loot/lootItems/exceptionallootchest/gungan_statue_style_3_schematic.py b/scripts/loot/lootItems/exceptionallootchest/gungan_statue_style_3_schematic.py new file mode 100644 index 00000000..65ea76df --- /dev/null +++ b/scripts/loot/lootItems/exceptionallootchest/gungan_statue_style_3_schematic.py @@ -0,0 +1,4 @@ + +def itemTemplate(): + + return ['object/draft_schematic/furniture/shared_furniture_statue_gungan_statue_s03.iff'] diff --git a/scripts/loot/lootItems/exceptionallootchest/gungan_statue_style_4_schematic.py b/scripts/loot/lootItems/exceptionallootchest/gungan_statue_style_4_schematic.py new file mode 100644 index 00000000..479dcb1c --- /dev/null +++ b/scripts/loot/lootItems/exceptionallootchest/gungan_statue_style_4_schematic.py @@ -0,0 +1,4 @@ + +def itemTemplate(): + + return ['object/draft_schematic/furniture/shared_furniture_statue_gungan_statue_s04.iff'] diff --git a/scripts/loot/lootItems/exceptionallootchest/holo_entertainment_table.py b/scripts/loot/lootItems/exceptionallootchest/holo_entertainment_table.py new file mode 100644 index 00000000..bfe4cd74 --- /dev/null +++ b/scripts/loot/lootItems/exceptionallootchest/holo_entertainment_table.py @@ -0,0 +1,4 @@ + +def itemTemplate(): + + return ['object/tangible/event_perk/shared_lifeday_holo_table.iff'] diff --git a/scripts/loot/lootItems/exceptionallootchest/jedi_master_cloak.py b/scripts/loot/lootItems/exceptionallootchest/jedi_master_cloak.py new file mode 100644 index 00000000..f8b19b7f --- /dev/null +++ b/scripts/loot/lootItems/exceptionallootchest/jedi_master_cloak.py @@ -0,0 +1,4 @@ + +def itemTemplate(): + + return ['object/tangible/wearables/robe/shared_robe_s05_h1.iff'] # needs correct iff still diff --git a/scripts/loot/lootItems/exceptionallootchest/legendary_e5_carbine.py b/scripts/loot/lootItems/exceptionallootchest/legendary_e5_carbine.py new file mode 100644 index 00000000..7550577b --- /dev/null +++ b/scripts/loot/lootItems/exceptionallootchest/legendary_e5_carbine.py @@ -0,0 +1,37 @@ + +def itemTemplate(): + + return ['object/weapon/ranged/carbine/shared_carbine_e5_legend.iff'] + +def customItemName(): + + return 'Legendary E5 Carbine' + +def customItemStackCount(): + + return 1 + +def customizationAttributes(): + + return [] + +def customizationValues(): + + return [] + +def requiredCL(): + + return 88 + +def itemStats(): + + stats = ['mindamage','400','450'] + stats += ['maxdamage','850','900'] + stats += ['attackspeed','0.6','0.6'] + stats += ['maxrange','0','50'] + stats += ['damagetype','energy','energy'] + stats += ['elemtype','@obj_attr_n:elemental_electricity','@obj_attr_n:elemental_electricity'] + stats += ['elemdamage','23','23'] + stats += ['weapontype','1','1'] + + return stats diff --git a/scripts/loot/lootItems/exceptionallootchest/legendary_fwg5_pistol.py b/scripts/loot/lootItems/exceptionallootchest/legendary_fwg5_pistol.py new file mode 100644 index 00000000..81e1e8b5 --- /dev/null +++ b/scripts/loot/lootItems/exceptionallootchest/legendary_fwg5_pistol.py @@ -0,0 +1,37 @@ + +def itemTemplate(): + + return ['object/weapon/ranged/pistol/shared_pistol_fwg5_legendary.iff'] + +def customItemName(): + + return 'Legendary FWG5 Pistol' + +def customItemStackCount(): + + return 1 + +def customizationAttributes(): + + return [] + +def customizationValues(): + + return [] + +def requiredCL(): + + return 88 + +def itemStats(): + + stats = ['mindamage','250','270'] + stats += ['maxdamage','500','530'] + stats += ['attackspeed','0.4','0.4'] + stats += ['maxrange','0','35'] + stats += ['damagetype','energy','energy'] + stats += ['elemtype','@obj_attr_n:elemental_heat','@obj_attr_n:elemental_heat'] + stats += ['elemdamage','35','35'] + stats += ['weapontype','2','2'] + + return stats diff --git a/scripts/loot/lootItems/exceptionallootchest/legendary_nightsister_energy_lance.py b/scripts/loot/lootItems/exceptionallootchest/legendary_nightsister_energy_lance.py new file mode 100644 index 00000000..58756024 --- /dev/null +++ b/scripts/loot/lootItems/exceptionallootchest/legendary_nightsister_energy_lance.py @@ -0,0 +1,37 @@ + +def itemTemplate(): + + return ['object/weapon/melee/polearm/shared_lance_nightsister_legendary.iff'] + +def customItemName(): + + return 'Legendary Nightsister Energy Lance' + +def customItemStackCount(): + + return 1 + +def customizationAttributes(): + + return [] + +def customizationValues(): + + return [] + +def requiredCL(): + + return 88 + +def itemStats(): + + stats = ['mindamage','750','800'] + stats += ['maxdamage','1100','1200'] + stats += ['attackspeed','1.0','1.0'] + stats += ['maxrange','0','5'] + stats += ['damagetype','energy','energy'] + stats += ['elemtype','@obj_attr_n:elemental_electricity','@obj_attr_n:elemental_electricity'] + stats += ['elemdamage','50','50'] + stats += ['weapontype','7','7'] + + return stats diff --git a/scripts/loot/lootItems/exceptionallootchest/legendary_power_hammer.py b/scripts/loot/lootItems/exceptionallootchest/legendary_power_hammer.py new file mode 100644 index 00000000..3224b384 --- /dev/null +++ b/scripts/loot/lootItems/exceptionallootchest/legendary_power_hammer.py @@ -0,0 +1,37 @@ + +def itemTemplate(): + + return ['object/weapon/melee/2h_sword/shared_quest_2h_sword_battleaxe.iff'] + +def customItemName(): + + return 'Legendary Power Hammer' + +def customItemStackCount(): + + return 1 + +def customizationAttributes(): + + return [] + +def customizationValues(): + + return [] + +def requiredCL(): + + return 88 + +def itemStats(): + + stats = ['mindamage','850','900'] + stats += ['maxdamage','1250','1350'] + stats += ['attackspeed','1.0','1.0'] + stats += ['maxrange','0','5'] + stats += ['damagetype','energy','energy'] + stats += ['elemtype','@obj_attr_n:elemental_acid','@obj_attr_n:elemental_acid'] + stats += ['elemdamage','20','20'] + stats += ['weapontype','5','5'] + + return stats diff --git a/scripts/loot/lootItems/exceptionallootchest/legendary_stun_baton.py b/scripts/loot/lootItems/exceptionallootchest/legendary_stun_baton.py new file mode 100644 index 00000000..cbc9cb70 --- /dev/null +++ b/scripts/loot/lootItems/exceptionallootchest/legendary_stun_baton.py @@ -0,0 +1,37 @@ + +def itemTemplate(): + + return ['object/weapon/melee/baton/shared_baton_stun_legendary.iff'] + +def customItemName(): + + return 'Legendary Stun Baton' + +def customItemStackCount(): + + return 1 + +def customizationAttributes(): + + return [] + +def customizationValues(): + + return [] + +def requiredCL(): + + return 88 + +def itemStats(): + + stats = ['mindamage','550','600'] + stats += ['maxdamage','1250','1300'] + stats += ['attackspeed','1.0','1.0'] + stats += ['maxrange','0','5'] + stats += ['damagetype','energy','energy'] + stats += ['elemtype','@obj_attr_n:elemental_electricity','@obj_attr_n:elemental_electricity'] + stats += ['elemdamage','75','75'] + stats += ['weapontype','5','5'] + + return stats diff --git a/scripts/loot/lootItems/exceptionallootchest/legendary_t21_rifle.py b/scripts/loot/lootItems/exceptionallootchest/legendary_t21_rifle.py new file mode 100644 index 00000000..66a8dd30 --- /dev/null +++ b/scripts/loot/lootItems/exceptionallootchest/legendary_t21_rifle.py @@ -0,0 +1,37 @@ + +def itemTemplate(): + + return ['object/weapon/ranged/rifle/shared_rifle_t21_legendary.iff'] + +def customItemName(): + + return 'Legendary T21 Rifle' + +def customItemStackCount(): + + return 1 + +def customizationAttributes(): + + return [] + +def customizationValues(): + + return [] + +def requiredCL(): + + return 88 + +def itemStats(): + + stats = ['mindamage','500','550'] + stats += ['maxdamage','1050','1100'] + stats += ['attackspeed','0.8','0.8'] + stats += ['maxrange','0','64'] + stats += ['damagetype','energy','energy'] + stats += ['elemtype','@obj_attr_n:elemental_acid','@obj_attr_n:elemental_acid'] + stats += ['elemdamage','30','30'] + stats += ['weapontype','0','0'] + + return stats diff --git a/scripts/loot/lootItems/exceptionallootchest/poster_block_turret_schematic.py b/scripts/loot/lootItems/exceptionallootchest/poster_block_turret_schematic.py new file mode 100644 index 00000000..140bfe20 --- /dev/null +++ b/scripts/loot/lootItems/exceptionallootchest/poster_block_turret_schematic.py @@ -0,0 +1,4 @@ + +def itemTemplate(): + + return ['object/tangible/painting/shared_painting_schematic_weapon_s03.iff'] diff --git a/scripts/loot/lootItems/exceptionallootchest/prayer_mobile.py b/scripts/loot/lootItems/exceptionallootchest/prayer_mobile.py new file mode 100644 index 00000000..4009eb8a --- /dev/null +++ b/scripts/loot/lootItems/exceptionallootchest/prayer_mobile.py @@ -0,0 +1,4 @@ + +def itemTemplate(): + + return ['object/tangible/furniture/ep3_rewards/shared_wke_prayer_mobile.iff'] diff --git a/scripts/loot/lootItems/exceptionallootchest/shard_of_ferocity.py b/scripts/loot/lootItems/exceptionallootchest/shard_of_ferocity.py new file mode 100644 index 00000000..26186612 --- /dev/null +++ b/scripts/loot/lootItems/exceptionallootchest/shard_of_ferocity.py @@ -0,0 +1,26 @@ + +def itemTemplate(): + + return ['object/tangible/component/weapon/lightsaber/shared_lightsaber_module_force_crystal.iff'] + +def customItemName(): + + return "Shard Of Ferocity" + +def biolink(): + + return 1 + +def lootDescriptor(): + + return 'rarebuffitem' + +def itemStats(): + + stats =['proc_name','towCrystalUberCombat','towCrystalUberCombat'] + stats +=['effectname','Ferocity','Ferocity'] + stats +=['duration','180','180'] + stats +=['cooldown','3600','3600'] + + return stats + diff --git a/scripts/loot/lootItems/exceptionallootchest/shard_of_retaliation.py b/scripts/loot/lootItems/exceptionallootchest/shard_of_retaliation.py new file mode 100644 index 00000000..4bb1e5bc --- /dev/null +++ b/scripts/loot/lootItems/exceptionallootchest/shard_of_retaliation.py @@ -0,0 +1,25 @@ + +def itemTemplate(): + + return ['object/tangible/component/weapon/lightsaber/shared_lightsaber_module_force_crystal.iff'] # correct iff not found + +def customItemName(): + + return "Shard Of Retaliation" + +def biolink(): + + return 1 + +def lootDescriptor(): + + return 'rarebuffitem' + +def itemStats(): + + stats =['proc_name','towCrystalUberDs','towCrystalUberDs'] + stats +=['effectname','towCrystalUberDs','towCrystalUberDs'] + stats +=['duration','180','180'] + stats +=['cooldown','3600','3600'] + + return stats \ No newline at end of file diff --git a/scripts/loot/lootItems/exceptionallootchest/sith_buff_holocron.py b/scripts/loot/lootItems/exceptionallootchest/sith_buff_holocron.py new file mode 100644 index 00000000..65658e9b --- /dev/null +++ b/scripts/loot/lootItems/exceptionallootchest/sith_buff_holocron.py @@ -0,0 +1,25 @@ + +def itemTemplate(): + + return ['object/tangible/loot/creature_loot/collections/shared_sith_holocron_01.iff'] + +def customItemName(): + + return 'Sith Holocron' + +def biolink(): + + return 1 + +def lootDescriptor(): + + return 'rarebuffitem' + +def itemStats(): + + stats =['proc_name','towCrystalABImmune','towCrystalABImmune'] + stats +=['effectname','Forbidden Knowledge I','Forbidden Knowledge I'] + stats +=['duration','180','180'] + stats +=['cooldown','3600','3600'] + + return stats \ No newline at end of file diff --git a/scripts/loot/lootItems/exceptionallootchest/sith_relic.py b/scripts/loot/lootItems/exceptionallootchest/sith_relic.py new file mode 100644 index 00000000..007516fd --- /dev/null +++ b/scripts/loot/lootItems/exceptionallootchest/sith_relic.py @@ -0,0 +1,4 @@ + +def itemTemplate(): + + return ['object/tangible/loot/mustafar/shared_sith_relic_01.iff'] diff --git a/scripts/loot/lootItems/exceptionallootchest/war_phoenix.py b/scripts/loot/lootItems/exceptionallootchest/war_phoenix.py new file mode 100644 index 00000000..74e2a65c --- /dev/null +++ b/scripts/loot/lootItems/exceptionallootchest/war_phoenix.py @@ -0,0 +1,4 @@ + +def itemTemplate(): + + return ['object/tangible/painting/shared_painting_house_cleanup_rebel.iff'] diff --git a/scripts/loot/lootItems/holocrons/jedi_holocron_1_5.py b/scripts/loot/lootItems/holocrons/jedi_holocron_1_5.py new file mode 100644 index 00000000..4b4c5f4a --- /dev/null +++ b/scripts/loot/lootItems/holocrons/jedi_holocron_1_5.py @@ -0,0 +1,8 @@ + +def itemTemplate(): + + return ['object/tangible/loot/creature_loot/collections/shared_jedi_holocron_01.iff'] + +def customItemName(): + + return 'Strange Jedi HoloCron 1/5' diff --git a/scripts/loot/lootItems/holocrons/jedi_holocron_2_5.py b/scripts/loot/lootItems/holocrons/jedi_holocron_2_5.py new file mode 100644 index 00000000..1f48a31a --- /dev/null +++ b/scripts/loot/lootItems/holocrons/jedi_holocron_2_5.py @@ -0,0 +1,8 @@ + +def itemTemplate(): + + return ['object/tangible/loot/creature_loot/collections/shared_jedi_holocron_02.iff'] + +def customItemName(): + + return 'Strange Jedi HoloCron 2/5' diff --git a/scripts/loot/lootItems/holocrons/jedi_holocron_3_5.py b/scripts/loot/lootItems/holocrons/jedi_holocron_3_5.py new file mode 100644 index 00000000..c356c65a --- /dev/null +++ b/scripts/loot/lootItems/holocrons/jedi_holocron_3_5.py @@ -0,0 +1,8 @@ + +def itemTemplate(): + + return ['object/tangible/loot/creature_loot/collections/shared_jedi_holocron_03.iff'] + +def customItemName(): + + return 'Strange Jedi HoloCron 3/5' diff --git a/scripts/loot/lootItems/holocrons/jedi_holocron_4_5.py b/scripts/loot/lootItems/holocrons/jedi_holocron_4_5.py new file mode 100644 index 00000000..e9d35cb3 --- /dev/null +++ b/scripts/loot/lootItems/holocrons/jedi_holocron_4_5.py @@ -0,0 +1,8 @@ + +def itemTemplate(): + + return ['object/tangible/loot/creature_loot/collections/shared_jedi_holocron_04.iff'] + +def customItemName(): + + return 'Strange Jedi HoloCron 4/5' diff --git a/scripts/loot/lootItems/holocrons/jedi_holocron_5_5.py b/scripts/loot/lootItems/holocrons/jedi_holocron_5_5.py new file mode 100644 index 00000000..a6b896c5 --- /dev/null +++ b/scripts/loot/lootItems/holocrons/jedi_holocron_5_5.py @@ -0,0 +1,8 @@ + +def itemTemplate(): + + return ['object/tangible/loot/creature_loot/collections/shared_jedi_holocron_05.iff'] + +def customItemName(): + + return 'Strange Jedi HoloCron 5/5' diff --git a/scripts/loot/lootItems/holocrons/sith_holocron_1_5.py b/scripts/loot/lootItems/holocrons/sith_holocron_1_5.py new file mode 100644 index 00000000..eba59f0f --- /dev/null +++ b/scripts/loot/lootItems/holocrons/sith_holocron_1_5.py @@ -0,0 +1,8 @@ + +def itemTemplate(): + + return ['object/tangible/loot/creature_loot/collections/shared_sith_holocron_01.iff'] + +def customItemName(): + + return 'Strange Sith HoloCron 1/5' diff --git a/scripts/loot/lootItems/holocrons/sith_holocron_2_5.py b/scripts/loot/lootItems/holocrons/sith_holocron_2_5.py new file mode 100644 index 00000000..d0a7caf2 --- /dev/null +++ b/scripts/loot/lootItems/holocrons/sith_holocron_2_5.py @@ -0,0 +1,8 @@ + +def itemTemplate(): + + return ['object/tangible/loot/creature_loot/collections/shared_sith_holocron_02.iff'] + +def customItemName(): + + return 'Strange Sith HoloCron 2/5' diff --git a/scripts/loot/lootItems/holocrons/sith_holocron_3_5.py b/scripts/loot/lootItems/holocrons/sith_holocron_3_5.py new file mode 100644 index 00000000..56a4a56e --- /dev/null +++ b/scripts/loot/lootItems/holocrons/sith_holocron_3_5.py @@ -0,0 +1,8 @@ + +def itemTemplate(): + + return ['object/tangible/loot/creature_loot/collections/shared_sith_holocron_03.iff'] + +def customItemName(): + + return 'Strange Sith HoloCron 3/5' diff --git a/scripts/loot/lootItems/holocrons/sith_holocron_4_5.py b/scripts/loot/lootItems/holocrons/sith_holocron_4_5.py new file mode 100644 index 00000000..281e947d --- /dev/null +++ b/scripts/loot/lootItems/holocrons/sith_holocron_4_5.py @@ -0,0 +1,8 @@ + +def itemTemplate(): + + return ['object/tangible/loot/creature_loot/collections/shared_sith_holocron_04.iff'] + +def customItemName(): + + return 'Strange Sith HoloCron 4/5' diff --git a/scripts/loot/lootItems/holocrons/sith_holocron_5_5.py b/scripts/loot/lootItems/holocrons/sith_holocron_5_5.py new file mode 100644 index 00000000..acc7671e --- /dev/null +++ b/scripts/loot/lootItems/holocrons/sith_holocron_5_5.py @@ -0,0 +1,8 @@ + +def itemTemplate(): + + return ['object/tangible/loot/creature_loot/collections/shared_sith_holocron_01.iff'] + +def customItemName(): + + return 'Strange Sith HoloCron 5/5' diff --git a/scripts/loot/lootItems/junk/armor_repair_device.py b/scripts/loot/lootItems/junk/armor_repair_device.py new file mode 100644 index 00000000..079cd72a --- /dev/null +++ b/scripts/loot/lootItems/junk/armor_repair_device.py @@ -0,0 +1,21 @@ + +def itemTemplate(): + + return ['object/tangible/loot/npc_loot/shared_armor_repair_device_generic.iff'] + +def customItemName(): + + return 'Armor Repair Device' + +def stackable(): + + return 1 + +def junkDealerPrice(): + + return 28 + +def junkType(): + + return 0 + diff --git a/scripts/loot/lootItems/junk/chassis_blueprint.py b/scripts/loot/lootItems/junk/chassis_blueprint.py new file mode 100644 index 00000000..2848f501 --- /dev/null +++ b/scripts/loot/lootItems/junk/chassis_blueprint.py @@ -0,0 +1,20 @@ + +def itemTemplate(): + + return ['object/tangible/loot/generic_usable/shared_chassis_blueprint_usuable.iff'] + +def customItemName(): + + return 'Chassis Blueprint' + +def stackable(): + + return 1 + +def junkDealerPrice(): + + return 21 + +def junkType(): + + return 0 \ No newline at end of file diff --git a/scripts/loot/lootItems/junk/comlink.py b/scripts/loot/lootItems/junk/comlink.py new file mode 100644 index 00000000..afc926dd --- /dev/null +++ b/scripts/loot/lootItems/junk/comlink.py @@ -0,0 +1,20 @@ + +def itemTemplate(): + + return ['object/tangible/loot/npc_loot/shared_comlink_civilian_generic.iff'] + +def customItemName(): + + return 'Comlink' + +def stackable(): + + return 1 + +def junkDealerPrice(): + + return 15 + +def junkType(): + + return 0 \ No newline at end of file diff --git a/scripts/loot/lootItems/junk/damaged_datapad.py b/scripts/loot/lootItems/junk/damaged_datapad.py new file mode 100644 index 00000000..8bb43fba --- /dev/null +++ b/scripts/loot/lootItems/junk/damaged_datapad.py @@ -0,0 +1,21 @@ + +def itemTemplate(): + + return ['object/tangible/loot/misc/shared_damaged_datapad.iff'] + +def customItemName(): + + return 'Damaged Datapad' + +def stackable(): + + return 1 + +def junkDealerPrice(): + + return 8 + +def junkType(): + + return 0 + diff --git a/scripts/loot/lootItems/junk/ear_jewel.py b/scripts/loot/lootItems/junk/ear_jewel.py new file mode 100644 index 00000000..6093adae --- /dev/null +++ b/scripts/loot/lootItems/junk/ear_jewel.py @@ -0,0 +1,8 @@ + +def itemTemplate(): + + return ['/object/tangible/loot/npc_loot/shared_jewelry_ear_s02.iff'] + +def customItemName(): + + return 'Ear jewel' \ No newline at end of file diff --git a/scripts/loot/lootItems/junk/explosive_dud.py b/scripts/loot/lootItems/junk/explosive_dud.py new file mode 100644 index 00000000..1fdcf7c3 --- /dev/null +++ b/scripts/loot/lootItems/junk/explosive_dud.py @@ -0,0 +1,20 @@ + +def itemTemplate(): + + return ['object/tangible/loot/npc_loot/shared_firework_generic.iff'] + +def customItemName(): + + return 'Explosive Dud' + +def stackable(): + + return 1 + +def junkDealerPrice(): + + return 10 + +def junkType(): + + return 0 diff --git a/scripts/loot/lootItems/junk/hyperdrive_unit.py b/scripts/loot/lootItems/junk/hyperdrive_unit.py new file mode 100644 index 00000000..8ce2372d --- /dev/null +++ b/scripts/loot/lootItems/junk/hyperdrive_unit.py @@ -0,0 +1,20 @@ + +def itemTemplate(): + + return ['object/tangible/loot/misc/shared_hyperdrive_part_s01.iff'] + +def customItemName(): + + return 'Hyperdrive Unit' + +def stackable(): + + return 1 + +def junkDealerPrice(): + + return 34 + +def junkType(): + + return 0 diff --git a/scripts/loot/lootItems/junk/id_chip.py b/scripts/loot/lootItems/junk/id_chip.py new file mode 100644 index 00000000..38cb1161 --- /dev/null +++ b/scripts/loot/lootItems/junk/id_chip.py @@ -0,0 +1,20 @@ + +def itemTemplate(): + + return ['object/tangible/loot/npc_loot/shared_id_chip_generic.iff'] + +def customItemName(): + + return 'ID Chip' + +def stackable(): + + return 1 + +def junkDealerPrice(): + + return 14 + +def junkType(): + + return 0 \ No newline at end of file diff --git a/scripts/loot/lootItems/junk/impulse_detector.py b/scripts/loot/lootItems/junk/impulse_detector.py new file mode 100644 index 00000000..6da7301b --- /dev/null +++ b/scripts/loot/lootItems/junk/impulse_detector.py @@ -0,0 +1,20 @@ + +def itemTemplate(): + + return ['object/tangible/loot/npc_loot/shared_impulse_detector_01_generic.iff'] + +def customItemName(): + + return 'Impulse Detector' + +def stackable(): + + return 1 + +def junkDealerPrice(): + + return 17 + +def junkType(): + + return 0 diff --git a/scripts/loot/lootItems/junk/laser_trap.py b/scripts/loot/lootItems/junk/laser_trap.py new file mode 100644 index 00000000..fd8840b9 --- /dev/null +++ b/scripts/loot/lootItems/junk/laser_trap.py @@ -0,0 +1,20 @@ + +def itemTemplate(): + + return ['object/tangible/loot/npc_loot/shared_laser_trap_generic.iff'] + +def customItemName(): + + return 'Laser Trap' + +def stackable(): + + return 1 + +def junkDealerPrice(): + + return 22 + +def junkType(): + + return 0 diff --git a/scripts/loot/lootItems/junk/launcher_tube.py b/scripts/loot/lootItems/junk/launcher_tube.py new file mode 100644 index 00000000..8f6d60a2 --- /dev/null +++ b/scripts/loot/lootItems/junk/launcher_tube.py @@ -0,0 +1,20 @@ + +def itemTemplate(): + + return ['object/tangible/loot/npc_loot/shared_launcher_tube_generic.iff'] + +def customItemName(): + + return 'Launcher Tube' + +def stackable(): + + return 1 + +def junkDealerPrice(): + + return 16 + +def junkType(): + + return 0 \ No newline at end of file diff --git a/scripts/loot/lootItems/junk/ledger.py b/scripts/loot/lootItems/junk/ledger.py new file mode 100644 index 00000000..ba93e09b --- /dev/null +++ b/scripts/loot/lootItems/junk/ledger.py @@ -0,0 +1,20 @@ + +def itemTemplate(): + + return ['object/tangible/loot/npc_loot/shared_ledger_generic.iff'] + +def customItemName(): + + return 'Ledger' + +def stackable(): + + return 1 + +def junkDealerPrice(): + + return 13 + +def junkType(): + + return 0 diff --git a/scripts/loot/lootItems/junk/magseal_detector.py b/scripts/loot/lootItems/junk/magseal_detector.py new file mode 100644 index 00000000..e98ebf36 --- /dev/null +++ b/scripts/loot/lootItems/junk/magseal_detector.py @@ -0,0 +1,20 @@ + +def itemTemplate(): + + return ['object/tangible/loot/npc_loot/shared_magseal_detector_generic.iff'] + +def customItemName(): + + return 'MagSeal Detector' + +def stackable(): + + return 1 + +def junkDealerPrice(): + + return 15 + +def junkType(): + + return 0 diff --git a/scripts/loot/lootItems/junk/medical_console.py b/scripts/loot/lootItems/junk/medical_console.py new file mode 100644 index 00000000..d393fe32 --- /dev/null +++ b/scripts/loot/lootItems/junk/medical_console.py @@ -0,0 +1,20 @@ + +def itemTemplate(): + + return ['object/tangible/loot/npc_loot/shared_medical_console_generic.iff'] + +def customItemName(): + + return 'Medical Console' + +def stackable(): + + return 1 + +def junkDealerPrice(): + + return 24 + +def junkType(): + + return 0 diff --git a/scripts/loot/lootItems/junk/medical_device.py b/scripts/loot/lootItems/junk/medical_device.py new file mode 100644 index 00000000..8511594b --- /dev/null +++ b/scripts/loot/lootItems/junk/medical_device.py @@ -0,0 +1,20 @@ + +def itemTemplate(): + + return ['object/tangible/loot/npc_loot/shared_medical_device_generic.iff'] + +def customItemName(): + + return 'Medical Device' + +def stackable(): + + return 1 + +def junkDealerPrice(): + + return 17 + +def junkType(): + + return 0 \ No newline at end of file diff --git a/scripts/loot/lootItems/junk/motor.py b/scripts/loot/lootItems/junk/motor.py new file mode 100644 index 00000000..0e72d464 --- /dev/null +++ b/scripts/loot/lootItems/junk/motor.py @@ -0,0 +1,20 @@ + +def itemTemplate(): + + return ['object/tangible/loot/npc_loot/shared_small_motor_generic.iff'] + +def customItemName(): + + return 'Motor' + +def stackable(): + + return 1 + +def junkDealerPrice(): + + return 13 + +def junkType(): + + return 0 diff --git a/scripts/loot/lootItems/junk/power_output_analyzer.py b/scripts/loot/lootItems/junk/power_output_analyzer.py new file mode 100644 index 00000000..16114969 --- /dev/null +++ b/scripts/loot/lootItems/junk/power_output_analyzer.py @@ -0,0 +1,20 @@ + +def itemTemplate(): + + return ['object/tangible/loot/npc_loot/shared_power_output_analyzer_generic.iff'] + +def customItemName(): + + return 'Power Output Analyzer' + +def stackable(): + + return 1 + +def junkDealerPrice(): + + return 21 + +def junkType(): + + return 0 diff --git a/scripts/loot/lootItems/junk/red_wiring.py b/scripts/loot/lootItems/junk/red_wiring.py new file mode 100644 index 00000000..fbefb228 --- /dev/null +++ b/scripts/loot/lootItems/junk/red_wiring.py @@ -0,0 +1,20 @@ + +def itemTemplate(): + + return ['object/tangible/loot/npc_loot/shared_red_wiring_generic.iff'] + +def customItemName(): + + return 'Red Wiring' + +def stackable(): + + return 1 + +def junkDealerPrice(): + + return 12 + +def junkType(): + + return 0 diff --git a/scripts/loot/lootItems/junk/shield_module.py b/scripts/loot/lootItems/junk/shield_module.py new file mode 100644 index 00000000..db0fb690 --- /dev/null +++ b/scripts/loot/lootItems/junk/shield_module.py @@ -0,0 +1,20 @@ + +def itemTemplate(): + + return ['object/tangible/loot/npc_loot/shared_shield_module_generic.iff'] + +def customItemName(): + + return 'Shield Module' + +def stackable(): + + return 1 + +def junkDealerPrice(): + + return 20 + +def junkType(): + + return 0 diff --git a/scripts/loot/lootItems/junk/software_module.py b/scripts/loot/lootItems/junk/software_module.py new file mode 100644 index 00000000..58cc91ef --- /dev/null +++ b/scripts/loot/lootItems/junk/software_module.py @@ -0,0 +1,20 @@ + +def itemTemplate(): + + return ['object/tangible/loot/npc_loot/shared_software_module_generic.iff'] + +def customItemName(): + + return 'Software Module' + +def stackable(): + + return 1 + +def junkDealerPrice(): + + return 12 + +def junkType(): + + return 0 diff --git a/scripts/loot/lootItems/junk/survival_gear.py b/scripts/loot/lootItems/junk/survival_gear.py new file mode 100644 index 00000000..efdaebfb --- /dev/null +++ b/scripts/loot/lootItems/junk/survival_gear.py @@ -0,0 +1,20 @@ + +def itemTemplate(): + + return ['object/tangible/loot/npc_loot/shared_survival_equipment_generic.iff'] + +def customItemName(): + + return 'Survival Gear' + +def stackable(): + + return 1 + +def junkDealerPrice(): + + return 11 + +def junkType(): + + return 0 diff --git a/scripts/loot/lootItems/junk/underpowered_survey_pad.py b/scripts/loot/lootItems/junk/underpowered_survey_pad.py new file mode 100644 index 00000000..27fac34c --- /dev/null +++ b/scripts/loot/lootItems/junk/underpowered_survey_pad.py @@ -0,0 +1,20 @@ + +def itemTemplate(): + + return ['object/tangible/loot/npc_loot/shared_survey_pad_adv_generic.iff'] + +def customItemName(): + + return 'Underpowered Survey Pad' + +def stackable(): + + return 1 + +def junkDealerPrice(): + + return 13 + +def junkType(): + + return 0 diff --git a/scripts/loot/lootItems/junk/unidentified_serum_vial.py b/scripts/loot/lootItems/junk/unidentified_serum_vial.py new file mode 100644 index 00000000..d9b5590e --- /dev/null +++ b/scripts/loot/lootItems/junk/unidentified_serum_vial.py @@ -0,0 +1,20 @@ + +def itemTemplate(): + + return ['object/tangible/loot/npc_loot/shared_serum_vial_generic.iff'] + +def customItemName(): + + return 'Unidentified Serum Vial' + +def stackable(): + + return 1 + +def junkDealerPrice(): + + return 14 + +def junkType(): + + return 0 diff --git a/scripts/loot/lootItems/junk/used_notebook.py b/scripts/loot/lootItems/junk/used_notebook.py new file mode 100644 index 00000000..6d117330 --- /dev/null +++ b/scripts/loot/lootItems/junk/used_notebook.py @@ -0,0 +1,20 @@ + +def itemTemplate(): + + return ['object/tangible/loot/npc_loot/shared_notebook_generic.iff'] + +def customItemName(): + + return 'Used Notebook' + +def stackable(): + + return 1 + +def junkDealerPrice(): + + return 12 + +def junkType(): + + return 0 diff --git a/scripts/loot/lootItems/junk/weak_droid_battery.py b/scripts/loot/lootItems/junk/weak_droid_battery.py new file mode 100644 index 00000000..8647f305 --- /dev/null +++ b/scripts/loot/lootItems/junk/weak_droid_battery.py @@ -0,0 +1,20 @@ + +def itemTemplate(): + + return ['object/tangible/loot/generic/shared_battery_useable_generic.iff'] + +def customItemName(): + + return 'Weak Droid Battery' + +def stackable(): + + return 1 + +def junkDealerPrice(): + + return 9 + +def junkType(): + + return 0 diff --git a/scripts/loot/lootItems/junk/worklight_generic.py b/scripts/loot/lootItems/junk/worklight_generic.py new file mode 100644 index 00000000..3b3bed9a --- /dev/null +++ b/scripts/loot/lootItems/junk/worklight_generic.py @@ -0,0 +1,20 @@ + +def itemTemplate(): + + return ['object/tangible/loot/npc_loot/shared_worklight_generic.iff'] + +def customItemName(): + + return 'Generic Worklight' + +def stackable(): + + return 1 + +def junkDealerPrice(): + + return 10 + +def junkType(): + + return 0 diff --git a/scripts/loot/lootItems/kraytpearl_ancient_flawless.py b/scripts/loot/lootItems/kraytpearl_ancient_flawless.py new file mode 100644 index 00000000..89e55d04 --- /dev/null +++ b/scripts/loot/lootItems/kraytpearl_ancient_flawless.py @@ -0,0 +1,8 @@ + +def itemTemplate(): + + return ['object/tangible/component/weapon/lightsaber/shared_lightsaber_module_krayt_dragon_pearl.iff'] + +def customItemName(): + + return '' diff --git a/scripts/loot/lootItems/kraytpearl_cracked.py b/scripts/loot/lootItems/kraytpearl_cracked.py new file mode 100644 index 00000000..89e55d04 --- /dev/null +++ b/scripts/loot/lootItems/kraytpearl_cracked.py @@ -0,0 +1,8 @@ + +def itemTemplate(): + + return ['object/tangible/component/weapon/lightsaber/shared_lightsaber_module_krayt_dragon_pearl.iff'] + +def customItemName(): + + return '' diff --git a/scripts/loot/lootItems/kraytpearl_fair.py b/scripts/loot/lootItems/kraytpearl_fair.py new file mode 100644 index 00000000..bf16c0ec --- /dev/null +++ b/scripts/loot/lootItems/kraytpearl_fair.py @@ -0,0 +1,12 @@ + +def itemTemplate(): + + return ['object/tangible/component/weapon/lightsaber/shared_lightsaber_module_krayt_dragon_pearl.iff'] + +def customItemName(): + + return '' + +def customItemName(): + + return '' diff --git a/scripts/loot/lootItems/kraytpearl_flawless.py b/scripts/loot/lootItems/kraytpearl_flawless.py new file mode 100644 index 00000000..89e55d04 --- /dev/null +++ b/scripts/loot/lootItems/kraytpearl_flawless.py @@ -0,0 +1,8 @@ + +def itemTemplate(): + + return ['object/tangible/component/weapon/lightsaber/shared_lightsaber_module_krayt_dragon_pearl.iff'] + +def customItemName(): + + return '' diff --git a/scripts/loot/lootItems/kraytpearl_good.py b/scripts/loot/lootItems/kraytpearl_good.py new file mode 100644 index 00000000..89e55d04 --- /dev/null +++ b/scripts/loot/lootItems/kraytpearl_good.py @@ -0,0 +1,8 @@ + +def itemTemplate(): + + return ['object/tangible/component/weapon/lightsaber/shared_lightsaber_module_krayt_dragon_pearl.iff'] + +def customItemName(): + + return '' diff --git a/scripts/loot/lootItems/kraytpearl_poor.py b/scripts/loot/lootItems/kraytpearl_poor.py new file mode 100644 index 00000000..89e55d04 --- /dev/null +++ b/scripts/loot/lootItems/kraytpearl_poor.py @@ -0,0 +1,8 @@ + +def itemTemplate(): + + return ['object/tangible/component/weapon/lightsaber/shared_lightsaber_module_krayt_dragon_pearl.iff'] + +def customItemName(): + + return '' diff --git a/scripts/loot/lootItems/kraytpearl_premium.py b/scripts/loot/lootItems/kraytpearl_premium.py new file mode 100644 index 00000000..89e55d04 --- /dev/null +++ b/scripts/loot/lootItems/kraytpearl_premium.py @@ -0,0 +1,8 @@ + +def itemTemplate(): + + return ['object/tangible/component/weapon/lightsaber/shared_lightsaber_module_krayt_dragon_pearl.iff'] + +def customItemName(): + + return '' diff --git a/scripts/loot/lootItems/kraytpearl_quality.py b/scripts/loot/lootItems/kraytpearl_quality.py new file mode 100644 index 00000000..89e55d04 --- /dev/null +++ b/scripts/loot/lootItems/kraytpearl_quality.py @@ -0,0 +1,8 @@ + +def itemTemplate(): + + return ['object/tangible/component/weapon/lightsaber/shared_lightsaber_module_krayt_dragon_pearl.iff'] + +def customItemName(): + + return '' diff --git a/scripts/loot/lootItems/kraytpearl_scratched.py b/scripts/loot/lootItems/kraytpearl_scratched.py new file mode 100644 index 00000000..89e55d04 --- /dev/null +++ b/scripts/loot/lootItems/kraytpearl_scratched.py @@ -0,0 +1,8 @@ + +def itemTemplate(): + + return ['object/tangible/component/weapon/lightsaber/shared_lightsaber_module_krayt_dragon_pearl.iff'] + +def customItemName(): + + return '' diff --git a/scripts/loot/lootItems/kraytpearl_select.py b/scripts/loot/lootItems/kraytpearl_select.py new file mode 100644 index 00000000..89e55d04 --- /dev/null +++ b/scripts/loot/lootItems/kraytpearl_select.py @@ -0,0 +1,8 @@ + +def itemTemplate(): + + return ['object/tangible/component/weapon/lightsaber/shared_lightsaber_module_krayt_dragon_pearl.iff'] + +def customItemName(): + + return '' diff --git a/scripts/loot/lootItems/legendarylootchest/biological_focus_crystal.py b/scripts/loot/lootItems/legendarylootchest/biological_focus_crystal.py new file mode 100644 index 00000000..f86494d1 --- /dev/null +++ b/scripts/loot/lootItems/legendarylootchest/biological_focus_crystal.py @@ -0,0 +1,29 @@ + +def itemTemplate(): + + return ['object/tangible/item/quest/force_sensitive/shared_fs_crystal_health.iff'] # needs correct iff still + +def customItemName(): + + return "Biological Focus Crystal" + +def requiredLevelForEffect(): + + return 80 + +def biolink(): + + return 1 + +def lootDescriptor(): + + return 'rarebuffitem' + +def itemStats(): + + stats =['proc_name','forceCrystalHealth','forceCrystalHealth'] + stats +=['effectname','Extended Constitution','Extended Constitution'] + stats +=['duration','10800','10800'] + stats +=['cooldown','86400','86400'] + + return stats diff --git a/scripts/loot/lootItems/legendarylootchest/concentrated_bacta_tank.py b/scripts/loot/lootItems/legendarylootchest/concentrated_bacta_tank.py new file mode 100644 index 00000000..e79e3e71 --- /dev/null +++ b/scripts/loot/lootItems/legendarylootchest/concentrated_bacta_tank.py @@ -0,0 +1,4 @@ + +def itemTemplate(): + + return ['object/static/item/shared_item_medic_bacta_tank_advanced.iff'] # needs correct iff still diff --git a/scripts/loot/lootItems/legendarylootchest/dna_storage_device_kowakian.py b/scripts/loot/lootItems/legendarylootchest/dna_storage_device_kowakian.py new file mode 100644 index 00000000..43ca2f4a --- /dev/null +++ b/scripts/loot/lootItems/legendarylootchest/dna_storage_device_kowakian.py @@ -0,0 +1,5 @@ + +def itemTemplate(): + + return ['object/tangible/item/beast/barn_lite/shared_beast_dna_storage_device.iff'] + diff --git a/scripts/loot/lootItems/legendarylootchest/dug_costume_instructions.py b/scripts/loot/lootItems/legendarylootchest/dug_costume_instructions.py new file mode 100644 index 00000000..72f76e42 --- /dev/null +++ b/scripts/loot/lootItems/legendarylootchest/dug_costume_instructions.py @@ -0,0 +1,4 @@ + +def itemTemplate(): + + return ['object/tangible/item/costume_kit/shared_costume_deed.iff'] # needs correct iff still diff --git a/scripts/loot/lootItems/legendarylootchest/mercenaries_despair.py b/scripts/loot/lootItems/legendarylootchest/mercenaries_despair.py new file mode 100644 index 00000000..edd13966 --- /dev/null +++ b/scripts/loot/lootItems/legendarylootchest/mercenaries_despair.py @@ -0,0 +1,8 @@ + +def itemTemplate(): + + return ['object/tangible/painting/shared_painting_zabrak_f.iff'] + +def STFparams(): + + return ['static_item_n','item_painting_zabrak_female','static_item_d','item_painting_zabrak_female'] diff --git a/scripts/loot/lootItems/legendarylootchest/mercenaries_lament.py b/scripts/loot/lootItems/legendarylootchest/mercenaries_lament.py new file mode 100644 index 00000000..b68db0ae --- /dev/null +++ b/scripts/loot/lootItems/legendarylootchest/mercenaries_lament.py @@ -0,0 +1,8 @@ + +def itemTemplate(): + + return ['object/tangible/painting/shared_painting_zabrak_m.iff'] + +def STFparams(): + + return ['static_item_n','item_painting_zabrak_male','static_item_d','item_painting_zabrak_male'] \ No newline at end of file diff --git a/scripts/loot/lootItems/legendarylootchest/nightsister_melee_armguard.py b/scripts/loot/lootItems/legendarylootchest/nightsister_melee_armguard.py new file mode 100644 index 00000000..7c8d6cf8 --- /dev/null +++ b/scripts/loot/lootItems/legendarylootchest/nightsister_melee_armguard.py @@ -0,0 +1,4 @@ + +def itemTemplate(): + + return ['object/tangible/wearables/armor/nightsister/shared_armor_nightsister_bicep_r_s01.iff'] # needs correct iff still diff --git a/scripts/loot/lootItems/legendarylootchest/rare_painting.py b/scripts/loot/lootItems/legendarylootchest/rare_painting.py new file mode 100644 index 00000000..25acee8a --- /dev/null +++ b/scripts/loot/lootItems/legendarylootchest/rare_painting.py @@ -0,0 +1,4 @@ + +def itemTemplate(): + + return ['object/tangible/painting/shared_bestine_quest_painting.iff'] diff --git a/scripts/loot/lootItems/legendarylootchest/sunriders_destiny.py b/scripts/loot/lootItems/legendarylootchest/sunriders_destiny.py new file mode 100644 index 00000000..b17aca6b --- /dev/null +++ b/scripts/loot/lootItems/legendarylootchest/sunriders_destiny.py @@ -0,0 +1,23 @@ + +def itemTemplate(): + + return ['object/tangible/component/weapon/lightsaber/shared_lightsaber_module_force_crystal.iff'] + +def customItemName(): + + return "Sunrider's Destiny" + +def customColor1(): + + return 29 + +def lootDescriptor(): + + return 'rarecolorcrystal' + +def itemStats(): + + stats = ['elemtype','heat','heat'] + stats +=['elemdamage','6','6'] + + return stats diff --git a/scripts/loot/lootItems/legendarylootchest/synapse_focus_crystal.py b/scripts/loot/lootItems/legendarylootchest/synapse_focus_crystal.py new file mode 100644 index 00000000..94e070ed --- /dev/null +++ b/scripts/loot/lootItems/legendarylootchest/synapse_focus_crystal.py @@ -0,0 +1,29 @@ + +def itemTemplate(): + + return ['object/tangible/item/quest/force_sensitive/shared_fs_crystal_force.iff'] # needs correct iff still + +def customItemName(): + + return "Synapse Focus Crystal" + +def requiredLevelForEffect(): + + return 80 + +def biolink(): + + return 1 + +def lootDescriptor(): + + return 'rarebuffitem' + +def itemStats(): + + stats =['proc_name','forceCrystalForce','forceCrystalForce'] + stats +=['effectname','Extended Action','Extended Action'] + stats +=['duration','10800','10800'] + stats +=['cooldown','86400','86400'] + + return stats diff --git a/scripts/loot/lootItems/powercrystal_fair.py b/scripts/loot/lootItems/powercrystal_fair.py new file mode 100644 index 00000000..46f1add7 --- /dev/null +++ b/scripts/loot/lootItems/powercrystal_fair.py @@ -0,0 +1,12 @@ + +def itemTemplate(): + + return ['object/tangible/component/weapon/lightsaber/shared_lightsaber_module_force_crystal.iff'] + +def customItemName(): + + return '' + +def customItemName(): + + return '' diff --git a/scripts/loot/lootItems/powercrystal_flawless.py b/scripts/loot/lootItems/powercrystal_flawless.py new file mode 100644 index 00000000..eadb333a --- /dev/null +++ b/scripts/loot/lootItems/powercrystal_flawless.py @@ -0,0 +1,8 @@ + +def itemTemplate(): + + return ['object/tangible/component/weapon/lightsaber/shared_lightsaber_module_force_crystal.iff'] + +def customItemName(): + + return '' diff --git a/scripts/loot/lootItems/powercrystal_good.py b/scripts/loot/lootItems/powercrystal_good.py new file mode 100644 index 00000000..eadb333a --- /dev/null +++ b/scripts/loot/lootItems/powercrystal_good.py @@ -0,0 +1,8 @@ + +def itemTemplate(): + + return ['object/tangible/component/weapon/lightsaber/shared_lightsaber_module_force_crystal.iff'] + +def customItemName(): + + return '' diff --git a/scripts/loot/lootItems/powercrystal_perfect.py b/scripts/loot/lootItems/powercrystal_perfect.py new file mode 100644 index 00000000..eadb333a --- /dev/null +++ b/scripts/loot/lootItems/powercrystal_perfect.py @@ -0,0 +1,8 @@ + +def itemTemplate(): + + return ['object/tangible/component/weapon/lightsaber/shared_lightsaber_module_force_crystal.iff'] + +def customItemName(): + + return '' diff --git a/scripts/loot/lootItems/powercrystal_poor.py b/scripts/loot/lootItems/powercrystal_poor.py new file mode 100644 index 00000000..eadb333a --- /dev/null +++ b/scripts/loot/lootItems/powercrystal_poor.py @@ -0,0 +1,8 @@ + +def itemTemplate(): + + return ['object/tangible/component/weapon/lightsaber/shared_lightsaber_module_force_crystal.iff'] + +def customItemName(): + + return '' diff --git a/scripts/loot/lootItems/powercrystal_premium.py b/scripts/loot/lootItems/powercrystal_premium.py new file mode 100644 index 00000000..eadb333a --- /dev/null +++ b/scripts/loot/lootItems/powercrystal_premium.py @@ -0,0 +1,8 @@ + +def itemTemplate(): + + return ['object/tangible/component/weapon/lightsaber/shared_lightsaber_module_force_crystal.iff'] + +def customItemName(): + + return '' diff --git a/scripts/loot/lootItems/powercrystal_quality.py b/scripts/loot/lootItems/powercrystal_quality.py new file mode 100644 index 00000000..eadb333a --- /dev/null +++ b/scripts/loot/lootItems/powercrystal_quality.py @@ -0,0 +1,8 @@ + +def itemTemplate(): + + return ['object/tangible/component/weapon/lightsaber/shared_lightsaber_module_force_crystal.iff'] + +def customItemName(): + + return '' diff --git a/scripts/loot/lootItems/powercrystal_select.py b/scripts/loot/lootItems/powercrystal_select.py new file mode 100644 index 00000000..eadb333a --- /dev/null +++ b/scripts/loot/lootItems/powercrystal_select.py @@ -0,0 +1,8 @@ + +def itemTemplate(): + + return ['object/tangible/component/weapon/lightsaber/shared_lightsaber_module_force_crystal.iff'] + +def customItemName(): + + return '' diff --git a/scripts/loot/lootItems/randomstatjewelry/random_stat_bracelet.py b/scripts/loot/lootItems/randomstatjewelry/random_stat_bracelet.py new file mode 100644 index 00000000..6576cc22 --- /dev/null +++ b/scripts/loot/lootItems/randomstatjewelry/random_stat_bracelet.py @@ -0,0 +1,12 @@ + +def itemTemplate(): + + bracelets = ['object/tangible/wearables/bracelet/shared_bracelet_s02_l.iff','object/tangible/wearables/bracelet/shared_bracelet_s02_r.iff'] + bracelets += ['object/tangible/wearables/bracelet/shared_bracelet_s03_l.iff','object/tangible/wearables/bracelet/shared_bracelet_s03_r.iff'] + bracelets += ['object/tangible/wearables/bracelet/shared_bracelet_s04_l.iff','object/tangible/wearables/bracelet/shared_bracelet_s04_r.iff'] + bracelets += ['object/tangible/wearables/bracelet/shared_bracelet_s05_l.iff','object/tangible/wearables/bracelet/shared_bracelet_s05_r.iff'] + bracelets += ['object/tangible/wearables/bracelet/shared_bracelet_s06_l.iff','object/tangible/wearables/bracelet/shared_bracelet_s06_r.iff'] + return bracelets + +def randomStatJewelry(): + return diff --git a/scripts/loot/lootItems/randomstatjewelry/random_stat_necklace.py b/scripts/loot/lootItems/randomstatjewelry/random_stat_necklace.py new file mode 100644 index 00000000..947af23a --- /dev/null +++ b/scripts/loot/lootItems/randomstatjewelry/random_stat_necklace.py @@ -0,0 +1,13 @@ + +def itemTemplate(): + + necklaces = ['object/tangible/wearables/necklace/shared_necklace_s01.iff','object/tangible/wearables/necklace/shared_necklace_s02.iff'] + necklaces += ['object/tangible/wearables/necklace/shared_necklace_s03.iff','object/tangible/wearables/necklace/shared_necklace_s04.iff'] + necklaces += ['object/tangible/wearables/necklace/shared_necklace_s05.iff','object/tangible/wearables/necklace/shared_necklace_s06.iff'] + necklaces += ['object/tangible/wearables/necklace/shared_necklace_s07.iff','object/tangible/wearables/necklace/shared_necklace_s08.iff'] + necklaces += ['object/tangible/wearables/necklace/shared_necklace_s09.iff','object/tangible/wearables/necklace/shared_necklace_s10.iff'] + necklaces += ['object/tangible/wearables/necklace/shared_necklace_s11.iff','object/tangible/wearables/necklace/shared_necklace_s12.iff'] + return necklaces + +def randomStatJewelry(): + return 1 diff --git a/scripts/loot/lootItems/randomstatjewelry/random_stat_ring.py b/scripts/loot/lootItems/randomstatjewelry/random_stat_ring.py new file mode 100644 index 00000000..8f7d669b --- /dev/null +++ b/scripts/loot/lootItems/randomstatjewelry/random_stat_ring.py @@ -0,0 +1,9 @@ + +def itemTemplate(): + + rings = ['object/tangible/wearables/ring/shared_ring_s01.iff','object/tangible/wearables/ring/shared_ring_s02.iff'] + rings += ['object/tangible/wearables/ring/shared_ring_s03.iff','object/tangible/wearables/ring/shared_ring_s04.iff'] + return rings + +def randomStatJewelry(): + return diff --git a/scripts/loot/lootItems/randomstatjewelry/randomstatjewelry.py b/scripts/loot/lootItems/randomstatjewelry/randomstatjewelry.py new file mode 100644 index 00000000..e69de29b diff --git a/scripts/loot/lootItems/rareloot/lava_geode.py b/scripts/loot/lootItems/rareloot/lava_geode.py new file mode 100644 index 00000000..610f4b8c --- /dev/null +++ b/scripts/loot/lootItems/rareloot/lava_geode.py @@ -0,0 +1,4 @@ + +def itemTemplate(): + + return ['object/tangible/loot/mustafar/shared_lava_geode.iff'] \ No newline at end of file diff --git a/scripts/loot/lootItems/rareloot/rarelootchest1.py b/scripts/loot/lootItems/rareloot/rarelootchest1.py new file mode 100644 index 00000000..1ba9ecc8 --- /dev/null +++ b/scripts/loot/lootItems/rareloot/rarelootchest1.py @@ -0,0 +1,8 @@ + +def itemTemplate(): + + return ['object/tangible/loot/mustafar/shared_rare_loot_chest_3.iff'] + +def customItemName(): + + return '' diff --git a/scripts/loot/lootItems/rareloot/rarelootchest2.py b/scripts/loot/lootItems/rareloot/rarelootchest2.py new file mode 100644 index 00000000..a7568822 --- /dev/null +++ b/scripts/loot/lootItems/rareloot/rarelootchest2.py @@ -0,0 +1,8 @@ + +def itemTemplate(): + + return ['object/tangible/item/shared_rare_loot_chest_3.iff'] + +def customItemName(): + + return '' diff --git a/scripts/loot/lootItems/rarelootchest/animal_hide_rack_style_1.py b/scripts/loot/lootItems/rarelootchest/animal_hide_rack_style_1.py new file mode 100644 index 00000000..26f9ce06 --- /dev/null +++ b/scripts/loot/lootItems/rarelootchest/animal_hide_rack_style_1.py @@ -0,0 +1,7 @@ + +def itemTemplate(): + # Doesn't work because of https://github.com/projectswg/engine/blob/master/src/engine/resources/objects/Baseline.java#L446 + #return ['object/draft_schematic/furniture/shared_furniture_hide_rack_s01.iff'] + # just returning a dummy template for now + return ['object/tangible/bug_jar/shared_craftable_bug_habitat.iff'] + diff --git a/scripts/loot/lootItems/rarelootchest/animal_hide_rack_style_2.py b/scripts/loot/lootItems/rarelootchest/animal_hide_rack_style_2.py new file mode 100644 index 00000000..7e5d20d4 --- /dev/null +++ b/scripts/loot/lootItems/rarelootchest/animal_hide_rack_style_2.py @@ -0,0 +1,7 @@ + +def itemTemplate(): + # Doesn't work because of https://github.com/projectswg/engine/blob/master/src/engine/resources/objects/Baseline.java#L446 + #return ['object/draft_schematic/furniture/shared_furniture_hide_rack_s02.iff'] + # just returning a dummy template for now + return ['object/tangible/bug_jar/shared_craftable_bug_habitat.iff'] + diff --git a/scripts/loot/lootItems/rarelootchest/animal_hide_rack_style_3.py b/scripts/loot/lootItems/rarelootchest/animal_hide_rack_style_3.py new file mode 100644 index 00000000..31df3dc8 --- /dev/null +++ b/scripts/loot/lootItems/rarelootchest/animal_hide_rack_style_3.py @@ -0,0 +1,7 @@ + +def itemTemplate(): + # Doesn't work because of https://github.com/projectswg/engine/blob/master/src/engine/resources/objects/Baseline.java#L446 + #return ['object/draft_schematic/furniture/shared_furniture_hide_rack_s03.iff'] + # just returning a dummy template for now + return ['object/tangible/bug_jar/shared_craftable_bug_habitat.iff'] + diff --git a/scripts/loot/lootItems/rarelootchest/animal_hide_rack_style_4.py b/scripts/loot/lootItems/rarelootchest/animal_hide_rack_style_4.py new file mode 100644 index 00000000..d2a90a57 --- /dev/null +++ b/scripts/loot/lootItems/rarelootchest/animal_hide_rack_style_4.py @@ -0,0 +1,7 @@ + +def itemTemplate(): + # Doesn't work because of https://github.com/projectswg/engine/blob/master/src/engine/resources/objects/Baseline.java#L446 + #return ['object/draft_schematic/furniture/shared_furniture_hide_rack_s04.iff'] + # just returning a dummy template for now + return ['object/tangible/bug_jar/shared_craftable_bug_habitat.iff'] + diff --git a/scripts/loot/lootItems/rarelootchest/at_st_pilots_helmet.py b/scripts/loot/lootItems/rarelootchest/at_st_pilots_helmet.py new file mode 100644 index 00000000..511decc6 --- /dev/null +++ b/scripts/loot/lootItems/rarelootchest/at_st_pilots_helmet.py @@ -0,0 +1,7 @@ + +def itemTemplate(): + + return ['object/tangible/mission/quest_item/shared_bren_kingal_q4_needed.iff'] + +#def customItemName(): + diff --git a/scripts/loot/lootItems/rarelootchest/aurilian_sculpture_section_1.py b/scripts/loot/lootItems/rarelootchest/aurilian_sculpture_section_1.py new file mode 100644 index 00000000..04cbdebb --- /dev/null +++ b/scripts/loot/lootItems/rarelootchest/aurilian_sculpture_section_1.py @@ -0,0 +1,4 @@ + +def itemTemplate(): + + return ['object/tangible/item/quest/force_sensitive/shared_fs_sculpture_1.iff'] # needs verification diff --git a/scripts/loot/lootItems/rarelootchest/aurilian_sculpture_section_2.py b/scripts/loot/lootItems/rarelootchest/aurilian_sculpture_section_2.py new file mode 100644 index 00000000..1830c89e --- /dev/null +++ b/scripts/loot/lootItems/rarelootchest/aurilian_sculpture_section_2.py @@ -0,0 +1,4 @@ + +def itemTemplate(): + + return ['object/tangible/item/quest/force_sensitive/shared_fs_sculpture_2.iff'] # needs verification diff --git a/scripts/loot/lootItems/rarelootchest/aurilian_sculpture_section_3.py b/scripts/loot/lootItems/rarelootchest/aurilian_sculpture_section_3.py new file mode 100644 index 00000000..76ece5d6 --- /dev/null +++ b/scripts/loot/lootItems/rarelootchest/aurilian_sculpture_section_3.py @@ -0,0 +1,4 @@ + +def itemTemplate(): + + return ['object/tangible/item/quest/force_sensitive/shared_fs_sculpture_3.iff'] # needs verification diff --git a/scripts/loot/lootItems/rarelootchest/aurilian_sculpture_section_4.py b/scripts/loot/lootItems/rarelootchest/aurilian_sculpture_section_4.py new file mode 100644 index 00000000..f96fb1db --- /dev/null +++ b/scripts/loot/lootItems/rarelootchest/aurilian_sculpture_section_4.py @@ -0,0 +1,4 @@ + +def itemTemplate(): + + return ['object/tangible/item/quest/force_sensitive/shared_fs_sculpture_4.iff'] # needs verification diff --git a/scripts/loot/lootItems/rarelootchest/banes_heart.py b/scripts/loot/lootItems/rarelootchest/banes_heart.py new file mode 100644 index 00000000..e7a0db2b --- /dev/null +++ b/scripts/loot/lootItems/rarelootchest/banes_heart.py @@ -0,0 +1,23 @@ + +def itemTemplate(): + + return ['object/tangible/component/weapon/lightsaber/shared_lightsaber_module_force_crystal.iff'] + +def customItemName(): + + return "Bane's Heart" + +def customColor1(): + + return 16 + +def lootDescriptor(): + + return 'rarecolorcrystal' + +def itemStats(): + + stats = ['elemtype','electricity','electricity'] + stats +=['elemdamage','5','5'] + + return stats diff --git a/scripts/loot/lootItems/rarelootchest/bar_corner_piece_1.py b/scripts/loot/lootItems/rarelootchest/bar_corner_piece_1.py new file mode 100644 index 00000000..2a8d9aca --- /dev/null +++ b/scripts/loot/lootItems/rarelootchest/bar_corner_piece_1.py @@ -0,0 +1,4 @@ + +def itemTemplate(): + + return ['object/draft_schematic/furniture/shared_furniture_diner_counter_corner.iff'] # needs verification diff --git a/scripts/loot/lootItems/rarelootchest/bar_corner_piece_2.py b/scripts/loot/lootItems/rarelootchest/bar_corner_piece_2.py new file mode 100644 index 00000000..2a8d9aca --- /dev/null +++ b/scripts/loot/lootItems/rarelootchest/bar_corner_piece_2.py @@ -0,0 +1,4 @@ + +def itemTemplate(): + + return ['object/draft_schematic/furniture/shared_furniture_diner_counter_corner.iff'] # needs verification diff --git a/scripts/loot/lootItems/rarelootchest/bar_corner_piece_3.py b/scripts/loot/lootItems/rarelootchest/bar_corner_piece_3.py new file mode 100644 index 00000000..2a8d9aca --- /dev/null +++ b/scripts/loot/lootItems/rarelootchest/bar_corner_piece_3.py @@ -0,0 +1,4 @@ + +def itemTemplate(): + + return ['object/draft_schematic/furniture/shared_furniture_diner_counter_corner.iff'] # needs verification diff --git a/scripts/loot/lootItems/rarelootchest/bar_counter_large.py b/scripts/loot/lootItems/rarelootchest/bar_counter_large.py new file mode 100644 index 00000000..2a8d9aca --- /dev/null +++ b/scripts/loot/lootItems/rarelootchest/bar_counter_large.py @@ -0,0 +1,4 @@ + +def itemTemplate(): + + return ['object/draft_schematic/furniture/shared_furniture_diner_counter_corner.iff'] # needs verification diff --git a/scripts/loot/lootItems/rarelootchest/bothan_beauty.py b/scripts/loot/lootItems/rarelootchest/bothan_beauty.py new file mode 100644 index 00000000..5815f08e --- /dev/null +++ b/scripts/loot/lootItems/rarelootchest/bothan_beauty.py @@ -0,0 +1,4 @@ + +def itemTemplate(): + + return ['object/tangible/painting/shared_painting_bothan_f.iff'] diff --git a/scripts/loot/lootItems/rarelootchest/bothan_buff.py b/scripts/loot/lootItems/rarelootchest/bothan_buff.py new file mode 100644 index 00000000..5440f81e --- /dev/null +++ b/scripts/loot/lootItems/rarelootchest/bothan_buff.py @@ -0,0 +1,4 @@ + +def itemTemplate(): + + return ['object/tangible/painting/shared_painting_bothan_m.iff'] \ No newline at end of file diff --git a/scripts/loot/lootItems/rarelootchest/cast_wing_in_flight.py b/scripts/loot/lootItems/rarelootchest/cast_wing_in_flight.py new file mode 100644 index 00000000..ea714d38 --- /dev/null +++ b/scripts/loot/lootItems/rarelootchest/cast_wing_in_flight.py @@ -0,0 +1,4 @@ + +def itemTemplate(): + + return ['object/tangible/veteran_reward/one_year_anniversary/shared_painting_01.iff'] diff --git a/scripts/loot/lootItems/rarelootchest/corellian_seaside.py b/scripts/loot/lootItems/rarelootchest/corellian_seaside.py new file mode 100644 index 00000000..45db7bc5 --- /dev/null +++ b/scripts/loot/lootItems/rarelootchest/corellian_seaside.py @@ -0,0 +1,8 @@ + +def itemTemplate(): + + return ['object/tangible/painting/shared_painting_corl_02.iff'] + +def STFparams(): + + return ['static_item_n','item_painting_corl_02','static_item_d','item_painting_corl_02'] \ No newline at end of file diff --git a/scripts/loot/lootItems/rarelootchest/data_disk_hologram.py b/scripts/loot/lootItems/rarelootchest/data_disk_hologram.py new file mode 100644 index 00000000..0a34621e --- /dev/null +++ b/scripts/loot/lootItems/rarelootchest/data_disk_hologram.py @@ -0,0 +1,4 @@ + +def itemTemplate(): + + return ['object/tangible/furniture/decorative/shared_frn_hologram_data_disk_s01.iff'] # needs verification diff --git a/scripts/loot/lootItems/rarelootchest/decorative_bubble_tank.py b/scripts/loot/lootItems/rarelootchest/decorative_bubble_tank.py new file mode 100644 index 00000000..a308bef3 --- /dev/null +++ b/scripts/loot/lootItems/rarelootchest/decorative_bubble_tank.py @@ -0,0 +1,4 @@ + +def itemTemplate(): + + return ['object/tangible/loot/loot_schematic/shared_bubble_tank_schematic.iff'] # needs visual verification diff --git a/scripts/loot/lootItems/rarelootchest/droid_in_contrast.py b/scripts/loot/lootItems/rarelootchest/droid_in_contrast.py new file mode 100644 index 00000000..4aa8ca91 --- /dev/null +++ b/scripts/loot/lootItems/rarelootchest/droid_in_contrast.py @@ -0,0 +1,4 @@ + +def itemTemplate(): + + return ['object/tangible/painting/shared_painting_droid_bright.iff'] \ No newline at end of file diff --git a/scripts/loot/lootItems/rarelootchest/drum.py b/scripts/loot/lootItems/rarelootchest/drum.py new file mode 100644 index 00000000..d4120e07 --- /dev/null +++ b/scripts/loot/lootItems/rarelootchest/drum.py @@ -0,0 +1,4 @@ + +def itemTemplate(): + + return ['object/tangible/container/drum/shared_warren_drum_loot.iff'] # needs correct iff still diff --git a/scripts/loot/lootItems/rarelootchest/emperors_eyes.py b/scripts/loot/lootItems/rarelootchest/emperors_eyes.py new file mode 100644 index 00000000..c3e9ef7d --- /dev/null +++ b/scripts/loot/lootItems/rarelootchest/emperors_eyes.py @@ -0,0 +1,4 @@ + +def itemTemplate(): + + return ['object/tangible/veteran_reward/one_year_anniversary/shared_painting_09.iff'] \ No newline at end of file diff --git a/scripts/loot/lootItems/rarelootchest/family_bonds.py b/scripts/loot/lootItems/rarelootchest/family_bonds.py new file mode 100644 index 00000000..decc3afa --- /dev/null +++ b/scripts/loot/lootItems/rarelootchest/family_bonds.py @@ -0,0 +1,8 @@ + +def itemTemplate(): + + return ['object/tangible/event_perk/shared_lifeday_painting.iff'] + +def STFparams(): + + return ['static_item_n','item_event_lifeday_family_painting','static_item_d','item_event_lifeday_family_painting'] diff --git a/scripts/loot/lootItems/rarelootchest/feared.py b/scripts/loot/lootItems/rarelootchest/feared.py new file mode 100644 index 00000000..c6302766 --- /dev/null +++ b/scripts/loot/lootItems/rarelootchest/feared.py @@ -0,0 +1,4 @@ + +def itemTemplate(): + + return ['object/tangible/painting/shared_painting_rodian_f.iff'] \ No newline at end of file diff --git a/scripts/loot/lootItems/rarelootchest/fighter_study.py b/scripts/loot/lootItems/rarelootchest/fighter_study.py new file mode 100644 index 00000000..9da55486 --- /dev/null +++ b/scripts/loot/lootItems/rarelootchest/fighter_study.py @@ -0,0 +1,4 @@ + +def itemTemplate(): + + return ['object/tangible/veteran_reward/one_year_anniversary/shared_painting_05.iff'] \ No newline at end of file diff --git a/scripts/loot/lootItems/rarelootchest/fighters_courage.py b/scripts/loot/lootItems/rarelootchest/fighters_courage.py new file mode 100644 index 00000000..b5e6aa5a --- /dev/null +++ b/scripts/loot/lootItems/rarelootchest/fighters_courage.py @@ -0,0 +1,4 @@ + +def itemTemplate(): + + return ['object/tangible/painting/shared_painting_trandoshan_m_01.iff'] \ No newline at end of file diff --git a/scripts/loot/lootItems/rarelootchest/geonosian_costume_instructions.py b/scripts/loot/lootItems/rarelootchest/geonosian_costume_instructions.py new file mode 100644 index 00000000..72f76e42 --- /dev/null +++ b/scripts/loot/lootItems/rarelootchest/geonosian_costume_instructions.py @@ -0,0 +1,4 @@ + +def itemTemplate(): + + return ['object/tangible/item/costume_kit/shared_costume_deed.iff'] # needs correct iff still diff --git a/scripts/loot/lootItems/rarelootchest/hanging_life_day_orb.py b/scripts/loot/lootItems/rarelootchest/hanging_life_day_orb.py new file mode 100644 index 00000000..24ff425b --- /dev/null +++ b/scripts/loot/lootItems/rarelootchest/hanging_life_day_orb.py @@ -0,0 +1,4 @@ + +def itemTemplate(): + + return ['object/tangible/furniture/decorative/shared_event_lifeday07_orb.iff'] # needs verification diff --git a/scripts/loot/lootItems/rarelootchest/hutt_greed.py b/scripts/loot/lootItems/rarelootchest/hutt_greed.py new file mode 100644 index 00000000..59f420ae --- /dev/null +++ b/scripts/loot/lootItems/rarelootchest/hutt_greed.py @@ -0,0 +1,4 @@ + +def itemTemplate(): + + return ['object/tangible/veteran_reward/one_year_anniversary/shared_painting_06.iff'] \ No newline at end of file diff --git a/scripts/loot/lootItems/rarelootchest/imperial_oppression.py b/scripts/loot/lootItems/rarelootchest/imperial_oppression.py new file mode 100644 index 00000000..137fd83a --- /dev/null +++ b/scripts/loot/lootItems/rarelootchest/imperial_oppression.py @@ -0,0 +1,4 @@ + +def itemTemplate(): + + return ['object/tangible/veteran_reward/one_year_anniversary/shared_painting_08.iff'] \ No newline at end of file diff --git a/scripts/loot/lootItems/rarelootchest/jedi_statue_schematic.py b/scripts/loot/lootItems/rarelootchest/jedi_statue_schematic.py new file mode 100644 index 00000000..0e8ba392 --- /dev/null +++ b/scripts/loot/lootItems/rarelootchest/jedi_statue_schematic.py @@ -0,0 +1,4 @@ + +def itemTemplate(): + + return ['object/draft_schematic/furniture/shared_must_furniture_jedi_statue.iff'] # needs verification diff --git a/scripts/loot/lootItems/rarelootchest/jubilee_wheel_schematic.py b/scripts/loot/lootItems/rarelootchest/jubilee_wheel_schematic.py new file mode 100644 index 00000000..596fcbdd --- /dev/null +++ b/scripts/loot/lootItems/rarelootchest/jubilee_wheel_schematic.py @@ -0,0 +1,4 @@ + +def itemTemplate(): + + return ['object/tangible/furniture/decorative/object/shared_hoverlifter_speeder_crafted.iff'] # needs correct iff still diff --git a/scripts/loot/lootItems/rarelootchest/kachirho_wall_cornucopia.py b/scripts/loot/lootItems/rarelootchest/kachirho_wall_cornucopia.py new file mode 100644 index 00000000..85a71191 --- /dev/null +++ b/scripts/loot/lootItems/rarelootchest/kachirho_wall_cornucopia.py @@ -0,0 +1,4 @@ + +def itemTemplate(): + + return ['object/tangible/item/ep3/shared_poi_kash_mystic_tree_healthy.iff'] # needs correct iff still diff --git a/scripts/loot/lootItems/rarelootchest/kowakian_cage.py b/scripts/loot/lootItems/rarelootchest/kowakian_cage.py new file mode 100644 index 00000000..810362f8 --- /dev/null +++ b/scripts/loot/lootItems/rarelootchest/kowakian_cage.py @@ -0,0 +1,4 @@ + +def itemTemplate(): + + return ['object/tangible/event_perk/shared_lifeday_monkey_cage.iff'] # needs correct iff still diff --git a/scripts/loot/lootItems/rarelootchest/krayt_costume_instructions.py b/scripts/loot/lootItems/rarelootchest/krayt_costume_instructions.py new file mode 100644 index 00000000..72f76e42 --- /dev/null +++ b/scripts/loot/lootItems/rarelootchest/krayt_costume_instructions.py @@ -0,0 +1,4 @@ + +def itemTemplate(): + + return ['object/tangible/item/costume_kit/shared_costume_deed.iff'] # needs correct iff still diff --git a/scripts/loot/lootItems/rarelootchest/large_fruit_stand_schematic.py b/scripts/loot/lootItems/rarelootchest/large_fruit_stand_schematic.py new file mode 100644 index 00000000..9f57dba9 --- /dev/null +++ b/scripts/loot/lootItems/rarelootchest/large_fruit_stand_schematic.py @@ -0,0 +1,4 @@ + +def itemTemplate(): + + return ['object/tangible/event_perk/shared_fruit_stand.iff'] # needs correct iff still diff --git a/scripts/loot/lootItems/rarelootchest/large_unmarked_crate.py b/scripts/loot/lootItems/rarelootchest/large_unmarked_crate.py new file mode 100644 index 00000000..6393f2b9 --- /dev/null +++ b/scripts/loot/lootItems/rarelootchest/large_unmarked_crate.py @@ -0,0 +1,4 @@ + +def itemTemplate(): + + return ['object/tangible/container/drum/shared_large_plain_crate_s01.iff'] # needs correct iff still diff --git a/scripts/loot/lootItems/rarelootchest/lava_geode.py b/scripts/loot/lootItems/rarelootchest/lava_geode.py new file mode 100644 index 00000000..610f4b8c --- /dev/null +++ b/scripts/loot/lootItems/rarelootchest/lava_geode.py @@ -0,0 +1,4 @@ + +def itemTemplate(): + + return ['object/tangible/loot/mustafar/shared_lava_geode.iff'] \ No newline at end of file diff --git a/scripts/loot/lootItems/rarelootchest/life_day_lamp.py b/scripts/loot/lootItems/rarelootchest/life_day_lamp.py new file mode 100644 index 00000000..37616eb5 --- /dev/null +++ b/scripts/loot/lootItems/rarelootchest/life_day_lamp.py @@ -0,0 +1,4 @@ + +def itemTemplate(): + + return ['object/tangible/furniture/decorative/shared_event_lifeday07_lamp.iff'] # needs correct iff still diff --git a/scripts/loot/lootItems/rarelootchest/life_day_proud_wookie.py b/scripts/loot/lootItems/rarelootchest/life_day_proud_wookie.py new file mode 100644 index 00000000..3b214b84 --- /dev/null +++ b/scripts/loot/lootItems/rarelootchest/life_day_proud_wookie.py @@ -0,0 +1,8 @@ + +def itemTemplate(): + + return ['object/tangible/furniture/lifeday/shared_lifeday_painting_s03.iff'] + +def customItemName(): + + return 'Proud Wookiee' \ No newline at end of file diff --git a/scripts/loot/lootItems/rarelootchest/life_day_red_robed_wookie.py b/scripts/loot/lootItems/rarelootchest/life_day_red_robed_wookie.py new file mode 100644 index 00000000..240ff07b --- /dev/null +++ b/scripts/loot/lootItems/rarelootchest/life_day_red_robed_wookie.py @@ -0,0 +1,4 @@ + +def itemTemplate(): + + return ['object/tangible/furniture/lifeday/shared_lifeday_painting_s01.iff'] diff --git a/scripts/loot/lootItems/rarelootchest/living_canals.py b/scripts/loot/lootItems/rarelootchest/living_canals.py new file mode 100644 index 00000000..b2cc46e2 --- /dev/null +++ b/scripts/loot/lootItems/rarelootchest/living_canals.py @@ -0,0 +1,8 @@ + +def itemTemplate(): + + return ['object/tangible/loot/mustafar/shared_must_painting_04.iff'] + +def STFparams(): + + return ['static_item_n','item_tow_decor_painting_02_04','static_item_d','item_tow_decor_painting_02_04'] diff --git a/scripts/loot/lootItems/rarelootchest/lugjack_machine_schematic.py b/scripts/loot/lootItems/rarelootchest/lugjack_machine_schematic.py new file mode 100644 index 00000000..7715cf97 --- /dev/null +++ b/scripts/loot/lootItems/rarelootchest/lugjack_machine_schematic.py @@ -0,0 +1,4 @@ + +def itemTemplate(): + + return ['object/draft_schematic/furniture/shared_furniture_uber_lugjack.iff'] # needs correct iff still diff --git a/scripts/loot/lootItems/rarelootchest/miniature_wroshyr_tree.py b/scripts/loot/lootItems/rarelootchest/miniature_wroshyr_tree.py new file mode 100644 index 00000000..85a71191 --- /dev/null +++ b/scripts/loot/lootItems/rarelootchest/miniature_wroshyr_tree.py @@ -0,0 +1,4 @@ + +def itemTemplate(): + + return ['object/tangible/item/ep3/shared_poi_kash_mystic_tree_healthy.iff'] # needs correct iff still diff --git a/scripts/loot/lootItems/rarelootchest/modified_fusion_reactor_schematic.py b/scripts/loot/lootItems/rarelootchest/modified_fusion_reactor_schematic.py new file mode 100644 index 00000000..b1bcf947 --- /dev/null +++ b/scripts/loot/lootItems/rarelootchest/modified_fusion_reactor_schematic.py @@ -0,0 +1,4 @@ + +def itemTemplate(): + + return ['object/tangible/deed/generator_deed/shared_generator_fusion_deed.iff'] # needs correct iff still diff --git a/scripts/loot/lootItems/rarelootchest/mustafarian_injector.py b/scripts/loot/lootItems/rarelootchest/mustafarian_injector.py new file mode 100644 index 00000000..0fa3f8b7 --- /dev/null +++ b/scripts/loot/lootItems/rarelootchest/mustafarian_injector.py @@ -0,0 +1,4 @@ + +def itemTemplate(): + + return ['object/tangible/loot/mustafar/shared_old_republic_tech_02.iff'] diff --git a/scripts/loot/lootItems/rarelootchest/mynock_costume_instructions.py b/scripts/loot/lootItems/rarelootchest/mynock_costume_instructions.py new file mode 100644 index 00000000..72f76e42 --- /dev/null +++ b/scripts/loot/lootItems/rarelootchest/mynock_costume_instructions.py @@ -0,0 +1,4 @@ + +def itemTemplate(): + + return ['object/tangible/item/costume_kit/shared_costume_deed.iff'] # needs correct iff still diff --git a/scripts/loot/lootItems/rarelootchest/no_division.py b/scripts/loot/lootItems/rarelootchest/no_division.py new file mode 100644 index 00000000..14f78f28 --- /dev/null +++ b/scripts/loot/lootItems/rarelootchest/no_division.py @@ -0,0 +1,4 @@ + +def itemTemplate(): + + return ['object/tangible/painting/shared_painting_bw_stormtrooper.iff'] \ No newline at end of file diff --git a/scripts/loot/lootItems/rarelootchest/nym_collectible_globe.py b/scripts/loot/lootItems/rarelootchest/nym_collectible_globe.py new file mode 100644 index 00000000..eb1c8d23 --- /dev/null +++ b/scripts/loot/lootItems/rarelootchest/nym_collectible_globe.py @@ -0,0 +1,4 @@ + +def itemTemplate(): + + return ['object/static/worldbuilding/terminal/shared_floor_console_tableglobe_01.iff'] # needs correct iff still diff --git a/scripts/loot/lootItems/rarelootchest/pilgrimage.py b/scripts/loot/lootItems/rarelootchest/pilgrimage.py new file mode 100644 index 00000000..b2360137 --- /dev/null +++ b/scripts/loot/lootItems/rarelootchest/pilgrimage.py @@ -0,0 +1,4 @@ + +def itemTemplate(): + + return ['object/tangible/furniture/decorative/shared_event_lifeday05_painting_01.iff'] diff --git a/scripts/loot/lootItems/rarelootchest/poster_of_a_ship_schematic.py b/scripts/loot/lootItems/rarelootchest/poster_of_a_ship_schematic.py new file mode 100644 index 00000000..9913adfe --- /dev/null +++ b/scripts/loot/lootItems/rarelootchest/poster_of_a_ship_schematic.py @@ -0,0 +1,4 @@ + +def itemTemplate(): + + return ['object/tangible/painting/shared_painting_schematic_transport_ship.iff'] \ No newline at end of file diff --git a/scripts/loot/lootItems/rarelootchest/poster_of_a_turret_schematic.py b/scripts/loot/lootItems/rarelootchest/poster_of_a_turret_schematic.py new file mode 100644 index 00000000..fe51f7bb --- /dev/null +++ b/scripts/loot/lootItems/rarelootchest/poster_of_a_turret_schematic.py @@ -0,0 +1,4 @@ + +def itemTemplate(): + + return ['object/tangible/painting/shared_painting_schematic_weapon.iff'] \ No newline at end of file diff --git a/scripts/loot/lootItems/rarelootchest/poster_of_food_preparation.py b/scripts/loot/lootItems/rarelootchest/poster_of_food_preparation.py new file mode 100644 index 00000000..413ec8cc --- /dev/null +++ b/scripts/loot/lootItems/rarelootchest/poster_of_food_preparation.py @@ -0,0 +1,5 @@ + +def itemTemplate(): + + return ['object/tangible/painting/shared_painting_food_baking_s01.iff'] + #return ['object/tangible/painting/shared_painting_food_baking_s02.iff'] \ No newline at end of file diff --git a/scripts/loot/lootItems/rarelootchest/proton_chair.py b/scripts/loot/lootItems/rarelootchest/proton_chair.py new file mode 100644 index 00000000..94bd8336 --- /dev/null +++ b/scripts/loot/lootItems/rarelootchest/proton_chair.py @@ -0,0 +1,4 @@ + +def itemTemplate(): + + return ['object/tangible/furniture/lifeday/shared_lifeday_proton_chair.iff'] diff --git a/scripts/loot/lootItems/rarelootchest/rancor_costume_instructions.py b/scripts/loot/lootItems/rarelootchest/rancor_costume_instructions.py new file mode 100644 index 00000000..72f76e42 --- /dev/null +++ b/scripts/loot/lootItems/rarelootchest/rancor_costume_instructions.py @@ -0,0 +1,4 @@ + +def itemTemplate(): + + return ['object/tangible/item/costume_kit/shared_costume_deed.iff'] # needs correct iff still diff --git a/scripts/loot/lootItems/rarelootchest/rotj_helmet.py b/scripts/loot/lootItems/rarelootchest/rotj_helmet.py new file mode 100644 index 00000000..acc54422 --- /dev/null +++ b/scripts/loot/lootItems/rarelootchest/rotj_helmet.py @@ -0,0 +1,4 @@ + +def itemTemplate(): + + return ['object/tangible/quest/rebel/shared_rtp_leia_rebel_helmet.iff'] # needs correct iff still diff --git a/scripts/loot/lootItems/rarelootchest/shard_of_the_serpent.py b/scripts/loot/lootItems/rarelootchest/shard_of_the_serpent.py new file mode 100644 index 00000000..08728ddc --- /dev/null +++ b/scripts/loot/lootItems/rarelootchest/shard_of_the_serpent.py @@ -0,0 +1,29 @@ + +def itemTemplate(): + + return ['object/tangible/component/weapon/lightsaber/shared_lightsaber_module_force_crystal.iff'] + +def customItemName(): + + return "Shard Of The Serpent" + +def biolink(): + + return 1 + +def customColor1(): + + return 3 + +def lootDescriptor(): + + return 'rarebuffitem' + +def itemStats(): + + stats =['proc_name','towCrystalUberCombat','towCrystalUberCombat'] + stats +=['effectname','Harmonious Counteraction','Harmonious Counteraction'] + stats +=['duration','180','180'] + stats +=['cooldown','3600','3600'] + + return stats \ No newline at end of file diff --git a/scripts/loot/lootItems/rarelootchest/stap1_vehicle_deed.py b/scripts/loot/lootItems/rarelootchest/stap1_vehicle_deed.py new file mode 100644 index 00000000..cd731aec --- /dev/null +++ b/scripts/loot/lootItems/rarelootchest/stap1_vehicle_deed.py @@ -0,0 +1,4 @@ + +def itemTemplate(): + + return ['object/tangible/deed/vehicle_deed/shared_speeder_stap_deed.iff'] diff --git a/scripts/loot/lootItems/rarelootchest/target_dummy_black_sun.py b/scripts/loot/lootItems/rarelootchest/target_dummy_black_sun.py new file mode 100644 index 00000000..7d85ed97 --- /dev/null +++ b/scripts/loot/lootItems/rarelootchest/target_dummy_black_sun.py @@ -0,0 +1,4 @@ + +def itemTemplate(): + + return ['object/mobile/shared_target_dummy_blacksun.iff'] diff --git a/scripts/loot/lootItems/rarelootchest/target_dummy_rebel.py b/scripts/loot/lootItems/rarelootchest/target_dummy_rebel.py new file mode 100644 index 00000000..0417d75b --- /dev/null +++ b/scripts/loot/lootItems/rarelootchest/target_dummy_rebel.py @@ -0,0 +1,4 @@ + +def itemTemplate(): + + return ['object/mobile/shared_target_dummy_rebel_trooper.iff'] diff --git a/scripts/loot/lootItems/rarelootchest/target_dummy_stormtrooper.py b/scripts/loot/lootItems/rarelootchest/target_dummy_stormtrooper.py new file mode 100644 index 00000000..4ce37ad7 --- /dev/null +++ b/scripts/loot/lootItems/rarelootchest/target_dummy_stormtrooper.py @@ -0,0 +1,4 @@ + +def itemTemplate(): + + return ['object/mobile/shared_target_dummy_stormtrooper.iff'] diff --git a/scripts/loot/lootItems/rarelootchest/tatooine_dune_speeder.py b/scripts/loot/lootItems/rarelootchest/tatooine_dune_speeder.py new file mode 100644 index 00000000..c98b61bd --- /dev/null +++ b/scripts/loot/lootItems/rarelootchest/tatooine_dune_speeder.py @@ -0,0 +1,4 @@ + +def itemTemplate(): + + return ['object/tangible/veteran_reward/one_year_anniversary/shared_painting_03.iff'] \ No newline at end of file diff --git a/scripts/loot/lootItems/rarelootchest/triumph.py b/scripts/loot/lootItems/rarelootchest/triumph.py new file mode 100644 index 00000000..fad44d4e --- /dev/null +++ b/scripts/loot/lootItems/rarelootchest/triumph.py @@ -0,0 +1,4 @@ + +def itemTemplate(): + + return ['object/tangible/furniture/decorative/shared_event_lifeday05_painting_03.iff'] diff --git a/scripts/loot/lootItems/rarelootchest/ugnaught_costume_instructions.py b/scripts/loot/lootItems/rarelootchest/ugnaught_costume_instructions.py new file mode 100644 index 00000000..72f76e42 --- /dev/null +++ b/scripts/loot/lootItems/rarelootchest/ugnaught_costume_instructions.py @@ -0,0 +1,4 @@ + +def itemTemplate(): + + return ['object/tangible/item/costume_kit/shared_costume_deed.iff'] # needs correct iff still diff --git a/scripts/loot/lootItems/rarelootchest/victory.py b/scripts/loot/lootItems/rarelootchest/victory.py new file mode 100644 index 00000000..48a181cc --- /dev/null +++ b/scripts/loot/lootItems/rarelootchest/victory.py @@ -0,0 +1,4 @@ + +def itemTemplate(): + + return ['object/tangible/painting/shared_painting_vader_victory.iff'] diff --git a/scripts/loot/lootItems/rarelootchest/wampa_costume_instructions.py b/scripts/loot/lootItems/rarelootchest/wampa_costume_instructions.py new file mode 100644 index 00000000..72f76e42 --- /dev/null +++ b/scripts/loot/lootItems/rarelootchest/wampa_costume_instructions.py @@ -0,0 +1,4 @@ + +def itemTemplate(): + + return ['object/tangible/item/costume_kit/shared_costume_deed.iff'] # needs correct iff still diff --git a/scripts/loot/lootItems/rarelootchest/war_terminal.py b/scripts/loot/lootItems/rarelootchest/war_terminal.py new file mode 100644 index 00000000..fcb691ca --- /dev/null +++ b/scripts/loot/lootItems/rarelootchest/war_terminal.py @@ -0,0 +1,4 @@ + +def itemTemplate(): + + return ['object/tangible/furniture/decorative/object/tangible/beta/shared_beta_terminal_warp.iff'] # needs correct iff still diff --git a/scripts/loot/lootItems/rarelootchest/warriors_honor.py b/scripts/loot/lootItems/rarelootchest/warriors_honor.py new file mode 100644 index 00000000..1f9874c2 --- /dev/null +++ b/scripts/loot/lootItems/rarelootchest/warriors_honor.py @@ -0,0 +1,4 @@ + +def itemTemplate(): + + return ['object/tangible/painting/shared_painting_trandoshan_m.iff'] \ No newline at end of file diff --git a/scripts/loot/lootItems/rarelootchest/wookie_home_banner_kit.py b/scripts/loot/lootItems/rarelootchest/wookie_home_banner_kit.py new file mode 100644 index 00000000..10432fd0 --- /dev/null +++ b/scripts/loot/lootItems/rarelootchest/wookie_home_banner_kit.py @@ -0,0 +1,4 @@ + +def itemTemplate(): + + return ['object/tangible/furniture/decorative/shared_event_wookiee_shield.iff'] # needs correct iff still diff --git a/scripts/loot/lootItems/rarelootchest/wookie_life_day_orb.py b/scripts/loot/lootItems/rarelootchest/wookie_life_day_orb.py new file mode 100644 index 00000000..90e2b3a0 --- /dev/null +++ b/scripts/loot/lootItems/rarelootchest/wookie_life_day_orb.py @@ -0,0 +1,4 @@ + +def itemTemplate(): + + return ['object/tangible/furniture/decorative/shared_event_lifeday07_orb.iff'] # needs correct iff still diff --git a/scripts/loot/lootItems/rarelootchest/xeno_couch.py b/scripts/loot/lootItems/rarelootchest/xeno_couch.py new file mode 100644 index 00000000..6eb683cd --- /dev/null +++ b/scripts/loot/lootItems/rarelootchest/xeno_couch.py @@ -0,0 +1,4 @@ + +def itemTemplate(): + + return ['object/tangible/furniture/house_cleanup/shared_xeno_couch.iff'] diff --git a/scripts/loot/lootItems/rarelootchest/xeno_desk.py b/scripts/loot/lootItems/rarelootchest/xeno_desk.py new file mode 100644 index 00000000..75478c35 --- /dev/null +++ b/scripts/loot/lootItems/rarelootchest/xeno_desk.py @@ -0,0 +1,4 @@ + +def itemTemplate(): + + return ['object/tangible/furniture/house_cleanup/shared_xeno_desk.iff'] diff --git a/scripts/loot/lootItems/rarelootchest/xeno_desk_lamp.py b/scripts/loot/lootItems/rarelootchest/xeno_desk_lamp.py new file mode 100644 index 00000000..26b580c3 --- /dev/null +++ b/scripts/loot/lootItems/rarelootchest/xeno_desk_lamp.py @@ -0,0 +1,4 @@ + +def itemTemplate(): + + return ['object/tangible/furniture/house_cleanup/shared_xeno_desk_lamp.iff'] diff --git a/scripts/loot/lootItems/rarelootchest/xeno_rug.py b/scripts/loot/lootItems/rarelootchest/xeno_rug.py new file mode 100644 index 00000000..6430ec09 --- /dev/null +++ b/scripts/loot/lootItems/rarelootchest/xeno_rug.py @@ -0,0 +1,4 @@ + +def itemTemplate(): + + return ['object/tangible/furniture/house_cleanup/shared_xeno_rug.iff'] diff --git a/scripts/loot/lootItems/rarelootchest/xeno_table.py b/scripts/loot/lootItems/rarelootchest/xeno_table.py new file mode 100644 index 00000000..84542507 --- /dev/null +++ b/scripts/loot/lootItems/rarelootchest/xeno_table.py @@ -0,0 +1,4 @@ + +def itemTemplate(): + + return ['object/tangible/furniture/house_cleanup/shared_xeno_table.iff'] diff --git a/scripts/loot/lootItems/relics/jedi_relic_1.py b/scripts/loot/lootItems/relics/jedi_relic_1.py new file mode 100644 index 00000000..321819e2 --- /dev/null +++ b/scripts/loot/lootItems/relics/jedi_relic_1.py @@ -0,0 +1,8 @@ + +def itemTemplate(): + + return ['object/tangible/loot/mustafar/shared_jedi_relic_03.iff'] + +def usedInCollection(): + + return 'One-Handed Fifth Generation Lightsaber' diff --git a/scripts/loot/lootItems/relics/jedi_relic_2.py b/scripts/loot/lootItems/relics/jedi_relic_2.py new file mode 100644 index 00000000..1460ae13 --- /dev/null +++ b/scripts/loot/lootItems/relics/jedi_relic_2.py @@ -0,0 +1,6 @@ + +def itemTemplate(): + + return ['object/tangible/loot/mustafar/shared_jedi_relic_03.iff'] + + diff --git a/scripts/loot/lootItems/treasureloot/bracelet_of_Inspired_Status(right).py b/scripts/loot/lootItems/treasureloot/bracelet_of_Inspired_Status(right).py new file mode 100644 index 00000000..6df73bea --- /dev/null +++ b/scripts/loot/lootItems/treasureloot/bracelet_of_Inspired_Status(right).py @@ -0,0 +1,21 @@ + +def itemTemplate(): + + return ['object/tangible/wearables/bracelet/shared_bracelet_s03_r.iff'] + +def customItemName(): + + return 'Bracelet of Inspired Status (Right)' + +def requiredProfession(): + + return 'Entertainer' + +def requiredCL(): + + return 80 + +def itemSkillMods(): + + mods = ['expertise_en_inspire_pulse_duration_increase','1'] + return mods diff --git a/scripts/loot/lootItems/treasureloot/counter-toxin_wristband_prototype_IV_(right).py b/scripts/loot/lootItems/treasureloot/counter-toxin_wristband_prototype_IV_(right).py new file mode 100644 index 00000000..7f34bf48 --- /dev/null +++ b/scripts/loot/lootItems/treasureloot/counter-toxin_wristband_prototype_IV_(right).py @@ -0,0 +1,24 @@ + +def itemTemplate(): + + return ['object/tangible/wearables/bracelet/shared_bracelet_s03_r.iff'] + +def customItemName(): + + return 'Adventurer Hiker & Hunter Counter-Toxin Wristband Prototype IV (right)' + +def biolink(): + + return 1 + +def requiredCL(): + + return 75 + +def itemSkillMods(): + + mods = ['absorption_bleeding','8'] + mods += ['absorption_disease','8'] + mods += ['absorption_fire','8'] + mods += ['absorption_poison','8'] + return mods diff --git a/scripts/loot/lootItems/treasureloot/force_amplification_crystal.py b/scripts/loot/lootItems/treasureloot/force_amplification_crystal.py new file mode 100644 index 00000000..aaf1e4d9 --- /dev/null +++ b/scripts/loot/lootItems/treasureloot/force_amplification_crystal.py @@ -0,0 +1,5 @@ + +def itemTemplate(): + + return ['object/tangible/loot/misc/shared_force_crystal.iff'] + diff --git a/scripts/loot/lootItems/treasureloot/insurgency_wrist_implantat-BLACK-(right).py b/scripts/loot/lootItems/treasureloot/insurgency_wrist_implantat-BLACK-(right).py new file mode 100644 index 00000000..3e748ccf --- /dev/null +++ b/scripts/loot/lootItems/treasureloot/insurgency_wrist_implantat-BLACK-(right).py @@ -0,0 +1,24 @@ + +def itemTemplate(): + + return ['object/tangible/wearables/bracelet/shared_bracelet_s06_r.iff'] + +def customItemName(): + + return 'Corellidyne Personal Insurgency Wris Implantat -BLACK- (Right)' + +def requiredProfession(): + + return 'Spy' + +def requiredCL(): + + return 75 + +def itemSkillMods(): + + mods = ['expertise_action_line_sp_dm','4'] + mods += ['expertise_critical_line_sp_dm','4'] + mods += ['expertise_damage_line_sp_dm','4'] + mods += ['expertise_freeshot_sp_dm','4'] + return mods diff --git a/scripts/loot/lootItems/treasureloot/insurgent_scanner_wrist_module_(right).py b/scripts/loot/lootItems/treasureloot/insurgent_scanner_wrist_module_(right).py new file mode 100644 index 00000000..3cb1d321 --- /dev/null +++ b/scripts/loot/lootItems/treasureloot/insurgent_scanner_wrist_module_(right).py @@ -0,0 +1,21 @@ + +def itemTemplate(): + + return ['object/tangible/wearables/bracelet/shared_bracelet_s03_r.iff'] + +def customItemName(): + + return 'Idellian Arrays PLFS-4000 Insurgent Scanner Wrist Module (Right)' + +def biolink(): + + return 1 + +def requiredCL(): + + return 75 + +def itemSkillMods(): + + mods = ['detect_hidden','10'] + return mods diff --git a/scripts/loot/lootItems/treasureloot/jedi_knight_meditation_bracelet_(right).py b/scripts/loot/lootItems/treasureloot/jedi_knight_meditation_bracelet_(right).py new file mode 100644 index 00000000..9dfd3ca8 --- /dev/null +++ b/scripts/loot/lootItems/treasureloot/jedi_knight_meditation_bracelet_(right).py @@ -0,0 +1,26 @@ + +def itemTemplate(): + + return ['object/tangible/wearables/bracelet/shared_bracelet_s04_r.iff'] + +def customItemName(): + + return 'Jedi Knight Meditation Bracelet (right)' + +def requiredProfession(): + + return 'Jedi' + +def requiredCL(): + + return 75 + +def biolink(): + + return 1 + +def itemSkillMods(): + + mods = ['jedi_saber_assembly','3'] + mods += ['jedi_saber_experimentation','10'] + return mods diff --git a/scripts/loot/lootItems/treasureloot/jedi_knights_wristguard_(right).py b/scripts/loot/lootItems/treasureloot/jedi_knights_wristguard_(right).py new file mode 100644 index 00000000..ff605263 --- /dev/null +++ b/scripts/loot/lootItems/treasureloot/jedi_knights_wristguard_(right).py @@ -0,0 +1,24 @@ + +def itemTemplate(): + + return ['object/tangible/wearables/bracelet/shared_bracelet_s02_r.iff'] + +def customItemName(): + + return 'Jedi Knight\'s Wristguard (Right)' + +def requiredProfession(): + + return 'Jedi' + +def requiredCL(): + + return 85 + +def itemSkillMods(): + + mods = ['expertise_action_line_fs_dm','4'] + mods += ['expertise_critical_line_fs_dm','4'] + mods += ['expertise_damage_line_fs_dm','4'] + mods += ['expertise_freeshot_fs_dm','4'] + return mods diff --git a/scripts/loot/lootItems/treasureloot/jedi_wristguard(right).py b/scripts/loot/lootItems/treasureloot/jedi_wristguard(right).py new file mode 100644 index 00000000..b8565ab8 --- /dev/null +++ b/scripts/loot/lootItems/treasureloot/jedi_wristguard(right).py @@ -0,0 +1,28 @@ + +def itemTemplate(): + + return ['object/tangible/wearables/bracelet/shared_bracelet_s02_r.iff'] + +def customItemName(): + + return 'Jedi\'s Wristguard (Right)' + +def requiredProfession(): + + return 'Jedi' + +def biolink(): + + return 1 + +def requiredCL(): + + return 61 + +def itemSkillMods(): + + mods = ['expertise_action_line_fs_dm','3'] + mods += ['expertise_critical_line_fs_dm','3'] + mods += ['expertise_damage_line_fs_dm','3'] + mods += ['expertise_freeshot_fs_dm','3'] + return mods diff --git a/scripts/loot/lootItems/treasureloot/manufacturing_verdicator_200a_(right).py b/scripts/loot/lootItems/treasureloot/manufacturing_verdicator_200a_(right).py new file mode 100644 index 00000000..1817be94 --- /dev/null +++ b/scripts/loot/lootItems/treasureloot/manufacturing_verdicator_200a_(right).py @@ -0,0 +1,24 @@ + +def itemTemplate(): + + return ['object/tangible/wearables/bracelet/shared_bracelet_s03_r.iff'] + +def customItemName(): + + return 'Saldalith Manufacturing Verdicator 200A (Right)' + +def requiredProfession(): + + return 'Medic' + +def requiredCL(): + + return 85 + +def itemSkillMods(): + + mods = ['expertise_action_line_me_dm','4'] + mods += ['expertise_critical_line_me_dm','4'] + mods += ['expertise_damage_line_me_dm','4'] + mods += ['expertise_healing_all','4'] + return mods diff --git a/scripts/loot/lootItems/treasureloot/mysterious_data_disk.py b/scripts/loot/lootItems/treasureloot/mysterious_data_disk.py new file mode 100644 index 00000000..e81a23df --- /dev/null +++ b/scripts/loot/lootItems/treasureloot/mysterious_data_disk.py @@ -0,0 +1,9 @@ + +def itemTemplate(): + + return ['object/tangible/loot/generic_usable/shared_datadisk_generic.iff'] + +def customItemName(): + + return 'Mysterious Data Disk' + diff --git a/scripts/loot/lootItems/treasureloot/personnel_comlink_wrist-P4_(right).py b/scripts/loot/lootItems/treasureloot/personnel_comlink_wrist-P4_(right).py new file mode 100644 index 00000000..34d0cfca --- /dev/null +++ b/scripts/loot/lootItems/treasureloot/personnel_comlink_wrist-P4_(right).py @@ -0,0 +1,24 @@ + +def itemTemplate(): + + return ['object/tangible/wearables/bracelet/shared_bracelet_s03_r.iff'] + +def customItemName(): + + return 'SoroSuub Personnel Comlink Wrist-P4 (right)' + +def requiredProfession(): + + return 'Officer' + +def requiredCL(): + + return 85 + +def itemSkillMods(): + + mods = ['expertise_action_line_of_sure','4'] + mods += ['expertise_critical_line_of_sure','4'] + mods += ['expertise_damage_line_of_sure','4'] + mods += ['expertise_freeshot_of_sure','4'] + return mods diff --git a/scripts/loot/lootItems/treasureloot/targeter_ranging_wrist_assist_V4_(right).py b/scripts/loot/lootItems/treasureloot/targeter_ranging_wrist_assist_V4_(right).py new file mode 100644 index 00000000..2c2d2d49 --- /dev/null +++ b/scripts/loot/lootItems/treasureloot/targeter_ranging_wrist_assist_V4_(right).py @@ -0,0 +1,24 @@ + +def itemTemplate(): + + return ['object/tangible/wearables/bracelet/shared_bracelet_s03_r.iff'] + +def customItemName(): + + return 'Merr-Sonn Targeter Ranging Wrist Assist V4 (right)' + +def requiredProfession(): + + return 'Smuggler' + +def requiredCL(): + + return 85 + +def itemSkillMods(): + + mods = ['fast_attack_line_sm_dm','4'] + mods += ['expertise_critical_line_sm_dm','4'] + mods += ['expertise_damage_line_sm_dm','4'] + mods += ['expertise_freeshot_sm_dm','4'] + return mods diff --git a/scripts/loot/lootItems/treasureloot/targeting_assist_wrist_implant_PTI-IV_(right).py b/scripts/loot/lootItems/treasureloot/targeting_assist_wrist_implant_PTI-IV_(right).py new file mode 100644 index 00000000..adcac454 --- /dev/null +++ b/scripts/loot/lootItems/treasureloot/targeting_assist_wrist_implant_PTI-IV_(right).py @@ -0,0 +1,24 @@ + +def itemTemplate(): + + return ['object/tangible/wearables/bracelet/shared_bracelet_s03_r.iff'] + +def customItemName(): + + return 'Traxes BioElectronic Targeting Assist Wrist Implant PTI-IV (Right)' + +def requiredProfession(): + + return 'Commando' + +def requiredCL(): + + return 85 + +def itemSkillMods(): + + mods = ['expertise_action_line_co_dm','4'] + mods += ['expertise_critical_line_co_dm','4'] + mods += ['expertise_damage_line_co_dm','4'] + mods += ['expertise_freeshot_co_dm','4'] + return mods diff --git a/scripts/loot/lootItems/treasureloot/wrist_assault_booster_zulu_(right).py b/scripts/loot/lootItems/treasureloot/wrist_assault_booster_zulu_(right).py new file mode 100644 index 00000000..61695558 --- /dev/null +++ b/scripts/loot/lootItems/treasureloot/wrist_assault_booster_zulu_(right).py @@ -0,0 +1,24 @@ + +def itemTemplate(): + + return ['object/tangible/wearables/bracelet/shared_bracelet_s03_r.iff'] + +def customItemName(): + + return 'Blastech Wristek - Wrist Assault Booster Zulu (right)' + +def requiredProfession(): + + return 'Bounty Hunter' + +def requiredCL(): + + return 85 + +def itemSkillMods(): + + mods = ['expertise_action_line_fs_dm','4'] + mods += ['expertise_critical_line_dm','4'] + mods += ['expertise_damage_line_dm','4'] + mods += ['expertise_freeshot_dm','4'] + return mods diff --git a/scripts/loot/lootItems/treasureloot/wrist_communications_scanner_SCNv4_(right).py b/scripts/loot/lootItems/treasureloot/wrist_communications_scanner_SCNv4_(right).py new file mode 100644 index 00000000..f43a5684 --- /dev/null +++ b/scripts/loot/lootItems/treasureloot/wrist_communications_scanner_SCNv4_(right).py @@ -0,0 +1,22 @@ + +def itemTemplate(): + + return ['object/tangible/wearables/bracelet/shared_bracelet_s03_r.iff'] + +def customItemName(): + + return 'Courier Wrist Communications Scanner SCNv4 (Right)' + +def requiredProfession(): + + return 'Bounty Hunter' + +def requiredCL(): + + return 75 + +def itemSkillMods(): + + mods = ['droid_find_speed','10'] + mods += ['expertise_critical_niche_pvp','2'] + return mods diff --git a/scripts/loot/lootItems/veryrareloot/rare_ankarres_sapphire.py b/scripts/loot/lootItems/veryrareloot/rare_ankarres_sapphire.py new file mode 100644 index 00000000..cee3f5ae --- /dev/null +++ b/scripts/loot/lootItems/veryrareloot/rare_ankarres_sapphire.py @@ -0,0 +1,19 @@ + +def itemTemplate(): + + return ['object/tangible/loot/creature_loot/collections/shared_purple_rnd_cut_gem_style1.iff'] + +def customItemName(): + + return 'Rare Ankarres Sapphire' + +def biolink(): + + return 1 + +def requiredCL(): + + return 80 + +def customSetup(object): + object.setCustomName2("Success!") \ No newline at end of file diff --git a/scripts/loot/lootItems/veryrareloot/rare_corusca_gem.py b/scripts/loot/lootItems/veryrareloot/rare_corusca_gem.py new file mode 100644 index 00000000..4b6c1544 --- /dev/null +++ b/scripts/loot/lootItems/veryrareloot/rare_corusca_gem.py @@ -0,0 +1,16 @@ + +def itemTemplate(): + + return ['object/tangible/loot/creature_loot/collections/shared_purple_rnd_cut_gem_style1.iff'] + +def customItemName(): + + return 'Rare Corusca Gem' + +def biolink(): + + return 1 + +def requiredCL(): + + return 80 diff --git a/scripts/loot/lootItems/veryrareloot/rare_nova_crystal.py b/scripts/loot/lootItems/veryrareloot/rare_nova_crystal.py new file mode 100644 index 00000000..ccd74091 --- /dev/null +++ b/scripts/loot/lootItems/veryrareloot/rare_nova_crystal.py @@ -0,0 +1,17 @@ + +def itemTemplate(): + + return ['object/tangible/loot/creature_loot/collections/shared_purple_rnd_cut_gem_style1.iff'] + +def customItemName(): + + return 'Rare Nova Crystal' + +def biolink(): + + return 1 + +def requiredCL(): + + return 80 + diff --git a/scripts/loot/lootItems/veryrareloot/rare_power_gem.py b/scripts/loot/lootItems/veryrareloot/rare_power_gem.py new file mode 100644 index 00000000..f51777d3 --- /dev/null +++ b/scripts/loot/lootItems/veryrareloot/rare_power_gem.py @@ -0,0 +1,17 @@ + +def itemTemplate(): + + return ['object/tangible/loot/creature_loot/collections/shared_purple_rnd_cut_gem_style1.iff'] + +def customItemName(): + + return 'Rare Power Gem' + +def biolink(): + + return 1 + +def requiredCL(): + + return 80 + diff --git a/scripts/loot/lootItems/veryrareloot/rare_rol_stone.py b/scripts/loot/lootItems/veryrareloot/rare_rol_stone.py new file mode 100644 index 00000000..2795adff --- /dev/null +++ b/scripts/loot/lootItems/veryrareloot/rare_rol_stone.py @@ -0,0 +1,17 @@ + +def itemTemplate(): + + return ['object/tangible/loot/creature_loot/collections/shared_purple_rnd_cut_gem_style1.iff'] + +def customItemName(): + + return 'Rare Rol Stone' + +def biolink(): + + return 1 + +def requiredCL(): + + return 80 + diff --git a/scripts/loot/lootItems/veryrareloot/rare_sasho_gem.py b/scripts/loot/lootItems/veryrareloot/rare_sasho_gem.py new file mode 100644 index 00000000..17a9ec0b --- /dev/null +++ b/scripts/loot/lootItems/veryrareloot/rare_sasho_gem.py @@ -0,0 +1,17 @@ + +def itemTemplate(): + + return ['object/tangible/loot/creature_loot/collections/shared_purple_rnd_cut_gem_style1.iff'] + +def customItemName(): + + return 'Rare Sasho Gem' + +def biolink(): + + return 1 + +def requiredCL(): + + return 80 + diff --git a/scripts/loot/lootItems/weapons/carbine/EE3_carbine.py b/scripts/loot/lootItems/weapons/carbine/EE3_carbine.py new file mode 100644 index 00000000..e69de29b diff --git a/scripts/loot/lootItems/weapons/gaderiffi_baton.py b/scripts/loot/lootItems/weapons/gaderiffi_baton.py new file mode 100644 index 00000000..f0aa09e9 --- /dev/null +++ b/scripts/loot/lootItems/weapons/gaderiffi_baton.py @@ -0,0 +1,35 @@ + +def itemTemplate(): + + return ['object/weapon/melee/baton/shared_baton_gaderiffi.iff'] + +def customItemName(): + + return 'Gaderiffi Baton' + +def customItemStackCount(): + + return 1 + +def customizationAttributes(): + + return [] + +def customizationValues(): + + return [] + +def requiredCL(): + + return 10 + +def itemStats(): + + stats = ['mindamage','12','27'] + stats += ['maxdamage','48','95'] + stats += ['attackspeed','1.0','1.0'] + stats += ['maxrange','0','4'] + stats += ['damagetype','kinetic','kinetic'] + stats += ['weapontype','4','4'] + + return stats diff --git a/scripts/loot/lootItems/weapons/knife/janta_knife.py b/scripts/loot/lootItems/weapons/knife/janta_knife.py new file mode 100644 index 00000000..669488b2 --- /dev/null +++ b/scripts/loot/lootItems/weapons/knife/janta_knife.py @@ -0,0 +1,15 @@ + +def itemTemplate(): + + return ['object/weapon/melee/knife/shared_knife_janta.iff'] + +def itemStats(): + + stats = ['mindamage','12','27'] + stats += ['maxdamage','48','95'] + stats += ['attackspeed','1.0','1.0'] + stats += ['maxrange','0','4'] + stats += ['damagetype','kinetic','kinetic'] + stats += ['weapontype','4','4'] + + return stats diff --git a/scripts/loot/lootItems/weapons/rifle/adjusted_cdef_rifle.py b/scripts/loot/lootItems/weapons/rifle/adjusted_cdef_rifle.py new file mode 100644 index 00000000..63bef054 --- /dev/null +++ b/scripts/loot/lootItems/weapons/rifle/adjusted_cdef_rifle.py @@ -0,0 +1,35 @@ + +def itemTemplate(): + + return ['object/weapon/ranged/rifle/shared_rifle_cdef.iff'] + +def customItemName(): + + return 'Adjusted CDEF Rifle' + +def customItemStackCount(): + + return 1 + +def customizationAttributes(): + + return [] + +def customizationValues(): + + return [] + +def requiredCL(): + + return 10 + +def itemStats(): + + stats = ['mindamage','12','27'] + stats += ['maxdamage','48','95'] + stats += ['attackspeed','0.8','0.8'] + stats += ['maxrange','0','64'] + stats += ['damagetype','energy','energy'] + stats += ['weapontype','0','0'] + + return stats diff --git a/scripts/loot/lootItems/weapons/rifle/jawa_ion_rifle.py b/scripts/loot/lootItems/weapons/rifle/jawa_ion_rifle.py new file mode 100644 index 00000000..e69de29b diff --git a/scripts/loot/lootItems/weapons/rifle/spraystick.py b/scripts/loot/lootItems/weapons/rifle/spraystick.py new file mode 100644 index 00000000..e69de29b diff --git a/scripts/loot/lootPools/advanced_stims_80.py b/scripts/loot/lootPools/advanced_stims_80.py new file mode 100644 index 00000000..ea905ef8 --- /dev/null +++ b/scripts/loot/lootPools/advanced_stims_80.py @@ -0,0 +1,8 @@ + +def itemNames(): + + return ['adv_agility_stim_80','adv_power_stim_80'] + +def itemChances(): + + return [50,50] \ No newline at end of file diff --git a/scripts/loot/lootPools/armor_various.py b/scripts/loot/lootPools/armor_various.py new file mode 100644 index 00000000..aee801b3 --- /dev/null +++ b/scripts/loot/lootPools/armor_various.py @@ -0,0 +1,23 @@ + +def itemNames(): + + components = ['bone_armor_bicep_left','bone_armor_bicep_right','bone_armor_boots','bone_armor_bracer_left','bone_armor_bracer_right','bone_armor_chestplate','bone_armor_gloves','bone_armor_helmet','bone_armor_leggings'] + components += ['chitin_armor_bicep_left','chitin_armor_bicep_right','chitin_armor_boots','chitin_armor_bracer_left','chitin_armor_bracer_right','chitin_armor_chestplate','chitin_armor_gloves','chitin_armor_helmet','chitin_armor_leggings'] + components += ['composite_armor_bicep_left','composite_armor_bicep_right','composite_armor_boots','composite_armor_bracer_left','composite_armor_bracer_right','composite_armor_chestplate','composite_armor_gloves','composite_armor_helmet','composite_armor_leggings'] + components += ['ithorian_defender_armor_bicep_left','ithorian_defender_armor_bicep_right','ithorian_defender_armor_boots','ithorian_defender_armor_bracer_left','ithorian_defender_armor_bracer_right','ithorian_defender_armor_chestplate','ithorian_defender_armor_gloves','ithorian_defender_armor_helmet','ithorian_defender_armor_leggings'] + components += ['ithorian_guardian_armor_bicep_left','ithorian_guardian_armor_bicep_right','ithorian_guardian_armor_boots','ithorian_guardian_armor_bracer_left','ithorian_guardian_armor_bracer_right','ithorian_guardian_armor_chestplate','ithorian_guardian_armor_gloves','ithorian_guardian_armor_helmet','ithorian_guardian_armor_leggings'] + components += ['ithorian_sentinel_armor_bicep_left','ithorian_sentinel_armor_bicep_right','ithorian_sentinel_armor_boots','ithorian_sentinel_armor_bracer_left','ithorian_sentinel_armor_bracer_right','ithorian_sentinel_armor_chestplate','ithorian_sentinel_armor_gloves','ithorian_sentinel_armor_helmet','ithorian_sentinel_armor_leggings'] + components += ['kashyyykian_black_mtn_armor_bicep_left','kashyyykian_black_mtn_armor_bicep_right','kashyyykian_black_mtn_armor_bracer_left','kashyyykian_black_mtn_armor_bracer_right','kashyyykian_black_mtn_armor_chestplate','kashyyykian_black_mtn_leggings'] + components += ['kashyyykian_ceremonial_bicep_left','kashyyykian_ceremonial_bicep_right','kashyyykian_ceremonial_bracer_left','kashyyykian_ceremonial_bracer_right','kashyyykian_ceremonial_chestplate','kashyyykian_ceremonial_leggings'] + components += ['kashyyykian_hunting_bicep_left','kashyyykian_hunting_bicep_right','kashyyykian_hunting_bracer_left','kashyyykian_hunting_bracer_right','kashyyykian_hunting_chestplate','kashyyykian_hunting_leggings'] + components += ['marauder_armor_bicep_left','marauder_armor_bicep_right','marauder_armor_boots','marauder_armor_bracer_left','marauder_armor_bracer_right','marauder_armor_chestplate','marauder_armor_gloves','marauder_armor_helmet','marauder_armor_leggings'] + components += ['padded_armor_bicep_left','padded_armor_bicep_right','padded_armor_boots','padded_armor_bracer_left','padded_armor_bracer_right','padded_armor_chestplate','padded_armor_gloves','padded_armor_helmet','padded_armor_leggings'] + components += ['tantel_armor_bicep_left','tantel_armor_bicep_right','tantel_armor_boots','tantel_armor_bracer_left','tantel_armor_bracer_right','tantel_armor_chestplate','tantel_armor_gloves','tantel_armor_helmet','tantel_armor_leggings'] + components += ['ubese_armor_bandolier','ubese_armor_boots','ubese_armor_bracer_left','ubese_armor_bracer_right','ubese_armor_gloves','ubese_armor_helmet','ubese_armor_jacket','ubese_armor_shirt'] + return components + +def itemChances(): + + return [-1] # all equal + + \ No newline at end of file diff --git a/scripts/loot/lootPools/batons.py b/scripts/loot/lootPools/batons.py new file mode 100644 index 00000000..99e26d99 --- /dev/null +++ b/scripts/loot/lootPools/batons.py @@ -0,0 +1,8 @@ + +def itemNames(): + + return ['gaderiffi_baton'] + +def itemChances(): + return [100] + \ No newline at end of file diff --git a/scripts/loot/lootPools/bh_armor_for_mando.py b/scripts/loot/lootPools/bh_armor_for_mando.py new file mode 100644 index 00000000..e69de29b diff --git a/scripts/loot/lootPools/chronicle_relic.py b/scripts/loot/lootPools/chronicle_relic.py new file mode 100644 index 00000000..e69de29b diff --git a/scripts/loot/lootPools/colorcrystals.py b/scripts/loot/lootPools/colorcrystals.py new file mode 100644 index 00000000..4c42a245 --- /dev/null +++ b/scripts/loot/lootPools/colorcrystals.py @@ -0,0 +1,8 @@ + +def itemNames(): + + return ['colorCrystal'] + +def itemChances(): + + return [100] \ No newline at end of file diff --git a/scripts/loot/lootPools/composite_armor.py b/scripts/loot/lootPools/composite_armor.py new file mode 100644 index 00000000..747a2995 --- /dev/null +++ b/scripts/loot/lootPools/composite_armor.py @@ -0,0 +1,10 @@ + +def itemNames(): + + items = ['composite_armor_bicep_left','composite_armor_bicep_right','composite_armor_bracer_left','composite_armor_bracer_right'] + items += ['composite_armor_chestplate','composite_armor_helmet','composite_armor_leggings','composite_armor_boots','composite_armor_gloves'] + return items + +def itemChances(): + + return [11,11,11,11,11,11,11,11,12] # = 100% \ No newline at end of file diff --git a/scripts/loot/lootPools/consumable_buff_items.py b/scripts/loot/lootPools/consumable_buff_items.py new file mode 100644 index 00000000..66f6cfb3 --- /dev/null +++ b/scripts/loot/lootPools/consumable_buff_items.py @@ -0,0 +1,6 @@ + +def itemNames(): + return ['flask_of_elba_water ','flask_of_naris-bud_tea','small_flask_of_nerfmilk'] + +def itemChances(): + return [33,33,33] \ No newline at end of file diff --git a/scripts/loot/lootPools/gem_collection_items.py b/scripts/loot/lootPools/gem_collection_items.py new file mode 100644 index 00000000..e69de29b diff --git a/scripts/loot/lootPools/house_furniture.py b/scripts/loot/lootPools/house_furniture.py new file mode 100644 index 00000000..e69de29b diff --git a/scripts/loot/lootPools/jedi_components_treasure.py b/scripts/loot/lootPools/jedi_components_treasure.py new file mode 100644 index 00000000..91c26020 --- /dev/null +++ b/scripts/loot/lootPools/jedi_components_treasure.py @@ -0,0 +1,14 @@ + +def itemNames(): + + components = ['jedi_relic_1','jedi_relic_2','colorcrystal'] + components += ['powercrystal_select','powercrystal_premium'] + components += ['kraytpearl_select','kraytpearl_premium','kraytpearl_flawless','kraytpearl_ancient_flawless'] + components += ['jedi_holocron_2_5','jedi_holocron_4_5','sith_holocron_4_5'] + return components + +def itemChances(): + + return [48,2,29,3,2,5,4,1,0.1,5.7,0.1,0.1] #11 + + \ No newline at end of file diff --git a/scripts/loot/lootPools/jedi_relic_1.py b/scripts/loot/lootPools/jedi_relic_1.py new file mode 100644 index 00000000..b18c248f --- /dev/null +++ b/scripts/loot/lootPools/jedi_relic_1.py @@ -0,0 +1,8 @@ + +def itemNames(): + + return ['jedi_relic_1'] + +def itemChances(): + + return [100] \ No newline at end of file diff --git a/scripts/loot/lootPools/jediholocrons.py b/scripts/loot/lootPools/jediholocrons.py new file mode 100644 index 00000000..a227cbe8 --- /dev/null +++ b/scripts/loot/lootPools/jediholocrons.py @@ -0,0 +1,8 @@ + +def itemNames(): + + return ['jedi_holocron_1_5','jedi_holocron_2_5','jedi_holocron_3_5','jedi_holocron_4_5','jedi_holocron_5_5'] + +def itemChances(): + + return [25,15,30,5,25] \ No newline at end of file diff --git a/scripts/loot/lootPools/junk.py b/scripts/loot/lootPools/junk.py new file mode 100644 index 00000000..ef757825 --- /dev/null +++ b/scripts/loot/lootPools/junk.py @@ -0,0 +1,15 @@ + +def itemNames(): + + templates=['damaged_datapad','red_wiring','worklight_generic','antenna','brain','eye','gland','heart','stomach','armor_repair_device'] #10 + templates=templates+['brain','chassis_blueprint','comlink','explosive_dud','hyperdrive_unit','id_chip','impulse_detector','laser_trap'] #8 + templates=templates+['launcher_tube','ledger','magseal_detector','medical_console','medical_device','motor','power_output_analyzer','shield_module'] #8 + templates=templates+['software_module','survival_gear','underpowered_survey_pad','unidentified_serum_vial','used_notebook','weak_droid_battery'] #6 + return templates + +def itemChances(): + chances=[3.125,3.125,3.125,3.125,3.125,3.125,3.125,3.125] + chances=chances+[3.125,3.125,3.125,3.125,3.125,3.125,3.125,3.125] + chances=chances+[3.125,3.125,3.125,3.125,3.125,3.125,3.125,3.125] + chances=chances+[3.125,3.125,3.125,3.125,3.125,3.125,3.125,3.125] + return chances #32 \ No newline at end of file diff --git a/scripts/loot/lootPools/kraytpearl_lowq.py b/scripts/loot/lootPools/kraytpearl_lowq.py new file mode 100644 index 00000000..4fe709c2 --- /dev/null +++ b/scripts/loot/lootPools/kraytpearl_lowq.py @@ -0,0 +1,8 @@ + +def itemNames(): + + return ['kraytpearl_cracked','kraytpearl_scratched','kraytpearl_poor'] + +def itemChances(): + + return [33,33,34] \ No newline at end of file diff --git a/scripts/loot/lootPools/kraytpearls_range.py b/scripts/loot/lootPools/kraytpearls_range.py new file mode 100644 index 00000000..23477840 --- /dev/null +++ b/scripts/loot/lootPools/kraytpearls_range.py @@ -0,0 +1,6 @@ + +def itemTemplates(): + return ['kraytpearl_fair','kraytpearl_good','kraytpearl_quality','kraytpearl_select','kraytpearl_premium','kraytpearl_flawless'] + +def itemChances(): + return [10,20,30,34,5,1] #= 100% \ No newline at end of file diff --git a/scripts/loot/lootPools/loot_kits_adhesives.py b/scripts/loot/lootPools/loot_kits_adhesives.py new file mode 100644 index 00000000..e69de29b diff --git a/scripts/loot/lootPools/powercrystals_hiq.py b/scripts/loot/lootPools/powercrystals_hiq.py new file mode 100644 index 00000000..63d33a9b --- /dev/null +++ b/scripts/loot/lootPools/powercrystals_hiq.py @@ -0,0 +1,6 @@ + +def itemNames(): + return ['powercrystal_premium','powercrystal_flawless','powercrystal_perfect'] + +def itemChances(): + return [94,5,1] #= 100% \ No newline at end of file diff --git a/scripts/loot/lootPools/profession_bracelets_61.py b/scripts/loot/lootPools/profession_bracelets_61.py new file mode 100644 index 00000000..68043333 --- /dev/null +++ b/scripts/loot/lootPools/profession_bracelets_61.py @@ -0,0 +1,8 @@ + +def itemNames(): + names = ['jedi_wristguard(right)'] + + return names + +def itemChances(): + return [100] \ No newline at end of file diff --git a/scripts/loot/lootPools/profession_bracelets_75.py b/scripts/loot/lootPools/profession_bracelets_75.py new file mode 100644 index 00000000..1ac31b60 --- /dev/null +++ b/scripts/loot/lootPools/profession_bracelets_75.py @@ -0,0 +1,8 @@ + +def itemNames(): + names = ['jedi_knight_meditation_bracelet_(right)','wrist_communications_scanner_SCNv4_(right)'] + names += ['insurgent_scanner_wrist_module_(right)','counter-toxin_wristband_prototype_IV_(right)','insurgency_wrist_implantat-BLACK-(right)'] + return names + +def itemChances(): + return [20,20,20,20,20] \ No newline at end of file diff --git a/scripts/loot/lootPools/profession_bracelets_85.py b/scripts/loot/lootPools/profession_bracelets_85.py new file mode 100644 index 00000000..dbaba8db --- /dev/null +++ b/scripts/loot/lootPools/profession_bracelets_85.py @@ -0,0 +1,10 @@ + +def itemNames(): + names = ['jedi_knights_wristguard_(right)','wrist_assault_booster_zulu_(right)','targeting_assist_wrist_implant_PTI-IV_(right)'] + names += ['personnel_comlink_wrist-P4_(right)','manufacturing_verdicator_200a_(right)'] + names += ['targeter_ranging_wrist_assist_V4_(right)','bracelet_of_Inspired_Status(right)'] + + return names + +def itemChances(): + return [16,14,14,14,14,14,14] \ No newline at end of file diff --git a/scripts/loot/lootPools/random_loot_primitives.py b/scripts/loot/lootPools/random_loot_primitives.py new file mode 100644 index 00000000..206888dd --- /dev/null +++ b/scripts/loot/lootPools/random_loot_primitives.py @@ -0,0 +1,8 @@ + +def itemNames(): + + return ['janta_knife'] + +def itemChances(): + return [100] + \ No newline at end of file diff --git a/scripts/loot/lootPools/random_loot_rifles.py b/scripts/loot/lootPools/random_loot_rifles.py new file mode 100644 index 00000000..4992e807 --- /dev/null +++ b/scripts/loot/lootPools/random_loot_rifles.py @@ -0,0 +1,8 @@ + +def itemNames(): + + return ['adjusted_cdef_rifle'] + +def itemChances(): + return [100] + \ No newline at end of file diff --git a/scripts/loot/lootPools/random_stat_jewelry.py b/scripts/loot/lootPools/random_stat_jewelry.py new file mode 100644 index 00000000..0e11105e --- /dev/null +++ b/scripts/loot/lootPools/random_stat_jewelry.py @@ -0,0 +1,6 @@ + +def itemNames(): + return ['random_stat_bracelet','random_stat_necklace','random_stat_ring'] + +def itemChances(): + return [50,35,15] #= 100% \ No newline at end of file diff --git a/scripts/loot/lootPools/rare_buff_items.py b/scripts/loot/lootPools/rare_buff_items.py new file mode 100644 index 00000000..b816eb79 --- /dev/null +++ b/scripts/loot/lootPools/rare_buff_items.py @@ -0,0 +1,8 @@ + +def itemTemplates(): + names = ['rare_nova_crystal','rare_rol_stone','rare_power_gem'] + names += ['rare_corusca_gem','rare_sasho_gem','rare_ankarres_sapphire'] + return names + +def itemChances(): + return [15,17,17,17,17,17] \ No newline at end of file diff --git a/scripts/loot/lootPools/rareloot.py b/scripts/loot/lootPools/rareloot.py new file mode 100644 index 00000000..435ebfce --- /dev/null +++ b/scripts/loot/lootPools/rareloot.py @@ -0,0 +1,9 @@ + + +def itemNames(): + + templates=['rarelootchest1','rarelootchest2'] + return templates + +def itemChances(): + return [70,30] \ No newline at end of file diff --git a/scripts/loot/lootPools/sithholocrons.py b/scripts/loot/lootPools/sithholocrons.py new file mode 100644 index 00000000..b264dabe --- /dev/null +++ b/scripts/loot/lootPools/sithholocrons.py @@ -0,0 +1,8 @@ + +def itemNames(): + + return ['sith_holocron_1_5','sith_holocron_2_5','sith_holocron_3_5','sith_holocron_4_5','sith_holocron_5_5'] + +def itemChances(): + + return [25,15,30,5,25] \ No newline at end of file diff --git a/scripts/loot/lootPools/treasure_extra.py b/scripts/loot/lootPools/treasure_extra.py new file mode 100644 index 00000000..9c6b639d --- /dev/null +++ b/scripts/loot/lootPools/treasure_extra.py @@ -0,0 +1,8 @@ + +def itemNames(): + names = ['mysterious_data_disk'] + + return names + +def itemChances(): + return [100] \ No newline at end of file diff --git a/scripts/loot/lootPools/treasure_hunter_collection_items.py b/scripts/loot/lootPools/treasure_hunter_collection_items.py new file mode 100644 index 00000000..e69de29b diff --git a/scripts/loot/lootPools/tusken_clothing.py b/scripts/loot/lootPools/tusken_clothing.py new file mode 100644 index 00000000..e69de29b diff --git a/scripts/loot/lootPools/tusken_raider_clothing.py b/scripts/loot/lootPools/tusken_raider_clothing.py new file mode 100644 index 00000000..72762d37 --- /dev/null +++ b/scripts/loot/lootPools/tusken_raider_clothing.py @@ -0,0 +1,6 @@ + +def itemNames(): + return ['tusken_raider_dress','tusken_raider_boots','tusken_raider_gloves','tusken_raider_helmet','tusken_raider_bandolier'] + +def itemChances(): + return [20,20,20,20,20] #= 100% \ No newline at end of file diff --git a/scripts/loot/lootPools/various_schematics.py b/scripts/loot/lootPools/various_schematics.py new file mode 100644 index 00000000..e69de29b diff --git a/scripts/loot/lootPools/weaponsmith_components.py b/scripts/loot/lootPools/weaponsmith_components.py new file mode 100644 index 00000000..e69de29b diff --git a/scripts/loot/lootPools/wearable_backpacks.py b/scripts/loot/lootPools/wearable_backpacks.py new file mode 100644 index 00000000..ac7a299e --- /dev/null +++ b/scripts/loot/lootPools/wearable_backpacks.py @@ -0,0 +1,6 @@ + +def itemNames(): + return ['textiles_survival_backpack_(schematic)','textiles_survival_backpack_V2_(schematic)'] + +def itemChances(): + return [60,40] \ No newline at end of file diff --git a/scripts/loot/rarelootchestcontents/exceptionaltable.py b/scripts/loot/rarelootchestcontents/exceptionaltable.py new file mode 100644 index 00000000..f652f0a4 --- /dev/null +++ b/scripts/loot/rarelootchestcontents/exceptionaltable.py @@ -0,0 +1,48 @@ + +def itemNames(): + # Exceptional part + templates = ['bacta_tank','legendary_e5_carbine','legendary_fwg5_pistol','legendary_nightsister_energy_lance'] + templates +=['legendary_power_hammer','legendary_stun_baton','legendary_t21_rifle','advertisement_rodian'] + templates +=['cunning_of_tyranus','dna_storage_device','dusk_in_kachirho','emperors_senate_office_chair'] + templates +=['fighter','gungan_statue_style_1_schematic','gungan_statue_style_2_schematic','gungan_statue_style_3_schematic'] + templates +=['gungan_statue_style_4_schematic','holo_entertainment_table','jedi_master_cloak','jedi_relic_1'] + templates +=['poster_block_turret_schematic','prayer_mobile','shard_of_ferocity','shard_of_retaliation'] + templates +=['sith_buff_holocron','sith_relic','war_phoenix'] + # Rare part + templates +=['animal_hide_rack_style_1','animal_hide_rack_style_2','animal_hide_rack_style_3','animal_hide_rack_style_4'] + templates +=['at_st_pilots_helmet','aurilian_sculpture_section_1','aurilian_sculpture_section_2','aurilian_sculpture_section_3'] + templates +=['aurilian_sculpture_section_4','banes_heart','bar_corner_piece_1','bar_corner_piece_2'] + templates +=['bar_corner_piece_3','bar_counter_large','bothan_beauty','bothan_buff'] + templates +=['cast_wing_in_flight','corellian_seaside','data_disk_hologram','decorative_bubble_tank'] + templates +=['droid_in_contrast','drum','emperors_eyes','family_bonds'] + templates +=['feared','fighter_study','fighters_courage','geonosian_costume_instructions'] + templates +=['hanging_life_day_orb','hutt_greed','imperial_oppression','jedi_statue_schematic'] + templates +=['jubilee_wheel_schematic','kachirho_wall_cornucopia','kowakian_cage','krayt_costume_instructions'] + templates +=['large_fruit_stand_schematic','large_unmarked_crate','lava_geode','life_day_lamp'] + templates +=['life_day_proud_wookie','life_day_red_robed_wookie','living_canals','lugjack_machine_schematic'] + templates +=['miniature_wroshyr_tree','modified_fusion_reactor_schematic','mustafarian_injector','mynock_costume_instructions'] + templates +=['no_division','nym_collectible_globe','pilgrimage','poster_of_a_ship_schematic'] + templates +=['poster_of_a_turret_schematic','poster_of_food_preparation','proton_chair','rancor_costume_instructions'] + templates +=['rotj_helmet','shard_of_the_serpent','stap1_vehicle_deed','target_dummy_black_sun'] + templates +=['target_dummy_rebel','target_dummy_stormtrooper','tatooine_dune_speeder','triumph'] + templates +=['ugnaught_costume_instructions','victory','wampa_costume_instructions','war_terminal'] + templates +=['warriors honor','wookie_home_banner_kit','wookie_life_day_orb','xeno_couch'] + templates +=['xeno_desk','xeno_desk_lamp','xeno_rug','xeno_table'] + + return templates + +def itemChances(): + chances = [1.908,1.908,1.908,1.908,1.908,1.908,1.908,1.908,1.908,1.908] #27 Exceptionals + chances += [1.908,1.908,1.908,1.908,1.908,1.908,1.908,1.908,1.908,1.908] + chances += [1.908,1.908,1.908,1.908,1.908,1.908,1.908] + chances += [0.636,0.636,0.636,0.636,0.636,0.636,0.636,0.636,0.636,0.636] #76 Rares + chances += [0.636,0.636,0.636,0.636,0.636,0.636,0.636,0.636,0.636,0.636] + chances += [0.636,0.636,0.636,0.636,0.636,0.636,0.636,0.636,0.636,0.636] + chances += [0.636,0.636,0.636,0.636,0.636,0.636,0.636,0.636,0.636,0.636] + chances += [0.636,0.636,0.636,0.636,0.636,0.636,0.636,0.636,0.636,0.636] + chances += [0.636,0.636,0.636,0.636,0.636,0.636,0.636,0.636,0.636,0.636] + chances += [0.636,0.636,0.636,0.636,0.636,0.636,0.636,0.636,0.636,0.636] + chances += [0.636,0.636,0.636,0.636,0.636,0.784] + + return chances + \ No newline at end of file diff --git a/scripts/loot/rarelootchestcontents/legendarytable.py b/scripts/loot/rarelootchestcontents/legendarytable.py new file mode 100644 index 00000000..c46a7855 --- /dev/null +++ b/scripts/loot/rarelootchestcontents/legendarytable.py @@ -0,0 +1,51 @@ + +def itemNames(): + # Legendary part + templates = ['biological_focus_crystal','synapse_focus_crystal','concentrated_bacta_tank','dna_storage_device_kowakian'] + templates +=['dug_costume_instructions','mercenaries_despair','mercenaries_lament','nightsister_melee_armguard'] + templates +=['rare_painting','sunriders_destiny'] # 10 items + # Exceptional part + templates +=['bacta_tank','legendary_e5_carbine','legendary_fwg5_pistol','legendary_nightsister_energy_lance'] + templates +=['legendary_power_hammer','legendary_stun_baton','legendary_t21_rifle','advertisement_rodian'] + templates +=['cunning_of_tyranus','dna_storage_device','dusk_in_kachirho','emperors_senate_office_chair'] + templates +=['fighter','gungan_statue_style_1_schematic','gungan_statue_style_2_schematic','gungan_statue_style_3_schematic'] + templates +=['gungan_statue_style_4_schematic','holo_entertainment_table','jedi_master_cloak','jedi_relic_1'] + templates +=['poster_block_turret_schematic','prayer_mobile','shard_of_ferocity','shard_of_retaliation'] + templates +=['sith_buff_holocron','sith_relic','war_phoenix'] + # Rare part + templates +=['animal_hide_rack_style_1','animal_hide_rack_style_2','animal_hide_rack_style_3','animal_hide_rack_style_4'] + templates +=['at_st_pilots_helmet','aurilian_sculpture_section_1','aurilian_sculpture_section_2','aurilian_sculpture_section_3'] + templates +=['aurilian_sculpture_section_4','banes_heart','bar_corner_piece_1','bar_corner_piece_2'] + templates +=['bar_corner_piece_3','bar_counter_large','bothan_beauty','bothan_buff'] + templates +=['cast_wing_in_flight','corellian_seaside','data_disk_hologram','decorative_bubble_tank'] + templates +=['droid_in_contrast','drum','emperors_eyes','family_bonds'] + templates +=['feared','fighter_study','fighters_courage','geonosian_costume_instructions'] + templates +=['hanging_life_day_orb','hutt_greed','imperial_oppression','jedi_statue_schematic'] + templates +=['jubilee_wheel_schematic','kachirho_wall_cornucopia','kowakian_cage','krayt_costume_instructions'] + templates +=['large_fruit_stand_schematic','large_unmarked_crate','lava_geode','life_day_lamp'] + templates +=['life_day_proud_wookie','life_day_red_robed_wookie','living_canals','lugjack_machine_schematic'] + templates +=['miniature_wroshyr_tree','modified_fusion_reactor_schematic','mustafarian_injector','mynock_costume_instructions'] + templates +=['no_division','nym_collectible_globe','pilgrimage','poster_of_a_ship_schematic'] + templates +=['poster_of_a_turret_schematic','poster_of_food_preparation','proton_chair','rancor_costume_instructions'] + templates +=['rotj_helmet','shard_of_the_serpent','stap1_vehicle_deed','target_dummy_black_sun'] + templates +=['target_dummy_rebel','target_dummy_stormtrooper','tatooine_dune_speeder','triumph'] + templates +=['ugnaught_costume_instructions','victory','wampa_costume_instructions','war_terminal'] + templates +=['warriors honor','wookie_home_banner_kit','wookie_life_day_orb','xeno_couch'] + templates +=['xeno_desk','xeno_desk_lamp','xeno_rug','xeno_table'] + return templates + +def itemChances(): + chances = [1.875,1.875,1.875,1.875,1.875,1.875,1.875,1.875,1.875,1.875] #10 Legendaries + chances += [1.25,1.25,1.25,1.25,1.25,1.25,1.25,1.25,1.25,1.25] #27 Exceptionals + chances += [1.25,1.25,1.25,1.25,1.25,1.25,1.25,1.25,1.25,1.25] + chances += [1.25,1.25,1.25,1.25,1.25,1.25,1.25] + chances += [0.625,0.625,0.625,0.625,0.625,0.625,0.625,0.625,0.625,0.625] #76 Rares + chances += [0.625,0.625,0.625,0.625,0.625,0.625,0.625,0.625,0.625,0.625] + chances += [0.625,0.625,0.625,0.625,0.625,0.625,0.625,0.625,0.625,0.625] + chances += [0.625,0.625,0.625,0.625,0.625,0.625,0.625,0.625,0.625,0.625] + chances += [0.625,0.625,0.625,0.625,0.625,0.625,0.625,0.625,0.625,0.625] + chances += [0.625,0.625,0.625,0.625,0.625,0.625,0.625,0.625,0.625,0.625] + chances += [0.625,0.625,0.625,0.625,0.625,0.625,0.625,0.625,0.625,0.625] + chances += [0.625,0.625,0.625,0.625,0.625,0.625] + + return chances \ No newline at end of file diff --git a/scripts/loot/rarelootchestcontents/raretable.py b/scripts/loot/rarelootchestcontents/raretable.py new file mode 100644 index 00000000..8e049299 --- /dev/null +++ b/scripts/loot/rarelootchestcontents/raretable.py @@ -0,0 +1,36 @@ + +def itemNames(): + + items = ['animal_hide_rack_style_1','animal_hide_rack_style_2','animal_hide_rack_style_3','animal_hide_rack_style_4'] + items +=['at_st_pilots_helmet','aurilian_sculpture_section_1','aurilian_sculpture_section_2','aurilian_sculpture_section_3'] + items +=['aurilian_sculpture_section_4','banes_heart','bar_corner_piece_1','bar_corner_piece_2'] + items +=['bar_corner_piece_3','bar_counter_large','bothan_beauty','bothan_buff'] + items +=['cast_wing_in_flight','corellian_seaside','data_disk_hologram','decorative_bubble_tank'] + items +=['droid_in_contrast','drum','emperors_eyes','family_bonds'] + items +=['feared','fighter_study','fighters_courage','geonosian_costume_instructions'] + items +=['hanging_life_day_orb','hutt_greed','imperial_oppression','jedi_statue_schematic'] + items +=['jubilee_wheel_schematic','kachirho_wall_cornucopia','kowakian_cage','krayt_costume_instructions'] + items +=['large_fruit_stand_schematic','large_unmarked_crate','lava_geode','life_day_lamp'] + items +=['life_day_proud_wookie','life_day_red_robed_wookie','living_canals','lugjack_machine_schematic'] + items +=['miniature_wroshyr_tree','modified_fusion_reactor_schematic','mustafarian_injector','mynock_costume_instructions'] + items +=['no_division','nym_collectible_globe','pilgrimage','poster_of_a_ship_schematic'] + items +=['poster_of_a_turret_schematic','poster_of_food_preparation','proton_chair','rancor_costume_instructions'] + items +=['rotj_helmet','shard_of_the_serpent','stap1_vehicle_deed','target_dummy_black_sun'] + items +=['target_dummy_rebel','target_dummy_stormtrooper','tatooine_dune_speeder','triumph'] + items +=['ugnaught_costume_instructions','victory','wampa_costume_instructions','war_terminal'] + items +=['warriors honor','wookie_home_banner_kit','wookie_life_day_orb','xeno_couch'] + items +=['xeno_desk','xeno_desk_lamp','xeno_rug','xeno_table'] + return items + +def itemChances(): + + chances=[1.315,1.315,1.315,1.315,1.315,1.315,1.315,1.315,1.315,1.315] + chances+=[1.315,1.315,1.315,1.315,1.315,1.315,1.315,1.315,1.315,1.315] + chances+=[1.315,1.315,1.315,1.315,1.315,1.315,1.315,1.315,1.315,1.315] + chances+=[1.315,1.315,1.315,1.315,1.315,1.315,1.315,1.315,1.315,1.315] + chances+=[1.315,1.315,1.315,1.315,1.315,1.315,1.315,1.315,1.315,1.315] + chances+=[1.315,1.315,1.315,1.315,1.315,1.315,1.315,1.315,1.315,1.315] + chances+=[1.315,1.315,1.315,1.315,1.315,1.315,1.315,1.315,1.315,1.315] + chances+=[1.315,1.315,1.315,1.315,1.315,1.375] + return chances ##Sum must be exactly 100 76 items -> 1.315 + \ No newline at end of file diff --git a/scripts/mobiles/canon/jedi_master.py b/scripts/mobiles/canon/jedi_master.py new file mode 100644 index 00000000..afc80223 --- /dev/null +++ b/scripts/mobiles/canon/jedi_master.py @@ -0,0 +1,41 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('eow_dark_jedi_sentinel_uber') + mobileTemplate.setLevel(90) + mobileTemplate.setDifficulty(2) + mobileTemplate.setAttackRange(6) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(9) + + templates = Vector() + templates.add('object/mobile/shared_dressed_dark_jedi_master_female_twk_01.iff') + templates.add('object/mobile/shared_dressed_dark_jedi_master_female_twk_02.iff') + templates.add('object/mobile/shared_dressed_dark_jedi_master_female_zab_01.iff') + templates.add('object/mobile/shared_dressed_dark_jedi_master_female_zab_02.iff') + templates.add('object/mobile/shared_dressed_dark_jedi_master_male_human_01.iff') + templates.add('object/mobile/shared_dressed_dark_jedi_master_male_human_04.iff') + templates.add('object/mobile/shared_dressed_dark_jedi_master_male_human_05.iff') + templates.add('object/mobile/shared_dressed_dark_jedi_master_male_human_06.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/sword/crafted_saber/shared_sword_lightsaber_one_handed_gen5.iff', 9, 1.0) + weaponTemplates.add(weapontemplate) + weapontemplate = WeaponTemplate('object/weapon/melee/2h_sword/crafted_saber/shared_sword_lightsaber_two_handed_gen5.iff', 10, 1.0) + weaponTemplates.add(weapontemplate) + weapontemplate = WeaponTemplate('object/weapon/melee/polearm/crafted_saber/shared_sword_lightsaber_polearm_gen5.iff', 11, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('saberHit') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('jedi_master', mobileTemplate) + \ No newline at end of file diff --git a/scripts/mobiles/canon/scout_trooper.py b/scripts/mobiles/canon/scout_trooper.py new file mode 100644 index 00000000..2b446944 --- /dev/null +++ b/scripts/mobiles/canon/scout_trooper.py @@ -0,0 +1,31 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('scout_trooper') + mobileTemplate.setLevel(90) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(24) + mobileTemplate.setAttackSpeed(0.4) + mobileTemplate.setWeaponType(1) + + templates = Vector() + templates.add('object/mobile/shared_dressed_scout_trooper_m.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/pistol/shared_pistol_scout_blaster.iff', 0, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedShot') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('scout_trooper', mobileTemplate) + diff --git a/scripts/mobiles/canon/storm_commando.py b/scripts/mobiles/canon/storm_commando.py new file mode 100644 index 00000000..b6bf6523 --- /dev/null +++ b/scripts/mobiles/canon/storm_commando.py @@ -0,0 +1,33 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('storm_commando') + mobileTemplate.setLevel(71) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(24) + mobileTemplate.setAttackSpeed(0.4) + mobileTemplate.setWeaponType(1) + + templates = Vector() + templates.add('object/mobile/shared_dressed_scout_trooper_black_black.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/pistol/shared_pistol_scout_blaster.iff', 0, 1.0) + weaponTemplates.add(weapontemplate) + weapontemplate = WeaponTemplate('object/weapon/ranged/pistol/shared_pistol_dx2.iff', 0, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedShot') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('storm_commando', mobileTemplate) + diff --git a/scripts/mobiles/canon/stormtrooper.py b/scripts/mobiles/canon/stormtrooper.py new file mode 100644 index 00000000..a7a49123 --- /dev/null +++ b/scripts/mobiles/canon/stormtrooper.py @@ -0,0 +1,33 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('stormtrooper') + mobileTemplate.setLevel(90) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(24) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(0) + + templates = Vector() + templates.add('object/mobile/shared_dressed_stormtrooper_m.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/rifle/shared_rifle_e11.iff', 0, 1.0) + weaponTemplates.add(weapontemplate) + weapontemplate = WeaponTemplate('object/weapon/ranged/rifle/shared_rifle_t21.iff', 0, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedShot') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('stormtrooper', mobileTemplate) + \ No newline at end of file diff --git a/scripts/mobiles/canon/stormtrooper_squad_leader.py b/scripts/mobiles/canon/stormtrooper_squad_leader.py new file mode 100644 index 00000000..8fbea697 --- /dev/null +++ b/scripts/mobiles/canon/stormtrooper_squad_leader.py @@ -0,0 +1,31 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('stormtrooper_squad_leader') + mobileTemplate.setLevel(28) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(24) + mobileTemplate.setAttackSpeed(0.4) + mobileTemplate.setWeaponType(1) + + templates = Vector() + templates.add('object/mobile/shared_dressed_stormtrooper_squad_leader_white_white.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/pistol/shared_pistol_scout_blaster.iff', 0, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedShot') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('stormtrooper_squad_leader', mobileTemplate) + diff --git a/scripts/mobiles/canon/swamp_trooper.py b/scripts/mobiles/canon/swamp_trooper.py new file mode 100644 index 00000000..4ade7e9a --- /dev/null +++ b/scripts/mobiles/canon/swamp_trooper.py @@ -0,0 +1,31 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('swamp_trooper') + mobileTemplate.setLevel(33) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(24) + mobileTemplate.setAttackSpeed(0.4) + mobileTemplate.setWeaponType(0) + + templates = Vector() + templates.add('object/mobile/shared_dressed_swamp_trooper_m.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/pistol/shared_pistol_scout_blaster.iff', 0, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedShot') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('swamp_trooper', mobileTemplate) + diff --git a/scripts/mobiles/corellia/acicular_defender.py b/scripts/mobiles/corellia/acicular_defender.py new file mode 100644 index 00000000..1a782b1d --- /dev/null +++ b/scripts/mobiles/corellia/acicular_defender.py @@ -0,0 +1,43 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('paralope_acicular_defender') + mobileTemplate.setLevel(5) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setMeatType("Herbivore Meat") + mobileTemplate.setMeatAmount(5) + mobileTemplate.setHideType("Wooly Hide") + mobileTemplate.setHideAmount(3) + mobileTemplate.setBoneType("Mammal Bones") + mobileTemplate.setBoneAmount(2) + mobileTemplate.setSocialGroup("paralope") + mobileTemplate.setAssistRange(6) + mobileTemplate.setStalker(False) + + templates = Vector() + templates.add('object/mobile/shared_paralope.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('acicular_defender', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/corellia/afarathu_brute.py b/scripts/mobiles/corellia/afarathu_brute.py new file mode 100644 index 00000000..7f0117bb --- /dev/null +++ b/scripts/mobiles/corellia/afarathu_brute.py @@ -0,0 +1,66 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('afarathu_cult_brute') + mobileTemplate.setLevel(29) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(15) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(1) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(True) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("afarathu") + mobileTemplate.setAssistRange(6) + mobileTemplate.setStalker(True) + mobileTemplate.setOptionsBitmask(192) + + templates = Vector() + templates.add('object/mobile/shared_dressed_selonian_m_01.iff') + templates.add('object/mobile/shared_dressed_selonian_m_02.iff') + templates.add('object/mobile/shared_dressed_selonian_m_03.iff') + templates.add('object/mobile/shared_dressed_selonian_m_04.iff') + templates.add('object/mobile/shared_dressed_selonian_m_05.iff') + templates.add('object/mobile/shared_dressed_selonian_m_06.iff') + templates.add('object/mobile/shared_dressed_selonian_m_07.iff') + templates.add('object/mobile/shared_dressed_selonian_m_08.iff') + templates.add('object/mobile/shared_dressed_selonian_m_09.iff') + templates.add('object/mobile/shared_dressed_selonian_m_10.iff') + templates.add('object/mobile/shared_dressed_selonian_m_11.iff') + templates.add('object/mobile/shared_dressed_selonian_m_12.iff') + templates.add('object/mobile/shared_dressed_selonian_f_01.iff') + templates.add('object/mobile/shared_dressed_selonian_f_02.iff') + templates.add('object/mobile/shared_dressed_selonian_f_03.iff') + templates.add('object/mobile/shared_dressed_selonian_f_04.iff') + templates.add('object/mobile/shared_dressed_selonian_f_05.iff') + templates.add('object/mobile/shared_dressed_selonian_f_06.iff') + templates.add('object/mobile/shared_dressed_selonian_f_07.iff') + templates.add('object/mobile/shared_dressed_selonian_f_08.iff') + templates.add('object/mobile/shared_dressed_selonian_f_09.iff') + templates.add('object/mobile/shared_dressed_selonian_f_10.iff') + templates.add('object/mobile/shared_dressed_selonian_f_11.iff') + templates.add('object/mobile/shared_dressed_selonian_f_12.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/carbine/shared_carbine_e11.iff', 1, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedShot') + mobileTemplate.setAttacks(attacks) + + lootPoolNames_1 = ['Junk'] + lootPoolChances_1 = [100] + lootGroupChance_1 = 100 + mobileTemplate.addToLootGroups(lootPoolNames_1,lootPoolChances_1,lootGroupChance_1) + + core.spawnService.addMobileTemplate('afarathu_brute', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/corellia/afarathu_cult_bodyguard.py b/scripts/mobiles/corellia/afarathu_cult_bodyguard.py new file mode 100644 index 00000000..ee9ed78a --- /dev/null +++ b/scripts/mobiles/corellia/afarathu_cult_bodyguard.py @@ -0,0 +1,66 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('afarathu_cult_bodyguard') + mobileTemplate.setLevel(30) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(15) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(1) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(True) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("afarathu") + mobileTemplate.setAssistRange(6) + mobileTemplate.setStalker(True) + mobileTemplate.setOptionsBitmask(192) + + templates = Vector() + templates.add('object/mobile/shared_dressed_selonian_m_01.iff') + templates.add('object/mobile/shared_dressed_selonian_m_02.iff') + templates.add('object/mobile/shared_dressed_selonian_m_03.iff') + templates.add('object/mobile/shared_dressed_selonian_m_04.iff') + templates.add('object/mobile/shared_dressed_selonian_m_05.iff') + templates.add('object/mobile/shared_dressed_selonian_m_06.iff') + templates.add('object/mobile/shared_dressed_selonian_m_07.iff') + templates.add('object/mobile/shared_dressed_selonian_m_08.iff') + templates.add('object/mobile/shared_dressed_selonian_m_09.iff') + templates.add('object/mobile/shared_dressed_selonian_m_10.iff') + templates.add('object/mobile/shared_dressed_selonian_m_11.iff') + templates.add('object/mobile/shared_dressed_selonian_m_12.iff') + templates.add('object/mobile/shared_dressed_selonian_f_01.iff') + templates.add('object/mobile/shared_dressed_selonian_f_02.iff') + templates.add('object/mobile/shared_dressed_selonian_f_03.iff') + templates.add('object/mobile/shared_dressed_selonian_f_04.iff') + templates.add('object/mobile/shared_dressed_selonian_f_05.iff') + templates.add('object/mobile/shared_dressed_selonian_f_06.iff') + templates.add('object/mobile/shared_dressed_selonian_f_07.iff') + templates.add('object/mobile/shared_dressed_selonian_f_08.iff') + templates.add('object/mobile/shared_dressed_selonian_f_09.iff') + templates.add('object/mobile/shared_dressed_selonian_f_10.iff') + templates.add('object/mobile/shared_dressed_selonian_f_11.iff') + templates.add('object/mobile/shared_dressed_selonian_f_12.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/carbine/shared_carbine_e11.iff', 1, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedShot') + mobileTemplate.setAttacks(attacks) + + lootPoolNames_1 = ['Junk'] + lootPoolChances_1 = [100] + lootGroupChance_1 = 100 + mobileTemplate.addToLootGroups(lootPoolNames_1,lootPoolChances_1,lootGroupChance_1) + + core.spawnService.addMobileTemplate('afarathu_cult_bodyguard', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/corellia/afarathu_cult_follower.py b/scripts/mobiles/corellia/afarathu_cult_follower.py new file mode 100644 index 00000000..05054521 --- /dev/null +++ b/scripts/mobiles/corellia/afarathu_cult_follower.py @@ -0,0 +1,66 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('afarathu_cult_brute') + mobileTemplate.setLevel(30) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(7) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(True) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("afarathu") + mobileTemplate.setAssistRange(6) + mobileTemplate.setStalker(True) + mobileTemplate.setOptionsBitmask(128) + + templates = Vector() + templates.add('object/mobile/shared_dressed_selonian_m_01.iff') + templates.add('object/mobile/shared_dressed_selonian_m_02.iff') + templates.add('object/mobile/shared_dressed_selonian_m_03.iff') + templates.add('object/mobile/shared_dressed_selonian_m_04.iff') + templates.add('object/mobile/shared_dressed_selonian_m_05.iff') + templates.add('object/mobile/shared_dressed_selonian_m_06.iff') + templates.add('object/mobile/shared_dressed_selonian_m_07.iff') + templates.add('object/mobile/shared_dressed_selonian_m_08.iff') + templates.add('object/mobile/shared_dressed_selonian_m_09.iff') + templates.add('object/mobile/shared_dressed_selonian_m_10.iff') + templates.add('object/mobile/shared_dressed_selonian_m_11.iff') + templates.add('object/mobile/shared_dressed_selonian_m_12.iff') + templates.add('object/mobile/shared_dressed_selonian_f_01.iff') + templates.add('object/mobile/shared_dressed_selonian_f_02.iff') + templates.add('object/mobile/shared_dressed_selonian_f_03.iff') + templates.add('object/mobile/shared_dressed_selonian_f_04.iff') + templates.add('object/mobile/shared_dressed_selonian_f_05.iff') + templates.add('object/mobile/shared_dressed_selonian_f_06.iff') + templates.add('object/mobile/shared_dressed_selonian_f_07.iff') + templates.add('object/mobile/shared_dressed_selonian_f_08.iff') + templates.add('object/mobile/shared_dressed_selonian_f_09.iff') + templates.add('object/mobile/shared_dressed_selonian_f_10.iff') + templates.add('object/mobile/shared_dressed_selonian_f_11.iff') + templates.add('object/mobile/shared_dressed_selonian_f_12.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/polearm/shared_polearm_vibro_axe.iff', 7, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('meleeHit') + mobileTemplate.setAttacks(attacks) + + lootPoolNames_1 = ['Junk'] + lootPoolChances_1 = [100] + lootGroupChance_1 = 100 + mobileTemplate.addToLootGroups(lootPoolNames_1,lootPoolChances_1,lootGroupChance_1) + + core.spawnService.addMobileTemplate('afarathu_cult_follower', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/corellia/afarathu_cult_leader.py b/scripts/mobiles/corellia/afarathu_cult_leader.py new file mode 100644 index 00000000..0a477fc2 --- /dev/null +++ b/scripts/mobiles/corellia/afarathu_cult_leader.py @@ -0,0 +1,66 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('afarathu_cult_leader') + mobileTemplate.setLevel(31) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(15) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(1) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(True) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("afarathu") + mobileTemplate.setAssistRange(6) + mobileTemplate.setStalker(True) + mobileTemplate.setOptionsBitmask(192) + + templates = Vector() + templates.add('object/mobile/shared_dressed_selonian_m_01.iff') + templates.add('object/mobile/shared_dressed_selonian_m_02.iff') + templates.add('object/mobile/shared_dressed_selonian_m_03.iff') + templates.add('object/mobile/shared_dressed_selonian_m_04.iff') + templates.add('object/mobile/shared_dressed_selonian_m_05.iff') + templates.add('object/mobile/shared_dressed_selonian_m_06.iff') + templates.add('object/mobile/shared_dressed_selonian_m_07.iff') + templates.add('object/mobile/shared_dressed_selonian_m_08.iff') + templates.add('object/mobile/shared_dressed_selonian_m_09.iff') + templates.add('object/mobile/shared_dressed_selonian_m_10.iff') + templates.add('object/mobile/shared_dressed_selonian_m_11.iff') + templates.add('object/mobile/shared_dressed_selonian_m_12.iff') + templates.add('object/mobile/shared_dressed_selonian_f_01.iff') + templates.add('object/mobile/shared_dressed_selonian_f_02.iff') + templates.add('object/mobile/shared_dressed_selonian_f_03.iff') + templates.add('object/mobile/shared_dressed_selonian_f_04.iff') + templates.add('object/mobile/shared_dressed_selonian_f_05.iff') + templates.add('object/mobile/shared_dressed_selonian_f_06.iff') + templates.add('object/mobile/shared_dressed_selonian_f_07.iff') + templates.add('object/mobile/shared_dressed_selonian_f_08.iff') + templates.add('object/mobile/shared_dressed_selonian_f_09.iff') + templates.add('object/mobile/shared_dressed_selonian_f_10.iff') + templates.add('object/mobile/shared_dressed_selonian_f_11.iff') + templates.add('object/mobile/shared_dressed_selonian_f_12.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/carbine/shared_carbine_e11.iff', 1, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedShot') + mobileTemplate.setAttacks(attacks) + + lootPoolNames_1 = ['Junk'] + lootPoolChances_1 = [100] + lootGroupChance_1 = 100 + mobileTemplate.addToLootGroups(lootPoolNames_1,lootPoolChances_1,lootGroupChance_1) + + core.spawnService.addMobileTemplate('afarathu_cult_leader', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/corellia/afarathu_cult_zealot.py b/scripts/mobiles/corellia/afarathu_cult_zealot.py new file mode 100644 index 00000000..a802d628 --- /dev/null +++ b/scripts/mobiles/corellia/afarathu_cult_zealot.py @@ -0,0 +1,66 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('afarathu_cult_zealot') + mobileTemplate.setLevel(30) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(15) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(1) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(True) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("afarathu") + mobileTemplate.setAssistRange(6) + mobileTemplate.setStalker(True) + mobileTemplate.setOptionsBitmask(192) + + templates = Vector() + templates.add('object/mobile/shared_dressed_selonian_m_01.iff') + templates.add('object/mobile/shared_dressed_selonian_m_02.iff') + templates.add('object/mobile/shared_dressed_selonian_m_03.iff') + templates.add('object/mobile/shared_dressed_selonian_m_04.iff') + templates.add('object/mobile/shared_dressed_selonian_m_05.iff') + templates.add('object/mobile/shared_dressed_selonian_m_06.iff') + templates.add('object/mobile/shared_dressed_selonian_m_07.iff') + templates.add('object/mobile/shared_dressed_selonian_m_08.iff') + templates.add('object/mobile/shared_dressed_selonian_m_09.iff') + templates.add('object/mobile/shared_dressed_selonian_m_10.iff') + templates.add('object/mobile/shared_dressed_selonian_m_11.iff') + templates.add('object/mobile/shared_dressed_selonian_m_12.iff') + templates.add('object/mobile/shared_dressed_selonian_f_01.iff') + templates.add('object/mobile/shared_dressed_selonian_f_02.iff') + templates.add('object/mobile/shared_dressed_selonian_f_03.iff') + templates.add('object/mobile/shared_dressed_selonian_f_04.iff') + templates.add('object/mobile/shared_dressed_selonian_f_05.iff') + templates.add('object/mobile/shared_dressed_selonian_f_06.iff') + templates.add('object/mobile/shared_dressed_selonian_f_07.iff') + templates.add('object/mobile/shared_dressed_selonian_f_08.iff') + templates.add('object/mobile/shared_dressed_selonian_f_09.iff') + templates.add('object/mobile/shared_dressed_selonian_f_10.iff') + templates.add('object/mobile/shared_dressed_selonian_f_11.iff') + templates.add('object/mobile/shared_dressed_selonian_f_12.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/carbine/shared_carbine_e11.iff', 1, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedShot') + mobileTemplate.setAttacks(attacks) + + lootPoolNames_1 = ['Junk'] + lootPoolChances_1 = [100] + lootGroupChance_1 = 100 + mobileTemplate.addToLootGroups(lootPoolNames_1,lootPoolChances_1,lootGroupChance_1) + + core.spawnService.addMobileTemplate('afarathu_cult_zealot', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/corellia/afarathu_hellion.py b/scripts/mobiles/corellia/afarathu_hellion.py new file mode 100644 index 00000000..1fd90fdc --- /dev/null +++ b/scripts/mobiles/corellia/afarathu_hellion.py @@ -0,0 +1,66 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('afarathu_cult_hellion') + mobileTemplate.setLevel(30) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(15) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(1) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(True) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("afarathu") + mobileTemplate.setAssistRange(6) + mobileTemplate.setStalker(True) + mobileTemplate.setOptionsBitmask(192) + + templates = Vector() + templates.add('object/mobile/shared_dressed_selonian_m_01.iff') + templates.add('object/mobile/shared_dressed_selonian_m_02.iff') + templates.add('object/mobile/shared_dressed_selonian_m_03.iff') + templates.add('object/mobile/shared_dressed_selonian_m_04.iff') + templates.add('object/mobile/shared_dressed_selonian_m_05.iff') + templates.add('object/mobile/shared_dressed_selonian_m_06.iff') + templates.add('object/mobile/shared_dressed_selonian_m_07.iff') + templates.add('object/mobile/shared_dressed_selonian_m_08.iff') + templates.add('object/mobile/shared_dressed_selonian_m_09.iff') + templates.add('object/mobile/shared_dressed_selonian_m_10.iff') + templates.add('object/mobile/shared_dressed_selonian_m_11.iff') + templates.add('object/mobile/shared_dressed_selonian_m_12.iff') + templates.add('object/mobile/shared_dressed_selonian_f_01.iff') + templates.add('object/mobile/shared_dressed_selonian_f_02.iff') + templates.add('object/mobile/shared_dressed_selonian_f_03.iff') + templates.add('object/mobile/shared_dressed_selonian_f_04.iff') + templates.add('object/mobile/shared_dressed_selonian_f_05.iff') + templates.add('object/mobile/shared_dressed_selonian_f_06.iff') + templates.add('object/mobile/shared_dressed_selonian_f_07.iff') + templates.add('object/mobile/shared_dressed_selonian_f_08.iff') + templates.add('object/mobile/shared_dressed_selonian_f_09.iff') + templates.add('object/mobile/shared_dressed_selonian_f_10.iff') + templates.add('object/mobile/shared_dressed_selonian_f_11.iff') + templates.add('object/mobile/shared_dressed_selonian_f_12.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/carbine/shared_carbine_e11.iff', 1, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedShot') + mobileTemplate.setAttacks(attacks) + + lootPoolNames_1 = ['Junk'] + lootPoolChances_1 = [100] + lootGroupChance_1 = 100 + mobileTemplate.addToLootGroups(lootPoolNames_1,lootPoolChances_1,lootGroupChance_1) + + core.spawnService.addMobileTemplate('afarathu_cult_hellion', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/corellia/afarathu_ruffian.py b/scripts/mobiles/corellia/afarathu_ruffian.py new file mode 100644 index 00000000..e49ae409 --- /dev/null +++ b/scripts/mobiles/corellia/afarathu_ruffian.py @@ -0,0 +1,66 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('afarathu_cult_ruffian') + mobileTemplate.setLevel(30) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(15) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(1) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(True) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("afarathu") + mobileTemplate.setAssistRange(6) + mobileTemplate.setStalker(True) + mobileTemplate.setOptionsBitmask(192) + + templates = Vector() + templates.add('object/mobile/shared_dressed_selonian_m_01.iff') + templates.add('object/mobile/shared_dressed_selonian_m_02.iff') + templates.add('object/mobile/shared_dressed_selonian_m_03.iff') + templates.add('object/mobile/shared_dressed_selonian_m_04.iff') + templates.add('object/mobile/shared_dressed_selonian_m_05.iff') + templates.add('object/mobile/shared_dressed_selonian_m_06.iff') + templates.add('object/mobile/shared_dressed_selonian_m_07.iff') + templates.add('object/mobile/shared_dressed_selonian_m_08.iff') + templates.add('object/mobile/shared_dressed_selonian_m_09.iff') + templates.add('object/mobile/shared_dressed_selonian_m_10.iff') + templates.add('object/mobile/shared_dressed_selonian_m_11.iff') + templates.add('object/mobile/shared_dressed_selonian_m_12.iff') + templates.add('object/mobile/shared_dressed_selonian_f_01.iff') + templates.add('object/mobile/shared_dressed_selonian_f_02.iff') + templates.add('object/mobile/shared_dressed_selonian_f_03.iff') + templates.add('object/mobile/shared_dressed_selonian_f_04.iff') + templates.add('object/mobile/shared_dressed_selonian_f_05.iff') + templates.add('object/mobile/shared_dressed_selonian_f_06.iff') + templates.add('object/mobile/shared_dressed_selonian_f_07.iff') + templates.add('object/mobile/shared_dressed_selonian_f_08.iff') + templates.add('object/mobile/shared_dressed_selonian_f_09.iff') + templates.add('object/mobile/shared_dressed_selonian_f_10.iff') + templates.add('object/mobile/shared_dressed_selonian_f_11.iff') + templates.add('object/mobile/shared_dressed_selonian_f_12.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/carbine/shared_carbine_e5.iff', 1, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedShot') + mobileTemplate.setAttacks(attacks) + + lootPoolNames_1 = ['Junk'] + lootPoolChances_1 = [100] + lootGroupChance_1 = 100 + mobileTemplate.addToLootGroups(lootPoolNames_1,lootPoolChances_1,lootGroupChance_1) + + core.spawnService.addMobileTemplate('afarathu_cult_ruffian', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/corellia/afarathu_savage.py b/scripts/mobiles/corellia/afarathu_savage.py new file mode 100644 index 00000000..cce01993 --- /dev/null +++ b/scripts/mobiles/corellia/afarathu_savage.py @@ -0,0 +1,66 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('afarathu_cult_savage') + mobileTemplate.setLevel(30) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(15) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(1) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(True) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("afarathu") + mobileTemplate.setAssistRange(6) + mobileTemplate.setStalker(True) + mobileTemplate.setOptionsBitmask(192) + + templates = Vector() + templates.add('object/mobile/shared_dressed_selonian_m_01.iff') + templates.add('object/mobile/shared_dressed_selonian_m_02.iff') + templates.add('object/mobile/shared_dressed_selonian_m_03.iff') + templates.add('object/mobile/shared_dressed_selonian_m_04.iff') + templates.add('object/mobile/shared_dressed_selonian_m_05.iff') + templates.add('object/mobile/shared_dressed_selonian_m_06.iff') + templates.add('object/mobile/shared_dressed_selonian_m_07.iff') + templates.add('object/mobile/shared_dressed_selonian_m_08.iff') + templates.add('object/mobile/shared_dressed_selonian_m_09.iff') + templates.add('object/mobile/shared_dressed_selonian_m_10.iff') + templates.add('object/mobile/shared_dressed_selonian_m_11.iff') + templates.add('object/mobile/shared_dressed_selonian_m_12.iff') + templates.add('object/mobile/shared_dressed_selonian_f_01.iff') + templates.add('object/mobile/shared_dressed_selonian_f_02.iff') + templates.add('object/mobile/shared_dressed_selonian_f_03.iff') + templates.add('object/mobile/shared_dressed_selonian_f_04.iff') + templates.add('object/mobile/shared_dressed_selonian_f_05.iff') + templates.add('object/mobile/shared_dressed_selonian_f_06.iff') + templates.add('object/mobile/shared_dressed_selonian_f_07.iff') + templates.add('object/mobile/shared_dressed_selonian_f_08.iff') + templates.add('object/mobile/shared_dressed_selonian_f_09.iff') + templates.add('object/mobile/shared_dressed_selonian_f_10.iff') + templates.add('object/mobile/shared_dressed_selonian_f_11.iff') + templates.add('object/mobile/shared_dressed_selonian_f_12.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/carbine/shared_carbine_e11.iff', 1, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedShot') + mobileTemplate.setAttacks(attacks) + + lootPoolNames_1 = ['Junk'] + lootPoolChances_1 = [100] + lootGroupChance_1 = 100 + mobileTemplate.addToLootGroups(lootPoolNames_1,lootPoolChances_1,lootGroupChance_1) + + core.spawnService.addMobileTemplate('afarathu_savage', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/corellia/agrilat_rasp.py b/scripts/mobiles/corellia/agrilat_rasp.py new file mode 100644 index 00000000..9620f42c --- /dev/null +++ b/scripts/mobiles/corellia/agrilat_rasp.py @@ -0,0 +1,41 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('agrilat_plumed_rasp') + mobileTemplate.setLevel(34) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setMeatType("Avian Meat") + mobileTemplate.setMeatAmount(3) + mobileTemplate.setBoneType("Avian Bones") + mobileTemplate.setBoneAmount(2) + mobileTemplate.setSocialGroup("rasp") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(False) + + templates = Vector() + templates.add('object/mobile/shared_plumed_rasp.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('agrilat_rasp', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/corellia/armor_thief.py b/scripts/mobiles/corellia/armor_thief.py new file mode 100644 index 00000000..e47be728 --- /dev/null +++ b/scripts/mobiles/corellia/armor_thief.py @@ -0,0 +1,44 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('corellia_coronet_armor_thief') + mobileTemplate.setLevel(17) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(15) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(2) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("self") + mobileTemplate.setAssistRange(6) + mobileTemplate.setStalker(True) + mobileTemplate.setOptionsBitmask(128) + + templates = Vector() + templates.add('object/mobile/shared_dressed_ruffian_zabrak_female_01.iff') + templates.add('object/mobile/shared_dressed_ruffian_zabrak_male_01.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/pistol/shared_pistol_d18.iff', 2, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedShot') + mobileTemplate.setAttacks(attacks) + + lootPoolNames_1 = ['Junk'] + lootPoolChances_1 = [100] + lootGroupChance_1 = 100 + mobileTemplate.addToLootGroups(lootPoolNames_1,lootPoolChances_1,lootGroupChance_1) + + core.spawnService.addMobileTemplate('armor_thief', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/corellia/bageraset.py b/scripts/mobiles/corellia/bageraset.py new file mode 100644 index 00000000..0d9175b6 --- /dev/null +++ b/scripts/mobiles/corellia/bageraset.py @@ -0,0 +1,45 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('bageraset') + mobileTemplate.setLevel(29) + mobileTemplate.setMinLevel(29) + mobileTemplate.setMaxLevel(31) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setMeatType("Herbivore Meat") + mobileTemplate.setMeatAmount(230) + mobileTemplate.setHideType("Leathery Hide") + mobileTemplate.setHideAmount(130) + mobileTemplate.setBoneType("Mammal Bones") + mobileTemplate.setBoneAmount(80) + mobileTemplate.setSocialGroup("bageraset") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(False) + + templates = Vector() + templates.add('object/mobile/shared_bageraset.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('bageraset', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/corellia/bageraset_bruiser.py b/scripts/mobiles/corellia/bageraset_bruiser.py new file mode 100644 index 00000000..23161eba --- /dev/null +++ b/scripts/mobiles/corellia/bageraset_bruiser.py @@ -0,0 +1,43 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('bageraset_bruiser') + mobileTemplate.setLevel(9) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setMeatType("Herbivore Meat") + mobileTemplate.setMeatAmount(230) + mobileTemplate.setHideType("Leathery Hide") + mobileTemplate.setHideAmount(130) + mobileTemplate.setBoneType("Mammal Bones") + mobileTemplate.setBoneAmount(80) + mobileTemplate.setSocialGroup("bageraset") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(False) + + templates = Vector() + templates.add('object/mobile/shared_bageraset.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('bageraset_bruiser', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/corellia/beldonnas_league_enforcer.py b/scripts/mobiles/corellia/beldonnas_league_enforcer.py new file mode 100644 index 00000000..6164ee84 --- /dev/null +++ b/scripts/mobiles/corellia/beldonnas_league_enforcer.py @@ -0,0 +1,44 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('beldonnas_enforcer') + mobileTemplate.setLevel(40) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(15) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(1) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(True) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("beldonnas league") + mobileTemplate.setAssistRange(6) + mobileTemplate.setStalker(True) + mobileTemplate.setOptionsBitmask(192) + + templates = Vector() + templates.add('object/mobile/shared_dressed_mercenary_elite_hum_f_01.iff') + templates.add('object/mobile/shared_dressed_mercenary_elite_hum_m_01.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/carbine/shared_carbine_e5.iff', 1, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedShot') + mobileTemplate.setAttacks(attacks) + + lootPoolNames_1 = ['Junk'] + lootPoolChances_1 = [100] + lootGroupChance_1 = 100 + mobileTemplate.addToLootGroups(lootPoolNames_1,lootPoolChances_1,lootGroupChance_1) + + core.spawnService.addMobileTemplate('beldonnas_enforcer', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/corellia/beldonnas_league_marshal.py b/scripts/mobiles/corellia/beldonnas_league_marshal.py new file mode 100644 index 00000000..4d042c5a --- /dev/null +++ b/scripts/mobiles/corellia/beldonnas_league_marshal.py @@ -0,0 +1,44 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('beldonnas_marshal') + mobileTemplate.setLevel(40) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(15) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(1) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(True) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("beldonnas league") + mobileTemplate.setAssistRange(6) + mobileTemplate.setStalker(True) + mobileTemplate.setOptionsBitmask(192) + + templates = Vector() + templates.add('object/mobile/shared_dressed_mercenary_elite_hum_f_01.iff') + templates.add('object/mobile/shared_dressed_mercenary_elite_hum_m_01.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/carbine/shared_carbine_e5.iff', 1, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedShot') + mobileTemplate.setAttacks(attacks) + + lootPoolNames_1 = ['Junk'] + lootPoolChances_1 = [100] + lootGroupChance_1 = 100 + mobileTemplate.addToLootGroups(lootPoolNames_1,lootPoolChances_1,lootGroupChance_1) + + core.spawnService.addMobileTemplate('beldonnas_marshal', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/corellia/beldonnas_league_scout.py b/scripts/mobiles/corellia/beldonnas_league_scout.py new file mode 100644 index 00000000..6fecb7b0 --- /dev/null +++ b/scripts/mobiles/corellia/beldonnas_league_scout.py @@ -0,0 +1,44 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('beldonnas_scout') + mobileTemplate.setLevel(40) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(15) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(1) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(True) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("beldonnas league") + mobileTemplate.setAssistRange(6) + mobileTemplate.setStalker(True) + mobileTemplate.setOptionsBitmask(192) + + templates = Vector() + templates.add('object/mobile/shared_dressed_mercenary_elite_hum_f_01.iff') + templates.add('object/mobile/shared_dressed_mercenary_elite_hum_m_01.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/carbine/shared_carbine_e5.iff', 1, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedShot') + mobileTemplate.setAttacks(attacks) + + lootPoolNames_1 = ['Junk'] + lootPoolChances_1 = [100] + lootGroupChance_1 = 100 + mobileTemplate.addToLootGroups(lootPoolNames_1,lootPoolChances_1,lootGroupChance_1) + + core.spawnService.addMobileTemplate('beldonnas_scout', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/corellia/beldonnas_league_soldier.py b/scripts/mobiles/corellia/beldonnas_league_soldier.py new file mode 100644 index 00000000..8006b24e --- /dev/null +++ b/scripts/mobiles/corellia/beldonnas_league_soldier.py @@ -0,0 +1,44 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('beldonnas_soldier') + mobileTemplate.setLevel(40) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(15) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(1) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(True) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("self") + mobileTemplate.setAssistRange(6) + mobileTemplate.setStalker(True) + mobileTemplate.setOptionsBitmask(192) + + templates = Vector() + templates.add('object/mobile/shared_dressed_mercenary_elite_hum_f_01.iff') + templates.add('object/mobile/shared_dressed_mercenary_elite_hum_m_01.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/carbine/shared_carbine_e5.iff', 1, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedShot') + mobileTemplate.setAttacks(attacks) + + lootPoolNames_1 = ['Junk'] + lootPoolChances_1 = [100] + lootGroupChance_1 = 100 + mobileTemplate.addToLootGroups(lootPoolNames_1,lootPoolChances_1,lootGroupChance_1) + + core.spawnService.addMobileTemplate('beldonnas_soldier', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/corellia/bloated_gubbur.py b/scripts/mobiles/corellia/bloated_gubbur.py new file mode 100644 index 00000000..d47764f3 --- /dev/null +++ b/scripts/mobiles/corellia/bloated_gubbur.py @@ -0,0 +1,45 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('gubbur_bloated') + mobileTemplate.setLevel(23) + mobileTemplate.setMinLevel(23) + mobileTemplate.setMaxLevel(23) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setMeatType("Carnivore Meat") + mobileTemplate.setMeatAmount(4) + mobileTemplate.setHideType("Leathery Hide") + mobileTemplate.setHideAmount(3) + mobileTemplate.setBoneType("Mammal Bones") + mobileTemplate.setBoneAmount(3) + mobileTemplate.setSocialGroup("gubbur") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(False) + + templates = Vector() + templates.add('object/mobile/shared_gubber.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('bloated_gubbur', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/corellia/blood_stained_prowler.py b/scripts/mobiles/corellia/blood_stained_prowler.py new file mode 100644 index 00000000..4d820f80 --- /dev/null +++ b/scripts/mobiles/corellia/blood_stained_prowler.py @@ -0,0 +1,44 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('wrix_bloodstained_prowler') + mobileTemplate.setLevel(21) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(True) + mobileTemplate.setScale(1) + mobileTemplate.setMeatType("Carnivore Meat") + mobileTemplate.setMeatAmount(70) + mobileTemplate.setHideType("Bristley Hide") + mobileTemplate.setHideAmount(40) + mobileTemplate.setBoneType("Mammal Bones") + mobileTemplate.setBoneAmount(35) + mobileTemplate.setSocialGroup("wrix") + mobileTemplate.setAssistRange(10) + mobileTemplate.setStalker(False) + mobileTemplate.setOptionsBitmask(192) + + templates = Vector() + templates.add('object/mobile/shared_wrix.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('blood_stained_prowler', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/corellia/blood_thirsty_monarch.py b/scripts/mobiles/corellia/blood_thirsty_monarch.py new file mode 100644 index 00000000..d6e1df0a --- /dev/null +++ b/scripts/mobiles/corellia/blood_thirsty_monarch.py @@ -0,0 +1,42 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('corellian_butterfly_monarch_bloodthirsty') + mobileTemplate.setLevel(19) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(True) + mobileTemplate.setScale(1) + mobileTemplate.setMeatType("Insect Meat") + mobileTemplate.setMeatAmount(27) + mobileTemplate.setHideType("Scaley Hide") + mobileTemplate.setHideAmount(27) + mobileTemplate.setSocialGroup("corellian butterfly") + mobileTemplate.setAssistRange(6) + mobileTemplate.setStalker(True) + mobileTemplate.setOptionsBitmask(192) + + templates = Vector() + templates.add('object/mobile/shared_corellian_butterfly.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('blood_thirsty_monarch', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/corellia/canoid.py b/scripts/mobiles/corellia/canoid.py new file mode 100644 index 00000000..34353c57 --- /dev/null +++ b/scripts/mobiles/corellia/canoid.py @@ -0,0 +1,43 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('canoid') + mobileTemplate.setLevel(29) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setMeatType("Carnivore Meat") + mobileTemplate.setMeatAmount(65) + mobileTemplate.setHideType("Bristley Hide") + mobileTemplate.setHideAmount(35) + mobileTemplate.setBoneType("Mammal Bones") + mobileTemplate.setBoneAmount(30) + mobileTemplate.setSocialGroup("canoid") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(False) + + templates = Vector() + templates.add('object/mobile/shared_canoid.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('canoid', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/corellia/canoid_hunter.py b/scripts/mobiles/corellia/canoid_hunter.py new file mode 100644 index 00000000..ceac4002 --- /dev/null +++ b/scripts/mobiles/corellia/canoid_hunter.py @@ -0,0 +1,44 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('canoid_hunter') + mobileTemplate.setLevel(29) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(True) + mobileTemplate.setScale(1) + mobileTemplate.setMeatType("Carnivore Meat") + mobileTemplate.setMeatAmount(65) + mobileTemplate.setHideType("Bristley Hide") + mobileTemplate.setHideAmount(35) + mobileTemplate.setBoneType("Mammal Bones") + mobileTemplate.setBoneAmount(30) + mobileTemplate.setSocialGroup("canoid") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(False) + mobileTemplate.setOptionsBitmask(192) + + templates = Vector() + templates.add('object/mobile/shared_canoid.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('canoid_hunter', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/corellia/canoid_pack_leader.py b/scripts/mobiles/corellia/canoid_pack_leader.py new file mode 100644 index 00000000..ebe35901 --- /dev/null +++ b/scripts/mobiles/corellia/canoid_pack_leader.py @@ -0,0 +1,44 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('canoid_pack_leader') + mobileTemplate.setLevel(30) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(True) + mobileTemplate.setScale(1.2) + mobileTemplate.setMeatType("Carnivore Meat") + mobileTemplate.setMeatAmount(65) + mobileTemplate.setHideType("Bristley Hide") + mobileTemplate.setHideAmount(35) + mobileTemplate.setBoneType("Mammal Bones") + mobileTemplate.setBoneAmount(30) + mobileTemplate.setSocialGroup("canoid") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(False) + mobileTemplate.setOptionsBitmask(192) + + templates = Vector() + templates.add('object/mobile/shared_canoid.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('canoid_pack_leader', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/corellia/carrion_spat.py b/scripts/mobiles/corellia/carrion_spat.py new file mode 100644 index 00000000..c0e7422f --- /dev/null +++ b/scripts/mobiles/corellia/carrion_spat.py @@ -0,0 +1,41 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('carrion_spat') + mobileTemplate.setLevel(31) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setMeatType("Avian Meat") + mobileTemplate.setMeatAmount(260) + mobileTemplate.setBoneType("Avian Bones") + mobileTemplate.setBoneAmount(180) + mobileTemplate.setSocialGroup("carrion spat") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(False) + + templates = Vector() + templates.add('object/mobile/shared_carrion_spat.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('carrion_spat', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/corellia/carrion_spat_corpsereaver.py b/scripts/mobiles/corellia/carrion_spat_corpsereaver.py new file mode 100644 index 00000000..e019d3d5 --- /dev/null +++ b/scripts/mobiles/corellia/carrion_spat_corpsereaver.py @@ -0,0 +1,42 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('carrion_spat_corpsereaver') + mobileTemplate.setLevel(10) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(True) + mobileTemplate.setScale(1) + mobileTemplate.setMeatType("Avian Meat") + mobileTemplate.setMeatAmount(260) + mobileTemplate.setBoneType("Avian Bones") + mobileTemplate.setBoneAmount(180) + mobileTemplate.setSocialGroup("carrion spat") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(False) + mobileTemplate.setOptionsBitmask(192) + + templates = Vector() + templates.add('object/mobile/shared_carrion_spat.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('carrion_spat_corpsereaver', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/corellia/cor_swooper.py b/scripts/mobiles/corellia/cor_swooper.py new file mode 100644 index 00000000..feff7e82 --- /dev/null +++ b/scripts/mobiles/corellia/cor_swooper.py @@ -0,0 +1,37 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('swooper') + mobileTemplate.setLevel(26) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(12) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(0) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("cor swoop") + mobileTemplate.setAssistRange(4) + mobileTemplate.setStalker(False) + + templates = Vector() + templates.add('object/mobile/shared_dressed_criminal_swooper_human_female_01.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/carbine/shared_carbine_cdef.iff', 1, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedShot') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('cor_swooper', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/corellia/corellian_butterfly.py b/scripts/mobiles/corellia/corellian_butterfly.py new file mode 100644 index 00000000..cd0300a6 --- /dev/null +++ b/scripts/mobiles/corellia/corellian_butterfly.py @@ -0,0 +1,42 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('corellian_butterfly') + mobileTemplate.setLevel(25) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setMeatType("Insect Meat") + mobileTemplate.setMeatAmount(3) + mobileTemplate.setHideType("Scaley Hide") + mobileTemplate.setHideAmount(4) + mobileTemplate.setSocialGroup("corellian butterfly") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(False) + mobileTemplate.setOptionsBitmask(192) + + templates = Vector() + templates.add('object/mobile/shared_corellian_butterfly.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('corellian_butterfly', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/corellia/corellian_butterfly_defender.py b/scripts/mobiles/corellia/corellian_butterfly_defender.py new file mode 100644 index 00000000..36acd0ab --- /dev/null +++ b/scripts/mobiles/corellia/corellian_butterfly_defender.py @@ -0,0 +1,42 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('corellian_butterfly_defender') + mobileTemplate.setLevel(33) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setMeatType("Insect Meat") + mobileTemplate.setMeatAmount(16) + mobileTemplate.setHideType("Scaley Hide") + mobileTemplate.setHideAmount(16) + mobileTemplate.setSocialGroup("corellian butterfly") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(False) + mobileTemplate.setOptionsBitmask(192) + + templates = Vector() + templates.add('object/mobile/shared_corellian_butterfly.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('corellian_butterfly_defender', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/corellia/corellian_butterfly_drone.py b/scripts/mobiles/corellia/corellian_butterfly_drone.py new file mode 100644 index 00000000..31c24a22 --- /dev/null +++ b/scripts/mobiles/corellia/corellian_butterfly_drone.py @@ -0,0 +1,42 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('corellian_butterfly_drone') + mobileTemplate.setLevel(23) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setMeatType("Insect Meat") + mobileTemplate.setMeatAmount(3) + mobileTemplate.setHideType("Scaley Hide") + mobileTemplate.setHideAmount(4) + mobileTemplate.setSocialGroup("corellian butterfly") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(False) + mobileTemplate.setOptionsBitmask(192) + + templates = Vector() + templates.add('object/mobile/shared_corellian_butterfly.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('corellian_butterfly_drone', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/corellia/corellian_butterfly_monarch.py b/scripts/mobiles/corellia/corellian_butterfly_monarch.py new file mode 100644 index 00000000..7688682b --- /dev/null +++ b/scripts/mobiles/corellia/corellian_butterfly_monarch.py @@ -0,0 +1,42 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('corellian_butterfly_monarch') + mobileTemplate.setLevel(34) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(True) + mobileTemplate.setScale(1) + mobileTemplate.setMeatType("Insect Meat") + mobileTemplate.setMeatAmount(27) + mobileTemplate.setHideType("Scaley Hide") + mobileTemplate.setHideAmount(27) + mobileTemplate.setSocialGroup("corellian butterfly") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(False) + mobileTemplate.setOptionsBitmask(192) + + templates = Vector() + templates.add('object/mobile/shared_corellian_butterfly.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('corellian_butterfly_monarch', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/corellia/corellian_butterfly_warrior.py b/scripts/mobiles/corellia/corellian_butterfly_warrior.py new file mode 100644 index 00000000..649d7e7a --- /dev/null +++ b/scripts/mobiles/corellia/corellian_butterfly_warrior.py @@ -0,0 +1,42 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('corellian_butterfly_warrior') + mobileTemplate.setLevel(33) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setMeatType("Insect Meat") + mobileTemplate.setMeatAmount(12) + mobileTemplate.setHideType("Scaley Hide") + mobileTemplate.setHideAmount(12) + mobileTemplate.setSocialGroup("corellian butterfly") + mobileTemplate.setAssistRange(6) + mobileTemplate.setStalker(False) + mobileTemplate.setOptionsBitmask(192) + + templates = Vector() + templates.add('object/mobile/shared_corellian_butterfly.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('corellian_butterfly_warrior', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/corellia/corellian_butterfly_worker.py b/scripts/mobiles/corellia/corellian_butterfly_worker.py new file mode 100644 index 00000000..b50943cb --- /dev/null +++ b/scripts/mobiles/corellia/corellian_butterfly_worker.py @@ -0,0 +1,42 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('corellian_butterfly_warrior') + mobileTemplate.setLevel(28) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setMeatType("Insect Meat") + mobileTemplate.setMeatAmount(8) + mobileTemplate.setHideType("Scaley Hide") + mobileTemplate.setHideAmount(8) + mobileTemplate.setSocialGroup("corellian butterfly") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(False) + mobileTemplate.setOptionsBitmask(192) + + templates = Vector() + templates.add('object/mobile/shared_corellian_butterfly.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('corellian_butterfly_worker', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/corellia/corsec_agent.py b/scripts/mobiles/corellia/corsec_agent.py new file mode 100644 index 00000000..d9acc9d3 --- /dev/null +++ b/scripts/mobiles/corellia/corsec_agent.py @@ -0,0 +1,48 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('corsec_agent') + mobileTemplate.setLevel(33) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(15) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(1) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("corsec") + mobileTemplate.setAssistRange(6) + mobileTemplate.setStalker(True) + mobileTemplate.setOptionsBitmask(128) + + templates = Vector() + templates.add('object/mobile/shared_dressed_corsec_captain_human_female_01.iff') + templates.add('object/mobile/shared_dressed_corsec_captain_human_male_01.iff') + templates.add('object/mobile/shared_dressed_corsec_captain_human_male_02.iff') + templates.add('object/mobile/shared_dressed_corsec_captain_human_male_03.iff') + templates.add('object/mobile/shared_dressed_corsec_officer_human_female_01.iff') + templates.add('object/mobile/shared_dressed_corsec_officer_human_male_01.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/carbine/shared_carbine_cdef.iff', 1, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedShot') + mobileTemplate.setAttacks(attacks) + + lootPoolNames_1 = ['Junk'] + lootPoolChances_1 = [100] + lootGroupChance_1 = 100 + mobileTemplate.addToLootGroups(lootPoolNames_1,lootPoolChances_1,lootGroupChance_1) + + core.spawnService.addMobileTemplate('corsec_agent', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/corellia/corsec_cadet.py b/scripts/mobiles/corellia/corsec_cadet.py new file mode 100644 index 00000000..da3d3b9b --- /dev/null +++ b/scripts/mobiles/corellia/corsec_cadet.py @@ -0,0 +1,48 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('corsec_cadet') + mobileTemplate.setLevel(32) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(15) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(1) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("corsec") + mobileTemplate.setAssistRange(6) + mobileTemplate.setStalker(True) + mobileTemplate.setOptionsBitmask(128) + + templates = Vector() + templates.add('object/mobile/shared_dressed_corsec_captain_human_female_01.iff') + templates.add('object/mobile/shared_dressed_corsec_captain_human_male_01.iff') + templates.add('object/mobile/shared_dressed_corsec_captain_human_male_02.iff') + templates.add('object/mobile/shared_dressed_corsec_captain_human_male_03.iff') + templates.add('object/mobile/shared_dressed_corsec_officer_human_female_01.iff') + templates.add('object/mobile/shared_dressed_corsec_officer_human_male_01.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/carbine/shared_carbine_cdef.iff', 1, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedShot') + mobileTemplate.setAttacks(attacks) + + lootPoolNames_1 = ['Junk'] + lootPoolChances_1 = [100] + lootGroupChance_1 = 100 + mobileTemplate.addToLootGroups(lootPoolNames_1,lootPoolChances_1,lootGroupChance_1) + + core.spawnService.addMobileTemplate('corsec_cadet', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/corellia/corsec_captain.py b/scripts/mobiles/corellia/corsec_captain.py new file mode 100644 index 00000000..e752d3f7 --- /dev/null +++ b/scripts/mobiles/corellia/corsec_captain.py @@ -0,0 +1,48 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('corsec_captain') + mobileTemplate.setLevel(33) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(15) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(1) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("corsec") + mobileTemplate.setAssistRange(6) + mobileTemplate.setStalker(True) + mobileTemplate.setOptionsBitmask(128) + + templates = Vector() + templates.add('object/mobile/shared_dressed_corsec_captain_human_female_01.iff') + templates.add('object/mobile/shared_dressed_corsec_captain_human_male_01.iff') + templates.add('object/mobile/shared_dressed_corsec_captain_human_male_02.iff') + templates.add('object/mobile/shared_dressed_corsec_captain_human_male_03.iff') + templates.add('object/mobile/shared_dressed_corsec_officer_human_female_01.iff') + templates.add('object/mobile/shared_dressed_corsec_officer_human_male_01.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/carbine/shared_carbine_cdef.iff', 1, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedShot') + mobileTemplate.setAttacks(attacks) + + lootPoolNames_1 = ['Junk'] + lootPoolChances_1 = [100] + lootGroupChance_1 = 100 + mobileTemplate.addToLootGroups(lootPoolNames_1,lootPoolChances_1,lootGroupChance_1) + + core.spawnService.addMobileTemplate('corsec_captain', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/corellia/corsec_chief.py b/scripts/mobiles/corellia/corsec_chief.py new file mode 100644 index 00000000..832cff4f --- /dev/null +++ b/scripts/mobiles/corellia/corsec_chief.py @@ -0,0 +1,48 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('corsec_chief') + mobileTemplate.setLevel(33) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(15) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(0) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("corsec") + mobileTemplate.setAssistRange(6) + mobileTemplate.setStalker(True) + mobileTemplate.setOptionsBitmask(128) + + templates = Vector() + templates.add('object/mobile/shared_dressed_corsec_captain_human_female_01.iff') + templates.add('object/mobile/shared_dressed_corsec_captain_human_male_01.iff') + templates.add('object/mobile/shared_dressed_corsec_captain_human_male_02.iff') + templates.add('object/mobile/shared_dressed_corsec_captain_human_male_03.iff') + templates.add('object/mobile/shared_dressed_corsec_officer_human_female_01.iff') + templates.add('object/mobile/shared_dressed_corsec_officer_human_male_01.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/rifle/shared_rifle_e11.iff', 0, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedShot') + mobileTemplate.setAttacks(attacks) + + lootPoolNames_1 = ['Junk'] + lootPoolChances_1 = [100] + lootGroupChance_1 = 100 + mobileTemplate.addToLootGroups(lootPoolNames_1,lootPoolChances_1,lootGroupChance_1) + + core.spawnService.addMobileTemplate('corsec_chief', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/corellia/corsec_commissioner.py b/scripts/mobiles/corellia/corsec_commissioner.py new file mode 100644 index 00000000..4c4d7a4f --- /dev/null +++ b/scripts/mobiles/corellia/corsec_commissioner.py @@ -0,0 +1,48 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('corsec_commissioner') + mobileTemplate.setLevel(34) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(15) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(1) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("corsec") + mobileTemplate.setAssistRange(6) + mobileTemplate.setStalker(True) + mobileTemplate.setOptionsBitmask(128) + + templates = Vector() + templates.add('object/mobile/shared_dressed_corsec_captain_human_female_01.iff') + templates.add('object/mobile/shared_dressed_corsec_captain_human_male_01.iff') + templates.add('object/mobile/shared_dressed_corsec_captain_human_male_02.iff') + templates.add('object/mobile/shared_dressed_corsec_captain_human_male_03.iff') + templates.add('object/mobile/shared_dressed_corsec_officer_human_female_01.iff') + templates.add('object/mobile/shared_dressed_corsec_officer_human_male_01.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/carbine/shared_carbine_cdef.iff', 1, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedShot') + mobileTemplate.setAttacks(attacks) + + lootPoolNames_1 = ['Junk'] + lootPoolChances_1 = [100] + lootGroupChance_1 = 100 + mobileTemplate.addToLootGroups(lootPoolNames_1,lootPoolChances_1,lootGroupChance_1) + + core.spawnService.addMobileTemplate('corsec_commissioner', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/corellia/corsec_deserter.py b/scripts/mobiles/corellia/corsec_deserter.py new file mode 100644 index 00000000..81b942c0 --- /dev/null +++ b/scripts/mobiles/corellia/corsec_deserter.py @@ -0,0 +1,48 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('corsec_deserter') + mobileTemplate.setLevel(33) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(15) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(1) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("corsec rogue") + mobileTemplate.setAssistRange(6) + mobileTemplate.setStalker(True) + mobileTemplate.setOptionsBitmask(192) + + templates = Vector() + templates.add('object/mobile/shared_dressed_corsec_captain_human_female_01.iff') + templates.add('object/mobile/shared_dressed_corsec_captain_human_male_01.iff') + templates.add('object/mobile/shared_dressed_corsec_captain_human_male_02.iff') + templates.add('object/mobile/shared_dressed_corsec_captain_human_male_03.iff') + templates.add('object/mobile/shared_dressed_corsec_officer_human_female_01.iff') + templates.add('object/mobile/shared_dressed_corsec_officer_human_male_01.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/carbine/shared_carbine_cdef.iff', 1, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedShot') + mobileTemplate.setAttacks(attacks) + + lootPoolNames_1 = ['Junk'] + lootPoolChances_1 = [100] + lootGroupChance_1 = 100 + mobileTemplate.addToLootGroups(lootPoolNames_1,lootPoolChances_1,lootGroupChance_1) + + core.spawnService.addMobileTemplate('corsec_deserter', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/corellia/corsec_detective.py b/scripts/mobiles/corellia/corsec_detective.py new file mode 100644 index 00000000..fe2f0f84 --- /dev/null +++ b/scripts/mobiles/corellia/corsec_detective.py @@ -0,0 +1,44 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('corsec_detective') + mobileTemplate.setLevel(33) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(15) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(0) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("corsec") + mobileTemplate.setAssistRange(6) + mobileTemplate.setStalker(True) + mobileTemplate.setOptionsBitmask(128) + + templates = Vector() + templates.add('object/mobile/shared_dressed_corsec_detective_human_female_01.iff') + templates.add('object/mobile/shared_dressed_corsec_detective_human_male_01.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/rifle/shared_rifle_e11.iff', 0, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedShot') + mobileTemplate.setAttacks(attacks) + + lootPoolNames_1 = ['Junk'] + lootPoolChances_1 = [100] + lootGroupChance_1 = 100 + mobileTemplate.addToLootGroups(lootPoolNames_1,lootPoolChances_1,lootGroupChance_1) + + core.spawnService.addMobileTemplate('corsec_detective', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/corellia/corsec_inspector_sergeant.py b/scripts/mobiles/corellia/corsec_inspector_sergeant.py new file mode 100644 index 00000000..e25c7cf1 --- /dev/null +++ b/scripts/mobiles/corellia/corsec_inspector_sergeant.py @@ -0,0 +1,48 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('corsec_inspector_sergeant') + mobileTemplate.setLevel(34) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(15) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(1) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("corsec") + mobileTemplate.setAssistRange(6) + mobileTemplate.setStalker(True) + mobileTemplate.setOptionsBitmask(128) + + templates = Vector() + templates.add('object/mobile/shared_dressed_corsec_captain_human_female_01.iff') + templates.add('object/mobile/shared_dressed_corsec_captain_human_male_01.iff') + templates.add('object/mobile/shared_dressed_corsec_captain_human_male_02.iff') + templates.add('object/mobile/shared_dressed_corsec_captain_human_male_03.iff') + templates.add('object/mobile/shared_dressed_corsec_officer_human_female_01.iff') + templates.add('object/mobile/shared_dressed_corsec_officer_human_male_01.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/carbine/shared_carbine_cdef.iff', 1, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedShot') + mobileTemplate.setAttacks(attacks) + + lootPoolNames_1 = ['Junk'] + lootPoolChances_1 = [100] + lootGroupChance_1 = 100 + mobileTemplate.addToLootGroups(lootPoolNames_1,lootPoolChances_1,lootGroupChance_1) + + core.spawnService.addMobileTemplate('corsec_inspector_sergeant', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/corellia/corsec_investigator.py b/scripts/mobiles/corellia/corsec_investigator.py new file mode 100644 index 00000000..0267d243 --- /dev/null +++ b/scripts/mobiles/corellia/corsec_investigator.py @@ -0,0 +1,50 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('corsec_investigator') + mobileTemplate.setLevel(33) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(15) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(1) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("corsec") + mobileTemplate.setAssistRange(6) + mobileTemplate.setStalker(True) + mobileTemplate.setOptionsBitmask(128) + + templates = Vector() + templates.add('object/mobile/shared_dressed_corsec_captain_human_female_01.iff') + templates.add('object/mobile/shared_dressed_corsec_captain_human_male_01.iff') + templates.add('object/mobile/shared_dressed_corsec_captain_human_male_02.iff') + templates.add('object/mobile/shared_dressed_corsec_captain_human_male_03.iff') + templates.add('object/mobile/shared_dressed_corsec_officer_human_female_01.iff') + templates.add('object/mobile/shared_dressed_corsec_officer_human_male_01.iff') + templates.add('object/mobile/shared_dressed_corsec_detective_human_female_01.iff') + templates.add('object/mobile/shared_dressed_corsec_detective_human_male_01.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/carbine/shared_carbine_cdef.iff', 1, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedShot') + mobileTemplate.setAttacks(attacks) + + lootPoolNames_1 = ['Junk'] + lootPoolChances_1 = [100] + lootGroupChance_1 = 100 + mobileTemplate.addToLootGroups(lootPoolNames_1,lootPoolChances_1,lootGroupChance_1) + + core.spawnService.addMobileTemplate('corsec_investigator', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/corellia/corsec_lieutenant.py b/scripts/mobiles/corellia/corsec_lieutenant.py new file mode 100644 index 00000000..0a424dba --- /dev/null +++ b/scripts/mobiles/corellia/corsec_lieutenant.py @@ -0,0 +1,50 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('corsec_lieutenant') + mobileTemplate.setLevel(33) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(15) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(1) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("corsec") + mobileTemplate.setAssistRange(6) + mobileTemplate.setStalker(True) + mobileTemplate.setOptionsBitmask(128) + + templates = Vector() + templates.add('object/mobile/shared_dressed_corsec_captain_human_female_01.iff') + templates.add('object/mobile/shared_dressed_corsec_captain_human_male_01.iff') + templates.add('object/mobile/shared_dressed_corsec_captain_human_male_02.iff') + templates.add('object/mobile/shared_dressed_corsec_captain_human_male_03.iff') + templates.add('object/mobile/shared_dressed_corsec_officer_human_female_01.iff') + templates.add('object/mobile/shared_dressed_corsec_officer_human_male_01.iff') + templates.add('object/mobile/shared_dressed_corsec_detective_human_female_01.iff') + templates.add('object/mobile/shared_dressed_corsec_detective_human_male_01.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/carbine/shared_carbine_cdef.iff', 1, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedShot') + mobileTemplate.setAttacks(attacks) + + lootPoolNames_1 = ['Junk'] + lootPoolChances_1 = [100] + lootGroupChance_1 = 100 + mobileTemplate.addToLootGroups(lootPoolNames_1,lootPoolChances_1,lootGroupChance_1) + + core.spawnService.addMobileTemplate('corsec_lieutenant', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/corellia/corsec_major.py b/scripts/mobiles/corellia/corsec_major.py new file mode 100644 index 00000000..2ba188f5 --- /dev/null +++ b/scripts/mobiles/corellia/corsec_major.py @@ -0,0 +1,50 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('corsec_major') + mobileTemplate.setLevel(34) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(15) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(1) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("corsec") + mobileTemplate.setAssistRange(6) + mobileTemplate.setStalker(True) + mobileTemplate.setOptionsBitmask(128) + + templates = Vector() + templates.add('object/mobile/shared_dressed_corsec_captain_human_female_01.iff') + templates.add('object/mobile/shared_dressed_corsec_captain_human_male_01.iff') + templates.add('object/mobile/shared_dressed_corsec_captain_human_male_02.iff') + templates.add('object/mobile/shared_dressed_corsec_captain_human_male_03.iff') + templates.add('object/mobile/shared_dressed_corsec_officer_human_female_01.iff') + templates.add('object/mobile/shared_dressed_corsec_officer_human_male_01.iff') + templates.add('object/mobile/shared_dressed_corsec_detective_human_female_01.iff') + templates.add('object/mobile/shared_dressed_corsec_detective_human_male_01.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/carbine/shared_carbine_cdef.iff', 1, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedShot') + mobileTemplate.setAttacks(attacks) + + lootPoolNames_1 = ['Junk'] + lootPoolChances_1 = [100] + lootGroupChance_1 = 100 + mobileTemplate.addToLootGroups(lootPoolNames_1,lootPoolChances_1,lootGroupChance_1) + + core.spawnService.addMobileTemplate('corsec_major', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/corellia/corsec_master_sergeant.py b/scripts/mobiles/corellia/corsec_master_sergeant.py new file mode 100644 index 00000000..cf67ce76 --- /dev/null +++ b/scripts/mobiles/corellia/corsec_master_sergeant.py @@ -0,0 +1,50 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('corsec_master_sergeant') + mobileTemplate.setLevel(33) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(15) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(1) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("corsec") + mobileTemplate.setAssistRange(6) + mobileTemplate.setStalker(True) + mobileTemplate.setOptionsBitmask(128) + + templates = Vector() + templates.add('object/mobile/shared_dressed_corsec_captain_human_female_01.iff') + templates.add('object/mobile/shared_dressed_corsec_captain_human_male_01.iff') + templates.add('object/mobile/shared_dressed_corsec_captain_human_male_02.iff') + templates.add('object/mobile/shared_dressed_corsec_captain_human_male_03.iff') + templates.add('object/mobile/shared_dressed_corsec_officer_human_female_01.iff') + templates.add('object/mobile/shared_dressed_corsec_officer_human_male_01.iff') + templates.add('object/mobile/shared_dressed_corsec_detective_human_female_01.iff') + templates.add('object/mobile/shared_dressed_corsec_detective_human_male_01.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/carbine/shared_carbine_cdef.iff', 1, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedShot') + mobileTemplate.setAttacks(attacks) + + lootPoolNames_1 = ['Junk'] + lootPoolChances_1 = [100] + lootGroupChance_1 = 100 + mobileTemplate.addToLootGroups(lootPoolNames_1,lootPoolChances_1,lootGroupChance_1) + + core.spawnService.addMobileTemplate('corsec_master_sergeant', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/corellia/corsec_security_specialist.py b/scripts/mobiles/corellia/corsec_security_specialist.py new file mode 100644 index 00000000..ff4cd8e1 --- /dev/null +++ b/scripts/mobiles/corellia/corsec_security_specialist.py @@ -0,0 +1,50 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('mtp_recruiter_corsec_detective') + mobileTemplate.setLevel(81) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(15) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(1) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(True) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("aggro corsec") + mobileTemplate.setAssistRange(10) + mobileTemplate.setStalker(True) + mobileTemplate.setOptionsBitmask(192) + + templates = Vector() + templates.add('object/mobile/shared_dressed_corsec_captain_human_female_01.iff') + templates.add('object/mobile/shared_dressed_corsec_captain_human_male_01.iff') + templates.add('object/mobile/shared_dressed_corsec_captain_human_male_02.iff') + templates.add('object/mobile/shared_dressed_corsec_captain_human_male_03.iff') + templates.add('object/mobile/shared_dressed_corsec_officer_human_female_01.iff') + templates.add('object/mobile/shared_dressed_corsec_officer_human_male_01.iff') + templates.add('object/mobile/shared_dressed_corsec_detective_human_female_01.iff') + templates.add('object/mobile/shared_dressed_corsec_detective_human_male_01.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/carbine/shared_carbine_cdef.iff', 1, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedShot') + mobileTemplate.setAttacks(attacks) + + lootPoolNames_1 = ['Junk'] + lootPoolChances_1 = [100] + lootGroupChance_1 = 100 + mobileTemplate.addToLootGroups(lootPoolNames_1,lootPoolChances_1,lootGroupChance_1) + + core.spawnService.addMobileTemplate('corsec_security_specialist', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/corellia/corsec_sergeant.py b/scripts/mobiles/corellia/corsec_sergeant.py new file mode 100644 index 00000000..1da24ce0 --- /dev/null +++ b/scripts/mobiles/corellia/corsec_sergeant.py @@ -0,0 +1,50 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('corsec_sergeant') + mobileTemplate.setLevel(32) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(15) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(1) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("corsec") + mobileTemplate.setAssistRange(6) + mobileTemplate.setStalker(True) + mobileTemplate.setOptionsBitmask(128) + + templates = Vector() + templates.add('object/mobile/shared_dressed_corsec_captain_human_female_01.iff') + templates.add('object/mobile/shared_dressed_corsec_captain_human_male_01.iff') + templates.add('object/mobile/shared_dressed_corsec_captain_human_male_02.iff') + templates.add('object/mobile/shared_dressed_corsec_captain_human_male_03.iff') + templates.add('object/mobile/shared_dressed_corsec_officer_human_female_01.iff') + templates.add('object/mobile/shared_dressed_corsec_officer_human_male_01.iff') + templates.add('object/mobile/shared_dressed_corsec_detective_human_female_01.iff') + templates.add('object/mobile/shared_dressed_corsec_detective_human_male_01.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/carbine/shared_carbine_cdef.iff', 1, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedShot') + mobileTemplate.setAttacks(attacks) + + lootPoolNames_1 = ['Junk'] + lootPoolChances_1 = [100] + lootGroupChance_1 = 100 + mobileTemplate.addToLootGroups(lootPoolNames_1,lootPoolChances_1,lootGroupChance_1) + + core.spawnService.addMobileTemplate('corsec_sergeant', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/corellia/corsec_special_agent.py b/scripts/mobiles/corellia/corsec_special_agent.py new file mode 100644 index 00000000..5acdbe2d --- /dev/null +++ b/scripts/mobiles/corellia/corsec_special_agent.py @@ -0,0 +1,50 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('corsec_agent_aggro') + mobileTemplate.setLevel(80) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(15) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(1) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(True) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("aggro corsec") + mobileTemplate.setAssistRange(10) + mobileTemplate.setStalker(True) + mobileTemplate.setOptionsBitmask(192) + + templates = Vector() + templates.add('object/mobile/shared_dressed_corsec_captain_human_female_01.iff') + templates.add('object/mobile/shared_dressed_corsec_captain_human_male_01.iff') + templates.add('object/mobile/shared_dressed_corsec_captain_human_male_02.iff') + templates.add('object/mobile/shared_dressed_corsec_captain_human_male_03.iff') + templates.add('object/mobile/shared_dressed_corsec_officer_human_female_01.iff') + templates.add('object/mobile/shared_dressed_corsec_officer_human_male_01.iff') + templates.add('object/mobile/shared_dressed_corsec_detective_human_female_01.iff') + templates.add('object/mobile/shared_dressed_corsec_detective_human_male_01.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/carbine/shared_carbine_cdef.iff', 1, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedShot') + mobileTemplate.setAttacks(attacks) + + lootPoolNames_1 = ['Junk'] + lootPoolChances_1 = [100] + lootGroupChance_1 = 100 + mobileTemplate.addToLootGroups(lootPoolNames_1,lootPoolChances_1,lootGroupChance_1) + + core.spawnService.addMobileTemplate('corsec_special_agent', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/corellia/corsec_special_ops_captain.py b/scripts/mobiles/corellia/corsec_special_ops_captain.py new file mode 100644 index 00000000..89207f7d --- /dev/null +++ b/scripts/mobiles/corellia/corsec_special_ops_captain.py @@ -0,0 +1,50 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('corsec_captain_aggro') + mobileTemplate.setLevel(82) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(15) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(0) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(True) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("aggro corsec") + mobileTemplate.setAssistRange(10) + mobileTemplate.setStalker(True) + mobileTemplate.setOptionsBitmask(192) + + templates = Vector() + templates.add('object/mobile/shared_dressed_corsec_captain_human_female_01.iff') + templates.add('object/mobile/shared_dressed_corsec_captain_human_male_01.iff') + templates.add('object/mobile/shared_dressed_corsec_captain_human_male_02.iff') + templates.add('object/mobile/shared_dressed_corsec_captain_human_male_03.iff') + templates.add('object/mobile/shared_dressed_corsec_officer_human_female_01.iff') + templates.add('object/mobile/shared_dressed_corsec_officer_human_male_01.iff') + templates.add('object/mobile/shared_dressed_corsec_detective_human_female_01.iff') + templates.add('object/mobile/shared_dressed_corsec_detective_human_male_01.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/rifle/shared_rifle_e11.iff', 0, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedShot') + mobileTemplate.setAttacks(attacks) + + lootPoolNames_1 = ['Junk'] + lootPoolChances_1 = [100] + lootGroupChance_1 = 100 + mobileTemplate.addToLootGroups(lootPoolNames_1,lootPoolChances_1,lootGroupChance_1) + + core.spawnService.addMobileTemplate('corsec_special_ops_captain', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/corellia/corsec_special_ops_chief.py b/scripts/mobiles/corellia/corsec_special_ops_chief.py new file mode 100644 index 00000000..e0147367 --- /dev/null +++ b/scripts/mobiles/corellia/corsec_special_ops_chief.py @@ -0,0 +1,50 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('corsec_chief_aggro') + mobileTemplate.setLevel(83) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(15) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(0) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(True) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("aggro corsec") + mobileTemplate.setAssistRange(10) + mobileTemplate.setStalker(True) + mobileTemplate.setOptionsBitmask(192) + + templates = Vector() + templates.add('object/mobile/shared_dressed_corsec_captain_human_female_01.iff') + templates.add('object/mobile/shared_dressed_corsec_captain_human_male_01.iff') + templates.add('object/mobile/shared_dressed_corsec_captain_human_male_02.iff') + templates.add('object/mobile/shared_dressed_corsec_captain_human_male_03.iff') + templates.add('object/mobile/shared_dressed_corsec_officer_human_female_01.iff') + templates.add('object/mobile/shared_dressed_corsec_officer_human_male_01.iff') + templates.add('object/mobile/shared_dressed_corsec_detective_human_female_01.iff') + templates.add('object/mobile/shared_dressed_corsec_detective_human_male_01.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/rifle/shared_rifle_e11.iff', 0, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedShot') + mobileTemplate.setAttacks(attacks) + + lootPoolNames_1 = ['Junk'] + lootPoolChances_1 = [100] + lootGroupChance_1 = 100 + mobileTemplate.addToLootGroups(lootPoolNames_1,lootPoolChances_1,lootGroupChance_1) + + core.spawnService.addMobileTemplate('corsec_special_ops_chief', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/corellia/corsec_special_ops_commissioner.py b/scripts/mobiles/corellia/corsec_special_ops_commissioner.py new file mode 100644 index 00000000..805a3a61 --- /dev/null +++ b/scripts/mobiles/corellia/corsec_special_ops_commissioner.py @@ -0,0 +1,50 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('corsec_comissioner_aggro_aggro') + mobileTemplate.setLevel(84) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(15) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(1) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(True) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("aggro corsec") + mobileTemplate.setAssistRange(10) + mobileTemplate.setStalker(True) + mobileTemplate.setOptionsBitmask(192) + + templates = Vector() + templates.add('object/mobile/shared_dressed_corsec_captain_human_female_01.iff') + templates.add('object/mobile/shared_dressed_corsec_captain_human_male_01.iff') + templates.add('object/mobile/shared_dressed_corsec_captain_human_male_02.iff') + templates.add('object/mobile/shared_dressed_corsec_captain_human_male_03.iff') + templates.add('object/mobile/shared_dressed_corsec_officer_human_female_01.iff') + templates.add('object/mobile/shared_dressed_corsec_officer_human_male_01.iff') + templates.add('object/mobile/shared_dressed_corsec_detective_human_female_01.iff') + templates.add('object/mobile/shared_dressed_corsec_detective_human_male_01.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/carbine/shared_carbine_cdef.iff', 1, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedShot') + mobileTemplate.setAttacks(attacks) + + lootPoolNames_1 = ['Junk'] + lootPoolChances_1 = [100] + lootGroupChance_1 = 100 + mobileTemplate.addToLootGroups(lootPoolNames_1,lootPoolChances_1,lootGroupChance_1) + + core.spawnService.addMobileTemplate('corsec_special_ops_commissioner', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/corellia/corsec_special_ops_inspector.py b/scripts/mobiles/corellia/corsec_special_ops_inspector.py new file mode 100644 index 00000000..22fc2e2c --- /dev/null +++ b/scripts/mobiles/corellia/corsec_special_ops_inspector.py @@ -0,0 +1,50 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('corsec_inspector_sergeant_aggro') + mobileTemplate.setLevel(81) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(15) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(1) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(True) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("aggro corsec") + mobileTemplate.setAssistRange(10) + mobileTemplate.setStalker(True) + mobileTemplate.setOptionsBitmask(192) + + templates = Vector() + templates.add('object/mobile/shared_dressed_corsec_captain_human_female_01.iff') + templates.add('object/mobile/shared_dressed_corsec_captain_human_male_01.iff') + templates.add('object/mobile/shared_dressed_corsec_captain_human_male_02.iff') + templates.add('object/mobile/shared_dressed_corsec_captain_human_male_03.iff') + templates.add('object/mobile/shared_dressed_corsec_officer_human_female_01.iff') + templates.add('object/mobile/shared_dressed_corsec_officer_human_male_01.iff') + templates.add('object/mobile/shared_dressed_corsec_detective_human_female_01.iff') + templates.add('object/mobile/shared_dressed_corsec_detective_human_male_01.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/carbine/shared_carbine_cdef.iff', 1, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedShot') + mobileTemplate.setAttacks(attacks) + + lootPoolNames_1 = ['Junk'] + lootPoolChances_1 = [100] + lootGroupChance_1 = 100 + mobileTemplate.addToLootGroups(lootPoolNames_1,lootPoolChances_1,lootGroupChance_1) + + core.spawnService.addMobileTemplate('corsec_special_ops_inspector', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/corellia/corsec_special_ops_lieutenant.py b/scripts/mobiles/corellia/corsec_special_ops_lieutenant.py new file mode 100644 index 00000000..f1c72217 --- /dev/null +++ b/scripts/mobiles/corellia/corsec_special_ops_lieutenant.py @@ -0,0 +1,50 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('corsec_lieutenant_aggro') + mobileTemplate.setLevel(82) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(15) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(1) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(True) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("aggro corsec") + mobileTemplate.setAssistRange(10) + mobileTemplate.setStalker(True) + mobileTemplate.setOptionsBitmask(192) + + templates = Vector() + templates.add('object/mobile/shared_dressed_corsec_captain_human_female_01.iff') + templates.add('object/mobile/shared_dressed_corsec_captain_human_male_01.iff') + templates.add('object/mobile/shared_dressed_corsec_captain_human_male_02.iff') + templates.add('object/mobile/shared_dressed_corsec_captain_human_male_03.iff') + templates.add('object/mobile/shared_dressed_corsec_officer_human_female_01.iff') + templates.add('object/mobile/shared_dressed_corsec_officer_human_male_01.iff') + templates.add('object/mobile/shared_dressed_corsec_detective_human_female_01.iff') + templates.add('object/mobile/shared_dressed_corsec_detective_human_male_01.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/carbine/shared_carbine_cdef.iff', 1, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedShot') + mobileTemplate.setAttacks(attacks) + + lootPoolNames_1 = ['Junk'] + lootPoolChances_1 = [100] + lootGroupChance_1 = 100 + mobileTemplate.addToLootGroups(lootPoolNames_1,lootPoolChances_1,lootGroupChance_1) + + core.spawnService.addMobileTemplate('corsec_special_ops_lieutenant', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/corellia/corsec_special_ops_major.py b/scripts/mobiles/corellia/corsec_special_ops_major.py new file mode 100644 index 00000000..e883357e --- /dev/null +++ b/scripts/mobiles/corellia/corsec_special_ops_major.py @@ -0,0 +1,50 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('corsec_major_aggro') + mobileTemplate.setLevel(83) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(15) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(1) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(True) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("aggro corsec") + mobileTemplate.setAssistRange(10) + mobileTemplate.setStalker(True) + mobileTemplate.setOptionsBitmask(192) + + templates = Vector() + templates.add('object/mobile/shared_dressed_corsec_captain_human_female_01.iff') + templates.add('object/mobile/shared_dressed_corsec_captain_human_male_01.iff') + templates.add('object/mobile/shared_dressed_corsec_captain_human_male_02.iff') + templates.add('object/mobile/shared_dressed_corsec_captain_human_male_03.iff') + templates.add('object/mobile/shared_dressed_corsec_officer_human_female_01.iff') + templates.add('object/mobile/shared_dressed_corsec_officer_human_male_01.iff') + templates.add('object/mobile/shared_dressed_corsec_detective_human_female_01.iff') + templates.add('object/mobile/shared_dressed_corsec_detective_human_male_01.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/carbine/shared_carbine_cdef.iff', 1, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedShot') + mobileTemplate.setAttacks(attacks) + + lootPoolNames_1 = ['Junk'] + lootPoolChances_1 = [100] + lootGroupChance_1 = 100 + mobileTemplate.addToLootGroups(lootPoolNames_1,lootPoolChances_1,lootGroupChance_1) + + core.spawnService.addMobileTemplate('corsec_special_ops_major', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/corellia/corsec_special_ops_master_sergeant.py b/scripts/mobiles/corellia/corsec_special_ops_master_sergeant.py new file mode 100644 index 00000000..25be9350 --- /dev/null +++ b/scripts/mobiles/corellia/corsec_special_ops_master_sergeant.py @@ -0,0 +1,50 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('corsec_master_sergeant_aggro') + mobileTemplate.setLevel(82) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(15) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(1) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(True) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("aggro corsec") + mobileTemplate.setAssistRange(10) + mobileTemplate.setStalker(True) + mobileTemplate.setOptionsBitmask(192) + + templates = Vector() + templates.add('object/mobile/shared_dressed_corsec_captain_human_female_01.iff') + templates.add('object/mobile/shared_dressed_corsec_captain_human_male_01.iff') + templates.add('object/mobile/shared_dressed_corsec_captain_human_male_02.iff') + templates.add('object/mobile/shared_dressed_corsec_captain_human_male_03.iff') + templates.add('object/mobile/shared_dressed_corsec_officer_human_female_01.iff') + templates.add('object/mobile/shared_dressed_corsec_officer_human_male_01.iff') + templates.add('object/mobile/shared_dressed_corsec_detective_human_female_01.iff') + templates.add('object/mobile/shared_dressed_corsec_detective_human_male_01.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/carbine/shared_carbine_cdef.iff', 1, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedShot') + mobileTemplate.setAttacks(attacks) + + lootPoolNames_1 = ['Junk'] + lootPoolChances_1 = [100] + lootGroupChance_1 = 100 + mobileTemplate.addToLootGroups(lootPoolNames_1,lootPoolChances_1,lootGroupChance_1) + + core.spawnService.addMobileTemplate('corsec_special_ops_master_sergeant', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/corellia/corsec_special_ops_sergeant.py b/scripts/mobiles/corellia/corsec_special_ops_sergeant.py new file mode 100644 index 00000000..7ecfea25 --- /dev/null +++ b/scripts/mobiles/corellia/corsec_special_ops_sergeant.py @@ -0,0 +1,50 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('corsec_sergeant_aggro') + mobileTemplate.setLevel(81) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(15) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(1) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(True) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("aggro corsec") + mobileTemplate.setAssistRange(10) + mobileTemplate.setStalker(True) + mobileTemplate.setOptionsBitmask(192) + + templates = Vector() + templates.add('object/mobile/shared_dressed_corsec_captain_human_female_01.iff') + templates.add('object/mobile/shared_dressed_corsec_captain_human_male_01.iff') + templates.add('object/mobile/shared_dressed_corsec_captain_human_male_02.iff') + templates.add('object/mobile/shared_dressed_corsec_captain_human_male_03.iff') + templates.add('object/mobile/shared_dressed_corsec_officer_human_female_01.iff') + templates.add('object/mobile/shared_dressed_corsec_officer_human_male_01.iff') + templates.add('object/mobile/shared_dressed_corsec_detective_human_female_01.iff') + templates.add('object/mobile/shared_dressed_corsec_detective_human_male_01.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/carbine/shared_carbine_cdef.iff', 1, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedShot') + mobileTemplate.setAttacks(attacks) + + lootPoolNames_1 = ['Junk'] + lootPoolChances_1 = [100] + lootGroupChance_1 = 100 + mobileTemplate.addToLootGroups(lootPoolNames_1,lootPoolChances_1,lootGroupChance_1) + + core.spawnService.addMobileTemplate('corsec_special_ops_sergeant', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/corellia/corsec_special_ops_trainee.py b/scripts/mobiles/corellia/corsec_special_ops_trainee.py new file mode 100644 index 00000000..e4184ffe --- /dev/null +++ b/scripts/mobiles/corellia/corsec_special_ops_trainee.py @@ -0,0 +1,50 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('corsec_cadet_aggro') + mobileTemplate.setLevel(80) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(15) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(1) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(True) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("aggro corsec") + mobileTemplate.setAssistRange(10) + mobileTemplate.setStalker(True) + mobileTemplate.setOptionsBitmask(192) + + templates = Vector() + templates.add('object/mobile/shared_dressed_corsec_captain_human_female_01.iff') + templates.add('object/mobile/shared_dressed_corsec_captain_human_male_01.iff') + templates.add('object/mobile/shared_dressed_corsec_captain_human_male_02.iff') + templates.add('object/mobile/shared_dressed_corsec_captain_human_male_03.iff') + templates.add('object/mobile/shared_dressed_corsec_officer_human_female_01.iff') + templates.add('object/mobile/shared_dressed_corsec_officer_human_male_01.iff') + templates.add('object/mobile/shared_dressed_corsec_detective_human_female_01.iff') + templates.add('object/mobile/shared_dressed_corsec_detective_human_male_01.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/carbine/shared_carbine_cdef.iff', 1, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedShot') + mobileTemplate.setAttacks(attacks) + + lootPoolNames_1 = ['Junk'] + lootPoolChances_1 = [100] + lootGroupChance_1 = 100 + mobileTemplate.addToLootGroups(lootPoolNames_1,lootPoolChances_1,lootGroupChance_1) + + core.spawnService.addMobileTemplate('corsec_special_ops_trainee', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/corellia/corsec_traitor.py b/scripts/mobiles/corellia/corsec_traitor.py new file mode 100644 index 00000000..dce73583 --- /dev/null +++ b/scripts/mobiles/corellia/corsec_traitor.py @@ -0,0 +1,50 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('corsec_traitor') + mobileTemplate.setLevel(31) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(15) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(1) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("corsec rogue") + mobileTemplate.setAssistRange(6) + mobileTemplate.setStalker(True) + mobileTemplate.setOptionsBitmask(192) + + templates = Vector() + templates.add('object/mobile/shared_dressed_corsec_captain_human_female_01.iff') + templates.add('object/mobile/shared_dressed_corsec_captain_human_male_01.iff') + templates.add('object/mobile/shared_dressed_corsec_captain_human_male_02.iff') + templates.add('object/mobile/shared_dressed_corsec_captain_human_male_03.iff') + templates.add('object/mobile/shared_dressed_corsec_officer_human_female_01.iff') + templates.add('object/mobile/shared_dressed_corsec_officer_human_male_01.iff') + templates.add('object/mobile/shared_dressed_corsec_detective_human_female_01.iff') + templates.add('object/mobile/shared_dressed_corsec_detective_human_male_01.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/carbine/shared_carbine_cdef.iff', 1, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedShot') + mobileTemplate.setAttacks(attacks) + + lootPoolNames_1 = ['Junk'] + lootPoolChances_1 = [100] + lootGroupChance_1 = 100 + mobileTemplate.addToLootGroups(lootPoolNames_1,lootPoolChances_1,lootGroupChance_1) + + core.spawnService.addMobileTemplate('corsec_traitor', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/corellia/corsec_trooper.py b/scripts/mobiles/corellia/corsec_trooper.py new file mode 100644 index 00000000..638d0853 --- /dev/null +++ b/scripts/mobiles/corellia/corsec_trooper.py @@ -0,0 +1,48 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('corsec_trooper') + mobileTemplate.setLevel(32) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(15) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(1) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("corsec") + mobileTemplate.setAssistRange(6) + mobileTemplate.setStalker(True) + mobileTemplate.setOptionsBitmask(128) + + templates = Vector() + templates.add('object/mobile/shared_dressed_corsec_captain_human_female_01.iff') + templates.add('object/mobile/shared_dressed_corsec_captain_human_male_01.iff') + templates.add('object/mobile/shared_dressed_corsec_captain_human_male_02.iff') + templates.add('object/mobile/shared_dressed_corsec_captain_human_male_03.iff') + templates.add('object/mobile/shared_dressed_corsec_officer_human_female_01.iff') + templates.add('object/mobile/shared_dressed_corsec_officer_human_male_01.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/carbine/shared_carbine_cdef.iff', 1, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedShot') + mobileTemplate.setAttacks(attacks) + + lootPoolNames_1 = ['Junk'] + lootPoolChances_1 = [100] + lootGroupChance_1 = 100 + mobileTemplate.addToLootGroups(lootPoolNames_1,lootPoolChances_1,lootGroupChance_1) + + core.spawnService.addMobileTemplate('corsec_trooper', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/corellia/crazed_durni.py b/scripts/mobiles/corellia/crazed_durni.py new file mode 100644 index 00000000..45433cfd --- /dev/null +++ b/scripts/mobiles/corellia/crazed_durni.py @@ -0,0 +1,43 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('crazed_durni') + mobileTemplate.setLevel(29) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setMeatType("Herbivore Meat") + mobileTemplate.setMeatAmount(5) + mobileTemplate.setHideType("Wooly Hide") + mobileTemplate.setHideAmount(3) + mobileTemplate.setBoneType("Mammal Bones") + mobileTemplate.setBoneAmount(2) + mobileTemplate.setSocialGroup("durni") + mobileTemplate.setAssistRange(6) + mobileTemplate.setStalker(False) + + templates = Vector() + templates.add('object/mobile/shared_durni.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('crazed_durni', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/corellia/crimson_razor_cat.py b/scripts/mobiles/corellia/crimson_razor_cat.py new file mode 100644 index 00000000..bfab3242 --- /dev/null +++ b/scripts/mobiles/corellia/crimson_razor_cat.py @@ -0,0 +1,43 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('crimson_sand_panther') + mobileTemplate.setLevel(29) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(True) + mobileTemplate.setScale(1) + mobileTemplate.setMeatType("Carnivore Meat") + mobileTemplate.setMeatAmount(65) + mobileTemplate.setHideType("Bristly Hide") + mobileTemplate.setHideAmount(35) + mobileTemplate.setBoneType("Mammal Bones") + mobileTemplate.setBoneAmount(30) + mobileTemplate.setSocialGroup("razor cat") + mobileTemplate.setAssistRange(10) + mobileTemplate.setStalker(False) + + templates = Vector() + templates.add('object/mobile/shared_corellian_sand_panther.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('crimson_razor_cat', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/corellia/cyst_coverd_rot_mite_guard.py b/scripts/mobiles/corellia/cyst_coverd_rot_mite_guard.py new file mode 100644 index 00000000..65a77d1e --- /dev/null +++ b/scripts/mobiles/corellia/cyst_coverd_rot_mite_guard.py @@ -0,0 +1,39 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('cyst_covered_rot_guard') + mobileTemplate.setLevel(12) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setMeatType("Insect Meat") + mobileTemplate.setMeatAmount(9) + mobileTemplate.setSocialGroup("decay mite") + mobileTemplate.setAssistRange(6) + mobileTemplate.setStalker(False) + + templates = Vector() + templates.add('object/mobile/shared_rot_mite.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('cyst_covered_rot_mite_guard', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/corellia/dalyrake.py b/scripts/mobiles/corellia/dalyrake.py new file mode 100644 index 00000000..0afd6f97 --- /dev/null +++ b/scripts/mobiles/corellia/dalyrake.py @@ -0,0 +1,41 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('dalyrake') + mobileTemplate.setLevel(30) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setMeatType("Insect Meat") + mobileTemplate.setMeatAmount(25) + mobileTemplate.setHideType("Scaley Hide") + mobileTemplate.setHideAmount(45) + mobileTemplate.setSocialGroup("dalyrake") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(False) + + templates = Vector() + templates.add('object/mobile/shared_dalyrake.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('dalyrake', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/corellia/dalyrake_harvester.py b/scripts/mobiles/corellia/dalyrake_harvester.py new file mode 100644 index 00000000..9578ad06 --- /dev/null +++ b/scripts/mobiles/corellia/dalyrake_harvester.py @@ -0,0 +1,41 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('dalyrake_harvester') + mobileTemplate.setLevel(35) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setMeatType("Insect Meat") + mobileTemplate.setMeatAmount(25) + mobileTemplate.setHideType("Scaley Hide") + mobileTemplate.setHideAmount(45) + mobileTemplate.setSocialGroup("dalyrake") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(False) + + templates = Vector() + templates.add('object/mobile/shared_dalyrake.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('dalyrake_harvester', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/corellia/dalyrake_matriarch.py b/scripts/mobiles/corellia/dalyrake_matriarch.py new file mode 100644 index 00000000..354cafad --- /dev/null +++ b/scripts/mobiles/corellia/dalyrake_matriarch.py @@ -0,0 +1,41 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('dalyrake_matriarch') + mobileTemplate.setLevel(31) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setMeatType("Insect Meat") + mobileTemplate.setMeatAmount(35) + mobileTemplate.setHideType("Scaley Hide") + mobileTemplate.setHideAmount(60) + mobileTemplate.setSocialGroup("dalyrake") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(False) + + templates = Vector() + templates.add('object/mobile/shared_dalyrake_matriarch.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('dalyrake_martriarch', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/corellia/deranged_wrix.py b/scripts/mobiles/corellia/deranged_wrix.py new file mode 100644 index 00000000..cff96e90 --- /dev/null +++ b/scripts/mobiles/corellia/deranged_wrix.py @@ -0,0 +1,44 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('deranged_wrix') + mobileTemplate.setLevel(32) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setMeatType("Carnivore Meat") + mobileTemplate.setMeatAmount(55) + mobileTemplate.setHideType("Bristly Hide") + mobileTemplate.setHideAmount(35) + mobileTemplate.setBoneType("Mammal Bones") + mobileTemplate.setBoneAmount(25) + mobileTemplate.setSocialGroup("wrix") + mobileTemplate.setAssistRange(10) + mobileTemplate.setStalker(False) + mobileTemplate.setOptionsBitmask(192) + + templates = Vector() + templates.add('object/mobile/shared_deranged_wrix.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('deranged_wrix', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/corellia/devil_gulginaw.py b/scripts/mobiles/corellia/devil_gulginaw.py new file mode 100644 index 00000000..271d2d18 --- /dev/null +++ b/scripts/mobiles/corellia/devil_gulginaw.py @@ -0,0 +1,40 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('devil_gulginaw') + mobileTemplate.setLevel(32) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(15) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(True) + mobileTemplate.setScale(1) + mobileTemplate.setMeatType("Avian Meat") + mobileTemplate.setMeatAmount(70) + mobileTemplate.setSocialGroup("gulginaw") + mobileTemplate.setAssistRange(10) + mobileTemplate.setStalker(False) + mobileTemplate.setOptionsBitmask(192) + + templates = Vector() + templates.add('object/mobile/shared_devil_gulginaw.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureRangedAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('devil_gulginaw', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/corellia/dire_cat.py b/scripts/mobiles/corellia/dire_cat.py new file mode 100644 index 00000000..abe8fb00 --- /dev/null +++ b/scripts/mobiles/corellia/dire_cat.py @@ -0,0 +1,43 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('dire_cat') + mobileTemplate.setLevel(28) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(True) + mobileTemplate.setScale(1) + mobileTemplate.setMeatType("Carnivore Meat") + mobileTemplate.setMeatAmount(65) + mobileTemplate.setHideType("Bristly Hide") + mobileTemplate.setHideAmount(35) + mobileTemplate.setBoneType("Mammal Bones") + mobileTemplate.setBoneAmount(30) + mobileTemplate.setSocialGroup("dire cat") + mobileTemplate.setAssistRange(6) + mobileTemplate.setStalker(False) + + templates = Vector() + templates.add('object/mobile/shared_dire_cat.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('dire_cat', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/corellia/diseased_vrelt.py b/scripts/mobiles/corellia/diseased_vrelt.py new file mode 100644 index 00000000..8d6cf5d5 --- /dev/null +++ b/scripts/mobiles/corellia/diseased_vrelt.py @@ -0,0 +1,43 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('diseased_vrelt') + mobileTemplate.setLevel(26) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(True) + mobileTemplate.setScale(1) + mobileTemplate.setMeatType("Wild Meat") + mobileTemplate.setMeatAmount(4) + mobileTemplate.setHideType("Leathery Hide") + mobileTemplate.setHideAmount(3) + mobileTemplate.setBoneType("Mammal Bones") + mobileTemplate.setBoneAmount(2) + mobileTemplate.setSocialGroup("vrelt") + mobileTemplate.setAssistRange(10) + mobileTemplate.setStalker(False) + + templates = Vector() + templates.add('object/mobile/shared_vrelt.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('diseased_vrelt', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/corellia/diseased_vrelt_matriarch.py b/scripts/mobiles/corellia/diseased_vrelt_matriarch.py new file mode 100644 index 00000000..4246b62d --- /dev/null +++ b/scripts/mobiles/corellia/diseased_vrelt_matriarch.py @@ -0,0 +1,43 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('diseased_vrelt_matriarch') + mobileTemplate.setLevel(6) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(15) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(True) + mobileTemplate.setScale(1) + mobileTemplate.setMeatType("Carnivore Meat") + mobileTemplate.setMeatAmount(10) + mobileTemplate.setHideType("Bristly Hide") + mobileTemplate.setHideAmount(10) + mobileTemplate.setBoneType("Mammal Bones") + mobileTemplate.setBoneAmount(10) + mobileTemplate.setSocialGroup("vrelt") + mobileTemplate.setAssistRange(10) + mobileTemplate.setStalker(False) + + templates = Vector() + templates.add('object/mobile/shared_vrelt.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureRangedAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('diseased_vrelt_matriarch', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/corellia/domestic_bageraset.py b/scripts/mobiles/corellia/domestic_bageraset.py new file mode 100644 index 00000000..b86adf57 --- /dev/null +++ b/scripts/mobiles/corellia/domestic_bageraset.py @@ -0,0 +1,43 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('domestic_bageraset') + mobileTemplate.setLevel(5) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setMeatType("Herbivore Meat") + mobileTemplate.setMeatAmount(240) + mobileTemplate.setHideType("Leathery Hide") + mobileTemplate.setHideAmount(145) + mobileTemplate.setBoneType("Mammal Bones") + mobileTemplate.setBoneAmount(104) + mobileTemplate.setSocialGroup("bageraset") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(False) + + templates = Vector() + templates.add('object/mobile/shared_bageraset.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('domestic_bageraset', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/corellia/domestic_humbaba.py b/scripts/mobiles/corellia/domestic_humbaba.py new file mode 100644 index 00000000..694a2810 --- /dev/null +++ b/scripts/mobiles/corellia/domestic_humbaba.py @@ -0,0 +1,43 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('domestic_humbaba') + mobileTemplate.setLevel(4) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setMeatType("Domesticated Meat") + mobileTemplate.setMeatAmount(215) + mobileTemplate.setHideType("Leathery Hide") + mobileTemplate.setHideAmount(115) + mobileTemplate.setBoneType("Mammal Bones") + mobileTemplate.setBoneAmount(65) + mobileTemplate.setSocialGroup("humbaba") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(False) + + templates = Vector() + templates.add('object/mobile/shared_savage_humbaba.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('domestic_humbaba', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/corellia/domestic_krahbu.py b/scripts/mobiles/corellia/domestic_krahbu.py new file mode 100644 index 00000000..e06360aa --- /dev/null +++ b/scripts/mobiles/corellia/domestic_krahbu.py @@ -0,0 +1,43 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('domestic_krahbu') + mobileTemplate.setLevel(4) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setMeatType("Herbivore Meat") + mobileTemplate.setMeatAmount(230) + mobileTemplate.setHideType("Bristly Hide") + mobileTemplate.setHideAmount(160) + mobileTemplate.setBoneType("Mammal Bones") + mobileTemplate.setBoneAmount(145) + mobileTemplate.setSocialGroup("krahbu") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(False) + + templates = Vector() + templates.add('object/mobile/shared_krahbu.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('domestic_krahbu', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/corellia/drall_abbot.py b/scripts/mobiles/corellia/drall_abbot.py new file mode 100644 index 00000000..d9f268fa --- /dev/null +++ b/scripts/mobiles/corellia/drall_abbot.py @@ -0,0 +1,44 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('drall_abbot') + mobileTemplate.setLevel(33) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(15) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(1) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("drall") + mobileTemplate.setAssistRange(6) + mobileTemplate.setStalker(True) + mobileTemplate.setOptionsBitmask(192) + + templates = Vector() + templates.add('object/mobile/shared_drall_female.iff') + templates.add('object/mobile/shared_drall_male.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/carbine/shared_carbine_cdef.iff', 1, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedShot') + mobileTemplate.setAttacks(attacks) + + lootPoolNames_1 = ['Junk'] + lootPoolChances_1 = [100] + lootGroupChance_1 = 100 + mobileTemplate.addToLootGroups(lootPoolNames_1,lootPoolChances_1,lootGroupChance_1) + + core.spawnService.addMobileTemplate('drall_abbot', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/corellia/drall_chieftain.py b/scripts/mobiles/corellia/drall_chieftain.py new file mode 100644 index 00000000..ad9d8a27 --- /dev/null +++ b/scripts/mobiles/corellia/drall_chieftain.py @@ -0,0 +1,44 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('drall_chieftain') + mobileTemplate.setLevel(38) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(15) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(1) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("drall") + mobileTemplate.setAssistRange(6) + mobileTemplate.setStalker(True) + mobileTemplate.setOptionsBitmask(192) + + templates = Vector() + templates.add('object/mobile/shared_drall_female.iff') + templates.add('object/mobile/shared_drall_male.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/carbine/shared_carbine_cdef.iff', 1, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedShot') + mobileTemplate.setAttacks(attacks) + + lootPoolNames_1 = ['Junk'] + lootPoolChances_1 = [100] + lootGroupChance_1 = 100 + mobileTemplate.addToLootGroups(lootPoolNames_1,lootPoolChances_1,lootGroupChance_1) + + core.spawnService.addMobileTemplate('drall_chieftain', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/corellia/drall_guard.py b/scripts/mobiles/corellia/drall_guard.py new file mode 100644 index 00000000..244b394e --- /dev/null +++ b/scripts/mobiles/corellia/drall_guard.py @@ -0,0 +1,44 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('drall_guard') + mobileTemplate.setLevel(36) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(15) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(1) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("drall") + mobileTemplate.setAssistRange(6) + mobileTemplate.setStalker(True) + mobileTemplate.setOptionsBitmask(192) + + templates = Vector() + templates.add('object/mobile/shared_drall_female.iff') + templates.add('object/mobile/shared_drall_male.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/carbine/shared_carbine_cdef.iff', 1, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedShot') + mobileTemplate.setAttacks(attacks) + + lootPoolNames_1 = ['Junk'] + lootPoolChances_1 = [100] + lootGroupChance_1 = 100 + mobileTemplate.addToLootGroups(lootPoolNames_1,lootPoolChances_1,lootGroupChance_1) + + core.spawnService.addMobileTemplate('drall_guard', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/corellia/drall_master.py b/scripts/mobiles/corellia/drall_master.py new file mode 100644 index 00000000..69888d59 --- /dev/null +++ b/scripts/mobiles/corellia/drall_master.py @@ -0,0 +1,44 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('drall_master') + mobileTemplate.setLevel(37) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(15) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(1) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("drall") + mobileTemplate.setAssistRange(6) + mobileTemplate.setStalker(True) + mobileTemplate.setOptionsBitmask(192) + + templates = Vector() + templates.add('object/mobile/shared_drall_female.iff') + templates.add('object/mobile/shared_drall_male.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/carbine/shared_carbine_cdef.iff', 1, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedShot') + mobileTemplate.setAttacks(attacks) + + lootPoolNames_1 = ['Junk'] + lootPoolChances_1 = [100] + lootGroupChance_1 = 100 + mobileTemplate.addToLootGroups(lootPoolNames_1,lootPoolChances_1,lootGroupChance_1) + + core.spawnService.addMobileTemplate('drall_master', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/corellia/drall_monk.py b/scripts/mobiles/corellia/drall_monk.py new file mode 100644 index 00000000..a2324d7c --- /dev/null +++ b/scripts/mobiles/corellia/drall_monk.py @@ -0,0 +1,44 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('drall_monk') + mobileTemplate.setLevel(37) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(15) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(1) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("drall") + mobileTemplate.setAssistRange(6) + mobileTemplate.setStalker(True) + mobileTemplate.setOptionsBitmask(192) + + templates = Vector() + templates.add('object/mobile/shared_drall_female.iff') + templates.add('object/mobile/shared_drall_male.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/carbine/shared_carbine_cdef.iff', 1, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedShot') + mobileTemplate.setAttacks(attacks) + + lootPoolNames_1 = ['Junk'] + lootPoolChances_1 = [100] + lootGroupChance_1 = 100 + mobileTemplate.addToLootGroups(lootPoolNames_1,lootPoolChances_1,lootGroupChance_1) + + core.spawnService.addMobileTemplate('drall_monk', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/corellia/drall_patriot.py b/scripts/mobiles/corellia/drall_patriot.py new file mode 100644 index 00000000..ab5aaae3 --- /dev/null +++ b/scripts/mobiles/corellia/drall_patriot.py @@ -0,0 +1,44 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('drall_patriot') + mobileTemplate.setLevel(37) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(15) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(2) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("drall") + mobileTemplate.setAssistRange(6) + mobileTemplate.setStalker(True) + mobileTemplate.setOptionsBitmask(192) + + templates = Vector() + templates.add('object/mobile/shared_drall_female.iff') + templates.add('object/mobile/shared_drall_male.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/pistol/shared_pistol_d18.iff', 2, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedShot') + mobileTemplate.setAttacks(attacks) + + lootPoolNames_1 = ['Junk'] + lootPoolChances_1 = [100] + lootGroupChance_1 = 100 + mobileTemplate.addToLootGroups(lootPoolNames_1,lootPoolChances_1,lootGroupChance_1) + + core.spawnService.addMobileTemplate('drall_patriot', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/corellia/drall_patriot_conqueror.py b/scripts/mobiles/corellia/drall_patriot_conqueror.py new file mode 100644 index 00000000..b0da4289 --- /dev/null +++ b/scripts/mobiles/corellia/drall_patriot_conqueror.py @@ -0,0 +1,44 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('drall_patriot_conqueror') + mobileTemplate.setLevel(38) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(15) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(1) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("drall") + mobileTemplate.setAssistRange(6) + mobileTemplate.setStalker(True) + mobileTemplate.setOptionsBitmask(192) + + templates = Vector() + templates.add('object/mobile/shared_drall_female.iff') + templates.add('object/mobile/shared_drall_male.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/carbine/shared_carbine_cdef.iff', 1, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedShot') + mobileTemplate.setAttacks(attacks) + + lootPoolNames_1 = ['Junk'] + lootPoolChances_1 = [100] + lootGroupChance_1 = 100 + mobileTemplate.addToLootGroups(lootPoolNames_1,lootPoolChances_1,lootGroupChance_1) + + core.spawnService.addMobileTemplate('drall_patriot_conqueror', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/corellia/drall_patriot_footsoldier.py b/scripts/mobiles/corellia/drall_patriot_footsoldier.py new file mode 100644 index 00000000..07092987 --- /dev/null +++ b/scripts/mobiles/corellia/drall_patriot_footsoldier.py @@ -0,0 +1,44 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('drall_patriot_footsoldier') + mobileTemplate.setLevel(37) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(15) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(1) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("drall") + mobileTemplate.setAssistRange(6) + mobileTemplate.setStalker(True) + mobileTemplate.setOptionsBitmask(192) + + templates = Vector() + templates.add('object/mobile/shared_drall_female.iff') + templates.add('object/mobile/shared_drall_male.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/carbine/shared_carbine_cdef.iff', 1, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedShot') + mobileTemplate.setAttacks(attacks) + + lootPoolNames_1 = ['Junk'] + lootPoolChances_1 = [100] + lootGroupChance_1 = 100 + mobileTemplate.addToLootGroups(lootPoolNames_1,lootPoolChances_1,lootGroupChance_1) + + core.spawnService.addMobileTemplate('drall_patriot_footsoldier', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/corellia/drall_patriot_legionnaire.py b/scripts/mobiles/corellia/drall_patriot_legionnaire.py new file mode 100644 index 00000000..63965e2c --- /dev/null +++ b/scripts/mobiles/corellia/drall_patriot_legionnaire.py @@ -0,0 +1,44 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('drall_patriot_legionnaire') + mobileTemplate.setLevel(38) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(15) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(1) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("drall") + mobileTemplate.setAssistRange(6) + mobileTemplate.setStalker(True) + mobileTemplate.setOptionsBitmask(192) + + templates = Vector() + templates.add('object/mobile/shared_drall_female.iff') + templates.add('object/mobile/shared_drall_male.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/carbine/shared_carbine_cdef.iff', 1, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedShot') + mobileTemplate.setAttacks(attacks) + + lootPoolNames_1 = ['Junk'] + lootPoolChances_1 = [100] + lootGroupChance_1 = 100 + mobileTemplate.addToLootGroups(lootPoolNames_1,lootPoolChances_1,lootGroupChance_1) + + core.spawnService.addMobileTemplate('drall_patriot_legionnaire', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/corellia/drall_sentry.py b/scripts/mobiles/corellia/drall_sentry.py new file mode 100644 index 00000000..5a0222ca --- /dev/null +++ b/scripts/mobiles/corellia/drall_sentry.py @@ -0,0 +1,44 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('drall_sentry') + mobileTemplate.setLevel(37) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(15) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(1) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("drall") + mobileTemplate.setAssistRange(6) + mobileTemplate.setStalker(True) + mobileTemplate.setOptionsBitmask(192) + + templates = Vector() + templates.add('object/mobile/shared_drall_female.iff') + templates.add('object/mobile/shared_drall_male.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/carbine/shared_carbine_cdef.iff', 1, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedShot') + mobileTemplate.setAttacks(attacks) + + lootPoolNames_1 = ['Junk'] + lootPoolChances_1 = [100] + lootGroupChance_1 = 100 + mobileTemplate.addToLootGroups(lootPoolNames_1,lootPoolChances_1,lootGroupChance_1) + + core.spawnService.addMobileTemplate('drall_sentry', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/corellia/dung_mite_worker.py b/scripts/mobiles/corellia/dung_mite_worker.py new file mode 100644 index 00000000..89c5cce3 --- /dev/null +++ b/scripts/mobiles/corellia/dung_mite_worker.py @@ -0,0 +1,39 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('sickening_dung_mite_worker') + mobileTemplate.setLevel(13) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(15) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(True) + mobileTemplate.setScale(1) + mobileTemplate.setMeatType("Insect Meat") + mobileTemplate.setMeatAmount(11) + mobileTemplate.setSocialGroup("decay mite") + mobileTemplate.setAssistRange(6) + mobileTemplate.setStalker(False) + + templates = Vector() + templates.add('object/mobile/shared_sickening_dung_mite_worker.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureRangedAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('dung_mite_worker', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/corellia/durni.py b/scripts/mobiles/corellia/durni.py new file mode 100644 index 00000000..a7fd3f7d --- /dev/null +++ b/scripts/mobiles/corellia/durni.py @@ -0,0 +1,43 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('durni') + mobileTemplate.setLevel(25) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setMeatType("Herbivore Meat") + mobileTemplate.setMeatAmount(5) + mobileTemplate.setHideType("Wooly Hide") + mobileTemplate.setHideAmount(3) + mobileTemplate.setBoneType("Mammal Bones") + mobileTemplate.setBoneAmount(2) + mobileTemplate.setSocialGroup("durni") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(False) + + templates = Vector() + templates.add('object/mobile/shared_durni.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('durni', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/corellia/dwarf_gronda.py b/scripts/mobiles/corellia/dwarf_gronda.py new file mode 100644 index 00000000..1926acbf --- /dev/null +++ b/scripts/mobiles/corellia/dwarf_gronda.py @@ -0,0 +1,43 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('dwarf_gronda') + mobileTemplate.setLevel(31) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setMeatType("Carnivore Meat") + mobileTemplate.setMeatAmount(280) + mobileTemplate.setHideType("Leathery Hide") + mobileTemplate.setHideAmount(170) + mobileTemplate.setBoneType("Mammal Bones") + mobileTemplate.setBoneAmount(90) + mobileTemplate.setSocialGroup("gronda") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(False) + + templates = Vector() + templates.add('object/mobile/shared_dwarf_gronda.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('dwarf_gronda', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/corellia/elder_gronda.py b/scripts/mobiles/corellia/elder_gronda.py new file mode 100644 index 00000000..006baee8 --- /dev/null +++ b/scripts/mobiles/corellia/elder_gronda.py @@ -0,0 +1,43 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('gronda_elder') + mobileTemplate.setLevel(33) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(True) + mobileTemplate.setScale(1) + mobileTemplate.setMeatType("Carnivore Meat") + mobileTemplate.setMeatAmount(360) + mobileTemplate.setHideType("Leathery Hide") + mobileTemplate.setHideAmount(270) + mobileTemplate.setBoneType("Mammal Bones") + mobileTemplate.setBoneAmount(180) + mobileTemplate.setSocialGroup("gronda") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(False) + + templates = Vector() + templates.add('object/mobile/shared_gronda.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('elder_gronda', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/corellia/enraged_carrion_spat.py b/scripts/mobiles/corellia/enraged_carrion_spat.py new file mode 100644 index 00000000..ab07bdb8 --- /dev/null +++ b/scripts/mobiles/corellia/enraged_carrion_spat.py @@ -0,0 +1,41 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('corellia_enraged_carrion_spat') + mobileTemplate.setLevel(16) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setMeatType("Avian Meat") + mobileTemplate.setMeatAmount(260) + mobileTemplate.setBoneType("Avian Bones") + mobileTemplate.setBoneAmount(180) + mobileTemplate.setSocialGroup("enraged carrion spat") + mobileTemplate.setAssistRange(6) + mobileTemplate.setStalker(False) + + templates = Vector() + templates.add('object/mobile/shared_carrion_spat.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('enraged_carrion_spat', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/corellia/enraged_tabage_mother.py b/scripts/mobiles/corellia/enraged_tabage_mother.py new file mode 100644 index 00000000..9082316a --- /dev/null +++ b/scripts/mobiles/corellia/enraged_tabage_mother.py @@ -0,0 +1,43 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('enraged_tabage_mother') + mobileTemplate.setLevel(16) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(True) + mobileTemplate.setScale(1) + mobileTemplate.setMeatType("Carnivore Meat") + mobileTemplate.setMeatAmount(16) + mobileTemplate.setHideType("Bristly Hide") + mobileTemplate.setHideAmount(16) + mobileTemplate.setBoneType("Mammal Bones") + mobileTemplate.setBoneAmount(16) + mobileTemplate.setSocialGroup("tagage") + mobileTemplate.setAssistRange(10) + mobileTemplate.setStalker(False) + + templates = Vector() + templates.add('object/mobile/shared_tabage.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('enraged_tabage_mother', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/corellia/female_dire_cat.py b/scripts/mobiles/corellia/female_dire_cat.py new file mode 100644 index 00000000..ee360478 --- /dev/null +++ b/scripts/mobiles/corellia/female_dire_cat.py @@ -0,0 +1,43 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('female_dire_cat') + mobileTemplate.setLevel(29) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(True) + mobileTemplate.setScale(1) + mobileTemplate.setMeatType("Carnivore Meat") + mobileTemplate.setMeatAmount(65) + mobileTemplate.setHideType("Bristly Hide") + mobileTemplate.setHideAmount(35) + mobileTemplate.setBoneType("Mammal Bones") + mobileTemplate.setBoneAmount(30) + mobileTemplate.setSocialGroup("dire cat") + mobileTemplate.setAssistRange(6) + mobileTemplate.setStalker(False) + + templates = Vector() + templates.add('object/mobile/shared_female_dire_cat.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('female_dire_cat', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/corellia/female_forest_slice_hound.py b/scripts/mobiles/corellia/female_forest_slice_hound.py new file mode 100644 index 00000000..f7cae4d5 --- /dev/null +++ b/scripts/mobiles/corellia/female_forest_slice_hound.py @@ -0,0 +1,43 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('female_forest_slice_hound') + mobileTemplate.setLevel(30) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(True) + mobileTemplate.setScale(1) + mobileTemplate.setMeatType("Carnivore Meat") + mobileTemplate.setMeatAmount(65) + mobileTemplate.setHideType("Bristly Hide") + mobileTemplate.setHideAmount(35) + mobileTemplate.setBoneType("Mammal Bones") + mobileTemplate.setBoneAmount(30) + mobileTemplate.setSocialGroup("slice hound forest") + mobileTemplate.setAssistRange(6) + mobileTemplate.setStalker(False) + + templates = Vector() + templates.add('object/mobile/shared_forest_slice_hound.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('female_forest_slice_hound', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/corellia/female_grassland_slice_hound.py b/scripts/mobiles/corellia/female_grassland_slice_hound.py new file mode 100644 index 00000000..61a1d186 --- /dev/null +++ b/scripts/mobiles/corellia/female_grassland_slice_hound.py @@ -0,0 +1,43 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('female_grassland_slice_hound') + mobileTemplate.setLevel(29) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(True) + mobileTemplate.setScale(1) + mobileTemplate.setMeatType("Carnivore Meat") + mobileTemplate.setMeatAmount(65) + mobileTemplate.setHideType("Bristly Hide") + mobileTemplate.setHideAmount(35) + mobileTemplate.setBoneType("Mammal Bones") + mobileTemplate.setBoneAmount(30) + mobileTemplate.setSocialGroup("slice hound grassland") + mobileTemplate.setAssistRange(6) + mobileTemplate.setStalker(False) + + templates = Vector() + templates.add('object/mobile/shared_female_grassland_slice_hound.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('female_grassland_slice_hound', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/corellia/female_razor_cat.py b/scripts/mobiles/corellia/female_razor_cat.py new file mode 100644 index 00000000..fed1bf7a --- /dev/null +++ b/scripts/mobiles/corellia/female_razor_cat.py @@ -0,0 +1,43 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('female_sand_panther') + mobileTemplate.setLevel(29) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(True) + mobileTemplate.setScale(1) + mobileTemplate.setMeatType("Carnivore Meat") + mobileTemplate.setMeatAmount(65) + mobileTemplate.setHideType("Bristly Hide") + mobileTemplate.setHideAmount(35) + mobileTemplate.setBoneType("Mammal Bones") + mobileTemplate.setBoneAmount(30) + mobileTemplate.setSocialGroup("razor cat") + mobileTemplate.setAssistRange(10) + mobileTemplate.setStalker(True) + + templates = Vector() + templates.add('object/mobile/shared_crimson_sand_panther.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('female_razor_cat', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/corellia/female_slice_hound.py b/scripts/mobiles/corellia/female_slice_hound.py new file mode 100644 index 00000000..58b7affa --- /dev/null +++ b/scripts/mobiles/corellia/female_slice_hound.py @@ -0,0 +1,43 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('female_forest_slice_hound') + mobileTemplate.setLevel(26) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setMeatType("Carnivore Meat") + mobileTemplate.setMeatAmount(65) + mobileTemplate.setHideType("Bristly Hide") + mobileTemplate.setHideAmount(35) + mobileTemplate.setBoneType("Mammal Bones") + mobileTemplate.setBoneAmount(30) + mobileTemplate.setSocialGroup("slice hound") + mobileTemplate.setAssistRange(6) + mobileTemplate.setStalker(False) + + templates = Vector() + templates.add('object/mobile/shared_corellian_slice_hound.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('female_slice_hound', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/corellia/feral_orphan.py b/scripts/mobiles/corellia/feral_orphan.py new file mode 100644 index 00000000..663a9977 --- /dev/null +++ b/scripts/mobiles/corellia/feral_orphan.py @@ -0,0 +1,43 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('dire_cat_feral_orphan') + mobileTemplate.setLevel(12) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setMeatType("Carnivore Meat") + mobileTemplate.setMeatAmount(65) + mobileTemplate.setHideType("Bristly Hide") + mobileTemplate.setHideAmount(35) + mobileTemplate.setBoneType("Mammal Bones") + mobileTemplate.setBoneAmount(30) + mobileTemplate.setSocialGroup("dire cat") + mobileTemplate.setAssistRange(6) + mobileTemplate.setStalker(False) + + templates = Vector() + templates.add('object/mobile/shared_dire_cat.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('orphan_dire_cat', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/corellia/feral_selonian.py b/scripts/mobiles/corellia/feral_selonian.py new file mode 100644 index 00000000..b85048e4 --- /dev/null +++ b/scripts/mobiles/corellia/feral_selonian.py @@ -0,0 +1,66 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('feral_selonian') + mobileTemplate.setLevel(39) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(15) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(2) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(True) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("self") + mobileTemplate.setAssistRange(6) + mobileTemplate.setStalker(True) + mobileTemplate.setOptionsBitmask(192) + + templates = Vector() + templates.add('object/mobile/shared_dressed_selonian_m_01.iff') + templates.add('object/mobile/shared_dressed_selonian_m_02.iff') + templates.add('object/mobile/shared_dressed_selonian_m_03.iff') + templates.add('object/mobile/shared_dressed_selonian_m_04.iff') + templates.add('object/mobile/shared_dressed_selonian_m_05.iff') + templates.add('object/mobile/shared_dressed_selonian_m_06.iff') + templates.add('object/mobile/shared_dressed_selonian_m_07.iff') + templates.add('object/mobile/shared_dressed_selonian_m_08.iff') + templates.add('object/mobile/shared_dressed_selonian_m_09.iff') + templates.add('object/mobile/shared_dressed_selonian_m_10.iff') + templates.add('object/mobile/shared_dressed_selonian_m_11.iff') + templates.add('object/mobile/shared_dressed_selonian_m_12.iff') + templates.add('object/mobile/shared_dressed_selonian_f_01.iff') + templates.add('object/mobile/shared_dressed_selonian_f_02.iff') + templates.add('object/mobile/shared_dressed_selonian_f_03.iff') + templates.add('object/mobile/shared_dressed_selonian_f_04.iff') + templates.add('object/mobile/shared_dressed_selonian_f_05.iff') + templates.add('object/mobile/shared_dressed_selonian_f_06.iff') + templates.add('object/mobile/shared_dressed_selonian_f_07.iff') + templates.add('object/mobile/shared_dressed_selonian_f_08.iff') + templates.add('object/mobile/shared_dressed_selonian_f_09.iff') + templates.add('object/mobile/shared_dressed_selonian_f_10.iff') + templates.add('object/mobile/shared_dressed_selonian_f_11.iff') + templates.add('object/mobile/shared_dressed_selonian_f_12.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/pistol/shared_pistol_d18.iff', 2, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedShot') + mobileTemplate.setAttacks(attacks) + + lootPoolNames_1 = ['Junk'] + lootPoolChances_1 = [100] + lootGroupChance_1 = 100 + mobileTemplate.addToLootGroups(lootPoolNames_1,lootPoolChances_1,lootGroupChance_1) + + core.spawnService.addMobileTemplate('feral_selonian', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/corellia/flail_boss.py b/scripts/mobiles/corellia/flail_boss.py new file mode 100644 index 00000000..a08e159b --- /dev/null +++ b/scripts/mobiles/corellia/flail_boss.py @@ -0,0 +1,46 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('flail_boss') + mobileTemplate.setLevel(32) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(15) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(1) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(True) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("flail") + mobileTemplate.setAssistRange(6) + mobileTemplate.setStalker(True) + mobileTemplate.setOptionsBitmask(192) + + templates = Vector() + templates.add('object/mobile/shared_dressed_criminal_thug_human_female_01.iff') + templates.add('object/mobile/shared_dressed_criminal_thug_human_female_02.iff') + templates.add('object/mobile/shared_dressed_criminal_thug_human_male_01.iff') + templates.add('object/mobile/shared_dressed_criminal_thug_human_male_02.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/carbine/shared_carbine_e11.iff', 1, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedShot') + mobileTemplate.setAttacks(attacks) + + lootPoolNames_1 = ['Junk'] + lootPoolChances_1 = [100] + lootGroupChance_1 = 100 + mobileTemplate.addToLootGroups(lootPoolNames_1,lootPoolChances_1,lootGroupChance_1) + + core.spawnService.addMobileTemplate('flail_boss', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/corellia/flail_butcher.py b/scripts/mobiles/corellia/flail_butcher.py new file mode 100644 index 00000000..127d98d5 --- /dev/null +++ b/scripts/mobiles/corellia/flail_butcher.py @@ -0,0 +1,46 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('flail_butcher') + mobileTemplate.setLevel(31) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(15) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(2) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(True) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("flail") + mobileTemplate.setAssistRange(6) + mobileTemplate.setStalker(True) + mobileTemplate.setOptionsBitmask(192) + + templates = Vector() + templates.add('object/mobile/shared_dressed_criminal_thug_human_female_01.iff') + templates.add('object/mobile/shared_dressed_criminal_thug_human_female_02.iff') + templates.add('object/mobile/shared_dressed_criminal_thug_human_male_01.iff') + templates.add('object/mobile/shared_dressed_criminal_thug_human_male_02.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/pistol/shared_pistol_d18.iff', 2, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedShot') + mobileTemplate.setAttacks(attacks) + + lootPoolNames_1 = ['Junk'] + lootPoolChances_1 = [100] + lootGroupChance_1 = 100 + mobileTemplate.addToLootGroups(lootPoolNames_1,lootPoolChances_1,lootGroupChance_1) + + core.spawnService.addMobileTemplate('flail_butcher', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/corellia/flail_cutthroat.py b/scripts/mobiles/corellia/flail_cutthroat.py new file mode 100644 index 00000000..721fd3a1 --- /dev/null +++ b/scripts/mobiles/corellia/flail_cutthroat.py @@ -0,0 +1,46 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('flail_cutthroat') + mobileTemplate.setLevel(30) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(15) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(7) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("flail") + mobileTemplate.setAssistRange(6) + mobileTemplate.setStalker(True) + mobileTemplate.setOptionsBitmask(192) + + templates = Vector() + templates.add('object/mobile/shared_dressed_criminal_thug_human_female_01.iff') + templates.add('object/mobile/shared_dressed_criminal_thug_human_female_02.iff') + templates.add('object/mobile/shared_dressed_criminal_thug_human_male_01.iff') + templates.add('object/mobile/shared_dressed_criminal_thug_human_male_02.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/polearm/shared_polearm_vibro_axe.iff', 7, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('meleeHit') + mobileTemplate.setAttacks(attacks) + + lootPoolNames_1 = ['Junk'] + lootPoolChances_1 = [100] + lootGroupChance_1 = 100 + mobileTemplate.addToLootGroups(lootPoolNames_1,lootPoolChances_1,lootGroupChance_1) + + core.spawnService.addMobileTemplate('flail_cutthroat', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/corellia/flail_enforcer.py b/scripts/mobiles/corellia/flail_enforcer.py new file mode 100644 index 00000000..4e229bd2 --- /dev/null +++ b/scripts/mobiles/corellia/flail_enforcer.py @@ -0,0 +1,46 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('flail_enforcer') + mobileTemplate.setLevel(30) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(15) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(1) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("flail") + mobileTemplate.setAssistRange(6) + mobileTemplate.setStalker(True) + mobileTemplate.setOptionsBitmask(192) + + templates = Vector() + templates.add('object/mobile/shared_dressed_criminal_thug_human_female_01.iff') + templates.add('object/mobile/shared_dressed_criminal_thug_human_female_02.iff') + templates.add('object/mobile/shared_dressed_criminal_thug_human_male_01.iff') + templates.add('object/mobile/shared_dressed_criminal_thug_human_male_02.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/carbine/shared_carbine_e11.iff', 1, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedShot') + mobileTemplate.setAttacks(attacks) + + lootPoolNames_1 = ['Junk'] + lootPoolChances_1 = [100] + lootGroupChance_1 = 100 + mobileTemplate.addToLootGroups(lootPoolNames_1,lootPoolChances_1,lootGroupChance_1) + + core.spawnService.addMobileTemplate('flail_enforcer', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/corellia/flail_executioner.py b/scripts/mobiles/corellia/flail_executioner.py new file mode 100644 index 00000000..251866ee --- /dev/null +++ b/scripts/mobiles/corellia/flail_executioner.py @@ -0,0 +1,46 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('flail_executioner') + mobileTemplate.setLevel(30) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(15) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(1) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("flail") + mobileTemplate.setAssistRange(6) + mobileTemplate.setStalker(True) + mobileTemplate.setOptionsBitmask(192) + + templates = Vector() + templates.add('object/mobile/shared_dressed_criminal_thug_human_female_01.iff') + templates.add('object/mobile/shared_dressed_criminal_thug_human_female_02.iff') + templates.add('object/mobile/shared_dressed_criminal_thug_human_male_01.iff') + templates.add('object/mobile/shared_dressed_criminal_thug_human_male_02.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/carbine/shared_carbine_e11.iff', 1, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedShot') + mobileTemplate.setAttacks(attacks) + + lootPoolNames_1 = ['Junk'] + lootPoolChances_1 = [100] + lootGroupChance_1 = 100 + mobileTemplate.addToLootGroups(lootPoolNames_1,lootPoolChances_1,lootGroupChance_1) + + core.spawnService.addMobileTemplate('flail_executioner', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/corellia/flail_killer.py b/scripts/mobiles/corellia/flail_killer.py new file mode 100644 index 00000000..e6c959a9 --- /dev/null +++ b/scripts/mobiles/corellia/flail_killer.py @@ -0,0 +1,46 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('flail_killer') + mobileTemplate.setLevel(30) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(15) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(1) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("flail") + mobileTemplate.setAssistRange(6) + mobileTemplate.setStalker(True) + mobileTemplate.setOptionsBitmask(192) + + templates = Vector() + templates.add('object/mobile/shared_dressed_criminal_thug_human_female_01.iff') + templates.add('object/mobile/shared_dressed_criminal_thug_human_female_02.iff') + templates.add('object/mobile/shared_dressed_criminal_thug_human_male_01.iff') + templates.add('object/mobile/shared_dressed_criminal_thug_human_male_02.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/carbine/shared_carbine_e11.iff', 1, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedShot') + mobileTemplate.setAttacks(attacks) + + lootPoolNames_1 = ['Junk'] + lootPoolChances_1 = [100] + lootGroupChance_1 = 100 + mobileTemplate.addToLootGroups(lootPoolNames_1,lootPoolChances_1,lootGroupChance_1) + + core.spawnService.addMobileTemplate('flail_killer', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/corellia/flail_slayer.py b/scripts/mobiles/corellia/flail_slayer.py new file mode 100644 index 00000000..d5c322a6 --- /dev/null +++ b/scripts/mobiles/corellia/flail_slayer.py @@ -0,0 +1,46 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('flail_slayer') + mobileTemplate.setLevel(31) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(15) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(1) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("flail") + mobileTemplate.setAssistRange(6) + mobileTemplate.setStalker(True) + mobileTemplate.setOptionsBitmask(192) + + templates = Vector() + templates.add('object/mobile/shared_dressed_criminal_thug_human_female_01.iff') + templates.add('object/mobile/shared_dressed_criminal_thug_human_female_02.iff') + templates.add('object/mobile/shared_dressed_criminal_thug_human_male_01.iff') + templates.add('object/mobile/shared_dressed_criminal_thug_human_male_02.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/carbine/shared_carbine_e11.iff', 1, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedShot') + mobileTemplate.setAttacks(attacks) + + lootPoolNames_1 = ['Junk'] + lootPoolChances_1 = [100] + lootGroupChance_1 = 100 + mobileTemplate.addToLootGroups(lootPoolNames_1,lootPoolChances_1,lootGroupChance_1) + + core.spawnService.addMobileTemplate('flail_slayer', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/corellia/forest_murra.py b/scripts/mobiles/corellia/forest_murra.py new file mode 100644 index 00000000..e2bb7af8 --- /dev/null +++ b/scripts/mobiles/corellia/forest_murra.py @@ -0,0 +1,43 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('forest_murra') + mobileTemplate.setLevel(31) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setMeatType("Herbivore Meat") + mobileTemplate.setMeatAmount(75) + mobileTemplate.setHideType("Bristly Hide") + mobileTemplate.setHideAmount(35) + mobileTemplate.setBoneType("Mammal Bones") + mobileTemplate.setBoneAmount(30) + mobileTemplate.setSocialGroup("murra") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(False) + + templates = Vector() + templates.add('object/mobile/shared_forest_murra.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('forest_murra', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/corellia/forest_slice_hound.py b/scripts/mobiles/corellia/forest_slice_hound.py new file mode 100644 index 00000000..9a0d01d0 --- /dev/null +++ b/scripts/mobiles/corellia/forest_slice_hound.py @@ -0,0 +1,43 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('forest_slice_hound') + mobileTemplate.setLevel(31) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setMeatType("Carnivore Meat") + mobileTemplate.setMeatAmount(65) + mobileTemplate.setHideType("Bristly Hide") + mobileTemplate.setHideAmount(35) + mobileTemplate.setBoneType("Mammal Bones") + mobileTemplate.setBoneAmount(30) + mobileTemplate.setSocialGroup("slice hound forest") + mobileTemplate.setAssistRange(6) + mobileTemplate.setStalker(False) + + templates = Vector() + templates.add('object/mobile/shared_corellian_slice_hound.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('forest_slice_hound', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/corellia/giant_carrion_spat.py b/scripts/mobiles/corellia/giant_carrion_spat.py new file mode 100644 index 00000000..6439aec0 --- /dev/null +++ b/scripts/mobiles/corellia/giant_carrion_spat.py @@ -0,0 +1,41 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('giant_carrion_spat') + mobileTemplate.setLevel(30) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(True) + mobileTemplate.setScale(1) + mobileTemplate.setMeatType("Avian Meat") + mobileTemplate.setMeatAmount(300) + mobileTemplate.setBoneType("Avian Bones") + mobileTemplate.setBoneAmount(295) + mobileTemplate.setSocialGroup("carrion spat") + mobileTemplate.setAssistRange(6) + mobileTemplate.setStalker(True) + + templates = Vector() + templates.add('object/mobile/shared_giant_carrion_spat.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('giant_carrion_spat', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/corellia/giant_dalyrake.py b/scripts/mobiles/corellia/giant_dalyrake.py new file mode 100644 index 00000000..6efe0f4f --- /dev/null +++ b/scripts/mobiles/corellia/giant_dalyrake.py @@ -0,0 +1,41 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('giant_dalyrake') + mobileTemplate.setLevel(37) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setMeatType("Insect Meat") + mobileTemplate.setMeatAmount(60) + mobileTemplate.setHideType("Scaley Hide") + mobileTemplate.setHideAmount(90) + mobileTemplate.setSocialGroup("dalyrake") + mobileTemplate.setAssistRange(6) + mobileTemplate.setStalker(False) + + templates = Vector() + templates.add('object/mobile/shared_giant_dalyrake.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('giant_dalyrake', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/corellia/giant_gubbur.py b/scripts/mobiles/corellia/giant_gubbur.py new file mode 100644 index 00000000..74c9e8c7 --- /dev/null +++ b/scripts/mobiles/corellia/giant_gubbur.py @@ -0,0 +1,43 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('giant_gubbur') + mobileTemplate.setLevel(26) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setMeatType("Canivore Meat") + mobileTemplate.setMeatAmount(10) + mobileTemplate.setHideType("Leathery Hide") + mobileTemplate.setHideAmount(15) + mobileTemplate.setBoneType("Mammal Hide") + mobileTemplate.setBoneAmount(15) + mobileTemplate.setSocialGroup("gubbur") + mobileTemplate.setAssistRange(10) + mobileTemplate.setStalker(False) + + templates = Vector() + templates.add('object/mobile/shared_gubbur.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('giant_gubbur', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/corellia/giant_horned_krevol.py b/scripts/mobiles/corellia/giant_horned_krevol.py new file mode 100644 index 00000000..4d0654af --- /dev/null +++ b/scripts/mobiles/corellia/giant_horned_krevol.py @@ -0,0 +1,39 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('giant_horned_krevol') + mobileTemplate.setLevel(8) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setMeatType("Insect Meat") + mobileTemplate.setMeatAmount(10) + mobileTemplate.setSocialGroup("horned krevol") + mobileTemplate.setAssistRange(10) + mobileTemplate.setStalker(True) + + templates = Vector() + templates.add('object/mobile/shared_giant_horned_krevol.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureRangedAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('giant_horned_krevol', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/corellia/grand_wrix.py b/scripts/mobiles/corellia/grand_wrix.py new file mode 100644 index 00000000..be81d9df --- /dev/null +++ b/scripts/mobiles/corellia/grand_wrix.py @@ -0,0 +1,44 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('grand_wrix') + mobileTemplate.setLevel(37) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(True) + mobileTemplate.setScale(1) + mobileTemplate.setMeatType("Carnivore Meat") + mobileTemplate.setMeatAmount(70) + mobileTemplate.setHideType("Bristly Hide") + mobileTemplate.setHideAmount(40) + mobileTemplate.setBoneType("Mammal Bones") + mobileTemplate.setBoneAmount(35) + mobileTemplate.setSocialGroup("wrix") + mobileTemplate.setAssistRange(10) + mobileTemplate.setStalker(False) + mobileTemplate.setOptionsBitmask(192) + + templates = Vector() + templates.add('object/mobile/shared_grand_wrix.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('grand_wrix', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/corellia/grassland_slice_hound.py b/scripts/mobiles/corellia/grassland_slice_hound.py new file mode 100644 index 00000000..c1b31c26 --- /dev/null +++ b/scripts/mobiles/corellia/grassland_slice_hound.py @@ -0,0 +1,43 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('grassland_slice_hound') + mobileTemplate.setLevel(30) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(True) + mobileTemplate.setScale(1) + mobileTemplate.setMeatType("Carnivore Meat") + mobileTemplate.setMeatAmount(65) + mobileTemplate.setHideType("Bristly Hide") + mobileTemplate.setHideAmount(35) + mobileTemplate.setBoneType("Mammal Bones") + mobileTemplate.setBoneAmount(30) + mobileTemplate.setSocialGroup("slice hound grass") + mobileTemplate.setAssistRange(10) + mobileTemplate.setStalker(False) + + templates = Vector() + templates.add('object/mobile/shared_corellian_slice_hound.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('gassland_slice_hound', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/corellia/gravefeather.py b/scripts/mobiles/corellia/gravefeather.py new file mode 100644 index 00000000..39848ccb --- /dev/null +++ b/scripts/mobiles/corellia/gravefeather.py @@ -0,0 +1,37 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('corellia_carrion_spat_gravefeather') + mobileTemplate.setLevel(16) + mobileTemplate.setDifficulty(1) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("enraged carrion spat") + mobileTemplate.setAssistRange(6) + mobileTemplate.setStalker(False) + + templates = Vector() + templates.add('object/mobile/shared_carrion_spat.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('gravefeather', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/corellia/great_plains_stalker.py b/scripts/mobiles/corellia/great_plains_stalker.py new file mode 100644 index 00000000..63d4f5ab --- /dev/null +++ b/scripts/mobiles/corellia/great_plains_stalker.py @@ -0,0 +1,43 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('great_plains_stalker') + mobileTemplate.setLevel(50) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(True) + mobileTemplate.setScale(1) + mobileTemplate.setMeatType("Carnivore Meat") + mobileTemplate.setMeatAmount(65) + mobileTemplate.setHideType("Leathery Hide") + mobileTemplate.setHideAmount(35) + mobileTemplate.setBoneType("Mammal Bones") + mobileTemplate.setBoneAmount(30) + mobileTemplate.setSocialGroup("razor cat") + mobileTemplate.setAssistRange(10) + mobileTemplate.setStalker(True) + + templates = Vector() + templates.add('object/mobile/shared_dire_cat.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('great_plains_stalker', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/corellia/greater_gulginaw.py b/scripts/mobiles/corellia/greater_gulginaw.py new file mode 100644 index 00000000..861b5fdf --- /dev/null +++ b/scripts/mobiles/corellia/greater_gulginaw.py @@ -0,0 +1,42 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('greater_gulginaw') + mobileTemplate.setLevel(37) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(15) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setMeatType("Avian Meat") + mobileTemplate.setMeatAmount(97) + mobileTemplate.setBoneType("Avian Bone") + mobileTemplate.setBoneAmount(48) + mobileTemplate.setSocialGroup("gulginaw") + mobileTemplate.setAssistRange(10) + mobileTemplate.setStalker(False) + mobileTemplate.setOptionsBitmask(192) + + templates = Vector() + templates.add('object/mobile/shared_greater_gulginaw.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureRangedAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('greater_gulginaw', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/corellia/greck_assassin.py b/scripts/mobiles/corellia/greck_assassin.py new file mode 100644 index 00000000..6dee3169 --- /dev/null +++ b/scripts/mobiles/corellia/greck_assassin.py @@ -0,0 +1,50 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('greck_assassin') + mobileTemplate.setLevel(31) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(15) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("olag greck") + mobileTemplate.setAssistRange(6) + mobileTemplate.setStalker(True) + mobileTemplate.setOptionsBitmask(128) + + templates = Vector() + templates.add('object/mobile/shared_greck_thug_f_01.iff') + templates.add('object/mobile/shared_greck_thug_f_02.iff') + templates.add('object/mobile/shared_greck_thug_f_03.iff') + templates.add('object/mobile/shared_greck_thug_m_01.iff') + templates.add('object/mobile/shared_greck_thug_m_02.iff') + templates.add('object/mobile/shared_greck_thug_m_03.iff') + templates.add('object/mobile/shared_greck_thug_m_04.iff') + templates.add('object/mobile/shared_greck_thug_m_05.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('meleeHit') + mobileTemplate.setAttacks(attacks) + + lootPoolNames_1 = ['Junk'] + lootPoolChances_1 = [100] + lootGroupChance_1 = 100 + mobileTemplate.addToLootGroups(lootPoolNames_1,lootPoolChances_1,lootGroupChance_1) + + core.spawnService.addMobileTemplate('greck_assassin', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/corellia/greck_henchman.py b/scripts/mobiles/corellia/greck_henchman.py new file mode 100644 index 00000000..93e76c9c --- /dev/null +++ b/scripts/mobiles/corellia/greck_henchman.py @@ -0,0 +1,50 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('greck_henchman') + mobileTemplate.setLevel(23) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(15) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("olag greck") + mobileTemplate.setAssistRange(6) + mobileTemplate.setStalker(True) + mobileTemplate.setOptionsBitmask(128) + + templates = Vector() + templates.add('object/mobile/shared_greck_thug_f_01.iff') + templates.add('object/mobile/shared_greck_thug_f_02.iff') + templates.add('object/mobile/shared_greck_thug_f_03.iff') + templates.add('object/mobile/shared_greck_thug_m_01.iff') + templates.add('object/mobile/shared_greck_thug_m_02.iff') + templates.add('object/mobile/shared_greck_thug_m_03.iff') + templates.add('object/mobile/shared_greck_thug_m_04.iff') + templates.add('object/mobile/shared_greck_thug_m_05.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('meleeHit') + mobileTemplate.setAttacks(attacks) + + lootPoolNames_1 = ['Junk'] + lootPoolChances_1 = [100] + lootGroupChance_1 = 100 + mobileTemplate.addToLootGroups(lootPoolNames_1,lootPoolChances_1,lootGroupChance_1) + + core.spawnService.addMobileTemplate('greck_henchman', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/corellia/greck_mugger.py b/scripts/mobiles/corellia/greck_mugger.py new file mode 100644 index 00000000..f4d85a4a --- /dev/null +++ b/scripts/mobiles/corellia/greck_mugger.py @@ -0,0 +1,50 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('greck_mugger') + mobileTemplate.setLevel(31) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(15) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("olag greck") + mobileTemplate.setAssistRange(6) + mobileTemplate.setStalker(True) + mobileTemplate.setOptionsBitmask(128) + + templates = Vector() + templates.add('object/mobile/shared_greck_thug_f_01.iff') + templates.add('object/mobile/shared_greck_thug_f_02.iff') + templates.add('object/mobile/shared_greck_thug_f_03.iff') + templates.add('object/mobile/shared_greck_thug_m_01.iff') + templates.add('object/mobile/shared_greck_thug_m_02.iff') + templates.add('object/mobile/shared_greck_thug_m_03.iff') + templates.add('object/mobile/shared_greck_thug_m_04.iff') + templates.add('object/mobile/shared_greck_thug_m_05.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('meleeHit') + mobileTemplate.setAttacks(attacks) + + lootPoolNames_1 = ['Junk'] + lootPoolChances_1 = [100] + lootGroupChance_1 = 100 + mobileTemplate.addToLootGroups(lootPoolNames_1,lootPoolChances_1,lootGroupChance_1) + + core.spawnService.addMobileTemplate('greck_mugger', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/corellia/greck_smuggler.py b/scripts/mobiles/corellia/greck_smuggler.py new file mode 100644 index 00000000..87cf3d5c --- /dev/null +++ b/scripts/mobiles/corellia/greck_smuggler.py @@ -0,0 +1,50 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('greck_smuggler') + mobileTemplate.setLevel(25) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(15) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("olag greck") + mobileTemplate.setAssistRange(6) + mobileTemplate.setStalker(True) + mobileTemplate.setOptionsBitmask(128) + + templates = Vector() + templates.add('object/mobile/shared_greck_thug_f_01.iff') + templates.add('object/mobile/shared_greck_thug_f_02.iff') + templates.add('object/mobile/shared_greck_thug_f_03.iff') + templates.add('object/mobile/shared_greck_thug_m_01.iff') + templates.add('object/mobile/shared_greck_thug_m_02.iff') + templates.add('object/mobile/shared_greck_thug_m_03.iff') + templates.add('object/mobile/shared_greck_thug_m_04.iff') + templates.add('object/mobile/shared_greck_thug_m_05.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('meleeHit') + mobileTemplate.setAttacks(attacks) + + lootPoolNames_1 = ['Junk'] + lootPoolChances_1 = [100] + lootGroupChance_1 = 100 + mobileTemplate.addToLootGroups(lootPoolNames_1,lootPoolChances_1,lootGroupChance_1) + + core.spawnService.addMobileTemplate('greck_smuggler', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/corellia/gronda.py b/scripts/mobiles/corellia/gronda.py new file mode 100644 index 00000000..0eba1f21 --- /dev/null +++ b/scripts/mobiles/corellia/gronda.py @@ -0,0 +1,43 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('gronda') + mobileTemplate.setLevel(32) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setMeatType("Carnivore Meat") + mobileTemplate.setMeatAmount(360) + mobileTemplate.setHideType("Leathery Hide") + mobileTemplate.setHideAmount(270) + mobileTemplate.setBoneType("Mammal Bones") + mobileTemplate.setBoneAmount(180) + mobileTemplate.setSocialGroup("gronda") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(False) + + templates = Vector() + templates.add('object/mobile/shared_gronda.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('gronda', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/corellia/gronda_juggernaut.py b/scripts/mobiles/corellia/gronda_juggernaut.py new file mode 100644 index 00000000..5de0e0e2 --- /dev/null +++ b/scripts/mobiles/corellia/gronda_juggernaut.py @@ -0,0 +1,43 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('gronda_juggernaut') + mobileTemplate.setLevel(50) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(True) + mobileTemplate.setScale(1) + mobileTemplate.setMeatType("Carnivore Meat") + mobileTemplate.setMeatAmount(500) + mobileTemplate.setHideType("Leathery Hide") + mobileTemplate.setHideAmount(400) + mobileTemplate.setBoneType("Mammal Bones") + mobileTemplate.setBoneAmount(375) + mobileTemplate.setSocialGroup("gronda") + mobileTemplate.setAssistRange(10) + mobileTemplate.setStalker(True) + + templates = Vector() + templates.add('object/mobile/shared_gronda.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('gronda_juggernaut', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/corellia/gronda_patriarch.py b/scripts/mobiles/corellia/gronda_patriarch.py new file mode 100644 index 00000000..9a28a495 --- /dev/null +++ b/scripts/mobiles/corellia/gronda_patriarch.py @@ -0,0 +1,43 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('gronda_patriarch') + mobileTemplate.setLevel(30) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(True) + mobileTemplate.setScale(1) + mobileTemplate.setMeatType("Carnivore Meat") + mobileTemplate.setMeatAmount(360) + mobileTemplate.setHideType("Leathery Hide") + mobileTemplate.setHideAmount(270) + mobileTemplate.setBoneType("Mammal Bones") + mobileTemplate.setBoneAmount(180) + mobileTemplate.setSocialGroup("gronda") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(False) + + templates = Vector() + templates.add('object/mobile/shared_gronda.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('gronda_patriarch', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/corellia/gubbur.py b/scripts/mobiles/corellia/gubbur.py new file mode 100644 index 00000000..045a255b --- /dev/null +++ b/scripts/mobiles/corellia/gubbur.py @@ -0,0 +1,43 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('gubbur') + mobileTemplate.setLevel(23) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setMeatType("Canivore Meat") + mobileTemplate.setMeatAmount(4) + mobileTemplate.setHideType("Leathery Hide") + mobileTemplate.setHideAmount(3) + mobileTemplate.setBoneType("Mammal Hide") + mobileTemplate.setBoneAmount(3) + mobileTemplate.setSocialGroup("gubbur") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(False) + + templates = Vector() + templates.add('object/mobile/shared_gubbur.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('gubbur', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/corellia/gulginaw.py b/scripts/mobiles/corellia/gulginaw.py new file mode 100644 index 00000000..e1f5217a --- /dev/null +++ b/scripts/mobiles/corellia/gulginaw.py @@ -0,0 +1,42 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('gulginaw') + mobileTemplate.setLevel(26) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(15) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setMeatType("Avian Meat") + mobileTemplate.setMeatAmount(75) + mobileTemplate.setBoneType("Avian Bone") + mobileTemplate.setBoneAmount(25) + mobileTemplate.setSocialGroup("gulginaw") + mobileTemplate.setAssistRange(10) + mobileTemplate.setStalker(False) + mobileTemplate.setOptionsBitmask(192) + + templates = Vector() + templates.add('object/mobile/shared_gulginaw.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureRangedAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('gulginaw', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/corellia/gurrcat.py b/scripts/mobiles/corellia/gurrcat.py new file mode 100644 index 00000000..7c5fba02 --- /dev/null +++ b/scripts/mobiles/corellia/gurrcat.py @@ -0,0 +1,43 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('gurrcat') + mobileTemplate.setLevel(29) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setMeatType("Carnivore Meat") + mobileTemplate.setMeatAmount(65) + mobileTemplate.setHideType("Bristly Hide") + mobileTemplate.setHideAmount(35) + mobileTemplate.setBoneType("Mammal Bones") + mobileTemplate.setBoneAmount(30) + mobileTemplate.setSocialGroup("dire cat") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(False) + + templates = Vector() + templates.add('object/mobile/shared_gurrcat.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('gurrcat', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/corellia/hidden_daggers_activist.py b/scripts/mobiles/corellia/hidden_daggers_activist.py new file mode 100644 index 00000000..b4af47fb --- /dev/null +++ b/scripts/mobiles/corellia/hidden_daggers_activist.py @@ -0,0 +1,44 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('hidden_daggers_activist') + mobileTemplate.setLevel(32) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(15) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(1) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("hidden_daggers") + mobileTemplate.setAssistRange(6) + mobileTemplate.setStalker(True) + mobileTemplate.setOptionsBitmask(192) + + templates = Vector() + templates.add('object/mobile/shared_dressed_hiddendaggers_pilot_f_01.iff') + templates.add('object/mobile/shared_dressed_hiddendaggers_pilot_m_01.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/carbine/shared_carbine_e5.iff', 1, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedShot') + mobileTemplate.setAttacks(attacks) + + lootPoolNames_1 = ['Junk'] + lootPoolChances_1 = [100] + lootGroupChance_1 = 100 + mobileTemplate.addToLootGroups(lootPoolNames_1,lootPoolChances_1,lootGroupChance_1) + + core.spawnService.addMobileTemplate('hidden_daggers_activist', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/corellia/hidden_daggers_dissident.py b/scripts/mobiles/corellia/hidden_daggers_dissident.py new file mode 100644 index 00000000..45a0074b --- /dev/null +++ b/scripts/mobiles/corellia/hidden_daggers_dissident.py @@ -0,0 +1,44 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('hidden_daggers_dissident') + mobileTemplate.setLevel(33) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(15) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(1) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("hidden_daggers") + mobileTemplate.setAssistRange(6) + mobileTemplate.setStalker(True) + mobileTemplate.setOptionsBitmask(192) + + templates = Vector() + templates.add('object/mobile/shared_dressed_hiddendaggers_pilot_f_01.iff') + templates.add('object/mobile/shared_dressed_hiddendaggers_pilot_m_01.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/carbine/shared_carbine_e5.iff', 1, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedShot') + mobileTemplate.setAttacks(attacks) + + lootPoolNames_1 = ['Junk'] + lootPoolChances_1 = [100] + lootGroupChance_1 = 100 + mobileTemplate.addToLootGroups(lootPoolNames_1,lootPoolChances_1,lootGroupChance_1) + + core.spawnService.addMobileTemplate('hidden_daggers_dissident', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/corellia/hidden_daggers_extremist.py b/scripts/mobiles/corellia/hidden_daggers_extremist.py new file mode 100644 index 00000000..0037ca1f --- /dev/null +++ b/scripts/mobiles/corellia/hidden_daggers_extremist.py @@ -0,0 +1,44 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('hidden_daggers_extremist') + mobileTemplate.setLevel(33) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(15) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(1) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("hidden_daggers") + mobileTemplate.setAssistRange(6) + mobileTemplate.setStalker(True) + mobileTemplate.setOptionsBitmask(192) + + templates = Vector() + templates.add('object/mobile/shared_dressed_hiddendaggers_pilot_f_01.iff') + templates.add('object/mobile/shared_dressed_hiddendaggers_pilot_m_01.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/carbine/shared_carbine_e5.iff', 1, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedShot') + mobileTemplate.setAttacks(attacks) + + lootPoolNames_1 = ['Junk'] + lootPoolChances_1 = [100] + lootGroupChance_1 = 100 + mobileTemplate.addToLootGroups(lootPoolNames_1,lootPoolChances_1,lootGroupChance_1) + + core.spawnService.addMobileTemplate('hidden_daggers_extremist', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/corellia/hidden_daggers_leader.py b/scripts/mobiles/corellia/hidden_daggers_leader.py new file mode 100644 index 00000000..ed5ed1c5 --- /dev/null +++ b/scripts/mobiles/corellia/hidden_daggers_leader.py @@ -0,0 +1,44 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('hidden_daggers_leader') + mobileTemplate.setLevel(34) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(15) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(1) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("hidden_daggers") + mobileTemplate.setAssistRange(6) + mobileTemplate.setStalker(True) + mobileTemplate.setOptionsBitmask(192) + + templates = Vector() + templates.add('object/mobile/shared_dressed_hiddendaggers_pilot_f_01.iff') + templates.add('object/mobile/shared_dressed_hiddendaggers_pilot_m_01.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/carbine/shared_carbine_e5.iff', 1, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedShot') + mobileTemplate.setAttacks(attacks) + + lootPoolNames_1 = ['Junk'] + lootPoolChances_1 = [100] + lootGroupChance_1 = 100 + mobileTemplate.addToLootGroups(lootPoolNames_1,lootPoolChances_1,lootGroupChance_1) + + core.spawnService.addMobileTemplate('hidden_daggers_leader', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/corellia/hidden_daggers_lieutenant.py b/scripts/mobiles/corellia/hidden_daggers_lieutenant.py new file mode 100644 index 00000000..c59d3058 --- /dev/null +++ b/scripts/mobiles/corellia/hidden_daggers_lieutenant.py @@ -0,0 +1,44 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('hidden_daggers_lieutenant') + mobileTemplate.setLevel(33) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(15) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(1) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("hidden_daggers") + mobileTemplate.setAssistRange(6) + mobileTemplate.setStalker(True) + mobileTemplate.setOptionsBitmask(192) + + templates = Vector() + templates.add('object/mobile/shared_dressed_hiddendaggers_pilot_f_01.iff') + templates.add('object/mobile/shared_dressed_hiddendaggers_pilot_m_01.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/carbine/shared_carbine_e5.iff', 1, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedShot') + mobileTemplate.setAttacks(attacks) + + lootPoolNames_1 = ['Junk'] + lootPoolChances_1 = [100] + lootGroupChance_1 = 100 + mobileTemplate.addToLootGroups(lootPoolNames_1,lootPoolChances_1,lootGroupChance_1) + + core.spawnService.addMobileTemplate('hidden_daggers_lieutenant', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/corellia/howling_plumed_rasp.py b/scripts/mobiles/corellia/howling_plumed_rasp.py new file mode 100644 index 00000000..07b5ce52 --- /dev/null +++ b/scripts/mobiles/corellia/howling_plumed_rasp.py @@ -0,0 +1,41 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('howling_plumed_rasp') + mobileTemplate.setLevel(23) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setMeatType("Avian Meat") + mobileTemplate.setMeatAmount(3) + mobileTemplate.setBoneType("Avian Bones") + mobileTemplate.setBoneAmount(2) + mobileTemplate.setSocialGroup("rasp") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(False) + + templates = Vector() + templates.add('object/mobile/shared_plumed_rasp.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('howling_plumed_rasp', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/corellia/humbaba.py b/scripts/mobiles/corellia/humbaba.py new file mode 100644 index 00000000..9e94105e --- /dev/null +++ b/scripts/mobiles/corellia/humbaba.py @@ -0,0 +1,43 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('humbaba') + mobileTemplate.setLevel(32) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setMeatType("Domesticated Meat") + mobileTemplate.setMeatAmount(230) + mobileTemplate.setHideType("Leathery Hide") + mobileTemplate.setHideAmount(130) + mobileTemplate.setBoneType("Mammal Bones") + mobileTemplate.setBoneAmount(80) + mobileTemplate.setSocialGroup("humbaba") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(False) + + templates = Vector() + templates.add('object/mobile/shared_savage_humbaba.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('humbaba', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/corellia/krahbu.py b/scripts/mobiles/corellia/krahbu.py new file mode 100644 index 00000000..675c7252 --- /dev/null +++ b/scripts/mobiles/corellia/krahbu.py @@ -0,0 +1,43 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('krahbu') + mobileTemplate.setLevel(28) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setMeatType("Herbivore Meat") + mobileTemplate.setMeatAmount(210) + mobileTemplate.setHideType("Bristly Hide") + mobileTemplate.setHideAmount(135) + mobileTemplate.setBoneType("Mammal Bones") + mobileTemplate.setBoneAmount(120) + mobileTemplate.setSocialGroup("krahbu") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(False) + + templates = Vector() + templates.add('object/mobile/shared_krahbu.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('krahbu', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/corellia/lord_nyax.py b/scripts/mobiles/corellia/lord_nyax.py new file mode 100644 index 00000000..8285c85c --- /dev/null +++ b/scripts/mobiles/corellia/lord_nyax.py @@ -0,0 +1,43 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('lord_nyax') + mobileTemplate.setLevel(40) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(15) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(0) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(True) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("followers of lord nyax") + mobileTemplate.setAssistRange(6) + mobileTemplate.setStalker(True) + mobileTemplate.setOptionsBitmask(192) + + templates = Vector() + templates.add('object/mobile/shared_dressed_lord_nyax.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/rifle/shared_rifle_t21.iff', 0, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedShot') + mobileTemplate.setAttacks(attacks) + + lootPoolNames_1 = ['Junk'] + lootPoolChances_1 = [100] + lootGroupChance_1 = 100 + mobileTemplate.addToLootGroups(lootPoolNames_1,lootPoolChances_1,lootGroupChance_1) + + core.spawnService.addMobileTemplate('lord_nyax', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/corellia/majestic_plumed_rasp.py b/scripts/mobiles/corellia/majestic_plumed_rasp.py new file mode 100644 index 00000000..d8fb1797 --- /dev/null +++ b/scripts/mobiles/corellia/majestic_plumed_rasp.py @@ -0,0 +1,41 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('majestic_plumed_rasp') + mobileTemplate.setLevel(33) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setMeatType("Avian Meat") + mobileTemplate.setMeatAmount(5) + mobileTemplate.setBoneType("Avian Bones") + mobileTemplate.setBoneAmount(4) + mobileTemplate.setSocialGroup("rasp") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(False) + + templates = Vector() + templates.add('object/mobile/shared_plumed_rasp.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('majestic_plumed_rasp', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/corellia/meatlump_buffoon.py b/scripts/mobiles/corellia/meatlump_buffoon.py new file mode 100644 index 00000000..92483e3a --- /dev/null +++ b/scripts/mobiles/corellia/meatlump_buffoon.py @@ -0,0 +1,58 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('meatlump_buffoon') + mobileTemplate.setLevel(31) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(15) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(1) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("meatlump") + mobileTemplate.setAssistRange(6) + mobileTemplate.setStalker(True) + mobileTemplate.setOptionsBitmask(128) + + templates = Vector() + templates.add('object/mobile/shared_dressed_meatlump_female_01.iff') + templates.add('object/mobile/shared_dressed_meatlump_female_02.iff') + templates.add('object/mobile/shared_dressed_meatlump_female_03.iff') + templates.add('object/mobile/shared_dressed_meatlump_female_04.iff') + templates.add('object/mobile/shared_dressed_meatlump_female_05.iff') + templates.add('object/mobile/shared_dressed_meatlump_female_06.iff') + templates.add('object/mobile/shared_dressed_meatlump_female_07.iff') + templates.add('object/mobile/shared_dressed_meatlump_male_01.iff') + templates.add('object/mobile/shared_dressed_meatlump_male_02.iff') + templates.add('object/mobile/shared_dressed_meatlump_male_03.iff') + templates.add('object/mobile/shared_dressed_meatlump_male_04.iff') + templates.add('object/mobile/shared_dressed_meatlump_male_05.iff') + templates.add('object/mobile/shared_dressed_meatlump_male_06.iff') + templates.add('object/mobile/shared_dressed_meatlump_male_07.iff') + templates.add('object/mobile/shared_dressed_meatlump_male_08.iff') + templates.add('object/mobile/shared_dressed_meatlump_male_09.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/carbine/shared_carbine_e5.iff', 1, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedShot') + mobileTemplate.setAttacks(attacks) + + lootPoolNames_1 = ['Junk'] + lootPoolChances_1 = [100] + lootGroupChance_1 = 100 + mobileTemplate.addToLootGroups(lootPoolNames_1,lootPoolChances_1,lootGroupChance_1) + + core.spawnService.addMobileTemplate('meatlump_buffoon', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/corellia/meatlump_clod.py b/scripts/mobiles/corellia/meatlump_clod.py new file mode 100644 index 00000000..fb0e3b6e --- /dev/null +++ b/scripts/mobiles/corellia/meatlump_clod.py @@ -0,0 +1,58 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('meatlump_clod') + mobileTemplate.setLevel(28) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(15) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(2) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("meatlump") + mobileTemplate.setAssistRange(6) + mobileTemplate.setStalker(True) + mobileTemplate.setOptionsBitmask(128) + + templates = Vector() + templates.add('object/mobile/shared_dressed_meatlump_female_01.iff') + templates.add('object/mobile/shared_dressed_meatlump_female_02.iff') + templates.add('object/mobile/shared_dressed_meatlump_female_03.iff') + templates.add('object/mobile/shared_dressed_meatlump_female_04.iff') + templates.add('object/mobile/shared_dressed_meatlump_female_05.iff') + templates.add('object/mobile/shared_dressed_meatlump_female_06.iff') + templates.add('object/mobile/shared_dressed_meatlump_female_07.iff') + templates.add('object/mobile/shared_dressed_meatlump_male_01.iff') + templates.add('object/mobile/shared_dressed_meatlump_male_02.iff') + templates.add('object/mobile/shared_dressed_meatlump_male_03.iff') + templates.add('object/mobile/shared_dressed_meatlump_male_04.iff') + templates.add('object/mobile/shared_dressed_meatlump_male_05.iff') + templates.add('object/mobile/shared_dressed_meatlump_male_06.iff') + templates.add('object/mobile/shared_dressed_meatlump_male_07.iff') + templates.add('object/mobile/shared_dressed_meatlump_male_08.iff') + templates.add('object/mobile/shared_dressed_meatlump_male_09.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/pistol/shared_pistol_d18.iff', 2, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedShot') + mobileTemplate.setAttacks(attacks) + + lootPoolNames_1 = ['Junk'] + lootPoolChances_1 = [100] + lootGroupChance_1 = 100 + mobileTemplate.addToLootGroups(lootPoolNames_1,lootPoolChances_1,lootGroupChance_1) + + core.spawnService.addMobileTemplate('meatlump_clod', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/corellia/meatlump_cretin.py b/scripts/mobiles/corellia/meatlump_cretin.py new file mode 100644 index 00000000..8e367887 --- /dev/null +++ b/scripts/mobiles/corellia/meatlump_cretin.py @@ -0,0 +1,58 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('meatlump_cretin') + mobileTemplate.setLevel(28) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(15) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(2) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("meatlump") + mobileTemplate.setAssistRange(6) + mobileTemplate.setStalker(True) + mobileTemplate.setOptionsBitmask(128) + + templates = Vector() + templates.add('object/mobile/shared_dressed_meatlump_female_01.iff') + templates.add('object/mobile/shared_dressed_meatlump_female_02.iff') + templates.add('object/mobile/shared_dressed_meatlump_female_03.iff') + templates.add('object/mobile/shared_dressed_meatlump_female_04.iff') + templates.add('object/mobile/shared_dressed_meatlump_female_05.iff') + templates.add('object/mobile/shared_dressed_meatlump_female_06.iff') + templates.add('object/mobile/shared_dressed_meatlump_female_07.iff') + templates.add('object/mobile/shared_dressed_meatlump_male_01.iff') + templates.add('object/mobile/shared_dressed_meatlump_male_02.iff') + templates.add('object/mobile/shared_dressed_meatlump_male_03.iff') + templates.add('object/mobile/shared_dressed_meatlump_male_04.iff') + templates.add('object/mobile/shared_dressed_meatlump_male_05.iff') + templates.add('object/mobile/shared_dressed_meatlump_male_06.iff') + templates.add('object/mobile/shared_dressed_meatlump_male_07.iff') + templates.add('object/mobile/shared_dressed_meatlump_male_08.iff') + templates.add('object/mobile/shared_dressed_meatlump_male_09.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/pistol/shared_pistol_d18.iff', 2, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedShot') + mobileTemplate.setAttacks(attacks) + + lootPoolNames_1 = ['Junk'] + lootPoolChances_1 = [100] + lootGroupChance_1 = 100 + mobileTemplate.addToLootGroups(lootPoolNames_1,lootPoolChances_1,lootGroupChance_1) + + core.spawnService.addMobileTemplate('meatlump_cretin', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/corellia/meatlump_dunder.py b/scripts/mobiles/corellia/meatlump_dunder.py new file mode 100644 index 00000000..001b2b41 --- /dev/null +++ b/scripts/mobiles/corellia/meatlump_dunder.py @@ -0,0 +1,58 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('meatlump_dunder') + mobileTemplate.setLevel(12) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(15) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(2) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("meatlump") + mobileTemplate.setAssistRange(6) + mobileTemplate.setStalker(True) + mobileTemplate.setOptionsBitmask(128) + + templates = Vector() + templates.add('object/mobile/shared_dressed_meatlump_female_01.iff') + templates.add('object/mobile/shared_dressed_meatlump_female_02.iff') + templates.add('object/mobile/shared_dressed_meatlump_female_03.iff') + templates.add('object/mobile/shared_dressed_meatlump_female_04.iff') + templates.add('object/mobile/shared_dressed_meatlump_female_05.iff') + templates.add('object/mobile/shared_dressed_meatlump_female_06.iff') + templates.add('object/mobile/shared_dressed_meatlump_female_07.iff') + templates.add('object/mobile/shared_dressed_meatlump_male_01.iff') + templates.add('object/mobile/shared_dressed_meatlump_male_02.iff') + templates.add('object/mobile/shared_dressed_meatlump_male_03.iff') + templates.add('object/mobile/shared_dressed_meatlump_male_04.iff') + templates.add('object/mobile/shared_dressed_meatlump_male_05.iff') + templates.add('object/mobile/shared_dressed_meatlump_male_06.iff') + templates.add('object/mobile/shared_dressed_meatlump_male_07.iff') + templates.add('object/mobile/shared_dressed_meatlump_male_08.iff') + templates.add('object/mobile/shared_dressed_meatlump_male_09.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/pistol/shared_pistol_d18.iff', 2, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedShot') + mobileTemplate.setAttacks(attacks) + + lootPoolNames_1 = ['Junk'] + lootPoolChances_1 = [100] + lootGroupChance_1 = 100 + mobileTemplate.addToLootGroups(lootPoolNames_1,lootPoolChances_1,lootGroupChance_1) + + core.spawnService.addMobileTemplate('meatlump_dunder', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/corellia/meatlump_fool.py b/scripts/mobiles/corellia/meatlump_fool.py new file mode 100644 index 00000000..3f478bd4 --- /dev/null +++ b/scripts/mobiles/corellia/meatlump_fool.py @@ -0,0 +1,58 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('meatlump_fool') + mobileTemplate.setLevel(26) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(15) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(1) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("meatlump") + mobileTemplate.setAssistRange(6) + mobileTemplate.setStalker(True) + mobileTemplate.setOptionsBitmask(128) + + templates = Vector() + templates.add('object/mobile/shared_dressed_meatlump_female_01.iff') + templates.add('object/mobile/shared_dressed_meatlump_female_02.iff') + templates.add('object/mobile/shared_dressed_meatlump_female_03.iff') + templates.add('object/mobile/shared_dressed_meatlump_female_04.iff') + templates.add('object/mobile/shared_dressed_meatlump_female_05.iff') + templates.add('object/mobile/shared_dressed_meatlump_female_06.iff') + templates.add('object/mobile/shared_dressed_meatlump_female_07.iff') + templates.add('object/mobile/shared_dressed_meatlump_male_01.iff') + templates.add('object/mobile/shared_dressed_meatlump_male_02.iff') + templates.add('object/mobile/shared_dressed_meatlump_male_03.iff') + templates.add('object/mobile/shared_dressed_meatlump_male_04.iff') + templates.add('object/mobile/shared_dressed_meatlump_male_05.iff') + templates.add('object/mobile/shared_dressed_meatlump_male_06.iff') + templates.add('object/mobile/shared_dressed_meatlump_male_07.iff') + templates.add('object/mobile/shared_dressed_meatlump_male_08.iff') + templates.add('object/mobile/shared_dressed_meatlump_male_09.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/carbine/shared_carbine_e5.iff', 1, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedShot') + mobileTemplate.setAttacks(attacks) + + lootPoolNames_1 = ['Junk'] + lootPoolChances_1 = [100] + lootGroupChance_1 = 100 + mobileTemplate.addToLootGroups(lootPoolNames_1,lootPoolChances_1,lootGroupChance_1) + + core.spawnService.addMobileTemplate('meatlump_fool', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/corellia/meatlump_lieutenant.py b/scripts/mobiles/corellia/meatlump_lieutenant.py new file mode 100644 index 00000000..20b5cb34 --- /dev/null +++ b/scripts/mobiles/corellia/meatlump_lieutenant.py @@ -0,0 +1,47 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('meatlump_lieutenant') + mobileTemplate.setLevel(31) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(15) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(2) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("meatlump") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(False) + mobileTemplate.setOptionsBitmask(256) + + templates = Vector() + templates.add('object/mobile/shared_dressed_meatlump_lieutenant_01.iff') + templates.add('object/mobile/shared_dressed_meatlump_lieutenant_02.iff') + templates.add('object/mobile/shared_dressed_meatlump_lieutenant_03.iff') + templates.add('object/mobile/shared_dressed_meatlump_lieutenant_04.iff') + templates.add('object/mobile/shared_dressed_meatlump_lieutenant_05.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/pistol/shared_pistol_d18.iff', 2, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedShot') + mobileTemplate.setAttacks(attacks) + + lootPoolNames_1 = ['Junk'] + lootPoolChances_1 = [100] + lootGroupChance_1 = 100 + mobileTemplate.addToLootGroups(lootPoolNames_1,lootPoolChances_1,lootGroupChance_1) + + core.spawnService.addMobileTemplate('meatlump_lieutenant', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/corellia/meatlump_loon.py b/scripts/mobiles/corellia/meatlump_loon.py new file mode 100644 index 00000000..4ee4af15 --- /dev/null +++ b/scripts/mobiles/corellia/meatlump_loon.py @@ -0,0 +1,58 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('meatlump_loon') + mobileTemplate.setLevel(30) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(15) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(1) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("meatlump") + mobileTemplate.setAssistRange(6) + mobileTemplate.setStalker(True) + mobileTemplate.setOptionsBitmask(128) + + templates = Vector() + templates.add('object/mobile/shared_dressed_meatlump_female_01.iff') + templates.add('object/mobile/shared_dressed_meatlump_female_02.iff') + templates.add('object/mobile/shared_dressed_meatlump_female_03.iff') + templates.add('object/mobile/shared_dressed_meatlump_female_04.iff') + templates.add('object/mobile/shared_dressed_meatlump_female_05.iff') + templates.add('object/mobile/shared_dressed_meatlump_female_06.iff') + templates.add('object/mobile/shared_dressed_meatlump_female_07.iff') + templates.add('object/mobile/shared_dressed_meatlump_male_01.iff') + templates.add('object/mobile/shared_dressed_meatlump_male_02.iff') + templates.add('object/mobile/shared_dressed_meatlump_male_03.iff') + templates.add('object/mobile/shared_dressed_meatlump_male_04.iff') + templates.add('object/mobile/shared_dressed_meatlump_male_05.iff') + templates.add('object/mobile/shared_dressed_meatlump_male_06.iff') + templates.add('object/mobile/shared_dressed_meatlump_male_07.iff') + templates.add('object/mobile/shared_dressed_meatlump_male_08.iff') + templates.add('object/mobile/shared_dressed_meatlump_male_09.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/carbine/shared_carbine_e5.iff', 1, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedShot') + mobileTemplate.setAttacks(attacks) + + lootPoolNames_1 = ['Junk'] + lootPoolChances_1 = [100] + lootGroupChance_1 = 100 + mobileTemplate.addToLootGroups(lootPoolNames_1,lootPoolChances_1,lootGroupChance_1) + + core.spawnService.addMobileTemplate('meatlump_loon', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/corellia/meatlump_lunk.py b/scripts/mobiles/corellia/meatlump_lunk.py new file mode 100644 index 00000000..5b10c57c --- /dev/null +++ b/scripts/mobiles/corellia/meatlump_lunk.py @@ -0,0 +1,58 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('corellia_meatlump_lunk') + mobileTemplate.setLevel(13) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(15) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(2) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("meatlump") + mobileTemplate.setAssistRange(6) + mobileTemplate.setStalker(True) + mobileTemplate.setOptionsBitmask(128) + + templates = Vector() + templates.add('object/mobile/shared_dressed_meatlump_female_01.iff') + templates.add('object/mobile/shared_dressed_meatlump_female_02.iff') + templates.add('object/mobile/shared_dressed_meatlump_female_03.iff') + templates.add('object/mobile/shared_dressed_meatlump_female_04.iff') + templates.add('object/mobile/shared_dressed_meatlump_female_05.iff') + templates.add('object/mobile/shared_dressed_meatlump_female_06.iff') + templates.add('object/mobile/shared_dressed_meatlump_female_07.iff') + templates.add('object/mobile/shared_dressed_meatlump_male_01.iff') + templates.add('object/mobile/shared_dressed_meatlump_male_02.iff') + templates.add('object/mobile/shared_dressed_meatlump_male_03.iff') + templates.add('object/mobile/shared_dressed_meatlump_male_04.iff') + templates.add('object/mobile/shared_dressed_meatlump_male_05.iff') + templates.add('object/mobile/shared_dressed_meatlump_male_06.iff') + templates.add('object/mobile/shared_dressed_meatlump_male_07.iff') + templates.add('object/mobile/shared_dressed_meatlump_male_08.iff') + templates.add('object/mobile/shared_dressed_meatlump_male_09.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/pistol/shared_pistol_d18.iff', 2, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedShot') + mobileTemplate.setAttacks(attacks) + + lootPoolNames_1 = ['Junk'] + lootPoolChances_1 = [100] + lootGroupChance_1 = 100 + mobileTemplate.addToLootGroups(lootPoolNames_1,lootPoolChances_1,lootGroupChance_1) + + core.spawnService.addMobileTemplate('meatlump_lunk', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/corellia/meatlump_oaf.py b/scripts/mobiles/corellia/meatlump_oaf.py new file mode 100644 index 00000000..603d88c9 --- /dev/null +++ b/scripts/mobiles/corellia/meatlump_oaf.py @@ -0,0 +1,58 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('meatlump_oaf') + mobileTemplate.setLevel(29) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(15) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(1) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("meatlump") + mobileTemplate.setAssistRange(6) + mobileTemplate.setStalker(True) + mobileTemplate.setOptionsBitmask(128) + + templates = Vector() + templates.add('object/mobile/shared_dressed_meatlump_female_01.iff') + templates.add('object/mobile/shared_dressed_meatlump_female_02.iff') + templates.add('object/mobile/shared_dressed_meatlump_female_03.iff') + templates.add('object/mobile/shared_dressed_meatlump_female_04.iff') + templates.add('object/mobile/shared_dressed_meatlump_female_05.iff') + templates.add('object/mobile/shared_dressed_meatlump_female_06.iff') + templates.add('object/mobile/shared_dressed_meatlump_female_07.iff') + templates.add('object/mobile/shared_dressed_meatlump_male_01.iff') + templates.add('object/mobile/shared_dressed_meatlump_male_02.iff') + templates.add('object/mobile/shared_dressed_meatlump_male_03.iff') + templates.add('object/mobile/shared_dressed_meatlump_male_04.iff') + templates.add('object/mobile/shared_dressed_meatlump_male_05.iff') + templates.add('object/mobile/shared_dressed_meatlump_male_06.iff') + templates.add('object/mobile/shared_dressed_meatlump_male_07.iff') + templates.add('object/mobile/shared_dressed_meatlump_male_08.iff') + templates.add('object/mobile/shared_dressed_meatlump_male_09.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/carbine/shared_carbine_e5.iff', 1, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedShot') + mobileTemplate.setAttacks(attacks) + + lootPoolNames_1 = ['Junk'] + lootPoolChances_1 = [100] + lootGroupChance_1 = 100 + mobileTemplate.addToLootGroups(lootPoolNames_1,lootPoolChances_1,lootGroupChance_1) + + core.spawnService.addMobileTemplate('meatlump_oaf', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/corellia/meatlump_stooge.py b/scripts/mobiles/corellia/meatlump_stooge.py new file mode 100644 index 00000000..71a470ea --- /dev/null +++ b/scripts/mobiles/corellia/meatlump_stooge.py @@ -0,0 +1,58 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('meatlump_stooge') + mobileTemplate.setLevel(27) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(15) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(1) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("meatlump") + mobileTemplate.setAssistRange(6) + mobileTemplate.setStalker(True) + mobileTemplate.setOptionsBitmask(128) + + templates = Vector() + templates.add('object/mobile/shared_dressed_meatlump_female_01.iff') + templates.add('object/mobile/shared_dressed_meatlump_female_02.iff') + templates.add('object/mobile/shared_dressed_meatlump_female_03.iff') + templates.add('object/mobile/shared_dressed_meatlump_female_04.iff') + templates.add('object/mobile/shared_dressed_meatlump_female_05.iff') + templates.add('object/mobile/shared_dressed_meatlump_female_06.iff') + templates.add('object/mobile/shared_dressed_meatlump_female_07.iff') + templates.add('object/mobile/shared_dressed_meatlump_male_01.iff') + templates.add('object/mobile/shared_dressed_meatlump_male_02.iff') + templates.add('object/mobile/shared_dressed_meatlump_male_03.iff') + templates.add('object/mobile/shared_dressed_meatlump_male_04.iff') + templates.add('object/mobile/shared_dressed_meatlump_male_05.iff') + templates.add('object/mobile/shared_dressed_meatlump_male_06.iff') + templates.add('object/mobile/shared_dressed_meatlump_male_07.iff') + templates.add('object/mobile/shared_dressed_meatlump_male_08.iff') + templates.add('object/mobile/shared_dressed_meatlump_male_09.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/carbine/shared_carbine_e5.iff', 1, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedShot') + mobileTemplate.setAttacks(attacks) + + lootPoolNames_1 = ['Junk'] + lootPoolChances_1 = [100] + lootGroupChance_1 = 100 + mobileTemplate.addToLootGroups(lootPoolNames_1,lootPoolChances_1,lootGroupChance_1) + + core.spawnService.addMobileTemplate('meatlump_stooge', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/corellia/merkie_howzat.py b/scripts/mobiles/corellia/merkie_howzat.py new file mode 100644 index 00000000..c3f62778 --- /dev/null +++ b/scripts/mobiles/corellia/merkie_howzat.py @@ -0,0 +1,43 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('corellia_meatlump_merkie_howzat') + mobileTemplate.setLevel(14) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(15) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(2) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("meatlump") + mobileTemplate.setAssistRange(12) + mobileTemplate.setStalker(True) + mobileTemplate.setOptionsBitmask(128) + + templates = Vector() + templates.add('object/mobile/shared_dressed_meatlump_merkie_howzat.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/pistol/shared_pistol_d18.iff', 2, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedShot') + mobileTemplate.setAttacks(attacks) + + lootPoolNames_1 = ['Junk'] + lootPoolChances_1 = [100] + lootGroupChance_1 = 100 + mobileTemplate.addToLootGroups(lootPoolNames_1,lootPoolChances_1,lootGroupChance_1) + + core.spawnService.addMobileTemplate('merkie_howzat', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/corellia/minor_gubbur.py b/scripts/mobiles/corellia/minor_gubbur.py new file mode 100644 index 00000000..c28ea4e9 --- /dev/null +++ b/scripts/mobiles/corellia/minor_gubbur.py @@ -0,0 +1,43 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('minor_gubbur') + mobileTemplate.setLevel(22) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setMeatType("Canivore Meat") + mobileTemplate.setMeatAmount(3) + mobileTemplate.setHideType("Leathery Hide") + mobileTemplate.setHideAmount(2) + mobileTemplate.setBoneType("Mammal Hide") + mobileTemplate.setBoneAmount(2) + mobileTemplate.setSocialGroup("gubbur") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(False) + + templates = Vector() + templates.add('object/mobile/shared_gubbur.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('minor_gubbur', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/corellia/mottled_wrix.py b/scripts/mobiles/corellia/mottled_wrix.py new file mode 100644 index 00000000..775ceaed --- /dev/null +++ b/scripts/mobiles/corellia/mottled_wrix.py @@ -0,0 +1,44 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('mottled_wrix') + mobileTemplate.setLevel(35) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(True) + mobileTemplate.setScale(1) + mobileTemplate.setMeatType("Carnivore Meat") + mobileTemplate.setMeatAmount(65) + mobileTemplate.setHideType("Bristly Hide") + mobileTemplate.setHideAmount(35) + mobileTemplate.setBoneType("Mammal Bones") + mobileTemplate.setBoneAmount(30) + mobileTemplate.setSocialGroup("wrix") + mobileTemplate.setAssistRange(10) + mobileTemplate.setStalker(False) + mobileTemplate.setOptionsBitmask(192) + + templates = Vector() + templates.add('object/mobile/shared_grand_wrix.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('mottled_wrix', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/corellia/mountain_murra.py b/scripts/mobiles/corellia/mountain_murra.py new file mode 100644 index 00000000..3018ee61 --- /dev/null +++ b/scripts/mobiles/corellia/mountain_murra.py @@ -0,0 +1,43 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('mountain_murra') + mobileTemplate.setLevel(31) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setMeatType("Herbivore Meat") + mobileTemplate.setMeatAmount(75) + mobileTemplate.setHideType("Bristly Hide") + mobileTemplate.setHideAmount(35) + mobileTemplate.setBoneType("Mammal Bones") + mobileTemplate.setBoneAmount(45) + mobileTemplate.setSocialGroup("murra") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(False) + + templates = Vector() + templates.add('object/mobile/shared_mountain_murra.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('mountain_murra', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/corellia/murra.py b/scripts/mobiles/corellia/murra.py new file mode 100644 index 00000000..c10d0eeb --- /dev/null +++ b/scripts/mobiles/corellia/murra.py @@ -0,0 +1,43 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('murra') + mobileTemplate.setLevel(28) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setMeatType("Herbivore Meat") + mobileTemplate.setMeatAmount(55) + mobileTemplate.setHideType("Bristly Hide") + mobileTemplate.setHideAmount(35) + mobileTemplate.setBoneType("Mammal Bones") + mobileTemplate.setBoneAmount(32) + mobileTemplate.setSocialGroup("murra") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(False) + + templates = Vector() + templates.add('object/mobile/shared_murra.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('murra', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/corellia/mutated_krevol_clicker.py b/scripts/mobiles/corellia/mutated_krevol_clicker.py new file mode 100644 index 00000000..6ed56840 --- /dev/null +++ b/scripts/mobiles/corellia/mutated_krevol_clicker.py @@ -0,0 +1,39 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('mutated_krevol_clicker') + mobileTemplate.setLevel(8) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setMeatType("Insect Meat") + mobileTemplate.setMeatAmount(10) + mobileTemplate.setSocialGroup("horned krevol") + mobileTemplate.setAssistRange(10) + mobileTemplate.setStalker(False) + + templates = Vector() + templates.add('object/mobile/shared_mutated_krevol_clicker.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('mutated_krevol_clicker', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/corellia/noxious_vrelt_scavenger.py b/scripts/mobiles/corellia/noxious_vrelt_scavenger.py new file mode 100644 index 00000000..74d40423 --- /dev/null +++ b/scripts/mobiles/corellia/noxious_vrelt_scavenger.py @@ -0,0 +1,43 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('noxious_vrelt_scavenger') + mobileTemplate.setLevel(27) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(15) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setMeatType("Wild Meat") + mobileTemplate.setMeatAmount(10) + mobileTemplate.setHideType("Leathery Hide") + mobileTemplate.setHideAmount(10) + mobileTemplate.setBoneType("Mammal Bones") + mobileTemplate.setBoneAmount(10) + mobileTemplate.setSocialGroup("vrelt") + mobileTemplate.setAssistRange(10) + mobileTemplate.setStalker(True) + + templates = Vector() + templates.add('object/mobile/shared_noxious_vrelt_scavenger.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureRangedAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('noxious_vrelt_scavenger', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/corellia/paralope.py b/scripts/mobiles/corellia/paralope.py new file mode 100644 index 00000000..8cbea9ed --- /dev/null +++ b/scripts/mobiles/corellia/paralope.py @@ -0,0 +1,43 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('paralope') + mobileTemplate.setLevel(23) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setMeatType("Herbivore Meat") + mobileTemplate.setMeatAmount(5) + mobileTemplate.setHideType("Wooly Hide") + mobileTemplate.setHideAmount(3) + mobileTemplate.setBoneType("Mammal Bones") + mobileTemplate.setBoneAmount(2) + mobileTemplate.setSocialGroup("paralope") + mobileTemplate.setAssistRange(6) + mobileTemplate.setStalker(False) + + templates = Vector() + templates.add('object/mobile/shared_paralope.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('paralope', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/corellia/plumped_rasp.py b/scripts/mobiles/corellia/plumped_rasp.py new file mode 100644 index 00000000..9e96d328 --- /dev/null +++ b/scripts/mobiles/corellia/plumped_rasp.py @@ -0,0 +1,41 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('plumed_rasp') + mobileTemplate.setLevel(25) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setMeatType("Avian Meat") + mobileTemplate.setMeatAmount(3) + mobileTemplate.setBoneType("Avian Bones") + mobileTemplate.setBoneAmount(2) + mobileTemplate.setSocialGroup("rasp") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(False) + + templates = Vector() + templates.add('object/mobile/shared_plumed_rasp.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('plumed_rasp', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/corellia/ragtag_blackjack.py b/scripts/mobiles/corellia/ragtag_blackjack.py new file mode 100644 index 00000000..dd36e536 --- /dev/null +++ b/scripts/mobiles/corellia/ragtag_blackjack.py @@ -0,0 +1,46 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('corellia_ragtag_blackjack') + mobileTemplate.setLevel(13) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(15) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(1) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("ragtag gang") + mobileTemplate.setAssistRange(6) + mobileTemplate.setStalker(True) + mobileTemplate.setOptionsBitmask(192) + + templates = Vector() + templates.add('object/mobile/shared_dressed_criminal_thug_human_female_01.iff') + templates.add('object/mobile/shared_dressed_criminal_thug_human_female_02.iff') + templates.add('object/mobile/shared_dressed_criminal_thug_human_male_01.iff') + templates.add('object/mobile/shared_dressed_criminal_thug_human_male_02.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/carbine/shared_carbine_cdef.iff', 1, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedShot') + mobileTemplate.setAttacks(attacks) + + lootPoolNames_1 = ['Junk'] + lootPoolChances_1 = [100] + lootGroupChance_1 = 100 + mobileTemplate.addToLootGroups(lootPoolNames_1,lootPoolChances_1,lootGroupChance_1) + + core.spawnService.addMobileTemplate('ragtag_blackjack', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/corellia/ragtag_kook.py b/scripts/mobiles/corellia/ragtag_kook.py new file mode 100644 index 00000000..c8c3f4d7 --- /dev/null +++ b/scripts/mobiles/corellia/ragtag_kook.py @@ -0,0 +1,46 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('ragtag_kook') + mobileTemplate.setLevel(11) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(15) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(1) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("ragtag gang") + mobileTemplate.setAssistRange(6) + mobileTemplate.setStalker(True) + mobileTemplate.setOptionsBitmask(192) + + templates = Vector() + templates.add('object/mobile/shared_dressed_criminal_thug_human_female_01.iff') + templates.add('object/mobile/shared_dressed_criminal_thug_human_female_02.iff') + templates.add('object/mobile/shared_dressed_criminal_thug_human_male_01.iff') + templates.add('object/mobile/shared_dressed_criminal_thug_human_male_02.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/carbine/shared_carbine_cdef.iff', 1, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedShot') + mobileTemplate.setAttacks(attacks) + + lootPoolNames_1 = ['Junk'] + lootPoolChances_1 = [100] + lootGroupChance_1 = 100 + mobileTemplate.addToLootGroups(lootPoolNames_1,lootPoolChances_1,lootGroupChance_1) + + core.spawnService.addMobileTemplate('ragtag_kook', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/corellia/ragtag_loon.py b/scripts/mobiles/corellia/ragtag_loon.py new file mode 100644 index 00000000..ce506e7e --- /dev/null +++ b/scripts/mobiles/corellia/ragtag_loon.py @@ -0,0 +1,46 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('ragtag_loon') + mobileTemplate.setLevel(13) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(15) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(1) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("ragtag gang") + mobileTemplate.setAssistRange(6) + mobileTemplate.setStalker(True) + mobileTemplate.setOptionsBitmask(192) + + templates = Vector() + templates.add('object/mobile/shared_dressed_criminal_thug_human_female_01.iff') + templates.add('object/mobile/shared_dressed_criminal_thug_human_female_02.iff') + templates.add('object/mobile/shared_dressed_criminal_thug_human_male_01.iff') + templates.add('object/mobile/shared_dressed_criminal_thug_human_male_02.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/carbine/shared_carbine_cdef.iff', 1, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedShot') + mobileTemplate.setAttacks(attacks) + + lootPoolNames_1 = ['Junk'] + lootPoolChances_1 = [100] + lootGroupChance_1 = 100 + mobileTemplate.addToLootGroups(lootPoolNames_1,lootPoolChances_1,lootGroupChance_1) + + core.spawnService.addMobileTemplate('ragtag_loon', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/corellia/ragtag_lunatic.py b/scripts/mobiles/corellia/ragtag_lunatic.py new file mode 100644 index 00000000..90b31e6e --- /dev/null +++ b/scripts/mobiles/corellia/ragtag_lunatic.py @@ -0,0 +1,46 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('ragtag_lunatic') + mobileTemplate.setLevel(14) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(15) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(1) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("ragtag gang") + mobileTemplate.setAssistRange(6) + mobileTemplate.setStalker(True) + mobileTemplate.setOptionsBitmask(192) + + templates = Vector() + templates.add('object/mobile/shared_dressed_criminal_thug_human_female_01.iff') + templates.add('object/mobile/shared_dressed_criminal_thug_human_female_02.iff') + templates.add('object/mobile/shared_dressed_criminal_thug_human_male_01.iff') + templates.add('object/mobile/shared_dressed_criminal_thug_human_male_02.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/carbine/shared_carbine_cdef.iff', 1, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedShot') + mobileTemplate.setAttacks(attacks) + + lootPoolNames_1 = ['Junk'] + lootPoolChances_1 = [100] + lootGroupChance_1 = 100 + mobileTemplate.addToLootGroups(lootPoolNames_1,lootPoolChances_1,lootGroupChance_1) + + core.spawnService.addMobileTemplate('ragtag_lunatic', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/corellia/ragtag_maniac.py b/scripts/mobiles/corellia/ragtag_maniac.py new file mode 100644 index 00000000..c56397a5 --- /dev/null +++ b/scripts/mobiles/corellia/ragtag_maniac.py @@ -0,0 +1,46 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('ragtag_maniac') + mobileTemplate.setLevel(15) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(15) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(1) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("ragtag gang") + mobileTemplate.setAssistRange(6) + mobileTemplate.setStalker(True) + mobileTemplate.setOptionsBitmask(192) + + templates = Vector() + templates.add('object/mobile/shared_dressed_criminal_thug_human_female_01.iff') + templates.add('object/mobile/shared_dressed_criminal_thug_human_female_02.iff') + templates.add('object/mobile/shared_dressed_criminal_thug_human_male_01.iff') + templates.add('object/mobile/shared_dressed_criminal_thug_human_male_02.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/carbine/shared_carbine_cdef.iff', 1, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedShot') + mobileTemplate.setAttacks(attacks) + + lootPoolNames_1 = ['Junk'] + lootPoolChances_1 = [100] + lootGroupChance_1 = 100 + mobileTemplate.addToLootGroups(lootPoolNames_1,lootPoolChances_1,lootGroupChance_1) + + core.spawnService.addMobileTemplate('ragtag_maniac', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/corellia/ragtag_sentry.py b/scripts/mobiles/corellia/ragtag_sentry.py new file mode 100644 index 00000000..50b78c27 --- /dev/null +++ b/scripts/mobiles/corellia/ragtag_sentry.py @@ -0,0 +1,46 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('corellia_ragtag_sentry') + mobileTemplate.setLevel(14) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(15) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(1) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("ragtag gang") + mobileTemplate.setAssistRange(6) + mobileTemplate.setStalker(True) + mobileTemplate.setOptionsBitmask(192) + + templates = Vector() + templates.add('object/mobile/shared_dressed_criminal_thug_human_female_01.iff') + templates.add('object/mobile/shared_dressed_criminal_thug_human_female_02.iff') + templates.add('object/mobile/shared_dressed_criminal_thug_human_male_01.iff') + templates.add('object/mobile/shared_dressed_criminal_thug_human_male_02.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/carbine/shared_carbine_cdef.iff', 1, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedShot') + mobileTemplate.setAttacks(attacks) + + lootPoolNames_1 = ['Junk'] + lootPoolChances_1 = [100] + lootGroupChance_1 = 100 + mobileTemplate.addToLootGroups(lootPoolNames_1,lootPoolChances_1,lootGroupChance_1) + + core.spawnService.addMobileTemplate('ragtag_sentry', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/corellia/razor_cat.py b/scripts/mobiles/corellia/razor_cat.py new file mode 100644 index 00000000..1e4c8e44 --- /dev/null +++ b/scripts/mobiles/corellia/razor_cat.py @@ -0,0 +1,43 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('sand_panther') + mobileTemplate.setLevel(38) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setMeatType("Carnivore Meat") + mobileTemplate.setMeatAmount(65) + mobileTemplate.setHideType("Bristly Hide") + mobileTemplate.setHideAmount(35) + mobileTemplate.setBoneType("Mammal Bones") + mobileTemplate.setBoneAmount(30) + mobileTemplate.setSocialGroup("razor cat") + mobileTemplate.setAssistRange(10) + mobileTemplate.setStalker(False) + + templates = Vector() + templates.add('object/mobile/shared_corellian_sand_panther.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('female_razor_cat', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/corellia/razor_cat_cub.py b/scripts/mobiles/corellia/razor_cat_cub.py new file mode 100644 index 00000000..1514498f --- /dev/null +++ b/scripts/mobiles/corellia/razor_cat_cub.py @@ -0,0 +1,43 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('sand_panther_cub') + mobileTemplate.setLevel(37) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setMeatType("Carnivore Meat") + mobileTemplate.setMeatAmount(25) + mobileTemplate.setHideType("Bristly Hide") + mobileTemplate.setHideAmount(14) + mobileTemplate.setBoneType("Mammal Bones") + mobileTemplate.setBoneAmount(30) + mobileTemplate.setSocialGroup("razor cat") + mobileTemplate.setAssistRange(10) + mobileTemplate.setStalker(False) + + templates = Vector() + templates.add('object/mobile/shared_corellian_sand_panther_cub.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('razor_cat_cub', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/corellia/razor_cat_eviscerator.py b/scripts/mobiles/corellia/razor_cat_eviscerator.py new file mode 100644 index 00000000..b0b1082c --- /dev/null +++ b/scripts/mobiles/corellia/razor_cat_eviscerator.py @@ -0,0 +1,43 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('razor_cat_eviscerator') + mobileTemplate.setLevel(23) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setMeatType("Carnivore Meat") + mobileTemplate.setMeatAmount(65) + mobileTemplate.setHideType("Bristly Hide") + mobileTemplate.setHideAmount(35) + mobileTemplate.setBoneType("Mammal Bones") + mobileTemplate.setBoneAmount(30) + mobileTemplate.setSocialGroup("razor cat") + mobileTemplate.setAssistRange(10) + mobileTemplate.setStalker(False) + + templates = Vector() + templates.add('object/mobile/shared_corellian_sand_panther_cub.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('razor_cat_eviscerator', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/corellia/rogue_bageraset.py b/scripts/mobiles/corellia/rogue_bageraset.py new file mode 100644 index 00000000..bb61a0d1 --- /dev/null +++ b/scripts/mobiles/corellia/rogue_bageraset.py @@ -0,0 +1,43 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('rogue_bageraset') + mobileTemplate.setLevel(27) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setMeatType("Herbivore Meat") + mobileTemplate.setMeatAmount(230) + mobileTemplate.setHideType("Leathery Hide") + mobileTemplate.setHideAmount(130) + mobileTemplate.setBoneType("Mammal Bones") + mobileTemplate.setBoneAmount(80) + mobileTemplate.setSocialGroup("bageraset") + mobileTemplate.setAssistRange(10) + mobileTemplate.setStalker(False) + + templates = Vector() + templates.add('object/mobile/shared_bageraset.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('rogue_bageraset', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/corellia/rogue_corsec_trooper18.py b/scripts/mobiles/corellia/rogue_corsec_trooper18.py new file mode 100644 index 00000000..74a3fbfd --- /dev/null +++ b/scripts/mobiles/corellia/rogue_corsec_trooper18.py @@ -0,0 +1,48 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('corellia_corsec_rogue') + mobileTemplate.setLevel(18) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(15) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(1) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("corsec") + mobileTemplate.setAssistRange(6) + mobileTemplate.setStalker(True) + mobileTemplate.setOptionsBitmask(192) + + templates = Vector() + templates.add('object/mobile/shared_dressed_corsec_captain_human_female_01.iff') + templates.add('object/mobile/shared_dressed_corsec_captain_human_male_01.iff') + templates.add('object/mobile/shared_dressed_corsec_captain_human_male_02.iff') + templates.add('object/mobile/shared_dressed_corsec_captain_human_male_03.iff') + templates.add('object/mobile/shared_dressed_corsec_officer_human_female_01.iff') + templates.add('object/mobile/shared_dressed_corsec_officer_human_male_01.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/carbine/shared_carbine_cdef.iff', 1, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedShot') + mobileTemplate.setAttacks(attacks) + + lootPoolNames_1 = ['Junk'] + lootPoolChances_1 = [100] + lootGroupChance_1 = 100 + mobileTemplate.addToLootGroups(lootPoolNames_1,lootPoolChances_1,lootGroupChance_1) + + core.spawnService.addMobileTemplate('rogue_corsec_trooper18', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/corellia/rogue_corsec_trooper33.py b/scripts/mobiles/corellia/rogue_corsec_trooper33.py new file mode 100644 index 00000000..9ed8eaaf --- /dev/null +++ b/scripts/mobiles/corellia/rogue_corsec_trooper33.py @@ -0,0 +1,48 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('corellia_corsec_rogue') + mobileTemplate.setLevel(33) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(15) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(1) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("corsec") + mobileTemplate.setAssistRange(6) + mobileTemplate.setStalker(True) + mobileTemplate.setOptionsBitmask(192) + + templates = Vector() + templates.add('object/mobile/shared_dressed_corsec_captain_human_female_01.iff') + templates.add('object/mobile/shared_dressed_corsec_captain_human_male_01.iff') + templates.add('object/mobile/shared_dressed_corsec_captain_human_male_02.iff') + templates.add('object/mobile/shared_dressed_corsec_captain_human_male_03.iff') + templates.add('object/mobile/shared_dressed_corsec_officer_human_female_01.iff') + templates.add('object/mobile/shared_dressed_corsec_officer_human_male_01.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/carbine/shared_carbine_cdef.iff', 1, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedShot') + mobileTemplate.setAttacks(attacks) + + lootPoolNames_1 = ['Junk'] + lootPoolChances_1 = [100] + lootGroupChance_1 = 100 + mobileTemplate.addToLootGroups(lootPoolNames_1,lootPoolChances_1,lootGroupChance_1) + + core.spawnService.addMobileTemplate('rogue_corsec_trooper33', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/corellia/rotting_decy_mite_guard.py b/scripts/mobiles/corellia/rotting_decy_mite_guard.py new file mode 100644 index 00000000..37c77027 --- /dev/null +++ b/scripts/mobiles/corellia/rotting_decy_mite_guard.py @@ -0,0 +1,39 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('rotting_pustule_guard') + mobileTemplate.setLevel(13) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(True) + mobileTemplate.setScale(1) + mobileTemplate.setMeatType("Insect Meat") + mobileTemplate.setMeatAmount(9) + mobileTemplate.setSocialGroup("decay mite") + mobileTemplate.setAssistRange(6) + mobileTemplate.setStalker(False) + + templates = Vector() + templates.add('object/mobile/shared_rot_mite.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('dung_mite_worker', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/corellia/savage_humbaba.py b/scripts/mobiles/corellia/savage_humbaba.py new file mode 100644 index 00000000..8f78c745 --- /dev/null +++ b/scripts/mobiles/corellia/savage_humbaba.py @@ -0,0 +1,43 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('savage_humbaba') + mobileTemplate.setLevel(39) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setMeatType("Domesticated Meat") + mobileTemplate.setMeatAmount(265) + mobileTemplate.setHideType("Leathery Hide") + mobileTemplate.setHideAmount(168) + mobileTemplate.setBoneType("Mammal Bones") + mobileTemplate.setBoneAmount(118) + mobileTemplate.setSocialGroup("humbaba") + mobileTemplate.setAssistRange(10) + mobileTemplate.setStalker(False) + + templates = Vector() + templates.add('object/mobile/shared_savage_humbaba.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('savage_humbaba', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/corellia/scavenger_rat.py b/scripts/mobiles/corellia/scavenger_rat.py new file mode 100644 index 00000000..2c3fd051 --- /dev/null +++ b/scripts/mobiles/corellia/scavenger_rat.py @@ -0,0 +1,43 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('scavenger_rat') + mobileTemplate.setLevel(26) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setMeatType("Wild Meat") + mobileTemplate.setMeatAmount(4) + mobileTemplate.setHideType("Leathery Hide") + mobileTemplate.setHideAmount(3) + mobileTemplate.setBoneType("Mammal Hide") + mobileTemplate.setBoneAmount(2) + mobileTemplate.setSocialGroup("scavenger rat") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(False) + + templates = Vector() + templates.add('object/mobile/shared_womp_rat.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('minor_gubbur', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/corellia/selonian_assassin.py b/scripts/mobiles/corellia/selonian_assassin.py new file mode 100644 index 00000000..9953125e --- /dev/null +++ b/scripts/mobiles/corellia/selonian_assassin.py @@ -0,0 +1,66 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('selonian_assassin') + mobileTemplate.setLevel(39) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(15) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(1) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(True) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("selonian") + mobileTemplate.setAssistRange(6) + mobileTemplate.setStalker(True) + mobileTemplate.setOptionsBitmask(192) + + templates = Vector() + templates.add('object/mobile/shared_dressed_selonian_m_01.iff') + templates.add('object/mobile/shared_dressed_selonian_m_02.iff') + templates.add('object/mobile/shared_dressed_selonian_m_03.iff') + templates.add('object/mobile/shared_dressed_selonian_m_04.iff') + templates.add('object/mobile/shared_dressed_selonian_m_05.iff') + templates.add('object/mobile/shared_dressed_selonian_m_06.iff') + templates.add('object/mobile/shared_dressed_selonian_m_07.iff') + templates.add('object/mobile/shared_dressed_selonian_m_08.iff') + templates.add('object/mobile/shared_dressed_selonian_m_09.iff') + templates.add('object/mobile/shared_dressed_selonian_m_10.iff') + templates.add('object/mobile/shared_dressed_selonian_m_11.iff') + templates.add('object/mobile/shared_dressed_selonian_m_12.iff') + templates.add('object/mobile/shared_dressed_selonian_f_01.iff') + templates.add('object/mobile/shared_dressed_selonian_f_02.iff') + templates.add('object/mobile/shared_dressed_selonian_f_03.iff') + templates.add('object/mobile/shared_dressed_selonian_f_04.iff') + templates.add('object/mobile/shared_dressed_selonian_f_05.iff') + templates.add('object/mobile/shared_dressed_selonian_f_06.iff') + templates.add('object/mobile/shared_dressed_selonian_f_07.iff') + templates.add('object/mobile/shared_dressed_selonian_f_08.iff') + templates.add('object/mobile/shared_dressed_selonian_f_09.iff') + templates.add('object/mobile/shared_dressed_selonian_f_10.iff') + templates.add('object/mobile/shared_dressed_selonian_f_11.iff') + templates.add('object/mobile/shared_dressed_selonian_f_12.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/carbine/shared_carbine_e11.iff', 1, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedShot') + mobileTemplate.setAttacks(attacks) + + lootPoolNames_1 = ['Junk'] + lootPoolChances_1 = [100] + lootGroupChance_1 = 100 + mobileTemplate.addToLootGroups(lootPoolNames_1,lootPoolChances_1,lootGroupChance_1) + + core.spawnService.addMobileTemplate('selonian_assassin', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/corellia/selonian_captain.py b/scripts/mobiles/corellia/selonian_captain.py new file mode 100644 index 00000000..a915606f --- /dev/null +++ b/scripts/mobiles/corellia/selonian_captain.py @@ -0,0 +1,66 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('selonian_captain') + mobileTemplate.setLevel(39) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(15) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(1) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(True) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("selonian") + mobileTemplate.setAssistRange(6) + mobileTemplate.setStalker(True) + mobileTemplate.setOptionsBitmask(192) + + templates = Vector() + templates.add('object/mobile/shared_dressed_selonian_m_01.iff') + templates.add('object/mobile/shared_dressed_selonian_m_02.iff') + templates.add('object/mobile/shared_dressed_selonian_m_03.iff') + templates.add('object/mobile/shared_dressed_selonian_m_04.iff') + templates.add('object/mobile/shared_dressed_selonian_m_05.iff') + templates.add('object/mobile/shared_dressed_selonian_m_06.iff') + templates.add('object/mobile/shared_dressed_selonian_m_07.iff') + templates.add('object/mobile/shared_dressed_selonian_m_08.iff') + templates.add('object/mobile/shared_dressed_selonian_m_09.iff') + templates.add('object/mobile/shared_dressed_selonian_m_10.iff') + templates.add('object/mobile/shared_dressed_selonian_m_11.iff') + templates.add('object/mobile/shared_dressed_selonian_m_12.iff') + templates.add('object/mobile/shared_dressed_selonian_f_01.iff') + templates.add('object/mobile/shared_dressed_selonian_f_02.iff') + templates.add('object/mobile/shared_dressed_selonian_f_03.iff') + templates.add('object/mobile/shared_dressed_selonian_f_04.iff') + templates.add('object/mobile/shared_dressed_selonian_f_05.iff') + templates.add('object/mobile/shared_dressed_selonian_f_06.iff') + templates.add('object/mobile/shared_dressed_selonian_f_07.iff') + templates.add('object/mobile/shared_dressed_selonian_f_08.iff') + templates.add('object/mobile/shared_dressed_selonian_f_09.iff') + templates.add('object/mobile/shared_dressed_selonian_f_10.iff') + templates.add('object/mobile/shared_dressed_selonian_f_11.iff') + templates.add('object/mobile/shared_dressed_selonian_f_12.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/carbine/shared_carbine_e11.iff', 1, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedShot') + mobileTemplate.setAttacks(attacks) + + lootPoolNames_1 = ['Junk'] + lootPoolChances_1 = [100] + lootGroupChance_1 = 100 + mobileTemplate.addToLootGroups(lootPoolNames_1,lootPoolChances_1,lootGroupChance_1) + + core.spawnService.addMobileTemplate('selonian_captain', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/corellia/selonian_champion.py b/scripts/mobiles/corellia/selonian_champion.py new file mode 100644 index 00000000..ef0cc55b --- /dev/null +++ b/scripts/mobiles/corellia/selonian_champion.py @@ -0,0 +1,66 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('selonian_champion') + mobileTemplate.setLevel(39) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(15) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(1) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(True) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("selonian") + mobileTemplate.setAssistRange(6) + mobileTemplate.setStalker(True) + mobileTemplate.setOptionsBitmask(192) + + templates = Vector() + templates.add('object/mobile/shared_dressed_selonian_m_01.iff') + templates.add('object/mobile/shared_dressed_selonian_m_02.iff') + templates.add('object/mobile/shared_dressed_selonian_m_03.iff') + templates.add('object/mobile/shared_dressed_selonian_m_04.iff') + templates.add('object/mobile/shared_dressed_selonian_m_05.iff') + templates.add('object/mobile/shared_dressed_selonian_m_06.iff') + templates.add('object/mobile/shared_dressed_selonian_m_07.iff') + templates.add('object/mobile/shared_dressed_selonian_m_08.iff') + templates.add('object/mobile/shared_dressed_selonian_m_09.iff') + templates.add('object/mobile/shared_dressed_selonian_m_10.iff') + templates.add('object/mobile/shared_dressed_selonian_m_11.iff') + templates.add('object/mobile/shared_dressed_selonian_m_12.iff') + templates.add('object/mobile/shared_dressed_selonian_f_01.iff') + templates.add('object/mobile/shared_dressed_selonian_f_02.iff') + templates.add('object/mobile/shared_dressed_selonian_f_03.iff') + templates.add('object/mobile/shared_dressed_selonian_f_04.iff') + templates.add('object/mobile/shared_dressed_selonian_f_05.iff') + templates.add('object/mobile/shared_dressed_selonian_f_06.iff') + templates.add('object/mobile/shared_dressed_selonian_f_07.iff') + templates.add('object/mobile/shared_dressed_selonian_f_08.iff') + templates.add('object/mobile/shared_dressed_selonian_f_09.iff') + templates.add('object/mobile/shared_dressed_selonian_f_10.iff') + templates.add('object/mobile/shared_dressed_selonian_f_11.iff') + templates.add('object/mobile/shared_dressed_selonian_f_12.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/carbine/shared_carbine_e11.iff', 1, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedShot') + mobileTemplate.setAttacks(attacks) + + lootPoolNames_1 = ['Junk'] + lootPoolChances_1 = [100] + lootGroupChance_1 = 100 + mobileTemplate.addToLootGroups(lootPoolNames_1,lootPoolChances_1,lootGroupChance_1) + + core.spawnService.addMobileTemplate('selonian_champion', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/corellia/selonian_healer.py b/scripts/mobiles/corellia/selonian_healer.py new file mode 100644 index 00000000..473039a3 --- /dev/null +++ b/scripts/mobiles/corellia/selonian_healer.py @@ -0,0 +1,66 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('selonian_healer') + mobileTemplate.setLevel(38) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(15) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(1) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(True) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("selonian") + mobileTemplate.setAssistRange(6) + mobileTemplate.setStalker(True) + mobileTemplate.setOptionsBitmask(192) + + templates = Vector() + templates.add('object/mobile/shared_dressed_selonian_m_01.iff') + templates.add('object/mobile/shared_dressed_selonian_m_02.iff') + templates.add('object/mobile/shared_dressed_selonian_m_03.iff') + templates.add('object/mobile/shared_dressed_selonian_m_04.iff') + templates.add('object/mobile/shared_dressed_selonian_m_05.iff') + templates.add('object/mobile/shared_dressed_selonian_m_06.iff') + templates.add('object/mobile/shared_dressed_selonian_m_07.iff') + templates.add('object/mobile/shared_dressed_selonian_m_08.iff') + templates.add('object/mobile/shared_dressed_selonian_m_09.iff') + templates.add('object/mobile/shared_dressed_selonian_m_10.iff') + templates.add('object/mobile/shared_dressed_selonian_m_11.iff') + templates.add('object/mobile/shared_dressed_selonian_m_12.iff') + templates.add('object/mobile/shared_dressed_selonian_f_01.iff') + templates.add('object/mobile/shared_dressed_selonian_f_02.iff') + templates.add('object/mobile/shared_dressed_selonian_f_03.iff') + templates.add('object/mobile/shared_dressed_selonian_f_04.iff') + templates.add('object/mobile/shared_dressed_selonian_f_05.iff') + templates.add('object/mobile/shared_dressed_selonian_f_06.iff') + templates.add('object/mobile/shared_dressed_selonian_f_07.iff') + templates.add('object/mobile/shared_dressed_selonian_f_08.iff') + templates.add('object/mobile/shared_dressed_selonian_f_09.iff') + templates.add('object/mobile/shared_dressed_selonian_f_10.iff') + templates.add('object/mobile/shared_dressed_selonian_f_11.iff') + templates.add('object/mobile/shared_dressed_selonian_f_12.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/carbine/shared_carbine_e11.iff', 1, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedShot') + mobileTemplate.setAttacks(attacks) + + lootPoolNames_1 = ['Junk'] + lootPoolChances_1 = [100] + lootGroupChance_1 = 100 + mobileTemplate.addToLootGroups(lootPoolNames_1,lootPoolChances_1,lootGroupChance_1) + + core.spawnService.addMobileTemplate('selonian_healer', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/corellia/selonian_hunter.py b/scripts/mobiles/corellia/selonian_hunter.py new file mode 100644 index 00000000..0bb3ba2d --- /dev/null +++ b/scripts/mobiles/corellia/selonian_hunter.py @@ -0,0 +1,66 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('selonian_hunter') + mobileTemplate.setLevel(37) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(15) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(1) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(True) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("selonian") + mobileTemplate.setAssistRange(6) + mobileTemplate.setStalker(True) + mobileTemplate.setOptionsBitmask(192) + + templates = Vector() + templates.add('object/mobile/shared_dressed_selonian_m_01.iff') + templates.add('object/mobile/shared_dressed_selonian_m_02.iff') + templates.add('object/mobile/shared_dressed_selonian_m_03.iff') + templates.add('object/mobile/shared_dressed_selonian_m_04.iff') + templates.add('object/mobile/shared_dressed_selonian_m_05.iff') + templates.add('object/mobile/shared_dressed_selonian_m_06.iff') + templates.add('object/mobile/shared_dressed_selonian_m_07.iff') + templates.add('object/mobile/shared_dressed_selonian_m_08.iff') + templates.add('object/mobile/shared_dressed_selonian_m_09.iff') + templates.add('object/mobile/shared_dressed_selonian_m_10.iff') + templates.add('object/mobile/shared_dressed_selonian_m_11.iff') + templates.add('object/mobile/shared_dressed_selonian_m_12.iff') + templates.add('object/mobile/shared_dressed_selonian_f_01.iff') + templates.add('object/mobile/shared_dressed_selonian_f_02.iff') + templates.add('object/mobile/shared_dressed_selonian_f_03.iff') + templates.add('object/mobile/shared_dressed_selonian_f_04.iff') + templates.add('object/mobile/shared_dressed_selonian_f_05.iff') + templates.add('object/mobile/shared_dressed_selonian_f_06.iff') + templates.add('object/mobile/shared_dressed_selonian_f_07.iff') + templates.add('object/mobile/shared_dressed_selonian_f_08.iff') + templates.add('object/mobile/shared_dressed_selonian_f_09.iff') + templates.add('object/mobile/shared_dressed_selonian_f_10.iff') + templates.add('object/mobile/shared_dressed_selonian_f_11.iff') + templates.add('object/mobile/shared_dressed_selonian_f_12.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/carbine/shared_carbine_e11.iff', 1, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedShot') + mobileTemplate.setAttacks(attacks) + + lootPoolNames_1 = ['Junk'] + lootPoolChances_1 = [100] + lootGroupChance_1 = 100 + mobileTemplate.addToLootGroups(lootPoolNames_1,lootPoolChances_1,lootGroupChance_1) + + core.spawnService.addMobileTemplate('selonian_hunter', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/corellia/selonian_raider.py b/scripts/mobiles/corellia/selonian_raider.py new file mode 100644 index 00000000..21e93853 --- /dev/null +++ b/scripts/mobiles/corellia/selonian_raider.py @@ -0,0 +1,66 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('selonian_raider') + mobileTemplate.setLevel(39) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(15) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(1) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(True) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("selonian") + mobileTemplate.setAssistRange(6) + mobileTemplate.setStalker(True) + mobileTemplate.setOptionsBitmask(192) + + templates = Vector() + templates.add('object/mobile/shared_dressed_selonian_m_01.iff') + templates.add('object/mobile/shared_dressed_selonian_m_02.iff') + templates.add('object/mobile/shared_dressed_selonian_m_03.iff') + templates.add('object/mobile/shared_dressed_selonian_m_04.iff') + templates.add('object/mobile/shared_dressed_selonian_m_05.iff') + templates.add('object/mobile/shared_dressed_selonian_m_06.iff') + templates.add('object/mobile/shared_dressed_selonian_m_07.iff') + templates.add('object/mobile/shared_dressed_selonian_m_08.iff') + templates.add('object/mobile/shared_dressed_selonian_m_09.iff') + templates.add('object/mobile/shared_dressed_selonian_m_10.iff') + templates.add('object/mobile/shared_dressed_selonian_m_11.iff') + templates.add('object/mobile/shared_dressed_selonian_m_12.iff') + templates.add('object/mobile/shared_dressed_selonian_f_01.iff') + templates.add('object/mobile/shared_dressed_selonian_f_02.iff') + templates.add('object/mobile/shared_dressed_selonian_f_03.iff') + templates.add('object/mobile/shared_dressed_selonian_f_04.iff') + templates.add('object/mobile/shared_dressed_selonian_f_05.iff') + templates.add('object/mobile/shared_dressed_selonian_f_06.iff') + templates.add('object/mobile/shared_dressed_selonian_f_07.iff') + templates.add('object/mobile/shared_dressed_selonian_f_08.iff') + templates.add('object/mobile/shared_dressed_selonian_f_09.iff') + templates.add('object/mobile/shared_dressed_selonian_f_10.iff') + templates.add('object/mobile/shared_dressed_selonian_f_11.iff') + templates.add('object/mobile/shared_dressed_selonian_f_12.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/carbine/shared_carbine_e11.iff', 1, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedShot') + mobileTemplate.setAttacks(attacks) + + lootPoolNames_1 = ['Junk'] + lootPoolChances_1 = [100] + lootGroupChance_1 = 100 + mobileTemplate.addToLootGroups(lootPoolNames_1,lootPoolChances_1,lootGroupChance_1) + + core.spawnService.addMobileTemplate('selonian_raider', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/corellia/selonian_scout.py b/scripts/mobiles/corellia/selonian_scout.py new file mode 100644 index 00000000..0b5e1a65 --- /dev/null +++ b/scripts/mobiles/corellia/selonian_scout.py @@ -0,0 +1,66 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('selonian_scout') + mobileTemplate.setLevel(37) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(15) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(1) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(True) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("selonian") + mobileTemplate.setAssistRange(6) + mobileTemplate.setStalker(True) + mobileTemplate.setOptionsBitmask(192) + + templates = Vector() + templates.add('object/mobile/shared_dressed_selonian_m_01.iff') + templates.add('object/mobile/shared_dressed_selonian_m_02.iff') + templates.add('object/mobile/shared_dressed_selonian_m_03.iff') + templates.add('object/mobile/shared_dressed_selonian_m_04.iff') + templates.add('object/mobile/shared_dressed_selonian_m_05.iff') + templates.add('object/mobile/shared_dressed_selonian_m_06.iff') + templates.add('object/mobile/shared_dressed_selonian_m_07.iff') + templates.add('object/mobile/shared_dressed_selonian_m_08.iff') + templates.add('object/mobile/shared_dressed_selonian_m_09.iff') + templates.add('object/mobile/shared_dressed_selonian_m_10.iff') + templates.add('object/mobile/shared_dressed_selonian_m_11.iff') + templates.add('object/mobile/shared_dressed_selonian_m_12.iff') + templates.add('object/mobile/shared_dressed_selonian_f_01.iff') + templates.add('object/mobile/shared_dressed_selonian_f_02.iff') + templates.add('object/mobile/shared_dressed_selonian_f_03.iff') + templates.add('object/mobile/shared_dressed_selonian_f_04.iff') + templates.add('object/mobile/shared_dressed_selonian_f_05.iff') + templates.add('object/mobile/shared_dressed_selonian_f_06.iff') + templates.add('object/mobile/shared_dressed_selonian_f_07.iff') + templates.add('object/mobile/shared_dressed_selonian_f_08.iff') + templates.add('object/mobile/shared_dressed_selonian_f_09.iff') + templates.add('object/mobile/shared_dressed_selonian_f_10.iff') + templates.add('object/mobile/shared_dressed_selonian_f_11.iff') + templates.add('object/mobile/shared_dressed_selonian_f_12.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/carbine/shared_carbine_e11.iff', 1, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedShot') + mobileTemplate.setAttacks(attacks) + + lootPoolNames_1 = ['Junk'] + lootPoolChances_1 = [100] + lootGroupChance_1 = 100 + mobileTemplate.addToLootGroups(lootPoolNames_1,lootPoolChances_1,lootGroupChance_1) + + core.spawnService.addMobileTemplate('selonian_scout', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/corellia/selonian_sentinel.py b/scripts/mobiles/corellia/selonian_sentinel.py new file mode 100644 index 00000000..982d63aa --- /dev/null +++ b/scripts/mobiles/corellia/selonian_sentinel.py @@ -0,0 +1,66 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('selonian_sentinel') + mobileTemplate.setLevel(38) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(15) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(1) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(True) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("selonian") + mobileTemplate.setAssistRange(6) + mobileTemplate.setStalker(True) + mobileTemplate.setOptionsBitmask(192) + + templates = Vector() + templates.add('object/mobile/shared_dressed_selonian_m_01.iff') + templates.add('object/mobile/shared_dressed_selonian_m_02.iff') + templates.add('object/mobile/shared_dressed_selonian_m_03.iff') + templates.add('object/mobile/shared_dressed_selonian_m_04.iff') + templates.add('object/mobile/shared_dressed_selonian_m_05.iff') + templates.add('object/mobile/shared_dressed_selonian_m_06.iff') + templates.add('object/mobile/shared_dressed_selonian_m_07.iff') + templates.add('object/mobile/shared_dressed_selonian_m_08.iff') + templates.add('object/mobile/shared_dressed_selonian_m_09.iff') + templates.add('object/mobile/shared_dressed_selonian_m_10.iff') + templates.add('object/mobile/shared_dressed_selonian_m_11.iff') + templates.add('object/mobile/shared_dressed_selonian_m_12.iff') + templates.add('object/mobile/shared_dressed_selonian_f_01.iff') + templates.add('object/mobile/shared_dressed_selonian_f_02.iff') + templates.add('object/mobile/shared_dressed_selonian_f_03.iff') + templates.add('object/mobile/shared_dressed_selonian_f_04.iff') + templates.add('object/mobile/shared_dressed_selonian_f_05.iff') + templates.add('object/mobile/shared_dressed_selonian_f_06.iff') + templates.add('object/mobile/shared_dressed_selonian_f_07.iff') + templates.add('object/mobile/shared_dressed_selonian_f_08.iff') + templates.add('object/mobile/shared_dressed_selonian_f_09.iff') + templates.add('object/mobile/shared_dressed_selonian_f_10.iff') + templates.add('object/mobile/shared_dressed_selonian_f_11.iff') + templates.add('object/mobile/shared_dressed_selonian_f_12.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/carbine/shared_carbine_e11.iff', 1, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedShot') + mobileTemplate.setAttacks(attacks) + + lootPoolNames_1 = ['Junk'] + lootPoolChances_1 = [100] + lootGroupChance_1 = 100 + mobileTemplate.addToLootGroups(lootPoolNames_1,lootPoolChances_1,lootGroupChance_1) + + core.spawnService.addMobileTemplate('selonian_sentinel', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/corellia/selonian_separatist.py b/scripts/mobiles/corellia/selonian_separatist.py new file mode 100644 index 00000000..b15a1709 --- /dev/null +++ b/scripts/mobiles/corellia/selonian_separatist.py @@ -0,0 +1,66 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('selonian_separatist') + mobileTemplate.setLevel(37) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(15) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(1) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(True) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("selonian") + mobileTemplate.setAssistRange(6) + mobileTemplate.setStalker(True) + mobileTemplate.setOptionsBitmask(192) + + templates = Vector() + templates.add('object/mobile/shared_dressed_selonian_m_01.iff') + templates.add('object/mobile/shared_dressed_selonian_m_02.iff') + templates.add('object/mobile/shared_dressed_selonian_m_03.iff') + templates.add('object/mobile/shared_dressed_selonian_m_04.iff') + templates.add('object/mobile/shared_dressed_selonian_m_05.iff') + templates.add('object/mobile/shared_dressed_selonian_m_06.iff') + templates.add('object/mobile/shared_dressed_selonian_m_07.iff') + templates.add('object/mobile/shared_dressed_selonian_m_08.iff') + templates.add('object/mobile/shared_dressed_selonian_m_09.iff') + templates.add('object/mobile/shared_dressed_selonian_m_10.iff') + templates.add('object/mobile/shared_dressed_selonian_m_11.iff') + templates.add('object/mobile/shared_dressed_selonian_m_12.iff') + templates.add('object/mobile/shared_dressed_selonian_f_01.iff') + templates.add('object/mobile/shared_dressed_selonian_f_02.iff') + templates.add('object/mobile/shared_dressed_selonian_f_03.iff') + templates.add('object/mobile/shared_dressed_selonian_f_04.iff') + templates.add('object/mobile/shared_dressed_selonian_f_05.iff') + templates.add('object/mobile/shared_dressed_selonian_f_06.iff') + templates.add('object/mobile/shared_dressed_selonian_f_07.iff') + templates.add('object/mobile/shared_dressed_selonian_f_08.iff') + templates.add('object/mobile/shared_dressed_selonian_f_09.iff') + templates.add('object/mobile/shared_dressed_selonian_f_10.iff') + templates.add('object/mobile/shared_dressed_selonian_f_11.iff') + templates.add('object/mobile/shared_dressed_selonian_f_12.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/carbine/shared_carbine_e11.iff', 1, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedShot') + mobileTemplate.setAttacks(attacks) + + lootPoolNames_1 = ['Junk'] + lootPoolChances_1 = [100] + lootGroupChance_1 = 100 + mobileTemplate.addToLootGroups(lootPoolNames_1,lootPoolChances_1,lootGroupChance_1) + + core.spawnService.addMobileTemplate('selonian_separatist', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/corellia/selonian_separatist_captain.py b/scripts/mobiles/corellia/selonian_separatist_captain.py new file mode 100644 index 00000000..08ce9266 --- /dev/null +++ b/scripts/mobiles/corellia/selonian_separatist_captain.py @@ -0,0 +1,66 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('selonian_separatist_captain') + mobileTemplate.setLevel(39) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(15) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(1) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(True) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("selonian") + mobileTemplate.setAssistRange(6) + mobileTemplate.setStalker(True) + mobileTemplate.setOptionsBitmask(192) + + templates = Vector() + templates.add('object/mobile/shared_dressed_selonian_m_01.iff') + templates.add('object/mobile/shared_dressed_selonian_m_02.iff') + templates.add('object/mobile/shared_dressed_selonian_m_03.iff') + templates.add('object/mobile/shared_dressed_selonian_m_04.iff') + templates.add('object/mobile/shared_dressed_selonian_m_05.iff') + templates.add('object/mobile/shared_dressed_selonian_m_06.iff') + templates.add('object/mobile/shared_dressed_selonian_m_07.iff') + templates.add('object/mobile/shared_dressed_selonian_m_08.iff') + templates.add('object/mobile/shared_dressed_selonian_m_09.iff') + templates.add('object/mobile/shared_dressed_selonian_m_10.iff') + templates.add('object/mobile/shared_dressed_selonian_m_11.iff') + templates.add('object/mobile/shared_dressed_selonian_m_12.iff') + templates.add('object/mobile/shared_dressed_selonian_f_01.iff') + templates.add('object/mobile/shared_dressed_selonian_f_02.iff') + templates.add('object/mobile/shared_dressed_selonian_f_03.iff') + templates.add('object/mobile/shared_dressed_selonian_f_04.iff') + templates.add('object/mobile/shared_dressed_selonian_f_05.iff') + templates.add('object/mobile/shared_dressed_selonian_f_06.iff') + templates.add('object/mobile/shared_dressed_selonian_f_07.iff') + templates.add('object/mobile/shared_dressed_selonian_f_08.iff') + templates.add('object/mobile/shared_dressed_selonian_f_09.iff') + templates.add('object/mobile/shared_dressed_selonian_f_10.iff') + templates.add('object/mobile/shared_dressed_selonian_f_11.iff') + templates.add('object/mobile/shared_dressed_selonian_f_12.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/carbine/shared_carbine_e11.iff', 1, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedShot') + mobileTemplate.setAttacks(attacks) + + lootPoolNames_1 = ['Junk'] + lootPoolChances_1 = [100] + lootGroupChance_1 = 100 + mobileTemplate.addToLootGroups(lootPoolNames_1,lootPoolChances_1,lootGroupChance_1) + + core.spawnService.addMobileTemplate('selonian_separatist_captain', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/corellia/selonian_separatist_general.py b/scripts/mobiles/corellia/selonian_separatist_general.py new file mode 100644 index 00000000..a3a1e7d1 --- /dev/null +++ b/scripts/mobiles/corellia/selonian_separatist_general.py @@ -0,0 +1,66 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('selonian_separatist_general') + mobileTemplate.setLevel(40) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(15) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(1) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(True) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("selonian") + mobileTemplate.setAssistRange(6) + mobileTemplate.setStalker(True) + mobileTemplate.setOptionsBitmask(192) + + templates = Vector() + templates.add('object/mobile/shared_dressed_selonian_m_01.iff') + templates.add('object/mobile/shared_dressed_selonian_m_02.iff') + templates.add('object/mobile/shared_dressed_selonian_m_03.iff') + templates.add('object/mobile/shared_dressed_selonian_m_04.iff') + templates.add('object/mobile/shared_dressed_selonian_m_05.iff') + templates.add('object/mobile/shared_dressed_selonian_m_06.iff') + templates.add('object/mobile/shared_dressed_selonian_m_07.iff') + templates.add('object/mobile/shared_dressed_selonian_m_08.iff') + templates.add('object/mobile/shared_dressed_selonian_m_09.iff') + templates.add('object/mobile/shared_dressed_selonian_m_10.iff') + templates.add('object/mobile/shared_dressed_selonian_m_11.iff') + templates.add('object/mobile/shared_dressed_selonian_m_12.iff') + templates.add('object/mobile/shared_dressed_selonian_f_01.iff') + templates.add('object/mobile/shared_dressed_selonian_f_02.iff') + templates.add('object/mobile/shared_dressed_selonian_f_03.iff') + templates.add('object/mobile/shared_dressed_selonian_f_04.iff') + templates.add('object/mobile/shared_dressed_selonian_f_05.iff') + templates.add('object/mobile/shared_dressed_selonian_f_06.iff') + templates.add('object/mobile/shared_dressed_selonian_f_07.iff') + templates.add('object/mobile/shared_dressed_selonian_f_08.iff') + templates.add('object/mobile/shared_dressed_selonian_f_09.iff') + templates.add('object/mobile/shared_dressed_selonian_f_10.iff') + templates.add('object/mobile/shared_dressed_selonian_f_11.iff') + templates.add('object/mobile/shared_dressed_selonian_f_12.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/carbine/shared_carbine_e11.iff', 1, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedShot') + mobileTemplate.setAttacks(attacks) + + lootPoolNames_1 = ['Junk'] + lootPoolChances_1 = [100] + lootGroupChance_1 = 100 + mobileTemplate.addToLootGroups(lootPoolNames_1,lootPoolChances_1,lootGroupChance_1) + + core.spawnService.addMobileTemplate('selonian_separatist_general', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/corellia/selonian_separatist_recruit.py b/scripts/mobiles/corellia/selonian_separatist_recruit.py new file mode 100644 index 00000000..0238328d --- /dev/null +++ b/scripts/mobiles/corellia/selonian_separatist_recruit.py @@ -0,0 +1,66 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('selonian_separatist_recruit') + mobileTemplate.setLevel(36) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(15) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(1) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(True) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("selonian") + mobileTemplate.setAssistRange(6) + mobileTemplate.setStalker(True) + mobileTemplate.setOptionsBitmask(192) + + templates = Vector() + templates.add('object/mobile/shared_dressed_selonian_m_01.iff') + templates.add('object/mobile/shared_dressed_selonian_m_02.iff') + templates.add('object/mobile/shared_dressed_selonian_m_03.iff') + templates.add('object/mobile/shared_dressed_selonian_m_04.iff') + templates.add('object/mobile/shared_dressed_selonian_m_05.iff') + templates.add('object/mobile/shared_dressed_selonian_m_06.iff') + templates.add('object/mobile/shared_dressed_selonian_m_07.iff') + templates.add('object/mobile/shared_dressed_selonian_m_08.iff') + templates.add('object/mobile/shared_dressed_selonian_m_09.iff') + templates.add('object/mobile/shared_dressed_selonian_m_10.iff') + templates.add('object/mobile/shared_dressed_selonian_m_11.iff') + templates.add('object/mobile/shared_dressed_selonian_m_12.iff') + templates.add('object/mobile/shared_dressed_selonian_f_01.iff') + templates.add('object/mobile/shared_dressed_selonian_f_02.iff') + templates.add('object/mobile/shared_dressed_selonian_f_03.iff') + templates.add('object/mobile/shared_dressed_selonian_f_04.iff') + templates.add('object/mobile/shared_dressed_selonian_f_05.iff') + templates.add('object/mobile/shared_dressed_selonian_f_06.iff') + templates.add('object/mobile/shared_dressed_selonian_f_07.iff') + templates.add('object/mobile/shared_dressed_selonian_f_08.iff') + templates.add('object/mobile/shared_dressed_selonian_f_09.iff') + templates.add('object/mobile/shared_dressed_selonian_f_10.iff') + templates.add('object/mobile/shared_dressed_selonian_f_11.iff') + templates.add('object/mobile/shared_dressed_selonian_f_12.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/carbine/shared_carbine_e11.iff', 1, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedShot') + mobileTemplate.setAttacks(attacks) + + lootPoolNames_1 = ['Junk'] + lootPoolChances_1 = [100] + lootGroupChance_1 = 100 + mobileTemplate.addToLootGroups(lootPoolNames_1,lootPoolChances_1,lootGroupChance_1) + + core.spawnService.addMobileTemplate('selonian_separatist_recruit', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/corellia/selonian_separatist_soldier.py b/scripts/mobiles/corellia/selonian_separatist_soldier.py new file mode 100644 index 00000000..26b3f080 --- /dev/null +++ b/scripts/mobiles/corellia/selonian_separatist_soldier.py @@ -0,0 +1,66 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('selonian_separatist_soldier') + mobileTemplate.setLevel(38) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(15) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(1) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(True) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("selonian") + mobileTemplate.setAssistRange(6) + mobileTemplate.setStalker(True) + mobileTemplate.setOptionsBitmask(192) + + templates = Vector() + templates.add('object/mobile/shared_dressed_selonian_m_01.iff') + templates.add('object/mobile/shared_dressed_selonian_m_02.iff') + templates.add('object/mobile/shared_dressed_selonian_m_03.iff') + templates.add('object/mobile/shared_dressed_selonian_m_04.iff') + templates.add('object/mobile/shared_dressed_selonian_m_05.iff') + templates.add('object/mobile/shared_dressed_selonian_m_06.iff') + templates.add('object/mobile/shared_dressed_selonian_m_07.iff') + templates.add('object/mobile/shared_dressed_selonian_m_08.iff') + templates.add('object/mobile/shared_dressed_selonian_m_09.iff') + templates.add('object/mobile/shared_dressed_selonian_m_10.iff') + templates.add('object/mobile/shared_dressed_selonian_m_11.iff') + templates.add('object/mobile/shared_dressed_selonian_m_12.iff') + templates.add('object/mobile/shared_dressed_selonian_f_01.iff') + templates.add('object/mobile/shared_dressed_selonian_f_02.iff') + templates.add('object/mobile/shared_dressed_selonian_f_03.iff') + templates.add('object/mobile/shared_dressed_selonian_f_04.iff') + templates.add('object/mobile/shared_dressed_selonian_f_05.iff') + templates.add('object/mobile/shared_dressed_selonian_f_06.iff') + templates.add('object/mobile/shared_dressed_selonian_f_07.iff') + templates.add('object/mobile/shared_dressed_selonian_f_08.iff') + templates.add('object/mobile/shared_dressed_selonian_f_09.iff') + templates.add('object/mobile/shared_dressed_selonian_f_10.iff') + templates.add('object/mobile/shared_dressed_selonian_f_11.iff') + templates.add('object/mobile/shared_dressed_selonian_f_12.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/carbine/shared_carbine_e11.iff', 1, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedShot') + mobileTemplate.setAttacks(attacks) + + lootPoolNames_1 = ['Junk'] + lootPoolChances_1 = [100] + lootGroupChance_1 = 100 + mobileTemplate.addToLootGroups(lootPoolNames_1,lootPoolChances_1,lootGroupChance_1) + + core.spawnService.addMobileTemplate('selonian_separatist_soldier', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/corellia/selonian_thief.py b/scripts/mobiles/corellia/selonian_thief.py new file mode 100644 index 00000000..6febb1cf --- /dev/null +++ b/scripts/mobiles/corellia/selonian_thief.py @@ -0,0 +1,66 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('selonian_thief') + mobileTemplate.setLevel(38) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(15) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(1) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(True) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("selonian") + mobileTemplate.setAssistRange(6) + mobileTemplate.setStalker(True) + mobileTemplate.setOptionsBitmask(192) + + templates = Vector() + templates.add('object/mobile/shared_dressed_selonian_m_01.iff') + templates.add('object/mobile/shared_dressed_selonian_m_02.iff') + templates.add('object/mobile/shared_dressed_selonian_m_03.iff') + templates.add('object/mobile/shared_dressed_selonian_m_04.iff') + templates.add('object/mobile/shared_dressed_selonian_m_05.iff') + templates.add('object/mobile/shared_dressed_selonian_m_06.iff') + templates.add('object/mobile/shared_dressed_selonian_m_07.iff') + templates.add('object/mobile/shared_dressed_selonian_m_08.iff') + templates.add('object/mobile/shared_dressed_selonian_m_09.iff') + templates.add('object/mobile/shared_dressed_selonian_m_10.iff') + templates.add('object/mobile/shared_dressed_selonian_m_11.iff') + templates.add('object/mobile/shared_dressed_selonian_m_12.iff') + templates.add('object/mobile/shared_dressed_selonian_f_01.iff') + templates.add('object/mobile/shared_dressed_selonian_f_02.iff') + templates.add('object/mobile/shared_dressed_selonian_f_03.iff') + templates.add('object/mobile/shared_dressed_selonian_f_04.iff') + templates.add('object/mobile/shared_dressed_selonian_f_05.iff') + templates.add('object/mobile/shared_dressed_selonian_f_06.iff') + templates.add('object/mobile/shared_dressed_selonian_f_07.iff') + templates.add('object/mobile/shared_dressed_selonian_f_08.iff') + templates.add('object/mobile/shared_dressed_selonian_f_09.iff') + templates.add('object/mobile/shared_dressed_selonian_f_10.iff') + templates.add('object/mobile/shared_dressed_selonian_f_11.iff') + templates.add('object/mobile/shared_dressed_selonian_f_12.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/carbine/shared_carbine_e11.iff', 1, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedShot') + mobileTemplate.setAttacks(attacks) + + lootPoolNames_1 = ['Junk'] + lootPoolChances_1 = [100] + lootGroupChance_1 = 100 + mobileTemplate.addToLootGroups(lootPoolNames_1,lootPoolChances_1,lootGroupChance_1) + + core.spawnService.addMobileTemplate('selonian_thief', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/corellia/selonian_warlord.py b/scripts/mobiles/corellia/selonian_warlord.py new file mode 100644 index 00000000..2efdea82 --- /dev/null +++ b/scripts/mobiles/corellia/selonian_warlord.py @@ -0,0 +1,66 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('selonian_warlord') + mobileTemplate.setLevel(39) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(15) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(1) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(True) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("selonian") + mobileTemplate.setAssistRange(6) + mobileTemplate.setStalker(True) + mobileTemplate.setOptionsBitmask(192) + + templates = Vector() + templates.add('object/mobile/shared_dressed_selonian_m_01.iff') + templates.add('object/mobile/shared_dressed_selonian_m_02.iff') + templates.add('object/mobile/shared_dressed_selonian_m_03.iff') + templates.add('object/mobile/shared_dressed_selonian_m_04.iff') + templates.add('object/mobile/shared_dressed_selonian_m_05.iff') + templates.add('object/mobile/shared_dressed_selonian_m_06.iff') + templates.add('object/mobile/shared_dressed_selonian_m_07.iff') + templates.add('object/mobile/shared_dressed_selonian_m_08.iff') + templates.add('object/mobile/shared_dressed_selonian_m_09.iff') + templates.add('object/mobile/shared_dressed_selonian_m_10.iff') + templates.add('object/mobile/shared_dressed_selonian_m_11.iff') + templates.add('object/mobile/shared_dressed_selonian_m_12.iff') + templates.add('object/mobile/shared_dressed_selonian_f_01.iff') + templates.add('object/mobile/shared_dressed_selonian_f_02.iff') + templates.add('object/mobile/shared_dressed_selonian_f_03.iff') + templates.add('object/mobile/shared_dressed_selonian_f_04.iff') + templates.add('object/mobile/shared_dressed_selonian_f_05.iff') + templates.add('object/mobile/shared_dressed_selonian_f_06.iff') + templates.add('object/mobile/shared_dressed_selonian_f_07.iff') + templates.add('object/mobile/shared_dressed_selonian_f_08.iff') + templates.add('object/mobile/shared_dressed_selonian_f_09.iff') + templates.add('object/mobile/shared_dressed_selonian_f_10.iff') + templates.add('object/mobile/shared_dressed_selonian_f_11.iff') + templates.add('object/mobile/shared_dressed_selonian_f_12.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/carbine/shared_carbine_e11.iff', 1, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedShot') + mobileTemplate.setAttacks(attacks) + + lootPoolNames_1 = ['Junk'] + lootPoolChances_1 = [100] + lootGroupChance_1 = 100 + mobileTemplate.addToLootGroups(lootPoolNames_1,lootPoolChances_1,lootGroupChance_1) + + core.spawnService.addMobileTemplate('selonian_warlord', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/corellia/selonian_warrior.py b/scripts/mobiles/corellia/selonian_warrior.py new file mode 100644 index 00000000..b9d0f5ed --- /dev/null +++ b/scripts/mobiles/corellia/selonian_warrior.py @@ -0,0 +1,66 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('selonian_warrior') + mobileTemplate.setLevel(38) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(15) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(1) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(True) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("selonian") + mobileTemplate.setAssistRange(6) + mobileTemplate.setStalker(True) + mobileTemplate.setOptionsBitmask(192) + + templates = Vector() + templates.add('object/mobile/shared_dressed_selonian_m_01.iff') + templates.add('object/mobile/shared_dressed_selonian_m_02.iff') + templates.add('object/mobile/shared_dressed_selonian_m_03.iff') + templates.add('object/mobile/shared_dressed_selonian_m_04.iff') + templates.add('object/mobile/shared_dressed_selonian_m_05.iff') + templates.add('object/mobile/shared_dressed_selonian_m_06.iff') + templates.add('object/mobile/shared_dressed_selonian_m_07.iff') + templates.add('object/mobile/shared_dressed_selonian_m_08.iff') + templates.add('object/mobile/shared_dressed_selonian_m_09.iff') + templates.add('object/mobile/shared_dressed_selonian_m_10.iff') + templates.add('object/mobile/shared_dressed_selonian_m_11.iff') + templates.add('object/mobile/shared_dressed_selonian_m_12.iff') + templates.add('object/mobile/shared_dressed_selonian_f_01.iff') + templates.add('object/mobile/shared_dressed_selonian_f_02.iff') + templates.add('object/mobile/shared_dressed_selonian_f_03.iff') + templates.add('object/mobile/shared_dressed_selonian_f_04.iff') + templates.add('object/mobile/shared_dressed_selonian_f_05.iff') + templates.add('object/mobile/shared_dressed_selonian_f_06.iff') + templates.add('object/mobile/shared_dressed_selonian_f_07.iff') + templates.add('object/mobile/shared_dressed_selonian_f_08.iff') + templates.add('object/mobile/shared_dressed_selonian_f_09.iff') + templates.add('object/mobile/shared_dressed_selonian_f_10.iff') + templates.add('object/mobile/shared_dressed_selonian_f_11.iff') + templates.add('object/mobile/shared_dressed_selonian_f_12.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/carbine/shared_carbine_e11.iff', 1, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedShot') + mobileTemplate.setAttacks(attacks) + + lootPoolNames_1 = ['Junk'] + lootPoolChances_1 = [100] + lootGroupChance_1 = 100 + mobileTemplate.addToLootGroups(lootPoolNames_1,lootPoolChances_1,lootGroupChance_1) + + core.spawnService.addMobileTemplate('selonian_warrior', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/corellia/sharnaff.py b/scripts/mobiles/corellia/sharnaff.py new file mode 100644 index 00000000..ca2f3b30 --- /dev/null +++ b/scripts/mobiles/corellia/sharnaff.py @@ -0,0 +1,43 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('sharnaff') + mobileTemplate.setLevel(35) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setMeatType("Carnivore Meat") + mobileTemplate.setMeatAmount(450) + mobileTemplate.setHideType("Scaley Hide") + mobileTemplate.setHideAmount(300) + mobileTemplate.setBoneType("Mammal Hide") + mobileTemplate.setBoneAmount(180) + mobileTemplate.setSocialGroup("sharnaff") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(False) + + templates = Vector() + templates.add('object/mobile/shared_sharnaff.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('sharnaff', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/corellia/sharnaff_bull.py b/scripts/mobiles/corellia/sharnaff_bull.py new file mode 100644 index 00000000..48e5a1fb --- /dev/null +++ b/scripts/mobiles/corellia/sharnaff_bull.py @@ -0,0 +1,43 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('sharnaff_bull') + mobileTemplate.setLevel(36) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setMeatType("Carnivore Meat") + mobileTemplate.setMeatAmount(482) + mobileTemplate.setHideType("Scaley Hide") + mobileTemplate.setHideAmount(335) + mobileTemplate.setBoneType("Mammal Hide") + mobileTemplate.setBoneAmount(200) + mobileTemplate.setSocialGroup("sharnaff") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(False) + + templates = Vector() + templates.add('object/mobile/shared_sharnaff_bull.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('sharnaff_bull', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/corellia/sharnaff_reckless_ravager.py b/scripts/mobiles/corellia/sharnaff_reckless_ravager.py new file mode 100644 index 00000000..024e5adc --- /dev/null +++ b/scripts/mobiles/corellia/sharnaff_reckless_ravager.py @@ -0,0 +1,43 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('sharnaff_reckless_ravager') + mobileTemplate.setLevel(35) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(True) + mobileTemplate.setScale(1) + mobileTemplate.setMeatType("Carnivore Meat") + mobileTemplate.setMeatAmount(450) + mobileTemplate.setHideType("Scaley Hide") + mobileTemplate.setHideAmount(300) + mobileTemplate.setBoneType("Mammal Hide") + mobileTemplate.setBoneAmount(180) + mobileTemplate.setSocialGroup("sharnaff") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(False) + + templates = Vector() + templates.add('object/mobile/shared_sharnaff.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('sharnaff_reckless', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/corellia/slice_hound.py b/scripts/mobiles/corellia/slice_hound.py new file mode 100644 index 00000000..b3a6a914 --- /dev/null +++ b/scripts/mobiles/corellia/slice_hound.py @@ -0,0 +1,43 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('slice_hound') + mobileTemplate.setLevel(28) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setMeatType("Carnivore Meat") + mobileTemplate.setMeatAmount(65) + mobileTemplate.setHideType("Bristly Hide") + mobileTemplate.setHideAmount(35) + mobileTemplate.setBoneType("Mammal Bones") + mobileTemplate.setBoneAmount(30) + mobileTemplate.setSocialGroup("slice hound") + mobileTemplate.setAssistRange(6) + mobileTemplate.setStalker(False) + + templates = Vector() + templates.add('object/mobile/shared_corellian_slice_hound.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('slice_hound', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/corellia/swamp_gurrcat.py b/scripts/mobiles/corellia/swamp_gurrcat.py new file mode 100644 index 00000000..a5be16fa --- /dev/null +++ b/scripts/mobiles/corellia/swamp_gurrcat.py @@ -0,0 +1,43 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('swamp_gurrcat') + mobileTemplate.setLevel(26) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setMeatType("Carnivore Meat") + mobileTemplate.setMeatAmount(65) + mobileTemplate.setHideType("Bristly Hide") + mobileTemplate.setHideAmount(35) + mobileTemplate.setBoneType("Mammal Bones") + mobileTemplate.setBoneAmount(30) + mobileTemplate.setSocialGroup("swamp gurrcat") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(False) + + templates = Vector() + templates.add('object/mobile/shared_gurrcat.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('swamp_gurrcat', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/corellia/swamp_humbaba.py b/scripts/mobiles/corellia/swamp_humbaba.py new file mode 100644 index 00000000..20ac57d0 --- /dev/null +++ b/scripts/mobiles/corellia/swamp_humbaba.py @@ -0,0 +1,43 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('swamp_humbaba') + mobileTemplate.setLevel(35) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setMeatType("Domesticated Meat") + mobileTemplate.setMeatAmount(250) + mobileTemplate.setHideType("Leathery Hide") + mobileTemplate.setHideAmount(150) + mobileTemplate.setBoneType("Mammal Bones") + mobileTemplate.setBoneAmount(105) + mobileTemplate.setSocialGroup("humbaba") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(False) + + templates = Vector() + templates.add('object/mobile/shared_savage_humbaba.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('swamp_humbaba', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/corellia/tabage.py b/scripts/mobiles/corellia/tabage.py new file mode 100644 index 00000000..8694c35e --- /dev/null +++ b/scripts/mobiles/corellia/tabage.py @@ -0,0 +1,43 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('tabage') + mobileTemplate.setLevel(26) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setMeatType("Carnivore Meat") + mobileTemplate.setMeatAmount(18) + mobileTemplate.setHideType("Bristly Hide") + mobileTemplate.setHideAmount(24) + mobileTemplate.setBoneType("Mammal Bones") + mobileTemplate.setBoneAmount(7) + mobileTemplate.setSocialGroup("tabage") + mobileTemplate.setAssistRange(10) + mobileTemplate.setStalker(False) + + templates = Vector() + templates.add('object/mobile/shared_tabage.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('tabage', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/corellia/tabage_protector.py b/scripts/mobiles/corellia/tabage_protector.py new file mode 100644 index 00000000..5a8a7f98 --- /dev/null +++ b/scripts/mobiles/corellia/tabage_protector.py @@ -0,0 +1,43 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('tabage_protector') + mobileTemplate.setLevel(12) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setMeatType("Carnivore Meat") + mobileTemplate.setMeatAmount(14) + mobileTemplate.setHideType("Bristly Hide") + mobileTemplate.setHideAmount(14) + mobileTemplate.setBoneType("Mammal Bones") + mobileTemplate.setBoneAmount(14) + mobileTemplate.setSocialGroup("tabage") + mobileTemplate.setAssistRange(10) + mobileTemplate.setStalker(False) + + templates = Vector() + templates.add('object/mobile/shared_tabage.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('tabage_protector', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/corellia/tabage_scavenger.py b/scripts/mobiles/corellia/tabage_scavenger.py new file mode 100644 index 00000000..2ac20717 --- /dev/null +++ b/scripts/mobiles/corellia/tabage_scavenger.py @@ -0,0 +1,43 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('tabage_scavenger') + mobileTemplate.setLevel(12) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setMeatType("Carnivore Meat") + mobileTemplate.setMeatAmount(13) + mobileTemplate.setHideType("Bristly Hide") + mobileTemplate.setHideAmount(13) + mobileTemplate.setBoneType("Mammal Bones") + mobileTemplate.setBoneAmount(13) + mobileTemplate.setSocialGroup("tabage") + mobileTemplate.setAssistRange(10) + mobileTemplate.setStalker(True) + + templates = Vector() + templates.add('object/mobile/shared_tabage.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('tabage_scavenger', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/corellia/tomi_jinsin.py b/scripts/mobiles/corellia/tomi_jinsin.py new file mode 100644 index 00000000..756d0bee --- /dev/null +++ b/scripts/mobiles/corellia/tomi_jinsin.py @@ -0,0 +1,38 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('corellia_ragtag_tomi_jinsin') + mobileTemplate.setLevel(15) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(12) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(1) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("ragtag gang") + mobileTemplate.setAssistRange(4) + mobileTemplate.setStalker(True) + mobileTemplate.setOptionsBitmask(128) + + templates = Vector() + templates.add('object/mobile/shared_dressed_corellia_tomi_jinsin.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/carbine/shared_carbine_cdef.iff', 1, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedShot') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('tomi_jinsin', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/corellia/vehement_durni.py b/scripts/mobiles/corellia/vehement_durni.py new file mode 100644 index 00000000..bb46c2c4 --- /dev/null +++ b/scripts/mobiles/corellia/vehement_durni.py @@ -0,0 +1,43 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('durni_vehement_warrior') + mobileTemplate.setLevel(5) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setMeatType("Herbivore Meat") + mobileTemplate.setMeatAmount(5) + mobileTemplate.setHideType("Wooly Hide") + mobileTemplate.setHideAmount(3) + mobileTemplate.setBoneType("Mammal Bones") + mobileTemplate.setBoneAmount(2) + mobileTemplate.setSocialGroup("durni") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(False) + + templates = Vector() + templates.add('object/mobile/shared_durni.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('vehement_durni', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/corellia/vicious_slice_hound.py b/scripts/mobiles/corellia/vicious_slice_hound.py new file mode 100644 index 00000000..953a6e98 --- /dev/null +++ b/scripts/mobiles/corellia/vicious_slice_hound.py @@ -0,0 +1,43 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('slice_hound_vicious') + mobileTemplate.setLevel(7) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setMeatType("Carnivore Meat") + mobileTemplate.setMeatAmount(65) + mobileTemplate.setHideType("Bristly Hide") + mobileTemplate.setHideAmount(35) + mobileTemplate.setBoneType("Mammal Bones") + mobileTemplate.setBoneAmount(30) + mobileTemplate.setSocialGroup("slice hound") + mobileTemplate.setAssistRange(10) + mobileTemplate.setStalker(False) + + templates = Vector() + templates.add('object/mobile/shared_corellian_slice_hound.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('vicious_slice_hound', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/corellia/violent_krahbu.py b/scripts/mobiles/corellia/violent_krahbu.py new file mode 100644 index 00000000..14dae062 --- /dev/null +++ b/scripts/mobiles/corellia/violent_krahbu.py @@ -0,0 +1,43 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('violent_krahbu') + mobileTemplate.setLevel(25) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setMeatType("Herbivore Meat") + mobileTemplate.setMeatAmount(225) + mobileTemplate.setHideType("Bristly Hide") + mobileTemplate.setHideAmount(135) + mobileTemplate.setBoneType("Mammal Bones") + mobileTemplate.setBoneAmount(135) + mobileTemplate.setSocialGroup("violent krahbu") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(False) + + templates = Vector() + templates.add('object/mobile/shared_violent_krahbu.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('violent_krahbu', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/corellia/vrelt.py b/scripts/mobiles/corellia/vrelt.py new file mode 100644 index 00000000..5606c4ae --- /dev/null +++ b/scripts/mobiles/corellia/vrelt.py @@ -0,0 +1,43 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('vrelt') + mobileTemplate.setLevel(23) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setMeatType("Wild Meat") + mobileTemplate.setMeatAmount(4) + mobileTemplate.setHideType("Leathery Hide") + mobileTemplate.setHideAmount(3) + mobileTemplate.setBoneType("Mammal Bones") + mobileTemplate.setBoneAmount(2) + mobileTemplate.setSocialGroup("vrelt") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(False) + + templates = Vector() + templates.add('object/mobile/shared_vrelt.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('vrelt', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/corellia/vrelt_mother.py b/scripts/mobiles/corellia/vrelt_mother.py new file mode 100644 index 00000000..f4ae34c7 --- /dev/null +++ b/scripts/mobiles/corellia/vrelt_mother.py @@ -0,0 +1,43 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('startled_vrelt_mother') + mobileTemplate.setLevel(6) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setMeatType("Carnivore Meat") + mobileTemplate.setMeatAmount(13) + mobileTemplate.setHideType("Bristly Hide") + mobileTemplate.setHideAmount(13) + mobileTemplate.setBoneType("Mammal Bones") + mobileTemplate.setBoneAmount(13) + mobileTemplate.setSocialGroup("vrelt") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(False) + + templates = Vector() + templates.add('object/mobile/shared_vrelt.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('vrelt_mother', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/corellia/vynock.py b/scripts/mobiles/corellia/vynock.py new file mode 100644 index 00000000..7024de6a --- /dev/null +++ b/scripts/mobiles/corellia/vynock.py @@ -0,0 +1,43 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('vynock') + mobileTemplate.setLevel(28) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setMeatType("Herbivore Meat") + mobileTemplate.setMeatAmount(50) + mobileTemplate.setHideType("Bristly Hide") + mobileTemplate.setHideAmount(70) + mobileTemplate.setBoneType("Mammal Bones") + mobileTemplate.setBoneAmount(20) + mobileTemplate.setSocialGroup("vynock") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(False) + + templates = Vector() + templates.add('object/mobile/shared_vynock.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('vynock', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/corellia/war_gronda.py b/scripts/mobiles/corellia/war_gronda.py new file mode 100644 index 00000000..4f779a05 --- /dev/null +++ b/scripts/mobiles/corellia/war_gronda.py @@ -0,0 +1,43 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('war_gronda') + mobileTemplate.setLevel(32) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(True) + mobileTemplate.setScale(1) + mobileTemplate.setMeatType("Carnivore Meat") + mobileTemplate.setMeatAmount(390) + mobileTemplate.setHideType("Leathery Hide") + mobileTemplate.setHideAmount(300) + mobileTemplate.setBoneType("Mammal Bones") + mobileTemplate.setBoneAmount(240) + mobileTemplate.setSocialGroup("gronda") + mobileTemplate.setAssistRange(10) + mobileTemplate.setStalker(False) + + templates = Vector() + templates.add('object/mobile/shared_war_gronda.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('war_gronda', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/corellia/wooded_paralope.py b/scripts/mobiles/corellia/wooded_paralope.py new file mode 100644 index 00000000..9bb8e3ad --- /dev/null +++ b/scripts/mobiles/corellia/wooded_paralope.py @@ -0,0 +1,43 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('wooded_paralope') + mobileTemplate.setLevel(25) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setMeatType("Herbivore Meat") + mobileTemplate.setMeatAmount(5) + mobileTemplate.setHideType("Wooly Hide") + mobileTemplate.setHideAmount(3) + mobileTemplate.setBoneType("Mammal Bones") + mobileTemplate.setBoneAmount(2) + mobileTemplate.setSocialGroup("paralope") + mobileTemplate.setAssistRange(6) + mobileTemplate.setStalker(False) + + templates = Vector() + templates.add('object/mobile/shared_paralope.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('wooded_paralope', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/corellia/wrix.py b/scripts/mobiles/corellia/wrix.py new file mode 100644 index 00000000..d160d3f6 --- /dev/null +++ b/scripts/mobiles/corellia/wrix.py @@ -0,0 +1,44 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('wrix') + mobileTemplate.setLevel(27) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setMeatType("Carnivore Meat") + mobileTemplate.setMeatAmount(60) + mobileTemplate.setHideType("Bristly Hide") + mobileTemplate.setHideAmount(30) + mobileTemplate.setBoneType("Mammal Bones") + mobileTemplate.setBoneAmount(25) + mobileTemplate.setSocialGroup("wrix") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(False) + mobileTemplate.setOptionsBitmask(192) + + templates = Vector() + templates.add('object/mobile/shared_grand_wrix.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('wrix', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/dantooine/abandoned_rebel_private.py b/scripts/mobiles/dantooine/abandoned_rebel_private.py new file mode 100644 index 00000000..31149e62 --- /dev/null +++ b/scripts/mobiles/dantooine/abandoned_rebel_private.py @@ -0,0 +1,39 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('abandoned_rebel_private') + mobileTemplate.setLevel(61) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(24) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(0) + mobileTemplate.setMinSpawnDistance(3) + mobileTemplate.setMaxSpawnDistance(5) + mobileTemplate.setDeathblow(True) + mobileTemplate.setSocialGroup('rebel') + mobileTemplate.setAssistRange(1) + + + templates = Vector() + templates.add('object/mobile/shared_dressed_dark_jedi_male_human_01.iff') + + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/carbine/shared_carbine_dh17.iff', 0, 1.0) + weaponTemplates.add(weapontemplate) + weapontemplate = WeaponTemplate('object/weapon/ranged/rifle/shared_rifle_rebel.iff', 0, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedShot') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('abandoned_rebel_private', mobileTemplate) + \ No newline at end of file diff --git a/scripts/mobiles/dantooine/ancient_graul.py b/scripts/mobiles/dantooine/ancient_graul.py new file mode 100644 index 00000000..ad67d937 --- /dev/null +++ b/scripts/mobiles/dantooine/ancient_graul.py @@ -0,0 +1,43 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + mobileTemplate.setCreatureName('ancient_graul') + mobileTemplate.setLevel(74) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(5) + mobileTemplate.setMaxSpawnDistance(10) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setMeatType("Carnivore Meat") + mobileTemplate.setMeatAmount(950) + mobileTemplate.setHideType("Leathery Hide") + mobileTemplate.setBoneAmount(875) + mobileTemplate.setBoneType("Mammal Bone") + mobileTemplate.setHideAmount(775) + mobileTemplate.setSocialGroup("graul") + mobileTemplate.setAssistRange(12) + mobileTemplate.setStalker(False) + mobileTemplate.setOptionsBitmask(192) + + templates = Vector() + templates.add('object/mobile/shared_slinking_voritor_hunter.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('ancient_graul', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/dantooine/bile_drenched_quenker.py b/scripts/mobiles/dantooine/bile_drenched_quenker.py new file mode 100644 index 00000000..573db740 --- /dev/null +++ b/scripts/mobiles/dantooine/bile_drenched_quenker.py @@ -0,0 +1,43 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + mobileTemplate.setCreatureName('bile_drenched_quenker') + mobileTemplate.setLevel(63) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(5) + mobileTemplate.setMaxSpawnDistance(10) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setMeatType("Herbivore Meat") + mobileTemplate.setMeatAmount(0) + mobileTemplate.setHideType("Wooly Hide") + mobileTemplate.setBoneAmount(0) + mobileTemplate.setBoneType("Mammal Bone") + mobileTemplate.setHideAmount(0) + mobileTemplate.setSocialGroup("quenker") + mobileTemplate.setAssistRange(12) + mobileTemplate.setStalker(False) + mobileTemplate.setOptionsBitmask(192) + + templates = Vector() + templates.add('object/mobile/shared_quenker_relic_reaper.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('bile_drenched_quenker', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/dantooine/bol.py b/scripts/mobiles/dantooine/bol.py new file mode 100644 index 00000000..43a654b0 --- /dev/null +++ b/scripts/mobiles/dantooine/bol.py @@ -0,0 +1,42 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + mobileTemplate.setCreatureName('bol') + mobileTemplate.setLevel(60) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(5) + mobileTemplate.setMaxSpawnDistance(10) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setMeatType("Wild Meat") + mobileTemplate.setMeatAmount(0) + mobileTemplate.setHideType("Leathery Hide") + mobileTemplate.setBoneAmount(300) + mobileTemplate.setBoneType("Mammal Bone") + mobileTemplate.setHideAmount(180) + mobileTemplate.setSocialGroup("bol") + mobileTemplate.setAssistRange(12) + mobileTemplate.setStalker(False) + + templates = Vector() + templates.add('object/mobile/shared_bol_hue.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('bol', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/dantooine/bol_pack_runner.py b/scripts/mobiles/dantooine/bol_pack_runner.py new file mode 100644 index 00000000..bb131bb1 --- /dev/null +++ b/scripts/mobiles/dantooine/bol_pack_runner.py @@ -0,0 +1,42 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + mobileTemplate.setCreatureName('bol_pack_runner') + mobileTemplate.setLevel(60) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(5) + mobileTemplate.setMaxSpawnDistance(10) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setMeatType("Wild Meat") + mobileTemplate.setMeatAmount(0) + mobileTemplate.setHideType("Leathery Hide") + mobileTemplate.setBoneAmount(300) + mobileTemplate.setBoneType("Mammal Bone") + mobileTemplate.setHideAmount(180) + mobileTemplate.setSocialGroup("bol") + mobileTemplate.setAssistRange(12) + mobileTemplate.setStalker(False) + + templates = Vector() + templates.add('object/mobile/shared_bol_hue.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('bol_pack_runner', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/dantooine/dantari_chief.py b/scripts/mobiles/dantooine/dantari_chief.py new file mode 100644 index 00000000..d8625846 --- /dev/null +++ b/scripts/mobiles/dantooine/dantari_chief.py @@ -0,0 +1,37 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('dantari_chief') + mobileTemplate.setLevel(64) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(24) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(0) + mobileTemplate.setMinSpawnDistance(3) + mobileTemplate.setMaxSpawnDistance(5) + mobileTemplate.setDeathblow(True) + mobileTemplate.setSocialGroup('dantari raiders') + mobileTemplate.setAssistRange(1) + + + templates = Vector() + templates.add('object/mobile/shared_dantari_male.iff') + + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('dantari_chief', mobileTemplate) + \ No newline at end of file diff --git a/scripts/mobiles/dantooine/dantari_raider.py b/scripts/mobiles/dantooine/dantari_raider.py new file mode 100644 index 00000000..9a4b6be3 --- /dev/null +++ b/scripts/mobiles/dantooine/dantari_raider.py @@ -0,0 +1,37 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('dantari_raider') + mobileTemplate.setLevel(61) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(24) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(0) + mobileTemplate.setMinSpawnDistance(3) + mobileTemplate.setMaxSpawnDistance(5) + mobileTemplate.setDeathblow(True) + mobileTemplate.setSocialGroup('dantari raiders') + mobileTemplate.setAssistRange(12) + + + templates = Vector() + templates.add('object/mobile/shared_dantari_male.iff') + + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('dantari_raider', mobileTemplate) + \ No newline at end of file diff --git a/scripts/mobiles/dantooine/dantari_strategist.py b/scripts/mobiles/dantooine/dantari_strategist.py new file mode 100644 index 00000000..cd3e4afd --- /dev/null +++ b/scripts/mobiles/dantooine/dantari_strategist.py @@ -0,0 +1,37 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('dantari_strategist') + mobileTemplate.setLevel(62) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(24) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(0) + mobileTemplate.setMinSpawnDistance(3) + mobileTemplate.setMaxSpawnDistance(5) + mobileTemplate.setDeathblow(False) + mobileTemplate.setSocialGroup('dantari raiders') + mobileTemplate.setAssistRange(1) + + + templates = Vector() + templates.add('object/mobile/shared_dantari_male.iff') + + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('dantari_strategist', mobileTemplate) + \ No newline at end of file diff --git a/scripts/mobiles/dantooine/dark_adept.py b/scripts/mobiles/dantooine/dark_adept.py new file mode 100644 index 00000000..7598e097 --- /dev/null +++ b/scripts/mobiles/dantooine/dark_adept.py @@ -0,0 +1,44 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('dark_adept') + mobileTemplate.setLevel(70) + mobileTemplate.setMinLevel(60) + mobileTemplate.setMaxLevel(70) + mobileTemplate.setDifficulty(1) + mobileTemplate.setAttackRange(6) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(9) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(True) + mobileTemplate.setSocialGroup('dark jedi') + mobileTemplate.setAssistRange(12) + mobileTemplate.setRespawnTime(300) + mobileTemplate.setOptionsBitmask(192) + + + templates = Vector() + templates.add('object/mobile/shared_dressed_dark_jedi_elder_male_human_01.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/sword/crafted_saber/shared_sword_lightsaber_one_handed_gen5.iff', 9, 1.0) + weaponTemplates.add(weapontemplate) + weapontemplate = WeaponTemplate('object/weapon/melee/2h_sword/crafted_saber/shared_sword_lightsaber_two_handed_gen5.iff', 10, 1.0) + weaponTemplates.add(weapontemplate) + weapontemplate = WeaponTemplate('object/weapon/melee/polearm/crafted_saber/shared_sword_lightsaber_polearm_gen5.iff', 11, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('saberHit') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('dark_adept', mobileTemplate) + \ No newline at end of file diff --git a/scripts/mobiles/dantooine/dark_force_crystal_hunter.py b/scripts/mobiles/dantooine/dark_force_crystal_hunter.py new file mode 100644 index 00000000..60cbdde3 --- /dev/null +++ b/scripts/mobiles/dantooine/dark_force_crystal_hunter.py @@ -0,0 +1,37 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('dark_force_crystal_hunter') + mobileTemplate.setMinLevel(60) + mobileTemplate.setMaxLevel(69) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(6) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(4) + mobileTemplate.setMinSpawnDistance(2) + mobileTemplate.setMaxSpawnDistance(4) + mobileTemplate.setDeathblow(True) + mobileTemplate.setSocialGroup('remnants of kun') + mobileTemplate.setAssistRange(12) + mobileTemplate.setRespawnTime(300) + + templates = Vector() + templates.add('object/mobile/shared_dressed_dark_force_crystal_hunter.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/sword/shared_sword_01.iff', 4, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('meleehit') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('dark_force_crystal_hunter', mobileTemplate) + \ No newline at end of file diff --git a/scripts/mobiles/dantooine/dark_jedi_knight.py b/scripts/mobiles/dantooine/dark_jedi_knight.py new file mode 100644 index 00000000..b083645b --- /dev/null +++ b/scripts/mobiles/dantooine/dark_jedi_knight.py @@ -0,0 +1,66 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('dark_jedi_knight') + mobileTemplate.setLevel(90) + mobileTemplate.setMinLevel(62) + mobileTemplate.setMaxLevel(70) + mobileTemplate.setDifficulty(1) + mobileTemplate.setAttackRange(6) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(9) + mobileTemplate.setMinSpawnDistance(3) + mobileTemplate.setMaxSpawnDistance(5) + mobileTemplate.setDeathblow(True) + mobileTemplate.setSocialGroup('dark jedi') + mobileTemplate.setAssistRange(12) + mobileTemplate.setRespawnTime(300) + mobileTemplate.setOptionsBitmask(192) + + templates = Vector() + templates.add('object/mobile/shared_dressed_dark_jedi_male_human_01.iff') + templates.add('object/mobile/shared_dressed_dark_jedi_male_human_02.iff') + templates.add('object/mobile/shared_dressed_dark_jedi_male_human_03.iff') + templates.add('object/mobile/shared_dressed_dark_jedi_male_human_04.iff') + templates.add('object/mobile/shared_dressed_dark_jedi_male_human_05.iff') + templates.add('object/mobile/shared_dressed_dark_jedi_male_human_06.iff') + templates.add('object/mobile/shared_dressed_dark_jedi_male_twk_01.iff') + templates.add('object/mobile/shared_dressed_dark_jedi_male_twk_02.iff') + templates.add('object/mobile/shared_dressed_dark_jedi_male_twk_03.iff') + templates.add('object/mobile/shared_dressed_dark_jedi_male_zab_01.iff') + templates.add('object/mobile/shared_dressed_dark_jedi_male_zab_02.iff') + templates.add('object/mobile/shared_dressed_dark_jedi_male_zab_03.iff') + templates.add('object/mobile/shared_dressed_dark_jedi_female_human_01.iff') + templates.add('object/mobile/shared_dressed_dark_jedi_female_human_02.iff') + templates.add('object/mobile/shared_dressed_dark_jedi_female_human_03.iff') + templates.add('object/mobile/shared_dressed_dark_jedi_female_human_04.iff') + templates.add('object/mobile/shared_dressed_dark_jedi_female_twk_01.iff') + templates.add('object/mobile/shared_dressed_dark_jedi_female_twk_02.iff') + templates.add('object/mobile/shared_dressed_dark_jedi_female_twk_03.iff') + templates.add('object/mobile/shared_dressed_dark_jedi_female_zab_01.iff') + templates.add('object/mobile/shared_dressed_dark_jedi_female_zab_02.iff') + templates.add('object/mobile/shared_dressed_dark_jedi_female_zab_03.iff') + + + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/sword/crafted_saber/shared_sword_lightsaber_one_handed_gen5.iff', 9, 1.0) + weaponTemplates.add(weapontemplate) + weapontemplate = WeaponTemplate('object/weapon/melee/2h_sword/crafted_saber/shared_sword_lightsaber_two_handed_gen5.iff', 10, 1.0) + weaponTemplates.add(weapontemplate) + weapontemplate = WeaponTemplate('object/weapon/melee/polearm/crafted_saber/shared_sword_lightsaber_polearm_gen5.iff', 11, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('saberHit') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('dark_jedi_knight', mobileTemplate) + \ No newline at end of file diff --git a/scripts/mobiles/dantooine/dark_jedi_master.py b/scripts/mobiles/dantooine/dark_jedi_master.py new file mode 100644 index 00000000..29ca5598 --- /dev/null +++ b/scripts/mobiles/dantooine/dark_jedi_master.py @@ -0,0 +1,74 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('dark_jedi_master') + mobileTemplate.setLevel(90) + mobileTemplate.setDifficulty(2) + mobileTemplate.setAttackRange(6) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(9) + mobileTemplate.setMinSpawnDistance(3) + mobileTemplate.setMaxSpawnDistance(5) + mobileTemplate.setDeathblow(True) + mobileTemplate.setSocialGroup('dark jedi') + mobileTemplate.setAssistRange(12) + mobileTemplate.setRespawnTime(300) + mobileTemplate.setOptionsBitmask(192) + + templates = Vector() + templates.add('object/mobile/shared_dressed_dark_jedi_master_female_twk_01.iff') + templates.add('object/mobile/shared_dressed_dark_jedi_master_female_twk_02.iff') + templates.add('object/mobile/shared_dressed_dark_jedi_master_female_zab_01.iff') + templates.add('object/mobile/shared_dressed_dark_jedi_master_female_zab_02.iff') + templates.add('object/mobile/shared_dressed_dark_jedi_master_male_human_01.iff') + templates.add('object/mobile/shared_dressed_dark_jedi_master_male_human_04.iff') + templates.add('object/mobile/shared_dressed_dark_jedi_master_male_human_05.iff') + templates.add('object/mobile/shared_dressed_dark_jedi_master_male_human_06.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/sword/crafted_saber/shared_sword_lightsaber_one_handed_gen5.iff', 9, 1.0) + weaponTemplates.add(weapontemplate) + weapontemplate = WeaponTemplate('object/weapon/melee/2h_sword/crafted_saber/shared_sword_lightsaber_two_handed_gen5.iff', 10, 1.0) + weaponTemplates.add(weapontemplate) + weapontemplate = WeaponTemplate('object/weapon/melee/polearm/crafted_saber/shared_sword_lightsaber_polearm_gen5.iff', 11, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('saberHit') + mobileTemplate.setAttacks(attacks) + + + lootPoolNames_1 = ['Junk'] + lootPoolChances_1 = [100] + lootGroupChance_1 = 65 + mobileTemplate.addToLootGroups(lootPoolNames_1,lootPoolChances_1,lootGroupChance_1) + + lootPoolNames_2 = ['jedi_relic_1'] + lootPoolChances_2 = [100] + lootGroupChance_2 = 85 + mobileTemplate.addToLootGroups(lootPoolNames_2,lootPoolChances_2,lootGroupChance_2) + + lootPoolNames_3 = ['powercrystals_hiq'] + lootPoolChances_3 = [100] + lootGroupChance_3 = 12 + mobileTemplate.addToLootGroups(lootPoolNames_3,lootPoolChances_3,lootGroupChance_3) + + lootPoolNames_4 = ['random_stat_jewelry'] + lootPoolChances_4 = [100] + lootGroupChance_4 = 8 + mobileTemplate.addToLootGroups(lootPoolNames_4,lootPoolChances_4,lootGroupChance_4) + + lootPoolNames_5 = ['sithholocrons'] + lootPoolChances_5 = [100] + lootGroupChance_5 = 3 + mobileTemplate.addToLootGroups(lootPoolNames_5,lootPoolChances_5,lootGroupChance_5) + + core.spawnService.addMobileTemplate('dark_jedi_master', mobileTemplate) + \ No newline at end of file diff --git a/scripts/mobiles/dantooine/dark_side_savage.py b/scripts/mobiles/dantooine/dark_side_savage.py new file mode 100644 index 00000000..d7ffc78b --- /dev/null +++ b/scripts/mobiles/dantooine/dark_side_savage.py @@ -0,0 +1,35 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('eow_dark_side_savage') + mobileTemplate.setLevel(85) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(6) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(2) + mobileTemplate.setMaxSpawnDistance(4) + mobileTemplate.setDeathblow(False) + mobileTemplate.setSocialGroup('remnants of kun') + mobileTemplate.setRespawnTime(300) + + templates = Vector() + templates.add('object/mobile/shared_dressed_dark_side_savage.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('dark_side_savage', mobileTemplate) + \ No newline at end of file diff --git a/scripts/mobiles/dantooine/fierce_piket_protector.py b/scripts/mobiles/dantooine/fierce_piket_protector.py new file mode 100644 index 00000000..28bd6d9b --- /dev/null +++ b/scripts/mobiles/dantooine/fierce_piket_protector.py @@ -0,0 +1,42 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + mobileTemplate.setCreatureName('fierce_piket_protector') + mobileTemplate.setLevel(68) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(5) + mobileTemplate.setMaxSpawnDistance(10) + mobileTemplate.setDeathblow(True) + mobileTemplate.setScale(1) + mobileTemplate.setMeatType("Herbivore Meat") + mobileTemplate.setMeatAmount(0) + mobileTemplate.setHideType("Leathery Hide") + mobileTemplate.setBoneAmount(0) + mobileTemplate.setBoneType("Avian Bone") + mobileTemplate.setHideAmount(0) + mobileTemplate.setSocialGroup("piket") + mobileTemplate.setAssistRange(1) + mobileTemplate.setStalker(False) + + templates = Vector() + templates.add('object/mobile/shared_piket_longhorn.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('fierce_piket_protector', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/dantooine/force_sensitive_crypt_crawler.py b/scripts/mobiles/dantooine/force_sensitive_crypt_crawler.py new file mode 100644 index 00000000..2431c898 --- /dev/null +++ b/scripts/mobiles/dantooine/force_sensitive_crypt_crawler.py @@ -0,0 +1,36 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('eow_force_sensitive_crypt_crawler') + mobileTemplate.setMinLevel(60) + mobileTemplate.setMaxLevel(70) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(6) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(7) + mobileTemplate.setMinSpawnDistance(3) + mobileTemplate.setMaxSpawnDistance(5) + mobileTemplate.setDeathblow(False) + mobileTemplate.setSocialGroup('remnants of kun') + mobileTemplate.setRespawnTime(300) + + templates = Vector() + templates.add('object/mobile/shared_dressed_force_sensitive_crypt_crawler.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/polearm/shared_lance_staff_wood_s1.iff', 7, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('meleehit') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('force_sensitive_crypt_crawler', mobileTemplate) + \ No newline at end of file diff --git a/scripts/mobiles/dantooine/force_sensitive_renegade.py b/scripts/mobiles/dantooine/force_sensitive_renegade.py new file mode 100644 index 00000000..8005b9d9 --- /dev/null +++ b/scripts/mobiles/dantooine/force_sensitive_renegade.py @@ -0,0 +1,37 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('force_sensitive_renegade') + mobileTemplate.setMinLevel(61) + mobileTemplate.setMaxLevel(69) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(6) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(7) + mobileTemplate.setDeathblow(False) + mobileTemplate.setSocialGroup('force renegade') + mobileTemplate.setRespawnTime(300) + + + templates = Vector() + templates.add('object/mobile/shared_dressed_force_sensitive_renegade.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('force_sensitive_renegade', mobileTemplate) + \ No newline at end of file diff --git a/scripts/mobiles/dantooine/forsaken_force_drifter.py b/scripts/mobiles/dantooine/forsaken_force_drifter.py new file mode 100644 index 00000000..46021c2c --- /dev/null +++ b/scripts/mobiles/dantooine/forsaken_force_drifter.py @@ -0,0 +1,35 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('eow_forsaken_force_drifter') + mobileTemplate.setLevel(74) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(6) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(3) + mobileTemplate.setMaxSpawnDistance(6) + mobileTemplate.setDeathblow(False) + mobileTemplate.setSocialGroup('force renegade') + mobileTemplate.setRespawnTime(300) + + templates = Vector() + templates.add('object/mobile/shared_dressed_forsaken_force_drifter.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('forsaken_force_drifter', mobileTemplate) + \ No newline at end of file diff --git a/scripts/mobiles/dantooine/frenzied_graul.py b/scripts/mobiles/dantooine/frenzied_graul.py new file mode 100644 index 00000000..6136f813 --- /dev/null +++ b/scripts/mobiles/dantooine/frenzied_graul.py @@ -0,0 +1,43 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + mobileTemplate.setCreatureName('frenzied_graul') + mobileTemplate.setLevel(72) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(5) + mobileTemplate.setMaxSpawnDistance(10) + mobileTemplate.setDeathblow(True) + mobileTemplate.setScale(1) + mobileTemplate.setMeatType("Carnivore Meat") + mobileTemplate.setMeatAmount(1025) + mobileTemplate.setHideType("Leathery Hide") + mobileTemplate.setBoneAmount(950) + mobileTemplate.setBoneType("Mammal Bone") + mobileTemplate.setHideAmount(855) + mobileTemplate.setSocialGroup("graul") + mobileTemplate.setAssistRange(12) + mobileTemplate.setStalker(False) + mobileTemplate.setOptionsBitmask(192) + + templates = Vector() + templates.add('object/mobile/shared_slinking_voritor_hunter.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('frenzied_graul', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/dantooine/grassland_voritor_tracker.py b/scripts/mobiles/dantooine/grassland_voritor_tracker.py new file mode 100644 index 00000000..ead1fdf3 --- /dev/null +++ b/scripts/mobiles/dantooine/grassland_voritor_tracker.py @@ -0,0 +1,43 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + mobileTemplate.setCreatureName('grassland_voritor_tracker') + mobileTemplate.setLevel(69) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(5) + mobileTemplate.setMaxSpawnDistance(10) + mobileTemplate.setDeathblow(True) + mobileTemplate.setScale(1) + mobileTemplate.setMeatType("Carnivore Meat") + mobileTemplate.setMeatAmount(45) + mobileTemplate.setHideType("Leathery Hide") + mobileTemplate.setBoneAmount(35) + mobileTemplate.setBoneType("Avian Bone") + mobileTemplate.setHideAmount(40) + mobileTemplate.setSocialGroup("voritor lizard") + mobileTemplate.setAssistRange(12) + mobileTemplate.setStalker(True) + mobileTemplate.setOptionsBitmask(192) + + templates = Vector() + templates.add('object/mobile/shared_grassland_voritor_tracker.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('grassland_voritor_tracker', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/dantooine/graul.py b/scripts/mobiles/dantooine/graul.py new file mode 100644 index 00000000..6376c849 --- /dev/null +++ b/scripts/mobiles/dantooine/graul.py @@ -0,0 +1,43 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + mobileTemplate.setCreatureName('graul') + mobileTemplate.setLevel(73) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(5) + mobileTemplate.setMaxSpawnDistance(10) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setMeatType("Carnivore Meat") + mobileTemplate.setMeatAmount(950) + mobileTemplate.setHideType("Leathery Hide") + mobileTemplate.setBoneAmount(875) + mobileTemplate.setBoneType("Mammal Bone") + mobileTemplate.setHideAmount(775) + mobileTemplate.setSocialGroup("graul") + mobileTemplate.setAssistRange(12) + mobileTemplate.setStalker(False) + mobileTemplate.setOptionsBitmask(192) + + templates = Vector() + templates.add('object/mobile/shared_graul.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('graul', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/dantooine/graul_mangler.py b/scripts/mobiles/dantooine/graul_mangler.py new file mode 100644 index 00000000..03cb6e5f --- /dev/null +++ b/scripts/mobiles/dantooine/graul_mangler.py @@ -0,0 +1,43 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + mobileTemplate.setCreatureName('graul_mangler') + mobileTemplate.setLevel(70) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(5) + mobileTemplate.setMaxSpawnDistance(10) + mobileTemplate.setDeathblow(True) + mobileTemplate.setScale(1) + mobileTemplate.setMeatType("Carnivore Meat") + mobileTemplate.setMeatAmount(950) + mobileTemplate.setHideType("Leathery Hide") + mobileTemplate.setBoneAmount(875) + mobileTemplate.setBoneType("Mammal Bone") + mobileTemplate.setHideAmount(775) + mobileTemplate.setSocialGroup("graul") + mobileTemplate.setAssistRange(12) + mobileTemplate.setStalker(False) + mobileTemplate.setOptionsBitmask(192) + + templates = Vector() + templates.add('object/mobile/shared_graul.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('graul_mangler', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/dantooine/graul_marauder.py b/scripts/mobiles/dantooine/graul_marauder.py new file mode 100644 index 00000000..a3abb435 --- /dev/null +++ b/scripts/mobiles/dantooine/graul_marauder.py @@ -0,0 +1,43 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + mobileTemplate.setCreatureName('graul_marauder') + mobileTemplate.setLevel(73) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(5) + mobileTemplate.setMaxSpawnDistance(10) + mobileTemplate.setDeathblow(True) + mobileTemplate.setScale(1) + mobileTemplate.setMeatType("Carnivore Meat") + mobileTemplate.setMeatAmount(950) + mobileTemplate.setHideType("Leathery Hide") + mobileTemplate.setBoneAmount(875) + mobileTemplate.setBoneType("Mammal Bone") + mobileTemplate.setHideAmount(775) + mobileTemplate.setSocialGroup("graul") + mobileTemplate.setAssistRange(12) + mobileTemplate.setStalker(False) + mobileTemplate.setOptionsBitmask(192) + + templates = Vector() + templates.add('object/mobile/shared_graul.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('graul_marauder', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/dantooine/graul_mauler.py b/scripts/mobiles/dantooine/graul_mauler.py new file mode 100644 index 00000000..a7a221bf --- /dev/null +++ b/scripts/mobiles/dantooine/graul_mauler.py @@ -0,0 +1,43 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + mobileTemplate.setCreatureName('graul_mauler') + mobileTemplate.setLevel(75) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(5) + mobileTemplate.setMaxSpawnDistance(10) + mobileTemplate.setDeathblow(True) + mobileTemplate.setScale(1) + mobileTemplate.setMeatType("Carnivore Meat") + mobileTemplate.setMeatAmount(950) + mobileTemplate.setHideType("Leathery Hide") + mobileTemplate.setBoneAmount(875) + mobileTemplate.setBoneType("Mammal Bone") + mobileTemplate.setHideAmount(775) + mobileTemplate.setSocialGroup("graul") + mobileTemplate.setAssistRange(12) + mobileTemplate.setStalker(False) + mobileTemplate.setOptionsBitmask(192) + + templates = Vector() + templates.add('object/mobile/shared_graul.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('graul_mauler', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/dantooine/horned_voritor_jungle_lizard.py b/scripts/mobiles/dantooine/horned_voritor_jungle_lizard.py new file mode 100644 index 00000000..1c54312e --- /dev/null +++ b/scripts/mobiles/dantooine/horned_voritor_jungle_lizard.py @@ -0,0 +1,43 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + mobileTemplate.setCreatureName('horned_voritor_jungle_lizard') + mobileTemplate.setLevel(73) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(5) + mobileTemplate.setMaxSpawnDistance(10) + mobileTemplate.setDeathblow(True) + mobileTemplate.setScale(1) + mobileTemplate.setMeatType("Carnivore Meat") + mobileTemplate.setMeatAmount(65) + mobileTemplate.setHideType("Leathery Hide") + mobileTemplate.setBoneAmount(40) + mobileTemplate.setBoneType("Avian Bone") + mobileTemplate.setHideAmount(50) + mobileTemplate.setSocialGroup("voritor lizard") + mobileTemplate.setAssistRange(12) + mobileTemplate.setStalker(True) + mobileTemplate.setOptionsBitmask(192) + + templates = Vector() + templates.add('object/mobile/shared_voritor_lizard.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('horned_voritor_jungle_lizard', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/dantooine/hostile_thune_mother.py b/scripts/mobiles/dantooine/hostile_thune_mother.py new file mode 100644 index 00000000..91953e60 --- /dev/null +++ b/scripts/mobiles/dantooine/hostile_thune_mother.py @@ -0,0 +1,43 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + mobileTemplate.setCreatureName('hostile_thune_mother') + mobileTemplate.setLevel(69) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(5) + mobileTemplate.setMaxSpawnDistance(10) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setMeatType("Herbivore Meat") + mobileTemplate.setMeatAmount(135) + mobileTemplate.setHideType("Wooly Hide") + mobileTemplate.setBoneAmount(150) + mobileTemplate.setBoneType("Mammal Bone") + mobileTemplate.setHideAmount(0) + mobileTemplate.setSocialGroup("thune") + mobileTemplate.setAssistRange(12) + mobileTemplate.setStalker(False) + mobileTemplate.setOptionsBitmask(192) + + templates = Vector() + templates.add('object/mobile/shared_thune.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('hostile_thune_mother', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/dantooine/huurton.py b/scripts/mobiles/dantooine/huurton.py new file mode 100644 index 00000000..ffecdd01 --- /dev/null +++ b/scripts/mobiles/dantooine/huurton.py @@ -0,0 +1,43 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + mobileTemplate.setCreatureName('huurton') + mobileTemplate.setLevel(60) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(5) + mobileTemplate.setMaxSpawnDistance(10) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setMeatType("Wild Meat") + mobileTemplate.setMeatAmount(15) + mobileTemplate.setHideType("Leathery Hide") + mobileTemplate.setBoneAmount(10) + mobileTemplate.setBoneType("Mammal Bone") + mobileTemplate.setHideAmount(15) + mobileTemplate.setSocialGroup("huurton") + mobileTemplate.setAssistRange(12) + mobileTemplate.setStalker(False) + mobileTemplate.setOptionsBitmask(192) + + templates = Vector() + templates.add('object/mobile/shared_huurton.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('huurton', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/dantooine/huurton_bloodhunter.py b/scripts/mobiles/dantooine/huurton_bloodhunter.py new file mode 100644 index 00000000..b475e391 --- /dev/null +++ b/scripts/mobiles/dantooine/huurton_bloodhunter.py @@ -0,0 +1,43 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + mobileTemplate.setCreatureName('huurton_bloodhunter') + mobileTemplate.setLevel(64) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(5) + mobileTemplate.setMaxSpawnDistance(10) + mobileTemplate.setDeathblow(True) + mobileTemplate.setScale(1) + mobileTemplate.setMeatType("Wild Meat") + mobileTemplate.setMeatAmount(15) + mobileTemplate.setHideType("Leathery Hide") + mobileTemplate.setBoneAmount(10) + mobileTemplate.setBoneType("Mammal Bone") + mobileTemplate.setHideAmount(15) + mobileTemplate.setSocialGroup("huurton") + mobileTemplate.setAssistRange(12) + mobileTemplate.setStalker(False) + mobileTemplate.setOptionsBitmask(192) + + templates = Vector() + templates.add('object/mobile/shared_huurton.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('huurton_bloodhunter', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/dantooine/huurton_howler.py b/scripts/mobiles/dantooine/huurton_howler.py new file mode 100644 index 00000000..298d084c --- /dev/null +++ b/scripts/mobiles/dantooine/huurton_howler.py @@ -0,0 +1,43 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + mobileTemplate.setCreatureName('huurton_howler') + mobileTemplate.setLevel(65) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(5) + mobileTemplate.setMaxSpawnDistance(10) + mobileTemplate.setDeathblow(True) + mobileTemplate.setScale(1) + mobileTemplate.setMeatType("Wild Meat") + mobileTemplate.setMeatAmount(15) + mobileTemplate.setHideType("Leathery Hide") + mobileTemplate.setBoneAmount(10) + mobileTemplate.setBoneType("Mammal Bone") + mobileTemplate.setHideAmount(15) + mobileTemplate.setSocialGroup("huurton") + mobileTemplate.setAssistRange(12) + mobileTemplate.setStalker(False) + mobileTemplate.setOptionsBitmask(192) + + templates = Vector() + templates.add('object/mobile/shared_huurton.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('huurton_howler', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/dantooine/huurton_huntress.py b/scripts/mobiles/dantooine/huurton_huntress.py new file mode 100644 index 00000000..9e100764 --- /dev/null +++ b/scripts/mobiles/dantooine/huurton_huntress.py @@ -0,0 +1,44 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + mobileTemplate.setCreatureName('huurton_huntress') + mobileTemplate.setLevel(62) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(5) + mobileTemplate.setMaxSpawnDistance(10) + mobileTemplate.setDeathblow(True) + mobileTemplate.setScale(1) + mobileTemplate.setMeatType("Wild Meat") + mobileTemplate.setMeatAmount(15) + mobileTemplate.setHideType("Leathery Hide") + mobileTemplate.setBoneAmount(10) + mobileTemplate.setBoneType("Mammal Bone") + mobileTemplate.setHideAmount(15) + mobileTemplate.setSocialGroup("huurton") + mobileTemplate.setAssistRange(12) + mobileTemplate.setStalker(True) + mobileTemplate.setOptionsBitmask(192) + + + templates = Vector() + templates.add('object/mobile/shared_huurton.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('huurton_huntress', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/dantooine/huurton_matron.py b/scripts/mobiles/dantooine/huurton_matron.py new file mode 100644 index 00000000..7a4e8537 --- /dev/null +++ b/scripts/mobiles/dantooine/huurton_matron.py @@ -0,0 +1,43 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + mobileTemplate.setCreatureName('huurton_matron') + mobileTemplate.setLevel(61) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(5) + mobileTemplate.setMaxSpawnDistance(10) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setMeatType("Wild Meat") + mobileTemplate.setMeatAmount(15) + mobileTemplate.setHideType("Leathery Hide") + mobileTemplate.setBoneAmount(10) + mobileTemplate.setBoneType("Mammal Bone") + mobileTemplate.setHideAmount(15) + mobileTemplate.setSocialGroup("huurton") + mobileTemplate.setAssistRange(12) + mobileTemplate.setStalker(False) + mobileTemplate.setOptionsBitmask(192) + + templates = Vector() + templates.add('object/mobile/shared_huurton.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('huurton_matron', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/dantooine/huurton_pub.py b/scripts/mobiles/dantooine/huurton_pub.py new file mode 100644 index 00000000..d1d57c75 --- /dev/null +++ b/scripts/mobiles/dantooine/huurton_pub.py @@ -0,0 +1,43 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + mobileTemplate.setCreatureName('huurton_pub') + mobileTemplate.setLevel(60) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(5) + mobileTemplate.setMaxSpawnDistance(10) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setMeatType("Wild Meat") + mobileTemplate.setMeatAmount(10) + mobileTemplate.setHideType("Leathery Hide") + mobileTemplate.setBoneAmount(5) + mobileTemplate.setBoneType("Mammal Bone") + mobileTemplate.setHideAmount(5) + mobileTemplate.setSocialGroup("huurton") + mobileTemplate.setAssistRange(12) + mobileTemplate.setStalker(True) + mobileTemplate.setOptionsBitmask(192) + + templates = Vector() + templates.add('object/mobile/shared_huurton_pup.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('huurton_pub', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/dantooine/huurton_reaper.py b/scripts/mobiles/dantooine/huurton_reaper.py new file mode 100644 index 00000000..244538f7 --- /dev/null +++ b/scripts/mobiles/dantooine/huurton_reaper.py @@ -0,0 +1,43 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + mobileTemplate.setCreatureName('huurton_reaper') + mobileTemplate.setLevel(65) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(5) + mobileTemplate.setMaxSpawnDistance(10) + mobileTemplate.setDeathblow(True) + mobileTemplate.setScale(1) + mobileTemplate.setMeatType("Wild Meat") + mobileTemplate.setMeatAmount(25) + mobileTemplate.setHideType("Leathery Hide") + mobileTemplate.setBoneAmount(10) + mobileTemplate.setBoneType("Mammal Bone") + mobileTemplate.setHideAmount(25) + mobileTemplate.setSocialGroup("huurton") + mobileTemplate.setAssistRange(12) + mobileTemplate.setStalker(True) + mobileTemplate.setOptionsBitmask(192) + + templates = Vector() + templates.add('object/mobile/shared_huurton.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('huurton_reaper', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/dantooine/huurton_stalker.py b/scripts/mobiles/dantooine/huurton_stalker.py new file mode 100644 index 00000000..381d1716 --- /dev/null +++ b/scripts/mobiles/dantooine/huurton_stalker.py @@ -0,0 +1,43 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + mobileTemplate.setCreatureName('huurton_stalker') + mobileTemplate.setLevel(60) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(5) + mobileTemplate.setMaxSpawnDistance(10) + mobileTemplate.setDeathblow(True) + mobileTemplate.setScale(1) + mobileTemplate.setMeatType("Wild Meat") + mobileTemplate.setMeatAmount(15) + mobileTemplate.setHideType("Leathery Hide") + mobileTemplate.setBoneAmount(10) + mobileTemplate.setBoneType("Mammal Bone") + mobileTemplate.setHideAmount(15) + mobileTemplate.setSocialGroup("huurton") + mobileTemplate.setAssistRange(12) + mobileTemplate.setStalker(False) + mobileTemplate.setOptionsBitmask(192) + + templates = Vector() + templates.add('object/mobile/shared_huurton.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('huurton_stalker', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/dantooine/infant_graul.py b/scripts/mobiles/dantooine/infant_graul.py new file mode 100644 index 00000000..c38fc121 --- /dev/null +++ b/scripts/mobiles/dantooine/infant_graul.py @@ -0,0 +1,43 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + mobileTemplate.setCreatureName('infant_graul') + mobileTemplate.setLevel(68) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(5) + mobileTemplate.setMaxSpawnDistance(10) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setMeatType("Carnivore Meat") + mobileTemplate.setMeatAmount(700) + mobileTemplate.setHideType("Leathery Hide") + mobileTemplate.setBoneAmount(750) + mobileTemplate.setBoneType("Mammal Bone") + mobileTemplate.setHideAmount(650) + mobileTemplate.setSocialGroup("graul") + mobileTemplate.setAssistRange(12) + mobileTemplate.setStalker(False) + mobileTemplate.setOptionsBitmask(192) + + templates = Vector() + templates.add('object/mobile/shared_infant_graul.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('infant_graul', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/dantooine/janta_clan_leader.py b/scripts/mobiles/dantooine/janta_clan_leader.py new file mode 100644 index 00000000..0fcd13a9 --- /dev/null +++ b/scripts/mobiles/dantooine/janta_clan_leader.py @@ -0,0 +1,49 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('janta_clan_leader') + mobileTemplate.setLevel(74) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(24) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(4) + mobileTemplate.setMinSpawnDistance(3) + mobileTemplate.setMaxSpawnDistance(5) + mobileTemplate.setDeathblow(False) + mobileTemplate.setSocialGroup('janta tribe') + mobileTemplate.setAssistRange(1) + + + templates = Vector() + templates.add('object/mobile/shared_dantari_male.iff') + + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/knife/shared_knife_janta.iff', 4, 1.0) + weaponTemplates.add(weapontemplate) + weapontemplate = WeaponTemplate('object/weapon/melee/polearm/shared_lance_staff_janta.iff', 7, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('meleehit') + mobileTemplate.setAttacks(attacks) + + lootPoolNames_1 = ['Junk'] + lootPoolChances_1 = [100] + lootGroupChance_1 = 65 + mobileTemplate.addToLootGroups(lootPoolNames_1,lootPoolChances_1,lootGroupChance_1) + + lootPoolNames_2 = ['random_loot_primitives'] + lootPoolChances_2 = [100] + lootGroupChance_2 = 35 + mobileTemplate.addToLootGroups(lootPoolNames_2,lootPoolChances_2,lootGroupChance_2) + + core.spawnService.addMobileTemplate('janta_clan_leader', mobileTemplate) + \ No newline at end of file diff --git a/scripts/mobiles/dantooine/janta_harvester.py b/scripts/mobiles/dantooine/janta_harvester.py new file mode 100644 index 00000000..37774060 --- /dev/null +++ b/scripts/mobiles/dantooine/janta_harvester.py @@ -0,0 +1,49 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('janta_harvester') + mobileTemplate.setLevel(74) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(24) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(4) + mobileTemplate.setMinSpawnDistance(3) + mobileTemplate.setMaxSpawnDistance(5) + mobileTemplate.setDeathblow(True) + mobileTemplate.setSocialGroup('janta tribe') + mobileTemplate.setAssistRange(12) + + + templates = Vector() + templates.add('object/mobile/shared_dantari_male.iff') + + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/knife/shared_knife_janta.iff', 4, 1.0) + weaponTemplates.add(weapontemplate) + weapontemplate = WeaponTemplate('object/weapon/melee/polearm/shared_lance_staff_janta.iff', 7, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('meleehit') + mobileTemplate.setAttacks(attacks) + + lootPoolNames_1 = ['Junk'] + lootPoolChances_1 = [100] + lootGroupChance_1 = 65 + mobileTemplate.addToLootGroups(lootPoolNames_1,lootPoolChances_1,lootGroupChance_1) + + lootPoolNames_2 = ['random_loot_primitives'] + lootPoolChances_2 = [100] + lootGroupChance_2 = 35 + mobileTemplate.addToLootGroups(lootPoolNames_2,lootPoolChances_2,lootGroupChance_2) + + core.spawnService.addMobileTemplate('janta_harvester', mobileTemplate) + \ No newline at end of file diff --git a/scripts/mobiles/dantooine/janta_herbalist.py b/scripts/mobiles/dantooine/janta_herbalist.py new file mode 100644 index 00000000..389e2a19 --- /dev/null +++ b/scripts/mobiles/dantooine/janta_herbalist.py @@ -0,0 +1,49 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('janta_herbalist') + mobileTemplate.setLevel(74) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(24) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(4) + mobileTemplate.setMinSpawnDistance(3) + mobileTemplate.setMaxSpawnDistance(5) + mobileTemplate.setDeathblow(True) + mobileTemplate.setSocialGroup('janta tribe') + mobileTemplate.setAssistRange(12) + + + templates = Vector() + templates.add('object/mobile/shared_dantari_male.iff') + + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/knife/shared_knife_janta.iff', 4, 1.0) + weaponTemplates.add(weapontemplate) + weapontemplate = WeaponTemplate('object/weapon/melee/polearm/shared_lance_staff_janta.iff', 7, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('meleehit') + mobileTemplate.setAttacks(attacks) + + lootPoolNames_1 = ['Junk'] + lootPoolChances_1 = [100] + lootGroupChance_1 = 65 + mobileTemplate.addToLootGroups(lootPoolNames_1,lootPoolChances_1,lootGroupChance_1) + + lootPoolNames_2 = ['random_loot_primitives'] + lootPoolChances_2 = [100] + lootGroupChance_2 = 35 + mobileTemplate.addToLootGroups(lootPoolNames_2,lootPoolChances_2,lootGroupChance_2) + + core.spawnService.addMobileTemplate('janta_herbalist', mobileTemplate) + \ No newline at end of file diff --git a/scripts/mobiles/dantooine/janta_hunter.py b/scripts/mobiles/dantooine/janta_hunter.py new file mode 100644 index 00000000..615824ff --- /dev/null +++ b/scripts/mobiles/dantooine/janta_hunter.py @@ -0,0 +1,49 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('janta_hunter') + mobileTemplate.setLevel(76) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(24) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(4) + mobileTemplate.setMinSpawnDistance(3) + mobileTemplate.setMaxSpawnDistance(5) + mobileTemplate.setDeathblow(True) + mobileTemplate.setSocialGroup('janta tribe') + mobileTemplate.setAssistRange(12) + + + templates = Vector() + templates.add('object/mobile/shared_dantari_male.iff') + + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/knife/shared_knife_janta.iff', 4, 1.0) + weaponTemplates.add(weapontemplate) + weapontemplate = WeaponTemplate('object/weapon/melee/polearm/shared_lance_staff_janta.iff', 7, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('meleehit') + mobileTemplate.setAttacks(attacks) + + lootPoolNames_1 = ['Junk'] + lootPoolChances_1 = [100] + lootGroupChance_1 = 65 + mobileTemplate.addToLootGroups(lootPoolNames_1,lootPoolChances_1,lootGroupChance_1) + + lootPoolNames_2 = ['random_loot_primitives'] + lootPoolChances_2 = [100] + lootGroupChance_2 = 35 + mobileTemplate.addToLootGroups(lootPoolNames_2,lootPoolChances_2,lootGroupChance_2) + + core.spawnService.addMobileTemplate('janta_hunter', mobileTemplate) + \ No newline at end of file diff --git a/scripts/mobiles/dantooine/janta_loreweaver.py b/scripts/mobiles/dantooine/janta_loreweaver.py new file mode 100644 index 00000000..978e8d6a --- /dev/null +++ b/scripts/mobiles/dantooine/janta_loreweaver.py @@ -0,0 +1,49 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('janta_loreweaver') + mobileTemplate.setLevel(74) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(24) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(4) + mobileTemplate.setMinSpawnDistance(3) + mobileTemplate.setMaxSpawnDistance(5) + mobileTemplate.setDeathblow(True) + mobileTemplate.setSocialGroup('janta tribe') + mobileTemplate.setAssistRange(12) + + + templates = Vector() + templates.add('object/mobile/shared_dantari_male.iff') + + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/knife/shared_knife_janta.iff', 4, 1.0) + weaponTemplates.add(weapontemplate) + weapontemplate = WeaponTemplate('object/weapon/melee/polearm/shared_lance_staff_janta.iff', 7, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('meleehit') + mobileTemplate.setAttacks(attacks) + + lootPoolNames_1 = ['Junk'] + lootPoolChances_1 = [100] + lootGroupChance_1 = 65 + mobileTemplate.addToLootGroups(lootPoolNames_1,lootPoolChances_1,lootGroupChance_1) + + lootPoolNames_2 = ['random_loot_primitives'] + lootPoolChances_2 = [100] + lootGroupChance_2 = 35 + mobileTemplate.addToLootGroups(lootPoolNames_2,lootPoolChances_2,lootGroupChance_2) + + core.spawnService.addMobileTemplate('janta_loreweaver', mobileTemplate) + \ No newline at end of file diff --git a/scripts/mobiles/dantooine/janta_primalist.py b/scripts/mobiles/dantooine/janta_primalist.py new file mode 100644 index 00000000..5fd402ca --- /dev/null +++ b/scripts/mobiles/dantooine/janta_primalist.py @@ -0,0 +1,49 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('janta_primalist') + mobileTemplate.setLevel(75) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(24) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(4) + mobileTemplate.setMinSpawnDistance(3) + mobileTemplate.setMaxSpawnDistance(5) + mobileTemplate.setDeathblow(True) + mobileTemplate.setSocialGroup('janta tribe') + mobileTemplate.setAssistRange(12) + + + templates = Vector() + templates.add('object/mobile/shared_dantari_male.iff') + + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/knife/shared_knife_janta.iff', 4, 1.0) + weaponTemplates.add(weapontemplate) + weapontemplate = WeaponTemplate('object/weapon/melee/polearm/shared_lance_staff_janta.iff', 7, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('meleehit') + mobileTemplate.setAttacks(attacks) + + lootPoolNames_1 = ['Junk'] + lootPoolChances_1 = [100] + lootGroupChance_1 = 65 + mobileTemplate.addToLootGroups(lootPoolNames_1,lootPoolChances_1,lootGroupChance_1) + + lootPoolNames_2 = ['random_loot_primitives'] + lootPoolChances_2 = [100] + lootGroupChance_2 = 35 + mobileTemplate.addToLootGroups(lootPoolNames_2,lootPoolChances_2,lootGroupChance_2) + + core.spawnService.addMobileTemplate('janta_primalist', mobileTemplate) + \ No newline at end of file diff --git a/scripts/mobiles/dantooine/janta_rockshaper.py b/scripts/mobiles/dantooine/janta_rockshaper.py new file mode 100644 index 00000000..7693c555 --- /dev/null +++ b/scripts/mobiles/dantooine/janta_rockshaper.py @@ -0,0 +1,49 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('janta_rockshaper') + mobileTemplate.setLevel(76) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(24) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(4) + mobileTemplate.setMinSpawnDistance(3) + mobileTemplate.setMaxSpawnDistance(5) + mobileTemplate.setDeathblow(True) + mobileTemplate.setSocialGroup('janta tribe') + mobileTemplate.setAssistRange(12) + + + templates = Vector() + templates.add('object/mobile/shared_dantari_male.iff') + + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/knife/shared_knife_janta.iff', 4, 1.0) + weaponTemplates.add(weapontemplate) + weapontemplate = WeaponTemplate('object/weapon/melee/polearm/shared_lance_staff_janta.iff', 7, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('meleehit') + mobileTemplate.setAttacks(attacks) + + lootPoolNames_1 = ['Junk'] + lootPoolChances_1 = [100] + lootGroupChance_1 = 65 + mobileTemplate.addToLootGroups(lootPoolNames_1,lootPoolChances_1,lootGroupChance_1) + + lootPoolNames_2 = ['random_loot_primitives'] + lootPoolChances_2 = [100] + lootGroupChance_2 = 35 + mobileTemplate.addToLootGroups(lootPoolNames_2,lootPoolChances_2,lootGroupChance_2) + + core.spawnService.addMobileTemplate('janta_rockshaper', mobileTemplate) + \ No newline at end of file diff --git a/scripts/mobiles/dantooine/janta_scout.py b/scripts/mobiles/dantooine/janta_scout.py new file mode 100644 index 00000000..dc58aa98 --- /dev/null +++ b/scripts/mobiles/dantooine/janta_scout.py @@ -0,0 +1,49 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('janta_scout') + mobileTemplate.setLevel(75) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(24) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(4) + mobileTemplate.setMinSpawnDistance(3) + mobileTemplate.setMaxSpawnDistance(5) + mobileTemplate.setDeathblow(True) + mobileTemplate.setSocialGroup('janta tribe') + mobileTemplate.setAssistRange(12) + + + templates = Vector() + templates.add('object/mobile/shared_dantari_male.iff') + + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/knife/shared_knife_janta.iff', 4, 1.0) + weaponTemplates.add(weapontemplate) + weapontemplate = WeaponTemplate('object/weapon/melee/polearm/shared_lance_staff_janta.iff', 7, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('meleehit') + mobileTemplate.setAttacks(attacks) + + lootPoolNames_1 = ['Junk'] + lootPoolChances_1 = [100] + lootGroupChance_1 = 65 + mobileTemplate.addToLootGroups(lootPoolNames_1,lootPoolChances_1,lootGroupChance_1) + + lootPoolNames_2 = ['random_loot_primitives'] + lootPoolChances_2 = [100] + lootGroupChance_2 = 35 + mobileTemplate.addToLootGroups(lootPoolNames_2,lootPoolChances_2,lootGroupChance_2) + + core.spawnService.addMobileTemplate('janta_scout', mobileTemplate) + \ No newline at end of file diff --git a/scripts/mobiles/dantooine/janta_shaman.py b/scripts/mobiles/dantooine/janta_shaman.py new file mode 100644 index 00000000..f7479a02 --- /dev/null +++ b/scripts/mobiles/dantooine/janta_shaman.py @@ -0,0 +1,49 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('janta_shaman') + mobileTemplate.setLevel(76) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(24) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(4) + mobileTemplate.setMinSpawnDistance(3) + mobileTemplate.setMaxSpawnDistance(5) + mobileTemplate.setDeathblow(True) + mobileTemplate.setSocialGroup('janta tribe') + mobileTemplate.setAssistRange(12) + + + templates = Vector() + templates.add('object/mobile/shared_dantari_male.iff') + + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/knife/shared_knife_janta.iff', 4, 1.0) + weaponTemplates.add(weapontemplate) + weapontemplate = WeaponTemplate('object/weapon/melee/polearm/shared_lance_staff_janta.iff', 7, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('meleehit') + mobileTemplate.setAttacks(attacks) + + lootPoolNames_1 = ['Junk'] + lootPoolChances_1 = [100] + lootGroupChance_1 = 65 + mobileTemplate.addToLootGroups(lootPoolNames_1,lootPoolChances_1,lootGroupChance_1) + + lootPoolNames_2 = ['random_loot_primitives'] + lootPoolChances_2 = [100] + lootGroupChance_2 = 35 + mobileTemplate.addToLootGroups(lootPoolNames_2,lootPoolChances_2,lootGroupChance_2) + + core.spawnService.addMobileTemplate('janta_shaman', mobileTemplate) + \ No newline at end of file diff --git a/scripts/mobiles/dantooine/janta_soothsayer.py b/scripts/mobiles/dantooine/janta_soothsayer.py new file mode 100644 index 00000000..f1842636 --- /dev/null +++ b/scripts/mobiles/dantooine/janta_soothsayer.py @@ -0,0 +1,49 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('janta_soothsayer') + mobileTemplate.setLevel(77) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(24) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(4) + mobileTemplate.setMinSpawnDistance(3) + mobileTemplate.setMaxSpawnDistance(5) + mobileTemplate.setDeathblow(True) + mobileTemplate.setSocialGroup('janta tribe') + mobileTemplate.setAssistRange(12) + + + templates = Vector() + templates.add('object/mobile/shared_dantari_male.iff') + + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/knife/shared_knife_janta.iff', 4, 1.0) + weaponTemplates.add(weapontemplate) + weapontemplate = WeaponTemplate('object/weapon/melee/polearm/shared_lance_staff_janta.iff', 7, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('meleehit') + mobileTemplate.setAttacks(attacks) + + lootPoolNames_1 = ['Junk'] + lootPoolChances_1 = [100] + lootGroupChance_1 = 65 + mobileTemplate.addToLootGroups(lootPoolNames_1,lootPoolChances_1,lootGroupChance_1) + + lootPoolNames_2 = ['random_loot_primitives'] + lootPoolChances_2 = [100] + lootGroupChance_2 = 35 + mobileTemplate.addToLootGroups(lootPoolNames_2,lootPoolChances_2,lootGroupChance_2) + + core.spawnService.addMobileTemplate('janta_soothsayer', mobileTemplate) + \ No newline at end of file diff --git a/scripts/mobiles/dantooine/janta_tribesman.py b/scripts/mobiles/dantooine/janta_tribesman.py new file mode 100644 index 00000000..a741208b --- /dev/null +++ b/scripts/mobiles/dantooine/janta_tribesman.py @@ -0,0 +1,49 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('janta_tribesman') + mobileTemplate.setLevel(77) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(24) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(4) + mobileTemplate.setMinSpawnDistance(3) + mobileTemplate.setMaxSpawnDistance(5) + mobileTemplate.setDeathblow(True) + mobileTemplate.setSocialGroup('janta tribe') + mobileTemplate.setAssistRange(12) + + + templates = Vector() + templates.add('object/mobile/shared_dantari_male.iff') + + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/knife/shared_knife_janta.iff', 4, 1.0) + weaponTemplates.add(weapontemplate) + weapontemplate = WeaponTemplate('object/weapon/melee/polearm/shared_lance_staff_janta.iff', 7, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('meleehit') + mobileTemplate.setAttacks(attacks) + + lootPoolNames_1 = ['Junk'] + lootPoolChances_1 = [100] + lootGroupChance_1 = 65 + mobileTemplate.addToLootGroups(lootPoolNames_1,lootPoolChances_1,lootGroupChance_1) + + lootPoolNames_2 = ['random_loot_primitives'] + lootPoolChances_2 = [100] + lootGroupChance_2 = 35 + mobileTemplate.addToLootGroups(lootPoolNames_2,lootPoolChances_2,lootGroupChance_2) + + core.spawnService.addMobileTemplate('janta_tribesman', mobileTemplate) + \ No newline at end of file diff --git a/scripts/mobiles/dantooine/janta_warrior.py b/scripts/mobiles/dantooine/janta_warrior.py new file mode 100644 index 00000000..2f142551 --- /dev/null +++ b/scripts/mobiles/dantooine/janta_warrior.py @@ -0,0 +1,49 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('janta_warrior') + mobileTemplate.setLevel(77) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(24) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(4) + mobileTemplate.setMinSpawnDistance(3) + mobileTemplate.setMaxSpawnDistance(5) + mobileTemplate.setDeathblow(True) + mobileTemplate.setSocialGroup('janta tribe') + mobileTemplate.setAssistRange(12) + + + templates = Vector() + templates.add('object/mobile/shared_dantari_male.iff') + + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/knife/shared_knife_janta.iff', 4, 1.0) + weaponTemplates.add(weapontemplate) + weapontemplate = WeaponTemplate('object/weapon/melee/polearm/shared_lance_staff_janta.iff', 7, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('meleehit') + mobileTemplate.setAttacks(attacks) + + lootPoolNames_1 = ['Junk'] + lootPoolChances_1 = [100] + lootGroupChance_1 = 65 + mobileTemplate.addToLootGroups(lootPoolNames_1,lootPoolChances_1,lootGroupChance_1) + + lootPoolNames_2 = ['random_loot_primitives'] + lootPoolChances_2 = [100] + lootGroupChance_2 = 35 + mobileTemplate.addToLootGroups(lootPoolNames_2,lootPoolChances_2,lootGroupChance_2) + + core.spawnService.addMobileTemplate('janta_warrior', mobileTemplate) + \ No newline at end of file diff --git a/scripts/mobiles/dantooine/kunga_clan_leader.py b/scripts/mobiles/dantooine/kunga_clan_leader.py new file mode 100644 index 00000000..00311d37 --- /dev/null +++ b/scripts/mobiles/dantooine/kunga_clan_leader.py @@ -0,0 +1,49 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('kunga_clan_leader') + mobileTemplate.setLevel(72) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(24) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(4) + mobileTemplate.setMinSpawnDistance(3) + mobileTemplate.setMaxSpawnDistance(5) + mobileTemplate.setDeathblow(True) + mobileTemplate.setSocialGroup('kunga tribe') + mobileTemplate.setAssistRange(1) + + + templates = Vector() + templates.add('object/mobile/shared_dantari_male.iff') + + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/knife/shared_knife_janta.iff', 4, 1.0) + weaponTemplates.add(weapontemplate) + weapontemplate = WeaponTemplate('object/weapon/melee/polearm/shared_lance_staff_janta.iff', 7, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('meleehit') + mobileTemplate.setAttacks(attacks) + + lootPoolNames_1 = ['Junk'] + lootPoolChances_1 = [100] + lootGroupChance_1 = 65 + mobileTemplate.addToLootGroups(lootPoolNames_1,lootPoolChances_1,lootGroupChance_1) + + lootPoolNames_2 = ['random_loot_primitives'] + lootPoolChances_2 = [100] + lootGroupChance_2 = 35 + mobileTemplate.addToLootGroups(lootPoolNames_2,lootPoolChances_2,lootGroupChance_2) + + core.spawnService.addMobileTemplate('kunga_clan_leader', mobileTemplate) + \ No newline at end of file diff --git a/scripts/mobiles/dantooine/kunga_clan_primalist.py b/scripts/mobiles/dantooine/kunga_clan_primalist.py new file mode 100644 index 00000000..ea256156 --- /dev/null +++ b/scripts/mobiles/dantooine/kunga_clan_primalist.py @@ -0,0 +1,49 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('kunga_clan_primalist') + mobileTemplate.setLevel(71) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(24) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(4) + mobileTemplate.setMinSpawnDistance(3) + mobileTemplate.setMaxSpawnDistance(5) + mobileTemplate.setDeathblow(False) + mobileTemplate.setSocialGroup('kunga tribe') + mobileTemplate.setAssistRange(1) + + + templates = Vector() + templates.add('object/mobile/shared_dantari_male.iff') + + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/knife/shared_knife_janta.iff', 4, 1.0) + weaponTemplates.add(weapontemplate) + weapontemplate = WeaponTemplate('object/weapon/melee/polearm/shared_lance_staff_janta.iff', 7, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('meleehit') + mobileTemplate.setAttacks(attacks) + + lootPoolNames_1 = ['Junk'] + lootPoolChances_1 = [100] + lootGroupChance_1 = 65 + mobileTemplate.addToLootGroups(lootPoolNames_1,lootPoolChances_1,lootGroupChance_1) + + lootPoolNames_2 = ['random_loot_primitives'] + lootPoolChances_2 = [100] + lootGroupChance_2 = 35 + mobileTemplate.addToLootGroups(lootPoolNames_2,lootPoolChances_2,lootGroupChance_2) + + core.spawnService.addMobileTemplate('kunga_clan_primalist', mobileTemplate) + \ No newline at end of file diff --git a/scripts/mobiles/dantooine/kunga_harvester.py b/scripts/mobiles/dantooine/kunga_harvester.py new file mode 100644 index 00000000..c1f95881 --- /dev/null +++ b/scripts/mobiles/dantooine/kunga_harvester.py @@ -0,0 +1,49 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('kunga_harvester') + mobileTemplate.setLevel(70) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(24) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(4) + mobileTemplate.setMinSpawnDistance(3) + mobileTemplate.setMaxSpawnDistance(5) + mobileTemplate.setDeathblow(False) + mobileTemplate.setSocialGroup('kunga tribe') + mobileTemplate.setAssistRange(1) + + + templates = Vector() + templates.add('object/mobile/shared_dantari_male.iff') + + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/knife/shared_knife_janta.iff', 4, 1.0) + weaponTemplates.add(weapontemplate) + weapontemplate = WeaponTemplate('object/weapon/melee/polearm/shared_lance_staff_janta.iff', 7, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('meleehit') + mobileTemplate.setAttacks(attacks) + + lootPoolNames_1 = ['Junk'] + lootPoolChances_1 = [100] + lootGroupChance_1 = 65 + mobileTemplate.addToLootGroups(lootPoolNames_1,lootPoolChances_1,lootGroupChance_1) + + lootPoolNames_2 = ['random_loot_primitives'] + lootPoolChances_2 = [100] + lootGroupChance_2 = 35 + mobileTemplate.addToLootGroups(lootPoolNames_2,lootPoolChances_2,lootGroupChance_2) + + core.spawnService.addMobileTemplate('kunga_harvester', mobileTemplate) + \ No newline at end of file diff --git a/scripts/mobiles/dantooine/kunga_herbalist.py b/scripts/mobiles/dantooine/kunga_herbalist.py new file mode 100644 index 00000000..7b0e8887 --- /dev/null +++ b/scripts/mobiles/dantooine/kunga_herbalist.py @@ -0,0 +1,49 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('kunga_herbalist') + mobileTemplate.setLevel(70) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(24) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(4) + mobileTemplate.setMinSpawnDistance(3) + mobileTemplate.setMaxSpawnDistance(5) + mobileTemplate.setDeathblow(False) + mobileTemplate.setSocialGroup('kunga tribe') + mobileTemplate.setAssistRange(1) + + + templates = Vector() + templates.add('object/mobile/shared_dantari_male.iff') + + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/knife/shared_knife_janta.iff', 4, 1.0) + weaponTemplates.add(weapontemplate) + weapontemplate = WeaponTemplate('object/weapon/melee/polearm/shared_lance_staff_janta.iff', 7, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('meleehit') + mobileTemplate.setAttacks(attacks) + + lootPoolNames_1 = ['Junk'] + lootPoolChances_1 = [100] + lootGroupChance_1 = 65 + mobileTemplate.addToLootGroups(lootPoolNames_1,lootPoolChances_1,lootGroupChance_1) + + lootPoolNames_2 = ['random_loot_primitives'] + lootPoolChances_2 = [100] + lootGroupChance_2 = 35 + mobileTemplate.addToLootGroups(lootPoolNames_2,lootPoolChances_2,lootGroupChance_2) + + core.spawnService.addMobileTemplate('kunga_herbalist', mobileTemplate) + \ No newline at end of file diff --git a/scripts/mobiles/dantooine/kunga_hunter.py b/scripts/mobiles/dantooine/kunga_hunter.py new file mode 100644 index 00000000..d5952172 --- /dev/null +++ b/scripts/mobiles/dantooine/kunga_hunter.py @@ -0,0 +1,49 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('kunga_hunter') + mobileTemplate.setLevel(70) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(24) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(4) + mobileTemplate.setMinSpawnDistance(3) + mobileTemplate.setMaxSpawnDistance(5) + mobileTemplate.setDeathblow(True) + mobileTemplate.setSocialGroup('kunga tribe') + mobileTemplate.setAssistRange(1) + + + templates = Vector() + templates.add('object/mobile/shared_dantari_male.iff') + + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/knife/shared_knife_janta.iff', 4, 1.0) + weaponTemplates.add(weapontemplate) + weapontemplate = WeaponTemplate('object/weapon/melee/polearm/shared_lance_staff_janta.iff', 7, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('meleehit') + mobileTemplate.setAttacks(attacks) + + lootPoolNames_1 = ['Junk'] + lootPoolChances_1 = [100] + lootGroupChance_1 = 65 + mobileTemplate.addToLootGroups(lootPoolNames_1,lootPoolChances_1,lootGroupChance_1) + + lootPoolNames_2 = ['random_loot_primitives'] + lootPoolChances_2 = [100] + lootGroupChance_2 = 35 + mobileTemplate.addToLootGroups(lootPoolNames_2,lootPoolChances_2,lootGroupChance_2) + + core.spawnService.addMobileTemplate('kunga_hunter', mobileTemplate) + \ No newline at end of file diff --git a/scripts/mobiles/dantooine/kunga_loreweaver.py b/scripts/mobiles/dantooine/kunga_loreweaver.py new file mode 100644 index 00000000..eab9c3df --- /dev/null +++ b/scripts/mobiles/dantooine/kunga_loreweaver.py @@ -0,0 +1,49 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('kunga_loreweaver') + mobileTemplate.setLevel(69) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(24) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(4) + mobileTemplate.setMinSpawnDistance(3) + mobileTemplate.setMaxSpawnDistance(5) + mobileTemplate.setDeathblow(True) + mobileTemplate.setSocialGroup('kunga tribe') + mobileTemplate.setAssistRange(1) + + + templates = Vector() + templates.add('object/mobile/shared_dantari_male.iff') + + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/knife/shared_knife_janta.iff', 4, 1.0) + weaponTemplates.add(weapontemplate) + weapontemplate = WeaponTemplate('object/weapon/melee/polearm/shared_lance_staff_janta.iff', 7, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('meleehit') + mobileTemplate.setAttacks(attacks) + + lootPoolNames_1 = ['Junk'] + lootPoolChances_1 = [100] + lootGroupChance_1 = 65 + mobileTemplate.addToLootGroups(lootPoolNames_1,lootPoolChances_1,lootGroupChance_1) + + lootPoolNames_2 = ['random_loot_primitives'] + lootPoolChances_2 = [100] + lootGroupChance_2 = 35 + mobileTemplate.addToLootGroups(lootPoolNames_2,lootPoolChances_2,lootGroupChance_2) + + core.spawnService.addMobileTemplate('kunga_loreweaver', mobileTemplate) + \ No newline at end of file diff --git a/scripts/mobiles/dantooine/kunga_rockshaper.py b/scripts/mobiles/dantooine/kunga_rockshaper.py new file mode 100644 index 00000000..a6434514 --- /dev/null +++ b/scripts/mobiles/dantooine/kunga_rockshaper.py @@ -0,0 +1,49 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('kunga_rockshaper') + mobileTemplate.setLevel(70) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(24) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(4) + mobileTemplate.setMinSpawnDistance(3) + mobileTemplate.setMaxSpawnDistance(5) + mobileTemplate.setDeathblow(True) + mobileTemplate.setSocialGroup('kunga tribe') + mobileTemplate.setAssistRange(1) + + + templates = Vector() + templates.add('object/mobile/shared_dantari_male.iff') + + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/knife/shared_knife_janta.iff', 4, 1.0) + weaponTemplates.add(weapontemplate) + weapontemplate = WeaponTemplate('object/weapon/melee/polearm/shared_lance_staff_janta.iff', 7, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('meleehit') + mobileTemplate.setAttacks(attacks) + + lootPoolNames_1 = ['Junk'] + lootPoolChances_1 = [100] + lootGroupChance_1 = 65 + mobileTemplate.addToLootGroups(lootPoolNames_1,lootPoolChances_1,lootGroupChance_1) + + lootPoolNames_2 = ['random_loot_primitives'] + lootPoolChances_2 = [100] + lootGroupChance_2 = 35 + mobileTemplate.addToLootGroups(lootPoolNames_2,lootPoolChances_2,lootGroupChance_2) + + core.spawnService.addMobileTemplate('kunga_rockshaper', mobileTemplate) + \ No newline at end of file diff --git a/scripts/mobiles/dantooine/kunga_scout.py b/scripts/mobiles/dantooine/kunga_scout.py new file mode 100644 index 00000000..d5cd7e5c --- /dev/null +++ b/scripts/mobiles/dantooine/kunga_scout.py @@ -0,0 +1,49 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('kunga_scout') + mobileTemplate.setLevel(69) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(24) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(4) + mobileTemplate.setMinSpawnDistance(3) + mobileTemplate.setMaxSpawnDistance(5) + mobileTemplate.setDeathblow(True) + mobileTemplate.setSocialGroup('kunga tribe') + mobileTemplate.setAssistRange(1) + + + templates = Vector() + templates.add('object/mobile/shared_dantari_male.iff') + + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/knife/shared_knife_janta.iff', 4, 1.0) + weaponTemplates.add(weapontemplate) + weapontemplate = WeaponTemplate('object/weapon/melee/polearm/shared_lance_staff_janta.iff', 7, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('meleehit') + mobileTemplate.setAttacks(attacks) + + lootPoolNames_1 = ['Junk'] + lootPoolChances_1 = [100] + lootGroupChance_1 = 65 + mobileTemplate.addToLootGroups(lootPoolNames_1,lootPoolChances_1,lootGroupChance_1) + + lootPoolNames_2 = ['random_loot_primitives'] + lootPoolChances_2 = [100] + lootGroupChance_2 = 35 + mobileTemplate.addToLootGroups(lootPoolNames_2,lootPoolChances_2,lootGroupChance_2) + + core.spawnService.addMobileTemplate('kunga_scout', mobileTemplate) + \ No newline at end of file diff --git a/scripts/mobiles/dantooine/kunga_shaman.py b/scripts/mobiles/dantooine/kunga_shaman.py new file mode 100644 index 00000000..9dd33ef8 --- /dev/null +++ b/scripts/mobiles/dantooine/kunga_shaman.py @@ -0,0 +1,49 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('kunga_shaman') + mobileTemplate.setLevel(71) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(24) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(4) + mobileTemplate.setMinSpawnDistance(3) + mobileTemplate.setMaxSpawnDistance(5) + mobileTemplate.setDeathblow(True) + mobileTemplate.setSocialGroup('kunga tribe') + mobileTemplate.setAssistRange(1) + + + templates = Vector() + templates.add('object/mobile/shared_dantari_male.iff') + + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/knife/shared_knife_janta.iff', 4, 1.0) + weaponTemplates.add(weapontemplate) + weapontemplate = WeaponTemplate('object/weapon/melee/polearm/shared_lance_staff_janta.iff', 7, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('meleehit') + mobileTemplate.setAttacks(attacks) + + lootPoolNames_1 = ['Junk'] + lootPoolChances_1 = [100] + lootGroupChance_1 = 65 + mobileTemplate.addToLootGroups(lootPoolNames_1,lootPoolChances_1,lootGroupChance_1) + + lootPoolNames_2 = ['random_loot_primitives'] + lootPoolChances_2 = [100] + lootGroupChance_2 = 35 + mobileTemplate.addToLootGroups(lootPoolNames_2,lootPoolChances_2,lootGroupChance_2) + + core.spawnService.addMobileTemplate('kunga_shaman', mobileTemplate) + \ No newline at end of file diff --git a/scripts/mobiles/dantooine/kunga_soothsayer.py b/scripts/mobiles/dantooine/kunga_soothsayer.py new file mode 100644 index 00000000..d1321f7b --- /dev/null +++ b/scripts/mobiles/dantooine/kunga_soothsayer.py @@ -0,0 +1,49 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('kunga_soothsayer') + mobileTemplate.setLevel(70) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(24) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(4) + mobileTemplate.setMinSpawnDistance(3) + mobileTemplate.setMaxSpawnDistance(5) + mobileTemplate.setDeathblow(False) + mobileTemplate.setSocialGroup('kunga tribe') + mobileTemplate.setAssistRange(1) + + + templates = Vector() + templates.add('object/mobile/shared_dantari_male.iff') + + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/knife/shared_knife_janta.iff', 4, 1.0) + weaponTemplates.add(weapontemplate) + weapontemplate = WeaponTemplate('object/weapon/melee/polearm/shared_lance_staff_janta.iff', 7, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('meleehit') + mobileTemplate.setAttacks(attacks) + + lootPoolNames_1 = ['Junk'] + lootPoolChances_1 = [100] + lootGroupChance_1 = 65 + mobileTemplate.addToLootGroups(lootPoolNames_1,lootPoolChances_1,lootGroupChance_1) + + lootPoolNames_2 = ['random_loot_primitives'] + lootPoolChances_2 = [100] + lootGroupChance_2 = 35 + mobileTemplate.addToLootGroups(lootPoolNames_2,lootPoolChances_2,lootGroupChance_2) + + core.spawnService.addMobileTemplate('kunga_soothsayer', mobileTemplate) + \ No newline at end of file diff --git a/scripts/mobiles/dantooine/kunga_tribe_member.py b/scripts/mobiles/dantooine/kunga_tribe_member.py new file mode 100644 index 00000000..df111848 --- /dev/null +++ b/scripts/mobiles/dantooine/kunga_tribe_member.py @@ -0,0 +1,49 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('kunga_tribe_member') + mobileTemplate.setLevel(71) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(24) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(4) + mobileTemplate.setMinSpawnDistance(3) + mobileTemplate.setMaxSpawnDistance(5) + mobileTemplate.setDeathblow(True) + mobileTemplate.setSocialGroup('kunga tribe') + mobileTemplate.setAssistRange(1) + + + templates = Vector() + templates.add('object/mobile/shared_dantari_male.iff') + + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/knife/shared_knife_janta.iff', 4, 1.0) + weaponTemplates.add(weapontemplate) + weapontemplate = WeaponTemplate('object/weapon/melee/polearm/shared_lance_staff_janta.iff', 7, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('meleehit') + mobileTemplate.setAttacks(attacks) + + lootPoolNames_1 = ['Junk'] + lootPoolChances_1 = [100] + lootGroupChance_1 = 65 + mobileTemplate.addToLootGroups(lootPoolNames_1,lootPoolChances_1,lootGroupChance_1) + + lootPoolNames_2 = ['random_loot_primitives'] + lootPoolChances_2 = [100] + lootGroupChance_2 = 35 + mobileTemplate.addToLootGroups(lootPoolNames_2,lootPoolChances_2,lootGroupChance_2) + + core.spawnService.addMobileTemplate('kunga_tribe_member', mobileTemplate) + \ No newline at end of file diff --git a/scripts/mobiles/dantooine/kunga_warrior.py b/scripts/mobiles/dantooine/kunga_warrior.py new file mode 100644 index 00000000..2bb31e22 --- /dev/null +++ b/scripts/mobiles/dantooine/kunga_warrior.py @@ -0,0 +1,49 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('kunga_warrior') + mobileTemplate.setLevel(71) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(24) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(4) + mobileTemplate.setMinSpawnDistance(3) + mobileTemplate.setMaxSpawnDistance(5) + mobileTemplate.setDeathblow(True) + mobileTemplate.setSocialGroup('kunga tribe') + mobileTemplate.setAssistRange(1) + + + templates = Vector() + templates.add('object/mobile/shared_dantari_male.iff') + + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/knife/shared_knife_janta.iff', 4, 1.0) + weaponTemplates.add(weapontemplate) + weapontemplate = WeaponTemplate('object/weapon/melee/polearm/shared_lance_staff_janta.iff', 7, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('meleehit') + mobileTemplate.setAttacks(attacks) + + lootPoolNames_1 = ['Junk'] + lootPoolChances_1 = [100] + lootGroupChance_1 = 65 + mobileTemplate.addToLootGroups(lootPoolNames_1,lootPoolChances_1,lootGroupChance_1) + + lootPoolNames_2 = ['random_loot_primitives'] + lootPoolChances_2 = [100] + lootGroupChance_2 = 35 + mobileTemplate.addToLootGroups(lootPoolNames_2,lootPoolChances_2,lootGroupChance_2) + + core.spawnService.addMobileTemplate('kunga_warrior', mobileTemplate) + \ No newline at end of file diff --git a/scripts/mobiles/dantooine/lesser_plains_bol.py b/scripts/mobiles/dantooine/lesser_plains_bol.py new file mode 100644 index 00000000..579a0c20 --- /dev/null +++ b/scripts/mobiles/dantooine/lesser_plains_bol.py @@ -0,0 +1,42 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + mobileTemplate.setCreatureName('lesser_plains_bol') + mobileTemplate.setLevel(60) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(5) + mobileTemplate.setMaxSpawnDistance(10) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setMeatType("Wild Meat") + mobileTemplate.setMeatAmount(0) + mobileTemplate.setHideType("Leathery Hide") + mobileTemplate.setBoneAmount(300) + mobileTemplate.setBoneType("Mammal Bone") + mobileTemplate.setHideAmount(180) + mobileTemplate.setSocialGroup("bol") + mobileTemplate.setAssistRange(12) + mobileTemplate.setStalker(False) + + templates = Vector() + templates.add('object/mobile/shared_bol_hue.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('lesser_plains_bol', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/dantooine/mammoth_thune.py b/scripts/mobiles/dantooine/mammoth_thune.py new file mode 100644 index 00000000..4fd07c82 --- /dev/null +++ b/scripts/mobiles/dantooine/mammoth_thune.py @@ -0,0 +1,43 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + mobileTemplate.setCreatureName('mammoth_thune') + mobileTemplate.setLevel(70) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(5) + mobileTemplate.setMaxSpawnDistance(10) + mobileTemplate.setDeathblow(True) + mobileTemplate.setScale(1) + mobileTemplate.setMeatType("Herbivore Meat") + mobileTemplate.setMeatAmount(225) + mobileTemplate.setHideType("Wooly Hide") + mobileTemplate.setBoneAmount(190) + mobileTemplate.setBoneType("Mammal Bone") + mobileTemplate.setHideAmount(0) + mobileTemplate.setSocialGroup("thune") + mobileTemplate.setAssistRange(12) + mobileTemplate.setStalker(False) + mobileTemplate.setOptionsBitmask(192) + + templates = Vector() + templates.add('object/mobile/shared_thune_hue.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('mammoth_thune', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/dantooine/mokk_clan_leader.py b/scripts/mobiles/dantooine/mokk_clan_leader.py new file mode 100644 index 00000000..a83c7a32 --- /dev/null +++ b/scripts/mobiles/dantooine/mokk_clan_leader.py @@ -0,0 +1,49 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('mokk_clan_leader') + mobileTemplate.setLevel(68) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(24) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(4) + mobileTemplate.setMinSpawnDistance(3) + mobileTemplate.setMaxSpawnDistance(5) + mobileTemplate.setDeathblow(True) + mobileTemplate.setSocialGroup('mokk tribe') + mobileTemplate.setAssistRange(12) + + + templates = Vector() + templates.add('object/mobile/shared_dantari_male.iff') + + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/knife/shared_knife_janta.iff', 4, 1.0) + weaponTemplates.add(weapontemplate) + weapontemplate = WeaponTemplate('object/weapon/melee/polearm/shared_lance_staff_janta.iff', 7, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('meleehit') + mobileTemplate.setAttacks(attacks) + + lootPoolNames_1 = ['Junk'] + lootPoolChances_1 = [100] + lootGroupChance_1 = 65 + mobileTemplate.addToLootGroups(lootPoolNames_1,lootPoolChances_1,lootGroupChance_1) + + lootPoolNames_2 = ['random_loot_primitives'] + lootPoolChances_2 = [100] + lootGroupChance_2 = 35 + mobileTemplate.addToLootGroups(lootPoolNames_2,lootPoolChances_2,lootGroupChance_2) + + core.spawnService.addMobileTemplate('mokk_clan_leader', mobileTemplate) + \ No newline at end of file diff --git a/scripts/mobiles/dantooine/mokk_clan_primalist.py b/scripts/mobiles/dantooine/mokk_clan_primalist.py new file mode 100644 index 00000000..839ed2eb --- /dev/null +++ b/scripts/mobiles/dantooine/mokk_clan_primalist.py @@ -0,0 +1,49 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('mokk_clan_primalist') + mobileTemplate.setLevel(64) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(24) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(4) + mobileTemplate.setMinSpawnDistance(3) + mobileTemplate.setMaxSpawnDistance(5) + mobileTemplate.setDeathblow(False) + mobileTemplate.setSocialGroup('mokk tribe') + mobileTemplate.setAssistRange(12) + + + templates = Vector() + templates.add('object/mobile/shared_dantari_male.iff') + + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/knife/shared_knife_janta.iff', 4, 1.0) + weaponTemplates.add(weapontemplate) + weapontemplate = WeaponTemplate('object/weapon/melee/polearm/shared_lance_staff_janta.iff', 7, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('meleehit') + mobileTemplate.setAttacks(attacks) + + lootPoolNames_1 = ['Junk'] + lootPoolChances_1 = [100] + lootGroupChance_1 = 65 + mobileTemplate.addToLootGroups(lootPoolNames_1,lootPoolChances_1,lootGroupChance_1) + + lootPoolNames_2 = ['random_loot_primitives'] + lootPoolChances_2 = [100] + lootGroupChance_2 = 35 + mobileTemplate.addToLootGroups(lootPoolNames_2,lootPoolChances_2,lootGroupChance_2) + + core.spawnService.addMobileTemplate('mokk_clan_primalist', mobileTemplate) + \ No newline at end of file diff --git a/scripts/mobiles/dantooine/mokk_harvester.py b/scripts/mobiles/dantooine/mokk_harvester.py new file mode 100644 index 00000000..2fd08f45 --- /dev/null +++ b/scripts/mobiles/dantooine/mokk_harvester.py @@ -0,0 +1,49 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('mokk_harvester') + mobileTemplate.setLevel(66) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(24) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(4) + mobileTemplate.setMinSpawnDistance(3) + mobileTemplate.setMaxSpawnDistance(5) + mobileTemplate.setDeathblow(False) + mobileTemplate.setSocialGroup('mokk tribe') + mobileTemplate.setAssistRange(12) + + + templates = Vector() + templates.add('object/mobile/shared_dantari_male.iff') + + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/knife/shared_knife_janta.iff', 4, 1.0) + weaponTemplates.add(weapontemplate) + weapontemplate = WeaponTemplate('object/weapon/melee/polearm/shared_lance_staff_janta.iff', 7, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('meleehit') + mobileTemplate.setAttacks(attacks) + + lootPoolNames_1 = ['Junk'] + lootPoolChances_1 = [100] + lootGroupChance_1 = 65 + mobileTemplate.addToLootGroups(lootPoolNames_1,lootPoolChances_1,lootGroupChance_1) + + lootPoolNames_2 = ['random_loot_primitives'] + lootPoolChances_2 = [100] + lootGroupChance_2 = 35 + mobileTemplate.addToLootGroups(lootPoolNames_2,lootPoolChances_2,lootGroupChance_2) + + core.spawnService.addMobileTemplate('mokk_harvester', mobileTemplate) + \ No newline at end of file diff --git a/scripts/mobiles/dantooine/mokk_herbalist.py b/scripts/mobiles/dantooine/mokk_herbalist.py new file mode 100644 index 00000000..c5cec1b7 --- /dev/null +++ b/scripts/mobiles/dantooine/mokk_herbalist.py @@ -0,0 +1,49 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('mokk_herbalist') + mobileTemplate.setLevel(65) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(24) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(4) + mobileTemplate.setMinSpawnDistance(3) + mobileTemplate.setMaxSpawnDistance(5) + mobileTemplate.setDeathblow(False) + mobileTemplate.setSocialGroup('mokk tribe') + mobileTemplate.setAssistRange(12) + + + templates = Vector() + templates.add('object/mobile/shared_dantari_male.iff') + + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/knife/shared_knife_janta.iff', 4, 1.0) + weaponTemplates.add(weapontemplate) + weapontemplate = WeaponTemplate('object/weapon/melee/polearm/shared_lance_staff_janta.iff', 7, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('meleehit') + mobileTemplate.setAttacks(attacks) + + lootPoolNames_1 = ['Junk'] + lootPoolChances_1 = [100] + lootGroupChance_1 = 65 + mobileTemplate.addToLootGroups(lootPoolNames_1,lootPoolChances_1,lootGroupChance_1) + + lootPoolNames_2 = ['random_loot_primitives'] + lootPoolChances_2 = [100] + lootGroupChance_2 = 35 + mobileTemplate.addToLootGroups(lootPoolNames_2,lootPoolChances_2,lootGroupChance_2) + + core.spawnService.addMobileTemplate('mokk_herbalist', mobileTemplate) + \ No newline at end of file diff --git a/scripts/mobiles/dantooine/mokk_hunter.py b/scripts/mobiles/dantooine/mokk_hunter.py new file mode 100644 index 00000000..f56bac8c --- /dev/null +++ b/scripts/mobiles/dantooine/mokk_hunter.py @@ -0,0 +1,49 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('mokk_hunter') + mobileTemplate.setLevel(66) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(24) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(4) + mobileTemplate.setMinSpawnDistance(3) + mobileTemplate.setMaxSpawnDistance(5) + mobileTemplate.setDeathblow(True) + mobileTemplate.setSocialGroup('mokk tribe') + mobileTemplate.setAssistRange(12) + + + templates = Vector() + templates.add('object/mobile/shared_dantari_male.iff') + + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/knife/shared_knife_janta.iff', 4, 1.0) + weaponTemplates.add(weapontemplate) + weapontemplate = WeaponTemplate('object/weapon/melee/polearm/shared_lance_staff_janta.iff', 7, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('meleehit') + mobileTemplate.setAttacks(attacks) + + lootPoolNames_1 = ['Junk'] + lootPoolChances_1 = [100] + lootGroupChance_1 = 65 + mobileTemplate.addToLootGroups(lootPoolNames_1,lootPoolChances_1,lootGroupChance_1) + + lootPoolNames_2 = ['random_loot_primitives'] + lootPoolChances_2 = [100] + lootGroupChance_2 = 35 + mobileTemplate.addToLootGroups(lootPoolNames_2,lootPoolChances_2,lootGroupChance_2) + + core.spawnService.addMobileTemplate('mokk_hunter', mobileTemplate) + \ No newline at end of file diff --git a/scripts/mobiles/dantooine/mokk_loreweaver.py b/scripts/mobiles/dantooine/mokk_loreweaver.py new file mode 100644 index 00000000..c7df5a02 --- /dev/null +++ b/scripts/mobiles/dantooine/mokk_loreweaver.py @@ -0,0 +1,49 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('mokk_loreweaver') + mobileTemplate.setLevel(64) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(24) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(4) + mobileTemplate.setMinSpawnDistance(3) + mobileTemplate.setMaxSpawnDistance(5) + mobileTemplate.setDeathblow(True) + mobileTemplate.setSocialGroup('mokk tribe') + mobileTemplate.setAssistRange(12) + + + templates = Vector() + templates.add('object/mobile/shared_dantari_male.iff') + + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/knife/shared_knife_janta.iff', 4, 1.0) + weaponTemplates.add(weapontemplate) + weapontemplate = WeaponTemplate('object/weapon/melee/polearm/shared_lance_staff_janta.iff', 7, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('meleehit') + mobileTemplate.setAttacks(attacks) + + lootPoolNames_1 = ['Junk'] + lootPoolChances_1 = [100] + lootGroupChance_1 = 65 + mobileTemplate.addToLootGroups(lootPoolNames_1,lootPoolChances_1,lootGroupChance_1) + + lootPoolNames_2 = ['random_loot_primitives'] + lootPoolChances_2 = [100] + lootGroupChance_2 = 35 + mobileTemplate.addToLootGroups(lootPoolNames_2,lootPoolChances_2,lootGroupChance_2) + + core.spawnService.addMobileTemplate('mokk_loreweaver', mobileTemplate) + \ No newline at end of file diff --git a/scripts/mobiles/dantooine/mokk_rockshaper.py b/scripts/mobiles/dantooine/mokk_rockshaper.py new file mode 100644 index 00000000..24a5eb6d --- /dev/null +++ b/scripts/mobiles/dantooine/mokk_rockshaper.py @@ -0,0 +1,49 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('mokk_rockshaper') + mobileTemplate.setLevel(66) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(24) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(4) + mobileTemplate.setMinSpawnDistance(3) + mobileTemplate.setMaxSpawnDistance(5) + mobileTemplate.setDeathblow(False) + mobileTemplate.setSocialGroup('mokk tribe') + mobileTemplate.setAssistRange(12) + + + templates = Vector() + templates.add('object/mobile/shared_dantari_male.iff') + + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/knife/shared_knife_janta.iff', 4, 1.0) + weaponTemplates.add(weapontemplate) + weapontemplate = WeaponTemplate('object/weapon/melee/polearm/shared_lance_staff_janta.iff', 7, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('meleehit') + mobileTemplate.setAttacks(attacks) + + lootPoolNames_1 = ['Junk'] + lootPoolChances_1 = [100] + lootGroupChance_1 = 65 + mobileTemplate.addToLootGroups(lootPoolNames_1,lootPoolChances_1,lootGroupChance_1) + + lootPoolNames_2 = ['random_loot_primitives'] + lootPoolChances_2 = [100] + lootGroupChance_2 = 35 + mobileTemplate.addToLootGroups(lootPoolNames_2,lootPoolChances_2,lootGroupChance_2) + + core.spawnService.addMobileTemplate('mokk_rockshaper', mobileTemplate) + \ No newline at end of file diff --git a/scripts/mobiles/dantooine/mokk_scout.py b/scripts/mobiles/dantooine/mokk_scout.py new file mode 100644 index 00000000..dd85d584 --- /dev/null +++ b/scripts/mobiles/dantooine/mokk_scout.py @@ -0,0 +1,49 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('mokk_scout') + mobileTemplate.setLevel(64) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(24) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(4) + mobileTemplate.setMinSpawnDistance(3) + mobileTemplate.setMaxSpawnDistance(5) + mobileTemplate.setDeathblow(True) + mobileTemplate.setSocialGroup('mokk tribe') + mobileTemplate.setAssistRange(12) + + + templates = Vector() + templates.add('object/mobile/shared_dantari_male.iff') + + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/knife/shared_knife_janta.iff', 4, 1.0) + weaponTemplates.add(weapontemplate) + weapontemplate = WeaponTemplate('object/weapon/melee/polearm/shared_lance_staff_janta.iff', 7, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('meleehit') + mobileTemplate.setAttacks(attacks) + + lootPoolNames_1 = ['Junk'] + lootPoolChances_1 = [100] + lootGroupChance_1 = 65 + mobileTemplate.addToLootGroups(lootPoolNames_1,lootPoolChances_1,lootGroupChance_1) + + lootPoolNames_2 = ['random_loot_primitives'] + lootPoolChances_2 = [100] + lootGroupChance_2 = 35 + mobileTemplate.addToLootGroups(lootPoolNames_2,lootPoolChances_2,lootGroupChance_2) + + core.spawnService.addMobileTemplate('mokk_scout', mobileTemplate) + \ No newline at end of file diff --git a/scripts/mobiles/dantooine/mokk_shaman.py b/scripts/mobiles/dantooine/mokk_shaman.py new file mode 100644 index 00000000..22df383e --- /dev/null +++ b/scripts/mobiles/dantooine/mokk_shaman.py @@ -0,0 +1,49 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('mokk_shaman') + mobileTemplate.setLevel(65) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(24) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(4) + mobileTemplate.setMinSpawnDistance(3) + mobileTemplate.setMaxSpawnDistance(5) + mobileTemplate.setDeathblow(True) + mobileTemplate.setSocialGroup('mokk tribe') + mobileTemplate.setAssistRange(12) + + + templates = Vector() + templates.add('object/mobile/shared_dantari_male.iff') + + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/knife/shared_knife_janta.iff', 4, 1.0) + weaponTemplates.add(weapontemplate) + weapontemplate = WeaponTemplate('object/weapon/melee/polearm/shared_lance_staff_janta.iff', 7, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('meleehit') + mobileTemplate.setAttacks(attacks) + + lootPoolNames_1 = ['Junk'] + lootPoolChances_1 = [100] + lootGroupChance_1 = 65 + mobileTemplate.addToLootGroups(lootPoolNames_1,lootPoolChances_1,lootGroupChance_1) + + lootPoolNames_2 = ['random_loot_primitives'] + lootPoolChances_2 = [100] + lootGroupChance_2 = 35 + mobileTemplate.addToLootGroups(lootPoolNames_2,lootPoolChances_2,lootGroupChance_2) + + core.spawnService.addMobileTemplate('mokk_shaman', mobileTemplate) + \ No newline at end of file diff --git a/scripts/mobiles/dantooine/mokk_soothsayer.py b/scripts/mobiles/dantooine/mokk_soothsayer.py new file mode 100644 index 00000000..866598a1 --- /dev/null +++ b/scripts/mobiles/dantooine/mokk_soothsayer.py @@ -0,0 +1,49 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('mokk_soothsayer') + mobileTemplate.setLevel(67) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(24) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(4) + mobileTemplate.setMinSpawnDistance(3) + mobileTemplate.setMaxSpawnDistance(5) + mobileTemplate.setDeathblow(True) + mobileTemplate.setSocialGroup('mokk tribe') + mobileTemplate.setAssistRange(12) + + + templates = Vector() + templates.add('object/mobile/shared_dantari_male.iff') + + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/knife/shared_knife_janta.iff', 4, 1.0) + weaponTemplates.add(weapontemplate) + weapontemplate = WeaponTemplate('object/weapon/melee/polearm/shared_lance_staff_janta.iff', 7, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('meleehit') + mobileTemplate.setAttacks(attacks) + + lootPoolNames_1 = ['Junk'] + lootPoolChances_1 = [100] + lootGroupChance_1 = 65 + mobileTemplate.addToLootGroups(lootPoolNames_1,lootPoolChances_1,lootGroupChance_1) + + lootPoolNames_2 = ['random_loot_primitives'] + lootPoolChances_2 = [100] + lootGroupChance_2 = 35 + mobileTemplate.addToLootGroups(lootPoolNames_2,lootPoolChances_2,lootGroupChance_2) + + core.spawnService.addMobileTemplate('mokk_soothsayer', mobileTemplate) + \ No newline at end of file diff --git a/scripts/mobiles/dantooine/mokk_tribesman.py b/scripts/mobiles/dantooine/mokk_tribesman.py new file mode 100644 index 00000000..530f4286 --- /dev/null +++ b/scripts/mobiles/dantooine/mokk_tribesman.py @@ -0,0 +1,49 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('mokk_tribesman') + mobileTemplate.setLevel(66) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(24) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(4) + mobileTemplate.setMinSpawnDistance(3) + mobileTemplate.setMaxSpawnDistance(5) + mobileTemplate.setDeathblow(True) + mobileTemplate.setSocialGroup('mokk tribe') + mobileTemplate.setAssistRange(12) + + + templates = Vector() + templates.add('object/mobile/shared_dantari_male.iff') + + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/knife/shared_knife_janta.iff', 4, 1.0) + weaponTemplates.add(weapontemplate) + weapontemplate = WeaponTemplate('object/weapon/melee/polearm/shared_lance_staff_janta.iff', 7, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('meleehit') + mobileTemplate.setAttacks(attacks) + + lootPoolNames_1 = ['Junk'] + lootPoolChances_1 = [100] + lootGroupChance_1 = 65 + mobileTemplate.addToLootGroups(lootPoolNames_1,lootPoolChances_1,lootGroupChance_1) + + lootPoolNames_2 = ['random_loot_primitives'] + lootPoolChances_2 = [100] + lootGroupChance_2 = 35 + mobileTemplate.addToLootGroups(lootPoolNames_2,lootPoolChances_2,lootGroupChance_2) + + core.spawnService.addMobileTemplate('mokk_tribesman', mobileTemplate) + \ No newline at end of file diff --git a/scripts/mobiles/dantooine/mokk_warrior.py b/scripts/mobiles/dantooine/mokk_warrior.py new file mode 100644 index 00000000..99fc43c8 --- /dev/null +++ b/scripts/mobiles/dantooine/mokk_warrior.py @@ -0,0 +1,49 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('mokk_warrior') + mobileTemplate.setLevel(68) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(24) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(4) + mobileTemplate.setMinSpawnDistance(3) + mobileTemplate.setMaxSpawnDistance(5) + mobileTemplate.setDeathblow(False) + mobileTemplate.setSocialGroup('mokk tribe') + mobileTemplate.setAssistRange(12) + + + templates = Vector() + templates.add('object/mobile/shared_dantari_male.iff') + + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/knife/shared_knife_janta.iff', 4, 1.0) + weaponTemplates.add(weapontemplate) + weapontemplate = WeaponTemplate('object/weapon/melee/polearm/shared_lance_staff_janta.iff', 7, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('meleehit') + mobileTemplate.setAttacks(attacks) + + lootPoolNames_1 = ['Junk'] + lootPoolChances_1 = [100] + lootGroupChance_1 = 65 + mobileTemplate.addToLootGroups(lootPoolNames_1,lootPoolChances_1,lootGroupChance_1) + + lootPoolNames_2 = ['random_loot_primitives'] + lootPoolChances_2 = [100] + lootGroupChance_2 = 35 + mobileTemplate.addToLootGroups(lootPoolNames_2,lootPoolChances_2,lootGroupChance_2) + + core.spawnService.addMobileTemplate('mokk_warrior', mobileTemplate) + \ No newline at end of file diff --git a/scripts/mobiles/dantooine/novice_force_mystic.py b/scripts/mobiles/dantooine/novice_force_mystic.py new file mode 100644 index 00000000..1ed0f1a0 --- /dev/null +++ b/scripts/mobiles/dantooine/novice_force_mystic.py @@ -0,0 +1,35 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('novice_force_mystic') + mobileTemplate.setLevel(63) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(6) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(4) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(7) + mobileTemplate.setDeathblow(False) + mobileTemplate.setSocialGroup('force renegade') + mobileTemplate.setRespawnTime(300) + + templates = Vector() + templates.add('object/mobile/shared_dressed_novice_force_mystic.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/sword/shared_sword_01.iff', 4, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('meleehit') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('novice_force_mystic', mobileTemplate) + \ No newline at end of file diff --git a/scripts/mobiles/dantooine/piket.py b/scripts/mobiles/dantooine/piket.py new file mode 100644 index 00000000..82cb1618 --- /dev/null +++ b/scripts/mobiles/dantooine/piket.py @@ -0,0 +1,42 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + mobileTemplate.setCreatureName('piket') + mobileTemplate.setLevel(61) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(5) + mobileTemplate.setMaxSpawnDistance(10) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setMeatType("Herbivore Meat") + mobileTemplate.setMeatAmount(35) + mobileTemplate.setHideType("Leathery Hide") + mobileTemplate.setBoneAmount(25) + mobileTemplate.setBoneType("Avian Bone") + mobileTemplate.setHideAmount(30) + mobileTemplate.setSocialGroup("piket") + mobileTemplate.setAssistRange(12) + mobileTemplate.setStalker(False) + + templates = Vector() + templates.add('object/mobile/shared_piket.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('piket', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/dantooine/piket_longhorn.py b/scripts/mobiles/dantooine/piket_longhorn.py new file mode 100644 index 00000000..24188d28 --- /dev/null +++ b/scripts/mobiles/dantooine/piket_longhorn.py @@ -0,0 +1,42 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + mobileTemplate.setCreatureName('piket_longhorn') + mobileTemplate.setLevel(61) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(5) + mobileTemplate.setMaxSpawnDistance(10) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setMeatType("Herbivore Meat") + mobileTemplate.setMeatAmount(35) + mobileTemplate.setHideType("Leathery Hide") + mobileTemplate.setBoneAmount(25) + mobileTemplate.setBoneType("Avian Bone") + mobileTemplate.setHideAmount(30) + mobileTemplate.setSocialGroup("piket") + mobileTemplate.setAssistRange(12) + mobileTemplate.setStalker(False) + + templates = Vector() + templates.add('object/mobile/shared_piket_longhorn.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('piket_longhorn', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/dantooine/piket_longhorn_female.py b/scripts/mobiles/dantooine/piket_longhorn_female.py new file mode 100644 index 00000000..dfddbe58 --- /dev/null +++ b/scripts/mobiles/dantooine/piket_longhorn_female.py @@ -0,0 +1,42 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + mobileTemplate.setCreatureName('piket') + mobileTemplate.setLevel(61) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(5) + mobileTemplate.setMaxSpawnDistance(10) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setMeatType("Herbivore Meat") + mobileTemplate.setMeatAmount(35) + mobileTemplate.setHideType("Leathery Hide") + mobileTemplate.setBoneAmount(25) + mobileTemplate.setBoneType("Avian Bone") + mobileTemplate.setHideAmount(30) + mobileTemplate.setSocialGroup("piket") + mobileTemplate.setAssistRange(12) + mobileTemplate.setStalker(False) + + templates = Vector() + templates.add('object/mobile/shared_piket_longhorn.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('piket', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/dantooine/piket_plains_walker.py b/scripts/mobiles/dantooine/piket_plains_walker.py new file mode 100644 index 00000000..5cdb310c --- /dev/null +++ b/scripts/mobiles/dantooine/piket_plains_walker.py @@ -0,0 +1,42 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + mobileTemplate.setCreatureName('piket_plains_walker') + mobileTemplate.setLevel(61) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(5) + mobileTemplate.setMaxSpawnDistance(10) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setMeatType("Herbivore Meat") + mobileTemplate.setMeatAmount(35) + mobileTemplate.setHideType("Leathery Hide") + mobileTemplate.setBoneAmount(25) + mobileTemplate.setBoneType("Avian Bone") + mobileTemplate.setHideAmount(30) + mobileTemplate.setSocialGroup("piket") + mobileTemplate.setAssistRange(12) + mobileTemplate.setStalker(False) + + templates = Vector() + templates.add('object/mobile/shared_piket_plains_walker.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('piket_plains_walker', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/dantooine/quenker.py b/scripts/mobiles/dantooine/quenker.py new file mode 100644 index 00000000..9f575295 --- /dev/null +++ b/scripts/mobiles/dantooine/quenker.py @@ -0,0 +1,43 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + mobileTemplate.setCreatureName('quenker') + mobileTemplate.setLevel(61) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(5) + mobileTemplate.setMaxSpawnDistance(10) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setMeatType("Herbivore Meat") + mobileTemplate.setMeatAmount(15) + mobileTemplate.setHideType("Wooly Hide") + mobileTemplate.setBoneAmount(10) + mobileTemplate.setBoneType("Mammal Bone") + mobileTemplate.setHideAmount(15) + mobileTemplate.setSocialGroup("quenker") + mobileTemplate.setAssistRange(12) + mobileTemplate.setStalker(False) + mobileTemplate.setOptionsBitmask(192) + + templates = Vector() + templates.add('object/mobile/shared_quenker.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('quenker', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/dantooine/quenker_ravager.py b/scripts/mobiles/dantooine/quenker_ravager.py new file mode 100644 index 00000000..125f1b1b --- /dev/null +++ b/scripts/mobiles/dantooine/quenker_ravager.py @@ -0,0 +1,43 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + mobileTemplate.setCreatureName('quenker_ravager') + mobileTemplate.setLevel(67) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(5) + mobileTemplate.setMaxSpawnDistance(10) + mobileTemplate.setDeathblow(True) + mobileTemplate.setScale(1) + mobileTemplate.setMeatType("Herbivore Meat") + mobileTemplate.setMeatAmount(15) + mobileTemplate.setHideType("Wooly Hide") + mobileTemplate.setBoneAmount(10) + mobileTemplate.setBoneType("Mammal Bone") + mobileTemplate.setHideAmount(15) + mobileTemplate.setSocialGroup("quenker") + mobileTemplate.setAssistRange(12) + mobileTemplate.setStalker(False) + mobileTemplate.setOptionsBitmask(192) + + templates = Vector() + templates.add('object/mobile/shared_quenker_hue.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('quenker_ravager', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/dantooine/quenker_relic_reaper.py b/scripts/mobiles/dantooine/quenker_relic_reaper.py new file mode 100644 index 00000000..ae6ec1a7 --- /dev/null +++ b/scripts/mobiles/dantooine/quenker_relic_reaper.py @@ -0,0 +1,43 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + mobileTemplate.setCreatureName('quenker_relic_reaper') + mobileTemplate.setLevel(69) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(5) + mobileTemplate.setMaxSpawnDistance(10) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setMeatType("Herbivore Meat") + mobileTemplate.setMeatAmount(15) + mobileTemplate.setHideType("Wooly Hide") + mobileTemplate.setBoneAmount(10) + mobileTemplate.setBoneType("Mammal Bone") + mobileTemplate.setHideAmount(15) + mobileTemplate.setSocialGroup("quenker") + mobileTemplate.setAssistRange(12) + mobileTemplate.setStalker(False) + mobileTemplate.setOptionsBitmask(192) + + templates = Vector() + templates.add('object/mobile/shared_quenker_relic_reaper.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('quenker_relic_reaper', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/dantooine/savage_quenker.py b/scripts/mobiles/dantooine/savage_quenker.py new file mode 100644 index 00000000..3f5a26b7 --- /dev/null +++ b/scripts/mobiles/dantooine/savage_quenker.py @@ -0,0 +1,43 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + mobileTemplate.setCreatureName('savage_quenker') + mobileTemplate.setLevel(63) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(5) + mobileTemplate.setMaxSpawnDistance(10) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setMeatType("Herbivore Meat") + mobileTemplate.setMeatAmount(0) + mobileTemplate.setHideType("Wooly Hide") + mobileTemplate.setBoneAmount(0) + mobileTemplate.setBoneType("Mammal Bone") + mobileTemplate.setHideAmount(0) + mobileTemplate.setSocialGroup("quenker") + mobileTemplate.setAssistRange(12) + mobileTemplate.setStalker(False) + mobileTemplate.setOptionsBitmask(192) + + templates = Vector() + templates.add('object/mobile/shared_quenker_relic_reaper.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('savage_quenker', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/dantooine/seething_bol_crusher.py b/scripts/mobiles/dantooine/seething_bol_crusher.py new file mode 100644 index 00000000..61c1b251 --- /dev/null +++ b/scripts/mobiles/dantooine/seething_bol_crusher.py @@ -0,0 +1,42 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + mobileTemplate.setCreatureName('seething_bol_crusher') + mobileTemplate.setLevel(70) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(5) + mobileTemplate.setMaxSpawnDistance(10) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setMeatType("Wild Meat") + mobileTemplate.setMeatAmount(0) + mobileTemplate.setHideType("Leathery Hide") + mobileTemplate.setBoneAmount(300) + mobileTemplate.setBoneType("Mammal Bone") + mobileTemplate.setHideAmount(180) + mobileTemplate.setSocialGroup("bol") + mobileTemplate.setAssistRange(12) + mobileTemplate.setStalker(False) + + templates = Vector() + templates.add('object/mobile/shared_bol.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('seething_bol_crusher', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/dantooine/slice_hound.py b/scripts/mobiles/dantooine/slice_hound.py new file mode 100644 index 00000000..19175407 --- /dev/null +++ b/scripts/mobiles/dantooine/slice_hound.py @@ -0,0 +1,44 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + mobileTemplate.setCreatureName('slice_hound') + mobileTemplate.setLevel(51) + mobileTemplate.setMinLevel(51) + mobileTemplate.setMaxLevel(51) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(5) + mobileTemplate.setMaxSpawnDistance(10) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setMeatType("Carnivore Meat") + mobileTemplate.setMeatAmount(65) + mobileTemplate.setHideType("Bristley Hide") + mobileTemplate.setBoneAmount(35) + mobileTemplate.setBoneType("Mammal Bone") + mobileTemplate.setHideAmount(30) + mobileTemplate.setSocialGroup("slice_hound") + mobileTemplate.setAssistRange(1) + mobileTemplate.setStalker(False) + + templates = Vector() + templates.add('object/mobile/shared_dewback.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('slice_hound', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/dantooine/slinking_voritor_hunter.py b/scripts/mobiles/dantooine/slinking_voritor_hunter.py new file mode 100644 index 00000000..e4b22c92 --- /dev/null +++ b/scripts/mobiles/dantooine/slinking_voritor_hunter.py @@ -0,0 +1,43 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + mobileTemplate.setCreatureName('slinking_voritor_hunter') + mobileTemplate.setLevel(78) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(5) + mobileTemplate.setMaxSpawnDistance(10) + mobileTemplate.setDeathblow(True) + mobileTemplate.setScale(1) + mobileTemplate.setMeatType("Carnivore Meat") + mobileTemplate.setMeatAmount(90) + mobileTemplate.setHideType("Leathery Hide") + mobileTemplate.setBoneAmount(65) + mobileTemplate.setBoneType("Avian Bone") + mobileTemplate.setHideAmount(50) + mobileTemplate.setSocialGroup("voritor lizard") + mobileTemplate.setAssistRange(12) + mobileTemplate.setStalker(True) + mobileTemplate.setOptionsBitmask(192) + + templates = Vector() + templates.add('object/mobile/shared_slinking_voritor_hunter.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('slinking_voritor_hunter', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/dantooine/spiked_slasher.py b/scripts/mobiles/dantooine/spiked_slasher.py new file mode 100644 index 00000000..2f3d2330 --- /dev/null +++ b/scripts/mobiles/dantooine/spiked_slasher.py @@ -0,0 +1,43 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + mobileTemplate.setCreatureName('spiked_slasher') + mobileTemplate.setLevel(70) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(5) + mobileTemplate.setMaxSpawnDistance(10) + mobileTemplate.setDeathblow(True) + mobileTemplate.setScale(1) + mobileTemplate.setMeatType("Carnivore Meat") + mobileTemplate.setMeatAmount(65) + mobileTemplate.setHideType("Leathery Hide") + mobileTemplate.setBoneAmount(40) + mobileTemplate.setBoneType("Avian Bone") + mobileTemplate.setHideAmount(50) + mobileTemplate.setSocialGroup("voritor lizard") + mobileTemplate.setAssistRange(12) + mobileTemplate.setStalker(False) + mobileTemplate.setOptionsBitmask(192) + + templates = Vector() + templates.add('object/mobile/shared_voritor_lizard_hue.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('spiked_slasher', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/dantooine/stranded_rebel_scout.py b/scripts/mobiles/dantooine/stranded_rebel_scout.py new file mode 100644 index 00000000..af05c180 --- /dev/null +++ b/scripts/mobiles/dantooine/stranded_rebel_scout.py @@ -0,0 +1,39 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('stranded_rebel_scout') + mobileTemplate.setLevel(62) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(24) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(0) + mobileTemplate.setMinSpawnDistance(3) + mobileTemplate.setMaxSpawnDistance(5) + mobileTemplate.setDeathblow(True) + mobileTemplate.setSocialGroup('rebel') + mobileTemplate.setAssistRange(1) + mobileTemplate.setStalker(True) + + templates = Vector() + templates.add('object/mobile/shared_dressed_dark_jedi_male_human_01.iff') + + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/carbine/shared_carbine_dh17.iff', 0, 1.0) + weaponTemplates.add(weapontemplate) + weapontemplate = WeaponTemplate('object/weapon/ranged/rifle/shared_rifle_rebel.iff', 0, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedShot') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('stranded_rebel_scout', mobileTemplate) + \ No newline at end of file diff --git a/scripts/mobiles/dantooine/swift_charging_bol.py b/scripts/mobiles/dantooine/swift_charging_bol.py new file mode 100644 index 00000000..2bbccc53 --- /dev/null +++ b/scripts/mobiles/dantooine/swift_charging_bol.py @@ -0,0 +1,42 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + mobileTemplate.setCreatureName('bol_swift_charger') + mobileTemplate.setLevel(39) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(5) + mobileTemplate.setMaxSpawnDistance(10) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setMeatType("Wild Meat") + mobileTemplate.setMeatAmount(0) + mobileTemplate.setHideType("Leathery Hide") + mobileTemplate.setBoneAmount(300) + mobileTemplate.setBoneType("Mammal Bone") + mobileTemplate.setHideAmount(180) + mobileTemplate.setSocialGroup("bol") + mobileTemplate.setAssistRange(12) + mobileTemplate.setStalker(False) + + templates = Vector() + templates.add('object/mobile/shared_bol_hue.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('swift_charging_bol', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/dantooine/terrible_quenker.py b/scripts/mobiles/dantooine/terrible_quenker.py new file mode 100644 index 00000000..de6a648c --- /dev/null +++ b/scripts/mobiles/dantooine/terrible_quenker.py @@ -0,0 +1,43 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + mobileTemplate.setCreatureName('terrible_quenker') + mobileTemplate.setLevel(63) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(5) + mobileTemplate.setMaxSpawnDistance(10) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setMeatType("Herbivore Meat") + mobileTemplate.setMeatAmount(0) + mobileTemplate.setHideType("Wooly Hide") + mobileTemplate.setBoneAmount(0) + mobileTemplate.setBoneType("Mammal Bone") + mobileTemplate.setHideAmount(0) + mobileTemplate.setSocialGroup("quenker") + mobileTemplate.setAssistRange(12) + mobileTemplate.setStalker(False) + mobileTemplate.setOptionsBitmask(192) + + templates = Vector() + templates.add('object/mobile/shared_quenker.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('terrible_quenker', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/dantooine/thune.py b/scripts/mobiles/dantooine/thune.py new file mode 100644 index 00000000..e8653e89 --- /dev/null +++ b/scripts/mobiles/dantooine/thune.py @@ -0,0 +1,43 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + mobileTemplate.setCreatureName('thune') + mobileTemplate.setLevel(68) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(5) + mobileTemplate.setMaxSpawnDistance(10) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setMeatType("Herbivore Meat") + mobileTemplate.setMeatAmount(115) + mobileTemplate.setHideType("Wooly Hide") + mobileTemplate.setBoneAmount(125) + mobileTemplate.setBoneType("Mammal Bone") + mobileTemplate.setHideAmount(0) + mobileTemplate.setSocialGroup("thune") + mobileTemplate.setAssistRange(12) + mobileTemplate.setStalker(False) + mobileTemplate.setOptionsBitmask(192) + + templates = Vector() + templates.add('object/mobile/shared_thune.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('thune', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/dantooine/thune_grassland_guardian.py b/scripts/mobiles/dantooine/thune_grassland_guardian.py new file mode 100644 index 00000000..9c99c933 --- /dev/null +++ b/scripts/mobiles/dantooine/thune_grassland_guardian.py @@ -0,0 +1,43 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + mobileTemplate.setCreatureName('thune_grassland_guardian') + mobileTemplate.setLevel(72) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(5) + mobileTemplate.setMaxSpawnDistance(10) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setMeatType("Herbivore Meat") + mobileTemplate.setMeatAmount(135) + mobileTemplate.setHideType("Wooly Hide") + mobileTemplate.setBoneAmount(150) + mobileTemplate.setBoneType("Mammal Bone") + mobileTemplate.setHideAmount(0) + mobileTemplate.setSocialGroup("thune") + mobileTemplate.setAssistRange(12) + mobileTemplate.setStalker(False) + mobileTemplate.setOptionsBitmask(192) + + templates = Vector() + templates.add('object/mobile/shared_thune_grassland_guardian.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('thune_grassland_guardian', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/dantooine/thune_herd_leader.py b/scripts/mobiles/dantooine/thune_herd_leader.py new file mode 100644 index 00000000..3ab09c93 --- /dev/null +++ b/scripts/mobiles/dantooine/thune_herd_leader.py @@ -0,0 +1,43 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + mobileTemplate.setCreatureName('thune_herd_leader') + mobileTemplate.setLevel(71) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(5) + mobileTemplate.setMaxSpawnDistance(10) + mobileTemplate.setDeathblow(True) + mobileTemplate.setScale(1) + mobileTemplate.setMeatType("Herbivore Meat") + mobileTemplate.setMeatAmount(135) + mobileTemplate.setHideType("Wooly Hide") + mobileTemplate.setBoneAmount(150) + mobileTemplate.setBoneType("Mammal Bone") + mobileTemplate.setHideAmount(0) + mobileTemplate.setSocialGroup("thune") + mobileTemplate.setAssistRange(12) + mobileTemplate.setStalker(False) + mobileTemplate.setOptionsBitmask(192) + + templates = Vector() + templates.add('object/mobile/shared_thune_herd_leader.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('thune_herd_leader', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/dantooine/untrained_wielder_of_the_dark_side.py b/scripts/mobiles/dantooine/untrained_wielder_of_the_dark_side.py new file mode 100644 index 00000000..de77e40a --- /dev/null +++ b/scripts/mobiles/dantooine/untrained_wielder_of_the_dark_side.py @@ -0,0 +1,37 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('untrained_wielder_of_the_dark_side') + mobileTemplate.setMinLevel(61) + mobileTemplate.setMaxLevel(70) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(6) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(4) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(6) + mobileTemplate.setDeathblow(False) + mobileTemplate.setSocialGroup('remnants of kun') + mobileTemplate.setAssistRange(12) + mobileTemplate.setRespawnTime(300) + + templates = Vector() + templates.add('object/mobile/shared_dressed_untrained_wielder_of_the_darkside.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/sword/shared_sword_01.iff', 4, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('meleehit') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('untrained_wielder_of_the_dark_side', mobileTemplate) + \ No newline at end of file diff --git a/scripts/mobiles/dantooine/vexed_voritor_lizard.py b/scripts/mobiles/dantooine/vexed_voritor_lizard.py new file mode 100644 index 00000000..84d6a944 --- /dev/null +++ b/scripts/mobiles/dantooine/vexed_voritor_lizard.py @@ -0,0 +1,43 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + mobileTemplate.setCreatureName('vexed_voritor_lizard') + mobileTemplate.setLevel(73) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(5) + mobileTemplate.setMaxSpawnDistance(10) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setMeatType("Carnivore Meat") + mobileTemplate.setMeatAmount(50) + mobileTemplate.setHideType("Leathery Hide") + mobileTemplate.setBoneAmount(50) + mobileTemplate.setBoneType("Avian Bone") + mobileTemplate.setHideAmount(50) + mobileTemplate.setSocialGroup("voritor lizard") + mobileTemplate.setAssistRange(12) + mobileTemplate.setStalker(True) + mobileTemplate.setOptionsBitmask(192) + + templates = Vector() + templates.add('object/mobile/shared_vexed_voritor_lizard.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('vexed_voritor_lizard', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/dantooine/voritor_dasher.py b/scripts/mobiles/dantooine/voritor_dasher.py new file mode 100644 index 00000000..5b805437 --- /dev/null +++ b/scripts/mobiles/dantooine/voritor_dasher.py @@ -0,0 +1,43 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + mobileTemplate.setCreatureName('voritor_dasher') + mobileTemplate.setLevel(72) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(5) + mobileTemplate.setMaxSpawnDistance(10) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setMeatType("Carnivore Meat") + mobileTemplate.setMeatAmount(40) + mobileTemplate.setHideType("Leathery Hide") + mobileTemplate.setBoneAmount(30) + mobileTemplate.setBoneType("Avian Bone") + mobileTemplate.setHideAmount(35) + mobileTemplate.setSocialGroup("voritor lizard") + mobileTemplate.setAssistRange(12) + mobileTemplate.setStalker(True) + mobileTemplate.setOptionsBitmask(192) + + templates = Vector() + templates.add('object/mobile/shared_voritor_dasher.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('voritor_dasher', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/dantooine/voritor_lizard.py b/scripts/mobiles/dantooine/voritor_lizard.py new file mode 100644 index 00000000..b8b72b90 --- /dev/null +++ b/scripts/mobiles/dantooine/voritor_lizard.py @@ -0,0 +1,43 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + mobileTemplate.setCreatureName('voritor_lizard') + mobileTemplate.setLevel(71) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(5) + mobileTemplate.setMaxSpawnDistance(10) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setMeatType("Carnivore Meat") + mobileTemplate.setMeatAmount(35) + mobileTemplate.setHideType("Leathery Hide") + mobileTemplate.setBoneAmount(25) + mobileTemplate.setBoneType("Avian Bone") + mobileTemplate.setHideAmount(30) + mobileTemplate.setSocialGroup("voritor lizard") + mobileTemplate.setAssistRange(12) + mobileTemplate.setStalker(True) + mobileTemplate.setOptionsBitmask(192) + + templates = Vector() + templates.add('object/mobile/shared_voritor_lizard.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('voritor_lizard', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/dathomir/alpha_bolma.py b/scripts/mobiles/dathomir/alpha_bolma.py new file mode 100644 index 00000000..b2d7c9e1 --- /dev/null +++ b/scripts/mobiles/dathomir/alpha_bolma.py @@ -0,0 +1,45 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('alpha_bolma') + mobileTemplate.setLevel(62) + mobileTemplate.setMinLevel(62) + mobileTemplate.setMaxLevel(65) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setMeatType("Wild Meat") + mobileTemplate.setMeatAmount(500) + mobileTemplate.setHideType("Leathery Hide") + mobileTemplate.setHideAmount(550) + mobileTemplate.setBoneType("Mammal Bones") + mobileTemplate.setBoneAmount(500) + mobileTemplate.setSocialGroup("bolma") + mobileTemplate.setAssistRange(12) + mobileTemplate.setStalker(False) + + templates = Vector() + templates.add('object/mobile/shared_bolma_hue.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('alpha_bolma', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/dathomir/ancient_reptilian_flier.py b/scripts/mobiles/dathomir/ancient_reptilian_flier.py new file mode 100644 index 00000000..62fbe3da --- /dev/null +++ b/scripts/mobiles/dathomir/ancient_reptilian_flier.py @@ -0,0 +1,45 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('ancient_reptilian_flier') + mobileTemplate.setLevel(68) + mobileTemplate.setMinLevel(68) + mobileTemplate.setMaxLevel(70) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setMeatType("Avian Meat") + mobileTemplate.setMeatAmount(135) + mobileTemplate.setHideType("Leathery Hide") + mobileTemplate.setHideAmount(90) + mobileTemplate.setBoneType("Avian Bones") + mobileTemplate.setBoneAmount(85) + mobileTemplate.setSocialGroup("reptilian flier") + mobileTemplate.setAssistRange(12) + mobileTemplate.setStalker(False) + + templates = Vector() + templates.add('object/mobile/shared_reptilian_flier_hue.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('ancient_reptilian_flier', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/dathomir/bane_back_spider.py b/scripts/mobiles/dathomir/bane_back_spider.py new file mode 100644 index 00000000..a6d65231 --- /dev/null +++ b/scripts/mobiles/dathomir/bane_back_spider.py @@ -0,0 +1,38 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('bio_engineered_bane_back') + mobileTemplate.setLevel(80) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(True) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("gaping") + mobileTemplate.setAssistRange(12) + mobileTemplate.setStalker(False) + mobileTemplate.setOptionsBitmask(192) + + templates = Vector() + templates.add('object/mobile/shared_gaping_hue.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('bane_back_spider', mobileTemplate) + return diff --git a/scripts/mobiles/dathomir/baz_nitch.py b/scripts/mobiles/dathomir/baz_nitch.py new file mode 100644 index 00000000..78854fc9 --- /dev/null +++ b/scripts/mobiles/dathomir/baz_nitch.py @@ -0,0 +1,43 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('baz_nitch') + mobileTemplate.setLevel(60) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(True) + mobileTemplate.setScale(1) + mobileTemplate.setMeatType("Wild Meat") + mobileTemplate.setMeatAmount(5) + mobileTemplate.setHideType("Leathery Hide") + mobileTemplate.setHideAmount(2) + mobileTemplate.setBoneType("Mammal Bones") + mobileTemplate.setBoneAmount(2) + mobileTemplate.setSocialGroup("baz nitch") + mobileTemplate.setAssistRange(12) + mobileTemplate.setStalker(False) + + templates = Vector() + templates.add('object/mobile/shared_baz_nitch_hue.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('baz_nitch', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/dathomir/bolma.py b/scripts/mobiles/dathomir/bolma.py new file mode 100644 index 00000000..61debf7b --- /dev/null +++ b/scripts/mobiles/dathomir/bolma.py @@ -0,0 +1,43 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('bolma') + mobileTemplate.setLevel(55) + mobileTemplate.setMinLevel(55) + mobileTemplate.setMaxLevel(55) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setHideType("Leathery Hide") + mobileTemplate.setHideAmount(160) + mobileTemplate.setBoneType("Mammal Bones") + mobileTemplate.setBoneAmount(150) + mobileTemplate.setSocialGroup("bolma") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(False) + + templates = Vector() + templates.add('object/mobile/shared_bolma_hue.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('bolma', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/dathomir/bolma_calf.py b/scripts/mobiles/dathomir/bolma_calf.py new file mode 100644 index 00000000..93009c87 --- /dev/null +++ b/scripts/mobiles/dathomir/bolma_calf.py @@ -0,0 +1,43 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('bolma_calf') + mobileTemplate.setLevel(60) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(.5) + mobileTemplate.setMeatType("Wild Meat") + mobileTemplate.setMeatAmount(175) + mobileTemplate.setHideType("Leathery Hide") + mobileTemplate.setHideAmount(160) + mobileTemplate.setBoneType("Mammal Bones") + mobileTemplate.setBoneAmount(150) + mobileTemplate.setSocialGroup("bolma") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(False) + + templates = Vector() + templates.add('object/mobile/shared_bolma_hue.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('bolma_calf', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/dathomir/bolma_female.py b/scripts/mobiles/dathomir/bolma_female.py new file mode 100644 index 00000000..f7e46729 --- /dev/null +++ b/scripts/mobiles/dathomir/bolma_female.py @@ -0,0 +1,43 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('bolma_female') + mobileTemplate.setLevel(60) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setMeatType("Wild Meat") + mobileTemplate.setMeatAmount(300) + mobileTemplate.setHideType("Leathery Hide") + mobileTemplate.setHideAmount(320) + mobileTemplate.setBoneType("Mammal Bones") + mobileTemplate.setBoneAmount(300) + mobileTemplate.setSocialGroup("bolma") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(False) + + templates = Vector() + templates.add('object/mobile/shared_bolma_hue.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('bolma_female', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/dathomir/bolma_male.py b/scripts/mobiles/dathomir/bolma_male.py new file mode 100644 index 00000000..45e2e69a --- /dev/null +++ b/scripts/mobiles/dathomir/bolma_male.py @@ -0,0 +1,43 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('bolma_male') + mobileTemplate.setLevel(60) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setMeatType("Wild Meat") + mobileTemplate.setMeatAmount(320) + mobileTemplate.setHideType("Leathery Hide") + mobileTemplate.setHideAmount(340) + mobileTemplate.setBoneType("Mammal Bones") + mobileTemplate.setBoneAmount(320) + mobileTemplate.setSocialGroup("bolma") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(False) + + templates = Vector() + templates.add('object/mobile/shared_bolma_hue.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('bolma_male', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/dathomir/bolma_pack_master.py b/scripts/mobiles/dathomir/bolma_pack_master.py new file mode 100644 index 00000000..41e3ab79 --- /dev/null +++ b/scripts/mobiles/dathomir/bolma_pack_master.py @@ -0,0 +1,41 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('bolma_pack_master') + mobileTemplate.setLevel(61) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1.2) + mobileTemplate.setHideType("Leathery Hide") + mobileTemplate.setHideAmount(160) + mobileTemplate.setBoneType("Mammal Bones") + mobileTemplate.setBoneAmount(150) + mobileTemplate.setSocialGroup("bolma") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(False) + + templates = Vector() + templates.add('object/mobile/shared_bolma_hue.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('bolma_pack_leader', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/dathomir/bolma_youth.py b/scripts/mobiles/dathomir/bolma_youth.py new file mode 100644 index 00000000..f57cf597 --- /dev/null +++ b/scripts/mobiles/dathomir/bolma_youth.py @@ -0,0 +1,41 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('bolma_youth') + mobileTemplate.setLevel(60) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setHideType("Leathery Hide") + mobileTemplate.setHideAmount(160) + mobileTemplate.setBoneType("Mammal Bones") + mobileTemplate.setBoneAmount(150) + mobileTemplate.setSocialGroup("bolma") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(False) + + templates = Vector() + templates.add('object/mobile/shared_bolma_hue.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('bolma_youth', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/dathomir/brackaset.py b/scripts/mobiles/dathomir/brackaset.py new file mode 100644 index 00000000..9ec9fe30 --- /dev/null +++ b/scripts/mobiles/dathomir/brackaset.py @@ -0,0 +1,45 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('brackaset') + mobileTemplate.setLevel(66) + mobileTemplate.setMinLevel(66) + mobileTemplate.setMaxLevel(6) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setMeatType("Wild Meat") + mobileTemplate.setMeatAmount(100) + mobileTemplate.setHideType("Leathery Hide") + mobileTemplate.setHideAmount(91) + mobileTemplate.setBoneType("Mammal Bones") + mobileTemplate.setBoneAmount(81) + mobileTemplate.setSocialGroup("brackaset") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(False) + + templates = Vector() + templates.add('object/mobile/shared_brackaset_hue.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('brackaset', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/dathomir/brackaset_female.py b/scripts/mobiles/dathomir/brackaset_female.py new file mode 100644 index 00000000..c40a29e6 --- /dev/null +++ b/scripts/mobiles/dathomir/brackaset_female.py @@ -0,0 +1,43 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('brackaset_female') + mobileTemplate.setLevel(64) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setMeatType("Wild Meat") + mobileTemplate.setMeatAmount(100) + mobileTemplate.setHideType("Leathery Hide") + mobileTemplate.setHideAmount(90) + mobileTemplate.setBoneType("Mammal Bones") + mobileTemplate.setBoneAmount(80) + mobileTemplate.setSocialGroup("brackaset") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(False) + + templates = Vector() + templates.add('object/mobile/shared_brackaset_hue.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('brackaset_female', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/dathomir/brackaset_male.py b/scripts/mobiles/dathomir/brackaset_male.py new file mode 100644 index 00000000..0db9fd64 --- /dev/null +++ b/scripts/mobiles/dathomir/brackaset_male.py @@ -0,0 +1,43 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('brackaset_male') + mobileTemplate.setLevel(65) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setMeatType("Wild Meat") + mobileTemplate.setMeatAmount(100) + mobileTemplate.setHideType("Leathery Hide") + mobileTemplate.setHideAmount(91) + mobileTemplate.setBoneType("Mammal Bones") + mobileTemplate.setBoneAmount(81) + mobileTemplate.setSocialGroup("brackaset") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(False) + + templates = Vector() + templates.add('object/mobile/shared_brackaset_hue.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('brackaset_male', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/dathomir/bull_rancor.py b/scripts/mobiles/dathomir/bull_rancor.py new file mode 100644 index 00000000..4d9e798b --- /dev/null +++ b/scripts/mobiles/dathomir/bull_rancor.py @@ -0,0 +1,44 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('bull_rancor') + mobileTemplate.setLevel(65) + mobileTemplate.setDifficulty(1) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(True) + mobileTemplate.setScale(1) + mobileTemplate.setMeatType("Carnivore Meat") + mobileTemplate.setMeatAmount(1020) + mobileTemplate.setHideType("Leathery Hide") + mobileTemplate.setHideAmount(900) + mobileTemplate.setBoneType("Mammal Bones") + mobileTemplate.setBoneAmount(850) + mobileTemplate.setSocialGroup("rancor") + mobileTemplate.setAssistRange(12) + mobileTemplate.setStalker(False) + mobileTemplate.setOptionsBitmask(192) + + templates = Vector() + templates.add('object/mobile/shared_rancor_hue.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('bull_rancor', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/dathomir/nightsister_elder.py b/scripts/mobiles/dathomir/nightsister_elder.py new file mode 100644 index 00000000..3531fec8 --- /dev/null +++ b/scripts/mobiles/dathomir/nightsister_elder.py @@ -0,0 +1,61 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('nightsister_elder') + mobileTemplate.setLevel(82) + mobileTemplate.setDifficulty(2) + mobileTemplate.setAttackRange(6) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(4) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(6) + mobileTemplate.setDeathblow(True) + mobileTemplate.setSocialGroup('nightsister') + mobileTemplate.setAssistRange(12) + mobileTemplate.setRespawnTime(300) + mobileTemplate.setOptionsBitmask(192) + + templates = Vector() + templates.add('object/mobile/shared_dressed_dathomir_nightsister_elder.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/sword/shared_sword_01.iff', 4, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('meleehit') + mobileTemplate.setAttacks(attacks) + + lootPoolNames_1 = ['Junk'] + lootPoolChances_1 = [100] + lootGroupChance_1 = 65 + mobileTemplate.addToLootGroups(lootPoolNames_1,lootPoolChances_1,lootGroupChance_1) + + lootPoolNames_2 = ['jedi_relic_1'] + lootPoolChances_2 = [100] + lootGroupChance_2 = 85 + mobileTemplate.addToLootGroups(lootPoolNames_2,lootPoolChances_2,lootGroupChance_2) + + lootPoolNames_3 = ['powercrystals_hiq'] + lootPoolChances_3 = [100] + lootGroupChance_3 = 12 + mobileTemplate.addToLootGroups(lootPoolNames_3,lootPoolChances_3,lootGroupChance_3) + + lootPoolNames_4 = ['random_stat_jewelry'] + lootPoolChances_4 = [100] + lootGroupChance_4 = 8 + mobileTemplate.addToLootGroups(lootPoolNames_4,lootPoolChances_4,lootGroupChance_4) + + lootPoolNames_5 = ['sithholocrons'] + lootPoolChances_5 = [100] + lootGroupChance_5 = 3 + mobileTemplate.addToLootGroups(lootPoolNames_5,lootPoolChances_5,lootGroupChance_5) + + core.spawnService.addMobileTemplate('nightsister_elder', mobileTemplate) \ No newline at end of file diff --git a/scripts/mobiles/dathomir/nightsister_initiate.py b/scripts/mobiles/dathomir/nightsister_initiate.py new file mode 100644 index 00000000..30290e6b --- /dev/null +++ b/scripts/mobiles/dathomir/nightsister_initiate.py @@ -0,0 +1,48 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('nightsister_initiate') + mobileTemplate.setLevel(76) + mobileTemplate.setDifficulty(1) + mobileTemplate.setAttackRange(6) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(4) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(6) + mobileTemplate.setDeathblow(True) + mobileTemplate.setStalker(True) + mobileTemplate.setSocialGroup('nightsister') + mobileTemplate.setAssistRange(12) + mobileTemplate.setRespawnTime(300) + mobileTemplate.setOptionsBitmask(192) + + templates = Vector() + templates.add('object/mobile/shared_dressed_dathomir_nightsister_initiate.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/sword/shared_sword_01.iff', 4, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('meleehit') + mobileTemplate.setAttacks(attacks) + + lootPoolNames_1 = ['Junk'] + lootPoolChances_1 = [100] + lootGroupChance_1 = 65 + mobileTemplate.addToLootGroups(lootPoolNames_1,lootPoolChances_1,lootGroupChance_1) + + lootPoolNames_2 = ['jedi_relic_1'] + lootPoolChances_2 = [100] + lootGroupChance_2 = 85 + mobileTemplate.addToLootGroups(lootPoolNames_2,lootPoolChances_2,lootGroupChance_2) + + + core.spawnService.addMobileTemplate('nightsister_initiate', mobileTemplate) \ No newline at end of file diff --git a/scripts/mobiles/dathomir/nightsister_outcast.py b/scripts/mobiles/dathomir/nightsister_outcast.py new file mode 100644 index 00000000..f87f5f19 --- /dev/null +++ b/scripts/mobiles/dathomir/nightsister_outcast.py @@ -0,0 +1,56 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('nightsister_outcast') + mobileTemplate.setLevel(76) + mobileTemplate.setDifficulty(1) + mobileTemplate.setAttackRange(6) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(4) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(6) + mobileTemplate.setDeathblow(True) + mobileTemplate.setSocialGroup('nightsister') + mobileTemplate.setAssistRange(12) + mobileTemplate.setRespawnTime(300) + mobileTemplate.setOptionsBitmask(192) + + templates = Vector() + templates.add('object/mobile/shared_dressed_dathomir_nightsister_outcast.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/sword/shared_sword_01.iff', 4, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('meleehit') + mobileTemplate.setAttacks(attacks) + + lootPoolNames_1 = ['Junk'] + lootPoolChances_1 = [100] + lootGroupChance_1 = 65 + mobileTemplate.addToLootGroups(lootPoolNames_1,lootPoolChances_1,lootGroupChance_1) + + lootPoolNames_2 = ['jedi_relic_1'] + lootPoolChances_2 = [100] + lootGroupChance_2 = 85 + mobileTemplate.addToLootGroups(lootPoolNames_2,lootPoolChances_2,lootGroupChance_2) + + lootPoolNames_3 = ['powercrystals_hiq'] + lootPoolChances_3 = [100] + lootGroupChance_3 = 12 + mobileTemplate.addToLootGroups(lootPoolNames_3,lootPoolChances_3,lootGroupChance_3) + + lootPoolNames_5 = ['sithholocrons'] + lootPoolChances_5 = [100] + lootGroupChance_5 = 3 + mobileTemplate.addToLootGroups(lootPoolNames_5,lootPoolChances_5,lootGroupChance_5) + + core.spawnService.addMobileTemplate('nightsister_outcast', mobileTemplate) \ No newline at end of file diff --git a/scripts/mobiles/dathomir/nightsister_protector.py b/scripts/mobiles/dathomir/nightsister_protector.py new file mode 100644 index 00000000..adcb0d07 --- /dev/null +++ b/scripts/mobiles/dathomir/nightsister_protector.py @@ -0,0 +1,56 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('nightsister_protector') + mobileTemplate.setLevel(81) + mobileTemplate.setDifficulty(1) + mobileTemplate.setAttackRange(6) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(4) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(6) + mobileTemplate.setDeathblow(True) + mobileTemplate.setSocialGroup('nightsister') + mobileTemplate.setAssistRange(12) + mobileTemplate.setRespawnTime(300) + mobileTemplate.setOptionsBitmask(192) + + templates = Vector() + templates.add('object/mobile/shared_dressed_dathomir_nightsister_protector.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/sword/shared_sword_01.iff', 4, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('meleehit') + mobileTemplate.setAttacks(attacks) + + lootPoolNames_1 = ['Junk'] + lootPoolChances_1 = [100] + lootGroupChance_1 = 65 + mobileTemplate.addToLootGroups(lootPoolNames_1,lootPoolChances_1,lootGroupChance_1) + + lootPoolNames_2 = ['jedi_relic_1'] + lootPoolChances_2 = [100] + lootGroupChance_2 = 85 + mobileTemplate.addToLootGroups(lootPoolNames_2,lootPoolChances_2,lootGroupChance_2) + + lootPoolNames_4 = ['random_stat_jewelry'] + lootPoolChances_4 = [100] + lootGroupChance_4 = 8 + mobileTemplate.addToLootGroups(lootPoolNames_4,lootPoolChances_4,lootGroupChance_4) + + lootPoolNames_5 = ['sithholocrons'] + lootPoolChances_5 = [100] + lootGroupChance_5 = 3 + mobileTemplate.addToLootGroups(lootPoolNames_5,lootPoolChances_5,lootGroupChance_5) + + core.spawnService.addMobileTemplate('nightsister_protector', mobileTemplate) \ No newline at end of file diff --git a/scripts/mobiles/dathomir/nightsister_rancor.py b/scripts/mobiles/dathomir/nightsister_rancor.py new file mode 100644 index 00000000..1a783345 --- /dev/null +++ b/scripts/mobiles/dathomir/nightsister_rancor.py @@ -0,0 +1,36 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('nightsister_rancor') + mobileTemplate.setLevel(80) + mobileTemplate.setDifficulty(1) + mobileTemplate.setAttackRange(6) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(4) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(6) + mobileTemplate.setDeathblow(True) + mobileTemplate.setSocialGroup('nightsister') + mobileTemplate.setAssistRange(12) + mobileTemplate.setRespawnTime(300) + mobileTemplate.setOptionsBitmask(192) + + templates = Vector() + templates.add('object/mobile/shared_rancor.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('nightsister_rancor', mobileTemplate) \ No newline at end of file diff --git a/scripts/mobiles/dathomir/nightsister_rancor_tamer.py b/scripts/mobiles/dathomir/nightsister_rancor_tamer.py new file mode 100644 index 00000000..dc77680f --- /dev/null +++ b/scripts/mobiles/dathomir/nightsister_rancor_tamer.py @@ -0,0 +1,56 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('nightsister_rancor_tamer') + mobileTemplate.setLevel(79) + mobileTemplate.setDifficulty(1) + mobileTemplate.setAttackRange(6) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(4) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(6) + mobileTemplate.setDeathblow(True) + mobileTemplate.setSocialGroup('nightsister') + mobileTemplate.setAssistRange(12) + mobileTemplate.setRespawnTime(300) + mobileTemplate.setOptionsBitmask(192) + + templates = Vector() + templates.add('object/mobile/shared_dressed_dathomir_nightsister_rancor_tamer.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/sword/shared_sword_01.iff', 4, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('meleehit') + mobileTemplate.setAttacks(attacks) + + lootPoolNames_1 = ['Junk'] + lootPoolChances_1 = [100] + lootGroupChance_1 = 65 + mobileTemplate.addToLootGroups(lootPoolNames_1,lootPoolChances_1,lootGroupChance_1) + + lootPoolNames_2 = ['jedi_relic_1'] + lootPoolChances_2 = [100] + lootGroupChance_2 = 85 + mobileTemplate.addToLootGroups(lootPoolNames_2,lootPoolChances_2,lootGroupChance_2) + + lootPoolNames_4 = ['random_stat_jewelry'] + lootPoolChances_4 = [100] + lootGroupChance_4 = 8 + mobileTemplate.addToLootGroups(lootPoolNames_4,lootPoolChances_4,lootGroupChance_4) + + lootPoolNames_5 = ['sithholocrons'] + lootPoolChances_5 = [100] + lootGroupChance_5 = 3 + mobileTemplate.addToLootGroups(lootPoolNames_5,lootPoolChances_5,lootGroupChance_5) + + core.spawnService.addMobileTemplate('nightsister_rancor_tamer', mobileTemplate) \ No newline at end of file diff --git a/scripts/mobiles/dathomir/nightsister_ranger.py b/scripts/mobiles/dathomir/nightsister_ranger.py new file mode 100644 index 00000000..3c474823 --- /dev/null +++ b/scripts/mobiles/dathomir/nightsister_ranger.py @@ -0,0 +1,57 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('nightsister_ranger') + mobileTemplate.setLevel(79) + mobileTemplate.setDifficulty(1) + mobileTemplate.setAttackRange(6) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(4) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(6) + mobileTemplate.setDeathblow(True) + mobileTemplate.setStalker(True) + mobileTemplate.setSocialGroup('nightsister') + mobileTemplate.setAssistRange(12) + mobileTemplate.setRespawnTime(300) + mobileTemplate.setOptionsBitmask(192) + + templates = Vector() + templates.add('object/mobile/shared_dressed_dathomir_nightsister_ranger.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/sword/shared_sword_01.iff', 4, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('meleehit') + mobileTemplate.setAttacks(attacks) + + lootPoolNames_1 = ['Junk'] + lootPoolChances_1 = [100] + lootGroupChance_1 = 65 + mobileTemplate.addToLootGroups(lootPoolNames_1,lootPoolChances_1,lootGroupChance_1) + + lootPoolNames_2 = ['jedi_relic_1'] + lootPoolChances_2 = [100] + lootGroupChance_2 = 85 + mobileTemplate.addToLootGroups(lootPoolNames_2,lootPoolChances_2,lootGroupChance_2) + + lootPoolNames_4 = ['random_stat_jewelry'] + lootPoolChances_4 = [100] + lootGroupChance_4 = 8 + mobileTemplate.addToLootGroups(lootPoolNames_4,lootPoolChances_4,lootGroupChance_4) + + lootPoolNames_5 = ['sithholocrons'] + lootPoolChances_5 = [100] + lootGroupChance_5 = 3 + mobileTemplate.addToLootGroups(lootPoolNames_5,lootPoolChances_5,lootGroupChance_5) + + core.spawnService.addMobileTemplate('nightsister_ranger', mobileTemplate) \ No newline at end of file diff --git a/scripts/mobiles/dathomir/nightsister_sentinel.py b/scripts/mobiles/dathomir/nightsister_sentinel.py new file mode 100644 index 00000000..75158183 --- /dev/null +++ b/scripts/mobiles/dathomir/nightsister_sentinel.py @@ -0,0 +1,56 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('nightsister_sentinal') + mobileTemplate.setLevel(80) + mobileTemplate.setDifficulty(1) + mobileTemplate.setAttackRange(6) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(4) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(6) + mobileTemplate.setDeathblow(True) + mobileTemplate.setSocialGroup('nightsister') + mobileTemplate.setAssistRange(12) + mobileTemplate.setRespawnTime(300) + mobileTemplate.setOptionsBitmask(192) + + templates = Vector() + templates.add('object/mobile/shared_dressed_dathomir_nightsister_sentinal.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/sword/shared_sword_01.iff', 4, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('meleehit') + mobileTemplate.setAttacks(attacks) + + lootPoolNames_1 = ['Junk'] + lootPoolChances_1 = [100] + lootGroupChance_1 = 65 + mobileTemplate.addToLootGroups(lootPoolNames_1,lootPoolChances_1,lootGroupChance_1) + + lootPoolNames_2 = ['jedi_relic_1'] + lootPoolChances_2 = [100] + lootGroupChance_2 = 85 + mobileTemplate.addToLootGroups(lootPoolNames_2,lootPoolChances_2,lootGroupChance_2) + + lootPoolNames_4 = ['random_stat_jewelry'] + lootPoolChances_4 = [100] + lootGroupChance_4 = 8 + mobileTemplate.addToLootGroups(lootPoolNames_4,lootPoolChances_4,lootGroupChance_4) + + lootPoolNames_5 = ['sithholocrons'] + lootPoolChances_5 = [100] + lootGroupChance_5 = 3 + mobileTemplate.addToLootGroups(lootPoolNames_5,lootPoolChances_5,lootGroupChance_5) + + core.spawnService.addMobileTemplate('nightsister_sentinal', mobileTemplate) \ No newline at end of file diff --git a/scripts/mobiles/dathomir/nightsister_sentry.py b/scripts/mobiles/dathomir/nightsister_sentry.py new file mode 100644 index 00000000..160e6232 --- /dev/null +++ b/scripts/mobiles/dathomir/nightsister_sentry.py @@ -0,0 +1,56 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('nightsister_sentry') + mobileTemplate.setLevel(77) + mobileTemplate.setDifficulty(1) + mobileTemplate.setAttackRange(6) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(4) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(6) + mobileTemplate.setDeathblow(True) + mobileTemplate.setSocialGroup('nightsister') + mobileTemplate.setAssistRange(12) + mobileTemplate.setRespawnTime(300) + mobileTemplate.setOptionsBitmask(192) + + templates = Vector() + templates.add('object/mobile/shared_dressed_dathomir_nightsister_stalker.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/sword/shared_sword_01.iff', 4, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('meleehit') + mobileTemplate.setAttacks(attacks) + + lootPoolNames_1 = ['Junk'] + lootPoolChances_1 = [100] + lootGroupChance_1 = 65 + mobileTemplate.addToLootGroups(lootPoolNames_1,lootPoolChances_1,lootGroupChance_1) + + lootPoolNames_2 = ['jedi_relic_1'] + lootPoolChances_2 = [100] + lootGroupChance_2 = 85 + mobileTemplate.addToLootGroups(lootPoolNames_2,lootPoolChances_2,lootGroupChance_2) + + lootPoolNames_4 = ['random_stat_jewelry'] + lootPoolChances_4 = [100] + lootGroupChance_4 = 8 + mobileTemplate.addToLootGroups(lootPoolNames_4,lootPoolChances_4,lootGroupChance_4) + + lootPoolNames_5 = ['sithholocrons'] + lootPoolChances_5 = [100] + lootGroupChance_5 = 3 + mobileTemplate.addToLootGroups(lootPoolNames_5,lootPoolChances_5,lootGroupChance_5) + + core.spawnService.addMobileTemplate('nightsister_sentry', mobileTemplate) \ No newline at end of file diff --git a/scripts/mobiles/dathomir/nightsister_slave.py b/scripts/mobiles/dathomir/nightsister_slave.py new file mode 100644 index 00000000..88e64f2b --- /dev/null +++ b/scripts/mobiles/dathomir/nightsister_slave.py @@ -0,0 +1,32 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('nightsister_slave') + mobileTemplate.setLevel(86) + mobileTemplate.setDifficulty(1) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setOptionsBitmask(192) + + templates = Vector() + templates.add('object/mobile/shared_dressed_dathomir_nightsister_slave.iff') + mobileTemplate.setTemplates(templates) + + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + + + core.spawnService.addMobileTemplate('nightsister_slave', mobileTemplate) \ No newline at end of file diff --git a/scripts/mobiles/dathomir/nightsister_spell_weaver.py b/scripts/mobiles/dathomir/nightsister_spell_weaver.py new file mode 100644 index 00000000..cc12a19a --- /dev/null +++ b/scripts/mobiles/dathomir/nightsister_spell_weaver.py @@ -0,0 +1,56 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('nightsister_spell_weaver') + mobileTemplate.setLevel(81) + mobileTemplate.setDifficulty(1) + mobileTemplate.setAttackRange(6) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(4) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(6) + mobileTemplate.setDeathblow(True) + mobileTemplate.setSocialGroup('nightsister') + mobileTemplate.setAssistRange(12) + mobileTemplate.setRespawnTime(300) + mobileTemplate.setOptionsBitmask(192) + + templates = Vector() + templates.add('object/mobile/shared_dressed_dathomir_nightsister_spellweaver.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/sword/shared_sword_01.iff', 4, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('meleehit') + mobileTemplate.setAttacks(attacks) + + lootPoolNames_1 = ['Junk'] + lootPoolChances_1 = [100] + lootGroupChance_1 = 65 + mobileTemplate.addToLootGroups(lootPoolNames_1,lootPoolChances_1,lootGroupChance_1) + + lootPoolNames_2 = ['jedi_relic_1'] + lootPoolChances_2 = [100] + lootGroupChance_2 = 85 + mobileTemplate.addToLootGroups(lootPoolNames_2,lootPoolChances_2,lootGroupChance_2) + + lootPoolNames_4 = ['random_stat_jewelry'] + lootPoolChances_4 = [100] + lootGroupChance_4 = 8 + mobileTemplate.addToLootGroups(lootPoolNames_4,lootPoolChances_4,lootGroupChance_4) + + lootPoolNames_5 = ['sithholocrons'] + lootPoolChances_5 = [100] + lootGroupChance_5 = 3 + mobileTemplate.addToLootGroups(lootPoolNames_5,lootPoolChances_5,lootGroupChance_5) + + core.spawnService.addMobileTemplate('nightsister_spell_weaver', mobileTemplate) \ No newline at end of file diff --git a/scripts/mobiles/dathomir/nightsister_stalker.py b/scripts/mobiles/dathomir/nightsister_stalker.py new file mode 100644 index 00000000..53a0a500 --- /dev/null +++ b/scripts/mobiles/dathomir/nightsister_stalker.py @@ -0,0 +1,57 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('nightsister_stalker') + mobileTemplate.setLevel(81) + mobileTemplate.setDifficulty(1) + mobileTemplate.setAttackRange(6) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(4) + mobileTemplate.setMinSpawnDistance(6) + mobileTemplate.setMaxSpawnDistance(10) + mobileTemplate.setDeathblow(True) + mobileTemplate.setStalker(True) + mobileTemplate.setSocialGroup('nightsister') + mobileTemplate.setAssistRange(12) + mobileTemplate.setRespawnTime(300) + mobileTemplate.setOptionsBitmask(192) + + templates = Vector() + templates.add('object/mobile/shared_dressed_dathomir_nightsister_stalker.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/sword/shared_sword_01.iff', 4, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('meleehit') + mobileTemplate.setAttacks(attacks) + + lootPoolNames_1 = ['Junk'] + lootPoolChances_1 = [100] + lootGroupChance_1 = 65 + mobileTemplate.addToLootGroups(lootPoolNames_1,lootPoolChances_1,lootGroupChance_1) + + lootPoolNames_2 = ['jedi_relic_1'] + lootPoolChances_2 = [100] + lootGroupChance_2 = 85 + mobileTemplate.addToLootGroups(lootPoolNames_2,lootPoolChances_2,lootGroupChance_2) + + lootPoolNames_4 = ['random_stat_jewelry'] + lootPoolChances_4 = [100] + lootGroupChance_4 = 8 + mobileTemplate.addToLootGroups(lootPoolNames_4,lootPoolChances_4,lootGroupChance_4) + + lootPoolNames_5 = ['sithholocrons'] + lootPoolChances_5 = [100] + lootGroupChance_5 = 3 + mobileTemplate.addToLootGroups(lootPoolNames_5,lootPoolChances_5,lootGroupChance_5) + + core.spawnService.addMobileTemplate('nightsister_stalker', mobileTemplate) \ No newline at end of file diff --git a/scripts/mobiles/dathomir/rancor.py b/scripts/mobiles/dathomir/rancor.py new file mode 100644 index 00000000..06211eee --- /dev/null +++ b/scripts/mobiles/dathomir/rancor.py @@ -0,0 +1,23 @@ +import sys +from services.spawn import MobileTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('rancor') + mobileTemplate.setLevel(50) + mobileTemplate.setDifficulty(1) + mobileTemplate.setAttackRange(5) + mobileTemplate.setOptionsBitmask(192) + + templates = Vector() + templates.add('object/mobile/shared_rancor.iff') + mobileTemplate.setTemplates(templates) + + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('rancor', mobileTemplate) \ No newline at end of file diff --git a/scripts/mobiles/dathomir/singing_mountain_clan_rancor.py b/scripts/mobiles/dathomir/singing_mountain_clan_rancor.py new file mode 100644 index 00000000..47ff1b5e --- /dev/null +++ b/scripts/mobiles/dathomir/singing_mountain_clan_rancor.py @@ -0,0 +1,36 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('singing_mountain_clan_rancor') + mobileTemplate.setLevel(80) + mobileTemplate.setDifficulty(1) + mobileTemplate.setAttackRange(6) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(4) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(6) + mobileTemplate.setDeathblow(True) + mobileTemplate.setSocialGroup('mountain clan') + mobileTemplate.setAssistRange(12) + mobileTemplate.setRespawnTime(300) + mobileTemplate.setOptionsBitmask(192) + + templates = Vector() + templates.add('object/mobile/shared_rancor.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('singing_mountain_clan_rancor', mobileTemplate) \ No newline at end of file diff --git a/scripts/mobiles/dathomir/singing_mountain_clan_sentry.py b/scripts/mobiles/dathomir/singing_mountain_clan_sentry.py new file mode 100644 index 00000000..ea81eb8e --- /dev/null +++ b/scripts/mobiles/dathomir/singing_mountain_clan_sentry.py @@ -0,0 +1,56 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('singing_mountain_clan_sentry') + mobileTemplate.setLevel(76) + mobileTemplate.setDifficulty(1) + mobileTemplate.setAttackRange(6) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(4) + mobileTemplate.setMinSpawnDistance(6) + mobileTemplate.setMaxSpawnDistance(10) + mobileTemplate.setDeathblow(False) + mobileTemplate.setSocialGroup('mountain clan') + mobileTemplate.setAssistRange(12) + mobileTemplate.setRespawnTime(300) + mobileTemplate.setOptionsBitmask(192) + + templates = Vector() + templates.add('object/mobile/shared_dressed_dathomir_sing_mt_clan_sentry.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/polearm/shared_lance_staff_wood_s1.iff', 7, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('meleehit') + mobileTemplate.setAttacks(attacks) + + lootPoolNames_1 = ['Junk'] + lootPoolChances_1 = [100] + lootGroupChance_1 = 65 + mobileTemplate.addToLootGroups(lootPoolNames_1,lootPoolChances_1,lootGroupChance_1) + + lootPoolNames_2 = ['jedi_relic_1'] + lootPoolChances_2 = [100] + lootGroupChance_2 = 85 + mobileTemplate.addToLootGroups(lootPoolNames_2,lootPoolChances_2,lootGroupChance_2) + + lootPoolNames_4 = ['random_stat_jewelry'] + lootPoolChances_4 = [100] + lootGroupChance_4 = 8 + mobileTemplate.addToLootGroups(lootPoolNames_4,lootPoolChances_4,lootGroupChance_4) + + lootPoolNames_5 = ['sithholocrons'] + lootPoolChances_5 = [100] + lootGroupChance_5 = 3 + mobileTemplate.addToLootGroups(lootPoolNames_5,lootPoolChances_5,lootGroupChance_5) + + core.spawnService.addMobileTemplate('singing_mountain_clan_sentry', mobileTemplate) \ No newline at end of file diff --git a/scripts/mobiles/dathomir/singing_mtn_clan_arch_witch.py b/scripts/mobiles/dathomir/singing_mtn_clan_arch_witch.py new file mode 100644 index 00000000..d8028835 --- /dev/null +++ b/scripts/mobiles/dathomir/singing_mtn_clan_arch_witch.py @@ -0,0 +1,56 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('singing_mtn_clan_arch_witch') + mobileTemplate.setLevel(80) + mobileTemplate.setDifficulty(1) + mobileTemplate.setAttackRange(6) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(4) + mobileTemplate.setMinSpawnDistance(6) + mobileTemplate.setMaxSpawnDistance(10) + mobileTemplate.setDeathblow(True) + mobileTemplate.setSocialGroup('mountain clan') + mobileTemplate.setAssistRange(12) + mobileTemplate.setRespawnTime(300) + mobileTemplate.setOptionsBitmask(192) + + templates = Vector() + templates.add('object/mobile/shared_dressed_dathomir_sing_mt_clan_arch_witch.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/sword/shared_sword_01.iff', 4, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('meleehit') + mobileTemplate.setAttacks(attacks) + + lootPoolNames_1 = ['Junk'] + lootPoolChances_1 = [100] + lootGroupChance_1 = 65 + mobileTemplate.addToLootGroups(lootPoolNames_1,lootPoolChances_1,lootGroupChance_1) + + lootPoolNames_2 = ['jedi_relic_1'] + lootPoolChances_2 = [100] + lootGroupChance_2 = 85 + mobileTemplate.addToLootGroups(lootPoolNames_2,lootPoolChances_2,lootGroupChance_2) + + lootPoolNames_4 = ['random_stat_jewelry'] + lootPoolChances_4 = [100] + lootGroupChance_4 = 8 + mobileTemplate.addToLootGroups(lootPoolNames_4,lootPoolChances_4,lootGroupChance_4) + + lootPoolNames_5 = ['sithholocrons'] + lootPoolChances_5 = [100] + lootGroupChance_5 = 3 + mobileTemplate.addToLootGroups(lootPoolNames_5,lootPoolChances_5,lootGroupChance_5) + + core.spawnService.addMobileTemplate('singing_mtn_clan_arch_witch', mobileTemplate) \ No newline at end of file diff --git a/scripts/mobiles/dathomir/singing_mtn_clan_councilwoman.py b/scripts/mobiles/dathomir/singing_mtn_clan_councilwoman.py new file mode 100644 index 00000000..388b3f29 --- /dev/null +++ b/scripts/mobiles/dathomir/singing_mtn_clan_councilwoman.py @@ -0,0 +1,61 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('singing_mtn_clan_councilwoman') + mobileTemplate.setLevel(80) + mobileTemplate.setDifficulty(2) + mobileTemplate.setAttackRange(6) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(4) + mobileTemplate.setMinSpawnDistance(6) + mobileTemplate.setMaxSpawnDistance(10) + mobileTemplate.setDeathblow(True) + mobileTemplate.setSocialGroup('mountain clan') + mobileTemplate.setAssistRange(12) + mobileTemplate.setRespawnTime(300) + mobileTemplate.setOptionsBitmask(192) + + templates = Vector() + templates.add('object/mobile/shared_dressed_dathomir_sing_mt_clan_councilwoman.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/sword/shared_sword_01.iff', 4, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('meleehit') + mobileTemplate.setAttacks(attacks) + + lootPoolNames_1 = ['Junk'] + lootPoolChances_1 = [100] + lootGroupChance_1 = 65 + mobileTemplate.addToLootGroups(lootPoolNames_1,lootPoolChances_1,lootGroupChance_1) + + lootPoolNames_2 = ['jedi_relic_1'] + lootPoolChances_2 = [100] + lootGroupChance_2 = 85 + mobileTemplate.addToLootGroups(lootPoolNames_2,lootPoolChances_2,lootGroupChance_2) + + lootPoolNames_3 = ['powercrystals_hiq'] + lootPoolChances_3 = [100] + lootGroupChance_3 = 12 + mobileTemplate.addToLootGroups(lootPoolNames_3,lootPoolChances_3,lootGroupChance_3) + + lootPoolNames_4 = ['random_stat_jewelry'] + lootPoolChances_4 = [100] + lootGroupChance_4 = 8 + mobileTemplate.addToLootGroups(lootPoolNames_4,lootPoolChances_4,lootGroupChance_4) + + lootPoolNames_5 = ['sithholocrons'] + lootPoolChances_5 = [100] + lootGroupChance_5 = 3 + mobileTemplate.addToLootGroups(lootPoolNames_5,lootPoolChances_5,lootGroupChance_5) + + core.spawnService.addMobileTemplate('singing_mtn_clan_councilwoman', mobileTemplate) \ No newline at end of file diff --git a/scripts/mobiles/dathomir/singing_mtn_clan_dragoon.py b/scripts/mobiles/dathomir/singing_mtn_clan_dragoon.py new file mode 100644 index 00000000..2bc60d7e --- /dev/null +++ b/scripts/mobiles/dathomir/singing_mtn_clan_dragoon.py @@ -0,0 +1,56 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('singing_mtn_clan_dragoon') + mobileTemplate.setLevel(80) + mobileTemplate.setDifficulty(1) + mobileTemplate.setAttackRange(6) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(4) + mobileTemplate.setMinSpawnDistance(6) + mobileTemplate.setMaxSpawnDistance(10) + mobileTemplate.setDeathblow(True) + mobileTemplate.setSocialGroup('mountain clan') + mobileTemplate.setAssistRange(12) + mobileTemplate.setRespawnTime(300) + mobileTemplate.setOptionsBitmask(192) + + templates = Vector() + templates.add('object/mobile/shared_dressed_dathomir_sing_mt_clan_dragoon.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/sword/shared_sword_01.iff', 4, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('meleehit') + mobileTemplate.setAttacks(attacks) + + lootPoolNames_1 = ['Junk'] + lootPoolChances_1 = [100] + lootGroupChance_1 = 65 + mobileTemplate.addToLootGroups(lootPoolNames_1,lootPoolChances_1,lootGroupChance_1) + + lootPoolNames_2 = ['jedi_relic_1'] + lootPoolChances_2 = [100] + lootGroupChance_2 = 85 + mobileTemplate.addToLootGroups(lootPoolNames_2,lootPoolChances_2,lootGroupChance_2) + + lootPoolNames_4 = ['random_stat_jewelry'] + lootPoolChances_4 = [100] + lootGroupChance_4 = 8 + mobileTemplate.addToLootGroups(lootPoolNames_4,lootPoolChances_4,lootGroupChance_4) + + lootPoolNames_5 = ['sithholocrons'] + lootPoolChances_5 = [100] + lootGroupChance_5 = 3 + mobileTemplate.addToLootGroups(lootPoolNames_5,lootPoolChances_5,lootGroupChance_5) + + core.spawnService.addMobileTemplate('singing_mtn_clan_dragoon', mobileTemplate) \ No newline at end of file diff --git a/scripts/mobiles/dathomir/singing_mtn_clan_guardian.py b/scripts/mobiles/dathomir/singing_mtn_clan_guardian.py new file mode 100644 index 00000000..863823ec --- /dev/null +++ b/scripts/mobiles/dathomir/singing_mtn_clan_guardian.py @@ -0,0 +1,56 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('singing_mtn_clan_guardian') + mobileTemplate.setLevel(80) + mobileTemplate.setDifficulty(1) + mobileTemplate.setAttackRange(6) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(4) + mobileTemplate.setMinSpawnDistance(6) + mobileTemplate.setMaxSpawnDistance(10) + mobileTemplate.setDeathblow(True) + mobileTemplate.setSocialGroup('mountain clan') + mobileTemplate.setAssistRange(12) + mobileTemplate.setRespawnTime(300) + mobileTemplate.setOptionsBitmask(192) + + templates = Vector() + templates.add('object/mobile/shared_dressed_dathomir_sing_mt_clan_guardian.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/sword/shared_sword_01.iff', 4, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('meleehit') + mobileTemplate.setAttacks(attacks) + + lootPoolNames_1 = ['Junk'] + lootPoolChances_1 = [100] + lootGroupChance_1 = 65 + mobileTemplate.addToLootGroups(lootPoolNames_1,lootPoolChances_1,lootGroupChance_1) + + lootPoolNames_2 = ['jedi_relic_1'] + lootPoolChances_2 = [100] + lootGroupChance_2 = 85 + mobileTemplate.addToLootGroups(lootPoolNames_2,lootPoolChances_2,lootGroupChance_2) + + lootPoolNames_4 = ['random_stat_jewelry'] + lootPoolChances_4 = [100] + lootGroupChance_4 = 8 + mobileTemplate.addToLootGroups(lootPoolNames_4,lootPoolChances_4,lootGroupChance_4) + + lootPoolNames_5 = ['sithholocrons'] + lootPoolChances_5 = [100] + lootGroupChance_5 = 3 + mobileTemplate.addToLootGroups(lootPoolNames_5,lootPoolChances_5,lootGroupChance_5) + + core.spawnService.addMobileTemplate('singing_mtn_clan_guardian', mobileTemplate) \ No newline at end of file diff --git a/scripts/mobiles/dathomir/singing_mtn_clan_huntress.py b/scripts/mobiles/dathomir/singing_mtn_clan_huntress.py new file mode 100644 index 00000000..592a0d44 --- /dev/null +++ b/scripts/mobiles/dathomir/singing_mtn_clan_huntress.py @@ -0,0 +1,57 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('singing_mtn_clan_huntress') + mobileTemplate.setLevel(79) + mobileTemplate.setDifficulty(1) + mobileTemplate.setAttackRange(6) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(4) + mobileTemplate.setMinSpawnDistance(6) + mobileTemplate.setMaxSpawnDistance(10) + mobileTemplate.setDeathblow(True) + mobileTemplate.setStalker(True) + mobileTemplate.setSocialGroup('mountain clan') + mobileTemplate.setAssistRange(12) + mobileTemplate.setRespawnTime(300) + mobileTemplate.setOptionsBitmask(192) + + templates = Vector() + templates.add('object/mobile/shared_dressed_dathomir_sing_mt_clan_huntress.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/sword/shared_sword_01.iff', 4, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('meleehit') + mobileTemplate.setAttacks(attacks) + + lootPoolNames_1 = ['Junk'] + lootPoolChances_1 = [100] + lootGroupChance_1 = 65 + mobileTemplate.addToLootGroups(lootPoolNames_1,lootPoolChances_1,lootGroupChance_1) + + lootPoolNames_2 = ['jedi_relic_1'] + lootPoolChances_2 = [100] + lootGroupChance_2 = 85 + mobileTemplate.addToLootGroups(lootPoolNames_2,lootPoolChances_2,lootGroupChance_2) + + lootPoolNames_4 = ['random_stat_jewelry'] + lootPoolChances_4 = [100] + lootGroupChance_4 = 8 + mobileTemplate.addToLootGroups(lootPoolNames_4,lootPoolChances_4,lootGroupChance_4) + + lootPoolNames_5 = ['sithholocrons'] + lootPoolChances_5 = [100] + lootGroupChance_5 = 3 + mobileTemplate.addToLootGroups(lootPoolNames_5,lootPoolChances_5,lootGroupChance_5) + + core.spawnService.addMobileTemplate('singing_mtn_clan_huntress', mobileTemplate) \ No newline at end of file diff --git a/scripts/mobiles/dathomir/singing_mtn_clan_initiate.py b/scripts/mobiles/dathomir/singing_mtn_clan_initiate.py new file mode 100644 index 00000000..677dd58c --- /dev/null +++ b/scripts/mobiles/dathomir/singing_mtn_clan_initiate.py @@ -0,0 +1,36 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('singing_mtn_clan_initiate') + mobileTemplate.setLevel(76) + mobileTemplate.setDifficulty(1) + mobileTemplate.setAttackRange(6) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(4) + mobileTemplate.setMinSpawnDistance(6) + mobileTemplate.setMaxSpawnDistance(10) + mobileTemplate.setDeathblow(True) + mobileTemplate.setSocialGroup('mountain clan') + mobileTemplate.setAssistRange(12) + mobileTemplate.setRespawnTime(300) + mobileTemplate.setOptionsBitmask(192) + + templates = Vector() + templates.add('object/mobile/shared_dressed_dathomir_sing_mt_clan_initiate.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/sword/shared_sword_01.iff', 4, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('meleehit') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('singing_mtn_clan_initiate', mobileTemplate) \ No newline at end of file diff --git a/scripts/mobiles/dathomir/singing_mtn_clan_outcast.py b/scripts/mobiles/dathomir/singing_mtn_clan_outcast.py new file mode 100644 index 00000000..afe40e1f --- /dev/null +++ b/scripts/mobiles/dathomir/singing_mtn_clan_outcast.py @@ -0,0 +1,56 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('singing_mtn_clan_initiate') + mobileTemplate.setLevel(76) + mobileTemplate.setDifficulty(1) + mobileTemplate.setAttackRange(6) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(4) + mobileTemplate.setMinSpawnDistance(6) + mobileTemplate.setMaxSpawnDistance(10) + mobileTemplate.setDeathblow(True) + mobileTemplate.setSocialGroup('mountain clan') + mobileTemplate.setAssistRange(12) + mobileTemplate.setRespawnTime(300) + mobileTemplate.setOptionsBitmask(192) + + templates = Vector() + templates.add('object/mobile/shared_dressed_dathomir_sing_mt_clan_outcast.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/polearm/shared_lance_staff_wood_s1.iff', 7, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('meleehit') + mobileTemplate.setAttacks(attacks) + + lootPoolNames_1 = ['Junk'] + lootPoolChances_1 = [100] + lootGroupChance_1 = 65 + mobileTemplate.addToLootGroups(lootPoolNames_1,lootPoolChances_1,lootGroupChance_1) + + lootPoolNames_2 = ['jedi_relic_1'] + lootPoolChances_2 = [100] + lootGroupChance_2 = 85 + mobileTemplate.addToLootGroups(lootPoolNames_2,lootPoolChances_2,lootGroupChance_2) + + lootPoolNames_4 = ['random_stat_jewelry'] + lootPoolChances_4 = [100] + lootGroupChance_4 = 8 + mobileTemplate.addToLootGroups(lootPoolNames_4,lootPoolChances_4,lootGroupChance_4) + + lootPoolNames_5 = ['sithholocrons'] + lootPoolChances_5 = [100] + lootGroupChance_5 = 3 + mobileTemplate.addToLootGroups(lootPoolNames_5,lootPoolChances_5,lootGroupChance_5) + + core.spawnService.addMobileTemplate('singing_mtn_clan_initiate', mobileTemplate) \ No newline at end of file diff --git a/scripts/mobiles/dathomir/singing_mtn_clan_rancor_tamer.py b/scripts/mobiles/dathomir/singing_mtn_clan_rancor_tamer.py new file mode 100644 index 00000000..21ccb3ae --- /dev/null +++ b/scripts/mobiles/dathomir/singing_mtn_clan_rancor_tamer.py @@ -0,0 +1,56 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('singing_mtn_clan_rancor_tamer') + mobileTemplate.setLevel(79) + mobileTemplate.setDifficulty(1) + mobileTemplate.setAttackRange(6) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(4) + mobileTemplate.setMinSpawnDistance(6) + mobileTemplate.setMaxSpawnDistance(10) + mobileTemplate.setDeathblow(True) + mobileTemplate.setSocialGroup('mountain clan') + mobileTemplate.setAssistRange(12) + mobileTemplate.setRespawnTime(300) + mobileTemplate.setOptionsBitmask(192) + + templates = Vector() + templates.add('object/mobile/shared_dressed_dathomir_sing_mt_clan_rancor_tamer.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/sword/shared_sword_01.iff', 4, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('meleehit') + mobileTemplate.setAttacks(attacks) + + lootPoolNames_1 = ['Junk'] + lootPoolChances_1 = [100] + lootGroupChance_1 = 65 + mobileTemplate.addToLootGroups(lootPoolNames_1,lootPoolChances_1,lootGroupChance_1) + + lootPoolNames_2 = ['jedi_relic_1'] + lootPoolChances_2 = [100] + lootGroupChance_2 = 85 + mobileTemplate.addToLootGroups(lootPoolNames_2,lootPoolChances_2,lootGroupChance_2) + + lootPoolNames_4 = ['random_stat_jewelry'] + lootPoolChances_4 = [100] + lootGroupChance_4 = 8 + mobileTemplate.addToLootGroups(lootPoolNames_4,lootPoolChances_4,lootGroupChance_4) + + lootPoolNames_5 = ['sithholocrons'] + lootPoolChances_5 = [100] + lootGroupChance_5 = 3 + mobileTemplate.addToLootGroups(lootPoolNames_5,lootPoolChances_5,lootGroupChance_5) + + core.spawnService.addMobileTemplate('singing_mtn_clan_rancor_tamer', mobileTemplate) \ No newline at end of file diff --git a/scripts/mobiles/dathomir/singing_mtn_clan_scout.py b/scripts/mobiles/dathomir/singing_mtn_clan_scout.py new file mode 100644 index 00000000..57381784 --- /dev/null +++ b/scripts/mobiles/dathomir/singing_mtn_clan_scout.py @@ -0,0 +1,56 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('singing_mtn_clan_scout') + mobileTemplate.setLevel(78) + mobileTemplate.setDifficulty(1) + mobileTemplate.setAttackRange(6) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(4) + mobileTemplate.setMinSpawnDistance(6) + mobileTemplate.setMaxSpawnDistance(10) + mobileTemplate.setDeathblow(True) + mobileTemplate.setSocialGroup('mountain clan') + mobileTemplate.setAssistRange(12) + mobileTemplate.setRespawnTime(300) + mobileTemplate.setOptionsBitmask(192) + + templates = Vector() + templates.add('object/mobile/shared_dressed_dathomir_sing_mt_clan_scout.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/sword/shared_sword_01.iff', 4, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('meleehit') + mobileTemplate.setAttacks(attacks) + + lootPoolNames_1 = ['Junk'] + lootPoolChances_1 = [100] + lootGroupChance_1 = 65 + mobileTemplate.addToLootGroups(lootPoolNames_1,lootPoolChances_1,lootGroupChance_1) + + lootPoolNames_2 = ['jedi_relic_1'] + lootPoolChances_2 = [100] + lootGroupChance_2 = 85 + mobileTemplate.addToLootGroups(lootPoolNames_2,lootPoolChances_2,lootGroupChance_2) + + lootPoolNames_4 = ['random_stat_jewelry'] + lootPoolChances_4 = [100] + lootGroupChance_4 = 8 + mobileTemplate.addToLootGroups(lootPoolNames_4,lootPoolChances_4,lootGroupChance_4) + + lootPoolNames_5 = ['sithholocrons'] + lootPoolChances_5 = [100] + lootGroupChance_5 = 3 + mobileTemplate.addToLootGroups(lootPoolNames_5,lootPoolChances_5,lootGroupChance_5) + + core.spawnService.addMobileTemplate('singing_mtn_clan_scout', mobileTemplate) \ No newline at end of file diff --git a/scripts/mobiles/dathomir/singing_mtn_clan_slave.py b/scripts/mobiles/dathomir/singing_mtn_clan_slave.py new file mode 100644 index 00000000..8457d63e --- /dev/null +++ b/scripts/mobiles/dathomir/singing_mtn_clan_slave.py @@ -0,0 +1,36 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('singing_mtn_clan_slave') + mobileTemplate.setLevel(79) + mobileTemplate.setDifficulty(1) + mobileTemplate.setAttackRange(6) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(4) + mobileTemplate.setMinSpawnDistance(6) + mobileTemplate.setMaxSpawnDistance(10) + mobileTemplate.setDeathblow(False) + mobileTemplate.setSocialGroup('mountain clan') + mobileTemplate.setAssistRange(12) + mobileTemplate.setRespawnTime(300) + mobileTemplate.setOptionsBitmask(192) + + templates = Vector() + templates.add('object/mobile/shared_dressed_dathomir_sing_mt_clan_slave.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('singing_mtn_clan_slave', mobileTemplate) \ No newline at end of file diff --git a/scripts/mobiles/dynamicgroups/adolescent_krayt_wild_1.py b/scripts/mobiles/dynamicgroups/adolescent_krayt_wild_1.py new file mode 100644 index 00000000..f542e938 --- /dev/null +++ b/scripts/mobiles/dynamicgroups/adolescent_krayt_wild_1.py @@ -0,0 +1,16 @@ +import sys +from services.spawn import DynamicSpawnGroup +from services.spawn import MobileTemplate +from java.util import Vector + +def addDynamicGroup(core): + dynamicGroup = DynamicSpawnGroup() + mobileTemplates = Vector() + mobileTemplates.add('adolescent_krayt_dragon') + dynamicGroup.setMobiles(mobileTemplates) + dynamicGroup.setGroupMembersNumber(1) + dynamicGroup.setName('adolescent_krayt_wild_1') + dynamicGroup.setMaxSpawns(1) + dynamicGroup.setMinSpawnDistance(150) + core.spawnService.addDynamicGroup('adolescent_krayt_wild_1', dynamicGroup) + return \ No newline at end of file diff --git a/scripts/mobiles/dynamicgroups/bol_group_1.py b/scripts/mobiles/dynamicgroups/bol_group_1.py new file mode 100644 index 00000000..f26dd786 --- /dev/null +++ b/scripts/mobiles/dynamicgroups/bol_group_1.py @@ -0,0 +1,18 @@ +# Spawn Group file created with PSWG Planetary Spawn Tool +import sys +from java.util import Vector +from services.spawn import DynamicSpawnGroup +from services.spawn import MobileTemplate + +def addDynamicGroup(core): + dynamicGroup = DynamicSpawnGroup() + mobileTemplates = Vector() + mobileTemplates.add('bol') + mobileTemplates.add('bol_pack_runner') + dynamicGroup.setMobiles(mobileTemplates) + dynamicGroup.setGroupMembersNumber(2) + dynamicGroup.setName('bol_group_1') + dynamicGroup.setMaxSpawns(-1) + dynamicGroup.setMinSpawnDistance(150) + core.spawnService.addDynamicGroup('bol_group_1', dynamicGroup) + return diff --git a/scripts/mobiles/dynamicgroups/canyon_krayt_wild_1.py b/scripts/mobiles/dynamicgroups/canyon_krayt_wild_1.py new file mode 100644 index 00000000..27b392b6 --- /dev/null +++ b/scripts/mobiles/dynamicgroups/canyon_krayt_wild_1.py @@ -0,0 +1,16 @@ +import sys +from services.spawn import DynamicSpawnGroup +from services.spawn import MobileTemplate +from java.util import Vector + +def addDynamicGroup(core): + dynamicGroup = DynamicSpawnGroup() + mobileTemplates = Vector() + mobileTemplates.add('canyon_krayt_dragon') + dynamicGroup.setMobiles(mobileTemplates) + dynamicGroup.setGroupMembersNumber(1) + dynamicGroup.setName('canyon_krayt_wild_1') + dynamicGroup.setMaxSpawns(1) + dynamicGroup.setMinSpawnDistance(150) + core.spawnService.addDynamicGroup('canyon_krayt_wild_1', dynamicGroup) + return \ No newline at end of file diff --git a/scripts/mobiles/dynamicgroups/dark_jedi_wild_1.py b/scripts/mobiles/dynamicgroups/dark_jedi_wild_1.py new file mode 100644 index 00000000..3bf8c043 --- /dev/null +++ b/scripts/mobiles/dynamicgroups/dark_jedi_wild_1.py @@ -0,0 +1,18 @@ +import sys +from services.spawn import DynamicSpawnGroup +from services.spawn import MobileTemplate +from java.util import Vector + +def addDynamicGroup(core): + dynamicGroup = DynamicSpawnGroup() + mobileTemplates = Vector() + mobileTemplates.add('dark_jedi_master') + mobileTemplates.add('dark_jedi_knight') + mobileTemplates.add('dark_adept') + dynamicGroup.setMobiles(mobileTemplates) + dynamicGroup.setGroupMembersNumber(3) + dynamicGroup.setName('dark_jedi_wild_1') + dynamicGroup.setMaxSpawns(-1) + dynamicGroup.setMinSpawnDistance(150) + core.spawnService.addDynamicGroup('dark_jedi_wild_1', dynamicGroup) + return \ No newline at end of file diff --git a/scripts/mobiles/dynamicgroups/force_sensitives_wild_1.py b/scripts/mobiles/dynamicgroups/force_sensitives_wild_1.py new file mode 100644 index 00000000..9ee91b60 --- /dev/null +++ b/scripts/mobiles/dynamicgroups/force_sensitives_wild_1.py @@ -0,0 +1,20 @@ +import sys +from services.spawn import DynamicSpawnGroup +from services.spawn import MobileTemplate +from java.util import Vector + +def addDynamicGroup(core): + dynamicGroup = DynamicSpawnGroup() + mobileTemplates = Vector() + mobileTemplates.add('force_sensitive_crypt_crawler') + mobileTemplates.add('force_sensitive_renegade') + mobileTemplates.add('forsaken_force_drifter') + mobileTemplates.add('novice_force_mystic') + mobileTemplates.add('untrained_wielder_of_the_dark_side') + dynamicGroup.setMobiles(mobileTemplates) + dynamicGroup.setGroupMembersNumber(-3) + dynamicGroup.setName('force_sensitives_wild_1') + dynamicGroup.setMaxSpawns(-1) + dynamicGroup.setMinSpawnDistance(150) + core.spawnService.addDynamicGroup('force_sensitives_wild_1', dynamicGroup) + return \ No newline at end of file diff --git a/scripts/mobiles/dynamicgroups/frenzied_graul_1.py b/scripts/mobiles/dynamicgroups/frenzied_graul_1.py new file mode 100644 index 00000000..dfe2dac0 --- /dev/null +++ b/scripts/mobiles/dynamicgroups/frenzied_graul_1.py @@ -0,0 +1,17 @@ +# Spawn Group file created with PSWG Planetary Spawn Tool +import sys +from java.util import Vector +from services.spawn import DynamicSpawnGroup +from services.spawn import MobileTemplate + +def addDynamicGroup(core): + dynamicGroup = DynamicSpawnGroup() + mobileTemplates = Vector() + mobileTemplates.add('frenzied_graul') + dynamicGroup.setMobiles(mobileTemplates) + dynamicGroup.setGroupMembersNumber(-3) + dynamicGroup.setName('thunes_1') + dynamicGroup.setMaxSpawns(-1) + dynamicGroup.setMinSpawnDistance(150) + core.spawnService.addDynamicGroup('frenzied_graul', dynamicGroup) + return diff --git a/scripts/mobiles/dynamicgroups/giant_canyon_krayt_wild_1.py b/scripts/mobiles/dynamicgroups/giant_canyon_krayt_wild_1.py new file mode 100644 index 00000000..90595b2f --- /dev/null +++ b/scripts/mobiles/dynamicgroups/giant_canyon_krayt_wild_1.py @@ -0,0 +1,16 @@ +import sys +from services.spawn import DynamicSpawnGroup +from services.spawn import MobileTemplate +from java.util import Vector + +def addDynamicGroup(core): + dynamicGroup = DynamicSpawnGroup() + mobileTemplates = Vector() + mobileTemplates.add('giant_canyon_krayt_dragon') + dynamicGroup.setMobiles(mobileTemplates) + dynamicGroup.setGroupMembersNumber(1) + dynamicGroup.setName('giant_canyon_krayt_dragon_1') + dynamicGroup.setMaxSpawns(1) + dynamicGroup.setMinSpawnDistance(60) + core.spawnService.addDynamicGroup('giant_canyon_krayt_dragon_1', dynamicGroup) + return \ No newline at end of file diff --git a/scripts/mobiles/dynamicgroups/grand_canyon_krayt_wild_1.py b/scripts/mobiles/dynamicgroups/grand_canyon_krayt_wild_1.py new file mode 100644 index 00000000..f8f13fe8 --- /dev/null +++ b/scripts/mobiles/dynamicgroups/grand_canyon_krayt_wild_1.py @@ -0,0 +1,16 @@ +import sys +from services.spawn import DynamicSpawnGroup +from services.spawn import MobileTemplate +from java.util import Vector + +def addDynamicGroup(core): + dynamicGroup = DynamicSpawnGroup() + mobileTemplates = Vector() + mobileTemplates.add('grand_canyon_krayt_dragon') + dynamicGroup.setMobiles(mobileTemplates) + dynamicGroup.setGroupMembersNumber(1) + dynamicGroup.setName('grand_canyon_krayt_dragon_1') + dynamicGroup.setMaxSpawns(1) + dynamicGroup.setMinSpawnDistance(60) + core.spawnService.addDynamicGroup('grand_canyon_krayt_dragon_1', dynamicGroup) + return \ No newline at end of file diff --git a/scripts/mobiles/dynamicgroups/graul_mauler_nw_group_1.py b/scripts/mobiles/dynamicgroups/graul_mauler_nw_group_1.py new file mode 100644 index 00000000..288ff2b9 --- /dev/null +++ b/scripts/mobiles/dynamicgroups/graul_mauler_nw_group_1.py @@ -0,0 +1,17 @@ +# Spawn Group file created with PSWG Planetary Spawn Tool +import sys +from java.util import Vector +from services.spawn import DynamicSpawnGroup +from services.spawn import MobileTemplate + +def addDynamicGroup(core): + dynamicGroup = DynamicSpawnGroup() + mobileTemplates = Vector() + mobileTemplates.add('graul_mauler') + dynamicGroup.setMobiles(mobileTemplates) + dynamicGroup.setGroupMembersNumber(-3) + dynamicGroup.setName('graul_mauler_nw_group_1') + dynamicGroup.setMaxSpawns(-1) + dynamicGroup.setMinSpawnDistance(150) + core.spawnService.addDynamicGroup('graul_mauler_nw_group_1', dynamicGroup) + return diff --git a/scripts/mobiles/dynamicgroups/huurton_group_1.py b/scripts/mobiles/dynamicgroups/huurton_group_1.py new file mode 100644 index 00000000..d6fe32fa --- /dev/null +++ b/scripts/mobiles/dynamicgroups/huurton_group_1.py @@ -0,0 +1,22 @@ +# Spawn Group file created with PSWG Planetary Spawn Tool +import sys +from java.util import Vector +from services.spawn import DynamicSpawnGroup +from services.spawn import MobileTemplate + +def addDynamicGroup(core): + dynamicGroup = DynamicSpawnGroup() + mobileTemplates = Vector() + mobileTemplates.add('huurton') + mobileTemplates.add('huurton_bloodhunter') + mobileTemplates.add('huurton_howler') + mobileTemplates.add('huurton_huntress') + mobileTemplates.add('huurton_matron') + mobileTemplates.add('huurton_reaper') + dynamicGroup.setMobiles(mobileTemplates) + dynamicGroup.setGroupMembersNumber(-3) + dynamicGroup.setName('huurton_group_1') + dynamicGroup.setMaxSpawns(-1) + dynamicGroup.setMinSpawnDistance(150) + core.spawnService.addDynamicGroup('huurton_group_1', dynamicGroup) + return diff --git a/scripts/mobiles/dynamicgroups/huurton_group_2.py b/scripts/mobiles/dynamicgroups/huurton_group_2.py new file mode 100644 index 00000000..e66380e5 --- /dev/null +++ b/scripts/mobiles/dynamicgroups/huurton_group_2.py @@ -0,0 +1,20 @@ +# Spawn Group file created with PSWG Planetary Spawn Tool +import sys +from java.util import Vector +from services.spawn import DynamicSpawnGroup +from services.spawn import MobileTemplate + +def addDynamicGroup(core): + dynamicGroup = DynamicSpawnGroup() + mobileTemplates = Vector() + mobileTemplates.add('huurton_bloodhunter') + mobileTemplates.add('huurton_howler') + mobileTemplates.add('huurton_huntress') + mobileTemplates.add('huurton_reaper') + dynamicGroup.setMobiles(mobileTemplates) + dynamicGroup.setGroupMembersNumber(-3) + dynamicGroup.setName('huurton_group_2') + dynamicGroup.setMaxSpawns(-1) + dynamicGroup.setMinSpawnDistance(150) + core.spawnService.addDynamicGroup('huurton_group_2', dynamicGroup) + return diff --git a/scripts/mobiles/dynamicgroups/jantas_nw_group_1.py b/scripts/mobiles/dynamicgroups/jantas_nw_group_1.py new file mode 100644 index 00000000..eca673e4 --- /dev/null +++ b/scripts/mobiles/dynamicgroups/jantas_nw_group_1.py @@ -0,0 +1,28 @@ +# Spawn Group file created with PSWG Planetary Spawn Tool +import sys +from java.util import Vector +from services.spawn import DynamicSpawnGroup +from services.spawn import MobileTemplate + +def addDynamicGroup(core): + dynamicGroup = DynamicSpawnGroup() + mobileTemplates = Vector() + mobileTemplates.add('janta_clan_leader') + mobileTemplates.add('janta_harvester') + mobileTemplates.add('janta_herbalist') + mobileTemplates.add('janta_hunter') + mobileTemplates.add('janta_loreweaver') + mobileTemplates.add('janta_primalist') + mobileTemplates.add('janta_rockshaper') + mobileTemplates.add('janta_scout') + mobileTemplates.add('janta_shaman') + mobileTemplates.add('janta_soothsayer') + mobileTemplates.add('janta_tribesman') + mobileTemplates.add('janta_warrior') + dynamicGroup.setMobiles(mobileTemplates) + dynamicGroup.setGroupMembersNumber(-3) + dynamicGroup.setName('jantas_nw_group_1') + dynamicGroup.setMaxSpawns(-1) + dynamicGroup.setMinSpawnDistance(150) + core.spawnService.addDynamicGroup('jantas_nw_group_1', dynamicGroup) + return diff --git a/scripts/mobiles/dynamicgroups/juvenile_krayts_wild_1.py b/scripts/mobiles/dynamicgroups/juvenile_krayts_wild_1.py new file mode 100644 index 00000000..a65c74cc --- /dev/null +++ b/scripts/mobiles/dynamicgroups/juvenile_krayts_wild_1.py @@ -0,0 +1,16 @@ +import sys +from services.spawn import DynamicSpawnGroup +from services.spawn import MobileTemplate +from java.util import Vector + +def addDynamicGroup(core): + dynamicGroup = DynamicSpawnGroup() + mobileTemplates = Vector() + mobileTemplates.add('juvenile_canyon_krayt_dragon') + dynamicGroup.setMobiles(mobileTemplates) + dynamicGroup.setGroupMembersNumber(6) + dynamicGroup.setName('juvenile_krayts_wild_1') + dynamicGroup.setMaxSpawns(1) + dynamicGroup.setMinSpawnDistance(150) + core.spawnService.addDynamicGroup('juvenile_krayts_wild_1', dynamicGroup) + return \ No newline at end of file diff --git a/scripts/mobiles/dynamicgroups/krayt_dragon_ancient_wild_1.py b/scripts/mobiles/dynamicgroups/krayt_dragon_ancient_wild_1.py new file mode 100644 index 00000000..ec8ea7a8 --- /dev/null +++ b/scripts/mobiles/dynamicgroups/krayt_dragon_ancient_wild_1.py @@ -0,0 +1,16 @@ +import sys +from services.spawn import DynamicSpawnGroup +from services.spawn import MobileTemplate +from java.util import Vector + +def addDynamicGroup(core): + dynamicGroup = DynamicSpawnGroup() + mobileTemplates = Vector() + mobileTemplates.add('krayt_dragon_ancient') + dynamicGroup.setMobiles(mobileTemplates) + dynamicGroup.setGroupMembersNumber(1) + dynamicGroup.setName('krayt_dragon_ancient_1') + dynamicGroup.setMaxSpawns(1) + dynamicGroup.setMinSpawnDistance(5) + core.spawnService.addDynamicGroup('krayt_dragon_ancient_1', dynamicGroup) + return \ No newline at end of file diff --git a/scripts/mobiles/dynamicgroups/kunga_central_group_1.py b/scripts/mobiles/dynamicgroups/kunga_central_group_1.py new file mode 100644 index 00000000..2c59e7c3 --- /dev/null +++ b/scripts/mobiles/dynamicgroups/kunga_central_group_1.py @@ -0,0 +1,28 @@ +# Spawn Group file created with PSWG Planetary Spawn Tool +import sys +from java.util import Vector +from services.spawn import DynamicSpawnGroup +from services.spawn import MobileTemplate + +def addDynamicGroup(core): + dynamicGroup = DynamicSpawnGroup() + mobileTemplates = Vector() + mobileTemplates.add('kunga_clan_leader') + mobileTemplates.add('kunga_clan_primalist') + mobileTemplates.add('kunga_harvester') + mobileTemplates.add('kunga_herbalist') + mobileTemplates.add('kunga_hunter') + mobileTemplates.add('kunga_loreweaver') + mobileTemplates.add('kunga_rockshaper') + mobileTemplates.add('kunga_scout') + mobileTemplates.add('kunga_shaman') + mobileTemplates.add('kunga_soothsayer') + mobileTemplates.add('kunga_tribe_member') + mobileTemplates.add('kunga_warrior') + dynamicGroup.setMobiles(mobileTemplates) + dynamicGroup.setGroupMembersNumber(-3) + dynamicGroup.setName('kunga_central_group_1') + dynamicGroup.setMaxSpawns(-1) + dynamicGroup.setMinSpawnDistance(150) + core.spawnService.addDynamicGroup('kunga_central_group_1', dynamicGroup) + return diff --git a/scripts/mobiles/dynamicgroups/mokk_group_1.py b/scripts/mobiles/dynamicgroups/mokk_group_1.py new file mode 100644 index 00000000..ceb31446 --- /dev/null +++ b/scripts/mobiles/dynamicgroups/mokk_group_1.py @@ -0,0 +1,28 @@ +# Spawn Group file created with PSWG Planetary Spawn Tool +import sys +from java.util import Vector +from services.spawn import DynamicSpawnGroup +from services.spawn import MobileTemplate + +def addDynamicGroup(core): + dynamicGroup = DynamicSpawnGroup() + mobileTemplates = Vector() + mobileTemplates.add('mokk_clan_leader') + mobileTemplates.add('mokk_clan_primalist') + mobileTemplates.add('mokk_harvester') + mobileTemplates.add('mokk_herbalist') + mobileTemplates.add('mokk_hunter') + mobileTemplates.add('mokk_loreweaver') + mobileTemplates.add('mokk_rockshaper') + mobileTemplates.add('mokk_scout') + mobileTemplates.add('mokk_shaman') + mobileTemplates.add('mokk_soothsayer') + mobileTemplates.add('mokk_tribesman') + mobileTemplates.add('mokk_warrior') + dynamicGroup.setMobiles(mobileTemplates) + dynamicGroup.setGroupMembersNumber(-3) + dynamicGroup.setName('mokk_group_1') + dynamicGroup.setMaxSpawns(-1) + dynamicGroup.setMinSpawnDistance(150) + core.spawnService.addDynamicGroup('mokk_group_1', dynamicGroup) + return diff --git a/scripts/mobiles/dynamicgroups/nightsisters_dyn_1.py b/scripts/mobiles/dynamicgroups/nightsisters_dyn_1.py new file mode 100644 index 00000000..90504a9b --- /dev/null +++ b/scripts/mobiles/dynamicgroups/nightsisters_dyn_1.py @@ -0,0 +1,24 @@ +# Spawn Group file created with PSWG Planetary Spawn Tool +import sys +from java.util import Vector +from services.spawn import DynamicSpawnGroup +from services.spawn import MobileTemplate + +def addDynamicGroup(core): + dynamicGroup = DynamicSpawnGroup() + mobileTemplates = Vector() + mobileTemplates.add('nightsister_initiate') + mobileTemplates.add('nightsister_outcast') + mobileTemplates.add('nightsister_protector') + mobileTemplates.add('nightsister_ranger') + mobileTemplates.add('nightsister_sentinel') + mobileTemplates.add('nightsister_sentry') + mobileTemplates.add('nightsister_spell_weaver') + mobileTemplates.add('nightsister_stalker') + dynamicGroup.setMobiles(mobileTemplates) + dynamicGroup.setGroupMembersNumber(-5) + dynamicGroup.setName('nightsisters_dyn_1') + dynamicGroup.setMaxSpawns(-1) + dynamicGroup.setMinSpawnDistance(100) + core.spawnService.addDynamicGroup('nightsisters_dyn_1', dynamicGroup) + return diff --git a/scripts/mobiles/dynamicgroups/piket_longhorn_group_1.py b/scripts/mobiles/dynamicgroups/piket_longhorn_group_1.py new file mode 100644 index 00000000..6e5da709 --- /dev/null +++ b/scripts/mobiles/dynamicgroups/piket_longhorn_group_1.py @@ -0,0 +1,18 @@ +# Spawn Group file created with PSWG Planetary Spawn Tool +import sys +from java.util import Vector +from services.spawn import DynamicSpawnGroup +from services.spawn import MobileTemplate + +def addDynamicGroup(core): + dynamicGroup = DynamicSpawnGroup() + mobileTemplates = Vector() + mobileTemplates.add('piket_longhorn') + mobileTemplates.add('piket_longhorn_female') + dynamicGroup.setMobiles(mobileTemplates) + dynamicGroup.setGroupMembersNumber(-3) + dynamicGroup.setName('piket_longhorn_group_1') + dynamicGroup.setMaxSpawns(-1) + dynamicGroup.setMinSpawnDistance(150) + core.spawnService.addDynamicGroup('piket_longhorn_group_1', dynamicGroup) + return diff --git a/scripts/mobiles/dynamicgroups/piket_plains_walker_group.py b/scripts/mobiles/dynamicgroups/piket_plains_walker_group.py new file mode 100644 index 00000000..2d6914b7 --- /dev/null +++ b/scripts/mobiles/dynamicgroups/piket_plains_walker_group.py @@ -0,0 +1,20 @@ +# Spawn Group file created with PSWG Planetary Spawn Tool +import sys +from java.util import Vector +from services.spawn import DynamicSpawnGroup +from services.spawn import MobileTemplate + +def addDynamicGroup(core): + dynamicGroup = DynamicSpawnGroup() + mobileTemplates = Vector() + mobileTemplates.add('piket_plains_walker') + mobileTemplates.add('piket_plains_walker') + mobileTemplates.add('piket_plains_walker') + mobileTemplates.add('piket_plains_walker') + dynamicGroup.setMobiles(mobileTemplates) + dynamicGroup.setGroupMembersNumber(-3) + dynamicGroup.setName('piket_plains_walker_group') + dynamicGroup.setMaxSpawns(-1) + dynamicGroup.setMinSpawnDistance(150) + core.spawnService.addDynamicGroup('piket_plains_walker_group', dynamicGroup) + return diff --git a/scripts/mobiles/dynamicgroups/quenker_group_south_1.py b/scripts/mobiles/dynamicgroups/quenker_group_south_1.py new file mode 100644 index 00000000..c7a7382e --- /dev/null +++ b/scripts/mobiles/dynamicgroups/quenker_group_south_1.py @@ -0,0 +1,18 @@ +# Spawn Group file created with PSWG Planetary Spawn Tool +import sys +from java.util import Vector +from services.spawn import DynamicSpawnGroup +from services.spawn import MobileTemplate + +def addDynamicGroup(core): + dynamicGroup = DynamicSpawnGroup() + mobileTemplates = Vector() + mobileTemplates.add('quenker_ravager') + mobileTemplates.add('quenker_relic_reaper') + dynamicGroup.setMobiles(mobileTemplates) + dynamicGroup.setGroupMembersNumber(-3) + dynamicGroup.setName('quenker_group_south_1') + dynamicGroup.setMaxSpawns(-1) + dynamicGroup.setMinSpawnDistance(150) + core.spawnService.addDynamicGroup('quenker_group_south_1', dynamicGroup) + return diff --git a/scripts/mobiles/dynamicgroups/quenker_relic_reaper_group.py b/scripts/mobiles/dynamicgroups/quenker_relic_reaper_group.py new file mode 100644 index 00000000..ce21e847 --- /dev/null +++ b/scripts/mobiles/dynamicgroups/quenker_relic_reaper_group.py @@ -0,0 +1,17 @@ +# Spawn Group file created with PSWG Planetary Spawn Tool +import sys +from java.util import Vector +from services.spawn import DynamicSpawnGroup +from services.spawn import MobileTemplate + +def addDynamicGroup(core): + dynamicGroup = DynamicSpawnGroup() + mobileTemplates = Vector() + mobileTemplates.add('quenker_relic_reaper') + dynamicGroup.setMobiles(mobileTemplates) + dynamicGroup.setGroupMembersNumber(-3) + dynamicGroup.setName('quenker_relic_reaper_group') + dynamicGroup.setMaxSpawns(-1) + dynamicGroup.setMinSpawnDistance(150) + core.spawnService.addDynamicGroup('quenker_relic_reaper_group', dynamicGroup) + return diff --git a/scripts/mobiles/dynamicgroups/smc_dyn_1.py b/scripts/mobiles/dynamicgroups/smc_dyn_1.py new file mode 100644 index 00000000..ecc20a13 --- /dev/null +++ b/scripts/mobiles/dynamicgroups/smc_dyn_1.py @@ -0,0 +1,24 @@ +# Spawn Group file created with PSWG Planetary Spawn Tool +import sys +from java.util import Vector +from services.spawn import DynamicSpawnGroup +from services.spawn import MobileTemplate + +def addDynamicGroup(core): + dynamicGroup = DynamicSpawnGroup() + mobileTemplates = Vector() + mobileTemplates.add('singing_mountain_clan_sentry') + mobileTemplates.add('singing_mtn_clan_dragoon') + mobileTemplates.add('singing_mtn_clan_guardian') + mobileTemplates.add('singing_mtn_clan_huntress') + mobileTemplates.add('singing_mtn_clan_initiate') + mobileTemplates.add('singing_mtn_clan_outcast') + mobileTemplates.add('singing_mtn_clan_scout') + mobileTemplates.add('singing_mtn_clan_slave') + dynamicGroup.setMobiles(mobileTemplates) + dynamicGroup.setGroupMembersNumber(-5) + dynamicGroup.setName('smc_dyn_1') + dynamicGroup.setMaxSpawns(-1) + dynamicGroup.setMinSpawnDistance(60) + core.spawnService.addDynamicGroup('smc_dyn_1', dynamicGroup) + return diff --git a/scripts/mobiles/dynamicgroups/thune_group_2.py b/scripts/mobiles/dynamicgroups/thune_group_2.py new file mode 100644 index 00000000..0be9a58f --- /dev/null +++ b/scripts/mobiles/dynamicgroups/thune_group_2.py @@ -0,0 +1,19 @@ +# Spawn Group file created with PSWG Planetary Spawn Tool +import sys +from java.util import Vector +from services.spawn import DynamicSpawnGroup +from services.spawn import MobileTemplate + +def addDynamicGroup(core): + dynamicGroup = DynamicSpawnGroup() + mobileTemplates = Vector() + mobileTemplates.add('thune') + mobileTemplates.add('thune_grassland_guardian') + mobileTemplates.add('thune_herd_leader') + dynamicGroup.setMobiles(mobileTemplates) + dynamicGroup.setGroupMembersNumber(-3) + dynamicGroup.setName('thune_group_2') + dynamicGroup.setMaxSpawns(-1) + dynamicGroup.setMinSpawnDistance(150) + core.spawnService.addDynamicGroup('thune_group_2', dynamicGroup) + return diff --git a/scripts/mobiles/dynamicgroups/thunes_1.py b/scripts/mobiles/dynamicgroups/thunes_1.py new file mode 100644 index 00000000..87f32125 --- /dev/null +++ b/scripts/mobiles/dynamicgroups/thunes_1.py @@ -0,0 +1,19 @@ +# Spawn Group file created with PSWG Planetary Spawn Tool +import sys +from java.util import Vector +from services.spawn import DynamicSpawnGroup +from services.spawn import MobileTemplate + +def addDynamicGroup(core): + dynamicGroup = DynamicSpawnGroup() + mobileTemplates = Vector() + mobileTemplates.add('mammoth_thune') + mobileTemplates.add('thune') + mobileTemplates.add('thune_herd_leader') + dynamicGroup.setMobiles(mobileTemplates) + dynamicGroup.setGroupMembersNumber(-3) + dynamicGroup.setName('thunes_1') + dynamicGroup.setMaxSpawns(-1) + dynamicGroup.setMinSpawnDistance(150) + core.spawnService.addDynamicGroup('thunes_1', dynamicGroup) + return diff --git a/scripts/mobiles/dynamicgroups/tuskens_wild_1.py b/scripts/mobiles/dynamicgroups/tuskens_wild_1.py new file mode 100644 index 00000000..472747c0 --- /dev/null +++ b/scripts/mobiles/dynamicgroups/tuskens_wild_1.py @@ -0,0 +1,15 @@ +import sys +from services.spawn import DynamicSpawnGroup +from services.spawn import MobileTemplate +from java.util import Vector + +def addDynamicGroup(core): + dynamicGroup = DynamicSpawnGroup() + mobileTemplates = Vector() + mobileTemplates.add('tusken_raider') + dynamicGroup.setMobiles(mobileTemplates) + dynamicGroup.setName('tuskens_wild_1') + dynamicGroup.setMaxSpawns(20) + dynamicGroup.setMinSpawnDistance(25) + core.spawnService.addDynamicGroup('tuskens_wild_1', dynamicGroup) + return \ No newline at end of file diff --git a/scripts/mobiles/dynamicgroups/voritor_nw_group_1.py b/scripts/mobiles/dynamicgroups/voritor_nw_group_1.py new file mode 100644 index 00000000..6e2e927c --- /dev/null +++ b/scripts/mobiles/dynamicgroups/voritor_nw_group_1.py @@ -0,0 +1,17 @@ +# Spawn Group file created with PSWG Planetary Spawn Tool +import sys +from java.util import Vector +from services.spawn import DynamicSpawnGroup +from services.spawn import MobileTemplate + +def addDynamicGroup(core): + dynamicGroup = DynamicSpawnGroup() + mobileTemplates = Vector() + mobileTemplates.add('voritor_dasher') + dynamicGroup.setMobiles(mobileTemplates) + dynamicGroup.setGroupMembersNumber(-3) + dynamicGroup.setName('graul_mauler_nw_group_1') + dynamicGroup.setMaxSpawns(-1) + dynamicGroup.setMinSpawnDistance(150) + core.spawnService.addDynamicGroup('voritor_nw_group_1', dynamicGroup) + return diff --git a/scripts/mobiles/dynamicgroups/voritors_east_group_1.py b/scripts/mobiles/dynamicgroups/voritors_east_group_1.py new file mode 100644 index 00000000..db34fc32 --- /dev/null +++ b/scripts/mobiles/dynamicgroups/voritors_east_group_1.py @@ -0,0 +1,21 @@ +# Spawn Group file created with PSWG Planetary Spawn Tool +import sys +from java.util import Vector +from services.spawn import DynamicSpawnGroup +from services.spawn import MobileTemplate + +def addDynamicGroup(core): + dynamicGroup = DynamicSpawnGroup() + mobileTemplates = Vector() + mobileTemplates.add('horned_voritor_jungle_lizard') + mobileTemplates.add('vexed_voritor_lizard') + mobileTemplates.add('voritor_dasher') + mobileTemplates.add('voritor_lizard') + mobileTemplates.add('spiked_slasher') + dynamicGroup.setMobiles(mobileTemplates) + dynamicGroup.setGroupMembersNumber(-3) + dynamicGroup.setName('voritors_east_group_1') + dynamicGroup.setMaxSpawns(-1) + dynamicGroup.setMinSpawnDistance(150) + core.spawnService.addDynamicGroup('voritors_east_group_1', dynamicGroup) + return diff --git a/scripts/mobiles/dynamicgroups/voritors_wild_1.py b/scripts/mobiles/dynamicgroups/voritors_wild_1.py new file mode 100644 index 00000000..7bd480b2 --- /dev/null +++ b/scripts/mobiles/dynamicgroups/voritors_wild_1.py @@ -0,0 +1,18 @@ +import sys +from services.spawn import DynamicSpawnGroup +from services.spawn import MobileTemplate +from java.util import Vector + +def addDynamicGroup(core): + dynamicGroup = DynamicSpawnGroup() + mobileTemplates = Vector() + mobileTemplates.add('slinking_voritor_hunter') + mobileTemplates.add('horned_voritor_jungle_lizard') + dynamicGroup.setMobiles(mobileTemplates) + dynamicGroup.setGroupMembersNumber(1) + dynamicGroup.setName('voritors_wild_1') + dynamicGroup.setMaxSpawns(-1) + dynamicGroup.setGroupMembersNumber(-5) + dynamicGroup.setMinSpawnDistance(150) + core.spawnService.addDynamicGroup('voritors_wild_1', dynamicGroup) + return \ No newline at end of file diff --git a/scripts/mobiles/endor/aged_lantern_bird.py b/scripts/mobiles/endor/aged_lantern_bird.py new file mode 100644 index 00000000..b0245822 --- /dev/null +++ b/scripts/mobiles/endor/aged_lantern_bird.py @@ -0,0 +1,42 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('aged_lantern_bird') + mobileTemplate.setLevel(61) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setHideType("Leathery Hide") + mobileTemplate.setHideAmount(41) + mobileTemplate.setBoneType("Avian Bones") + mobileTemplate.setBoneAmount(46) + mobileTemplate.setSocialGroup("lantern") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(False) + mobileTemplate.setOptionsBitmask(128) + + templates = Vector() + templates.add('object/mobile/shared_lantern.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('aged_lantern_bird', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/endor/arachne_hatchling.py b/scripts/mobiles/endor/arachne_hatchling.py new file mode 100644 index 00000000..998d667a --- /dev/null +++ b/scripts/mobiles/endor/arachne_hatchling.py @@ -0,0 +1,40 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('arachne_hatchling') + mobileTemplate.setLevel(64) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(.5) + mobileTemplate.setMeatType("Insect Meat") + mobileTemplate.setMeatAmount(1) + mobileTemplate.setSocialGroup("arachne") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(False) + mobileTemplate.setOptionsBitmask(128) + + templates = Vector() + templates.add('object/mobile/shared_arachne.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('arachne_hatchling', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/endor/arachne_queen.py b/scripts/mobiles/endor/arachne_queen.py new file mode 100644 index 00000000..e255f9e4 --- /dev/null +++ b/scripts/mobiles/endor/arachne_queen.py @@ -0,0 +1,40 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('queen_arachne') + mobileTemplate.setLevel(65) + mobileTemplate.setDifficulty(1) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setMeatType("Insect Meat") + mobileTemplate.setMeatAmount(60) + mobileTemplate.setSocialGroup("arachne") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(True) + mobileTemplate.setOptionsBitmask(192) + + templates = Vector() + templates.add('object/mobile/shared_arachne.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('arachne_queen', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/endor/arachne_webmaster.py b/scripts/mobiles/endor/arachne_webmaster.py new file mode 100644 index 00000000..d0539151 --- /dev/null +++ b/scripts/mobiles/endor/arachne_webmaster.py @@ -0,0 +1,40 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('arachne_webmaster') + mobileTemplate.setLevel(62) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(True) + mobileTemplate.setScale(1) + mobileTemplate.setMeatType("Insect Meat") + mobileTemplate.setMeatAmount(30) + mobileTemplate.setSocialGroup("arachne") + mobileTemplate.setAssistRange(12) + mobileTemplate.setStalker(True) + mobileTemplate.setOptionsBitmask(192) + + templates = Vector() + templates.add('object/mobile/shared_arachne.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('arachne_webmaster', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/endor/arachne_widow.py b/scripts/mobiles/endor/arachne_widow.py new file mode 100644 index 00000000..e7f858bf --- /dev/null +++ b/scripts/mobiles/endor/arachne_widow.py @@ -0,0 +1,41 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('arachne_widow') + mobileTemplate.setLevel(63) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(True) + mobileTemplate.setScale(1) + mobileTemplate.setMeatType("Insect Meat") + mobileTemplate.setMeatAmount(30) + mobileTemplate.setSocialGroup("arachne") + mobileTemplate.setAssistRange(12) + mobileTemplate.setStalker(True) + mobileTemplate.setOptionsBitmask(192) + + + templates = Vector() + templates.add('object/mobile/shared_arachne.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('arachne_widow', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/endor/archaic_gondula_ritualist.py b/scripts/mobiles/endor/archaic_gondula_ritualist.py new file mode 100644 index 00000000..4d2b3981 --- /dev/null +++ b/scripts/mobiles/endor/archaic_gondula_ritualist.py @@ -0,0 +1,72 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('archaid_gondula_ritualist') + mobileTemplate.setLevel(80) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(3) + mobileTemplate.setMaxSpawnDistance(5) + mobileTemplate.setDeathblow(True) + mobileTemplate.setSocialGroup('gondula tribe') + mobileTemplate.setAssistRange(1) + mobileTemplate.setStalker(False) + mobileTemplate.setOptionsBitmask(128) + + + templates = Vector() + templates.add('object/mobile/shared_dressed_ewok_f_01.iff') + templates.add('object/mobile/shared_dressed_ewok_f_02.iff') + templates.add('object/mobile/shared_dressed_ewok_f_03.iff') + templates.add('object/mobile/shared_dressed_ewok_f_04.iff') + templates.add('object/mobile/shared_dressed_ewok_f_05.iff') + templates.add('object/mobile/shared_dressed_ewok_f_06.iff') + templates.add('object/mobile/shared_dressed_ewok_f_07.iff') + templates.add('object/mobile/shared_dressed_ewok_f_08.iff') + templates.add('object/mobile/shared_dressed_ewok_f_09.iff') + templates.add('object/mobile/shared_dressed_ewok_f_10.iff') + templates.add('object/mobile/shared_dressed_ewok_f_11.iff') + templates.add('object/mobile/shared_dressed_ewok_f_12.iff') + templates.add('object/mobile/shared_dressed_ewok_m_01.iff') + templates.add('object/mobile/shared_dressed_ewok_m_02.iff') + templates.add('object/mobile/shared_dressed_ewok_m_03.iff') + templates.add('object/mobile/shared_dressed_ewok_m_04.iff') + templates.add('object/mobile/shared_dressed_ewok_m_05.iff') + templates.add('object/mobile/shared_dressed_ewok_m_06.iff') + templates.add('object/mobile/shared_dressed_ewok_m_07.iff') + templates.add('object/mobile/shared_dressed_ewok_m_08.iff') + templates.add('object/mobile/shared_dressed_ewok_m_09.iff') + templates.add('object/mobile/shared_dressed_ewok_m_10.iff') + templates.add('object/mobile/shared_dressed_ewok_m_11.iff') + templates.add('object/mobile/shared_dressed_ewok_m_12.iff') + + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('meleeHit') + mobileTemplate.setAttacks(attacks) + + lootPoolNames_1 = ['Junk'] + lootPoolChances_1 = [100] + lootGroupChance_1 = 65 + mobileTemplate.addToLootGroups(lootPoolNames_1,lootPoolChances_1,lootGroupChance_1) + + lootPoolNames_2 = ['random_loot_primitives'] + lootPoolChances_2 = [100] + lootGroupChance_2 = 35 + mobileTemplate.addToLootGroups(lootPoolNames_2,lootPoolChances_2,lootGroupChance_2) + + core.spawnService.addMobileTemplate('archaic_gondula_ritualist', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/endor/archaic_jinda_ritualist.py b/scripts/mobiles/endor/archaic_jinda_ritualist.py new file mode 100644 index 00000000..d432d38d --- /dev/null +++ b/scripts/mobiles/endor/archaic_jinda_ritualist.py @@ -0,0 +1,49 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('archaic_jinda_ritualist') + mobileTemplate.setLevel(65) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(3) + mobileTemplate.setMaxSpawnDistance(5) + mobileTemplate.setDeathblow(True) + mobileTemplate.setSocialGroup('jinda tribe') + mobileTemplate.setAssistRange(1) + mobileTemplate.setStalker(False) + mobileTemplate.setOptionsBitmask(128) + + + templates = Vector() + templates.add('object/mobile/shared_jinda_male.iff') + templates.add('object/mobile/shared_jinda_female.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('meleeHit') + mobileTemplate.setAttacks(attacks) + + lootPoolNames_1 = ['Junk'] + lootPoolChances_1 = [100] + lootGroupChance_1 = 65 + mobileTemplate.addToLootGroups(lootPoolNames_1,lootPoolChances_1,lootGroupChance_1) + + lootPoolNames_2 = ['random_loot_primitives'] + lootPoolChances_2 = [100] + lootGroupChance_2 = 35 + mobileTemplate.addToLootGroups(lootPoolNames_2,lootPoolChances_2,lootGroupChance_2) + + core.spawnService.addMobileTemplate('archaic_jinda_ritualist', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/endor/archaic_panshee_ritualist.py b/scripts/mobiles/endor/archaic_panshee_ritualist.py new file mode 100644 index 00000000..6d8be713 --- /dev/null +++ b/scripts/mobiles/endor/archaic_panshee_ritualist.py @@ -0,0 +1,71 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('archaic_panshee_ritualist') + mobileTemplate.setLevel(70) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(3) + mobileTemplate.setMaxSpawnDistance(5) + mobileTemplate.setDeathblow(True) + mobileTemplate.setSocialGroup('panshee tribe') + mobileTemplate.setAssistRange(1) + mobileTemplate.setStalker(False) + mobileTemplate.setOptionsBitmask(128) + + + templates = Vector() + templates.add('object/mobile/shared_dressed_ewok_f_01.iff') + templates.add('object/mobile/shared_dressed_ewok_f_02.iff') + templates.add('object/mobile/shared_dressed_ewok_f_03.iff') + templates.add('object/mobile/shared_dressed_ewok_f_04.iff') + templates.add('object/mobile/shared_dressed_ewok_f_05.iff') + templates.add('object/mobile/shared_dressed_ewok_f_06.iff') + templates.add('object/mobile/shared_dressed_ewok_f_07.iff') + templates.add('object/mobile/shared_dressed_ewok_f_08.iff') + templates.add('object/mobile/shared_dressed_ewok_f_09.iff') + templates.add('object/mobile/shared_dressed_ewok_f_10.iff') + templates.add('object/mobile/shared_dressed_ewok_f_11.iff') + templates.add('object/mobile/shared_dressed_ewok_f_12.iff') + templates.add('object/mobile/shared_dressed_ewok_m_01.iff') + templates.add('object/mobile/shared_dressed_ewok_m_02.iff') + templates.add('object/mobile/shared_dressed_ewok_m_03.iff') + templates.add('object/mobile/shared_dressed_ewok_m_04.iff') + templates.add('object/mobile/shared_dressed_ewok_m_05.iff') + templates.add('object/mobile/shared_dressed_ewok_m_06.iff') + templates.add('object/mobile/shared_dressed_ewok_m_07.iff') + templates.add('object/mobile/shared_dressed_ewok_m_08.iff') + templates.add('object/mobile/shared_dressed_ewok_m_09.iff') + templates.add('object/mobile/shared_dressed_ewok_m_10.iff') + templates.add('object/mobile/shared_dressed_ewok_m_11.iff') + templates.add('object/mobile/shared_dressed_ewok_m_12.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('meleeHit') + mobileTemplate.setAttacks(attacks) + + lootPoolNames_1 = ['Junk'] + lootPoolChances_1 = [100] + lootGroupChance_1 = 65 + mobileTemplate.addToLootGroups(lootPoolNames_1,lootPoolChances_1,lootGroupChance_1) + + lootPoolNames_2 = ['random_loot_primitives'] + lootPoolChances_2 = [100] + lootGroupChance_2 = 35 + mobileTemplate.addToLootGroups(lootPoolNames_2,lootPoolChances_2,lootGroupChance_2) + + core.spawnService.addMobileTemplate('archaic_panshee_ritualist', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/endor/bark_mite_burrower.py b/scripts/mobiles/endor/bark_mite_burrower.py new file mode 100644 index 00000000..ae677c2a --- /dev/null +++ b/scripts/mobiles/endor/bark_mite_burrower.py @@ -0,0 +1,38 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('bark_mite_burrower') + mobileTemplate.setLevel(63) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(True) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("bark mite") + mobileTemplate.setAssistRange(12) + mobileTemplate.setStalker(False) + mobileTemplate.setOptionsBitmask(128) + + templates = Vector() + templates.add('object/mobile/shared_bark_mite.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('bark_mite_burrower', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/endor/bark_mite_burrower_collector.py b/scripts/mobiles/endor/bark_mite_burrower_collector.py new file mode 100644 index 00000000..aa66d47c --- /dev/null +++ b/scripts/mobiles/endor/bark_mite_burrower_collector.py @@ -0,0 +1,38 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('bark_mite_burrower') + mobileTemplate.setLevel(63) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("bark mite") + mobileTemplate.setAssistRange(12) + mobileTemplate.setStalker(False) + mobileTemplate.setOptionsBitmask(128) + + templates = Vector() + templates.add('object/mobile/shared_bark_mite.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('bark_mite_burrower_collector', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/endor/bark_mite_burrower_drone.py b/scripts/mobiles/endor/bark_mite_burrower_drone.py new file mode 100644 index 00000000..44084b2c --- /dev/null +++ b/scripts/mobiles/endor/bark_mite_burrower_drone.py @@ -0,0 +1,38 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('bark_mite_burrower_drone') + mobileTemplate.setLevel(63) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("bark mite") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(False) + mobileTemplate.setOptionsBitmask(128) + + templates = Vector() + templates.add('object/mobile/shared_bark_mite.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('bark_mite_burrower_drone', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/endor/bark_mite_burrower_swarmling.py b/scripts/mobiles/endor/bark_mite_burrower_swarmling.py new file mode 100644 index 00000000..3beb10f2 --- /dev/null +++ b/scripts/mobiles/endor/bark_mite_burrower_swarmling.py @@ -0,0 +1,38 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('bark_mite_burrower_swarmling') + mobileTemplate.setLevel(63) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(.7) + mobileTemplate.setSocialGroup("bark mite") + mobileTemplate.setAssistRange(12) + mobileTemplate.setStalker(False) + mobileTemplate.setOptionsBitmask(128) + + templates = Vector() + templates.add('object/mobile/shared_bark_mite.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('bark_mite_burrower_swarmling', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/endor/bark_mite_burrower_worker.py b/scripts/mobiles/endor/bark_mite_burrower_worker.py new file mode 100644 index 00000000..58eebafb --- /dev/null +++ b/scripts/mobiles/endor/bark_mite_burrower_worker.py @@ -0,0 +1,38 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('bark_mite_burrower_worker') + mobileTemplate.setLevel(63) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(12) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("bark mite") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(False) + mobileTemplate.setOptionsBitmask(128) + + templates = Vector() + templates.add('object/mobile/shared_bark_mite.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureRangedAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('bark_mite_burrower_worker', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/endor/bedraggled_korga_laborer.py b/scripts/mobiles/endor/bedraggled_korga_laborer.py new file mode 100644 index 00000000..525c5c62 --- /dev/null +++ b/scripts/mobiles/endor/bedraggled_korga_laborer.py @@ -0,0 +1,49 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('bedraggled_korga_laborer') + mobileTemplate.setLevel(74) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(3) + mobileTemplate.setMaxSpawnDistance(5) + mobileTemplate.setDeathblow(True) + mobileTemplate.setSocialGroup('korga tribe') + mobileTemplate.setAssistRange(1) + mobileTemplate.setStalker(False) + mobileTemplate.setOptionsBitmask(128) + + + templates = Vector() + templates.add('object/mobile/shared_dulok_male.iff') + templates.add('object/mobile/shared_dulok_female.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('meleeHit') + mobileTemplate.setAttacks(attacks) + + lootPoolNames_1 = ['Junk'] + lootPoolChances_1 = [100] + lootGroupChance_1 = 65 + mobileTemplate.addToLootGroups(lootPoolNames_1,lootPoolChances_1,lootGroupChance_1) + + lootPoolNames_2 = ['random_loot_primitives'] + lootPoolChances_2 = [100] + lootGroupChance_2 = 35 + mobileTemplate.addToLootGroups(lootPoolNames_2,lootPoolChances_2,lootGroupChance_2) + + core.spawnService.addMobileTemplate('bedraggled_korga_laborer', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/endor/bedraggled_pubam_laborer.py b/scripts/mobiles/endor/bedraggled_pubam_laborer.py new file mode 100644 index 00000000..bf574598 --- /dev/null +++ b/scripts/mobiles/endor/bedraggled_pubam_laborer.py @@ -0,0 +1,49 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('bedraggled_pubam_laborer') + mobileTemplate.setLevel(64) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(3) + mobileTemplate.setMaxSpawnDistance(5) + mobileTemplate.setDeathblow(True) + mobileTemplate.setSocialGroup('pubam tribe') + mobileTemplate.setAssistRange(1) + mobileTemplate.setStalker(False) + mobileTemplate.setOptionsBitmask(128) + + + templates = Vector() + templates.add('object/mobile/shared_dulok_male.iff') + templates.add('object/mobile/shared_dulok_female.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('meleeHit') + mobileTemplate.setAttacks(attacks) + + lootPoolNames_1 = ['Junk'] + lootPoolChances_1 = [100] + lootGroupChance_1 = 65 + mobileTemplate.addToLootGroups(lootPoolNames_1,lootPoolChances_1,lootGroupChance_1) + + lootPoolNames_2 = ['random_loot_primitives'] + lootPoolChances_2 = [100] + lootGroupChance_2 = 35 + mobileTemplate.addToLootGroups(lootPoolNames_2,lootPoolChances_2,lootGroupChance_2) + + core.spawnService.addMobileTemplate('bedraggled_pubam_laborer', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/endor/beguilding_korga_scout.py b/scripts/mobiles/endor/beguilding_korga_scout.py new file mode 100644 index 00000000..54990abf --- /dev/null +++ b/scripts/mobiles/endor/beguilding_korga_scout.py @@ -0,0 +1,49 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('beguiling_korga_scout') + mobileTemplate.setLevel(76) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(3) + mobileTemplate.setMaxSpawnDistance(5) + mobileTemplate.setDeathblow(True) + mobileTemplate.setSocialGroup('korga tribe') + mobileTemplate.setAssistRange(1) + mobileTemplate.setStalker(False) + mobileTemplate.setOptionsBitmask(128) + + + templates = Vector() + templates.add('object/mobile/shared_dulok_male.iff') + templates.add('object/mobile/shared_dulok_female.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('meleeHit') + mobileTemplate.setAttacks(attacks) + + lootPoolNames_1 = ['Junk'] + lootPoolChances_1 = [100] + lootGroupChance_1 = 65 + mobileTemplate.addToLootGroups(lootPoolNames_1,lootPoolChances_1,lootGroupChance_1) + + lootPoolNames_2 = ['random_loot_primitives'] + lootPoolChances_2 = [100] + lootGroupChance_2 = 35 + mobileTemplate.addToLootGroups(lootPoolNames_2,lootPoolChances_2,lootGroupChance_2) + + core.spawnService.addMobileTemplate('beguiling_korga_scout', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/endor/beguiling_donkuwah_scout.py b/scripts/mobiles/endor/beguiling_donkuwah_scout.py new file mode 100644 index 00000000..18f80d28 --- /dev/null +++ b/scripts/mobiles/endor/beguiling_donkuwah_scout.py @@ -0,0 +1,49 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('beguiling_donkuwah_scout') + mobileTemplate.setLevel(76) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(3) + mobileTemplate.setMaxSpawnDistance(5) + mobileTemplate.setDeathblow(True) + mobileTemplate.setSocialGroup('donkuwah tribe') + mobileTemplate.setAssistRange(1) + mobileTemplate.setStalker(False) + mobileTemplate.setOptionsBitmask(128) + + + templates = Vector() + templates.add('object/mobile/shared_jinda_male.iff') + templates.add('object/mobile/shared_jinda_female.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('meleeHit') + mobileTemplate.setAttacks(attacks) + + lootPoolNames_1 = ['Junk'] + lootPoolChances_1 = [100] + lootGroupChance_1 = 65 + mobileTemplate.addToLootGroups(lootPoolNames_1,lootPoolChances_1,lootGroupChance_1) + + lootPoolNames_2 = ['random_loot_primitives'] + lootPoolChances_2 = [100] + lootGroupChance_2 = 35 + mobileTemplate.addToLootGroups(lootPoolNames_2,lootPoolChances_2,lootGroupChance_2) + + core.spawnService.addMobileTemplate('beguiling_donkuwah_scout', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/endor/beguiling_pubam_scout.py b/scripts/mobiles/endor/beguiling_pubam_scout.py new file mode 100644 index 00000000..197ae8c4 --- /dev/null +++ b/scripts/mobiles/endor/beguiling_pubam_scout.py @@ -0,0 +1,48 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('beguiling_pubam_scout') + mobileTemplate.setLevel(63) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(3) + mobileTemplate.setMaxSpawnDistance(5) + mobileTemplate.setDeathblow(True) + mobileTemplate.setSocialGroup('pubam tribe') + mobileTemplate.setAssistRange(1) + mobileTemplate.setStalker(False) + + + templates = Vector() + templates.add('object/mobile/shared_jinda_male.iff') + templates.add('object/mobile/shared_jinda_female.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('meleeHit') + mobileTemplate.setAttacks(attacks) + + lootPoolNames_1 = ['Junk'] + lootPoolChances_1 = [100] + lootGroupChance_1 = 65 + mobileTemplate.addToLootGroups(lootPoolNames_1,lootPoolChances_1,lootGroupChance_1) + + lootPoolNames_2 = ['random_loot_primitives'] + lootPoolChances_2 = [100] + lootGroupChance_2 = 35 + mobileTemplate.addToLootGroups(lootPoolNames_2,lootPoolChances_2,lootGroupChance_2) + + core.spawnService.addMobileTemplate('beguiling_pubam_scout', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/endor/berserk_marauder.py b/scripts/mobiles/endor/berserk_marauder.py new file mode 100644 index 00000000..f58a0b69 --- /dev/null +++ b/scripts/mobiles/endor/berserk_marauder.py @@ -0,0 +1,45 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('berserk_marauder') + mobileTemplate.setLevel(78) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(1) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(True) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("marauder") + mobileTemplate.setAssistRange(12) + mobileTemplate.setStalker(True) + mobileTemplate.setOptionsBitmask(192) + + templates = Vector() + templates.add('object/mobile/shared_marauder_male_01.iff') + templates.add('object/mobile/shared_marauder_male_02.iff') + templates.add('object/mobile/shared_marauder_male_02.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/polearm/shared_polearm_vibro_axe.iff', 1, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('meleeHit') + mobileTemplate.setAttacks(attacks) + + lootPoolNames_1 = ['Junk'] + lootPoolChances_1 = [100] + lootGroupChance_1 = 100 + mobileTemplate.addToLootGroups(lootPoolNames_1,lootPoolChances_1,lootGroupChance_1) + + core.spawnService.addMobileTemplate('berserk_marauder', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/endor/bewitching_donkuwah_shaman.py b/scripts/mobiles/endor/bewitching_donkuwah_shaman.py new file mode 100644 index 00000000..43d2ed95 --- /dev/null +++ b/scripts/mobiles/endor/bewitching_donkuwah_shaman.py @@ -0,0 +1,49 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('bewitching_donkuwah_shaman') + mobileTemplate.setLevel(78) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(3) + mobileTemplate.setMaxSpawnDistance(5) + mobileTemplate.setDeathblow(True) + mobileTemplate.setSocialGroup('donkuwah tribe') + mobileTemplate.setAssistRange(1) + mobileTemplate.setOptionsBitmask(192) + mobileTemplate.setStalker(True) + + + templates = Vector() + templates.add('object/mobile/shared_jinda_male.iff') + templates.add('object/mobile/shared_jinda_female.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('meleeHit') + mobileTemplate.setAttacks(attacks) + + lootPoolNames_1 = ['Junk'] + lootPoolChances_1 = [100] + lootGroupChance_1 = 65 + mobileTemplate.addToLootGroups(lootPoolNames_1,lootPoolChances_1,lootGroupChance_1) + + lootPoolNames_2 = ['random_loot_primitives'] + lootPoolChances_2 = [100] + lootGroupChance_2 = 35 + mobileTemplate.addToLootGroups(lootPoolNames_2,lootPoolChances_2,lootGroupChance_2) + + core.spawnService.addMobileTemplate('beitching_donkuwah_shaman', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/endor/bewitching_korga_dark_shaman.py b/scripts/mobiles/endor/bewitching_korga_dark_shaman.py new file mode 100644 index 00000000..85382e22 --- /dev/null +++ b/scripts/mobiles/endor/bewitching_korga_dark_shaman.py @@ -0,0 +1,49 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('bewitching_korga_dark_shaman') + mobileTemplate.setLevel(76) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(3) + mobileTemplate.setMaxSpawnDistance(5) + mobileTemplate.setDeathblow(True) + mobileTemplate.setSocialGroup('korga tribe') + mobileTemplate.setAssistRange(1) + mobileTemplate.setOptionsBitmask(192) + mobileTemplate.setStalker(True) + + + templates = Vector() + templates.add('object/mobile/shared_dulok_male.iff') + templates.add('object/mobile/shared_dulok_female.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('meleeHit') + mobileTemplate.setAttacks(attacks) + + lootPoolNames_1 = ['Junk'] + lootPoolChances_1 = [100] + lootGroupChance_1 = 65 + mobileTemplate.addToLootGroups(lootPoolNames_1,lootPoolChances_1,lootGroupChance_1) + + lootPoolNames_2 = ['random_loot_primitives'] + lootPoolChances_2 = [100] + lootGroupChance_2 = 35 + mobileTemplate.addToLootGroups(lootPoolNames_2,lootPoolChances_2,lootGroupChance_2) + + core.spawnService.addMobileTemplate('beitching_korga_dark_shaman', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/endor/bewitching_pubam_dark_shaman.py b/scripts/mobiles/endor/bewitching_pubam_dark_shaman.py new file mode 100644 index 00000000..bab0d5ad --- /dev/null +++ b/scripts/mobiles/endor/bewitching_pubam_dark_shaman.py @@ -0,0 +1,49 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('bewitching_pubam_dark_shaman') + mobileTemplate.setLevel(64) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(3) + mobileTemplate.setMaxSpawnDistance(5) + mobileTemplate.setDeathblow(True) + mobileTemplate.setSocialGroup('pubam tribe') + mobileTemplate.setAssistRange(1) + mobileTemplate.setOptionsBitmask(192) + mobileTemplate.setStalker(True) + + + templates = Vector() + templates.add('object/mobile/shared_dulok_male.iff') + templates.add('object/mobile/shared_dulok_female.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('meleeHit') + mobileTemplate.setAttacks(attacks) + + lootPoolNames_1 = ['Junk'] + lootPoolChances_1 = [100] + lootGroupChance_1 = 65 + mobileTemplate.addToLootGroups(lootPoolNames_1,lootPoolChances_1,lootGroupChance_1) + + lootPoolNames_2 = ['random_loot_primitives'] + lootPoolChances_2 = [100] + lootGroupChance_2 = 35 + mobileTemplate.addToLootGroups(lootPoolNames_2,lootPoolChances_2,lootGroupChance_2) + + core.spawnService.addMobileTemplate('beitching_pubam_dark_shaman', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/endor/black_sun_assassin.py b/scripts/mobiles/endor/black_sun_assassin.py new file mode 100644 index 00000000..14ce26a2 --- /dev/null +++ b/scripts/mobiles/endor/black_sun_assassin.py @@ -0,0 +1,43 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('eow_mand_bunker_blksun_assassin') + mobileTemplate.setLevel(88) + mobileTemplate.setDifficulty(1) + mobileTemplate.setAttackRange(15) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(1) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(True) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("death watch") + mobileTemplate.setAssistRange(12) + mobileTemplate.setStalker(True) + mobileTemplate.setOptionsBitmask(192) + + templates = Vector() + templates.add('object/mobile/shared_dressed_black_sun_assassin.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/rifle/shared_rifle_e11.iff', 1, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedshot') + mobileTemplate.setAttacks(attacks) + + lootPoolNames_1 = ['Junk'] + lootPoolChances_1 = [100] + lootGroupChance_1 = 100 + mobileTemplate.addToLootGroups(lootPoolNames_1,lootPoolChances_1,lootGroupChance_1) + + core.spawnService.addMobileTemplate('black_sun_assassin', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/endor/black_sun_guard.py b/scripts/mobiles/endor/black_sun_guard.py new file mode 100644 index 00000000..fdc8999e --- /dev/null +++ b/scripts/mobiles/endor/black_sun_guard.py @@ -0,0 +1,43 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('eow_mand_bunker_blksun_guard') + mobileTemplate.setLevel(88) + mobileTemplate.setDifficulty(1) + mobileTemplate.setAttackRange(15) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(1) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(True) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("death watch") + mobileTemplate.setAssistRange(12) + mobileTemplate.setStalker(True) + mobileTemplate.setOptionsBitmask(192) + + templates = Vector() + templates.add('object/mobile/shared_dressed_black_sun_guard.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/rifle/shared_rifle_e11.iff', 1, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedshot') + mobileTemplate.setAttacks(attacks) + + lootPoolNames_1 = ['Junk'] + lootPoolChances_1 = [100] + lootGroupChance_1 = 100 + mobileTemplate.addToLootGroups(lootPoolNames_1,lootPoolChances_1,lootGroupChance_1) + + core.spawnService.addMobileTemplate('black_sun_guard', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/endor/black_sun_thug.py b/scripts/mobiles/endor/black_sun_thug.py new file mode 100644 index 00000000..21bdb8f4 --- /dev/null +++ b/scripts/mobiles/endor/black_sun_thug.py @@ -0,0 +1,43 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('eow_mand_bunker_blksun_thug') + mobileTemplate.setLevel(86) + mobileTemplate.setDifficulty(1) + mobileTemplate.setAttackRange(15) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(1) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(True) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("death watch") + mobileTemplate.setAssistRange(12) + mobileTemplate.setStalker(True) + mobileTemplate.setOptionsBitmask(192) + + templates = Vector() + templates.add('object/mobile/shared_dressed_black_sun_thug.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/rifle/shared_rifle_e11.iff', 1, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedshot') + mobileTemplate.setAttacks(attacks) + + lootPoolNames_1 = ['Junk'] + lootPoolChances_1 = [100] + lootGroupChance_1 = 100 + mobileTemplate.addToLootGroups(lootPoolNames_1,lootPoolChances_1,lootGroupChance_1) + + core.spawnService.addMobileTemplate('black_sun_thug', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/endor/blood_drenched_merek_king.py b/scripts/mobiles/endor/blood_drenched_merek_king.py new file mode 100644 index 00000000..8e9f8d68 --- /dev/null +++ b/scripts/mobiles/endor/blood_drenched_merek_king.py @@ -0,0 +1,40 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('blood_drenched_merek_king') + mobileTemplate.setLevel(64) + mobileTemplate.setDifficulty(1) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(True) + mobileTemplate.setScale(1.2) + mobileTemplate.setHideType("Leathery Hide") + mobileTemplate.setHideAmount(55) + mobileTemplate.setSocialGroup("merek") + mobileTemplate.setAssistRange(12) + mobileTemplate.setStalker(True) + mobileTemplate.setOptionsBitmask(192) + + templates = Vector() + templates.add('object/mobile/shared_merek.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('blood_drenched_merek_king', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/endor/blood_frenzied_boar_wolf.py b/scripts/mobiles/endor/blood_frenzied_boar_wolf.py new file mode 100644 index 00000000..0cab5637 --- /dev/null +++ b/scripts/mobiles/endor/blood_frenzied_boar_wolf.py @@ -0,0 +1,38 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('blood_frenzied_boar_wolf') + mobileTemplate.setLevel(68) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(True) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("boar wolf") + mobileTemplate.setAssistRange(12) + mobileTemplate.setStalker(True) + mobileTemplate.setOptionsBitmask(192) + + templates = Vector() + templates.add('object/mobile/shared_boar_wolf.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('blood_frenzied_boar_wolf', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/endor/blood_stained_merek.py b/scripts/mobiles/endor/blood_stained_merek.py new file mode 100644 index 00000000..936e35fd --- /dev/null +++ b/scripts/mobiles/endor/blood_stained_merek.py @@ -0,0 +1,40 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('blood_stained_merek') + mobileTemplate.setLevel(63) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(True) + mobileTemplate.setScale(1) + mobileTemplate.setHideType("Leathery Hide") + mobileTemplate.setHideAmount(75) + mobileTemplate.setSocialGroup("merek") + mobileTemplate.setAssistRange(12) + mobileTemplate.setStalker(False) + mobileTemplate.setOptionsBitmask(192) + + templates = Vector() + templates.add('object/mobile/shared_merek.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('blood_stained_merek', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/endor/bloodseeker_mite_drone.py b/scripts/mobiles/endor/bloodseeker_mite_drone.py new file mode 100644 index 00000000..8b1cc815 --- /dev/null +++ b/scripts/mobiles/endor/bloodseeker_mite_drone.py @@ -0,0 +1,37 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('bloodseeker_mite_drone') + mobileTemplate.setLevel(64) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("bloodseeker") + mobileTemplate.setAssistRange(12) + mobileTemplate.setStalker(False) + + templates = Vector() + templates.add('object/mobile/shared_bloodseeker.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('bloodseeker_mite_drone', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/endor/bloodseeker_mite_queen.py b/scripts/mobiles/endor/bloodseeker_mite_queen.py new file mode 100644 index 00000000..ee9dcbe5 --- /dev/null +++ b/scripts/mobiles/endor/bloodseeker_mite_queen.py @@ -0,0 +1,38 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('bloodseeker_mite_queen') + mobileTemplate.setLevel(60) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(True) + mobileTemplate.setScale(1.2) + mobileTemplate.setSocialGroup("bloodseeker") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(False) + mobileTemplate.setOptionsBitmask(192) + + templates = Vector() + templates.add('object/mobile/shared_bloodseeker.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('bloodseeker_mite_queen', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/endor/blooming_jax.py b/scripts/mobiles/endor/blooming_jax.py new file mode 100644 index 00000000..942fa6a7 --- /dev/null +++ b/scripts/mobiles/endor/blooming_jax.py @@ -0,0 +1,42 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('blooming_jax') + mobileTemplate.setLevel(61) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setHideType("Bristley Hide") + mobileTemplate.setHideAmount(35) + mobileTemplate.setBoneType("Mammal Bones") + mobileTemplate.setBoneAmount(25) + mobileTemplate.setSocialGroup("jax") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(False) + mobileTemplate.setOptionsBitmask(128) + + templates = Vector() + templates.add('object/mobile/shared_jax.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('blooming_jax', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/endor/blurrg.py b/scripts/mobiles/endor/blurrg.py new file mode 100644 index 00000000..791d992b --- /dev/null +++ b/scripts/mobiles/endor/blurrg.py @@ -0,0 +1,38 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('blurrg') + mobileTemplate.setLevel(62) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("blurrg") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(False) + mobileTemplate.setOptionsBitmask(128) + + templates = Vector() + templates.add('object/mobile/shared_blurrg.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('blurrg', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/endor/blurrg_hunter.py b/scripts/mobiles/endor/blurrg_hunter.py new file mode 100644 index 00000000..cba89a23 --- /dev/null +++ b/scripts/mobiles/endor/blurrg_hunter.py @@ -0,0 +1,38 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('blurrg_hunter') + mobileTemplate.setLevel(64) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("blurrg") + mobileTemplate.setAssistRange(12) + mobileTemplate.setStalker(False) + mobileTemplate.setOptionsBitmask(128) + + templates = Vector() + templates.add('object/mobile/shared_blurrg.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('blurrg_hunter', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/endor/blurrg_pup.py b/scripts/mobiles/endor/blurrg_pup.py new file mode 100644 index 00000000..e4be7a4d --- /dev/null +++ b/scripts/mobiles/endor/blurrg_pup.py @@ -0,0 +1,38 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('blurrg_pup') + mobileTemplate.setLevel(62) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(.5) + mobileTemplate.setSocialGroup("blurrg") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(False) + mobileTemplate.setOptionsBitmask(128) + + templates = Vector() + templates.add('object/mobile/shared_blurrg.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('blurrg_pup', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/endor/blurrg_raptor.py b/scripts/mobiles/endor/blurrg_raptor.py new file mode 100644 index 00000000..3049bce3 --- /dev/null +++ b/scripts/mobiles/endor/blurrg_raptor.py @@ -0,0 +1,38 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('blurrg_raptor') + mobileTemplate.setLevel(63) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(True) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("blurrg") + mobileTemplate.setAssistRange(12) + mobileTemplate.setStalker(True) + mobileTemplate.setOptionsBitmask(192) + + templates = Vector() + templates.add('object/mobile/shared_blurrg.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('blurrg_raptor', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/endor/blurrg_sand_crawler.py b/scripts/mobiles/endor/blurrg_sand_crawler.py new file mode 100644 index 00000000..18bdcc45 --- /dev/null +++ b/scripts/mobiles/endor/blurrg_sand_crawler.py @@ -0,0 +1,38 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('blurrg_sand_crawler') + mobileTemplate.setLevel(65) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("blurrg") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(False) + mobileTemplate.setOptionsBitmask(128) + + templates = Vector() + templates.add('object/mobile/shared_blurrg.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('blurrg_sand_crawler', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/endor/blurrg_tracker.py b/scripts/mobiles/endor/blurrg_tracker.py new file mode 100644 index 00000000..7bf9d70e --- /dev/null +++ b/scripts/mobiles/endor/blurrg_tracker.py @@ -0,0 +1,38 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('blurrg_tracker') + mobileTemplate.setLevel(54) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("blurrg") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(False) + mobileTemplate.setOptionsBitmask(128) + + templates = Vector() + templates.add('object/mobile/shared_blurrg.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('blurrg_tracker', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/endor/blushing_jax.py b/scripts/mobiles/endor/blushing_jax.py new file mode 100644 index 00000000..5d7d64a5 --- /dev/null +++ b/scripts/mobiles/endor/blushing_jax.py @@ -0,0 +1,42 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('blushing_jax') + mobileTemplate.setLevel(61) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setHideType("Bristley Hide") + mobileTemplate.setHideAmount(35) + mobileTemplate.setBoneType("Mammal Bones") + mobileTemplate.setBoneAmount(25) + mobileTemplate.setSocialGroup("jax") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(False) + mobileTemplate.setOptionsBitmask(128) + + templates = Vector() + templates.add('object/mobile/shared_jax.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('blushing_jax', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/endor/boar_wolf.py b/scripts/mobiles/endor/boar_wolf.py new file mode 100644 index 00000000..ef24834a --- /dev/null +++ b/scripts/mobiles/endor/boar_wolf.py @@ -0,0 +1,38 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('boar_wolf') + mobileTemplate.setLevel(65) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("boar wolf") + mobileTemplate.setAssistRange(12) + mobileTemplate.setStalker(False) + mobileTemplate.setOptionsBitmask(128) + + templates = Vector() + templates.add('object/mobile/shared_boar_wolf.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('boar_wolf', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/endor/boar_wolf_cub.py b/scripts/mobiles/endor/boar_wolf_cub.py new file mode 100644 index 00000000..b3288cec --- /dev/null +++ b/scripts/mobiles/endor/boar_wolf_cub.py @@ -0,0 +1,38 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('boar_wolf_cub') + mobileTemplate.setLevel(64) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(.5) + mobileTemplate.setSocialGroup("boar wolf") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(False) + mobileTemplate.setOptionsBitmask(128) + + templates = Vector() + templates.add('object/mobile/shared_boar_wolf.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('boar_wolf_cub', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/endor/boar_wolf_ravager.py b/scripts/mobiles/endor/boar_wolf_ravager.py new file mode 100644 index 00000000..e7dce369 --- /dev/null +++ b/scripts/mobiles/endor/boar_wolf_ravager.py @@ -0,0 +1,38 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('boar_wolf_ravager') + mobileTemplate.setLevel(66) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(True) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("boar wolf") + mobileTemplate.setAssistRange(12) + mobileTemplate.setStalker(False) + mobileTemplate.setOptionsBitmask(128) + + templates = Vector() + templates.add('object/mobile/shared_boar_wolf.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('boar_wolf_ravager', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/endor/bolle_bol_bark_biter.py b/scripts/mobiles/endor/bolle_bol_bark_biter.py new file mode 100644 index 00000000..9c524a65 --- /dev/null +++ b/scripts/mobiles/endor/bolle_bol_bark_biter.py @@ -0,0 +1,42 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('bolle_bol_bark_biter') + mobileTemplate.setLevel(65) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setHideType("Leathery Hide") + mobileTemplate.setHideAmount(300) + mobileTemplate.setBoneType("Mammal Bones") + mobileTemplate.setBoneAmount(180) + mobileTemplate.setSocialGroup("bolle bol") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(False) + mobileTemplate.setOptionsBitmask(128) + + templates = Vector() + templates.add('object/mobile/shared_bolle_bol.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('bolle_bol_bark_biter', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/endor/bolle_bol_calf.py b/scripts/mobiles/endor/bolle_bol_calf.py new file mode 100644 index 00000000..54427381 --- /dev/null +++ b/scripts/mobiles/endor/bolle_bol_calf.py @@ -0,0 +1,42 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('bolle_bol_calf') + mobileTemplate.setLevel(64) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(.5) + mobileTemplate.setHideType("Leathery Hide") + mobileTemplate.setHideAmount(300) + mobileTemplate.setBoneType("Mammal Bones") + mobileTemplate.setBoneAmount(180) + mobileTemplate.setSocialGroup("bolle bol") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(False) + mobileTemplate.setOptionsBitmask(128) + + templates = Vector() + templates.add('object/mobile/shared_bolle_bol.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('bolle_bol_calf', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/endor/bolle_bol_colt.py b/scripts/mobiles/endor/bolle_bol_colt.py new file mode 100644 index 00000000..249e29ce --- /dev/null +++ b/scripts/mobiles/endor/bolle_bol_colt.py @@ -0,0 +1,42 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('bolle_bol_bolt') + mobileTemplate.setLevel(57) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(.5) + mobileTemplate.setHideType("Leathery Hide") + mobileTemplate.setHideAmount(300) + mobileTemplate.setBoneType("Mammal Bones") + mobileTemplate.setBoneAmount(180) + mobileTemplate.setSocialGroup("bolle bol") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(False) + mobileTemplate.setOptionsBitmask(128) + + templates = Vector() + templates.add('object/mobile/shared_bolle_bol.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('bolle_bol_colt', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/endor/bolle_bol_female.py b/scripts/mobiles/endor/bolle_bol_female.py new file mode 100644 index 00000000..f954d854 --- /dev/null +++ b/scripts/mobiles/endor/bolle_bol_female.py @@ -0,0 +1,42 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('bolle_bol_female') + mobileTemplate.setLevel(65) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setHideType("Leathery Hide") + mobileTemplate.setHideAmount(300) + mobileTemplate.setBoneType("Mammal Bones") + mobileTemplate.setBoneAmount(180) + mobileTemplate.setSocialGroup("bolle bol") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(False) + mobileTemplate.setOptionsBitmask(128) + + templates = Vector() + templates.add('object/mobile/shared_bolle_bol.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('bolle_bol_female', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/endor/bolle_bol_herd_leader.py b/scripts/mobiles/endor/bolle_bol_herd_leader.py new file mode 100644 index 00000000..49519ff6 --- /dev/null +++ b/scripts/mobiles/endor/bolle_bol_herd_leader.py @@ -0,0 +1,42 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('bolle_bol_herd_leader') + mobileTemplate.setLevel(65) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1.2) + mobileTemplate.setHideType("Leathery Hide") + mobileTemplate.setHideAmount(300) + mobileTemplate.setBoneType("Mammal Bones") + mobileTemplate.setBoneAmount(180) + mobileTemplate.setSocialGroup("bolle bol") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(True) + mobileTemplate.setOptionsBitmask(128) + + templates = Vector() + templates.add('object/mobile/shared_bolle_bol.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('bolle_bol_herd_leader', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/endor/bolle_bol_male.py b/scripts/mobiles/endor/bolle_bol_male.py new file mode 100644 index 00000000..fc1c59b5 --- /dev/null +++ b/scripts/mobiles/endor/bolle_bol_male.py @@ -0,0 +1,42 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('bolle_bol_male') + mobileTemplate.setLevel(65) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setHideType("Leathery Hide") + mobileTemplate.setHideAmount(300) + mobileTemplate.setBoneType("Mammal Bones") + mobileTemplate.setBoneAmount(180) + mobileTemplate.setSocialGroup("bolle bol") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(True) + mobileTemplate.setOptionsBitmask(128) + + templates = Vector() + templates.add('object/mobile/shared_bolle_bol.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('bolle_bol_male', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/endor/bolle_bol_stomper.py b/scripts/mobiles/endor/bolle_bol_stomper.py new file mode 100644 index 00000000..2276e31c --- /dev/null +++ b/scripts/mobiles/endor/bolle_bol_stomper.py @@ -0,0 +1,42 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('bolle_bol_stomper') + mobileTemplate.setLevel(60) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setHideType("Leathery Hide") + mobileTemplate.setHideAmount(300) + mobileTemplate.setBoneType("Mammal Bones") + mobileTemplate.setBoneAmount(180) + mobileTemplate.setSocialGroup("bolle bol") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(True) + mobileTemplate.setOptionsBitmask(128) + + templates = Vector() + templates.add('object/mobile/shared_bolle_bol.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('bolle_bol_stomper', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/endor/bordok_ancient.py b/scripts/mobiles/endor/bordok_ancient.py new file mode 100644 index 00000000..6cf931b6 --- /dev/null +++ b/scripts/mobiles/endor/bordok_ancient.py @@ -0,0 +1,38 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('bordok_ancient') + mobileTemplate.setLevel(62) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("bordok") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(True) + mobileTemplate.setOptionsBitmask(128) + + templates = Vector() + templates.add('object/mobile/shared_bordok.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('bordok_ancient', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/endor/bordok_foal.py b/scripts/mobiles/endor/bordok_foal.py new file mode 100644 index 00000000..2df76fe4 --- /dev/null +++ b/scripts/mobiles/endor/bordok_foal.py @@ -0,0 +1,38 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('bordok_foal') + mobileTemplate.setLevel(63) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(.5) + mobileTemplate.setSocialGroup("bordok") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(True) + mobileTemplate.setOptionsBitmask(128) + + templates = Vector() + templates.add('object/mobile/shared_bordok.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('bordok_foal', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/endor/bordok_herd_master.py b/scripts/mobiles/endor/bordok_herd_master.py new file mode 100644 index 00000000..d2580402 --- /dev/null +++ b/scripts/mobiles/endor/bordok_herd_master.py @@ -0,0 +1,38 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('bordok_herd_master') + mobileTemplate.setLevel(62) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1.2) + mobileTemplate.setSocialGroup("bordok") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(True) + mobileTemplate.setOptionsBitmask(128) + + templates = Vector() + templates.add('object/mobile/shared_bordok.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('bordok_herd_master', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/endor/bordok_mare.py b/scripts/mobiles/endor/bordok_mare.py new file mode 100644 index 00000000..a9fd9e2e --- /dev/null +++ b/scripts/mobiles/endor/bordok_mare.py @@ -0,0 +1,38 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('bordok_mare') + mobileTemplate.setLevel(62) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(True) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("bordok") + mobileTemplate.setAssistRange(12) + mobileTemplate.setStalker(True) + mobileTemplate.setOptionsBitmask(128) + + templates = Vector() + templates.add('object/mobile/shared_bordok.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('bordok_mare', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/endor/bounding_jax.py b/scripts/mobiles/endor/bounding_jax.py new file mode 100644 index 00000000..6655fe84 --- /dev/null +++ b/scripts/mobiles/endor/bounding_jax.py @@ -0,0 +1,42 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('bounding_jax') + mobileTemplate.setLevel(60) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setHideType("Bristley Hide") + mobileTemplate.setHideAmount(35) + mobileTemplate.setBoneType("Mammal Bones") + mobileTemplate.setBoneAmount(25) + mobileTemplate.setSocialGroup("jax") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(True) + mobileTemplate.setOptionsBitmask(128) + + templates = Vector() + templates.add('object/mobile/shared_jax.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('bounding_jax', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/endor/competent_gondula_ritualist.py b/scripts/mobiles/endor/competent_gondula_ritualist.py new file mode 100644 index 00000000..1e1ae82d --- /dev/null +++ b/scripts/mobiles/endor/competent_gondula_ritualist.py @@ -0,0 +1,71 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('competent_gondula_ritualist') + mobileTemplate.setLevel(79) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(3) + mobileTemplate.setMaxSpawnDistance(5) + mobileTemplate.setDeathblow(True) + mobileTemplate.setSocialGroup('gondula tribe') + mobileTemplate.setAssistRange(1) + mobileTemplate.setStalker(True) + mobileTemplate.setOptionsBitmask(128) + + templates = Vector() + templates.add('object/mobile/shared_dressed_ewok_f_01.iff') + templates.add('object/mobile/shared_dressed_ewok_f_02.iff') + templates.add('object/mobile/shared_dressed_ewok_f_03.iff') + templates.add('object/mobile/shared_dressed_ewok_f_04.iff') + templates.add('object/mobile/shared_dressed_ewok_f_05.iff') + templates.add('object/mobile/shared_dressed_ewok_f_06.iff') + templates.add('object/mobile/shared_dressed_ewok_f_07.iff') + templates.add('object/mobile/shared_dressed_ewok_f_08.iff') + templates.add('object/mobile/shared_dressed_ewok_f_09.iff') + templates.add('object/mobile/shared_dressed_ewok_f_10.iff') + templates.add('object/mobile/shared_dressed_ewok_f_11.iff') + templates.add('object/mobile/shared_dressed_ewok_f_12.iff') + templates.add('object/mobile/shared_dressed_ewok_m_01.iff') + templates.add('object/mobile/shared_dressed_ewok_m_02.iff') + templates.add('object/mobile/shared_dressed_ewok_m_03.iff') + templates.add('object/mobile/shared_dressed_ewok_m_04.iff') + templates.add('object/mobile/shared_dressed_ewok_m_05.iff') + templates.add('object/mobile/shared_dressed_ewok_m_06.iff') + templates.add('object/mobile/shared_dressed_ewok_m_07.iff') + templates.add('object/mobile/shared_dressed_ewok_m_08.iff') + templates.add('object/mobile/shared_dressed_ewok_m_09.iff') + templates.add('object/mobile/shared_dressed_ewok_m_10.iff') + templates.add('object/mobile/shared_dressed_ewok_m_11.iff') + templates.add('object/mobile/shared_dressed_ewok_m_12.iff') + + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('meleeHit') + mobileTemplate.setAttacks(attacks) + + lootPoolNames_1 = ['Junk'] + lootPoolChances_1 = [100] + lootGroupChance_1 = 65 + mobileTemplate.addToLootGroups(lootPoolNames_1,lootPoolChances_1,lootGroupChance_1) + + lootPoolNames_2 = ['random_loot_primitives'] + lootPoolChances_2 = [100] + lootGroupChance_2 = 35 + mobileTemplate.addToLootGroups(lootPoolNames_2,lootPoolChances_2,lootGroupChance_2) + + core.spawnService.addMobileTemplate('competent_gondula_ritualist', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/endor/competent_jinda_ritualist.py b/scripts/mobiles/endor/competent_jinda_ritualist.py new file mode 100644 index 00000000..0e665bcb --- /dev/null +++ b/scripts/mobiles/endor/competent_jinda_ritualist.py @@ -0,0 +1,48 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('competent_jinda_ritualist') + mobileTemplate.setLevel(65) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(3) + mobileTemplate.setMaxSpawnDistance(5) + mobileTemplate.setDeathblow(True) + mobileTemplate.setSocialGroup('jinda tribe') + mobileTemplate.setAssistRange(1) + mobileTemplate.setStalker(True) + mobileTemplate.setOptionsBitmask(128) + + templates = Vector() + templates.add('object/mobile/shared_jinda_male.iff') + templates.add('object/mobile/shared_jinda_female.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('meleeHit') + mobileTemplate.setAttacks(attacks) + + lootPoolNames_1 = ['Junk'] + lootPoolChances_1 = [100] + lootGroupChance_1 = 65 + mobileTemplate.addToLootGroups(lootPoolNames_1,lootPoolChances_1,lootGroupChance_1) + + lootPoolNames_2 = ['random_loot_primitives'] + lootPoolChances_2 = [100] + lootGroupChance_2 = 35 + mobileTemplate.addToLootGroups(lootPoolNames_2,lootPoolChances_2,lootGroupChance_2) + + core.spawnService.addMobileTemplate('competent_jinda_ritualist', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/endor/competent_panshee_ritualist.py b/scripts/mobiles/endor/competent_panshee_ritualist.py new file mode 100644 index 00000000..4bb444fd --- /dev/null +++ b/scripts/mobiles/endor/competent_panshee_ritualist.py @@ -0,0 +1,70 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('competent_panshee_ritualist') + mobileTemplate.setLevel(70) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(3) + mobileTemplate.setMaxSpawnDistance(5) + mobileTemplate.setDeathblow(True) + mobileTemplate.setSocialGroup('panshee tribe') + mobileTemplate.setAssistRange(1) + mobileTemplate.setStalker(True) + mobileTemplate.setOptionsBitmask(128) + + templates = Vector() + templates.add('object/mobile/shared_dressed_ewok_f_01.iff') + templates.add('object/mobile/shared_dressed_ewok_f_02.iff') + templates.add('object/mobile/shared_dressed_ewok_f_03.iff') + templates.add('object/mobile/shared_dressed_ewok_f_04.iff') + templates.add('object/mobile/shared_dressed_ewok_f_05.iff') + templates.add('object/mobile/shared_dressed_ewok_f_06.iff') + templates.add('object/mobile/shared_dressed_ewok_f_07.iff') + templates.add('object/mobile/shared_dressed_ewok_f_08.iff') + templates.add('object/mobile/shared_dressed_ewok_f_09.iff') + templates.add('object/mobile/shared_dressed_ewok_f_10.iff') + templates.add('object/mobile/shared_dressed_ewok_f_11.iff') + templates.add('object/mobile/shared_dressed_ewok_f_12.iff') + templates.add('object/mobile/shared_dressed_ewok_m_01.iff') + templates.add('object/mobile/shared_dressed_ewok_m_02.iff') + templates.add('object/mobile/shared_dressed_ewok_m_03.iff') + templates.add('object/mobile/shared_dressed_ewok_m_04.iff') + templates.add('object/mobile/shared_dressed_ewok_m_05.iff') + templates.add('object/mobile/shared_dressed_ewok_m_06.iff') + templates.add('object/mobile/shared_dressed_ewok_m_07.iff') + templates.add('object/mobile/shared_dressed_ewok_m_08.iff') + templates.add('object/mobile/shared_dressed_ewok_m_09.iff') + templates.add('object/mobile/shared_dressed_ewok_m_10.iff') + templates.add('object/mobile/shared_dressed_ewok_m_11.iff') + templates.add('object/mobile/shared_dressed_ewok_m_12.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('meleeHit') + mobileTemplate.setAttacks(attacks) + + lootPoolNames_1 = ['Junk'] + lootPoolChances_1 = [100] + lootGroupChance_1 = 65 + mobileTemplate.addToLootGroups(lootPoolNames_1,lootPoolChances_1,lootGroupChance_1) + + lootPoolNames_2 = ['random_loot_primitives'] + lootPoolChances_2 = [100] + lootGroupChance_2 = 35 + mobileTemplate.addToLootGroups(lootPoolNames_2,lootPoolChances_2,lootGroupChance_2) + + core.spawnService.addMobileTemplate('competent_panshee_ritualist', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/endor/cowardly_gurreck.py b/scripts/mobiles/endor/cowardly_gurreck.py new file mode 100644 index 00000000..c7c7422f --- /dev/null +++ b/scripts/mobiles/endor/cowardly_gurreck.py @@ -0,0 +1,38 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('cowardly_gurreck') + mobileTemplate.setLevel(60) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("gurreck") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(True) + mobileTemplate.setOptionsBitmask(128) + + templates = Vector() + templates.add('object/mobile/shared_gurreck.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('cowardly_gurreck', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/endor/crafty_donkuwah_scout.py b/scripts/mobiles/endor/crafty_donkuwah_scout.py new file mode 100644 index 00000000..19a54232 --- /dev/null +++ b/scripts/mobiles/endor/crafty_donkuwah_scout.py @@ -0,0 +1,48 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('crafty_donkuwah_scout') + mobileTemplate.setLevel(78) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(3) + mobileTemplate.setMaxSpawnDistance(5) + mobileTemplate.setDeathblow(True) + mobileTemplate.setSocialGroup('donkuwah tribe') + mobileTemplate.setAssistRange(1) + mobileTemplate.setOptionsBitmask(192) + mobileTemplate.setStalker(True) + + templates = Vector() + templates.add('object/mobile/shared_jinda_male.iff') + templates.add('object/mobile/shared_jinda_female.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('meleeHit') + mobileTemplate.setAttacks(attacks) + + lootPoolNames_1 = ['Junk'] + lootPoolChances_1 = [100] + lootGroupChance_1 = 65 + mobileTemplate.addToLootGroups(lootPoolNames_1,lootPoolChances_1,lootGroupChance_1) + + lootPoolNames_2 = ['random_loot_primitives'] + lootPoolChances_2 = [100] + lootGroupChance_2 = 35 + mobileTemplate.addToLootGroups(lootPoolNames_2,lootPoolChances_2,lootGroupChance_2) + + core.spawnService.addMobileTemplate('crafty_donkuwah_scout', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/endor/crafty_korga_scout.py b/scripts/mobiles/endor/crafty_korga_scout.py new file mode 100644 index 00000000..8c7693e5 --- /dev/null +++ b/scripts/mobiles/endor/crafty_korga_scout.py @@ -0,0 +1,48 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('crafty_korga_scout') + mobileTemplate.setLevel(74) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(3) + mobileTemplate.setMaxSpawnDistance(5) + mobileTemplate.setDeathblow(True) + mobileTemplate.setSocialGroup('korga tribe') + mobileTemplate.setAssistRange(1) + mobileTemplate.setStalker(True) + mobileTemplate.setOptionsBitmask(128) + + templates = Vector() + templates.add('object/mobile/shared_dulok_male.iff') + templates.add('object/mobile/shared_dulok_female.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('meleeHit') + mobileTemplate.setAttacks(attacks) + + lootPoolNames_1 = ['Junk'] + lootPoolChances_1 = [100] + lootGroupChance_1 = 65 + mobileTemplate.addToLootGroups(lootPoolNames_1,lootPoolChances_1,lootGroupChance_1) + + lootPoolNames_2 = ['random_loot_primitives'] + lootPoolChances_2 = [100] + lootGroupChance_2 = 35 + mobileTemplate.addToLootGroups(lootPoolNames_2,lootPoolChances_2,lootGroupChance_2) + + core.spawnService.addMobileTemplate('crafty_korga_scout', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/endor/crafty_pubam_scout.py b/scripts/mobiles/endor/crafty_pubam_scout.py new file mode 100644 index 00000000..28ac20b0 --- /dev/null +++ b/scripts/mobiles/endor/crafty_pubam_scout.py @@ -0,0 +1,48 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('crafty_pubam_scout') + mobileTemplate.setLevel(62) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(3) + mobileTemplate.setMaxSpawnDistance(5) + mobileTemplate.setDeathblow(True) + mobileTemplate.setSocialGroup('pubam tribe') + mobileTemplate.setAssistRange(1) + mobileTemplate.setOptionsBitmask(192) + mobileTemplate.setStalker(True) + + templates = Vector() + templates.add('object/mobile/shared_dulok_male.iff') + templates.add('object/mobile/shared_dulok_female.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('meleeHit') + mobileTemplate.setAttacks(attacks) + + lootPoolNames_1 = ['Junk'] + lootPoolChances_1 = [100] + lootGroupChance_1 = 65 + mobileTemplate.addToLootGroups(lootPoolNames_1,lootPoolChances_1,lootGroupChance_1) + + lootPoolNames_2 = ['random_loot_primitives'] + lootPoolChances_2 = [100] + lootGroupChance_2 = 35 + mobileTemplate.addToLootGroups(lootPoolNames_2,lootPoolChances_2,lootGroupChance_2) + + core.spawnService.addMobileTemplate('crafty_pubam_scout', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/endor/crazed_gurreck.py b/scripts/mobiles/endor/crazed_gurreck.py new file mode 100644 index 00000000..25681b8f --- /dev/null +++ b/scripts/mobiles/endor/crazed_gurreck.py @@ -0,0 +1,38 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('crazed_gurreck') + mobileTemplate.setLevel(60) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(True) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("gurreck") + mobileTemplate.setAssistRange(12) + mobileTemplate.setStalker(True) + mobileTemplate.setOptionsBitmask(192) + + templates = Vector() + templates.add('object/mobile/shared_gurreck.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('gurreck', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/endor/crimson_blurrg.py b/scripts/mobiles/endor/crimson_blurrg.py new file mode 100644 index 00000000..4658189c --- /dev/null +++ b/scripts/mobiles/endor/crimson_blurrg.py @@ -0,0 +1,38 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('crimson_blurrg') + mobileTemplate.setLevel(60) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("blurrg") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(True) + mobileTemplate.setOptionsBitmask(192) + + templates = Vector() + templates.add('object/mobile/shared_blurrg.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('crimson_blurrg', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/endor/delirious_merek_avenger.py b/scripts/mobiles/endor/delirious_merek_avenger.py new file mode 100644 index 00000000..28f5c78e --- /dev/null +++ b/scripts/mobiles/endor/delirious_merek_avenger.py @@ -0,0 +1,40 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('delirious_merek_avenger') + mobileTemplate.setLevel(63) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(12) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setHideType("Leathery Hide") + mobileTemplate.setHideAmount(45) + mobileTemplate.setSocialGroup("merek") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(True) + mobileTemplate.setOptionsBitmask(192) + + templates = Vector() + templates.add('object/mobile/shared_merek.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureRangedAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('delirious_merek_avenger', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/endor/deranged_mantigrue.py b/scripts/mobiles/endor/deranged_mantigrue.py new file mode 100644 index 00000000..26c25be3 --- /dev/null +++ b/scripts/mobiles/endor/deranged_mantigrue.py @@ -0,0 +1,38 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('deranged_mantigrue') + mobileTemplate.setLevel(61) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("mantigrue") + mobileTemplate.setAssistRange(12) + mobileTemplate.setStalker(True) + mobileTemplate.setOptionsBitmask(192) + + templates = Vector() + templates.add('object/mobile/shared_condor_dragon.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('deranged_mantigrue', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/endor/deranged_ravisher.py b/scripts/mobiles/endor/deranged_ravisher.py new file mode 100644 index 00000000..a11c2b47 --- /dev/null +++ b/scripts/mobiles/endor/deranged_ravisher.py @@ -0,0 +1,38 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('squill_deranged_ravisher') + mobileTemplate.setLevel(33) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("squill") + mobileTemplate.setAssistRange(12) + mobileTemplate.setStalker(True) + mobileTemplate.setOptionsBitmask(192) + + templates = Vector() + templates.add('object/mobile/shared_squill.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('deranged_ravisher', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/endor/desert_gurreck_charger.py b/scripts/mobiles/endor/desert_gurreck_charger.py new file mode 100644 index 00000000..02afdbec --- /dev/null +++ b/scripts/mobiles/endor/desert_gurreck_charger.py @@ -0,0 +1,38 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('desert_gurreck_charger') + mobileTemplate.setLevel(65) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("gurreck") + mobileTemplate.setAssistRange(12) + mobileTemplate.setStalker(True) + mobileTemplate.setOptionsBitmask(192) + + templates = Vector() + templates.add('object/mobile/shared_gurreck.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('desert_gurreck_charger', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/endor/desert_scavenger.py b/scripts/mobiles/endor/desert_scavenger.py new file mode 100644 index 00000000..74ec2356 --- /dev/null +++ b/scripts/mobiles/endor/desert_scavenger.py @@ -0,0 +1,42 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('borgle_desert_runner') + mobileTemplate.setLevel(63) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setHideType("Leathery Hide") + mobileTemplate.setHideAmount(5) + mobileTemplate.setBoneType("Avian Bones") + mobileTemplate.setBoneAmount(5) + mobileTemplate.setSocialGroup("borgle") + mobileTemplate.setAssistRange(12) + mobileTemplate.setStalker(True) + mobileTemplate.setOptionsBitmask(128) + + templates = Vector() + templates.add('object/mobile/shared_borgle.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('desert_scavenger', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/endor/diminutive_bounding_jax.py b/scripts/mobiles/endor/diminutive_bounding_jax.py new file mode 100644 index 00000000..fe7fd2c9 --- /dev/null +++ b/scripts/mobiles/endor/diminutive_bounding_jax.py @@ -0,0 +1,42 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('jax_bounding_dwarf') + mobileTemplate.setLevel(25) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setHideType("Bristley Hide") + mobileTemplate.setHideAmount(35) + mobileTemplate.setBoneType("Mammal Bones") + mobileTemplate.setBoneAmount(25) + mobileTemplate.setSocialGroup("jax") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(True) + mobileTemplate.setOptionsBitmask(128) + + templates = Vector() + templates.add('object/mobile/shared_jax.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('diminutive_bounding_jax', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/endor/diseased_blurrg.py b/scripts/mobiles/endor/diseased_blurrg.py new file mode 100644 index 00000000..8ed0af4a --- /dev/null +++ b/scripts/mobiles/endor/diseased_blurrg.py @@ -0,0 +1,38 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('diseased_blurrg') + mobileTemplate.setLevel(64) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("self") + mobileTemplate.setAssistRange(12) + mobileTemplate.setStalker(True) + mobileTemplate.setOptionsBitmask(192) + + templates = Vector() + templates.add('object/mobile/shared_blurrg.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('diseased_blurrg', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/endor/domesticated_blurrg.py b/scripts/mobiles/endor/domesticated_blurrg.py new file mode 100644 index 00000000..387efca4 --- /dev/null +++ b/scripts/mobiles/endor/domesticated_blurrg.py @@ -0,0 +1,39 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('domesticated_blurrg') + mobileTemplate.setLevel(20) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(.8) + mobileTemplate.setSocialGroup("self") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(True) + mobileTemplate.setOptionsBitmask(128) + + templates = Vector() + templates.add('object/mobile/shared_blurrg.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + + core.spawnService.addMobileTemplate('domesticated_blurrg', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/endor/domesticated_merek.py b/scripts/mobiles/endor/domesticated_merek.py new file mode 100644 index 00000000..ef5ca26b --- /dev/null +++ b/scripts/mobiles/endor/domesticated_merek.py @@ -0,0 +1,40 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('domesticated_merek') + mobileTemplate.setLevel(50) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(12) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(.8) + mobileTemplate.setHideType("Leathery Hide") + mobileTemplate.setHideAmount(45) + mobileTemplate.setSocialGroup("self") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(False) + mobileTemplate.setOptionsBitmask(128) + + templates = Vector() + templates.add('object/mobile/shared_merek.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureRangedAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('domesticated_merek', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/endor/donkuwah_battlelord.py b/scripts/mobiles/endor/donkuwah_battlelord.py new file mode 100644 index 00000000..9e80467b --- /dev/null +++ b/scripts/mobiles/endor/donkuwah_battlelord.py @@ -0,0 +1,49 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('donkuwah_battlelord') + mobileTemplate.setLevel(79) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(3) + mobileTemplate.setMaxSpawnDistance(5) + mobileTemplate.setDeathblow(True) + mobileTemplate.setSocialGroup('donkuwah tribe') + mobileTemplate.setAssistRange(1) + mobileTemplate.setOptionsBitmask(192) + mobileTemplate.setStalker(True) + + + templates = Vector() + templates.add('object/mobile/shared_jinda_male.iff') + templates.add('object/mobile/shared_jinda_female.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('meleeHit') + mobileTemplate.setAttacks(attacks) + + lootPoolNames_1 = ['Junk'] + lootPoolChances_1 = [100] + lootGroupChance_1 = 65 + mobileTemplate.addToLootGroups(lootPoolNames_1,lootPoolChances_1,lootGroupChance_1) + + lootPoolNames_2 = ['random_loot_primitives'] + lootPoolChances_2 = [100] + lootGroupChance_2 = 35 + mobileTemplate.addToLootGroups(lootPoolNames_2,lootPoolChances_2,lootGroupChance_2) + + core.spawnService.addMobileTemplate('donkuwah_battlelord', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/endor/donkuwah_chieftan.py b/scripts/mobiles/endor/donkuwah_chieftan.py new file mode 100644 index 00000000..f6121fac --- /dev/null +++ b/scripts/mobiles/endor/donkuwah_chieftan.py @@ -0,0 +1,49 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('donkuwah_chieftan') + mobileTemplate.setLevel(80) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(3) + mobileTemplate.setMaxSpawnDistance(5) + mobileTemplate.setDeathblow(True) + mobileTemplate.setSocialGroup('donkuwah tribe') + mobileTemplate.setAssistRange(1) + mobileTemplate.setOptionsBitmask(192) + mobileTemplate.setStalker(True) + + + templates = Vector() + templates.add('object/mobile/shared_jinda_male.iff') + templates.add('object/mobile/shared_jinda_female.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('meleeHit') + mobileTemplate.setAttacks(attacks) + + lootPoolNames_1 = ['Junk'] + lootPoolChances_1 = [100] + lootGroupChance_1 = 65 + mobileTemplate.addToLootGroups(lootPoolNames_1,lootPoolChances_1,lootGroupChance_1) + + lootPoolNames_2 = ['random_loot_primitives'] + lootPoolChances_2 = [100] + lootGroupChance_2 = 35 + mobileTemplate.addToLootGroups(lootPoolNames_2,lootPoolChances_2,lootGroupChance_2) + + core.spawnService.addMobileTemplate('donkuwah_chieftan', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/endor/donkuwah_cub.py b/scripts/mobiles/endor/donkuwah_cub.py new file mode 100644 index 00000000..0793e545 --- /dev/null +++ b/scripts/mobiles/endor/donkuwah_cub.py @@ -0,0 +1,50 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('donkuwah_cub') + mobileTemplate.setLevel(78) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(3) + mobileTemplate.setMaxSpawnDistance(5) + mobileTemplate.setDeathblow(True) + mobileTemplate.setScale(.5) + mobileTemplate.setSocialGroup('donkuwah tribe') + mobileTemplate.setAssistRange(12) + mobileTemplate.setOptionsBitmask(192) + mobileTemplate.setStalker(True) + + + templates = Vector() + templates.add('object/mobile/shared_jinda_male.iff') + templates.add('object/mobile/shared_jinda_female.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('meleeHit') + mobileTemplate.setAttacks(attacks) + + lootPoolNames_1 = ['Junk'] + lootPoolChances_1 = [100] + lootGroupChance_1 = 65 + mobileTemplate.addToLootGroups(lootPoolNames_1,lootPoolChances_1,lootGroupChance_1) + + lootPoolNames_2 = ['random_loot_primitives'] + lootPoolChances_2 = [100] + lootGroupChance_2 = 35 + mobileTemplate.addToLootGroups(lootPoolNames_2,lootPoolChances_2,lootGroupChance_2) + + core.spawnService.addMobileTemplate('donkuwah_cub', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/endor/donkuwah_laborer.py b/scripts/mobiles/endor/donkuwah_laborer.py new file mode 100644 index 00000000..414675c9 --- /dev/null +++ b/scripts/mobiles/endor/donkuwah_laborer.py @@ -0,0 +1,48 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('donkuwah_laborer') + mobileTemplate.setLevel(78) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(3) + mobileTemplate.setMaxSpawnDistance(5) + mobileTemplate.setDeathblow(False) + mobileTemplate.setSocialGroup('donkuwah tribe') + mobileTemplate.setOptionsBitmask(192) + mobileTemplate.setStalker(True) + + + templates = Vector() + templates.add('object/mobile/shared_jinda_male.iff') + templates.add('object/mobile/shared_jinda_female.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('meleeHit') + mobileTemplate.setAttacks(attacks) + + lootPoolNames_1 = ['Junk'] + lootPoolChances_1 = [100] + lootGroupChance_1 = 65 + mobileTemplate.addToLootGroups(lootPoolNames_1,lootPoolChances_1,lootGroupChance_1) + + lootPoolNames_2 = ['random_loot_primitives'] + lootPoolChances_2 = [100] + lootGroupChance_2 = 35 + mobileTemplate.addToLootGroups(lootPoolNames_2,lootPoolChances_2,lootGroupChance_2) + + core.spawnService.addMobileTemplate('donkuwah_laborer', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/endor/donkuwah_scout.py b/scripts/mobiles/endor/donkuwah_scout.py new file mode 100644 index 00000000..12af41ef --- /dev/null +++ b/scripts/mobiles/endor/donkuwah_scout.py @@ -0,0 +1,48 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('donkuwah_scout') + mobileTemplate.setLevel(76) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(3) + mobileTemplate.setMaxSpawnDistance(5) + mobileTemplate.setDeathblow(False) + mobileTemplate.setSocialGroup('donkuwah tribe') + mobileTemplate.setAssistRange(12) + mobileTemplate.setOptionsBitmask(192) + mobileTemplate.setStalker(True) + + templates = Vector() + templates.add('object/mobile/shared_jinda_male.iff') + templates.add('object/mobile/shared_jinda_female.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('meleeHit') + mobileTemplate.setAttacks(attacks) + + lootPoolNames_1 = ['Junk'] + lootPoolChances_1 = [100] + lootGroupChance_1 = 65 + mobileTemplate.addToLootGroups(lootPoolNames_1,lootPoolChances_1,lootGroupChance_1) + + lootPoolNames_2 = ['random_loot_primitives'] + lootPoolChances_2 = [100] + lootGroupChance_2 = 35 + mobileTemplate.addToLootGroups(lootPoolNames_2,lootPoolChances_2,lootGroupChance_2) + + core.spawnService.addMobileTemplate('donkuwah_scout', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/endor/donkuwah_shaman.py b/scripts/mobiles/endor/donkuwah_shaman.py new file mode 100644 index 00000000..0915ecc8 --- /dev/null +++ b/scripts/mobiles/endor/donkuwah_shaman.py @@ -0,0 +1,48 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('donkuwah_shaman') + mobileTemplate.setLevel(78) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(3) + mobileTemplate.setMaxSpawnDistance(5) + mobileTemplate.setDeathblow(True) + mobileTemplate.setSocialGroup('donkuwah tribe') + mobileTemplate.setAssistRange(12) + mobileTemplate.setOptionsBitmask(192) + mobileTemplate.setStalker(True) + + templates = Vector() + templates.add('object/mobile/shared_jinda_male.iff') + templates.add('object/mobile/shared_jinda_female.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('meleeHit') + mobileTemplate.setAttacks(attacks) + + lootPoolNames_1 = ['Junk'] + lootPoolChances_1 = [100] + lootGroupChance_1 = 65 + mobileTemplate.addToLootGroups(lootPoolNames_1,lootPoolChances_1,lootGroupChance_1) + + lootPoolNames_2 = ['random_loot_primitives'] + lootPoolChances_2 = [100] + lootGroupChance_2 = 35 + mobileTemplate.addToLootGroups(lootPoolNames_2,lootPoolChances_2,lootGroupChance_2) + + core.spawnService.addMobileTemplate('donkuwah_shaman', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/endor/donkuwah_spiritmaster.py b/scripts/mobiles/endor/donkuwah_spiritmaster.py new file mode 100644 index 00000000..38054cb5 --- /dev/null +++ b/scripts/mobiles/endor/donkuwah_spiritmaster.py @@ -0,0 +1,49 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('donkuwah_spiritmaster') + mobileTemplate.setLevel(78) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(3) + mobileTemplate.setMaxSpawnDistance(5) + mobileTemplate.setDeathblow(True) + mobileTemplate.setSocialGroup('donkuwah tribe') + mobileTemplate.setAssistRange(12) + mobileTemplate.setOptionsBitmask(192) + mobileTemplate.setStalker(True) + + + templates = Vector() + templates.add('object/mobile/shared_jinda_male.iff') + templates.add('object/mobile/shared_jinda_female.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('meleeHit') + mobileTemplate.setAttacks(attacks) + + lootPoolNames_1 = ['Junk'] + lootPoolChances_1 = [100] + lootGroupChance_1 = 65 + mobileTemplate.addToLootGroups(lootPoolNames_1,lootPoolChances_1,lootGroupChance_1) + + lootPoolNames_2 = ['random_loot_primitives'] + lootPoolChances_2 = [100] + lootGroupChance_2 = 35 + mobileTemplate.addToLootGroups(lootPoolNames_2,lootPoolChances_2,lootGroupChance_2) + + core.spawnService.addMobileTemplate('donkuwah_spiritmaster', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/endor/donkuwah_tribesman.py b/scripts/mobiles/endor/donkuwah_tribesman.py new file mode 100644 index 00000000..46a56efd --- /dev/null +++ b/scripts/mobiles/endor/donkuwah_tribesman.py @@ -0,0 +1,49 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('donkuwah_tribesman') + mobileTemplate.setLevel(77) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(3) + mobileTemplate.setMaxSpawnDistance(5) + mobileTemplate.setDeathblow(False) + mobileTemplate.setSocialGroup('donkuwah tribe') + mobileTemplate.setAssistRange(12) + mobileTemplate.setOptionsBitmask(192) + mobileTemplate.setStalker(True) + + + templates = Vector() + templates.add('object/mobile/shared_jinda_male.iff') + templates.add('object/mobile/shared_jinda_female.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('meleeHit') + mobileTemplate.setAttacks(attacks) + + lootPoolNames_1 = ['Junk'] + lootPoolChances_1 = [100] + lootGroupChance_1 = 65 + mobileTemplate.addToLootGroups(lootPoolNames_1,lootPoolChances_1,lootGroupChance_1) + + lootPoolNames_2 = ['random_loot_primitives'] + lootPoolChances_2 = [100] + lootGroupChance_2 = 35 + mobileTemplate.addToLootGroups(lootPoolNames_2,lootPoolChances_2,lootGroupChance_2) + + core.spawnService.addMobileTemplate('donkuwah_tribesman', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/endor/dulok_outcast.py b/scripts/mobiles/endor/dulok_outcast.py new file mode 100644 index 00000000..12ca3972 --- /dev/null +++ b/scripts/mobiles/endor/dulok_outcast.py @@ -0,0 +1,49 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('dulok_outcast') + mobileTemplate.setLevel(72) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(3) + mobileTemplate.setMaxSpawnDistance(5) + mobileTemplate.setDeathblow(True) + mobileTemplate.setSocialGroup('dulok outpost') + mobileTemplate.setAssistRange(1) + mobileTemplate.setOptionsBitmask(192) + mobileTemplate.setStalker(True) + + + templates = Vector() + templates.add('object/mobile/shared_dulok_male.iff') + templates.add('object/mobile/shared_dulok_female.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('meleeHit') + mobileTemplate.setAttacks(attacks) + + lootPoolNames_1 = ['Junk'] + lootPoolChances_1 = [100] + lootGroupChance_1 = 65 + mobileTemplate.addToLootGroups(lootPoolNames_1,lootPoolChances_1,lootGroupChance_1) + + lootPoolNames_2 = ['random_loot_primitives'] + lootPoolChances_2 = [100] + lootGroupChance_2 = 35 + mobileTemplate.addToLootGroups(lootPoolNames_2,lootPoolChances_2,lootGroupChance_2) + + core.spawnService.addMobileTemplate('dulok_outcast', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/endor/dulok_outcast_raider.py b/scripts/mobiles/endor/dulok_outcast_raider.py new file mode 100644 index 00000000..b8c794a4 --- /dev/null +++ b/scripts/mobiles/endor/dulok_outcast_raider.py @@ -0,0 +1,49 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('dulok_outcast_raider') + mobileTemplate.setLevel(71) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(3) + mobileTemplate.setMaxSpawnDistance(5) + mobileTemplate.setDeathblow(True) + mobileTemplate.setSocialGroup('dulok outpost') + mobileTemplate.setAssistRange(1) + mobileTemplate.setOptionsBitmask(192) + mobileTemplate.setStalker(True) + + + templates = Vector() + templates.add('object/mobile/shared_dulok_male.iff') + templates.add('object/mobile/shared_dulok_female.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('meleeHit') + mobileTemplate.setAttacks(attacks) + + lootPoolNames_1 = ['Junk'] + lootPoolChances_1 = [100] + lootGroupChance_1 = 65 + mobileTemplate.addToLootGroups(lootPoolNames_1,lootPoolChances_1,lootGroupChance_1) + + lootPoolNames_2 = ['random_loot_primitives'] + lootPoolChances_2 = [100] + lootGroupChance_2 = 35 + mobileTemplate.addToLootGroups(lootPoolNames_2,lootPoolChances_2,lootGroupChance_2) + + core.spawnService.addMobileTemplate('dulok_outcast_raider', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/endor/eerie_donkuwah_spiritmaster.py b/scripts/mobiles/endor/eerie_donkuwah_spiritmaster.py new file mode 100644 index 00000000..8d11a81c --- /dev/null +++ b/scripts/mobiles/endor/eerie_donkuwah_spiritmaster.py @@ -0,0 +1,49 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('eerie_donkuwah_spiritmaster') + mobileTemplate.setLevel(78) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(3) + mobileTemplate.setMaxSpawnDistance(5) + mobileTemplate.setDeathblow(True) + mobileTemplate.setSocialGroup('donkuwah tribe') + mobileTemplate.setAssistRange(12) + mobileTemplate.setOptionsBitmask(128) + mobileTemplate.setStalker(True) + + + templates = Vector() + templates.add('object/mobile/shared_jinda_male.iff') + templates.add('object/mobile/shared_jinda_female.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('meleeHit') + mobileTemplate.setAttacks(attacks) + + lootPoolNames_1 = ['Junk'] + lootPoolChances_1 = [100] + lootGroupChance_1 = 65 + mobileTemplate.addToLootGroups(lootPoolNames_1,lootPoolChances_1,lootGroupChance_1) + + lootPoolNames_2 = ['random_loot_primitives'] + lootPoolChances_2 = [100] + lootGroupChance_2 = 35 + mobileTemplate.addToLootGroups(lootPoolNames_2,lootPoolChances_2,lootGroupChance_2) + + core.spawnService.addMobileTemplate('eerie_donkuwah_spiritmaster', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/endor/eerie_korga_spiritmaster.py b/scripts/mobiles/endor/eerie_korga_spiritmaster.py new file mode 100644 index 00000000..e058170a --- /dev/null +++ b/scripts/mobiles/endor/eerie_korga_spiritmaster.py @@ -0,0 +1,49 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('eerie_korga_spiritmaster') + mobileTemplate.setLevel(76) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(3) + mobileTemplate.setMaxSpawnDistance(5) + mobileTemplate.setDeathblow(True) + mobileTemplate.setSocialGroup('korga tribe') + mobileTemplate.setAssistRange(1) + mobileTemplate.setOptionsBitmask(192) + mobileTemplate.setStalker(True) + + + templates = Vector() + templates.add('object/mobile/shared_dulok_male.iff') + templates.add('object/mobile/shared_dulok_female.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('meleeHit') + mobileTemplate.setAttacks(attacks) + + lootPoolNames_1 = ['Junk'] + lootPoolChances_1 = [100] + lootGroupChance_1 = 65 + mobileTemplate.addToLootGroups(lootPoolNames_1,lootPoolChances_1,lootGroupChance_1) + + lootPoolNames_2 = ['random_loot_primitives'] + lootPoolChances_2 = [100] + lootGroupChance_2 = 35 + mobileTemplate.addToLootGroups(lootPoolNames_2,lootPoolChances_2,lootGroupChance_2) + + core.spawnService.addMobileTemplate('eerie_korga_spiritmaster', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/endor/eerie_pubam_spiritmaster.py b/scripts/mobiles/endor/eerie_pubam_spiritmaster.py new file mode 100644 index 00000000..53a236ab --- /dev/null +++ b/scripts/mobiles/endor/eerie_pubam_spiritmaster.py @@ -0,0 +1,49 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('eerie_pubam_spiritmaster') + mobileTemplate.setLevel(62) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(3) + mobileTemplate.setMaxSpawnDistance(5) + mobileTemplate.setDeathblow(True) + mobileTemplate.setSocialGroup('pubam tribe') + mobileTemplate.setAssistRange(1) + mobileTemplate.setOptionsBitmask(192) + mobileTemplate.setStalker(True) + + + templates = Vector() + templates.add('object/mobile/shared_dulok_male.iff') + templates.add('object/mobile/shared_dulok_female.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('meleeHit') + mobileTemplate.setAttacks(attacks) + + lootPoolNames_1 = ['Junk'] + lootPoolChances_1 = [100] + lootGroupChance_1 = 65 + mobileTemplate.addToLootGroups(lootPoolNames_1,lootPoolChances_1,lootGroupChance_1) + + lootPoolNames_2 = ['random_loot_primitives'] + lootPoolChances_2 = [100] + lootGroupChance_2 = 35 + mobileTemplate.addToLootGroups(lootPoolNames_2,lootPoolChances_2,lootGroupChance_2) + + core.spawnService.addMobileTemplate('eerie_pubam_spiritmaster', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/endor/elder_hanadak_matriarch.py b/scripts/mobiles/endor/elder_hanadak_matriarch.py new file mode 100644 index 00000000..1e76fbd1 --- /dev/null +++ b/scripts/mobiles/endor/elder_hanadak_matriarch.py @@ -0,0 +1,45 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('elder_hanadak_matriarch') + mobileTemplate.setLevel(61) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(True) + mobileTemplate.setScale(1.2) + mobileTemplate.setMeatType("Carnivore Meat") + mobileTemplate.setMeatAmount(35) + mobileTemplate.setHideType("Bristley Hide") + mobileTemplate.setHideAmount(35) + mobileTemplate.setBoneType("Mammal Bones") + mobileTemplate.setBoneAmount(35) + mobileTemplate.setSocialGroup("hanadak") + mobileTemplate.setAssistRange(12) + mobileTemplate.setOptionsBitmask(128) + mobileTemplate.setStalker(True) + + + templates = Vector() + templates.add('object/mobile/shared_hanadak.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('elder_hanadak_matriarch', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/endor/elder_squall.py b/scripts/mobiles/endor/elder_squall.py new file mode 100644 index 00000000..90784af3 --- /dev/null +++ b/scripts/mobiles/endor/elder_squall.py @@ -0,0 +1,42 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('elder_squall') + mobileTemplate.setLevel(72) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setHideType("Bristley Hide") + mobileTemplate.setHideAmount(12) + mobileTemplate.setBoneType("Mammal Bones") + mobileTemplate.setBoneAmount(8) + mobileTemplate.setSocialGroup("squall") + mobileTemplate.setAssistRange(0) + mobileTemplate.setOptionsBitmask(128) + mobileTemplate.setStalker(True) + + templates = Vector() + templates.add('object/mobile/shared_squall.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('elder_squall', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/endor/enraged_donkuwah.py b/scripts/mobiles/endor/enraged_donkuwah.py new file mode 100644 index 00000000..38330b98 --- /dev/null +++ b/scripts/mobiles/endor/enraged_donkuwah.py @@ -0,0 +1,49 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('enraged_donkuwah') + mobileTemplate.setLevel(79) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(3) + mobileTemplate.setMaxSpawnDistance(5) + mobileTemplate.setDeathblow(True) + mobileTemplate.setSocialGroup('donkuwah tribe') + mobileTemplate.setAssistRange(1) + mobileTemplate.setOptionsBitmask(192) + mobileTemplate.setStalker(True) + + + templates = Vector() + templates.add('object/mobile/shared_jinda_male.iff') + templates.add('object/mobile/shared_jinda_female.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('meleeHit') + mobileTemplate.setAttacks(attacks) + + lootPoolNames_1 = ['Junk'] + lootPoolChances_1 = [100] + lootGroupChance_1 = 65 + mobileTemplate.addToLootGroups(lootPoolNames_1,lootPoolChances_1,lootGroupChance_1) + + lootPoolNames_2 = ['random_loot_primitives'] + lootPoolChances_2 = [100] + lootGroupChance_2 = 35 + mobileTemplate.addToLootGroups(lootPoolNames_2,lootPoolChances_2,lootGroupChance_2) + + core.spawnService.addMobileTemplate('enraged_donkuwah', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/endor/enraged_korga.py b/scripts/mobiles/endor/enraged_korga.py new file mode 100644 index 00000000..4a1230aa --- /dev/null +++ b/scripts/mobiles/endor/enraged_korga.py @@ -0,0 +1,49 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('enraged_korga') + mobileTemplate.setLevel(76) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(3) + mobileTemplate.setMaxSpawnDistance(5) + mobileTemplate.setDeathblow(True) + mobileTemplate.setSocialGroup('korga tribe') + mobileTemplate.setAssistRange(1) + mobileTemplate.setOptionsBitmask(192) + mobileTemplate.setStalker(True) + + + templates = Vector() + templates.add('object/mobile/shared_dulok_male.iff') + templates.add('object/mobile/shared_dulok_female.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('meleeHit') + mobileTemplate.setAttacks(attacks) + + lootPoolNames_1 = ['Junk'] + lootPoolChances_1 = [100] + lootGroupChance_1 = 65 + mobileTemplate.addToLootGroups(lootPoolNames_1,lootPoolChances_1,lootGroupChance_1) + + lootPoolNames_2 = ['random_loot_primitives'] + lootPoolChances_2 = [100] + lootGroupChance_2 = 35 + mobileTemplate.addToLootGroups(lootPoolNames_2,lootPoolChances_2,lootGroupChance_2) + + core.spawnService.addMobileTemplate('enraged_korga', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/endor/enraged_pubam.py b/scripts/mobiles/endor/enraged_pubam.py new file mode 100644 index 00000000..99cf03ea --- /dev/null +++ b/scripts/mobiles/endor/enraged_pubam.py @@ -0,0 +1,49 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('enraged_pubam') + mobileTemplate.setLevel(64) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(3) + mobileTemplate.setMaxSpawnDistance(5) + mobileTemplate.setDeathblow(True) + mobileTemplate.setSocialGroup('pubam tribe') + mobileTemplate.setAssistRange(1) + mobileTemplate.setOptionsBitmask(192) + mobileTemplate.setStalker(True) + + + templates = Vector() + templates.add('object/mobile/shared_dulok_male.iff') + templates.add('object/mobile/shared_dulok_female.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('meleeHit') + mobileTemplate.setAttacks(attacks) + + lootPoolNames_1 = ['Junk'] + lootPoolChances_1 = [100] + lootGroupChance_1 = 65 + mobileTemplate.addToLootGroups(lootPoolNames_1,lootPoolChances_1,lootGroupChance_1) + + lootPoolNames_2 = ['random_loot_primitives'] + lootPoolChances_2 = [100] + lootGroupChance_2 = 35 + mobileTemplate.addToLootGroups(lootPoolNames_2,lootPoolChances_2,lootGroupChance_2) + + core.spawnService.addMobileTemplate('enraged_pubam', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/endor/erratic_swirl_prong.py b/scripts/mobiles/endor/erratic_swirl_prong.py new file mode 100644 index 00000000..5fa40517 --- /dev/null +++ b/scripts/mobiles/endor/erratic_swirl_prong.py @@ -0,0 +1,38 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('erratic_swirl_prong') + mobileTemplate.setLevel(60) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("swirl prong") + mobileTemplate.setAssistRange(0) + mobileTemplate.setOptionsBitmask(128) + mobileTemplate.setStalker(True) + + templates = Vector() + templates.add('object/mobile/shared_swirl_prong.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('erratic_swirl_prong', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/endor/ewok_outcast.py b/scripts/mobiles/endor/ewok_outcast.py new file mode 100644 index 00000000..28f721c5 --- /dev/null +++ b/scripts/mobiles/endor/ewok_outcast.py @@ -0,0 +1,70 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('ewok_outcast') + mobileTemplate.setLevel(72) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(15) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(3) + mobileTemplate.setMaxSpawnDistance(5) + mobileTemplate.setDeathblow(False) + mobileTemplate.setSocialGroup('ewok outcast') + mobileTemplate.setAssistRange(12) + mobileTemplate.setOptionsBitmask(128) + mobileTemplate.setStalker(True) + + templates = Vector() + templates.add('object/mobile/shared_dressed_ewok_f_01.iff') + templates.add('object/mobile/shared_dressed_ewok_f_02.iff') + templates.add('object/mobile/shared_dressed_ewok_f_03.iff') + templates.add('object/mobile/shared_dressed_ewok_f_04.iff') + templates.add('object/mobile/shared_dressed_ewok_f_05.iff') + templates.add('object/mobile/shared_dressed_ewok_f_06.iff') + templates.add('object/mobile/shared_dressed_ewok_f_07.iff') + templates.add('object/mobile/shared_dressed_ewok_f_08.iff') + templates.add('object/mobile/shared_dressed_ewok_f_09.iff') + templates.add('object/mobile/shared_dressed_ewok_f_10.iff') + templates.add('object/mobile/shared_dressed_ewok_f_11.iff') + templates.add('object/mobile/shared_dressed_ewok_f_12.iff') + templates.add('object/mobile/shared_dressed_ewok_m_01.iff') + templates.add('object/mobile/shared_dressed_ewok_m_02.iff') + templates.add('object/mobile/shared_dressed_ewok_m_03.iff') + templates.add('object/mobile/shared_dressed_ewok_m_04.iff') + templates.add('object/mobile/shared_dressed_ewok_m_05.iff') + templates.add('object/mobile/shared_dressed_ewok_m_06.iff') + templates.add('object/mobile/shared_dressed_ewok_m_07.iff') + templates.add('object/mobile/shared_dressed_ewok_m_08.iff') + templates.add('object/mobile/shared_dressed_ewok_m_09.iff') + templates.add('object/mobile/shared_dressed_ewok_m_10.iff') + templates.add('object/mobile/shared_dressed_ewok_m_11.iff') + templates.add('object/mobile/shared_dressed_ewok_m_12.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/creature/shared_base_ranged_weapon.iff', 4, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedshot') + mobileTemplate.setAttacks(attacks) + + lootPoolNames_1 = ['Junk'] + lootPoolChances_1 = [100] + lootGroupChance_1 = 65 + mobileTemplate.addToLootGroups(lootPoolNames_1,lootPoolChances_1,lootGroupChance_1) + + lootPoolNames_2 = ['random_loot_primitives'] + lootPoolChances_2 = [100] + lootGroupChance_2 = 35 + mobileTemplate.addToLootGroups(lootPoolNames_2,lootPoolChances_2,lootGroupChance_2) + + core.spawnService.addMobileTemplate('ewok_outcast', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/endor/ewok_outcast_raider.py b/scripts/mobiles/endor/ewok_outcast_raider.py new file mode 100644 index 00000000..1b8812ee --- /dev/null +++ b/scripts/mobiles/endor/ewok_outcast_raider.py @@ -0,0 +1,70 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('ewok_outcast_raider') + mobileTemplate.setLevel(73) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(15) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(3) + mobileTemplate.setMaxSpawnDistance(5) + mobileTemplate.setDeathblow(False) + mobileTemplate.setSocialGroup('ewok outcast') + mobileTemplate.setAssistRange(12) + mobileTemplate.setOptionsBitmask(128) + mobileTemplate.setStalker(True) + + templates = Vector() + templates.add('object/mobile/shared_dressed_ewok_f_01.iff') + templates.add('object/mobile/shared_dressed_ewok_f_02.iff') + templates.add('object/mobile/shared_dressed_ewok_f_03.iff') + templates.add('object/mobile/shared_dressed_ewok_f_04.iff') + templates.add('object/mobile/shared_dressed_ewok_f_05.iff') + templates.add('object/mobile/shared_dressed_ewok_f_06.iff') + templates.add('object/mobile/shared_dressed_ewok_f_07.iff') + templates.add('object/mobile/shared_dressed_ewok_f_08.iff') + templates.add('object/mobile/shared_dressed_ewok_f_09.iff') + templates.add('object/mobile/shared_dressed_ewok_f_10.iff') + templates.add('object/mobile/shared_dressed_ewok_f_11.iff') + templates.add('object/mobile/shared_dressed_ewok_f_12.iff') + templates.add('object/mobile/shared_dressed_ewok_m_01.iff') + templates.add('object/mobile/shared_dressed_ewok_m_02.iff') + templates.add('object/mobile/shared_dressed_ewok_m_03.iff') + templates.add('object/mobile/shared_dressed_ewok_m_04.iff') + templates.add('object/mobile/shared_dressed_ewok_m_05.iff') + templates.add('object/mobile/shared_dressed_ewok_m_06.iff') + templates.add('object/mobile/shared_dressed_ewok_m_07.iff') + templates.add('object/mobile/shared_dressed_ewok_m_08.iff') + templates.add('object/mobile/shared_dressed_ewok_m_09.iff') + templates.add('object/mobile/shared_dressed_ewok_m_10.iff') + templates.add('object/mobile/shared_dressed_ewok_m_11.iff') + templates.add('object/mobile/shared_dressed_ewok_m_12.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/creature/shared_base_ranged_weapon.iff', 4, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedshot') + mobileTemplate.setAttacks(attacks) + + lootPoolNames_1 = ['Junk'] + lootPoolChances_1 = [100] + lootGroupChance_1 = 65 + mobileTemplate.addToLootGroups(lootPoolNames_1,lootPoolChances_1,lootGroupChance_1) + + lootPoolNames_2 = ['random_loot_primitives'] + lootPoolChances_2 = [100] + lootGroupChance_2 = 35 + mobileTemplate.addToLootGroups(lootPoolNames_2,lootPoolChances_2,lootGroupChance_2) + + core.spawnService.addMobileTemplate('ewok_outcast_raider', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/endor/feral_marauder.py b/scripts/mobiles/endor/feral_marauder.py new file mode 100644 index 00000000..46722d05 --- /dev/null +++ b/scripts/mobiles/endor/feral_marauder.py @@ -0,0 +1,45 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('feral_marauder') + mobileTemplate.setLevel(78) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(1) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(True) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("marauder") + mobileTemplate.setAssistRange(12) + mobileTemplate.setStalker(True) + mobileTemplate.setOptionsBitmask(192) + + templates = Vector() + templates.add('object/mobile/shared_marauder_male_01.iff') + templates.add('object/mobile/shared_marauder_male_02.iff') + templates.add('object/mobile/shared_marauder_male_02.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/rifle/shared_rifle_e11.iff', 1, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedshot') + mobileTemplate.setAttacks(attacks) + + lootPoolNames_1 = ['Junk'] + lootPoolChances_1 = [100] + lootGroupChance_1 = 100 + mobileTemplate.addToLootGroups(lootPoolNames_1,lootPoolChances_1,lootGroupChance_1) + + core.spawnService.addMobileTemplate('feral_marauder', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/endor/festering_squill.py b/scripts/mobiles/endor/festering_squill.py new file mode 100644 index 00000000..2b90129c --- /dev/null +++ b/scripts/mobiles/endor/festering_squill.py @@ -0,0 +1,38 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('festering_squill') + mobileTemplate.setLevel(64) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(True) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("squill") + mobileTemplate.setAssistRange(12) + mobileTemplate.setStalker(True) + mobileTemplate.setOptionsBitmask(192) + + templates = Vector() + templates.add('object/mobile/shared_squill.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('festering_squill', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/endor/fierce_borgle.py b/scripts/mobiles/endor/fierce_borgle.py new file mode 100644 index 00000000..f57174d8 --- /dev/null +++ b/scripts/mobiles/endor/fierce_borgle.py @@ -0,0 +1,42 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('fierce_borgle') + mobileTemplate.setLevel(63) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(True) + mobileTemplate.setScale(1) + mobileTemplate.setHideType("Leathery Hide") + mobileTemplate.setHideAmount(5) + mobileTemplate.setBoneType("Avian Bones") + mobileTemplate.setBoneAmount(5) + mobileTemplate.setSocialGroup("borgle") + mobileTemplate.setAssistRange(12) + mobileTemplate.setStalker(True) + mobileTemplate.setOptionsBitmask(192) + + templates = Vector() + templates.add('object/mobile/shared_borgle.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('fierce_borgle', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/endor/foul_donkuwah_laborer.py b/scripts/mobiles/endor/foul_donkuwah_laborer.py new file mode 100644 index 00000000..a00d514b --- /dev/null +++ b/scripts/mobiles/endor/foul_donkuwah_laborer.py @@ -0,0 +1,49 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('foul_donkuwah_laborer') + mobileTemplate.setLevel(77) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(3) + mobileTemplate.setMaxSpawnDistance(5) + mobileTemplate.setDeathblow(False) + mobileTemplate.setSocialGroup('donkuwah tribe') + mobileTemplate.setAssistRange(12) + mobileTemplate.setOptionsBitmask(128) + mobileTemplate.setStalker(True) + + + templates = Vector() + templates.add('object/mobile/shared_jinda_male.iff') + templates.add('object/mobile/shared_jinda_female.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('meleeHit') + mobileTemplate.setAttacks(attacks) + + lootPoolNames_1 = ['Junk'] + lootPoolChances_1 = [100] + lootGroupChance_1 = 65 + mobileTemplate.addToLootGroups(lootPoolNames_1,lootPoolChances_1,lootGroupChance_1) + + lootPoolNames_2 = ['random_loot_primitives'] + lootPoolChances_2 = [100] + lootGroupChance_2 = 35 + mobileTemplate.addToLootGroups(lootPoolNames_2,lootPoolChances_2,lootGroupChance_2) + + core.spawnService.addMobileTemplate('foul_donkuwah_laborer', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/endor/foul_korga_laborer.py b/scripts/mobiles/endor/foul_korga_laborer.py new file mode 100644 index 00000000..c72a1d21 --- /dev/null +++ b/scripts/mobiles/endor/foul_korga_laborer.py @@ -0,0 +1,49 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('foul_korga_laborer') + mobileTemplate.setLevel(74) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(3) + mobileTemplate.setMaxSpawnDistance(5) + mobileTemplate.setDeathblow(False) + mobileTemplate.setSocialGroup('korga tribe') + mobileTemplate.setAssistRange(1) + mobileTemplate.setOptionsBitmask(128) + mobileTemplate.setStalker(True) + + + templates = Vector() + templates.add('object/mobile/shared_dulok_male.iff') + templates.add('object/mobile/shared_dulok_female.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('meleeHit') + mobileTemplate.setAttacks(attacks) + + lootPoolNames_1 = ['Junk'] + lootPoolChances_1 = [100] + lootGroupChance_1 = 65 + mobileTemplate.addToLootGroups(lootPoolNames_1,lootPoolChances_1,lootGroupChance_1) + + lootPoolNames_2 = ['random_loot_primitives'] + lootPoolChances_2 = [100] + lootGroupChance_2 = 35 + mobileTemplate.addToLootGroups(lootPoolNames_2,lootPoolChances_2,lootGroupChance_2) + + core.spawnService.addMobileTemplate('foul_korga_laborer', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/endor/foul_pubam_laborer.py b/scripts/mobiles/endor/foul_pubam_laborer.py new file mode 100644 index 00000000..0af2e911 --- /dev/null +++ b/scripts/mobiles/endor/foul_pubam_laborer.py @@ -0,0 +1,49 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('foul_pubam_laborer') + mobileTemplate.setLevel(64) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(3) + mobileTemplate.setMaxSpawnDistance(5) + mobileTemplate.setDeathblow(True) + mobileTemplate.setSocialGroup('pubam tribe') + mobileTemplate.setAssistRange(1) + mobileTemplate.setOptionsBitmask(128) + mobileTemplate.setStalker(True) + + + templates = Vector() + templates.add('object/mobile/shared_dulok_male.iff') + templates.add('object/mobile/shared_dulok_female.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('meleeHit') + mobileTemplate.setAttacks(attacks) + + lootPoolNames_1 = ['Junk'] + lootPoolChances_1 = [100] + lootGroupChance_1 = 65 + mobileTemplate.addToLootGroups(lootPoolNames_1,lootPoolChances_1,lootGroupChance_1) + + lootPoolNames_2 = ['random_loot_primitives'] + lootPoolChances_2 = [100] + lootGroupChance_2 = 35 + mobileTemplate.addToLootGroups(lootPoolNames_2,lootPoolChances_2,lootGroupChance_2) + + core.spawnService.addMobileTemplate('foul_pubam_laborer', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/endor/frenzied_donkuwah.py b/scripts/mobiles/endor/frenzied_donkuwah.py new file mode 100644 index 00000000..b87bc001 --- /dev/null +++ b/scripts/mobiles/endor/frenzied_donkuwah.py @@ -0,0 +1,49 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('frenzied_donkuwah') + mobileTemplate.setLevel(78) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(3) + mobileTemplate.setMaxSpawnDistance(5) + mobileTemplate.setDeathblow(True) + mobileTemplate.setSocialGroup('donkuwah tribe') + mobileTemplate.setAssistRange(1) + mobileTemplate.setOptionsBitmask(192) + mobileTemplate.setStalker(True) + + + templates = Vector() + templates.add('object/mobile/shared_jinda_male.iff') + templates.add('object/mobile/shared_jinda_female.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('meleeHit') + mobileTemplate.setAttacks(attacks) + + lootPoolNames_1 = ['Junk'] + lootPoolChances_1 = [100] + lootGroupChance_1 = 65 + mobileTemplate.addToLootGroups(lootPoolNames_1,lootPoolChances_1,lootGroupChance_1) + + lootPoolNames_2 = ['random_loot_primitives'] + lootPoolChances_2 = [100] + lootGroupChance_2 = 35 + mobileTemplate.addToLootGroups(lootPoolNames_2,lootPoolChances_2,lootGroupChance_2) + + core.spawnService.addMobileTemplate('frenzied_donkuwah', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/endor/frenzied_korga.py b/scripts/mobiles/endor/frenzied_korga.py new file mode 100644 index 00000000..aa8c93c5 --- /dev/null +++ b/scripts/mobiles/endor/frenzied_korga.py @@ -0,0 +1,49 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('frenzied_korga') + mobileTemplate.setLevel(75) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(3) + mobileTemplate.setMaxSpawnDistance(5) + mobileTemplate.setDeathblow(True) + mobileTemplate.setSocialGroup('korga tribe') + mobileTemplate.setAssistRange(1) + mobileTemplate.setOptionsBitmask(192) + mobileTemplate.setStalker(True) + + + templates = Vector() + templates.add('object/mobile/shared_dulok_male.iff') + templates.add('object/mobile/shared_dulok_female.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('meleeHit') + mobileTemplate.setAttacks(attacks) + + lootPoolNames_1 = ['Junk'] + lootPoolChances_1 = [100] + lootGroupChance_1 = 65 + mobileTemplate.addToLootGroups(lootPoolNames_1,lootPoolChances_1,lootGroupChance_1) + + lootPoolNames_2 = ['random_loot_primitives'] + lootPoolChances_2 = [100] + lootGroupChance_2 = 35 + mobileTemplate.addToLootGroups(lootPoolNames_2,lootPoolChances_2,lootGroupChance_2) + + core.spawnService.addMobileTemplate('frenzied_korga', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/endor/frenzied_marauder.py b/scripts/mobiles/endor/frenzied_marauder.py new file mode 100644 index 00000000..a577e756 --- /dev/null +++ b/scripts/mobiles/endor/frenzied_marauder.py @@ -0,0 +1,45 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('frenzied_marauder') + mobileTemplate.setLevel(78) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(1) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(True) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("marauder") + mobileTemplate.setAssistRange(12) + mobileTemplate.setStalker(True) + mobileTemplate.setOptionsBitmask(192) + + templates = Vector() + templates.add('object/mobile/shared_marauder_male_01.iff') + templates.add('object/mobile/shared_marauder_male_02.iff') + templates.add('object/mobile/shared_marauder_male_02.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/rifle/shared_rifle_e11.iff', 1, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedshot') + mobileTemplate.setAttacks(attacks) + + lootPoolNames_1 = ['Junk'] + lootPoolChances_1 = [100] + lootGroupChance_1 = 100 + mobileTemplate.addToLootGroups(lootPoolNames_1,lootPoolChances_1,lootGroupChance_1) + + core.spawnService.addMobileTemplate('frenzied_marauder', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/endor/frenzied_pubam.py b/scripts/mobiles/endor/frenzied_pubam.py new file mode 100644 index 00000000..4c0aeeb6 --- /dev/null +++ b/scripts/mobiles/endor/frenzied_pubam.py @@ -0,0 +1,49 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('frenzied_pubam') + mobileTemplate.setLevel(66) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(3) + mobileTemplate.setMaxSpawnDistance(5) + mobileTemplate.setDeathblow(True) + mobileTemplate.setSocialGroup('pubam tribe') + mobileTemplate.setAssistRange(1) + mobileTemplate.setOptionsBitmask(192) + mobileTemplate.setStalker(True) + + + templates = Vector() + templates.add('object/mobile/shared_dulok_male.iff') + templates.add('object/mobile/shared_dulok_female.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('meleeHit') + mobileTemplate.setAttacks(attacks) + + lootPoolNames_1 = ['Junk'] + lootPoolChances_1 = [100] + lootGroupChance_1 = 65 + mobileTemplate.addToLootGroups(lootPoolNames_1,lootPoolChances_1,lootGroupChance_1) + + lootPoolNames_2 = ['random_loot_primitives'] + lootPoolChances_2 = [100] + lootGroupChance_2 = 35 + mobileTemplate.addToLootGroups(lootPoolNames_2,lootPoolChances_2,lootGroupChance_2) + + core.spawnService.addMobileTemplate('frenzied_pubam', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/endor/gifted_gondula_shaman.py b/scripts/mobiles/endor/gifted_gondula_shaman.py new file mode 100644 index 00000000..f69e3769 --- /dev/null +++ b/scripts/mobiles/endor/gifted_gondula_shaman.py @@ -0,0 +1,72 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('gifted_gondula_shaman') + mobileTemplate.setLevel(79) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(3) + mobileTemplate.setMaxSpawnDistance(5) + mobileTemplate.setDeathblow(True) + mobileTemplate.setSocialGroup('gondula tribe') + mobileTemplate.setAssistRange(1) + mobileTemplate.setOptionsBitmask(128) + mobileTemplate.setStalker(True) + + + templates = Vector() + templates.add('object/mobile/shared_dressed_ewok_f_01.iff') + templates.add('object/mobile/shared_dressed_ewok_f_02.iff') + templates.add('object/mobile/shared_dressed_ewok_f_03.iff') + templates.add('object/mobile/shared_dressed_ewok_f_04.iff') + templates.add('object/mobile/shared_dressed_ewok_f_05.iff') + templates.add('object/mobile/shared_dressed_ewok_f_06.iff') + templates.add('object/mobile/shared_dressed_ewok_f_07.iff') + templates.add('object/mobile/shared_dressed_ewok_f_08.iff') + templates.add('object/mobile/shared_dressed_ewok_f_09.iff') + templates.add('object/mobile/shared_dressed_ewok_f_10.iff') + templates.add('object/mobile/shared_dressed_ewok_f_11.iff') + templates.add('object/mobile/shared_dressed_ewok_f_12.iff') + templates.add('object/mobile/shared_dressed_ewok_m_01.iff') + templates.add('object/mobile/shared_dressed_ewok_m_02.iff') + templates.add('object/mobile/shared_dressed_ewok_m_03.iff') + templates.add('object/mobile/shared_dressed_ewok_m_04.iff') + templates.add('object/mobile/shared_dressed_ewok_m_05.iff') + templates.add('object/mobile/shared_dressed_ewok_m_06.iff') + templates.add('object/mobile/shared_dressed_ewok_m_07.iff') + templates.add('object/mobile/shared_dressed_ewok_m_08.iff') + templates.add('object/mobile/shared_dressed_ewok_m_09.iff') + templates.add('object/mobile/shared_dressed_ewok_m_10.iff') + templates.add('object/mobile/shared_dressed_ewok_m_11.iff') + templates.add('object/mobile/shared_dressed_ewok_m_12.iff') + + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('meleeHit') + mobileTemplate.setAttacks(attacks) + + lootPoolNames_1 = ['Junk'] + lootPoolChances_1 = [100] + lootGroupChance_1 = 65 + mobileTemplate.addToLootGroups(lootPoolNames_1,lootPoolChances_1,lootGroupChance_1) + + lootPoolNames_2 = ['random_loot_primitives'] + lootPoolChances_2 = [100] + lootGroupChance_2 = 35 + mobileTemplate.addToLootGroups(lootPoolNames_2,lootPoolChances_2,lootGroupChance_2) + + core.spawnService.addMobileTemplate('gifted_gondula_shaman', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/endor/gifted_jinda_shaman.py b/scripts/mobiles/endor/gifted_jinda_shaman.py new file mode 100644 index 00000000..45207a4c --- /dev/null +++ b/scripts/mobiles/endor/gifted_jinda_shaman.py @@ -0,0 +1,49 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('gifted_jinda_shaman') + mobileTemplate.setLevel(66) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(3) + mobileTemplate.setMaxSpawnDistance(5) + mobileTemplate.setDeathblow(True) + mobileTemplate.setSocialGroup('jinda tribe') + mobileTemplate.setAssistRange(1) + mobileTemplate.setOptionsBitmask(128) + mobileTemplate.setStalker(True) + + + templates = Vector() + templates.add('object/mobile/shared_jinda_male.iff') + templates.add('object/mobile/shared_jinda_female.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('meleeHit') + mobileTemplate.setAttacks(attacks) + + lootPoolNames_1 = ['Junk'] + lootPoolChances_1 = [100] + lootGroupChance_1 = 65 + mobileTemplate.addToLootGroups(lootPoolNames_1,lootPoolChances_1,lootGroupChance_1) + + lootPoolNames_2 = ['random_loot_primitives'] + lootPoolChances_2 = [100] + lootGroupChance_2 = 35 + mobileTemplate.addToLootGroups(lootPoolNames_2,lootPoolChances_2,lootGroupChance_2) + + core.spawnService.addMobileTemplate('gifted_jinda_shaman', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/endor/gifted_panshee_shaman.py b/scripts/mobiles/endor/gifted_panshee_shaman.py new file mode 100644 index 00000000..7078622d --- /dev/null +++ b/scripts/mobiles/endor/gifted_panshee_shaman.py @@ -0,0 +1,71 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('gifted_panshee_shaman') + mobileTemplate.setLevel(70) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(3) + mobileTemplate.setMaxSpawnDistance(5) + mobileTemplate.setDeathblow(True) + mobileTemplate.setSocialGroup('panshee tribe') + mobileTemplate.setAssistRange(1) + mobileTemplate.setOptionsBitmask(128) + mobileTemplate.setStalker(True) + + + templates = Vector() + templates.add('object/mobile/shared_dressed_ewok_f_01.iff') + templates.add('object/mobile/shared_dressed_ewok_f_02.iff') + templates.add('object/mobile/shared_dressed_ewok_f_03.iff') + templates.add('object/mobile/shared_dressed_ewok_f_04.iff') + templates.add('object/mobile/shared_dressed_ewok_f_05.iff') + templates.add('object/mobile/shared_dressed_ewok_f_06.iff') + templates.add('object/mobile/shared_dressed_ewok_f_07.iff') + templates.add('object/mobile/shared_dressed_ewok_f_08.iff') + templates.add('object/mobile/shared_dressed_ewok_f_09.iff') + templates.add('object/mobile/shared_dressed_ewok_f_10.iff') + templates.add('object/mobile/shared_dressed_ewok_f_11.iff') + templates.add('object/mobile/shared_dressed_ewok_f_12.iff') + templates.add('object/mobile/shared_dressed_ewok_m_01.iff') + templates.add('object/mobile/shared_dressed_ewok_m_02.iff') + templates.add('object/mobile/shared_dressed_ewok_m_03.iff') + templates.add('object/mobile/shared_dressed_ewok_m_04.iff') + templates.add('object/mobile/shared_dressed_ewok_m_05.iff') + templates.add('object/mobile/shared_dressed_ewok_m_06.iff') + templates.add('object/mobile/shared_dressed_ewok_m_07.iff') + templates.add('object/mobile/shared_dressed_ewok_m_08.iff') + templates.add('object/mobile/shared_dressed_ewok_m_09.iff') + templates.add('object/mobile/shared_dressed_ewok_m_10.iff') + templates.add('object/mobile/shared_dressed_ewok_m_11.iff') + templates.add('object/mobile/shared_dressed_ewok_m_12.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('meleeHit') + mobileTemplate.setAttacks(attacks) + + lootPoolNames_1 = ['Junk'] + lootPoolChances_1 = [100] + lootGroupChance_1 = 65 + mobileTemplate.addToLootGroups(lootPoolNames_1,lootPoolChances_1,lootGroupChance_1) + + lootPoolNames_2 = ['random_loot_primitives'] + lootPoolChances_2 = [100] + lootGroupChance_2 = 35 + mobileTemplate.addToLootGroups(lootPoolNames_2,lootPoolChances_2,lootGroupChance_2) + + core.spawnService.addMobileTemplate('gifted_panshee_shaman', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/endor/gleaming_lantern_bird.py b/scripts/mobiles/endor/gleaming_lantern_bird.py new file mode 100644 index 00000000..56d8a363 --- /dev/null +++ b/scripts/mobiles/endor/gleaming_lantern_bird.py @@ -0,0 +1,42 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('gleaming_lantern_bird') + mobileTemplate.setLevel(61) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setHideType("Leathery Hide") + mobileTemplate.setHideAmount(41) + mobileTemplate.setBoneType("Avian Bones") + mobileTemplate.setBoneAmount(46) + mobileTemplate.setSocialGroup("lantern") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(False) + mobileTemplate.setOptionsBitmask(128) + + templates = Vector() + templates.add('object/mobile/shared_lantern_bird.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('gleaming_lantern_bird', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/endor/gnarled_donkuwah_spiritmaster.py b/scripts/mobiles/endor/gnarled_donkuwah_spiritmaster.py new file mode 100644 index 00000000..1ebfe172 --- /dev/null +++ b/scripts/mobiles/endor/gnarled_donkuwah_spiritmaster.py @@ -0,0 +1,49 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('gnarled_donkuwah_spiritmaster') + mobileTemplate.setLevel(78) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(3) + mobileTemplate.setMaxSpawnDistance(5) + mobileTemplate.setDeathblow(True) + mobileTemplate.setSocialGroup('donkuwah tribe') + mobileTemplate.setAssistRange(12) + mobileTemplate.setOptionsBitmask(192) + mobileTemplate.setStalker(True) + + + templates = Vector() + templates.add('object/mobile/shared_jinda_male.iff') + templates.add('object/mobile/shared_jinda_female.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('meleeHit') + mobileTemplate.setAttacks(attacks) + + lootPoolNames_1 = ['Junk'] + lootPoolChances_1 = [100] + lootGroupChance_1 = 65 + mobileTemplate.addToLootGroups(lootPoolNames_1,lootPoolChances_1,lootGroupChance_1) + + lootPoolNames_2 = ['random_loot_primitives'] + lootPoolChances_2 = [100] + lootGroupChance_2 = 35 + mobileTemplate.addToLootGroups(lootPoolNames_2,lootPoolChances_2,lootGroupChance_2) + + core.spawnService.addMobileTemplate('gnarled_donkuwah_spiritmaster', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/endor/gnarled_korga_spiritmaster.py b/scripts/mobiles/endor/gnarled_korga_spiritmaster.py new file mode 100644 index 00000000..b78e3bf4 --- /dev/null +++ b/scripts/mobiles/endor/gnarled_korga_spiritmaster.py @@ -0,0 +1,49 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('gnarled_korga_spiritmaster') + mobileTemplate.setLevel(76) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(3) + mobileTemplate.setMaxSpawnDistance(5) + mobileTemplate.setDeathblow(True) + mobileTemplate.setSocialGroup('korga tribe') + mobileTemplate.setAssistRange(1) + mobileTemplate.setOptionsBitmask(192) + mobileTemplate.setStalker(True) + + + templates = Vector() + templates.add('object/mobile/shared_dulok_male.iff') + templates.add('object/mobile/shared_dulok_female.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('meleeHit') + mobileTemplate.setAttacks(attacks) + + lootPoolNames_1 = ['Junk'] + lootPoolChances_1 = [100] + lootGroupChance_1 = 65 + mobileTemplate.addToLootGroups(lootPoolNames_1,lootPoolChances_1,lootGroupChance_1) + + lootPoolNames_2 = ['random_loot_primitives'] + lootPoolChances_2 = [100] + lootGroupChance_2 = 35 + mobileTemplate.addToLootGroups(lootPoolNames_2,lootPoolChances_2,lootGroupChance_2) + + core.spawnService.addMobileTemplate('gnarled_korga_spiritmaster', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/endor/gnarled_pubam_spiritmaster.py b/scripts/mobiles/endor/gnarled_pubam_spiritmaster.py new file mode 100644 index 00000000..e915bb47 --- /dev/null +++ b/scripts/mobiles/endor/gnarled_pubam_spiritmaster.py @@ -0,0 +1,49 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('gnarled_pubam_spiritmaster') + mobileTemplate.setLevel(66) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(3) + mobileTemplate.setMaxSpawnDistance(5) + mobileTemplate.setDeathblow(True) + mobileTemplate.setSocialGroup('pubam tribe') + mobileTemplate.setAssistRange(1) + mobileTemplate.setOptionsBitmask(192) + mobileTemplate.setStalker(True) + + + templates = Vector() + templates.add('object/mobile/shared_dulok_male.iff') + templates.add('object/mobile/shared_dulok_female.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('meleeHit') + mobileTemplate.setAttacks(attacks) + + lootPoolNames_1 = ['Junk'] + lootPoolChances_1 = [100] + lootGroupChance_1 = 65 + mobileTemplate.addToLootGroups(lootPoolNames_1,lootPoolChances_1,lootGroupChance_1) + + lootPoolNames_2 = ['random_loot_primitives'] + lootPoolChances_2 = [100] + lootGroupChance_2 = 35 + mobileTemplate.addToLootGroups(lootPoolNames_2,lootPoolChances_2,lootGroupChance_2) + + core.spawnService.addMobileTemplate('gnarled_pubam_spiritmaster', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/endor/gondula_chief.py b/scripts/mobiles/endor/gondula_chief.py new file mode 100644 index 00000000..043c77da --- /dev/null +++ b/scripts/mobiles/endor/gondula_chief.py @@ -0,0 +1,71 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('gondula_chief') + mobileTemplate.setLevel(81) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(3) + mobileTemplate.setMaxSpawnDistance(5) + mobileTemplate.setDeathblow(False) + mobileTemplate.setSocialGroup('gondula tribe') + mobileTemplate.setAssistRange(1) + mobileTemplate.setOptionsBitmask(128) + mobileTemplate.setStalker(True) + + templates = Vector() + templates.add('object/mobile/shared_dressed_ewok_f_01.iff') + templates.add('object/mobile/shared_dressed_ewok_f_02.iff') + templates.add('object/mobile/shared_dressed_ewok_f_03.iff') + templates.add('object/mobile/shared_dressed_ewok_f_04.iff') + templates.add('object/mobile/shared_dressed_ewok_f_05.iff') + templates.add('object/mobile/shared_dressed_ewok_f_06.iff') + templates.add('object/mobile/shared_dressed_ewok_f_07.iff') + templates.add('object/mobile/shared_dressed_ewok_f_08.iff') + templates.add('object/mobile/shared_dressed_ewok_f_09.iff') + templates.add('object/mobile/shared_dressed_ewok_f_10.iff') + templates.add('object/mobile/shared_dressed_ewok_f_11.iff') + templates.add('object/mobile/shared_dressed_ewok_f_12.iff') + templates.add('object/mobile/shared_dressed_ewok_m_01.iff') + templates.add('object/mobile/shared_dressed_ewok_m_02.iff') + templates.add('object/mobile/shared_dressed_ewok_m_03.iff') + templates.add('object/mobile/shared_dressed_ewok_m_04.iff') + templates.add('object/mobile/shared_dressed_ewok_m_05.iff') + templates.add('object/mobile/shared_dressed_ewok_m_06.iff') + templates.add('object/mobile/shared_dressed_ewok_m_07.iff') + templates.add('object/mobile/shared_dressed_ewok_m_08.iff') + templates.add('object/mobile/shared_dressed_ewok_m_09.iff') + templates.add('object/mobile/shared_dressed_ewok_m_10.iff') + templates.add('object/mobile/shared_dressed_ewok_m_11.iff') + templates.add('object/mobile/shared_dressed_ewok_m_12.iff') + + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('meleeHit') + mobileTemplate.setAttacks(attacks) + + lootPoolNames_1 = ['Junk'] + lootPoolChances_1 = [100] + lootGroupChance_1 = 65 + mobileTemplate.addToLootGroups(lootPoolNames_1,lootPoolChances_1,lootGroupChance_1) + + lootPoolNames_2 = ['random_loot_primitives'] + lootPoolChances_2 = [100] + lootGroupChance_2 = 35 + mobileTemplate.addToLootGroups(lootPoolNames_2,lootPoolChances_2,lootGroupChance_2) + + core.spawnService.addMobileTemplate('gondula_chief', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/endor/gondula_cub.py b/scripts/mobiles/endor/gondula_cub.py new file mode 100644 index 00000000..24dcf5dd --- /dev/null +++ b/scripts/mobiles/endor/gondula_cub.py @@ -0,0 +1,73 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('gondula_cub') + mobileTemplate.setLevel(80) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(3) + mobileTemplate.setMaxSpawnDistance(5) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(.5) + mobileTemplate.setSocialGroup('gondula tribe') + mobileTemplate.setAssistRange(1) + mobileTemplate.setOptionsBitmask(128) + mobileTemplate.setStalker(True) + + + templates = Vector() + templates.add('object/mobile/shared_dressed_ewok_f_01.iff') + templates.add('object/mobile/shared_dressed_ewok_f_02.iff') + templates.add('object/mobile/shared_dressed_ewok_f_03.iff') + templates.add('object/mobile/shared_dressed_ewok_f_04.iff') + templates.add('object/mobile/shared_dressed_ewok_f_05.iff') + templates.add('object/mobile/shared_dressed_ewok_f_06.iff') + templates.add('object/mobile/shared_dressed_ewok_f_07.iff') + templates.add('object/mobile/shared_dressed_ewok_f_08.iff') + templates.add('object/mobile/shared_dressed_ewok_f_09.iff') + templates.add('object/mobile/shared_dressed_ewok_f_10.iff') + templates.add('object/mobile/shared_dressed_ewok_f_11.iff') + templates.add('object/mobile/shared_dressed_ewok_f_12.iff') + templates.add('object/mobile/shared_dressed_ewok_m_01.iff') + templates.add('object/mobile/shared_dressed_ewok_m_02.iff') + templates.add('object/mobile/shared_dressed_ewok_m_03.iff') + templates.add('object/mobile/shared_dressed_ewok_m_04.iff') + templates.add('object/mobile/shared_dressed_ewok_m_05.iff') + templates.add('object/mobile/shared_dressed_ewok_m_06.iff') + templates.add('object/mobile/shared_dressed_ewok_m_07.iff') + templates.add('object/mobile/shared_dressed_ewok_m_08.iff') + templates.add('object/mobile/shared_dressed_ewok_m_09.iff') + templates.add('object/mobile/shared_dressed_ewok_m_10.iff') + templates.add('object/mobile/shared_dressed_ewok_m_11.iff') + templates.add('object/mobile/shared_dressed_ewok_m_12.iff') + + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('meleeHit') + mobileTemplate.setAttacks(attacks) + + lootPoolNames_1 = ['Junk'] + lootPoolChances_1 = [100] + lootGroupChance_1 = 65 + mobileTemplate.addToLootGroups(lootPoolNames_1,lootPoolChances_1,lootGroupChance_1) + + lootPoolNames_2 = ['random_loot_primitives'] + lootPoolChances_2 = [100] + lootGroupChance_2 = 35 + mobileTemplate.addToLootGroups(lootPoolNames_2,lootPoolChances_2,lootGroupChance_2) + + core.spawnService.addMobileTemplate('gondula_cub', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/endor/gondula_elder.py b/scripts/mobiles/endor/gondula_elder.py new file mode 100644 index 00000000..98d374f9 --- /dev/null +++ b/scripts/mobiles/endor/gondula_elder.py @@ -0,0 +1,73 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('gondula_elder') + mobileTemplate.setLevel(79) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(3) + mobileTemplate.setMaxSpawnDistance(5) + mobileTemplate.setDeathblow(True) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup('gondula tribe') + mobileTemplate.setAssistRange(1) + mobileTemplate.setOptionsBitmask(128) + mobileTemplate.setStalker(True) + + + templates = Vector() + templates.add('object/mobile/shared_dressed_ewok_f_01.iff') + templates.add('object/mobile/shared_dressed_ewok_f_02.iff') + templates.add('object/mobile/shared_dressed_ewok_f_03.iff') + templates.add('object/mobile/shared_dressed_ewok_f_04.iff') + templates.add('object/mobile/shared_dressed_ewok_f_05.iff') + templates.add('object/mobile/shared_dressed_ewok_f_06.iff') + templates.add('object/mobile/shared_dressed_ewok_f_07.iff') + templates.add('object/mobile/shared_dressed_ewok_f_08.iff') + templates.add('object/mobile/shared_dressed_ewok_f_09.iff') + templates.add('object/mobile/shared_dressed_ewok_f_10.iff') + templates.add('object/mobile/shared_dressed_ewok_f_11.iff') + templates.add('object/mobile/shared_dressed_ewok_f_12.iff') + templates.add('object/mobile/shared_dressed_ewok_m_01.iff') + templates.add('object/mobile/shared_dressed_ewok_m_02.iff') + templates.add('object/mobile/shared_dressed_ewok_m_03.iff') + templates.add('object/mobile/shared_dressed_ewok_m_04.iff') + templates.add('object/mobile/shared_dressed_ewok_m_05.iff') + templates.add('object/mobile/shared_dressed_ewok_m_06.iff') + templates.add('object/mobile/shared_dressed_ewok_m_07.iff') + templates.add('object/mobile/shared_dressed_ewok_m_08.iff') + templates.add('object/mobile/shared_dressed_ewok_m_09.iff') + templates.add('object/mobile/shared_dressed_ewok_m_10.iff') + templates.add('object/mobile/shared_dressed_ewok_m_11.iff') + templates.add('object/mobile/shared_dressed_ewok_m_12.iff') + + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('meleeHit') + mobileTemplate.setAttacks(attacks) + + lootPoolNames_1 = ['Junk'] + lootPoolChances_1 = [100] + lootGroupChance_1 = 65 + mobileTemplate.addToLootGroups(lootPoolNames_1,lootPoolChances_1,lootGroupChance_1) + + lootPoolNames_2 = ['random_loot_primitives'] + lootPoolChances_2 = [100] + lootGroupChance_2 = 35 + mobileTemplate.addToLootGroups(lootPoolNames_2,lootPoolChances_2,lootGroupChance_2) + + core.spawnService.addMobileTemplate('gondula_elder', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/endor/gondula_elder_worker.py b/scripts/mobiles/endor/gondula_elder_worker.py new file mode 100644 index 00000000..31112bcc --- /dev/null +++ b/scripts/mobiles/endor/gondula_elder_worker.py @@ -0,0 +1,73 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('gondula_elder_worker') + mobileTemplate.setLevel(78) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(3) + mobileTemplate.setMaxSpawnDistance(5) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup('gondula tribe') + mobileTemplate.setAssistRange(1) + mobileTemplate.setOptionsBitmask(128) + mobileTemplate.setStalker(True) + + + templates = Vector() + templates.add('object/mobile/shared_dressed_ewok_f_01.iff') + templates.add('object/mobile/shared_dressed_ewok_f_02.iff') + templates.add('object/mobile/shared_dressed_ewok_f_03.iff') + templates.add('object/mobile/shared_dressed_ewok_f_04.iff') + templates.add('object/mobile/shared_dressed_ewok_f_05.iff') + templates.add('object/mobile/shared_dressed_ewok_f_06.iff') + templates.add('object/mobile/shared_dressed_ewok_f_07.iff') + templates.add('object/mobile/shared_dressed_ewok_f_08.iff') + templates.add('object/mobile/shared_dressed_ewok_f_09.iff') + templates.add('object/mobile/shared_dressed_ewok_f_10.iff') + templates.add('object/mobile/shared_dressed_ewok_f_11.iff') + templates.add('object/mobile/shared_dressed_ewok_f_12.iff') + templates.add('object/mobile/shared_dressed_ewok_m_01.iff') + templates.add('object/mobile/shared_dressed_ewok_m_02.iff') + templates.add('object/mobile/shared_dressed_ewok_m_03.iff') + templates.add('object/mobile/shared_dressed_ewok_m_04.iff') + templates.add('object/mobile/shared_dressed_ewok_m_05.iff') + templates.add('object/mobile/shared_dressed_ewok_m_06.iff') + templates.add('object/mobile/shared_dressed_ewok_m_07.iff') + templates.add('object/mobile/shared_dressed_ewok_m_08.iff') + templates.add('object/mobile/shared_dressed_ewok_m_09.iff') + templates.add('object/mobile/shared_dressed_ewok_m_10.iff') + templates.add('object/mobile/shared_dressed_ewok_m_11.iff') + templates.add('object/mobile/shared_dressed_ewok_m_12.iff') + + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('meleeHit') + mobileTemplate.setAttacks(attacks) + + lootPoolNames_1 = ['Junk'] + lootPoolChances_1 = [100] + lootGroupChance_1 = 65 + mobileTemplate.addToLootGroups(lootPoolNames_1,lootPoolChances_1,lootGroupChance_1) + + lootPoolNames_2 = ['random_loot_primitives'] + lootPoolChances_2 = [100] + lootGroupChance_2 = 35 + mobileTemplate.addToLootGroups(lootPoolNames_2,lootPoolChances_2,lootGroupChance_2) + + core.spawnService.addMobileTemplate('gondula_elder_worker', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/endor/gondula_kelbe.py b/scripts/mobiles/endor/gondula_kelbe.py new file mode 100644 index 00000000..59637cd7 --- /dev/null +++ b/scripts/mobiles/endor/gondula_kelbe.py @@ -0,0 +1,73 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('gondula_kelbe') + mobileTemplate.setLevel(80) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(3) + mobileTemplate.setMaxSpawnDistance(5) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup('gondula tribe') + mobileTemplate.setAssistRange(1) + mobileTemplate.setOptionsBitmask(128) + mobileTemplate.setStalker(True) + + + templates = Vector() + templates.add('object/mobile/shared_dressed_ewok_f_01.iff') + templates.add('object/mobile/shared_dressed_ewok_f_02.iff') + templates.add('object/mobile/shared_dressed_ewok_f_03.iff') + templates.add('object/mobile/shared_dressed_ewok_f_04.iff') + templates.add('object/mobile/shared_dressed_ewok_f_05.iff') + templates.add('object/mobile/shared_dressed_ewok_f_06.iff') + templates.add('object/mobile/shared_dressed_ewok_f_07.iff') + templates.add('object/mobile/shared_dressed_ewok_f_08.iff') + templates.add('object/mobile/shared_dressed_ewok_f_09.iff') + templates.add('object/mobile/shared_dressed_ewok_f_10.iff') + templates.add('object/mobile/shared_dressed_ewok_f_11.iff') + templates.add('object/mobile/shared_dressed_ewok_f_12.iff') + templates.add('object/mobile/shared_dressed_ewok_m_01.iff') + templates.add('object/mobile/shared_dressed_ewok_m_02.iff') + templates.add('object/mobile/shared_dressed_ewok_m_03.iff') + templates.add('object/mobile/shared_dressed_ewok_m_04.iff') + templates.add('object/mobile/shared_dressed_ewok_m_05.iff') + templates.add('object/mobile/shared_dressed_ewok_m_06.iff') + templates.add('object/mobile/shared_dressed_ewok_m_07.iff') + templates.add('object/mobile/shared_dressed_ewok_m_08.iff') + templates.add('object/mobile/shared_dressed_ewok_m_09.iff') + templates.add('object/mobile/shared_dressed_ewok_m_10.iff') + templates.add('object/mobile/shared_dressed_ewok_m_11.iff') + templates.add('object/mobile/shared_dressed_ewok_m_12.iff') + + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('meleeHit') + mobileTemplate.setAttacks(attacks) + + lootPoolNames_1 = ['Junk'] + lootPoolChances_1 = [100] + lootGroupChance_1 = 65 + mobileTemplate.addToLootGroups(lootPoolNames_1,lootPoolChances_1,lootGroupChance_1) + + lootPoolNames_2 = ['random_loot_primitives'] + lootPoolChances_2 = [100] + lootGroupChance_2 = 35 + mobileTemplate.addToLootGroups(lootPoolNames_2,lootPoolChances_2,lootGroupChance_2) + + core.spawnService.addMobileTemplate('gondula_kelbe', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/endor/gondula_loremaster.py b/scripts/mobiles/endor/gondula_loremaster.py new file mode 100644 index 00000000..3ef2c7cc --- /dev/null +++ b/scripts/mobiles/endor/gondula_loremaster.py @@ -0,0 +1,73 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('gondula_loremaster') + mobileTemplate.setLevel(78) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(3) + mobileTemplate.setMaxSpawnDistance(5) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup('gondula tribe') + mobileTemplate.setAssistRange(1) + mobileTemplate.setOptionsBitmask(128) + mobileTemplate.setStalker(True) + + + templates = Vector() + templates.add('object/mobile/shared_dressed_ewok_f_01.iff') + templates.add('object/mobile/shared_dressed_ewok_f_02.iff') + templates.add('object/mobile/shared_dressed_ewok_f_03.iff') + templates.add('object/mobile/shared_dressed_ewok_f_04.iff') + templates.add('object/mobile/shared_dressed_ewok_f_05.iff') + templates.add('object/mobile/shared_dressed_ewok_f_06.iff') + templates.add('object/mobile/shared_dressed_ewok_f_07.iff') + templates.add('object/mobile/shared_dressed_ewok_f_08.iff') + templates.add('object/mobile/shared_dressed_ewok_f_09.iff') + templates.add('object/mobile/shared_dressed_ewok_f_10.iff') + templates.add('object/mobile/shared_dressed_ewok_f_11.iff') + templates.add('object/mobile/shared_dressed_ewok_f_12.iff') + templates.add('object/mobile/shared_dressed_ewok_m_01.iff') + templates.add('object/mobile/shared_dressed_ewok_m_02.iff') + templates.add('object/mobile/shared_dressed_ewok_m_03.iff') + templates.add('object/mobile/shared_dressed_ewok_m_04.iff') + templates.add('object/mobile/shared_dressed_ewok_m_05.iff') + templates.add('object/mobile/shared_dressed_ewok_m_06.iff') + templates.add('object/mobile/shared_dressed_ewok_m_07.iff') + templates.add('object/mobile/shared_dressed_ewok_m_08.iff') + templates.add('object/mobile/shared_dressed_ewok_m_09.iff') + templates.add('object/mobile/shared_dressed_ewok_m_10.iff') + templates.add('object/mobile/shared_dressed_ewok_m_11.iff') + templates.add('object/mobile/shared_dressed_ewok_m_12.iff') + + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('meleeHit') + mobileTemplate.setAttacks(attacks) + + lootPoolNames_1 = ['Junk'] + lootPoolChances_1 = [100] + lootGroupChance_1 = 65 + mobileTemplate.addToLootGroups(lootPoolNames_1,lootPoolChances_1,lootGroupChance_1) + + lootPoolNames_2 = ['random_loot_primitives'] + lootPoolChances_2 = [100] + lootGroupChance_2 = 35 + mobileTemplate.addToLootGroups(lootPoolNames_2,lootPoolChances_2,lootGroupChance_2) + + core.spawnService.addMobileTemplate('gondula_loremaster', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/endor/gondula_matriarch.py b/scripts/mobiles/endor/gondula_matriarch.py new file mode 100644 index 00000000..fb44f1c8 --- /dev/null +++ b/scripts/mobiles/endor/gondula_matriarch.py @@ -0,0 +1,73 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('gondula_matriarch') + mobileTemplate.setLevel(78) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(3) + mobileTemplate.setMaxSpawnDistance(5) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup('gondula tribe') + mobileTemplate.setAssistRange(1) + mobileTemplate.setOptionsBitmask(128) + mobileTemplate.setStalker(True) + + + templates = Vector() + templates.add('object/mobile/shared_dressed_ewok_f_01.iff') + templates.add('object/mobile/shared_dressed_ewok_f_02.iff') + templates.add('object/mobile/shared_dressed_ewok_f_03.iff') + templates.add('object/mobile/shared_dressed_ewok_f_04.iff') + templates.add('object/mobile/shared_dressed_ewok_f_05.iff') + templates.add('object/mobile/shared_dressed_ewok_f_06.iff') + templates.add('object/mobile/shared_dressed_ewok_f_07.iff') + templates.add('object/mobile/shared_dressed_ewok_f_08.iff') + templates.add('object/mobile/shared_dressed_ewok_f_09.iff') + templates.add('object/mobile/shared_dressed_ewok_f_10.iff') + templates.add('object/mobile/shared_dressed_ewok_f_11.iff') + templates.add('object/mobile/shared_dressed_ewok_f_12.iff') + templates.add('object/mobile/shared_dressed_ewok_m_01.iff') + templates.add('object/mobile/shared_dressed_ewok_m_02.iff') + templates.add('object/mobile/shared_dressed_ewok_m_03.iff') + templates.add('object/mobile/shared_dressed_ewok_m_04.iff') + templates.add('object/mobile/shared_dressed_ewok_m_05.iff') + templates.add('object/mobile/shared_dressed_ewok_m_06.iff') + templates.add('object/mobile/shared_dressed_ewok_m_07.iff') + templates.add('object/mobile/shared_dressed_ewok_m_08.iff') + templates.add('object/mobile/shared_dressed_ewok_m_09.iff') + templates.add('object/mobile/shared_dressed_ewok_m_10.iff') + templates.add('object/mobile/shared_dressed_ewok_m_11.iff') + templates.add('object/mobile/shared_dressed_ewok_m_12.iff') + + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('meleeHit') + mobileTemplate.setAttacks(attacks) + + lootPoolNames_1 = ['Junk'] + lootPoolChances_1 = [100] + lootGroupChance_1 = 65 + mobileTemplate.addToLootGroups(lootPoolNames_1,lootPoolChances_1,lootGroupChance_1) + + lootPoolNames_2 = ['random_loot_primitives'] + lootPoolChances_2 = [100] + lootGroupChance_2 = 35 + mobileTemplate.addToLootGroups(lootPoolNames_2,lootPoolChances_2,lootGroupChance_2) + + core.spawnService.addMobileTemplate('gondula_matriarch', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/endor/gondula_outcast.py b/scripts/mobiles/endor/gondula_outcast.py new file mode 100644 index 00000000..bdf83a0e --- /dev/null +++ b/scripts/mobiles/endor/gondula_outcast.py @@ -0,0 +1,73 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('gondula_outcast') + mobileTemplate.setLevel(78) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(3) + mobileTemplate.setMaxSpawnDistance(5) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup('gondula tribe') + mobileTemplate.setAssistRange(1) + mobileTemplate.setOptionsBitmask(128) + mobileTemplate.setStalker(True) + + + templates = Vector() + templates.add('object/mobile/shared_dressed_ewok_f_01.iff') + templates.add('object/mobile/shared_dressed_ewok_f_02.iff') + templates.add('object/mobile/shared_dressed_ewok_f_03.iff') + templates.add('object/mobile/shared_dressed_ewok_f_04.iff') + templates.add('object/mobile/shared_dressed_ewok_f_05.iff') + templates.add('object/mobile/shared_dressed_ewok_f_06.iff') + templates.add('object/mobile/shared_dressed_ewok_f_07.iff') + templates.add('object/mobile/shared_dressed_ewok_f_08.iff') + templates.add('object/mobile/shared_dressed_ewok_f_09.iff') + templates.add('object/mobile/shared_dressed_ewok_f_10.iff') + templates.add('object/mobile/shared_dressed_ewok_f_11.iff') + templates.add('object/mobile/shared_dressed_ewok_f_12.iff') + templates.add('object/mobile/shared_dressed_ewok_m_01.iff') + templates.add('object/mobile/shared_dressed_ewok_m_02.iff') + templates.add('object/mobile/shared_dressed_ewok_m_03.iff') + templates.add('object/mobile/shared_dressed_ewok_m_04.iff') + templates.add('object/mobile/shared_dressed_ewok_m_05.iff') + templates.add('object/mobile/shared_dressed_ewok_m_06.iff') + templates.add('object/mobile/shared_dressed_ewok_m_07.iff') + templates.add('object/mobile/shared_dressed_ewok_m_08.iff') + templates.add('object/mobile/shared_dressed_ewok_m_09.iff') + templates.add('object/mobile/shared_dressed_ewok_m_10.iff') + templates.add('object/mobile/shared_dressed_ewok_m_11.iff') + templates.add('object/mobile/shared_dressed_ewok_m_12.iff') + + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('meleeHit') + mobileTemplate.setAttacks(attacks) + + lootPoolNames_1 = ['Junk'] + lootPoolChances_1 = [100] + lootGroupChance_1 = 65 + mobileTemplate.addToLootGroups(lootPoolNames_1,lootPoolChances_1,lootGroupChance_1) + + lootPoolNames_2 = ['random_loot_primitives'] + lootPoolChances_2 = [100] + lootGroupChance_2 = 35 + mobileTemplate.addToLootGroups(lootPoolNames_2,lootPoolChances_2,lootGroupChance_2) + + core.spawnService.addMobileTemplate('gondula_outcast', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/endor/gondula_ritualist.py b/scripts/mobiles/endor/gondula_ritualist.py new file mode 100644 index 00000000..be7f3924 --- /dev/null +++ b/scripts/mobiles/endor/gondula_ritualist.py @@ -0,0 +1,73 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('gondula_ritualist') + mobileTemplate.setLevel(78) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(3) + mobileTemplate.setMaxSpawnDistance(5) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup('gondula tribe') + mobileTemplate.setAssistRange(1) + mobileTemplate.setOptionsBitmask(128) + mobileTemplate.setStalker(True) + + + templates = Vector() + templates.add('object/mobile/shared_dressed_ewok_f_01.iff') + templates.add('object/mobile/shared_dressed_ewok_f_02.iff') + templates.add('object/mobile/shared_dressed_ewok_f_03.iff') + templates.add('object/mobile/shared_dressed_ewok_f_04.iff') + templates.add('object/mobile/shared_dressed_ewok_f_05.iff') + templates.add('object/mobile/shared_dressed_ewok_f_06.iff') + templates.add('object/mobile/shared_dressed_ewok_f_07.iff') + templates.add('object/mobile/shared_dressed_ewok_f_08.iff') + templates.add('object/mobile/shared_dressed_ewok_f_09.iff') + templates.add('object/mobile/shared_dressed_ewok_f_10.iff') + templates.add('object/mobile/shared_dressed_ewok_f_11.iff') + templates.add('object/mobile/shared_dressed_ewok_f_12.iff') + templates.add('object/mobile/shared_dressed_ewok_m_01.iff') + templates.add('object/mobile/shared_dressed_ewok_m_02.iff') + templates.add('object/mobile/shared_dressed_ewok_m_03.iff') + templates.add('object/mobile/shared_dressed_ewok_m_04.iff') + templates.add('object/mobile/shared_dressed_ewok_m_05.iff') + templates.add('object/mobile/shared_dressed_ewok_m_06.iff') + templates.add('object/mobile/shared_dressed_ewok_m_07.iff') + templates.add('object/mobile/shared_dressed_ewok_m_08.iff') + templates.add('object/mobile/shared_dressed_ewok_m_09.iff') + templates.add('object/mobile/shared_dressed_ewok_m_10.iff') + templates.add('object/mobile/shared_dressed_ewok_m_11.iff') + templates.add('object/mobile/shared_dressed_ewok_m_12.iff') + + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('meleeHit') + mobileTemplate.setAttacks(attacks) + + lootPoolNames_1 = ['Junk'] + lootPoolChances_1 = [100] + lootGroupChance_1 = 65 + mobileTemplate.addToLootGroups(lootPoolNames_1,lootPoolChances_1,lootGroupChance_1) + + lootPoolNames_2 = ['random_loot_primitives'] + lootPoolChances_2 = [100] + lootGroupChance_2 = 35 + mobileTemplate.addToLootGroups(lootPoolNames_2,lootPoolChances_2,lootGroupChance_2) + + core.spawnService.addMobileTemplate('gondula_ritualist', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/endor/gondula_shaman.py b/scripts/mobiles/endor/gondula_shaman.py new file mode 100644 index 00000000..7fb1cdc3 --- /dev/null +++ b/scripts/mobiles/endor/gondula_shaman.py @@ -0,0 +1,73 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('gondula_shaman') + mobileTemplate.setLevel(78) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(3) + mobileTemplate.setMaxSpawnDistance(5) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup('gondula tribe') + mobileTemplate.setAssistRange(1) + mobileTemplate.setOptionsBitmask(128) + mobileTemplate.setStalker(True) + + + templates = Vector() + templates.add('object/mobile/shared_dressed_ewok_f_01.iff') + templates.add('object/mobile/shared_dressed_ewok_f_02.iff') + templates.add('object/mobile/shared_dressed_ewok_f_03.iff') + templates.add('object/mobile/shared_dressed_ewok_f_04.iff') + templates.add('object/mobile/shared_dressed_ewok_f_05.iff') + templates.add('object/mobile/shared_dressed_ewok_f_06.iff') + templates.add('object/mobile/shared_dressed_ewok_f_07.iff') + templates.add('object/mobile/shared_dressed_ewok_f_08.iff') + templates.add('object/mobile/shared_dressed_ewok_f_09.iff') + templates.add('object/mobile/shared_dressed_ewok_f_10.iff') + templates.add('object/mobile/shared_dressed_ewok_f_11.iff') + templates.add('object/mobile/shared_dressed_ewok_f_12.iff') + templates.add('object/mobile/shared_dressed_ewok_m_01.iff') + templates.add('object/mobile/shared_dressed_ewok_m_02.iff') + templates.add('object/mobile/shared_dressed_ewok_m_03.iff') + templates.add('object/mobile/shared_dressed_ewok_m_04.iff') + templates.add('object/mobile/shared_dressed_ewok_m_05.iff') + templates.add('object/mobile/shared_dressed_ewok_m_06.iff') + templates.add('object/mobile/shared_dressed_ewok_m_07.iff') + templates.add('object/mobile/shared_dressed_ewok_m_08.iff') + templates.add('object/mobile/shared_dressed_ewok_m_09.iff') + templates.add('object/mobile/shared_dressed_ewok_m_10.iff') + templates.add('object/mobile/shared_dressed_ewok_m_11.iff') + templates.add('object/mobile/shared_dressed_ewok_m_12.iff') + + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('meleeHit') + mobileTemplate.setAttacks(attacks) + + lootPoolNames_1 = ['Junk'] + lootPoolChances_1 = [100] + lootGroupChance_1 = 65 + mobileTemplate.addToLootGroups(lootPoolNames_1,lootPoolChances_1,lootGroupChance_1) + + lootPoolNames_2 = ['random_loot_primitives'] + lootPoolChances_2 = [100] + lootGroupChance_2 = 35 + mobileTemplate.addToLootGroups(lootPoolNames_2,lootPoolChances_2,lootGroupChance_2) + + core.spawnService.addMobileTemplate('gondula_shaman', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/endor/gondula_tribesman.py b/scripts/mobiles/endor/gondula_tribesman.py new file mode 100644 index 00000000..6049d8c9 --- /dev/null +++ b/scripts/mobiles/endor/gondula_tribesman.py @@ -0,0 +1,73 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('gondula_tribesman') + mobileTemplate.setLevel(78) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(3) + mobileTemplate.setMaxSpawnDistance(5) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup('gondula tribe') + mobileTemplate.setAssistRange(1) + mobileTemplate.setOptionsBitmask(128) + mobileTemplate.setStalker(True) + + + templates = Vector() + templates.add('object/mobile/shared_dressed_ewok_f_01.iff') + templates.add('object/mobile/shared_dressed_ewok_f_02.iff') + templates.add('object/mobile/shared_dressed_ewok_f_03.iff') + templates.add('object/mobile/shared_dressed_ewok_f_04.iff') + templates.add('object/mobile/shared_dressed_ewok_f_05.iff') + templates.add('object/mobile/shared_dressed_ewok_f_06.iff') + templates.add('object/mobile/shared_dressed_ewok_f_07.iff') + templates.add('object/mobile/shared_dressed_ewok_f_08.iff') + templates.add('object/mobile/shared_dressed_ewok_f_09.iff') + templates.add('object/mobile/shared_dressed_ewok_f_10.iff') + templates.add('object/mobile/shared_dressed_ewok_f_11.iff') + templates.add('object/mobile/shared_dressed_ewok_f_12.iff') + templates.add('object/mobile/shared_dressed_ewok_m_01.iff') + templates.add('object/mobile/shared_dressed_ewok_m_02.iff') + templates.add('object/mobile/shared_dressed_ewok_m_03.iff') + templates.add('object/mobile/shared_dressed_ewok_m_04.iff') + templates.add('object/mobile/shared_dressed_ewok_m_05.iff') + templates.add('object/mobile/shared_dressed_ewok_m_06.iff') + templates.add('object/mobile/shared_dressed_ewok_m_07.iff') + templates.add('object/mobile/shared_dressed_ewok_m_08.iff') + templates.add('object/mobile/shared_dressed_ewok_m_09.iff') + templates.add('object/mobile/shared_dressed_ewok_m_10.iff') + templates.add('object/mobile/shared_dressed_ewok_m_11.iff') + templates.add('object/mobile/shared_dressed_ewok_m_12.iff') + + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('meleeHit') + mobileTemplate.setAttacks(attacks) + + lootPoolNames_1 = ['Junk'] + lootPoolChances_1 = [100] + lootGroupChance_1 = 65 + mobileTemplate.addToLootGroups(lootPoolNames_1,lootPoolChances_1,lootGroupChance_1) + + lootPoolNames_2 = ['random_loot_primitives'] + lootPoolChances_2 = [100] + lootGroupChance_2 = 35 + mobileTemplate.addToLootGroups(lootPoolNames_2,lootPoolChances_2,lootGroupChance_2) + + core.spawnService.addMobileTemplate('gondula_tribesman', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/endor/gondula_veteran.py b/scripts/mobiles/endor/gondula_veteran.py new file mode 100644 index 00000000..087c94bb --- /dev/null +++ b/scripts/mobiles/endor/gondula_veteran.py @@ -0,0 +1,73 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('gondula_veteran') + mobileTemplate.setLevel(79) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(3) + mobileTemplate.setMaxSpawnDistance(5) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup('gondula tribe') + mobileTemplate.setAssistRange(1) + mobileTemplate.setOptionsBitmask(128) + mobileTemplate.setStalker(True) + + + templates = Vector() + templates.add('object/mobile/shared_dressed_ewok_f_01.iff') + templates.add('object/mobile/shared_dressed_ewok_f_02.iff') + templates.add('object/mobile/shared_dressed_ewok_f_03.iff') + templates.add('object/mobile/shared_dressed_ewok_f_04.iff') + templates.add('object/mobile/shared_dressed_ewok_f_05.iff') + templates.add('object/mobile/shared_dressed_ewok_f_06.iff') + templates.add('object/mobile/shared_dressed_ewok_f_07.iff') + templates.add('object/mobile/shared_dressed_ewok_f_08.iff') + templates.add('object/mobile/shared_dressed_ewok_f_09.iff') + templates.add('object/mobile/shared_dressed_ewok_f_10.iff') + templates.add('object/mobile/shared_dressed_ewok_f_11.iff') + templates.add('object/mobile/shared_dressed_ewok_f_12.iff') + templates.add('object/mobile/shared_dressed_ewok_m_01.iff') + templates.add('object/mobile/shared_dressed_ewok_m_02.iff') + templates.add('object/mobile/shared_dressed_ewok_m_03.iff') + templates.add('object/mobile/shared_dressed_ewok_m_04.iff') + templates.add('object/mobile/shared_dressed_ewok_m_05.iff') + templates.add('object/mobile/shared_dressed_ewok_m_06.iff') + templates.add('object/mobile/shared_dressed_ewok_m_07.iff') + templates.add('object/mobile/shared_dressed_ewok_m_08.iff') + templates.add('object/mobile/shared_dressed_ewok_m_09.iff') + templates.add('object/mobile/shared_dressed_ewok_m_10.iff') + templates.add('object/mobile/shared_dressed_ewok_m_11.iff') + templates.add('object/mobile/shared_dressed_ewok_m_12.iff') + + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('meleeHit') + mobileTemplate.setAttacks(attacks) + + lootPoolNames_1 = ['Junk'] + lootPoolChances_1 = [100] + lootGroupChance_1 = 65 + mobileTemplate.addToLootGroups(lootPoolNames_1,lootPoolChances_1,lootGroupChance_1) + + lootPoolNames_2 = ['random_loot_primitives'] + lootPoolChances_2 = [100] + lootGroupChance_2 = 35 + mobileTemplate.addToLootGroups(lootPoolNames_2,lootPoolChances_2,lootGroupChance_2) + + core.spawnService.addMobileTemplate('gondula_veteran', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/endor/gondula_warrior.py b/scripts/mobiles/endor/gondula_warrior.py new file mode 100644 index 00000000..926bc22d --- /dev/null +++ b/scripts/mobiles/endor/gondula_warrior.py @@ -0,0 +1,73 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('gondula_warrior') + mobileTemplate.setLevel(79) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(3) + mobileTemplate.setMaxSpawnDistance(5) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(.5) + mobileTemplate.setSocialGroup('gondula tribe') + mobileTemplate.setAssistRange(1) + mobileTemplate.setOptionsBitmask(128) + mobileTemplate.setStalker(True) + + + templates = Vector() + templates.add('object/mobile/shared_dressed_ewok_f_01.iff') + templates.add('object/mobile/shared_dressed_ewok_f_02.iff') + templates.add('object/mobile/shared_dressed_ewok_f_03.iff') + templates.add('object/mobile/shared_dressed_ewok_f_04.iff') + templates.add('object/mobile/shared_dressed_ewok_f_05.iff') + templates.add('object/mobile/shared_dressed_ewok_f_06.iff') + templates.add('object/mobile/shared_dressed_ewok_f_07.iff') + templates.add('object/mobile/shared_dressed_ewok_f_08.iff') + templates.add('object/mobile/shared_dressed_ewok_f_09.iff') + templates.add('object/mobile/shared_dressed_ewok_f_10.iff') + templates.add('object/mobile/shared_dressed_ewok_f_11.iff') + templates.add('object/mobile/shared_dressed_ewok_f_12.iff') + templates.add('object/mobile/shared_dressed_ewok_m_01.iff') + templates.add('object/mobile/shared_dressed_ewok_m_02.iff') + templates.add('object/mobile/shared_dressed_ewok_m_03.iff') + templates.add('object/mobile/shared_dressed_ewok_m_04.iff') + templates.add('object/mobile/shared_dressed_ewok_m_05.iff') + templates.add('object/mobile/shared_dressed_ewok_m_06.iff') + templates.add('object/mobile/shared_dressed_ewok_m_07.iff') + templates.add('object/mobile/shared_dressed_ewok_m_08.iff') + templates.add('object/mobile/shared_dressed_ewok_m_09.iff') + templates.add('object/mobile/shared_dressed_ewok_m_10.iff') + templates.add('object/mobile/shared_dressed_ewok_m_11.iff') + templates.add('object/mobile/shared_dressed_ewok_m_12.iff') + + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('meleeHit') + mobileTemplate.setAttacks(attacks) + + lootPoolNames_1 = ['Junk'] + lootPoolChances_1 = [100] + lootGroupChance_1 = 65 + mobileTemplate.addToLootGroups(lootPoolNames_1,lootPoolChances_1,lootGroupChance_1) + + lootPoolNames_2 = ['random_loot_primitives'] + lootPoolChances_2 = [100] + lootGroupChance_2 = 35 + mobileTemplate.addToLootGroups(lootPoolNames_2,lootPoolChances_2,lootGroupChance_2) + + core.spawnService.addMobileTemplate('gondula_warrior', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/endor/grassland_blood_marauder.py b/scripts/mobiles/endor/grassland_blood_marauder.py new file mode 100644 index 00000000..2f638a71 --- /dev/null +++ b/scripts/mobiles/endor/grassland_blood_marauder.py @@ -0,0 +1,45 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('grassland_blood_marauder') + mobileTemplate.setLevel(78) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(1) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(True) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("marauder") + mobileTemplate.setAssistRange(12) + mobileTemplate.setStalker(True) + mobileTemplate.setOptionsBitmask(192) + + templates = Vector() + templates.add('object/mobile/shared_marauder_male_01.iff') + templates.add('object/mobile/shared_marauder_male_02.iff') + templates.add('object/mobile/shared_marauder_male_02.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 1, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('meleeHit') + mobileTemplate.setAttacks(attacks) + + lootPoolNames_1 = ['Junk'] + lootPoolChances_1 = [100] + lootGroupChance_1 = 100 + mobileTemplate.addToLootGroups(lootPoolNames_1,lootPoolChances_1,lootGroupChance_1) + + core.spawnService.addMobileTemplate('grassland_blood_marauder', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/endor/grassland_raider.py b/scripts/mobiles/endor/grassland_raider.py new file mode 100644 index 00000000..19b37a18 --- /dev/null +++ b/scripts/mobiles/endor/grassland_raider.py @@ -0,0 +1,45 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('grassland_raider') + mobileTemplate.setLevel(75) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(1) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(True) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("marauder") + mobileTemplate.setAssistRange(12) + mobileTemplate.setStalker(True) + mobileTemplate.setOptionsBitmask(192) + + templates = Vector() + templates.add('object/mobile/shared_marauder_male_01.iff') + templates.add('object/mobile/shared_marauder_male_02.iff') + templates.add('object/mobile/shared_marauder_male_02.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/carbine/shared_carbine_e11.iff', 1, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedshot') + mobileTemplate.setAttacks(attacks) + + lootPoolNames_1 = ['Junk'] + lootPoolChances_1 = [100] + lootGroupChance_1 = 100 + mobileTemplate.addToLootGroups(lootPoolNames_1,lootPoolChances_1,lootGroupChance_1) + + core.spawnService.addMobileTemplate('grassland_raider', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/endor/grungy_donkuwah_laborer.py b/scripts/mobiles/endor/grungy_donkuwah_laborer.py new file mode 100644 index 00000000..85a8cd12 --- /dev/null +++ b/scripts/mobiles/endor/grungy_donkuwah_laborer.py @@ -0,0 +1,49 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('grungy_donkuwah_laborer') + mobileTemplate.setLevel(78) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(3) + mobileTemplate.setMaxSpawnDistance(5) + mobileTemplate.setDeathblow(False) + mobileTemplate.setSocialGroup('donkuwah tribe') + mobileTemplate.setAssistRange(12) + mobileTemplate.setOptionsBitmask(128) + mobileTemplate.setStalker(False) + + + templates = Vector() + templates.add('object/mobile/shared_jinda_male.iff') + templates.add('object/mobile/shared_jinda_female.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('meleeHit') + mobileTemplate.setAttacks(attacks) + + lootPoolNames_1 = ['Junk'] + lootPoolChances_1 = [100] + lootGroupChance_1 = 65 + mobileTemplate.addToLootGroups(lootPoolNames_1,lootPoolChances_1,lootGroupChance_1) + + lootPoolNames_2 = ['random_loot_primitives'] + lootPoolChances_2 = [100] + lootGroupChance_2 = 35 + mobileTemplate.addToLootGroups(lootPoolNames_2,lootPoolChances_2,lootGroupChance_2) + + core.spawnService.addMobileTemplate('grungy_donkuwah_laborer', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/endor/grungy_korga_laborer.py b/scripts/mobiles/endor/grungy_korga_laborer.py new file mode 100644 index 00000000..fe83f4c8 --- /dev/null +++ b/scripts/mobiles/endor/grungy_korga_laborer.py @@ -0,0 +1,49 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('grungy_korga_laborer') + mobileTemplate.setLevel(76) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(3) + mobileTemplate.setMaxSpawnDistance(5) + mobileTemplate.setDeathblow(False) + mobileTemplate.setSocialGroup('korga tribe') + mobileTemplate.setAssistRange(1) + mobileTemplate.setOptionsBitmask(128) + mobileTemplate.setStalker(False) + + + templates = Vector() + templates.add('object/mobile/shared_dulok_male.iff') + templates.add('object/mobile/shared_dulok_female.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('meleeHit') + mobileTemplate.setAttacks(attacks) + + lootPoolNames_1 = ['Junk'] + lootPoolChances_1 = [100] + lootGroupChance_1 = 65 + mobileTemplate.addToLootGroups(lootPoolNames_1,lootPoolChances_1,lootGroupChance_1) + + lootPoolNames_2 = ['random_loot_primitives'] + lootPoolChances_2 = [100] + lootGroupChance_2 = 35 + mobileTemplate.addToLootGroups(lootPoolNames_2,lootPoolChances_2,lootGroupChance_2) + + core.spawnService.addMobileTemplate('grungy_korga_laborer', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/endor/grungy_pubam_laborer.py b/scripts/mobiles/endor/grungy_pubam_laborer.py new file mode 100644 index 00000000..fb411f6c --- /dev/null +++ b/scripts/mobiles/endor/grungy_pubam_laborer.py @@ -0,0 +1,49 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('grungy_pubam_laborer') + mobileTemplate.setLevel(65) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(3) + mobileTemplate.setMaxSpawnDistance(5) + mobileTemplate.setDeathblow(True) + mobileTemplate.setSocialGroup('pubam tribe') + mobileTemplate.setAssistRange(1) + mobileTemplate.setOptionsBitmask(128) + mobileTemplate.setStalker(False) + + + templates = Vector() + templates.add('object/mobile/shared_dulok_male.iff') + templates.add('object/mobile/shared_dulok_female.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('meleeHit') + mobileTemplate.setAttacks(attacks) + + lootPoolNames_1 = ['Junk'] + lootPoolChances_1 = [100] + lootGroupChance_1 = 65 + mobileTemplate.addToLootGroups(lootPoolNames_1,lootPoolChances_1,lootGroupChance_1) + + lootPoolNames_2 = ['random_loot_primitives'] + lootPoolChances_2 = [100] + lootGroupChance_2 = 35 + mobileTemplate.addToLootGroups(lootPoolNames_2,lootPoolChances_2,lootGroupChance_2) + + core.spawnService.addMobileTemplate('grungy_pubam_laborer', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/endor/gurreck.py b/scripts/mobiles/endor/gurreck.py new file mode 100644 index 00000000..8c8f2773 --- /dev/null +++ b/scripts/mobiles/endor/gurreck.py @@ -0,0 +1,38 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('gurreck') + mobileTemplate.setLevel(63) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("gurreck") + mobileTemplate.setAssistRange(12) + mobileTemplate.setStalker(True) + mobileTemplate.setOptionsBitmask(192) + + templates = Vector() + templates.add('object/mobile/shared_gurreck.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('gurreck', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/endor/gurreck_forest_stalker.py b/scripts/mobiles/endor/gurreck_forest_stalker.py new file mode 100644 index 00000000..e3e57611 --- /dev/null +++ b/scripts/mobiles/endor/gurreck_forest_stalker.py @@ -0,0 +1,38 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('woodland_gurreck') + mobileTemplate.setLevel(64) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("gurreck") + mobileTemplate.setAssistRange(12) + mobileTemplate.setStalker(True) + mobileTemplate.setOptionsBitmask(192) + + templates = Vector() + templates.add('object/mobile/shared_gurreck.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('gurreck_forest_stalker', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/endor/haggard_donkuwah_battlelord.py b/scripts/mobiles/endor/haggard_donkuwah_battlelord.py new file mode 100644 index 00000000..03364a19 --- /dev/null +++ b/scripts/mobiles/endor/haggard_donkuwah_battlelord.py @@ -0,0 +1,50 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('haggard_donkuwah_battlelord') + mobileTemplate.setLevel(79) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(3) + mobileTemplate.setMaxSpawnDistance(5) + mobileTemplate.setDeathblow(True) + mobileTemplate.setSocialGroup('donkuwah tribe') + mobileTemplate.setAssistRange(1) + mobileTemplate.setOptionsBitmask(192) + mobileTemplate.setStalker(True) + + + + templates = Vector() + templates.add('object/mobile/shared_jinda_male.iff') + templates.add('object/mobile/shared_jinda_female.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('meleeHit') + mobileTemplate.setAttacks(attacks) + + lootPoolNames_1 = ['Junk'] + lootPoolChances_1 = [100] + lootGroupChance_1 = 65 + mobileTemplate.addToLootGroups(lootPoolNames_1,lootPoolChances_1,lootGroupChance_1) + + lootPoolNames_2 = ['random_loot_primitives'] + lootPoolChances_2 = [100] + lootGroupChance_2 = 35 + mobileTemplate.addToLootGroups(lootPoolNames_2,lootPoolChances_2,lootGroupChance_2) + + core.spawnService.addMobileTemplate('haggard_donkuwah_battlelord', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/endor/haggard_pubam_battlelord.py b/scripts/mobiles/endor/haggard_pubam_battlelord.py new file mode 100644 index 00000000..16c17892 --- /dev/null +++ b/scripts/mobiles/endor/haggard_pubam_battlelord.py @@ -0,0 +1,49 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('haggard_pubam_battlelord') + mobileTemplate.setLevel(65) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(3) + mobileTemplate.setMaxSpawnDistance(5) + mobileTemplate.setDeathblow(True) + mobileTemplate.setSocialGroup('pubam tribe') + mobileTemplate.setAssistRange(1) + mobileTemplate.setOptionsBitmask(192) + mobileTemplate.setStalker(True) + + + templates = Vector() + templates.add('object/mobile/shared_jinda_male.iff') + templates.add('object/mobile/shared_jinda_female.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('meleeHit') + mobileTemplate.setAttacks(attacks) + + lootPoolNames_1 = ['Junk'] + lootPoolChances_1 = [100] + lootGroupChance_1 = 65 + mobileTemplate.addToLootGroups(lootPoolNames_1,lootPoolChances_1,lootGroupChance_1) + + lootPoolNames_2 = ['random_loot_primitives'] + lootPoolChances_2 = [100] + lootGroupChance_2 = 35 + mobileTemplate.addToLootGroups(lootPoolNames_2,lootPoolChances_2,lootGroupChance_2) + + core.spawnService.addMobileTemplate('haggard_pubam_battlelord', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/endor/hanadak_ancient.py b/scripts/mobiles/endor/hanadak_ancient.py new file mode 100644 index 00000000..2bc94a65 --- /dev/null +++ b/scripts/mobiles/endor/hanadak_ancient.py @@ -0,0 +1,44 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('hanadak_ancient') + mobileTemplate.setLevel(61) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1.2) + mobileTemplate.setMeatType("Carnivore Meat") + mobileTemplate.setMeatAmount(40) + mobileTemplate.setHideType("Bristley Hide") + mobileTemplate.setHideAmount(40) + mobileTemplate.setBoneType("Mammal Bones") + mobileTemplate.setBoneAmount(40) + mobileTemplate.setSocialGroup("hanadak") + mobileTemplate.setAssistRange(12) + mobileTemplate.setStalker(False) + mobileTemplate.setOptionsBitmask(192) + + templates = Vector() + templates.add('object/mobile/shared_hanadak.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('hanadak_ancient', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/endor/hanadak_drifter.py b/scripts/mobiles/endor/hanadak_drifter.py new file mode 100644 index 00000000..fe1ab44f --- /dev/null +++ b/scripts/mobiles/endor/hanadak_drifter.py @@ -0,0 +1,42 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('hanadak_drifter') + mobileTemplate.setLevel(60) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(True) + mobileTemplate.setScale(1) + mobileTemplate.setHideType("Bristley Hide") + mobileTemplate.setHideAmount(35) + mobileTemplate.setBoneType("Mammal Bones") + mobileTemplate.setBoneAmount(35) + mobileTemplate.setSocialGroup("bageraset") + mobileTemplate.setAssistRange(12) + mobileTemplate.setStalker(False) + mobileTemplate.setOptionsBitmask(192) + + templates = Vector() + templates.add('object/mobile/shared_hanadak.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('hanadak', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/endor/hardened_gondula_warrior.py b/scripts/mobiles/endor/hardened_gondula_warrior.py new file mode 100644 index 00000000..357a615c --- /dev/null +++ b/scripts/mobiles/endor/hardened_gondula_warrior.py @@ -0,0 +1,73 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('hardened_gondula_warrior') + mobileTemplate.setLevel(79) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(3) + mobileTemplate.setMaxSpawnDistance(5) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup('gondula tribe') + mobileTemplate.setAssistRange(1) + mobileTemplate.setOptionsBitmask(128) + mobileTemplate.setStalker(True) + + + templates = Vector() + templates.add('object/mobile/shared_dressed_ewok_f_01.iff') + templates.add('object/mobile/shared_dressed_ewok_f_02.iff') + templates.add('object/mobile/shared_dressed_ewok_f_03.iff') + templates.add('object/mobile/shared_dressed_ewok_f_04.iff') + templates.add('object/mobile/shared_dressed_ewok_f_05.iff') + templates.add('object/mobile/shared_dressed_ewok_f_06.iff') + templates.add('object/mobile/shared_dressed_ewok_f_07.iff') + templates.add('object/mobile/shared_dressed_ewok_f_08.iff') + templates.add('object/mobile/shared_dressed_ewok_f_09.iff') + templates.add('object/mobile/shared_dressed_ewok_f_10.iff') + templates.add('object/mobile/shared_dressed_ewok_f_11.iff') + templates.add('object/mobile/shared_dressed_ewok_f_12.iff') + templates.add('object/mobile/shared_dressed_ewok_m_01.iff') + templates.add('object/mobile/shared_dressed_ewok_m_02.iff') + templates.add('object/mobile/shared_dressed_ewok_m_03.iff') + templates.add('object/mobile/shared_dressed_ewok_m_04.iff') + templates.add('object/mobile/shared_dressed_ewok_m_05.iff') + templates.add('object/mobile/shared_dressed_ewok_m_06.iff') + templates.add('object/mobile/shared_dressed_ewok_m_07.iff') + templates.add('object/mobile/shared_dressed_ewok_m_08.iff') + templates.add('object/mobile/shared_dressed_ewok_m_09.iff') + templates.add('object/mobile/shared_dressed_ewok_m_10.iff') + templates.add('object/mobile/shared_dressed_ewok_m_11.iff') + templates.add('object/mobile/shared_dressed_ewok_m_12.iff') + + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('meleeHit') + mobileTemplate.setAttacks(attacks) + + lootPoolNames_1 = ['Junk'] + lootPoolChances_1 = [100] + lootGroupChance_1 = 65 + mobileTemplate.addToLootGroups(lootPoolNames_1,lootPoolChances_1,lootGroupChance_1) + + lootPoolNames_2 = ['random_loot_primitives'] + lootPoolChances_2 = [100] + lootGroupChance_2 = 35 + mobileTemplate.addToLootGroups(lootPoolNames_2,lootPoolChances_2,lootGroupChance_2) + + core.spawnService.addMobileTemplate('hardened_gondula_warrior', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/endor/hardened_jinda_warrior.py b/scripts/mobiles/endor/hardened_jinda_warrior.py new file mode 100644 index 00000000..e39a43c8 --- /dev/null +++ b/scripts/mobiles/endor/hardened_jinda_warrior.py @@ -0,0 +1,51 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('hardened_jinda_warrior') + mobileTemplate.setLevel(66) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(3) + mobileTemplate.setMaxSpawnDistance(5) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup('jinda tribe') + mobileTemplate.setAssistRange(1) + mobileTemplate.setOptionsBitmask(128) + mobileTemplate.setStalker(True) + + + templates = Vector() + templates.add('object/mobile/shared_jinda_male.iff') + templates.add('object/mobile/shared_jinda_female.iff') + + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('meleeHit') + mobileTemplate.setAttacks(attacks) + + lootPoolNames_1 = ['Junk'] + lootPoolChances_1 = [100] + lootGroupChance_1 = 65 + mobileTemplate.addToLootGroups(lootPoolNames_1,lootPoolChances_1,lootGroupChance_1) + + lootPoolNames_2 = ['random_loot_primitives'] + lootPoolChances_2 = [100] + lootGroupChance_2 = 35 + mobileTemplate.addToLootGroups(lootPoolNames_2,lootPoolChances_2,lootGroupChance_2) + + core.spawnService.addMobileTemplate('hardened_jinda_warrior', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/endor/hardened_panshee_warrior.py b/scripts/mobiles/endor/hardened_panshee_warrior.py new file mode 100644 index 00000000..40abb572 --- /dev/null +++ b/scripts/mobiles/endor/hardened_panshee_warrior.py @@ -0,0 +1,73 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('hardened_panshee_warrior') + mobileTemplate.setLevel(71) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(3) + mobileTemplate.setMaxSpawnDistance(5) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup('panshee tribe') + mobileTemplate.setAssistRange(1) + mobileTemplate.setOptionsBitmask(128) + mobileTemplate.setStalker(True) + + + templates = Vector() + templates.add('object/mobile/shared_dressed_ewok_f_01.iff') + templates.add('object/mobile/shared_dressed_ewok_f_02.iff') + templates.add('object/mobile/shared_dressed_ewok_f_03.iff') + templates.add('object/mobile/shared_dressed_ewok_f_04.iff') + templates.add('object/mobile/shared_dressed_ewok_f_05.iff') + templates.add('object/mobile/shared_dressed_ewok_f_06.iff') + templates.add('object/mobile/shared_dressed_ewok_f_07.iff') + templates.add('object/mobile/shared_dressed_ewok_f_08.iff') + templates.add('object/mobile/shared_dressed_ewok_f_09.iff') + templates.add('object/mobile/shared_dressed_ewok_f_10.iff') + templates.add('object/mobile/shared_dressed_ewok_f_11.iff') + templates.add('object/mobile/shared_dressed_ewok_f_12.iff') + templates.add('object/mobile/shared_dressed_ewok_m_01.iff') + templates.add('object/mobile/shared_dressed_ewok_m_02.iff') + templates.add('object/mobile/shared_dressed_ewok_m_03.iff') + templates.add('object/mobile/shared_dressed_ewok_m_04.iff') + templates.add('object/mobile/shared_dressed_ewok_m_05.iff') + templates.add('object/mobile/shared_dressed_ewok_m_06.iff') + templates.add('object/mobile/shared_dressed_ewok_m_07.iff') + templates.add('object/mobile/shared_dressed_ewok_m_08.iff') + templates.add('object/mobile/shared_dressed_ewok_m_09.iff') + templates.add('object/mobile/shared_dressed_ewok_m_10.iff') + templates.add('object/mobile/shared_dressed_ewok_m_11.iff') + templates.add('object/mobile/shared_dressed_ewok_m_12.iff') + + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('meleeHit') + mobileTemplate.setAttacks(attacks) + + lootPoolNames_1 = ['Junk'] + lootPoolChances_1 = [100] + lootGroupChance_1 = 65 + mobileTemplate.addToLootGroups(lootPoolNames_1,lootPoolChances_1,lootGroupChance_1) + + lootPoolNames_2 = ['random_loot_primitives'] + lootPoolChances_2 = [100] + lootGroupChance_2 = 35 + mobileTemplate.addToLootGroups(lootPoolNames_2,lootPoolChances_2,lootGroupChance_2) + + core.spawnService.addMobileTemplate('hardened_panshee_warrior', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/endor/highland_remmer.py b/scripts/mobiles/endor/highland_remmer.py new file mode 100644 index 00000000..d0bdd12b --- /dev/null +++ b/scripts/mobiles/endor/highland_remmer.py @@ -0,0 +1,39 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('highland_remmer') + mobileTemplate.setLevel(65) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(12) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("remmer") + mobileTemplate.setAssistRange(12) + mobileTemplate.setStalker(False) + mobileTemplate.setOptionsBitmask(192) + + templates = Vector() + templates.add('object/mobile/shared_remmer.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureSpitAttack') + mobileTemplate.setAttacks(attacks) + + + core.spawnService.addMobileTemplate('highland_remmer', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/endor/hilltop_gurreck_hunter.py b/scripts/mobiles/endor/hilltop_gurreck_hunter.py new file mode 100644 index 00000000..e09120a4 --- /dev/null +++ b/scripts/mobiles/endor/hilltop_gurreck_hunter.py @@ -0,0 +1,38 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('hilltop_gurreck_hunter') + mobileTemplate.setLevel(64) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("gurreck") + mobileTemplate.setAssistRange(12) + mobileTemplate.setStalker(False) + mobileTemplate.setOptionsBitmask(192) + + templates = Vector() + templates.add('object/mobile/shared_gurreck.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('hilltop_gurreck_hunter', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/endor/infuriated_roba_protector.py b/scripts/mobiles/endor/infuriated_roba_protector.py new file mode 100644 index 00000000..b4bed883 --- /dev/null +++ b/scripts/mobiles/endor/infuriated_roba_protector.py @@ -0,0 +1,38 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('roba_infuriated_protectorate') + mobileTemplate.setLevel(45) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(True) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("roba") + mobileTemplate.setAssistRange(12) + mobileTemplate.setStalker(False) + mobileTemplate.setOptionsBitmask(192) + + templates = Vector() + templates.add('object/mobile/shared_roba.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('infuriated_roba_protector', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/endor/insane_mantigrue_berserker.py b/scripts/mobiles/endor/insane_mantigrue_berserker.py new file mode 100644 index 00000000..eb9b8783 --- /dev/null +++ b/scripts/mobiles/endor/insane_mantigrue_berserker.py @@ -0,0 +1,38 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('mantigrue_insane_berserker') + mobileTemplate.setLevel(45) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(True) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("mantigrue") + mobileTemplate.setAssistRange(12) + mobileTemplate.setStalker(False) + mobileTemplate.setOptionsBitmask(192) + + templates = Vector() + templates.add('object/mobile/shared_condor_dragon.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('insane_mantigrue_berserker', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/endor/jinda_chief.py b/scripts/mobiles/endor/jinda_chief.py new file mode 100644 index 00000000..e8e1601c --- /dev/null +++ b/scripts/mobiles/endor/jinda_chief.py @@ -0,0 +1,51 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('jinda_chief') + mobileTemplate.setLevel(67) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(3) + mobileTemplate.setMaxSpawnDistance(5) + mobileTemplate.setDeathblow(True) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup('jinda tribe') + mobileTemplate.setAssistRange(12) + mobileTemplate.setOptionsBitmask(128) + mobileTemplate.setStalker(True) + + + templates = Vector() + templates.add('object/mobile/shared_jinda_male.iff') + templates.add('object/mobile/shared_jinda_female.iff') + + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('meleeHit') + mobileTemplate.setAttacks(attacks) + + lootPoolNames_1 = ['Junk'] + lootPoolChances_1 = [100] + lootGroupChance_1 = 65 + mobileTemplate.addToLootGroups(lootPoolNames_1,lootPoolChances_1,lootGroupChance_1) + + lootPoolNames_2 = ['random_loot_primitives'] + lootPoolChances_2 = [100] + lootGroupChance_2 = 35 + mobileTemplate.addToLootGroups(lootPoolNames_2,lootPoolChances_2,lootGroupChance_2) + + core.spawnService.addMobileTemplate('jinda_chief', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/endor/jinda_cub.py b/scripts/mobiles/endor/jinda_cub.py new file mode 100644 index 00000000..eaa8ae18 --- /dev/null +++ b/scripts/mobiles/endor/jinda_cub.py @@ -0,0 +1,51 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('jinda_cub') + mobileTemplate.setLevel(64) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(3) + mobileTemplate.setMaxSpawnDistance(5) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(.5) + mobileTemplate.setSocialGroup('jinda tribe') + mobileTemplate.setAssistRange(1) + mobileTemplate.setOptionsBitmask(128) + mobileTemplate.setStalker(True) + + + templates = Vector() + templates.add('object/mobile/shared_jinda_male.iff') + templates.add('object/mobile/shared_jinda_female.iff') + + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('meleeHit') + mobileTemplate.setAttacks(attacks) + + lootPoolNames_1 = ['Junk'] + lootPoolChances_1 = [100] + lootGroupChance_1 = 65 + mobileTemplate.addToLootGroups(lootPoolNames_1,lootPoolChances_1,lootGroupChance_1) + + lootPoolNames_2 = ['random_loot_primitives'] + lootPoolChances_2 = [100] + lootGroupChance_2 = 35 + mobileTemplate.addToLootGroups(lootPoolNames_2,lootPoolChances_2,lootGroupChance_2) + + core.spawnService.addMobileTemplate('jinda_cub', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/endor/jinda_elder.py b/scripts/mobiles/endor/jinda_elder.py new file mode 100644 index 00000000..5d4ae53f --- /dev/null +++ b/scripts/mobiles/endor/jinda_elder.py @@ -0,0 +1,51 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('jinda_elder') + mobileTemplate.setLevel(65) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(3) + mobileTemplate.setMaxSpawnDistance(5) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup('jinda tribe') + mobileTemplate.setAssistRange(1) + mobileTemplate.setOptionsBitmask(128) + mobileTemplate.setStalker(True) + + + templates = Vector() + templates.add('object/mobile/shared_jinda_male.iff') + templates.add('object/mobile/shared_jinda_female.iff') + + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('meleeHit') + mobileTemplate.setAttacks(attacks) + + lootPoolNames_1 = ['Junk'] + lootPoolChances_1 = [100] + lootGroupChance_1 = 65 + mobileTemplate.addToLootGroups(lootPoolNames_1,lootPoolChances_1,lootGroupChance_1) + + lootPoolNames_2 = ['random_loot_primitives'] + lootPoolChances_2 = [100] + lootGroupChance_2 = 35 + mobileTemplate.addToLootGroups(lootPoolNames_2,lootPoolChances_2,lootGroupChance_2) + + core.spawnService.addMobileTemplate('jinda_elder', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/endor/jinda_elder_worker.py b/scripts/mobiles/endor/jinda_elder_worker.py new file mode 100644 index 00000000..03601b2e --- /dev/null +++ b/scripts/mobiles/endor/jinda_elder_worker.py @@ -0,0 +1,51 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('jinda_elder_worker') + mobileTemplate.setLevel(65) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(3) + mobileTemplate.setMaxSpawnDistance(5) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup('jinda tribe') + mobileTemplate.setAssistRange(1) + mobileTemplate.setOptionsBitmask(128) + mobileTemplate.setStalker(True) + + + templates = Vector() + templates.add('object/mobile/shared_jinda_male.iff') + templates.add('object/mobile/shared_jinda_female.iff') + + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('meleeHit') + mobileTemplate.setAttacks(attacks) + + lootPoolNames_1 = ['Junk'] + lootPoolChances_1 = [100] + lootGroupChance_1 = 65 + mobileTemplate.addToLootGroups(lootPoolNames_1,lootPoolChances_1,lootGroupChance_1) + + lootPoolNames_2 = ['random_loot_primitives'] + lootPoolChances_2 = [100] + lootGroupChance_2 = 35 + mobileTemplate.addToLootGroups(lootPoolNames_2,lootPoolChances_2,lootGroupChance_2) + + core.spawnService.addMobileTemplate('jinda_elder_worker', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/endor/jinda_loremaster.py b/scripts/mobiles/endor/jinda_loremaster.py new file mode 100644 index 00000000..810838c2 --- /dev/null +++ b/scripts/mobiles/endor/jinda_loremaster.py @@ -0,0 +1,51 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('jinda_loremaster') + mobileTemplate.setLevel(64) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(3) + mobileTemplate.setMaxSpawnDistance(5) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup('jinda tribe') + mobileTemplate.setAssistRange(1) + mobileTemplate.setOptionsBitmask(128) + mobileTemplate.setStalker(True) + + + templates = Vector() + templates.add('object/mobile/shared_jinda_male.iff') + templates.add('object/mobile/shared_jinda_female.iff') + + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('meleeHit') + mobileTemplate.setAttacks(attacks) + + lootPoolNames_1 = ['Junk'] + lootPoolChances_1 = [100] + lootGroupChance_1 = 65 + mobileTemplate.addToLootGroups(lootPoolNames_1,lootPoolChances_1,lootGroupChance_1) + + lootPoolNames_2 = ['random_loot_primitives'] + lootPoolChances_2 = [100] + lootGroupChance_2 = 35 + mobileTemplate.addToLootGroups(lootPoolNames_2,lootPoolChances_2,lootGroupChance_2) + + core.spawnService.addMobileTemplate('jinda_loremaster', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/endor/jinda_matriarch.py b/scripts/mobiles/endor/jinda_matriarch.py new file mode 100644 index 00000000..9620e146 --- /dev/null +++ b/scripts/mobiles/endor/jinda_matriarch.py @@ -0,0 +1,51 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('jinda_matriarch') + mobileTemplate.setLevel(64) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(3) + mobileTemplate.setMaxSpawnDistance(5) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup('jinda tribe') + mobileTemplate.setAssistRange(1) + mobileTemplate.setOptionsBitmask(128) + mobileTemplate.setStalker(True) + + + templates = Vector() + templates.add('object/mobile/shared_jinda_male.iff') + templates.add('object/mobile/shared_jinda_female.iff') + + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('meleeHit') + mobileTemplate.setAttacks(attacks) + + lootPoolNames_1 = ['Junk'] + lootPoolChances_1 = [100] + lootGroupChance_1 = 65 + mobileTemplate.addToLootGroups(lootPoolNames_1,lootPoolChances_1,lootGroupChance_1) + + lootPoolNames_2 = ['random_loot_primitives'] + lootPoolChances_2 = [100] + lootGroupChance_2 = 35 + mobileTemplate.addToLootGroups(lootPoolNames_2,lootPoolChances_2,lootGroupChance_2) + + core.spawnService.addMobileTemplate('jinda_matriarch', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/endor/jinda_outcast.py b/scripts/mobiles/endor/jinda_outcast.py new file mode 100644 index 00000000..3528c30a --- /dev/null +++ b/scripts/mobiles/endor/jinda_outcast.py @@ -0,0 +1,50 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('jinda_outcast') + mobileTemplate.setLevel(63) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(3) + mobileTemplate.setMaxSpawnDistance(5) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup('jinda tribe') + mobileTemplate.setAssistRange(1) + mobileTemplate.setOptionsBitmask(128) + mobileTemplate.setStalker(True) + + templates = Vector() + templates.add('object/mobile/shared_jinda_male.iff') + templates.add('object/mobile/shared_jinda_female.iff') + + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('meleeHit') + mobileTemplate.setAttacks(attacks) + + lootPoolNames_1 = ['Junk'] + lootPoolChances_1 = [100] + lootGroupChance_1 = 65 + mobileTemplate.addToLootGroups(lootPoolNames_1,lootPoolChances_1,lootGroupChance_1) + + lootPoolNames_2 = ['random_loot_primitives'] + lootPoolChances_2 = [100] + lootGroupChance_2 = 35 + mobileTemplate.addToLootGroups(lootPoolNames_2,lootPoolChances_2,lootGroupChance_2) + + core.spawnService.addMobileTemplate('jinda_outcast', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/endor/jinda_ritualist.py b/scripts/mobiles/endor/jinda_ritualist.py new file mode 100644 index 00000000..30d49c4e --- /dev/null +++ b/scripts/mobiles/endor/jinda_ritualist.py @@ -0,0 +1,51 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('jinda_ritualist') + mobileTemplate.setLevel(66) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(3) + mobileTemplate.setMaxSpawnDistance(5) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup('jinda tribe') + mobileTemplate.setAssistRange(1) + mobileTemplate.setOptionsBitmask(128) + mobileTemplate.setStalker(True) + + + templates = Vector() + templates.add('object/mobile/shared_jinda_male.iff') + templates.add('object/mobile/shared_jinda_female.iff') + + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('meleeHit') + mobileTemplate.setAttacks(attacks) + + lootPoolNames_1 = ['Junk'] + lootPoolChances_1 = [100] + lootGroupChance_1 = 65 + mobileTemplate.addToLootGroups(lootPoolNames_1,lootPoolChances_1,lootGroupChance_1) + + lootPoolNames_2 = ['random_loot_primitives'] + lootPoolChances_2 = [100] + lootGroupChance_2 = 35 + mobileTemplate.addToLootGroups(lootPoolNames_2,lootPoolChances_2,lootGroupChance_2) + + core.spawnService.addMobileTemplate('jinda_ritualist', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/endor/jinda_shaman.py b/scripts/mobiles/endor/jinda_shaman.py new file mode 100644 index 00000000..577a1717 --- /dev/null +++ b/scripts/mobiles/endor/jinda_shaman.py @@ -0,0 +1,51 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('jinda_shaman') + mobileTemplate.setLevel(67) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(3) + mobileTemplate.setMaxSpawnDistance(5) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup('jinda tribe') + mobileTemplate.setAssistRange(1) + mobileTemplate.setOptionsBitmask(128) + mobileTemplate.setStalker(True) + + + templates = Vector() + templates.add('object/mobile/shared_jinda_male.iff') + templates.add('object/mobile/shared_jinda_female.iff') + + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('meleeHit') + mobileTemplate.setAttacks(attacks) + + lootPoolNames_1 = ['Junk'] + lootPoolChances_1 = [100] + lootGroupChance_1 = 65 + mobileTemplate.addToLootGroups(lootPoolNames_1,lootPoolChances_1,lootGroupChance_1) + + lootPoolNames_2 = ['random_loot_primitives'] + lootPoolChances_2 = [100] + lootGroupChance_2 = 35 + mobileTemplate.addToLootGroups(lootPoolNames_2,lootPoolChances_2,lootGroupChance_2) + + core.spawnService.addMobileTemplate('jinda_shaman', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/endor/jinda_tribesman.py b/scripts/mobiles/endor/jinda_tribesman.py new file mode 100644 index 00000000..f854065f --- /dev/null +++ b/scripts/mobiles/endor/jinda_tribesman.py @@ -0,0 +1,51 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('jinda_tribesman') + mobileTemplate.setLevel(66) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(3) + mobileTemplate.setMaxSpawnDistance(5) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup('jinda tribe') + mobileTemplate.setAssistRange(1) + mobileTemplate.setOptionsBitmask(128) + mobileTemplate.setStalker(True) + + + templates = Vector() + templates.add('object/mobile/shared_jinda_male.iff') + templates.add('object/mobile/shared_jinda_female.iff') + + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('meleeHit') + mobileTemplate.setAttacks(attacks) + + lootPoolNames_1 = ['Junk'] + lootPoolChances_1 = [100] + lootGroupChance_1 = 65 + mobileTemplate.addToLootGroups(lootPoolNames_1,lootPoolChances_1,lootGroupChance_1) + + lootPoolNames_2 = ['random_loot_primitives'] + lootPoolChances_2 = [100] + lootGroupChance_2 = 35 + mobileTemplate.addToLootGroups(lootPoolNames_2,lootPoolChances_2,lootGroupChance_2) + + core.spawnService.addMobileTemplate('jinda_tribesman', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/endor/jinda_veteran.py b/scripts/mobiles/endor/jinda_veteran.py new file mode 100644 index 00000000..c1f06564 --- /dev/null +++ b/scripts/mobiles/endor/jinda_veteran.py @@ -0,0 +1,51 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('jinda_veteran') + mobileTemplate.setLevel(68) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(3) + mobileTemplate.setMaxSpawnDistance(5) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup('jinda tribe') + mobileTemplate.setAssistRange(1) + mobileTemplate.setOptionsBitmask(128) + mobileTemplate.setStalker(True) + + + templates = Vector() + templates.add('object/mobile/shared_jinda_male.iff') + templates.add('object/mobile/shared_jinda_female.iff') + + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('meleeHit') + mobileTemplate.setAttacks(attacks) + + lootPoolNames_1 = ['Junk'] + lootPoolChances_1 = [100] + lootGroupChance_1 = 65 + mobileTemplate.addToLootGroups(lootPoolNames_1,lootPoolChances_1,lootGroupChance_1) + + lootPoolNames_2 = ['random_loot_primitives'] + lootPoolChances_2 = [100] + lootGroupChance_2 = 35 + mobileTemplate.addToLootGroups(lootPoolNames_2,lootPoolChances_2,lootGroupChance_2) + + core.spawnService.addMobileTemplate('jinda_veteran', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/endor/jinda_warrior.py b/scripts/mobiles/endor/jinda_warrior.py new file mode 100644 index 00000000..d11207ad --- /dev/null +++ b/scripts/mobiles/endor/jinda_warrior.py @@ -0,0 +1,51 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('jinda_warrior') + mobileTemplate.setLevel(67) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(3) + mobileTemplate.setMaxSpawnDistance(5) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup('jinda tribe') + mobileTemplate.setAssistRange(1) + mobileTemplate.setOptionsBitmask(128) + mobileTemplate.setStalker(True) + + + templates = Vector() + templates.add('object/mobile/shared_jinda_male.iff') + templates.add('object/mobile/shared_jinda_female.iff') + + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('meleeHit') + mobileTemplate.setAttacks(attacks) + + lootPoolNames_1 = ['Junk'] + lootPoolChances_1 = [100] + lootGroupChance_1 = 65 + mobileTemplate.addToLootGroups(lootPoolNames_1,lootPoolChances_1,lootGroupChance_1) + + lootPoolNames_2 = ['random_loot_primitives'] + lootPoolChances_2 = [100] + lootGroupChance_2 = 35 + mobileTemplate.addToLootGroups(lootPoolNames_2,lootPoolChances_2,lootGroupChance_2) + + core.spawnService.addMobileTemplate('jinda_warrior', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/endor/jinda_worker.py b/scripts/mobiles/endor/jinda_worker.py new file mode 100644 index 00000000..14191b38 --- /dev/null +++ b/scripts/mobiles/endor/jinda_worker.py @@ -0,0 +1,51 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('jinda_worker') + mobileTemplate.setLevel(64) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(3) + mobileTemplate.setMaxSpawnDistance(5) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup('jinda tribe') + mobileTemplate.setAssistRange(1) + mobileTemplate.setOptionsBitmask(128) + mobileTemplate.setStalker(True) + + + templates = Vector() + templates.add('object/mobile/shared_jinda_male.iff') + templates.add('object/mobile/shared_jinda_female.iff') + + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('meleeHit') + mobileTemplate.setAttacks(attacks) + + lootPoolNames_1 = ['Junk'] + lootPoolChances_1 = [100] + lootGroupChance_1 = 65 + mobileTemplate.addToLootGroups(lootPoolNames_1,lootPoolChances_1,lootGroupChance_1) + + lootPoolNames_2 = ['random_loot_primitives'] + lootPoolChances_2 = [100] + lootGroupChance_2 = 35 + mobileTemplate.addToLootGroups(lootPoolNames_2,lootPoolChances_2,lootGroupChance_2) + + core.spawnService.addMobileTemplate('jinda_worker', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/endor/king_merek_harvester.py b/scripts/mobiles/endor/king_merek_harvester.py new file mode 100644 index 00000000..3b86a0af --- /dev/null +++ b/scripts/mobiles/endor/king_merek_harvester.py @@ -0,0 +1,40 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('king_merek_harvester') + mobileTemplate.setLevel(64) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(12) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(True) + mobileTemplate.setScale(1.2) + mobileTemplate.setHideType("Leathery Hide") + mobileTemplate.setHideAmount(50) + mobileTemplate.setSocialGroup("merek") + mobileTemplate.setAssistRange(12) + mobileTemplate.setStalker(False) + mobileTemplate.setOptionsBitmask(192) + + templates = Vector() + templates.add('object/mobile/shared_merek.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureRangedAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('king_merek_harvester', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/endor/korga_adept.py b/scripts/mobiles/endor/korga_adept.py new file mode 100644 index 00000000..702e1ea2 --- /dev/null +++ b/scripts/mobiles/endor/korga_adept.py @@ -0,0 +1,49 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('korga_adept') + mobileTemplate.setLevel(74) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(3) + mobileTemplate.setMaxSpawnDistance(5) + mobileTemplate.setDeathblow(True) + mobileTemplate.setSocialGroup('korga tribe') + mobileTemplate.setAssistRange(12) + mobileTemplate.setOptionsBitmask(192) + mobileTemplate.setStalker(True) + + + templates = Vector() + templates.add('object/mobile/shared_dulok_male.iff') + templates.add('object/mobile/shared_dulok_female.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('meleeHit') + mobileTemplate.setAttacks(attacks) + + lootPoolNames_1 = ['Junk'] + lootPoolChances_1 = [100] + lootGroupChance_1 = 65 + mobileTemplate.addToLootGroups(lootPoolNames_1,lootPoolChances_1,lootGroupChance_1) + + lootPoolNames_2 = ['random_loot_primitives'] + lootPoolChances_2 = [100] + lootGroupChance_2 = 35 + mobileTemplate.addToLootGroups(lootPoolNames_2,lootPoolChances_2,lootGroupChance_2) + + core.spawnService.addMobileTemplate('korga_adept', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/endor/korga_ancient.py b/scripts/mobiles/endor/korga_ancient.py new file mode 100644 index 00000000..bd7587de --- /dev/null +++ b/scripts/mobiles/endor/korga_ancient.py @@ -0,0 +1,49 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('korga_ancient') + mobileTemplate.setLevel(77) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(3) + mobileTemplate.setMaxSpawnDistance(5) + mobileTemplate.setDeathblow(True) + mobileTemplate.setSocialGroup('korga tribe') + mobileTemplate.setAssistRange(12) + mobileTemplate.setOptionsBitmask(192) + mobileTemplate.setStalker(True) + + + templates = Vector() + templates.add('object/mobile/shared_dulok_male.iff') + templates.add('object/mobile/shared_dulok_female.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('meleeHit') + mobileTemplate.setAttacks(attacks) + + lootPoolNames_1 = ['Junk'] + lootPoolChances_1 = [100] + lootGroupChance_1 = 65 + mobileTemplate.addToLootGroups(lootPoolNames_1,lootPoolChances_1,lootGroupChance_1) + + lootPoolNames_2 = ['random_loot_primitives'] + lootPoolChances_2 = [100] + lootGroupChance_2 = 35 + mobileTemplate.addToLootGroups(lootPoolNames_2,lootPoolChances_2,lootGroupChance_2) + + core.spawnService.addMobileTemplate('korga_ancient', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/endor/korga_battlelord.py b/scripts/mobiles/endor/korga_battlelord.py new file mode 100644 index 00000000..e4090f3c --- /dev/null +++ b/scripts/mobiles/endor/korga_battlelord.py @@ -0,0 +1,49 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('korga_battlelord') + mobileTemplate.setLevel(77) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(3) + mobileTemplate.setMaxSpawnDistance(5) + mobileTemplate.setDeathblow(True) + mobileTemplate.setSocialGroup('korga tribe') + mobileTemplate.setAssistRange(12) + mobileTemplate.setOptionsBitmask(192) + mobileTemplate.setStalker(True) + + + templates = Vector() + templates.add('object/mobile/shared_dulok_male.iff') + templates.add('object/mobile/shared_dulok_female.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('meleeHit') + mobileTemplate.setAttacks(attacks) + + lootPoolNames_1 = ['Junk'] + lootPoolChances_1 = [100] + lootGroupChance_1 = 65 + mobileTemplate.addToLootGroups(lootPoolNames_1,lootPoolChances_1,lootGroupChance_1) + + lootPoolNames_2 = ['random_loot_primitives'] + lootPoolChances_2 = [100] + lootGroupChance_2 = 35 + mobileTemplate.addToLootGroups(lootPoolNames_2,lootPoolChances_2,lootGroupChance_2) + + core.spawnService.addMobileTemplate('korga_battlelord', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/endor/korga_chieftan.py b/scripts/mobiles/endor/korga_chieftan.py new file mode 100644 index 00000000..5e711248 --- /dev/null +++ b/scripts/mobiles/endor/korga_chieftan.py @@ -0,0 +1,49 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('korga_chieftan') + mobileTemplate.setLevel(78) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(3) + mobileTemplate.setMaxSpawnDistance(5) + mobileTemplate.setDeathblow(True) + mobileTemplate.setSocialGroup('korga tribe') + mobileTemplate.setAssistRange(12) + mobileTemplate.setOptionsBitmask(192) + mobileTemplate.setStalker(True) + + + templates = Vector() + templates.add('object/mobile/shared_dulok_male.iff') + templates.add('object/mobile/shared_dulok_female.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('meleeHit') + mobileTemplate.setAttacks(attacks) + + lootPoolNames_1 = ['Junk'] + lootPoolChances_1 = [100] + lootGroupChance_1 = 65 + mobileTemplate.addToLootGroups(lootPoolNames_1,lootPoolChances_1,lootGroupChance_1) + + lootPoolNames_2 = ['random_loot_primitives'] + lootPoolChances_2 = [100] + lootGroupChance_2 = 35 + mobileTemplate.addToLootGroups(lootPoolNames_2,lootPoolChances_2,lootGroupChance_2) + + core.spawnService.addMobileTemplate('korga_chieftan', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/endor/korga_cub.py b/scripts/mobiles/endor/korga_cub.py new file mode 100644 index 00000000..df2f9b32 --- /dev/null +++ b/scripts/mobiles/endor/korga_cub.py @@ -0,0 +1,50 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('korga_cub') + mobileTemplate.setLevel(74) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(3) + mobileTemplate.setMaxSpawnDistance(5) + mobileTemplate.setDeathblow(True) + mobileTemplate.setScale(.5) + mobileTemplate.setSocialGroup('korga tribe') + mobileTemplate.setAssistRange(12) + mobileTemplate.setOptionsBitmask(128) + mobileTemplate.setStalker(False) + + + templates = Vector() + templates.add('object/mobile/shared_dulok_male.iff') + templates.add('object/mobile/shared_dulok_female.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('meleeHit') + mobileTemplate.setAttacks(attacks) + + lootPoolNames_1 = ['Junk'] + lootPoolChances_1 = [100] + lootGroupChance_1 = 65 + mobileTemplate.addToLootGroups(lootPoolNames_1,lootPoolChances_1,lootGroupChance_1) + + lootPoolNames_2 = ['random_loot_primitives'] + lootPoolChances_2 = [100] + lootGroupChance_2 = 35 + mobileTemplate.addToLootGroups(lootPoolNames_2,lootPoolChances_2,lootGroupChance_2) + + core.spawnService.addMobileTemplate('korga_cub', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/endor/korga_dark_shaman.py b/scripts/mobiles/endor/korga_dark_shaman.py new file mode 100644 index 00000000..993bdc02 --- /dev/null +++ b/scripts/mobiles/endor/korga_dark_shaman.py @@ -0,0 +1,49 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('korga_dark_shaman') + mobileTemplate.setLevel(76) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(3) + mobileTemplate.setMaxSpawnDistance(5) + mobileTemplate.setDeathblow(True) + mobileTemplate.setSocialGroup('korga tribe') + mobileTemplate.setAssistRange(12) + mobileTemplate.setOptionsBitmask(192) + mobileTemplate.setStalker(True) + + + templates = Vector() + templates.add('object/mobile/shared_dulok_male.iff') + templates.add('object/mobile/shared_dulok_female.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('meleeHit') + mobileTemplate.setAttacks(attacks) + + lootPoolNames_1 = ['Junk'] + lootPoolChances_1 = [100] + lootGroupChance_1 = 65 + mobileTemplate.addToLootGroups(lootPoolNames_1,lootPoolChances_1,lootGroupChance_1) + + lootPoolNames_2 = ['random_loot_primitives'] + lootPoolChances_2 = [100] + lootGroupChance_2 = 35 + mobileTemplate.addToLootGroups(lootPoolNames_2,lootPoolChances_2,lootGroupChance_2) + + core.spawnService.addMobileTemplate('korga_dark_shaman', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/endor/korga_elder.py b/scripts/mobiles/endor/korga_elder.py new file mode 100644 index 00000000..3cf74376 --- /dev/null +++ b/scripts/mobiles/endor/korga_elder.py @@ -0,0 +1,49 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('korga_elder') + mobileTemplate.setLevel(78) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(3) + mobileTemplate.setMaxSpawnDistance(5) + mobileTemplate.setDeathblow(True) + mobileTemplate.setSocialGroup('korga tribe') + mobileTemplate.setAssistRange(12) + mobileTemplate.setOptionsBitmask(192) + mobileTemplate.setStalker(True) + + + templates = Vector() + templates.add('object/mobile/shared_dulok_male.iff') + templates.add('object/mobile/shared_dulok_female.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('meleeHit') + mobileTemplate.setAttacks(attacks) + + lootPoolNames_1 = ['Junk'] + lootPoolChances_1 = [100] + lootGroupChance_1 = 65 + mobileTemplate.addToLootGroups(lootPoolNames_1,lootPoolChances_1,lootGroupChance_1) + + lootPoolNames_2 = ['random_loot_primitives'] + lootPoolChances_2 = [100] + lootGroupChance_2 = 35 + mobileTemplate.addToLootGroups(lootPoolNames_2,lootPoolChances_2,lootGroupChance_2) + + core.spawnService.addMobileTemplate('korga_elder', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/endor/korga_laborer.py b/scripts/mobiles/endor/korga_laborer.py new file mode 100644 index 00000000..f072bd12 --- /dev/null +++ b/scripts/mobiles/endor/korga_laborer.py @@ -0,0 +1,49 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('korga_laborer') + mobileTemplate.setLevel(74) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(3) + mobileTemplate.setMaxSpawnDistance(5) + mobileTemplate.setDeathblow(True) + mobileTemplate.setSocialGroup('korga tribe') + mobileTemplate.setAssistRange(12) + mobileTemplate.setOptionsBitmask(192) + mobileTemplate.setStalker(True) + + + templates = Vector() + templates.add('object/mobile/shared_dulok_male.iff') + templates.add('object/mobile/shared_dulok_female.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('meleeHit') + mobileTemplate.setAttacks(attacks) + + lootPoolNames_1 = ['Junk'] + lootPoolChances_1 = [100] + lootGroupChance_1 = 65 + mobileTemplate.addToLootGroups(lootPoolNames_1,lootPoolChances_1,lootGroupChance_1) + + lootPoolNames_2 = ['random_loot_primitives'] + lootPoolChances_2 = [100] + lootGroupChance_2 = 35 + mobileTemplate.addToLootGroups(lootPoolNames_2,lootPoolChances_2,lootGroupChance_2) + + core.spawnService.addMobileTemplate('korga_laborer', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/endor/korga_scout.py b/scripts/mobiles/endor/korga_scout.py new file mode 100644 index 00000000..9b9451a9 --- /dev/null +++ b/scripts/mobiles/endor/korga_scout.py @@ -0,0 +1,49 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('korga_scout') + mobileTemplate.setLevel(76) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(3) + mobileTemplate.setMaxSpawnDistance(5) + mobileTemplate.setDeathblow(True) + mobileTemplate.setSocialGroup('korga tribe') + mobileTemplate.setAssistRange(12) + mobileTemplate.setOptionsBitmask(192) + mobileTemplate.setStalker(True) + + + templates = Vector() + templates.add('object/mobile/shared_dulok_male.iff') + templates.add('object/mobile/shared_dulok_female.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('meleeHit') + mobileTemplate.setAttacks(attacks) + + lootPoolNames_1 = ['Junk'] + lootPoolChances_1 = [100] + lootGroupChance_1 = 65 + mobileTemplate.addToLootGroups(lootPoolNames_1,lootPoolChances_1,lootGroupChance_1) + + lootPoolNames_2 = ['random_loot_primitives'] + lootPoolChances_2 = [100] + lootGroupChance_2 = 35 + mobileTemplate.addToLootGroups(lootPoolNames_2,lootPoolChances_2,lootGroupChance_2) + + core.spawnService.addMobileTemplate('korga_scout', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/endor/korga_spiritmaster.py b/scripts/mobiles/endor/korga_spiritmaster.py new file mode 100644 index 00000000..24809a74 --- /dev/null +++ b/scripts/mobiles/endor/korga_spiritmaster.py @@ -0,0 +1,49 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('korga_spiritmaster') + mobileTemplate.setLevel(77) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(3) + mobileTemplate.setMaxSpawnDistance(5) + mobileTemplate.setDeathblow(True) + mobileTemplate.setSocialGroup('korga tribe') + mobileTemplate.setAssistRange(12) + mobileTemplate.setOptionsBitmask(192) + mobileTemplate.setStalker(True) + + + templates = Vector() + templates.add('object/mobile/shared_dulok_male.iff') + templates.add('object/mobile/shared_dulok_female.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('meleeHit') + mobileTemplate.setAttacks(attacks) + + lootPoolNames_1 = ['Junk'] + lootPoolChances_1 = [100] + lootGroupChance_1 = 65 + mobileTemplate.addToLootGroups(lootPoolNames_1,lootPoolChances_1,lootGroupChance_1) + + lootPoolNames_2 = ['random_loot_primitives'] + lootPoolChances_2 = [100] + lootGroupChance_2 = 35 + mobileTemplate.addToLootGroups(lootPoolNames_2,lootPoolChances_2,lootGroupChance_2) + + core.spawnService.addMobileTemplate('korga_spiritmaster', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/endor/lantern_bird.py b/scripts/mobiles/endor/lantern_bird.py new file mode 100644 index 00000000..b41a66ca --- /dev/null +++ b/scripts/mobiles/endor/lantern_bird.py @@ -0,0 +1,42 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('lantern_bird') + mobileTemplate.setLevel(60) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setHideType("Leathery Hide") + mobileTemplate.setHideAmount(41) + mobileTemplate.setBoneType("Avian Bones") + mobileTemplate.setBoneAmount(46) + mobileTemplate.setSocialGroup("lantern") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(False) + mobileTemplate.setOptionsBitmask(128) + + templates = Vector() + templates.add('object/mobile/shared_lantern_bird.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('lantern_bird', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/endor/lice_ridden_remmer_queen.py b/scripts/mobiles/endor/lice_ridden_remmer_queen.py new file mode 100644 index 00000000..eeb24160 --- /dev/null +++ b/scripts/mobiles/endor/lice_ridden_remmer_queen.py @@ -0,0 +1,38 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('lice_ridden_remmer_queen') + mobileTemplate.setLevel(60) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1.2) + mobileTemplate.setSocialGroup("remmer") + mobileTemplate.setAssistRange(12) + mobileTemplate.setStalker(False) + mobileTemplate.setOptionsBitmask(192) + + templates = Vector() + templates.add('object/mobile/shared_remmer.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureSpitAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('lice_ridden_remmer_queen', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/endor/mantigrue_hunter.py b/scripts/mobiles/endor/mantigrue_hunter.py new file mode 100644 index 00000000..d4ddd9bf --- /dev/null +++ b/scripts/mobiles/endor/mantigrue_hunter.py @@ -0,0 +1,38 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('mantigrue_hunter') + mobileTemplate.setLevel(71) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("mantigrue") + mobileTemplate.setAssistRange(12) + mobileTemplate.setStalker(False) + mobileTemplate.setOptionsBitmask(192) + + templates = Vector() + templates.add('object/mobile/shared_condor_dragon.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('mantigrue_hunter', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/endor/mantigrue_night_stalker.py b/scripts/mobiles/endor/mantigrue_night_stalker.py new file mode 100644 index 00000000..af37154e --- /dev/null +++ b/scripts/mobiles/endor/mantigrue_night_stalker.py @@ -0,0 +1,38 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('mantigrue_night_stalker') + mobileTemplate.setLevel(71) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(12) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(True) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("mantigrue") + mobileTemplate.setAssistRange(12) + mobileTemplate.setStalker(False) + mobileTemplate.setOptionsBitmask(192) + + templates = Vector() + templates.add('object/mobile/shared_condor_dragon.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureRangedAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('mantigrue_night_stalker', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/endor/mantigrue_reaper.py b/scripts/mobiles/endor/mantigrue_reaper.py new file mode 100644 index 00000000..32049433 --- /dev/null +++ b/scripts/mobiles/endor/mantigrue_reaper.py @@ -0,0 +1,38 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('mantigrue_reaper') + mobileTemplate.setLevel(72) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(12) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("mantigrue") + mobileTemplate.setAssistRange(12) + mobileTemplate.setStalker(False) + mobileTemplate.setOptionsBitmask(192) + + templates = Vector() + templates.add('object/mobile/shared_condor_dragon.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureRangedAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('mantigrue_reaper', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/endor/mantigrue_screecher.py b/scripts/mobiles/endor/mantigrue_screecher.py new file mode 100644 index 00000000..18f2de92 --- /dev/null +++ b/scripts/mobiles/endor/mantigrue_screecher.py @@ -0,0 +1,38 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('mantigrue_screecher') + mobileTemplate.setLevel(64) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(.8) + mobileTemplate.setSocialGroup("mantigrue") + mobileTemplate.setAssistRange(12) + mobileTemplate.setStalker(False) + mobileTemplate.setOptionsBitmask(192) + + templates = Vector() + templates.add('object/mobile/shared_condor_dragon.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('mantigrue_screecher', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/endor/marauder.py b/scripts/mobiles/endor/marauder.py new file mode 100644 index 00000000..0107c297 --- /dev/null +++ b/scripts/mobiles/endor/marauder.py @@ -0,0 +1,45 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('marauder') + mobileTemplate.setLevel(78) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(1) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(True) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("marauder") + mobileTemplate.setAssistRange(12) + mobileTemplate.setStalker(False) + mobileTemplate.setOptionsBitmask(192) + + templates = Vector() + templates.add('object/mobile/shared_marauder_male_01.iff') + templates.add('object/mobile/shared_marauder_male_02.iff') + templates.add('object/mobile/shared_marauder_male_02.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/rifle/shared_rifle_e11.iff', 1, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedshot') + mobileTemplate.setAttacks(attacks) + + lootPoolNames_1 = ['Junk'] + lootPoolChances_1 = [100] + lootGroupChance_1 = 100 + mobileTemplate.addToLootGroups(lootPoolNames_1,lootPoolChances_1,lootGroupChance_1) + + core.spawnService.addMobileTemplate('marauder', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/endor/masterful_ewok_warrior.py b/scripts/mobiles/endor/masterful_ewok_warrior.py new file mode 100644 index 00000000..69b458f5 --- /dev/null +++ b/scripts/mobiles/endor/masterful_ewok_warrior.py @@ -0,0 +1,73 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('masterful_ewok_warrior') + mobileTemplate.setLevel(78) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(3) + mobileTemplate.setMaxSpawnDistance(5) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup('gondula tribe') + mobileTemplate.setAssistRange(1) + mobileTemplate.setOptionsBitmask(128) + mobileTemplate.setStalker(True) + + + templates = Vector() + templates.add('object/mobile/shared_dressed_ewok_f_01.iff') + templates.add('object/mobile/shared_dressed_ewok_f_02.iff') + templates.add('object/mobile/shared_dressed_ewok_f_03.iff') + templates.add('object/mobile/shared_dressed_ewok_f_04.iff') + templates.add('object/mobile/shared_dressed_ewok_f_05.iff') + templates.add('object/mobile/shared_dressed_ewok_f_06.iff') + templates.add('object/mobile/shared_dressed_ewok_f_07.iff') + templates.add('object/mobile/shared_dressed_ewok_f_08.iff') + templates.add('object/mobile/shared_dressed_ewok_f_09.iff') + templates.add('object/mobile/shared_dressed_ewok_f_10.iff') + templates.add('object/mobile/shared_dressed_ewok_f_11.iff') + templates.add('object/mobile/shared_dressed_ewok_f_12.iff') + templates.add('object/mobile/shared_dressed_ewok_m_01.iff') + templates.add('object/mobile/shared_dressed_ewok_m_02.iff') + templates.add('object/mobile/shared_dressed_ewok_m_03.iff') + templates.add('object/mobile/shared_dressed_ewok_m_04.iff') + templates.add('object/mobile/shared_dressed_ewok_m_05.iff') + templates.add('object/mobile/shared_dressed_ewok_m_06.iff') + templates.add('object/mobile/shared_dressed_ewok_m_07.iff') + templates.add('object/mobile/shared_dressed_ewok_m_08.iff') + templates.add('object/mobile/shared_dressed_ewok_m_09.iff') + templates.add('object/mobile/shared_dressed_ewok_m_10.iff') + templates.add('object/mobile/shared_dressed_ewok_m_11.iff') + templates.add('object/mobile/shared_dressed_ewok_m_12.iff') + + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('meleeHit') + mobileTemplate.setAttacks(attacks) + + lootPoolNames_1 = ['Junk'] + lootPoolChances_1 = [100] + lootGroupChance_1 = 65 + mobileTemplate.addToLootGroups(lootPoolNames_1,lootPoolChances_1,lootGroupChance_1) + + lootPoolNames_2 = ['random_loot_primitives'] + lootPoolChances_2 = [100] + lootGroupChance_2 = 35 + mobileTemplate.addToLootGroups(lootPoolNames_2,lootPoolChances_2,lootGroupChance_2) + + core.spawnService.addMobileTemplate('masterful_ewok_warrior', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/endor/masterful_jinda_warrior.py b/scripts/mobiles/endor/masterful_jinda_warrior.py new file mode 100644 index 00000000..e3f54bdc --- /dev/null +++ b/scripts/mobiles/endor/masterful_jinda_warrior.py @@ -0,0 +1,51 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('masterful_jinda_warrior') + mobileTemplate.setLevel(66) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(3) + mobileTemplate.setMaxSpawnDistance(5) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup('jinda tribe') + mobileTemplate.setAssistRange(1) + mobileTemplate.setOptionsBitmask(128) + mobileTemplate.setStalker(True) + + + templates = Vector() + templates.add('object/mobile/shared_jinda_male.iff') + templates.add('object/mobile/shared_jinda_female.iff') + + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('meleeHit') + mobileTemplate.setAttacks(attacks) + + lootPoolNames_1 = ['Junk'] + lootPoolChances_1 = [100] + lootGroupChance_1 = 65 + mobileTemplate.addToLootGroups(lootPoolNames_1,lootPoolChances_1,lootGroupChance_1) + + lootPoolNames_2 = ['random_loot_primitives'] + lootPoolChances_2 = [100] + lootGroupChance_2 = 35 + mobileTemplate.addToLootGroups(lootPoolNames_2,lootPoolChances_2,lootGroupChance_2) + + core.spawnService.addMobileTemplate('masterful_jinda_warrior', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/endor/masterful_panshee_warrior.py b/scripts/mobiles/endor/masterful_panshee_warrior.py new file mode 100644 index 00000000..ca78aa51 --- /dev/null +++ b/scripts/mobiles/endor/masterful_panshee_warrior.py @@ -0,0 +1,73 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('masterful_panshee_warrior') + mobileTemplate.setLevel(71) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(3) + mobileTemplate.setMaxSpawnDistance(5) + mobileTemplate.setDeathblow(True) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup('panshee tribe') + mobileTemplate.setAssistRange(1) + mobileTemplate.setOptionsBitmask(128) + mobileTemplate.setStalker(True) + + + templates = Vector() + templates.add('object/mobile/shared_dressed_ewok_f_01.iff') + templates.add('object/mobile/shared_dressed_ewok_f_02.iff') + templates.add('object/mobile/shared_dressed_ewok_f_03.iff') + templates.add('object/mobile/shared_dressed_ewok_f_04.iff') + templates.add('object/mobile/shared_dressed_ewok_f_05.iff') + templates.add('object/mobile/shared_dressed_ewok_f_06.iff') + templates.add('object/mobile/shared_dressed_ewok_f_07.iff') + templates.add('object/mobile/shared_dressed_ewok_f_08.iff') + templates.add('object/mobile/shared_dressed_ewok_f_09.iff') + templates.add('object/mobile/shared_dressed_ewok_f_10.iff') + templates.add('object/mobile/shared_dressed_ewok_f_11.iff') + templates.add('object/mobile/shared_dressed_ewok_f_12.iff') + templates.add('object/mobile/shared_dressed_ewok_m_01.iff') + templates.add('object/mobile/shared_dressed_ewok_m_02.iff') + templates.add('object/mobile/shared_dressed_ewok_m_03.iff') + templates.add('object/mobile/shared_dressed_ewok_m_04.iff') + templates.add('object/mobile/shared_dressed_ewok_m_05.iff') + templates.add('object/mobile/shared_dressed_ewok_m_06.iff') + templates.add('object/mobile/shared_dressed_ewok_m_07.iff') + templates.add('object/mobile/shared_dressed_ewok_m_08.iff') + templates.add('object/mobile/shared_dressed_ewok_m_09.iff') + templates.add('object/mobile/shared_dressed_ewok_m_10.iff') + templates.add('object/mobile/shared_dressed_ewok_m_11.iff') + templates.add('object/mobile/shared_dressed_ewok_m_12.iff') + + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('meleeHit') + mobileTemplate.setAttacks(attacks) + + lootPoolNames_1 = ['Junk'] + lootPoolChances_1 = [100] + lootGroupChance_1 = 65 + mobileTemplate.addToLootGroups(lootPoolNames_1,lootPoolChances_1,lootGroupChance_1) + + lootPoolNames_2 = ['random_loot_primitives'] + lootPoolChances_2 = [100] + lootGroupChance_2 = 35 + mobileTemplate.addToLootGroups(lootPoolNames_2,lootPoolChances_2,lootGroupChance_2) + + core.spawnService.addMobileTemplate('masterful_panshee_warrior', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/endor/mature_hanadak.py b/scripts/mobiles/endor/mature_hanadak.py new file mode 100644 index 00000000..946a4d49 --- /dev/null +++ b/scripts/mobiles/endor/mature_hanadak.py @@ -0,0 +1,44 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('mature_hanadak') + mobileTemplate.setLevel(71) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setMeatType("Carnivore Meat") + mobileTemplate.setMeatAmount(20) + mobileTemplate.setHideType("Bristley Hide") + mobileTemplate.setHideAmount(20) + mobileTemplate.setBoneType("Mammal Bones") + mobileTemplate.setBoneAmount(20) + mobileTemplate.setSocialGroup("hanadak") + mobileTemplate.setAssistRange(12) + mobileTemplate.setStalker(False) + mobileTemplate.setOptionsBitmask(192) + + templates = Vector() + templates.add('object/mobile/shared_hanadak.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('mature_hanadak', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/endor/mature_hanadak_rock_smasher.py b/scripts/mobiles/endor/mature_hanadak_rock_smasher.py new file mode 100644 index 00000000..dbc64f86 --- /dev/null +++ b/scripts/mobiles/endor/mature_hanadak_rock_smasher.py @@ -0,0 +1,42 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('mature_hanadak_rock_smasher') + mobileTemplate.setLevel(71) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setHideType("Bristley Hide") + mobileTemplate.setHideAmount(35) + mobileTemplate.setBoneType("Mammal Bones") + mobileTemplate.setBoneAmount(35) + mobileTemplate.setSocialGroup("hanadak") + mobileTemplate.setAssistRange(12) + mobileTemplate.setStalker(False) + mobileTemplate.setOptionsBitmask(192) + + templates = Vector() + templates.add('object/mobile/shared_hanadak.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('mature_hanadak_rock_smasher', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/endor/merek_assassin.py b/scripts/mobiles/endor/merek_assassin.py new file mode 100644 index 00000000..8a6720f5 --- /dev/null +++ b/scripts/mobiles/endor/merek_assassin.py @@ -0,0 +1,40 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('merek_assassin') + mobileTemplate.setLevel(64) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(True) + mobileTemplate.setScale(1) + mobileTemplate.setHideType("Leathery Hide") + mobileTemplate.setHideAmount(45) + mobileTemplate.setSocialGroup("merek") + mobileTemplate.setAssistRange(12) + mobileTemplate.setStalker(False) + mobileTemplate.setOptionsBitmask(192) + + templates = Vector() + templates.add('object/mobile/shared_merek.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('merek_assassin', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/endor/merek_cavern_creeper.py b/scripts/mobiles/endor/merek_cavern_creeper.py new file mode 100644 index 00000000..8431fdc7 --- /dev/null +++ b/scripts/mobiles/endor/merek_cavern_creeper.py @@ -0,0 +1,40 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('merek_cavern_creeper') + mobileTemplate.setLevel(63) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setHideType("Leathery Hide") + mobileTemplate.setHideAmount(45) + mobileTemplate.setSocialGroup("merek") + mobileTemplate.setAssistRange(12) + mobileTemplate.setStalker(True) + mobileTemplate.setOptionsBitmask(192) + + templates = Vector() + templates.add('object/mobile/shared_merek.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('merek_cavern_creeper', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/endor/merek_deaths_head.py b/scripts/mobiles/endor/merek_deaths_head.py new file mode 100644 index 00000000..2327d0f4 --- /dev/null +++ b/scripts/mobiles/endor/merek_deaths_head.py @@ -0,0 +1,40 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('merek_deaths_head') + mobileTemplate.setLevel(64) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(True) + mobileTemplate.setScale(1) + mobileTemplate.setHideType("Leathery Hide") + mobileTemplate.setHideAmount(45) + mobileTemplate.setSocialGroup("merek") + mobileTemplate.setAssistRange(12) + mobileTemplate.setStalker(False) + mobileTemplate.setOptionsBitmask(192) + + templates = Vector() + templates.add('object/mobile/shared_merek.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('merek_deaths_head', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/endor/merek_harvester.py b/scripts/mobiles/endor/merek_harvester.py new file mode 100644 index 00000000..04d278a5 --- /dev/null +++ b/scripts/mobiles/endor/merek_harvester.py @@ -0,0 +1,40 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('merek_harvester') + mobileTemplate.setLevel(63) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setHideType("Leathery Hide") + mobileTemplate.setHideAmount(45) + mobileTemplate.setSocialGroup("merek") + mobileTemplate.setAssistRange(12) + mobileTemplate.setStalker(False) + mobileTemplate.setOptionsBitmask(128) + + templates = Vector() + templates.add('object/mobile/shared_merek.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('merek_harvester', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/endor/mine_rat.py b/scripts/mobiles/endor/mine_rat.py new file mode 100644 index 00000000..9864ab7d --- /dev/null +++ b/scripts/mobiles/endor/mine_rat.py @@ -0,0 +1,38 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('death_watch_quenker') + mobileTemplate.setLevel(83) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(True) + mobileTemplate.setScale(.6) + mobileTemplate.setSocialGroup("death watch") + mobileTemplate.setAssistRange(12) + mobileTemplate.setStalker(False) + mobileTemplate.setOptionsBitmask(128) + + templates = Vector() + templates.add('object/mobile/shared_barbed_quenker.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('mine_rat', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/endor/miner.py b/scripts/mobiles/endor/miner.py new file mode 100644 index 00000000..ae214a53 --- /dev/null +++ b/scripts/mobiles/endor/miner.py @@ -0,0 +1,47 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('miner') + mobileTemplate.setLevel(85) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(1) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(True) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("death watch") + mobileTemplate.setAssistRange(1) + mobileTemplate.setStalker(False) + mobileTemplate.setOptionsBitmask(128) + + templates = Vector() + templates.add('object/mobile/shared_dressed_mand_miner_aqualish.iff') + templates.add('object/mobile/shared_dressed_mand_miner_bith.iff') + templates.add('object/mobile/shared_dressed_mand_miner_hum_01.iff') + templates.add('object/mobile/shared_dressed_mand_miner_hum_02.iff') + templates.add('object/mobile/shared_dressed_mand_miner_hum_03.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/pistol/shared_pistol_d18.iff', 1, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedshot') + mobileTemplate.setAttacks(attacks) + + lootPoolNames_1 = ['Junk'] + lootPoolChances_1 = [100] + lootGroupChance_1 = 100 + mobileTemplate.addToLootGroups(lootPoolNames_1,lootPoolChances_1,lootGroupChance_1) + + core.spawnService.addMobileTemplate('miner', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/endor/minor_gorax.py b/scripts/mobiles/endor/minor_gorax.py new file mode 100644 index 00000000..26381725 --- /dev/null +++ b/scripts/mobiles/endor/minor_gorax.py @@ -0,0 +1,38 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('minor_gorax') + mobileTemplate.setLevel(83) + mobileTemplate.setDifficulty(1) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(True) + mobileTemplate.setScale(.75) + mobileTemplate.setSocialGroup("gorax") + mobileTemplate.setAssistRange(12) + mobileTemplate.setStalker(False) + mobileTemplate.setOptionsBitmask(192) + + templates = Vector() + templates.add('object/mobile/shared_gorax.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('minor_gorax', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/endor/noxious_squill.py b/scripts/mobiles/endor/noxious_squill.py new file mode 100644 index 00000000..a7754b48 --- /dev/null +++ b/scripts/mobiles/endor/noxious_squill.py @@ -0,0 +1,38 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('noxious_squill') + mobileTemplate.setLevel(62) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("squill") + mobileTemplate.setAssistRange(12) + mobileTemplate.setStalker(False) + mobileTemplate.setOptionsBitmask(192) + + templates = Vector() + templates.add('object/mobile/shared_squill.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('noxious_squill', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/endor/panshee_chief.py b/scripts/mobiles/endor/panshee_chief.py new file mode 100644 index 00000000..54aafac9 --- /dev/null +++ b/scripts/mobiles/endor/panshee_chief.py @@ -0,0 +1,73 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('panshee_chief') + mobileTemplate.setLevel(71) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(3) + mobileTemplate.setMaxSpawnDistance(5) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup('panshee tribe') + mobileTemplate.setAssistRange(1) + mobileTemplate.setOptionsBitmask(128) + mobileTemplate.setStalker(True) + + + templates = Vector() + templates.add('object/mobile/shared_dressed_ewok_f_01.iff') + templates.add('object/mobile/shared_dressed_ewok_f_02.iff') + templates.add('object/mobile/shared_dressed_ewok_f_03.iff') + templates.add('object/mobile/shared_dressed_ewok_f_04.iff') + templates.add('object/mobile/shared_dressed_ewok_f_05.iff') + templates.add('object/mobile/shared_dressed_ewok_f_06.iff') + templates.add('object/mobile/shared_dressed_ewok_f_07.iff') + templates.add('object/mobile/shared_dressed_ewok_f_08.iff') + templates.add('object/mobile/shared_dressed_ewok_f_09.iff') + templates.add('object/mobile/shared_dressed_ewok_f_10.iff') + templates.add('object/mobile/shared_dressed_ewok_f_11.iff') + templates.add('object/mobile/shared_dressed_ewok_f_12.iff') + templates.add('object/mobile/shared_dressed_ewok_m_01.iff') + templates.add('object/mobile/shared_dressed_ewok_m_02.iff') + templates.add('object/mobile/shared_dressed_ewok_m_03.iff') + templates.add('object/mobile/shared_dressed_ewok_m_04.iff') + templates.add('object/mobile/shared_dressed_ewok_m_05.iff') + templates.add('object/mobile/shared_dressed_ewok_m_06.iff') + templates.add('object/mobile/shared_dressed_ewok_m_07.iff') + templates.add('object/mobile/shared_dressed_ewok_m_08.iff') + templates.add('object/mobile/shared_dressed_ewok_m_09.iff') + templates.add('object/mobile/shared_dressed_ewok_m_10.iff') + templates.add('object/mobile/shared_dressed_ewok_m_11.iff') + templates.add('object/mobile/shared_dressed_ewok_m_12.iff') + + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('meleeHit') + mobileTemplate.setAttacks(attacks) + + lootPoolNames_1 = ['Junk'] + lootPoolChances_1 = [100] + lootGroupChance_1 = 65 + mobileTemplate.addToLootGroups(lootPoolNames_1,lootPoolChances_1,lootGroupChance_1) + + lootPoolNames_2 = ['random_loot_primitives'] + lootPoolChances_2 = [100] + lootGroupChance_2 = 35 + mobileTemplate.addToLootGroups(lootPoolNames_2,lootPoolChances_2,lootGroupChance_2) + + core.spawnService.addMobileTemplate('panshee_chief', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/endor/panshee_cub.py b/scripts/mobiles/endor/panshee_cub.py new file mode 100644 index 00000000..b44cd061 --- /dev/null +++ b/scripts/mobiles/endor/panshee_cub.py @@ -0,0 +1,73 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('panshee_cub') + mobileTemplate.setLevel(69) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(3) + mobileTemplate.setMaxSpawnDistance(5) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(.5) + mobileTemplate.setSocialGroup('panshee tribe') + mobileTemplate.setAssistRange(1) + mobileTemplate.setOptionsBitmask(128) + mobileTemplate.setStalker(True) + + + templates = Vector() + templates.add('object/mobile/shared_dressed_ewok_f_01.iff') + templates.add('object/mobile/shared_dressed_ewok_f_02.iff') + templates.add('object/mobile/shared_dressed_ewok_f_03.iff') + templates.add('object/mobile/shared_dressed_ewok_f_04.iff') + templates.add('object/mobile/shared_dressed_ewok_f_05.iff') + templates.add('object/mobile/shared_dressed_ewok_f_06.iff') + templates.add('object/mobile/shared_dressed_ewok_f_07.iff') + templates.add('object/mobile/shared_dressed_ewok_f_08.iff') + templates.add('object/mobile/shared_dressed_ewok_f_09.iff') + templates.add('object/mobile/shared_dressed_ewok_f_10.iff') + templates.add('object/mobile/shared_dressed_ewok_f_11.iff') + templates.add('object/mobile/shared_dressed_ewok_f_12.iff') + templates.add('object/mobile/shared_dressed_ewok_m_01.iff') + templates.add('object/mobile/shared_dressed_ewok_m_02.iff') + templates.add('object/mobile/shared_dressed_ewok_m_03.iff') + templates.add('object/mobile/shared_dressed_ewok_m_04.iff') + templates.add('object/mobile/shared_dressed_ewok_m_05.iff') + templates.add('object/mobile/shared_dressed_ewok_m_06.iff') + templates.add('object/mobile/shared_dressed_ewok_m_07.iff') + templates.add('object/mobile/shared_dressed_ewok_m_08.iff') + templates.add('object/mobile/shared_dressed_ewok_m_09.iff') + templates.add('object/mobile/shared_dressed_ewok_m_10.iff') + templates.add('object/mobile/shared_dressed_ewok_m_11.iff') + templates.add('object/mobile/shared_dressed_ewok_m_12.iff') + + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('meleeHit') + mobileTemplate.setAttacks(attacks) + + lootPoolNames_1 = ['Junk'] + lootPoolChances_1 = [100] + lootGroupChance_1 = 65 + mobileTemplate.addToLootGroups(lootPoolNames_1,lootPoolChances_1,lootGroupChance_1) + + lootPoolNames_2 = ['random_loot_primitives'] + lootPoolChances_2 = [100] + lootGroupChance_2 = 35 + mobileTemplate.addToLootGroups(lootPoolNames_2,lootPoolChances_2,lootGroupChance_2) + + core.spawnService.addMobileTemplate('panshee_cub', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/endor/panshee_elder.py b/scripts/mobiles/endor/panshee_elder.py new file mode 100644 index 00000000..e27f50ff --- /dev/null +++ b/scripts/mobiles/endor/panshee_elder.py @@ -0,0 +1,73 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('panshee_elder') + mobileTemplate.setLevel(71) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(3) + mobileTemplate.setMaxSpawnDistance(5) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup('panshee tribe') + mobileTemplate.setAssistRange(1) + mobileTemplate.setOptionsBitmask(128) + mobileTemplate.setStalker(True) + + + templates = Vector() + templates.add('object/mobile/shared_dressed_ewok_f_01.iff') + templates.add('object/mobile/shared_dressed_ewok_f_02.iff') + templates.add('object/mobile/shared_dressed_ewok_f_03.iff') + templates.add('object/mobile/shared_dressed_ewok_f_04.iff') + templates.add('object/mobile/shared_dressed_ewok_f_05.iff') + templates.add('object/mobile/shared_dressed_ewok_f_06.iff') + templates.add('object/mobile/shared_dressed_ewok_f_07.iff') + templates.add('object/mobile/shared_dressed_ewok_f_08.iff') + templates.add('object/mobile/shared_dressed_ewok_f_09.iff') + templates.add('object/mobile/shared_dressed_ewok_f_10.iff') + templates.add('object/mobile/shared_dressed_ewok_f_11.iff') + templates.add('object/mobile/shared_dressed_ewok_f_12.iff') + templates.add('object/mobile/shared_dressed_ewok_m_01.iff') + templates.add('object/mobile/shared_dressed_ewok_m_02.iff') + templates.add('object/mobile/shared_dressed_ewok_m_03.iff') + templates.add('object/mobile/shared_dressed_ewok_m_04.iff') + templates.add('object/mobile/shared_dressed_ewok_m_05.iff') + templates.add('object/mobile/shared_dressed_ewok_m_06.iff') + templates.add('object/mobile/shared_dressed_ewok_m_07.iff') + templates.add('object/mobile/shared_dressed_ewok_m_08.iff') + templates.add('object/mobile/shared_dressed_ewok_m_09.iff') + templates.add('object/mobile/shared_dressed_ewok_m_10.iff') + templates.add('object/mobile/shared_dressed_ewok_m_11.iff') + templates.add('object/mobile/shared_dressed_ewok_m_12.iff') + + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('meleeHit') + mobileTemplate.setAttacks(attacks) + + lootPoolNames_1 = ['Junk'] + lootPoolChances_1 = [100] + lootGroupChance_1 = 65 + mobileTemplate.addToLootGroups(lootPoolNames_1,lootPoolChances_1,lootGroupChance_1) + + lootPoolNames_2 = ['random_loot_primitives'] + lootPoolChances_2 = [100] + lootGroupChance_2 = 35 + mobileTemplate.addToLootGroups(lootPoolNames_2,lootPoolChances_2,lootGroupChance_2) + + core.spawnService.addMobileTemplate('panshee_elder', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/endor/panshee_elder_warrior.py b/scripts/mobiles/endor/panshee_elder_warrior.py new file mode 100644 index 00000000..6514b299 --- /dev/null +++ b/scripts/mobiles/endor/panshee_elder_warrior.py @@ -0,0 +1,73 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('panshee_elder_worker') + mobileTemplate.setLevel(71) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(3) + mobileTemplate.setMaxSpawnDistance(5) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup('panshee tribe') + mobileTemplate.setAssistRange(1) + mobileTemplate.setOptionsBitmask(128) + mobileTemplate.setStalker(True) + + + templates = Vector() + templates.add('object/mobile/shared_dressed_ewok_f_01.iff') + templates.add('object/mobile/shared_dressed_ewok_f_02.iff') + templates.add('object/mobile/shared_dressed_ewok_f_03.iff') + templates.add('object/mobile/shared_dressed_ewok_f_04.iff') + templates.add('object/mobile/shared_dressed_ewok_f_05.iff') + templates.add('object/mobile/shared_dressed_ewok_f_06.iff') + templates.add('object/mobile/shared_dressed_ewok_f_07.iff') + templates.add('object/mobile/shared_dressed_ewok_f_08.iff') + templates.add('object/mobile/shared_dressed_ewok_f_09.iff') + templates.add('object/mobile/shared_dressed_ewok_f_10.iff') + templates.add('object/mobile/shared_dressed_ewok_f_11.iff') + templates.add('object/mobile/shared_dressed_ewok_f_12.iff') + templates.add('object/mobile/shared_dressed_ewok_m_01.iff') + templates.add('object/mobile/shared_dressed_ewok_m_02.iff') + templates.add('object/mobile/shared_dressed_ewok_m_03.iff') + templates.add('object/mobile/shared_dressed_ewok_m_04.iff') + templates.add('object/mobile/shared_dressed_ewok_m_05.iff') + templates.add('object/mobile/shared_dressed_ewok_m_06.iff') + templates.add('object/mobile/shared_dressed_ewok_m_07.iff') + templates.add('object/mobile/shared_dressed_ewok_m_08.iff') + templates.add('object/mobile/shared_dressed_ewok_m_09.iff') + templates.add('object/mobile/shared_dressed_ewok_m_10.iff') + templates.add('object/mobile/shared_dressed_ewok_m_11.iff') + templates.add('object/mobile/shared_dressed_ewok_m_12.iff') + + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('meleeHit') + mobileTemplate.setAttacks(attacks) + + lootPoolNames_1 = ['Junk'] + lootPoolChances_1 = [100] + lootGroupChance_1 = 65 + mobileTemplate.addToLootGroups(lootPoolNames_1,lootPoolChances_1,lootGroupChance_1) + + lootPoolNames_2 = ['random_loot_primitives'] + lootPoolChances_2 = [100] + lootGroupChance_2 = 35 + mobileTemplate.addToLootGroups(lootPoolNames_2,lootPoolChances_2,lootGroupChance_2) + + core.spawnService.addMobileTemplate('panshee_elder_worker', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/endor/panshee_loremaster.py b/scripts/mobiles/endor/panshee_loremaster.py new file mode 100644 index 00000000..9fc40987 --- /dev/null +++ b/scripts/mobiles/endor/panshee_loremaster.py @@ -0,0 +1,73 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('panshee_loremaster') + mobileTemplate.setLevel(71) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(3) + mobileTemplate.setMaxSpawnDistance(5) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup('panshee tribe') + mobileTemplate.setAssistRange(1) + mobileTemplate.setOptionsBitmask(128) + mobileTemplate.setStalker(True) + + + templates = Vector() + templates.add('object/mobile/shared_dressed_ewok_f_01.iff') + templates.add('object/mobile/shared_dressed_ewok_f_02.iff') + templates.add('object/mobile/shared_dressed_ewok_f_03.iff') + templates.add('object/mobile/shared_dressed_ewok_f_04.iff') + templates.add('object/mobile/shared_dressed_ewok_f_05.iff') + templates.add('object/mobile/shared_dressed_ewok_f_06.iff') + templates.add('object/mobile/shared_dressed_ewok_f_07.iff') + templates.add('object/mobile/shared_dressed_ewok_f_08.iff') + templates.add('object/mobile/shared_dressed_ewok_f_09.iff') + templates.add('object/mobile/shared_dressed_ewok_f_10.iff') + templates.add('object/mobile/shared_dressed_ewok_f_11.iff') + templates.add('object/mobile/shared_dressed_ewok_f_12.iff') + templates.add('object/mobile/shared_dressed_ewok_m_01.iff') + templates.add('object/mobile/shared_dressed_ewok_m_02.iff') + templates.add('object/mobile/shared_dressed_ewok_m_03.iff') + templates.add('object/mobile/shared_dressed_ewok_m_04.iff') + templates.add('object/mobile/shared_dressed_ewok_m_05.iff') + templates.add('object/mobile/shared_dressed_ewok_m_06.iff') + templates.add('object/mobile/shared_dressed_ewok_m_07.iff') + templates.add('object/mobile/shared_dressed_ewok_m_08.iff') + templates.add('object/mobile/shared_dressed_ewok_m_09.iff') + templates.add('object/mobile/shared_dressed_ewok_m_10.iff') + templates.add('object/mobile/shared_dressed_ewok_m_11.iff') + templates.add('object/mobile/shared_dressed_ewok_m_12.iff') + + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('meleeHit') + mobileTemplate.setAttacks(attacks) + + lootPoolNames_1 = ['Junk'] + lootPoolChances_1 = [100] + lootGroupChance_1 = 65 + mobileTemplate.addToLootGroups(lootPoolNames_1,lootPoolChances_1,lootGroupChance_1) + + lootPoolNames_2 = ['random_loot_primitives'] + lootPoolChances_2 = [100] + lootGroupChance_2 = 35 + mobileTemplate.addToLootGroups(lootPoolNames_2,lootPoolChances_2,lootGroupChance_2) + + core.spawnService.addMobileTemplate('panshee_loremaster', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/endor/panshee_matriarch.py b/scripts/mobiles/endor/panshee_matriarch.py new file mode 100644 index 00000000..5de9bd16 --- /dev/null +++ b/scripts/mobiles/endor/panshee_matriarch.py @@ -0,0 +1,73 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('panshee_matriarch') + mobileTemplate.setLevel(71) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(3) + mobileTemplate.setMaxSpawnDistance(5) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup('panshee tribe') + mobileTemplate.setAssistRange(1) + mobileTemplate.setOptionsBitmask(128) + mobileTemplate.setStalker(True) + + + templates = Vector() + templates.add('object/mobile/shared_dressed_ewok_f_01.iff') + templates.add('object/mobile/shared_dressed_ewok_f_02.iff') + templates.add('object/mobile/shared_dressed_ewok_f_03.iff') + templates.add('object/mobile/shared_dressed_ewok_f_04.iff') + templates.add('object/mobile/shared_dressed_ewok_f_05.iff') + templates.add('object/mobile/shared_dressed_ewok_f_06.iff') + templates.add('object/mobile/shared_dressed_ewok_f_07.iff') + templates.add('object/mobile/shared_dressed_ewok_f_08.iff') + templates.add('object/mobile/shared_dressed_ewok_f_09.iff') + templates.add('object/mobile/shared_dressed_ewok_f_10.iff') + templates.add('object/mobile/shared_dressed_ewok_f_11.iff') + templates.add('object/mobile/shared_dressed_ewok_f_12.iff') + templates.add('object/mobile/shared_dressed_ewok_m_01.iff') + templates.add('object/mobile/shared_dressed_ewok_m_02.iff') + templates.add('object/mobile/shared_dressed_ewok_m_03.iff') + templates.add('object/mobile/shared_dressed_ewok_m_04.iff') + templates.add('object/mobile/shared_dressed_ewok_m_05.iff') + templates.add('object/mobile/shared_dressed_ewok_m_06.iff') + templates.add('object/mobile/shared_dressed_ewok_m_07.iff') + templates.add('object/mobile/shared_dressed_ewok_m_08.iff') + templates.add('object/mobile/shared_dressed_ewok_m_09.iff') + templates.add('object/mobile/shared_dressed_ewok_m_10.iff') + templates.add('object/mobile/shared_dressed_ewok_m_11.iff') + templates.add('object/mobile/shared_dressed_ewok_m_12.iff') + + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('meleeHit') + mobileTemplate.setAttacks(attacks) + + lootPoolNames_1 = ['Junk'] + lootPoolChances_1 = [100] + lootGroupChance_1 = 65 + mobileTemplate.addToLootGroups(lootPoolNames_1,lootPoolChances_1,lootGroupChance_1) + + lootPoolNames_2 = ['random_loot_primitives'] + lootPoolChances_2 = [100] + lootGroupChance_2 = 35 + mobileTemplate.addToLootGroups(lootPoolNames_2,lootPoolChances_2,lootGroupChance_2) + + core.spawnService.addMobileTemplate('panshee_matriarch', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/endor/panshee_ritualist.py b/scripts/mobiles/endor/panshee_ritualist.py new file mode 100644 index 00000000..247a1ad2 --- /dev/null +++ b/scripts/mobiles/endor/panshee_ritualist.py @@ -0,0 +1,73 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('panshee_ritualist') + mobileTemplate.setLevel(71) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(3) + mobileTemplate.setMaxSpawnDistance(5) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup('panshee tribe') + mobileTemplate.setAssistRange(1) + mobileTemplate.setOptionsBitmask(128) + mobileTemplate.setStalker(True) + + + templates = Vector() + templates.add('object/mobile/shared_dressed_ewok_f_01.iff') + templates.add('object/mobile/shared_dressed_ewok_f_02.iff') + templates.add('object/mobile/shared_dressed_ewok_f_03.iff') + templates.add('object/mobile/shared_dressed_ewok_f_04.iff') + templates.add('object/mobile/shared_dressed_ewok_f_05.iff') + templates.add('object/mobile/shared_dressed_ewok_f_06.iff') + templates.add('object/mobile/shared_dressed_ewok_f_07.iff') + templates.add('object/mobile/shared_dressed_ewok_f_08.iff') + templates.add('object/mobile/shared_dressed_ewok_f_09.iff') + templates.add('object/mobile/shared_dressed_ewok_f_10.iff') + templates.add('object/mobile/shared_dressed_ewok_f_11.iff') + templates.add('object/mobile/shared_dressed_ewok_f_12.iff') + templates.add('object/mobile/shared_dressed_ewok_m_01.iff') + templates.add('object/mobile/shared_dressed_ewok_m_02.iff') + templates.add('object/mobile/shared_dressed_ewok_m_03.iff') + templates.add('object/mobile/shared_dressed_ewok_m_04.iff') + templates.add('object/mobile/shared_dressed_ewok_m_05.iff') + templates.add('object/mobile/shared_dressed_ewok_m_06.iff') + templates.add('object/mobile/shared_dressed_ewok_m_07.iff') + templates.add('object/mobile/shared_dressed_ewok_m_08.iff') + templates.add('object/mobile/shared_dressed_ewok_m_09.iff') + templates.add('object/mobile/shared_dressed_ewok_m_10.iff') + templates.add('object/mobile/shared_dressed_ewok_m_11.iff') + templates.add('object/mobile/shared_dressed_ewok_m_12.iff') + + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('meleeHit') + mobileTemplate.setAttacks(attacks) + + lootPoolNames_1 = ['Junk'] + lootPoolChances_1 = [100] + lootGroupChance_1 = 65 + mobileTemplate.addToLootGroups(lootPoolNames_1,lootPoolChances_1,lootGroupChance_1) + + lootPoolNames_2 = ['random_loot_primitives'] + lootPoolChances_2 = [100] + lootGroupChance_2 = 35 + mobileTemplate.addToLootGroups(lootPoolNames_2,lootPoolChances_2,lootGroupChance_2) + + core.spawnService.addMobileTemplate('panshee_ritualist', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/endor/panshee_shaman.py b/scripts/mobiles/endor/panshee_shaman.py new file mode 100644 index 00000000..28875d0f --- /dev/null +++ b/scripts/mobiles/endor/panshee_shaman.py @@ -0,0 +1,73 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('panshee_shaman') + mobileTemplate.setLevel(71) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(3) + mobileTemplate.setMaxSpawnDistance(5) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup('panshee tribe') + mobileTemplate.setAssistRange(1) + mobileTemplate.setOptionsBitmask(128) + mobileTemplate.setStalker(True) + + + templates = Vector() + templates.add('object/mobile/shared_dressed_ewok_f_01.iff') + templates.add('object/mobile/shared_dressed_ewok_f_02.iff') + templates.add('object/mobile/shared_dressed_ewok_f_03.iff') + templates.add('object/mobile/shared_dressed_ewok_f_04.iff') + templates.add('object/mobile/shared_dressed_ewok_f_05.iff') + templates.add('object/mobile/shared_dressed_ewok_f_06.iff') + templates.add('object/mobile/shared_dressed_ewok_f_07.iff') + templates.add('object/mobile/shared_dressed_ewok_f_08.iff') + templates.add('object/mobile/shared_dressed_ewok_f_09.iff') + templates.add('object/mobile/shared_dressed_ewok_f_10.iff') + templates.add('object/mobile/shared_dressed_ewok_f_11.iff') + templates.add('object/mobile/shared_dressed_ewok_f_12.iff') + templates.add('object/mobile/shared_dressed_ewok_m_01.iff') + templates.add('object/mobile/shared_dressed_ewok_m_02.iff') + templates.add('object/mobile/shared_dressed_ewok_m_03.iff') + templates.add('object/mobile/shared_dressed_ewok_m_04.iff') + templates.add('object/mobile/shared_dressed_ewok_m_05.iff') + templates.add('object/mobile/shared_dressed_ewok_m_06.iff') + templates.add('object/mobile/shared_dressed_ewok_m_07.iff') + templates.add('object/mobile/shared_dressed_ewok_m_08.iff') + templates.add('object/mobile/shared_dressed_ewok_m_09.iff') + templates.add('object/mobile/shared_dressed_ewok_m_10.iff') + templates.add('object/mobile/shared_dressed_ewok_m_11.iff') + templates.add('object/mobile/shared_dressed_ewok_m_12.iff') + + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('meleeHit') + mobileTemplate.setAttacks(attacks) + + lootPoolNames_1 = ['Junk'] + lootPoolChances_1 = [100] + lootGroupChance_1 = 65 + mobileTemplate.addToLootGroups(lootPoolNames_1,lootPoolChances_1,lootGroupChance_1) + + lootPoolNames_2 = ['random_loot_primitives'] + lootPoolChances_2 = [100] + lootGroupChance_2 = 35 + mobileTemplate.addToLootGroups(lootPoolNames_2,lootPoolChances_2,lootGroupChance_2) + + core.spawnService.addMobileTemplate('panshee_shaman', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/endor/panshee_tribesman.py b/scripts/mobiles/endor/panshee_tribesman.py new file mode 100644 index 00000000..09cd9c33 --- /dev/null +++ b/scripts/mobiles/endor/panshee_tribesman.py @@ -0,0 +1,73 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('panshee_tribesman') + mobileTemplate.setLevel(71) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(3) + mobileTemplate.setMaxSpawnDistance(5) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup('panshee tribe') + mobileTemplate.setAssistRange(1) + mobileTemplate.setOptionsBitmask(128) + mobileTemplate.setStalker(True) + + + templates = Vector() + templates.add('object/mobile/shared_dressed_ewok_f_01.iff') + templates.add('object/mobile/shared_dressed_ewok_f_02.iff') + templates.add('object/mobile/shared_dressed_ewok_f_03.iff') + templates.add('object/mobile/shared_dressed_ewok_f_04.iff') + templates.add('object/mobile/shared_dressed_ewok_f_05.iff') + templates.add('object/mobile/shared_dressed_ewok_f_06.iff') + templates.add('object/mobile/shared_dressed_ewok_f_07.iff') + templates.add('object/mobile/shared_dressed_ewok_f_08.iff') + templates.add('object/mobile/shared_dressed_ewok_f_09.iff') + templates.add('object/mobile/shared_dressed_ewok_f_10.iff') + templates.add('object/mobile/shared_dressed_ewok_f_11.iff') + templates.add('object/mobile/shared_dressed_ewok_f_12.iff') + templates.add('object/mobile/shared_dressed_ewok_m_01.iff') + templates.add('object/mobile/shared_dressed_ewok_m_02.iff') + templates.add('object/mobile/shared_dressed_ewok_m_03.iff') + templates.add('object/mobile/shared_dressed_ewok_m_04.iff') + templates.add('object/mobile/shared_dressed_ewok_m_05.iff') + templates.add('object/mobile/shared_dressed_ewok_m_06.iff') + templates.add('object/mobile/shared_dressed_ewok_m_07.iff') + templates.add('object/mobile/shared_dressed_ewok_m_08.iff') + templates.add('object/mobile/shared_dressed_ewok_m_09.iff') + templates.add('object/mobile/shared_dressed_ewok_m_10.iff') + templates.add('object/mobile/shared_dressed_ewok_m_11.iff') + templates.add('object/mobile/shared_dressed_ewok_m_12.iff') + + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('meleeHit') + mobileTemplate.setAttacks(attacks) + + lootPoolNames_1 = ['Junk'] + lootPoolChances_1 = [100] + lootGroupChance_1 = 65 + mobileTemplate.addToLootGroups(lootPoolNames_1,lootPoolChances_1,lootGroupChance_1) + + lootPoolNames_2 = ['random_loot_primitives'] + lootPoolChances_2 = [100] + lootGroupChance_2 = 35 + mobileTemplate.addToLootGroups(lootPoolNames_2,lootPoolChances_2,lootGroupChance_2) + + core.spawnService.addMobileTemplate('panshee_tribesman', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/endor/panshee_veteran.py b/scripts/mobiles/endor/panshee_veteran.py new file mode 100644 index 00000000..d8f72bb2 --- /dev/null +++ b/scripts/mobiles/endor/panshee_veteran.py @@ -0,0 +1,73 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('panshee_veteran') + mobileTemplate.setLevel(71) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(3) + mobileTemplate.setMaxSpawnDistance(5) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup('panshee tribe') + mobileTemplate.setAssistRange(1) + mobileTemplate.setOptionsBitmask(128) + mobileTemplate.setStalker(True) + + + templates = Vector() + templates.add('object/mobile/shared_dressed_ewok_f_01.iff') + templates.add('object/mobile/shared_dressed_ewok_f_02.iff') + templates.add('object/mobile/shared_dressed_ewok_f_03.iff') + templates.add('object/mobile/shared_dressed_ewok_f_04.iff') + templates.add('object/mobile/shared_dressed_ewok_f_05.iff') + templates.add('object/mobile/shared_dressed_ewok_f_06.iff') + templates.add('object/mobile/shared_dressed_ewok_f_07.iff') + templates.add('object/mobile/shared_dressed_ewok_f_08.iff') + templates.add('object/mobile/shared_dressed_ewok_f_09.iff') + templates.add('object/mobile/shared_dressed_ewok_f_10.iff') + templates.add('object/mobile/shared_dressed_ewok_f_11.iff') + templates.add('object/mobile/shared_dressed_ewok_f_12.iff') + templates.add('object/mobile/shared_dressed_ewok_m_01.iff') + templates.add('object/mobile/shared_dressed_ewok_m_02.iff') + templates.add('object/mobile/shared_dressed_ewok_m_03.iff') + templates.add('object/mobile/shared_dressed_ewok_m_04.iff') + templates.add('object/mobile/shared_dressed_ewok_m_05.iff') + templates.add('object/mobile/shared_dressed_ewok_m_06.iff') + templates.add('object/mobile/shared_dressed_ewok_m_07.iff') + templates.add('object/mobile/shared_dressed_ewok_m_08.iff') + templates.add('object/mobile/shared_dressed_ewok_m_09.iff') + templates.add('object/mobile/shared_dressed_ewok_m_10.iff') + templates.add('object/mobile/shared_dressed_ewok_m_11.iff') + templates.add('object/mobile/shared_dressed_ewok_m_12.iff') + + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('meleeHit') + mobileTemplate.setAttacks(attacks) + + lootPoolNames_1 = ['Junk'] + lootPoolChances_1 = [100] + lootGroupChance_1 = 65 + mobileTemplate.addToLootGroups(lootPoolNames_1,lootPoolChances_1,lootGroupChance_1) + + lootPoolNames_2 = ['random_loot_primitives'] + lootPoolChances_2 = [100] + lootGroupChance_2 = 35 + mobileTemplate.addToLootGroups(lootPoolNames_2,lootPoolChances_2,lootGroupChance_2) + + core.spawnService.addMobileTemplate('panshee_veteran', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/endor/panshee_warrior.py b/scripts/mobiles/endor/panshee_warrior.py new file mode 100644 index 00000000..c6fdb910 --- /dev/null +++ b/scripts/mobiles/endor/panshee_warrior.py @@ -0,0 +1,73 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('panshee_warrior') + mobileTemplate.setLevel(71) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(3) + mobileTemplate.setMaxSpawnDistance(5) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup('panshee tribe') + mobileTemplate.setAssistRange(1) + mobileTemplate.setOptionsBitmask(128) + mobileTemplate.setStalker(True) + + + templates = Vector() + templates.add('object/mobile/shared_dressed_ewok_f_01.iff') + templates.add('object/mobile/shared_dressed_ewok_f_02.iff') + templates.add('object/mobile/shared_dressed_ewok_f_03.iff') + templates.add('object/mobile/shared_dressed_ewok_f_04.iff') + templates.add('object/mobile/shared_dressed_ewok_f_05.iff') + templates.add('object/mobile/shared_dressed_ewok_f_06.iff') + templates.add('object/mobile/shared_dressed_ewok_f_07.iff') + templates.add('object/mobile/shared_dressed_ewok_f_08.iff') + templates.add('object/mobile/shared_dressed_ewok_f_09.iff') + templates.add('object/mobile/shared_dressed_ewok_f_10.iff') + templates.add('object/mobile/shared_dressed_ewok_f_11.iff') + templates.add('object/mobile/shared_dressed_ewok_f_12.iff') + templates.add('object/mobile/shared_dressed_ewok_m_01.iff') + templates.add('object/mobile/shared_dressed_ewok_m_02.iff') + templates.add('object/mobile/shared_dressed_ewok_m_03.iff') + templates.add('object/mobile/shared_dressed_ewok_m_04.iff') + templates.add('object/mobile/shared_dressed_ewok_m_05.iff') + templates.add('object/mobile/shared_dressed_ewok_m_06.iff') + templates.add('object/mobile/shared_dressed_ewok_m_07.iff') + templates.add('object/mobile/shared_dressed_ewok_m_08.iff') + templates.add('object/mobile/shared_dressed_ewok_m_09.iff') + templates.add('object/mobile/shared_dressed_ewok_m_10.iff') + templates.add('object/mobile/shared_dressed_ewok_m_11.iff') + templates.add('object/mobile/shared_dressed_ewok_m_12.iff') + + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('meleeHit') + mobileTemplate.setAttacks(attacks) + + lootPoolNames_1 = ['Junk'] + lootPoolChances_1 = [100] + lootGroupChance_1 = 65 + mobileTemplate.addToLootGroups(lootPoolNames_1,lootPoolChances_1,lootGroupChance_1) + + lootPoolNames_2 = ['random_loot_primitives'] + lootPoolChances_2 = [100] + lootGroupChance_2 = 35 + mobileTemplate.addToLootGroups(lootPoolNames_2,lootPoolChances_2,lootGroupChance_2) + + core.spawnService.addMobileTemplate('panshee_warrior', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/endor/panshee_worker.py b/scripts/mobiles/endor/panshee_worker.py new file mode 100644 index 00000000..42f15770 --- /dev/null +++ b/scripts/mobiles/endor/panshee_worker.py @@ -0,0 +1,73 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('panshee_worker') + mobileTemplate.setLevel(71) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(3) + mobileTemplate.setMaxSpawnDistance(5) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup('panshee tribe') + mobileTemplate.setAssistRange(1) + mobileTemplate.setOptionsBitmask(128) + mobileTemplate.setStalker(True) + + + templates = Vector() + templates.add('object/mobile/shared_dressed_ewok_f_01.iff') + templates.add('object/mobile/shared_dressed_ewok_f_02.iff') + templates.add('object/mobile/shared_dressed_ewok_f_03.iff') + templates.add('object/mobile/shared_dressed_ewok_f_04.iff') + templates.add('object/mobile/shared_dressed_ewok_f_05.iff') + templates.add('object/mobile/shared_dressed_ewok_f_06.iff') + templates.add('object/mobile/shared_dressed_ewok_f_07.iff') + templates.add('object/mobile/shared_dressed_ewok_f_08.iff') + templates.add('object/mobile/shared_dressed_ewok_f_09.iff') + templates.add('object/mobile/shared_dressed_ewok_f_10.iff') + templates.add('object/mobile/shared_dressed_ewok_f_11.iff') + templates.add('object/mobile/shared_dressed_ewok_f_12.iff') + templates.add('object/mobile/shared_dressed_ewok_m_01.iff') + templates.add('object/mobile/shared_dressed_ewok_m_02.iff') + templates.add('object/mobile/shared_dressed_ewok_m_03.iff') + templates.add('object/mobile/shared_dressed_ewok_m_04.iff') + templates.add('object/mobile/shared_dressed_ewok_m_05.iff') + templates.add('object/mobile/shared_dressed_ewok_m_06.iff') + templates.add('object/mobile/shared_dressed_ewok_m_07.iff') + templates.add('object/mobile/shared_dressed_ewok_m_08.iff') + templates.add('object/mobile/shared_dressed_ewok_m_09.iff') + templates.add('object/mobile/shared_dressed_ewok_m_10.iff') + templates.add('object/mobile/shared_dressed_ewok_m_11.iff') + templates.add('object/mobile/shared_dressed_ewok_m_12.iff') + + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('meleeHit') + mobileTemplate.setAttacks(attacks) + + lootPoolNames_1 = ['Junk'] + lootPoolChances_1 = [100] + lootGroupChance_1 = 65 + mobileTemplate.addToLootGroups(lootPoolNames_1,lootPoolChances_1,lootGroupChance_1) + + lootPoolNames_2 = ['random_loot_primitives'] + lootPoolChances_2 = [100] + lootGroupChance_2 = 35 + mobileTemplate.addToLootGroups(lootPoolNames_2,lootPoolChances_2,lootGroupChance_2) + + core.spawnService.addMobileTemplate('panshee_worker', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/endor/proficient_gondula_worker.py b/scripts/mobiles/endor/proficient_gondula_worker.py new file mode 100644 index 00000000..a86760e3 --- /dev/null +++ b/scripts/mobiles/endor/proficient_gondula_worker.py @@ -0,0 +1,73 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('proficient_gondula_worker') + mobileTemplate.setLevel(77) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(3) + mobileTemplate.setMaxSpawnDistance(5) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup('gondula tribe') + mobileTemplate.setAssistRange(1) + mobileTemplate.setOptionsBitmask(128) + mobileTemplate.setStalker(True) + + + templates = Vector() + templates.add('object/mobile/shared_dressed_ewok_f_01.iff') + templates.add('object/mobile/shared_dressed_ewok_f_02.iff') + templates.add('object/mobile/shared_dressed_ewok_f_03.iff') + templates.add('object/mobile/shared_dressed_ewok_f_04.iff') + templates.add('object/mobile/shared_dressed_ewok_f_05.iff') + templates.add('object/mobile/shared_dressed_ewok_f_06.iff') + templates.add('object/mobile/shared_dressed_ewok_f_07.iff') + templates.add('object/mobile/shared_dressed_ewok_f_08.iff') + templates.add('object/mobile/shared_dressed_ewok_f_09.iff') + templates.add('object/mobile/shared_dressed_ewok_f_10.iff') + templates.add('object/mobile/shared_dressed_ewok_f_11.iff') + templates.add('object/mobile/shared_dressed_ewok_f_12.iff') + templates.add('object/mobile/shared_dressed_ewok_m_01.iff') + templates.add('object/mobile/shared_dressed_ewok_m_02.iff') + templates.add('object/mobile/shared_dressed_ewok_m_03.iff') + templates.add('object/mobile/shared_dressed_ewok_m_04.iff') + templates.add('object/mobile/shared_dressed_ewok_m_05.iff') + templates.add('object/mobile/shared_dressed_ewok_m_06.iff') + templates.add('object/mobile/shared_dressed_ewok_m_07.iff') + templates.add('object/mobile/shared_dressed_ewok_m_08.iff') + templates.add('object/mobile/shared_dressed_ewok_m_09.iff') + templates.add('object/mobile/shared_dressed_ewok_m_10.iff') + templates.add('object/mobile/shared_dressed_ewok_m_11.iff') + templates.add('object/mobile/shared_dressed_ewok_m_12.iff') + + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('meleeHit') + mobileTemplate.setAttacks(attacks) + + lootPoolNames_1 = ['Junk'] + lootPoolChances_1 = [100] + lootGroupChance_1 = 65 + mobileTemplate.addToLootGroups(lootPoolNames_1,lootPoolChances_1,lootGroupChance_1) + + lootPoolNames_2 = ['random_loot_primitives'] + lootPoolChances_2 = [100] + lootGroupChance_2 = 35 + mobileTemplate.addToLootGroups(lootPoolNames_2,lootPoolChances_2,lootGroupChance_2) + + core.spawnService.addMobileTemplate('proficient_gondula_worker', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/endor/proficient_jinda_worker.py b/scripts/mobiles/endor/proficient_jinda_worker.py new file mode 100644 index 00000000..7c69d4da --- /dev/null +++ b/scripts/mobiles/endor/proficient_jinda_worker.py @@ -0,0 +1,51 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('proficient_jinda_worker') + mobileTemplate.setLevel(64) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(3) + mobileTemplate.setMaxSpawnDistance(5) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup('jinda tribe') + mobileTemplate.setAssistRange(1) + mobileTemplate.setOptionsBitmask(128) + mobileTemplate.setStalker(True) + + + templates = Vector() + templates.add('object/mobile/shared_jinda_male.iff') + templates.add('object/mobile/shared_jinda_female.iff') + + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('meleeHit') + mobileTemplate.setAttacks(attacks) + + lootPoolNames_1 = ['Junk'] + lootPoolChances_1 = [100] + lootGroupChance_1 = 65 + mobileTemplate.addToLootGroups(lootPoolNames_1,lootPoolChances_1,lootGroupChance_1) + + lootPoolNames_2 = ['random_loot_primitives'] + lootPoolChances_2 = [100] + lootGroupChance_2 = 35 + mobileTemplate.addToLootGroups(lootPoolNames_2,lootPoolChances_2,lootGroupChance_2) + + core.spawnService.addMobileTemplate('proficient_jinda_worker', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/endor/proficient_panshee_worker.py b/scripts/mobiles/endor/proficient_panshee_worker.py new file mode 100644 index 00000000..6209d853 --- /dev/null +++ b/scripts/mobiles/endor/proficient_panshee_worker.py @@ -0,0 +1,73 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('proficient_panshee_worker') + mobileTemplate.setLevel(71) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(3) + mobileTemplate.setMaxSpawnDistance(5) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup('panshee tribe') + mobileTemplate.setAssistRange(1) + mobileTemplate.setOptionsBitmask(128) + mobileTemplate.setStalker(True) + + + templates = Vector() + templates.add('object/mobile/shared_dressed_ewok_f_01.iff') + templates.add('object/mobile/shared_dressed_ewok_f_02.iff') + templates.add('object/mobile/shared_dressed_ewok_f_03.iff') + templates.add('object/mobile/shared_dressed_ewok_f_04.iff') + templates.add('object/mobile/shared_dressed_ewok_f_05.iff') + templates.add('object/mobile/shared_dressed_ewok_f_06.iff') + templates.add('object/mobile/shared_dressed_ewok_f_07.iff') + templates.add('object/mobile/shared_dressed_ewok_f_08.iff') + templates.add('object/mobile/shared_dressed_ewok_f_09.iff') + templates.add('object/mobile/shared_dressed_ewok_f_10.iff') + templates.add('object/mobile/shared_dressed_ewok_f_11.iff') + templates.add('object/mobile/shared_dressed_ewok_f_12.iff') + templates.add('object/mobile/shared_dressed_ewok_m_01.iff') + templates.add('object/mobile/shared_dressed_ewok_m_02.iff') + templates.add('object/mobile/shared_dressed_ewok_m_03.iff') + templates.add('object/mobile/shared_dressed_ewok_m_04.iff') + templates.add('object/mobile/shared_dressed_ewok_m_05.iff') + templates.add('object/mobile/shared_dressed_ewok_m_06.iff') + templates.add('object/mobile/shared_dressed_ewok_m_07.iff') + templates.add('object/mobile/shared_dressed_ewok_m_08.iff') + templates.add('object/mobile/shared_dressed_ewok_m_09.iff') + templates.add('object/mobile/shared_dressed_ewok_m_10.iff') + templates.add('object/mobile/shared_dressed_ewok_m_11.iff') + templates.add('object/mobile/shared_dressed_ewok_m_12.iff') + + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('meleeHit') + mobileTemplate.setAttacks(attacks) + + lootPoolNames_1 = ['Junk'] + lootPoolChances_1 = [100] + lootGroupChance_1 = 65 + mobileTemplate.addToLootGroups(lootPoolNames_1,lootPoolChances_1,lootGroupChance_1) + + lootPoolNames_2 = ['random_loot_primitives'] + lootPoolChances_2 = [100] + lootGroupChance_2 = 35 + mobileTemplate.addToLootGroups(lootPoolNames_2,lootPoolChances_2,lootGroupChance_2) + + core.spawnService.addMobileTemplate('proficient_panshee_worker', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/endor/prowling_gurreck.py b/scripts/mobiles/endor/prowling_gurreck.py new file mode 100644 index 00000000..a01f7f7c --- /dev/null +++ b/scripts/mobiles/endor/prowling_gurreck.py @@ -0,0 +1,38 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('gurreck_prowler') + mobileTemplate.setLevel(64) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("gurreck") + mobileTemplate.setAssistRange(12) + mobileTemplate.setStalker(True) + mobileTemplate.setOptionsBitmask(192) + + templates = Vector() + templates.add('object/mobile/shared_gurreck.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('prowling_gurreck', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/endor/pubam_battlelord.py b/scripts/mobiles/endor/pubam_battlelord.py new file mode 100644 index 00000000..bd9fc47d --- /dev/null +++ b/scripts/mobiles/endor/pubam_battlelord.py @@ -0,0 +1,49 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('pubam_battlelord') + mobileTemplate.setLevel(65) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(3) + mobileTemplate.setMaxSpawnDistance(5) + mobileTemplate.setDeathblow(True) + mobileTemplate.setSocialGroup('pubam tribe') + mobileTemplate.setAssistRange(1) + mobileTemplate.setOptionsBitmask(192) + mobileTemplate.setStalker(True) + + + templates = Vector() + templates.add('object/mobile/shared_dulok_male.iff') + templates.add('object/mobile/shared_dulok_female.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('meleeHit') + mobileTemplate.setAttacks(attacks) + + lootPoolNames_1 = ['Junk'] + lootPoolChances_1 = [100] + lootGroupChance_1 = 65 + mobileTemplate.addToLootGroups(lootPoolNames_1,lootPoolChances_1,lootGroupChance_1) + + lootPoolNames_2 = ['random_loot_primitives'] + lootPoolChances_2 = [100] + lootGroupChance_2 = 35 + mobileTemplate.addToLootGroups(lootPoolNames_2,lootPoolChances_2,lootGroupChance_2) + + core.spawnService.addMobileTemplate('pubam_battlelord', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/endor/pubam_chieftan.py b/scripts/mobiles/endor/pubam_chieftan.py new file mode 100644 index 00000000..6062e7e6 --- /dev/null +++ b/scripts/mobiles/endor/pubam_chieftan.py @@ -0,0 +1,49 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('pubam_chieftan') + mobileTemplate.setLevel(60) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(3) + mobileTemplate.setMaxSpawnDistance(5) + mobileTemplate.setDeathblow(True) + mobileTemplate.setSocialGroup('pubam tribe') + mobileTemplate.setAssistRange(1) + mobileTemplate.setOptionsBitmask(192) + mobileTemplate.setStalker(True) + + + templates = Vector() + templates.add('object/mobile/shared_dulok_male.iff') + templates.add('object/mobile/shared_dulok_female.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('meleeHit') + mobileTemplate.setAttacks(attacks) + + lootPoolNames_1 = ['Junk'] + lootPoolChances_1 = [100] + lootGroupChance_1 = 65 + mobileTemplate.addToLootGroups(lootPoolNames_1,lootPoolChances_1,lootGroupChance_1) + + lootPoolNames_2 = ['random_loot_primitives'] + lootPoolChances_2 = [100] + lootGroupChance_2 = 35 + mobileTemplate.addToLootGroups(lootPoolNames_2,lootPoolChances_2,lootGroupChance_2) + + core.spawnService.addMobileTemplate('pubam_chieftan', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/endor/pubam_cub.py b/scripts/mobiles/endor/pubam_cub.py new file mode 100644 index 00000000..956c66d7 --- /dev/null +++ b/scripts/mobiles/endor/pubam_cub.py @@ -0,0 +1,50 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('pubam_cub') + mobileTemplate.setLevel(65) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(3) + mobileTemplate.setMaxSpawnDistance(5) + mobileTemplate.setDeathblow(True) + mobileTemplate.setScale(.5) + mobileTemplate.setSocialGroup('pubam tribe') + mobileTemplate.setAssistRange(12) + mobileTemplate.setOptionsBitmask(128) + mobileTemplate.setStalker(False) + + + templates = Vector() + templates.add('object/mobile/shared_dulok_male.iff') + templates.add('object/mobile/shared_dulok_female.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('meleeHit') + mobileTemplate.setAttacks(attacks) + + lootPoolNames_1 = ['Junk'] + lootPoolChances_1 = [100] + lootGroupChance_1 = 65 + mobileTemplate.addToLootGroups(lootPoolNames_1,lootPoolChances_1,lootGroupChance_1) + + lootPoolNames_2 = ['random_loot_primitives'] + lootPoolChances_2 = [100] + lootGroupChance_2 = 35 + mobileTemplate.addToLootGroups(lootPoolNames_2,lootPoolChances_2,lootGroupChance_2) + + core.spawnService.addMobileTemplate('pubam_cub', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/endor/pubam_dark_shaman.py b/scripts/mobiles/endor/pubam_dark_shaman.py new file mode 100644 index 00000000..02a45335 --- /dev/null +++ b/scripts/mobiles/endor/pubam_dark_shaman.py @@ -0,0 +1,49 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('pubam_dark_shaman') + mobileTemplate.setLevel(64) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(3) + mobileTemplate.setMaxSpawnDistance(5) + mobileTemplate.setDeathblow(True) + mobileTemplate.setSocialGroup('pubam tribe') + mobileTemplate.setAssistRange(12) + mobileTemplate.setOptionsBitmask(192) + mobileTemplate.setStalker(True) + + + templates = Vector() + templates.add('object/mobile/shared_dulok_male.iff') + templates.add('object/mobile/shared_dulok_female.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('meleeHit') + mobileTemplate.setAttacks(attacks) + + lootPoolNames_1 = ['Junk'] + lootPoolChances_1 = [100] + lootGroupChance_1 = 65 + mobileTemplate.addToLootGroups(lootPoolNames_1,lootPoolChances_1,lootGroupChance_1) + + lootPoolNames_2 = ['random_loot_primitives'] + lootPoolChances_2 = [100] + lootGroupChance_2 = 35 + mobileTemplate.addToLootGroups(lootPoolNames_2,lootPoolChances_2,lootGroupChance_2) + + core.spawnService.addMobileTemplate('pubam_dark_shaman', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/endor/pubam_scout.py b/scripts/mobiles/endor/pubam_scout.py new file mode 100644 index 00000000..628635f7 --- /dev/null +++ b/scripts/mobiles/endor/pubam_scout.py @@ -0,0 +1,49 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('pubam_scout') + mobileTemplate.setLevel(64) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(3) + mobileTemplate.setMaxSpawnDistance(5) + mobileTemplate.setDeathblow(True) + mobileTemplate.setSocialGroup('pubam tribe') + mobileTemplate.setAssistRange(12) + mobileTemplate.setOptionsBitmask(192) + mobileTemplate.setStalker(True) + + + templates = Vector() + templates.add('object/mobile/shared_dulok_male.iff') + templates.add('object/mobile/shared_dulok_female.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('meleeHit') + mobileTemplate.setAttacks(attacks) + + lootPoolNames_1 = ['Junk'] + lootPoolChances_1 = [100] + lootGroupChance_1 = 65 + mobileTemplate.addToLootGroups(lootPoolNames_1,lootPoolChances_1,lootGroupChance_1) + + lootPoolNames_2 = ['random_loot_primitives'] + lootPoolChances_2 = [100] + lootGroupChance_2 = 35 + mobileTemplate.addToLootGroups(lootPoolNames_2,lootPoolChances_2,lootGroupChance_2) + + core.spawnService.addMobileTemplate('pubam_scout', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/endor/pubam_spiritmaster.py b/scripts/mobiles/endor/pubam_spiritmaster.py new file mode 100644 index 00000000..734eee80 --- /dev/null +++ b/scripts/mobiles/endor/pubam_spiritmaster.py @@ -0,0 +1,49 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('pubam_spiritmaster') + mobileTemplate.setLevel(66) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(3) + mobileTemplate.setMaxSpawnDistance(5) + mobileTemplate.setDeathblow(True) + mobileTemplate.setSocialGroup('pubam tribe') + mobileTemplate.setAssistRange(12) + mobileTemplate.setOptionsBitmask(192) + mobileTemplate.setStalker(True) + + + templates = Vector() + templates.add('object/mobile/shared_dulok_male.iff') + templates.add('object/mobile/shared_dulok_female.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('meleeHit') + mobileTemplate.setAttacks(attacks) + + lootPoolNames_1 = ['Junk'] + lootPoolChances_1 = [100] + lootGroupChance_1 = 65 + mobileTemplate.addToLootGroups(lootPoolNames_1,lootPoolChances_1,lootGroupChance_1) + + lootPoolNames_2 = ['random_loot_primitives'] + lootPoolChances_2 = [100] + lootGroupChance_2 = 35 + mobileTemplate.addToLootGroups(lootPoolNames_2,lootPoolChances_2,lootGroupChance_2) + + core.spawnService.addMobileTemplate('pubam_spiritmaster', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/endor/pubam_tribesman.py b/scripts/mobiles/endor/pubam_tribesman.py new file mode 100644 index 00000000..4022ffa1 --- /dev/null +++ b/scripts/mobiles/endor/pubam_tribesman.py @@ -0,0 +1,49 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('pubam_tribesman') + mobileTemplate.setLevel(64) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(3) + mobileTemplate.setMaxSpawnDistance(5) + mobileTemplate.setDeathblow(True) + mobileTemplate.setSocialGroup('pubam tribe') + mobileTemplate.setAssistRange(12) + mobileTemplate.setOptionsBitmask(192) + mobileTemplate.setStalker(True) + + + templates = Vector() + templates.add('object/mobile/shared_dulok_male.iff') + templates.add('object/mobile/shared_dulok_female.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('meleeHit') + mobileTemplate.setAttacks(attacks) + + lootPoolNames_1 = ['Junk'] + lootPoolChances_1 = [100] + lootGroupChance_1 = 65 + mobileTemplate.addToLootGroups(lootPoolNames_1,lootPoolChances_1,lootGroupChance_1) + + lootPoolNames_2 = ['random_loot_primitives'] + lootPoolChances_2 = [100] + lootGroupChance_2 = 35 + mobileTemplate.addToLootGroups(lootPoolNames_2,lootPoolChances_2,lootGroupChance_2) + + core.spawnService.addMobileTemplate('pubam_tribesman', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/endor/putrid_borgle.py b/scripts/mobiles/endor/putrid_borgle.py new file mode 100644 index 00000000..136f8aaa --- /dev/null +++ b/scripts/mobiles/endor/putrid_borgle.py @@ -0,0 +1,42 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('putrid_borgle') + mobileTemplate.setLevel(63) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setHideType("Leathery Hide") + mobileTemplate.setHideAmount(5) + mobileTemplate.setBoneType("Avian Bones") + mobileTemplate.setBoneAmount(5) + mobileTemplate.setSocialGroup("borgle") + mobileTemplate.setAssistRange(12) + mobileTemplate.setStalker(False) + mobileTemplate.setOptionsBitmask(128) + + templates = Vector() + templates.add('object/mobile/shared_borgle.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('putrid_borgle', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/endor/queen_merek_harvester.py b/scripts/mobiles/endor/queen_merek_harvester.py new file mode 100644 index 00000000..28b1706f --- /dev/null +++ b/scripts/mobiles/endor/queen_merek_harvester.py @@ -0,0 +1,40 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('queen_merek_harvester') + mobileTemplate.setLevel(64) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(12) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1.2) + mobileTemplate.setHideType("Leathery Hide") + mobileTemplate.setHideAmount(50) + mobileTemplate.setSocialGroup("merek") + mobileTemplate.setAssistRange(12) + mobileTemplate.setStalker(False) + mobileTemplate.setOptionsBitmask(192) + + templates = Vector() + templates.add('object/mobile/shared_merek.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('queen_merek_harvester', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/endor/rabid_squall.py b/scripts/mobiles/endor/rabid_squall.py new file mode 100644 index 00000000..826b7abb --- /dev/null +++ b/scripts/mobiles/endor/rabid_squall.py @@ -0,0 +1,42 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('rabid_squall') + mobileTemplate.setLevel(71) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setHideType("Bristley Hide") + mobileTemplate.setHideAmount(12) + mobileTemplate.setBoneType("Mammal Bones") + mobileTemplate.setBoneAmount(8) + mobileTemplate.setSocialGroup("squall") + mobileTemplate.setAssistRange(12) + mobileTemplate.setStalker(False) + mobileTemplate.setOptionsBitmask(192) + + templates = Vector() + templates.add('object/mobile/shared_squall.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('rabid_squall', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/endor/radiant_lantern_bird.py b/scripts/mobiles/endor/radiant_lantern_bird.py new file mode 100644 index 00000000..04cab08f --- /dev/null +++ b/scripts/mobiles/endor/radiant_lantern_bird.py @@ -0,0 +1,42 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('radiant_lantern_bird') + mobileTemplate.setLevel(61) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setHideType("Leathery Hide") + mobileTemplate.setHideAmount(41) + mobileTemplate.setBoneType("Avian Bones") + mobileTemplate.setBoneAmount(46) + mobileTemplate.setSocialGroup("lantern") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(False) + mobileTemplate.setOptionsBitmask(128) + + templates = Vector() + templates.add('object/mobile/shared_lantern_bird.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('radiant_lantern_bird', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/endor/rancid_remmer_warrior.py b/scripts/mobiles/endor/rancid_remmer_warrior.py new file mode 100644 index 00000000..ed4c611d --- /dev/null +++ b/scripts/mobiles/endor/rancid_remmer_warrior.py @@ -0,0 +1,38 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('rancid_remmer_warrior') + mobileTemplate.setLevel(56) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(12) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("remmer") + mobileTemplate.setAssistRange(12) + mobileTemplate.setStalker(False) + mobileTemplate.setOptionsBitmask(192) + + templates = Vector() + templates.add('object/mobile/shared_remmer.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureSpitAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('rancid_remmer_warrior', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/endor/ravenous_roba_stalker.py b/scripts/mobiles/endor/ravenous_roba_stalker.py new file mode 100644 index 00000000..370997b9 --- /dev/null +++ b/scripts/mobiles/endor/ravenous_roba_stalker.py @@ -0,0 +1,38 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('ravenous_roba_stalker') + mobileTemplate.setLevel(62) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("roba") + mobileTemplate.setAssistRange(12) + mobileTemplate.setStalker(True) + mobileTemplate.setOptionsBitmask(192) + + templates = Vector() + templates.add('object/mobile/shared_roba.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('ravenous_roba_stalker', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/endor/reclusive_roba.py b/scripts/mobiles/endor/reclusive_roba.py new file mode 100644 index 00000000..960b0785 --- /dev/null +++ b/scripts/mobiles/endor/reclusive_roba.py @@ -0,0 +1,38 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('reclusive_roba') + mobileTemplate.setLevel(62) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("roba") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(False) + mobileTemplate.setOptionsBitmask(128) + + templates = Vector() + templates.add('object/mobile/shared_roba.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('reclusive_roba', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/endor/remmer_carrion_keeper.py b/scripts/mobiles/endor/remmer_carrion_keeper.py new file mode 100644 index 00000000..da8cb837 --- /dev/null +++ b/scripts/mobiles/endor/remmer_carrion_keeper.py @@ -0,0 +1,38 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('remmer_carrion_keeper') + mobileTemplate.setLevel(55) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("remmer") + mobileTemplate.setAssistRange(12) + mobileTemplate.setStalker(False) + mobileTemplate.setOptionsBitmask(192) + + templates = Vector() + templates.add('object/mobile/shared_remmer.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('remmer_carrion_keeper', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/endor/remmer_dune_scavenger.py b/scripts/mobiles/endor/remmer_dune_scavenger.py new file mode 100644 index 00000000..338bd1eb --- /dev/null +++ b/scripts/mobiles/endor/remmer_dune_scavenger.py @@ -0,0 +1,38 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('remmer_dune_scavenger') + mobileTemplate.setLevel(64) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(12) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("remmer") + mobileTemplate.setAssistRange(12) + mobileTemplate.setStalker(False) + mobileTemplate.setOptionsBitmask(128) + + templates = Vector() + templates.add('object/mobile/shared_remmer.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureSpitAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('remmer_dune_scavenger', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/endor/revered_panshee_matriarch.py b/scripts/mobiles/endor/revered_panshee_matriarch.py new file mode 100644 index 00000000..c4cabb10 --- /dev/null +++ b/scripts/mobiles/endor/revered_panshee_matriarch.py @@ -0,0 +1,73 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('revered_panshee_matriarch') + mobileTemplate.setLevel(71) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(3) + mobileTemplate.setMaxSpawnDistance(5) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1.1) + mobileTemplate.setSocialGroup('panshee tribe') + mobileTemplate.setAssistRange(1) + mobileTemplate.setOptionsBitmask(128) + mobileTemplate.setStalker(True) + + + templates = Vector() + templates.add('object/mobile/shared_dressed_ewok_f_01.iff') + templates.add('object/mobile/shared_dressed_ewok_f_02.iff') + templates.add('object/mobile/shared_dressed_ewok_f_03.iff') + templates.add('object/mobile/shared_dressed_ewok_f_04.iff') + templates.add('object/mobile/shared_dressed_ewok_f_05.iff') + templates.add('object/mobile/shared_dressed_ewok_f_06.iff') + templates.add('object/mobile/shared_dressed_ewok_f_07.iff') + templates.add('object/mobile/shared_dressed_ewok_f_08.iff') + templates.add('object/mobile/shared_dressed_ewok_f_09.iff') + templates.add('object/mobile/shared_dressed_ewok_f_10.iff') + templates.add('object/mobile/shared_dressed_ewok_f_11.iff') + templates.add('object/mobile/shared_dressed_ewok_f_12.iff') + templates.add('object/mobile/shared_dressed_ewok_m_01.iff') + templates.add('object/mobile/shared_dressed_ewok_m_02.iff') + templates.add('object/mobile/shared_dressed_ewok_m_03.iff') + templates.add('object/mobile/shared_dressed_ewok_m_04.iff') + templates.add('object/mobile/shared_dressed_ewok_m_05.iff') + templates.add('object/mobile/shared_dressed_ewok_m_06.iff') + templates.add('object/mobile/shared_dressed_ewok_m_07.iff') + templates.add('object/mobile/shared_dressed_ewok_m_08.iff') + templates.add('object/mobile/shared_dressed_ewok_m_09.iff') + templates.add('object/mobile/shared_dressed_ewok_m_10.iff') + templates.add('object/mobile/shared_dressed_ewok_m_11.iff') + templates.add('object/mobile/shared_dressed_ewok_m_12.iff') + + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('meleeHit') + mobileTemplate.setAttacks(attacks) + + lootPoolNames_1 = ['Junk'] + lootPoolChances_1 = [100] + lootGroupChance_1 = 65 + mobileTemplate.addToLootGroups(lootPoolNames_1,lootPoolChances_1,lootGroupChance_1) + + lootPoolNames_2 = ['random_loot_primitives'] + lootPoolChances_2 = [100] + lootGroupChance_2 = 35 + mobileTemplate.addToLootGroups(lootPoolNames_2,lootPoolChances_2,lootGroupChance_2) + + core.spawnService.addMobileTemplate('revered_panshee_matriarch', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/endor/roaming_bordok_stud.py b/scripts/mobiles/endor/roaming_bordok_stud.py new file mode 100644 index 00000000..a2935c51 --- /dev/null +++ b/scripts/mobiles/endor/roaming_bordok_stud.py @@ -0,0 +1,38 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('roaming_bordok_stud') + mobileTemplate.setLevel(62) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("bordok") + mobileTemplate.setAssistRange(0) + mobileTemplate.setOptionsBitmask(128) + mobileTemplate.setStalker(False) + + templates = Vector() + templates.add('object/mobile/shared_bordok.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('roaming_bordok_stud', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/endor/roaming_desert_borgle.py b/scripts/mobiles/endor/roaming_desert_borgle.py new file mode 100644 index 00000000..4c3c5c0d --- /dev/null +++ b/scripts/mobiles/endor/roaming_desert_borgle.py @@ -0,0 +1,42 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('borgle_desert_roamer') + mobileTemplate.setLevel(63) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setHideType("Leathery Hide") + mobileTemplate.setHideAmount(5) + mobileTemplate.setBoneType("Avian Bones") + mobileTemplate.setBoneAmount(5) + mobileTemplate.setSocialGroup("borgle") + mobileTemplate.setAssistRange(12) + mobileTemplate.setStalker(False) + mobileTemplate.setOptionsBitmask(192) + + templates = Vector() + templates.add('object/mobile/shared_borgle.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('roaming_desert_borgle', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/endor/roba.py b/scripts/mobiles/endor/roba.py new file mode 100644 index 00000000..e290e4dc --- /dev/null +++ b/scripts/mobiles/endor/roba.py @@ -0,0 +1,38 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('roba') + mobileTemplate.setLevel(62) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("roba") + mobileTemplate.setAssistRange(0) + mobileTemplate.setOptionsBitmask(128) + mobileTemplate.setStalker(False) + + templates = Vector() + templates.add('object/mobile/shared_roba.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('roba', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/endor/roba_boar.py b/scripts/mobiles/endor/roba_boar.py new file mode 100644 index 00000000..333481ae --- /dev/null +++ b/scripts/mobiles/endor/roba_boar.py @@ -0,0 +1,38 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('roba_boar') + mobileTemplate.setLevel(62) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1.1) + mobileTemplate.setSocialGroup("roba") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(False) + mobileTemplate.setOptionsBitmask(192) + + templates = Vector() + templates.add('object/mobile/shared_roba.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('roba_boar', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/endor/roba_pack_leader.py b/scripts/mobiles/endor/roba_pack_leader.py new file mode 100644 index 00000000..d24375b3 --- /dev/null +++ b/scripts/mobiles/endor/roba_pack_leader.py @@ -0,0 +1,38 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('roba_pack_leader') + mobileTemplate.setLevel(62) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("bageraset") + mobileTemplate.setAssistRange(0) + mobileTemplate.setOptionsBitmask(128) + mobileTemplate.setStalker(True) + + templates = Vector() + templates.add('object/mobile/shared_roba.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('roba_pack_leader', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/endor/roba_runt.py b/scripts/mobiles/endor/roba_runt.py new file mode 100644 index 00000000..bf7c0e26 --- /dev/null +++ b/scripts/mobiles/endor/roba_runt.py @@ -0,0 +1,38 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('roba_runt') + mobileTemplate.setLevel(62) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(.5) + mobileTemplate.setSocialGroup("roba") + mobileTemplate.setAssistRange(0) + mobileTemplate.setOptionsBitmask(128) + mobileTemplate.setStalker(False) + + templates = Vector() + templates.add('object/mobile/shared_roba.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('roba_runt', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/endor/rotten_gut_remmer_king.py b/scripts/mobiles/endor/rotten_gut_remmer_king.py new file mode 100644 index 00000000..646ad605 --- /dev/null +++ b/scripts/mobiles/endor/rotten_gut_remmer_king.py @@ -0,0 +1,38 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('rotten_gut_remmer_king') + mobileTemplate.setLevel(60) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(True) + mobileTemplate.setScale(1.2) + mobileTemplate.setSocialGroup("remmer") + mobileTemplate.setAssistRange(12) + mobileTemplate.setStalker(False) + mobileTemplate.setOptionsBitmask(192) + + templates = Vector() + templates.add('object/mobile/shared_remmer.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('rotten_gut_remmer_king', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/endor/sanguin_bloodseeker_hierarch.py b/scripts/mobiles/endor/sanguin_bloodseeker_hierarch.py new file mode 100644 index 00000000..eaae12ac --- /dev/null +++ b/scripts/mobiles/endor/sanguin_bloodseeker_hierarch.py @@ -0,0 +1,38 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('bloodseeker_mite_sanguine_hierarch') + mobileTemplate.setLevel(59) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(True) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("bloodseeker") + mobileTemplate.setAssistRange(12) + mobileTemplate.setStalker(False) + mobileTemplate.setOptionsBitmask(192) + + templates = Vector() + templates.add('object/mobile/shared_bloodseeker.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('sanguin_bloodseeker_hierarch.', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/endor/seasoned_gondula_warrior.py b/scripts/mobiles/endor/seasoned_gondula_warrior.py new file mode 100644 index 00000000..1d952b88 --- /dev/null +++ b/scripts/mobiles/endor/seasoned_gondula_warrior.py @@ -0,0 +1,73 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('seasoned_gondula_warrior') + mobileTemplate.setLevel(79) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(3) + mobileTemplate.setMaxSpawnDistance(5) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(.5) + mobileTemplate.setSocialGroup('gondula tribe') + mobileTemplate.setAssistRange(1) + mobileTemplate.setOptionsBitmask(128) + mobileTemplate.setStalker(True) + + + templates = Vector() + templates.add('object/mobile/shared_dressed_ewok_f_01.iff') + templates.add('object/mobile/shared_dressed_ewok_f_02.iff') + templates.add('object/mobile/shared_dressed_ewok_f_03.iff') + templates.add('object/mobile/shared_dressed_ewok_f_04.iff') + templates.add('object/mobile/shared_dressed_ewok_f_05.iff') + templates.add('object/mobile/shared_dressed_ewok_f_06.iff') + templates.add('object/mobile/shared_dressed_ewok_f_07.iff') + templates.add('object/mobile/shared_dressed_ewok_f_08.iff') + templates.add('object/mobile/shared_dressed_ewok_f_09.iff') + templates.add('object/mobile/shared_dressed_ewok_f_10.iff') + templates.add('object/mobile/shared_dressed_ewok_f_11.iff') + templates.add('object/mobile/shared_dressed_ewok_f_12.iff') + templates.add('object/mobile/shared_dressed_ewok_m_01.iff') + templates.add('object/mobile/shared_dressed_ewok_m_02.iff') + templates.add('object/mobile/shared_dressed_ewok_m_03.iff') + templates.add('object/mobile/shared_dressed_ewok_m_04.iff') + templates.add('object/mobile/shared_dressed_ewok_m_05.iff') + templates.add('object/mobile/shared_dressed_ewok_m_06.iff') + templates.add('object/mobile/shared_dressed_ewok_m_07.iff') + templates.add('object/mobile/shared_dressed_ewok_m_08.iff') + templates.add('object/mobile/shared_dressed_ewok_m_09.iff') + templates.add('object/mobile/shared_dressed_ewok_m_10.iff') + templates.add('object/mobile/shared_dressed_ewok_m_11.iff') + templates.add('object/mobile/shared_dressed_ewok_m_12.iff') + + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('meleeHit') + mobileTemplate.setAttacks(attacks) + + lootPoolNames_1 = ['Junk'] + lootPoolChances_1 = [100] + lootGroupChance_1 = 65 + mobileTemplate.addToLootGroups(lootPoolNames_1,lootPoolChances_1,lootGroupChance_1) + + lootPoolNames_2 = ['random_loot_primitives'] + lootPoolChances_2 = [100] + lootGroupChance_2 = 35 + mobileTemplate.addToLootGroups(lootPoolNames_2,lootPoolChances_2,lootGroupChance_2) + + core.spawnService.addMobileTemplate('seasoned_gondula_warrior', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/endor/seasoned_jinda_warrior.py b/scripts/mobiles/endor/seasoned_jinda_warrior.py new file mode 100644 index 00000000..363f994e --- /dev/null +++ b/scripts/mobiles/endor/seasoned_jinda_warrior.py @@ -0,0 +1,51 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('seasoned_jinda_warrior') + mobileTemplate.setLevel(66) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(3) + mobileTemplate.setMaxSpawnDistance(5) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup('jinda tribe') + mobileTemplate.setAssistRange(1) + mobileTemplate.setOptionsBitmask(128) + mobileTemplate.setStalker(True) + + + templates = Vector() + templates.add('object/mobile/shared_jinda_male.iff') + templates.add('object/mobile/shared_jinda_female.iff') + + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('meleeHit') + mobileTemplate.setAttacks(attacks) + + lootPoolNames_1 = ['Junk'] + lootPoolChances_1 = [100] + lootGroupChance_1 = 65 + mobileTemplate.addToLootGroups(lootPoolNames_1,lootPoolChances_1,lootGroupChance_1) + + lootPoolNames_2 = ['random_loot_primitives'] + lootPoolChances_2 = [100] + lootGroupChance_2 = 35 + mobileTemplate.addToLootGroups(lootPoolNames_2,lootPoolChances_2,lootGroupChance_2) + + core.spawnService.addMobileTemplate('seasoned_jinda_warrior', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/endor/seasoned_panshee_warrior.py b/scripts/mobiles/endor/seasoned_panshee_warrior.py new file mode 100644 index 00000000..38ff33a9 --- /dev/null +++ b/scripts/mobiles/endor/seasoned_panshee_warrior.py @@ -0,0 +1,73 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('seasoned_panshee_warrior') + mobileTemplate.setLevel(71) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(3) + mobileTemplate.setMaxSpawnDistance(5) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup('panshee tribe') + mobileTemplate.setAssistRange(1) + mobileTemplate.setOptionsBitmask(128) + mobileTemplate.setStalker(True) + + + templates = Vector() + templates.add('object/mobile/shared_dressed_ewok_f_01.iff') + templates.add('object/mobile/shared_dressed_ewok_f_02.iff') + templates.add('object/mobile/shared_dressed_ewok_f_03.iff') + templates.add('object/mobile/shared_dressed_ewok_f_04.iff') + templates.add('object/mobile/shared_dressed_ewok_f_05.iff') + templates.add('object/mobile/shared_dressed_ewok_f_06.iff') + templates.add('object/mobile/shared_dressed_ewok_f_07.iff') + templates.add('object/mobile/shared_dressed_ewok_f_08.iff') + templates.add('object/mobile/shared_dressed_ewok_f_09.iff') + templates.add('object/mobile/shared_dressed_ewok_f_10.iff') + templates.add('object/mobile/shared_dressed_ewok_f_11.iff') + templates.add('object/mobile/shared_dressed_ewok_f_12.iff') + templates.add('object/mobile/shared_dressed_ewok_m_01.iff') + templates.add('object/mobile/shared_dressed_ewok_m_02.iff') + templates.add('object/mobile/shared_dressed_ewok_m_03.iff') + templates.add('object/mobile/shared_dressed_ewok_m_04.iff') + templates.add('object/mobile/shared_dressed_ewok_m_05.iff') + templates.add('object/mobile/shared_dressed_ewok_m_06.iff') + templates.add('object/mobile/shared_dressed_ewok_m_07.iff') + templates.add('object/mobile/shared_dressed_ewok_m_08.iff') + templates.add('object/mobile/shared_dressed_ewok_m_09.iff') + templates.add('object/mobile/shared_dressed_ewok_m_10.iff') + templates.add('object/mobile/shared_dressed_ewok_m_11.iff') + templates.add('object/mobile/shared_dressed_ewok_m_12.iff') + + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('meleeHit') + mobileTemplate.setAttacks(attacks) + + lootPoolNames_1 = ['Junk'] + lootPoolChances_1 = [100] + lootGroupChance_1 = 65 + mobileTemplate.addToLootGroups(lootPoolNames_1,lootPoolChances_1,lootGroupChance_1) + + lootPoolNames_2 = ['random_loot_primitives'] + lootPoolChances_2 = [100] + lootGroupChance_2 = 35 + mobileTemplate.addToLootGroups(lootPoolNames_2,lootPoolChances_2,lootGroupChance_2) + + core.spawnService.addMobileTemplate('seasoned_panshee_warrior', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/endor/shaggy_donkuwah_youth.py b/scripts/mobiles/endor/shaggy_donkuwah_youth.py new file mode 100644 index 00000000..ebb448e1 --- /dev/null +++ b/scripts/mobiles/endor/shaggy_donkuwah_youth.py @@ -0,0 +1,49 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('shaggy_donkuwah_youth') + mobileTemplate.setLevel(77) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(3) + mobileTemplate.setMaxSpawnDistance(5) + mobileTemplate.setDeathblow(False) + mobileTemplate.setSocialGroup('donkuwah tribe') + mobileTemplate.setAssistRange(12) + mobileTemplate.setOptionsBitmask(192) + mobileTemplate.setStalker(True) + + + templates = Vector() + templates.add('object/mobile/shared_jinda_male.iff') + templates.add('object/mobile/shared_jinda_female.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('meleeHit') + mobileTemplate.setAttacks(attacks) + + lootPoolNames_1 = ['Junk'] + lootPoolChances_1 = [100] + lootGroupChance_1 = 65 + mobileTemplate.addToLootGroups(lootPoolNames_1,lootPoolChances_1,lootGroupChance_1) + + lootPoolNames_2 = ['random_loot_primitives'] + lootPoolChances_2 = [100] + lootGroupChance_2 = 35 + mobileTemplate.addToLootGroups(lootPoolNames_2,lootPoolChances_2,lootGroupChance_2) + + core.spawnService.addMobileTemplate('shaggy_donkuwah_youth', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/endor/shaggy_korga_youth.py b/scripts/mobiles/endor/shaggy_korga_youth.py new file mode 100644 index 00000000..f2d40766 --- /dev/null +++ b/scripts/mobiles/endor/shaggy_korga_youth.py @@ -0,0 +1,49 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('shaggy_korga_youth') + mobileTemplate.setLevel(76) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(3) + mobileTemplate.setMaxSpawnDistance(5) + mobileTemplate.setDeathblow(True) + mobileTemplate.setSocialGroup('korga tribe') + mobileTemplate.setAssistRange(12) + mobileTemplate.setOptionsBitmask(192) + mobileTemplate.setStalker(True) + + + templates = Vector() + templates.add('object/mobile/shared_dulok_male.iff') + templates.add('object/mobile/shared_dulok_female.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('meleeHit') + mobileTemplate.setAttacks(attacks) + + lootPoolNames_1 = ['Junk'] + lootPoolChances_1 = [100] + lootGroupChance_1 = 65 + mobileTemplate.addToLootGroups(lootPoolNames_1,lootPoolChances_1,lootGroupChance_1) + + lootPoolNames_2 = ['random_loot_primitives'] + lootPoolChances_2 = [100] + lootGroupChance_2 = 35 + mobileTemplate.addToLootGroups(lootPoolNames_2,lootPoolChances_2,lootGroupChance_2) + + core.spawnService.addMobileTemplate('shaggy_korga_youth', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/endor/shaggy_pubam_youth.py b/scripts/mobiles/endor/shaggy_pubam_youth.py new file mode 100644 index 00000000..635ed21f --- /dev/null +++ b/scripts/mobiles/endor/shaggy_pubam_youth.py @@ -0,0 +1,50 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('shaggy_pubam_youth') + mobileTemplate.setLevel(66) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(3) + mobileTemplate.setMaxSpawnDistance(5) + mobileTemplate.setDeathblow(True) + mobileTemplate.setSocialGroup('pubam tribe') + mobileTemplate.setAssistRange(12) + mobileTemplate.setOptionsBitmask(192) + mobileTemplate.setStalker(True) + + + + templates = Vector() + templates.add('object/mobile/shared_dulok_male.iff') + templates.add('object/mobile/shared_dulok_female.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('meleeHit') + mobileTemplate.setAttacks(attacks) + + lootPoolNames_1 = ['Junk'] + lootPoolChances_1 = [100] + lootGroupChance_1 = 65 + mobileTemplate.addToLootGroups(lootPoolNames_1,lootPoolChances_1,lootGroupChance_1) + + lootPoolNames_2 = ['random_loot_primitives'] + lootPoolChances_2 = [100] + lootGroupChance_2 = 35 + mobileTemplate.addToLootGroups(lootPoolNames_2,lootPoolChances_2,lootGroupChance_2) + + core.spawnService.addMobileTemplate('shaggy_pubam_youth', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/endor/shimmering_lantern_bird.py b/scripts/mobiles/endor/shimmering_lantern_bird.py new file mode 100644 index 00000000..9a280dc9 --- /dev/null +++ b/scripts/mobiles/endor/shimmering_lantern_bird.py @@ -0,0 +1,42 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('shimmering_lantern_bird') + mobileTemplate.setLevel(61) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setHideType("Leathery Hide") + mobileTemplate.setHideAmount(41) + mobileTemplate.setBoneType("Avian Bones") + mobileTemplate.setBoneAmount(46) + mobileTemplate.setSocialGroup("lantern") + mobileTemplate.setAssistRange(0) + mobileTemplate.setOptionsBitmask(128) + mobileTemplate.setStalker(False) + + templates = Vector() + templates.add('object/mobile/shared_lantern_bird.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('shimmering_lantern_bird', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/endor/skilled_gondula_worker.py b/scripts/mobiles/endor/skilled_gondula_worker.py new file mode 100644 index 00000000..7e272bfa --- /dev/null +++ b/scripts/mobiles/endor/skilled_gondula_worker.py @@ -0,0 +1,73 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('skilled_gondula_worker') + mobileTemplate.setLevel(79) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(3) + mobileTemplate.setMaxSpawnDistance(5) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(.5) + mobileTemplate.setSocialGroup('gondula tribe') + mobileTemplate.setAssistRange(1) + mobileTemplate.setOptionsBitmask(128) + mobileTemplate.setStalker(True) + + + templates = Vector() + templates.add('object/mobile/shared_dressed_ewok_f_01.iff') + templates.add('object/mobile/shared_dressed_ewok_f_02.iff') + templates.add('object/mobile/shared_dressed_ewok_f_03.iff') + templates.add('object/mobile/shared_dressed_ewok_f_04.iff') + templates.add('object/mobile/shared_dressed_ewok_f_05.iff') + templates.add('object/mobile/shared_dressed_ewok_f_06.iff') + templates.add('object/mobile/shared_dressed_ewok_f_07.iff') + templates.add('object/mobile/shared_dressed_ewok_f_08.iff') + templates.add('object/mobile/shared_dressed_ewok_f_09.iff') + templates.add('object/mobile/shared_dressed_ewok_f_10.iff') + templates.add('object/mobile/shared_dressed_ewok_f_11.iff') + templates.add('object/mobile/shared_dressed_ewok_f_12.iff') + templates.add('object/mobile/shared_dressed_ewok_m_01.iff') + templates.add('object/mobile/shared_dressed_ewok_m_02.iff') + templates.add('object/mobile/shared_dressed_ewok_m_03.iff') + templates.add('object/mobile/shared_dressed_ewok_m_04.iff') + templates.add('object/mobile/shared_dressed_ewok_m_05.iff') + templates.add('object/mobile/shared_dressed_ewok_m_06.iff') + templates.add('object/mobile/shared_dressed_ewok_m_07.iff') + templates.add('object/mobile/shared_dressed_ewok_m_08.iff') + templates.add('object/mobile/shared_dressed_ewok_m_09.iff') + templates.add('object/mobile/shared_dressed_ewok_m_10.iff') + templates.add('object/mobile/shared_dressed_ewok_m_11.iff') + templates.add('object/mobile/shared_dressed_ewok_m_12.iff') + + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('meleeHit') + mobileTemplate.setAttacks(attacks) + + lootPoolNames_1 = ['Junk'] + lootPoolChances_1 = [100] + lootGroupChance_1 = 65 + mobileTemplate.addToLootGroups(lootPoolNames_1,lootPoolChances_1,lootGroupChance_1) + + lootPoolNames_2 = ['random_loot_primitives'] + lootPoolChances_2 = [100] + lootGroupChance_2 = 35 + mobileTemplate.addToLootGroups(lootPoolNames_2,lootPoolChances_2,lootGroupChance_2) + + core.spawnService.addMobileTemplate('skilled_gondula_worker', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/endor/skilled_jinda_worker.py b/scripts/mobiles/endor/skilled_jinda_worker.py new file mode 100644 index 00000000..160eb2b8 --- /dev/null +++ b/scripts/mobiles/endor/skilled_jinda_worker.py @@ -0,0 +1,51 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('skilled_jinda_worker') + mobileTemplate.setLevel(64) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(3) + mobileTemplate.setMaxSpawnDistance(5) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup('jinda tribe') + mobileTemplate.setAssistRange(1) + mobileTemplate.setOptionsBitmask(128) + mobileTemplate.setStalker(True) + + + templates = Vector() + templates.add('object/mobile/shared_jinda_male.iff') + templates.add('object/mobile/shared_jinda_female.iff') + + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('meleeHit') + mobileTemplate.setAttacks(attacks) + + lootPoolNames_1 = ['Junk'] + lootPoolChances_1 = [100] + lootGroupChance_1 = 65 + mobileTemplate.addToLootGroups(lootPoolNames_1,lootPoolChances_1,lootGroupChance_1) + + lootPoolNames_2 = ['random_loot_primitives'] + lootPoolChances_2 = [100] + lootGroupChance_2 = 35 + mobileTemplate.addToLootGroups(lootPoolNames_2,lootPoolChances_2,lootGroupChance_2) + + core.spawnService.addMobileTemplate('skilled_jinda_worker', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/endor/skilled_panshee_worker.py b/scripts/mobiles/endor/skilled_panshee_worker.py new file mode 100644 index 00000000..9d06ab6e --- /dev/null +++ b/scripts/mobiles/endor/skilled_panshee_worker.py @@ -0,0 +1,73 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('skilled_panshee_worker') + mobileTemplate.setLevel(71) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(3) + mobileTemplate.setMaxSpawnDistance(5) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup('panshee tribe') + mobileTemplate.setAssistRange(1) + mobileTemplate.setOptionsBitmask(128) + mobileTemplate.setStalker(True) + + + templates = Vector() + templates.add('object/mobile/shared_dressed_ewok_f_01.iff') + templates.add('object/mobile/shared_dressed_ewok_f_02.iff') + templates.add('object/mobile/shared_dressed_ewok_f_03.iff') + templates.add('object/mobile/shared_dressed_ewok_f_04.iff') + templates.add('object/mobile/shared_dressed_ewok_f_05.iff') + templates.add('object/mobile/shared_dressed_ewok_f_06.iff') + templates.add('object/mobile/shared_dressed_ewok_f_07.iff') + templates.add('object/mobile/shared_dressed_ewok_f_08.iff') + templates.add('object/mobile/shared_dressed_ewok_f_09.iff') + templates.add('object/mobile/shared_dressed_ewok_f_10.iff') + templates.add('object/mobile/shared_dressed_ewok_f_11.iff') + templates.add('object/mobile/shared_dressed_ewok_f_12.iff') + templates.add('object/mobile/shared_dressed_ewok_m_01.iff') + templates.add('object/mobile/shared_dressed_ewok_m_02.iff') + templates.add('object/mobile/shared_dressed_ewok_m_03.iff') + templates.add('object/mobile/shared_dressed_ewok_m_04.iff') + templates.add('object/mobile/shared_dressed_ewok_m_05.iff') + templates.add('object/mobile/shared_dressed_ewok_m_06.iff') + templates.add('object/mobile/shared_dressed_ewok_m_07.iff') + templates.add('object/mobile/shared_dressed_ewok_m_08.iff') + templates.add('object/mobile/shared_dressed_ewok_m_09.iff') + templates.add('object/mobile/shared_dressed_ewok_m_10.iff') + templates.add('object/mobile/shared_dressed_ewok_m_11.iff') + templates.add('object/mobile/shared_dressed_ewok_m_12.iff') + + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('meleeHit') + mobileTemplate.setAttacks(attacks) + + lootPoolNames_1 = ['Junk'] + lootPoolChances_1 = [100] + lootGroupChance_1 = 65 + mobileTemplate.addToLootGroups(lootPoolNames_1,lootPoolChances_1,lootGroupChance_1) + + lootPoolNames_2 = ['random_loot_primitives'] + lootPoolChances_2 = [100] + lootGroupChance_2 = 35 + mobileTemplate.addToLootGroups(lootPoolNames_2,lootPoolChances_2,lootGroupChance_2) + + core.spawnService.addMobileTemplate('skilled_panshee_worker', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/endor/spooky_donkuwah_spiritmaster.py b/scripts/mobiles/endor/spooky_donkuwah_spiritmaster.py new file mode 100644 index 00000000..52f74733 --- /dev/null +++ b/scripts/mobiles/endor/spooky_donkuwah_spiritmaster.py @@ -0,0 +1,49 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('spooky_donkuwah_spiritmaster') + mobileTemplate.setLevel(78) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(3) + mobileTemplate.setMaxSpawnDistance(5) + mobileTemplate.setDeathblow(True) + mobileTemplate.setSocialGroup('donkuwah tribe') + mobileTemplate.setAssistRange(12) + mobileTemplate.setOptionsBitmask(192) + mobileTemplate.setStalker(True) + + + templates = Vector() + templates.add('object/mobile/shared_jinda_male.iff') + templates.add('object/mobile/shared_jinda_female.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('meleeHit') + mobileTemplate.setAttacks(attacks) + + lootPoolNames_1 = ['Junk'] + lootPoolChances_1 = [100] + lootGroupChance_1 = 65 + mobileTemplate.addToLootGroups(lootPoolNames_1,lootPoolChances_1,lootGroupChance_1) + + lootPoolNames_2 = ['random_loot_primitives'] + lootPoolChances_2 = [100] + lootGroupChance_2 = 35 + mobileTemplate.addToLootGroups(lootPoolNames_2,lootPoolChances_2,lootGroupChance_2) + + core.spawnService.addMobileTemplate('spooky_donkuwah_spiritmaster', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/endor/spooky_korga_spiritmaster.py b/scripts/mobiles/endor/spooky_korga_spiritmaster.py new file mode 100644 index 00000000..660d59af --- /dev/null +++ b/scripts/mobiles/endor/spooky_korga_spiritmaster.py @@ -0,0 +1,49 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('spooky_korga_spiritmaster') + mobileTemplate.setLevel(77) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(3) + mobileTemplate.setMaxSpawnDistance(5) + mobileTemplate.setDeathblow(True) + mobileTemplate.setSocialGroup('korga tribe') + mobileTemplate.setAssistRange(12) + mobileTemplate.setOptionsBitmask(192) + mobileTemplate.setStalker(True) + + + templates = Vector() + templates.add('object/mobile/shared_dulok_male.iff') + templates.add('object/mobile/shared_dulok_female.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('meleeHit') + mobileTemplate.setAttacks(attacks) + + lootPoolNames_1 = ['Junk'] + lootPoolChances_1 = [100] + lootGroupChance_1 = 65 + mobileTemplate.addToLootGroups(lootPoolNames_1,lootPoolChances_1,lootGroupChance_1) + + lootPoolNames_2 = ['random_loot_primitives'] + lootPoolChances_2 = [100] + lootGroupChance_2 = 35 + mobileTemplate.addToLootGroups(lootPoolNames_2,lootPoolChances_2,lootGroupChance_2) + + core.spawnService.addMobileTemplate('spooky_korga_spiritmaster', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/endor/spooky_pubam_spiritmaster.py b/scripts/mobiles/endor/spooky_pubam_spiritmaster.py new file mode 100644 index 00000000..df1f1a01 --- /dev/null +++ b/scripts/mobiles/endor/spooky_pubam_spiritmaster.py @@ -0,0 +1,49 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('spooky_pubam_spiritmaster') + mobileTemplate.setLevel(64) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(3) + mobileTemplate.setMaxSpawnDistance(5) + mobileTemplate.setDeathblow(True) + mobileTemplate.setSocialGroup('pubam tribe') + mobileTemplate.setAssistRange(12) + mobileTemplate.setOptionsBitmask(192) + mobileTemplate.setStalker(True) + + + templates = Vector() + templates.add('object/mobile/shared_dulok_male.iff') + templates.add('object/mobile/shared_dulok_female.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('meleeHit') + mobileTemplate.setAttacks(attacks) + + lootPoolNames_1 = ['Junk'] + lootPoolChances_1 = [100] + lootGroupChance_1 = 65 + mobileTemplate.addToLootGroups(lootPoolNames_1,lootPoolChances_1,lootGroupChance_1) + + lootPoolNames_2 = ['random_loot_primitives'] + lootPoolChances_2 = [100] + lootGroupChance_2 = 35 + mobileTemplate.addToLootGroups(lootPoolNames_2,lootPoolChances_2,lootGroupChance_2) + + core.spawnService.addMobileTemplate('spooky_pubam_spiritmaster', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/endor/squall.py b/scripts/mobiles/endor/squall.py new file mode 100644 index 00000000..2bf89f7a --- /dev/null +++ b/scripts/mobiles/endor/squall.py @@ -0,0 +1,42 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('squall') + mobileTemplate.setLevel(70) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setHideType("Bristley Hide") + mobileTemplate.setHideAmount(12) + mobileTemplate.setBoneType("Mammal Bones") + mobileTemplate.setBoneAmount(8) + mobileTemplate.setSocialGroup("squall") + mobileTemplate.setAssistRange(0) + mobileTemplate.setOptionsBitmask(128) + mobileTemplate.setStalker(False) + + templates = Vector() + templates.add('object/mobile/shared_squall.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('squall', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/endor/stoneskin_hanadak.py b/scripts/mobiles/endor/stoneskin_hanadak.py new file mode 100644 index 00000000..a8887f74 --- /dev/null +++ b/scripts/mobiles/endor/stoneskin_hanadak.py @@ -0,0 +1,44 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('stoneskin_hanadak') + mobileTemplate.setLevel(60) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(True) + mobileTemplate.setScale(1) + mobileTemplate.setMeatType("Carnivore Meat") + mobileTemplate.setMeatAmount(40) + mobileTemplate.setHideType("Bristley Hide") + mobileTemplate.setHideAmount(40) + mobileTemplate.setBoneType("Mammal Bones") + mobileTemplate.setBoneAmount(40) + mobileTemplate.setSocialGroup("hanadak") + mobileTemplate.setAssistRange(12) + mobileTemplate.setStalker(False) + mobileTemplate.setOptionsBitmask(192) + + templates = Vector() + templates.add('object/mobile/shared_hanadak.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('stoneskin_hanadak', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/endor/swirl_prong.py b/scripts/mobiles/endor/swirl_prong.py new file mode 100644 index 00000000..80755636 --- /dev/null +++ b/scripts/mobiles/endor/swirl_prong.py @@ -0,0 +1,38 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('swirl_prong') + mobileTemplate.setLevel(60) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("swirl prong") + mobileTemplate.setAssistRange(0) + mobileTemplate.setOptionsBitmask(128) + mobileTemplate.setStalker(False) + + templates = Vector() + templates.add('object/mobile/shared_swirl_prong.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('swirl_prong', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/endor/swirl_prong_impaler.py b/scripts/mobiles/endor/swirl_prong_impaler.py new file mode 100644 index 00000000..b821835f --- /dev/null +++ b/scripts/mobiles/endor/swirl_prong_impaler.py @@ -0,0 +1,38 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('swirl_prong_impaler') + mobileTemplate.setLevel(71) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("swirl prong") + mobileTemplate.setAssistRange(0) + mobileTemplate.setOptionsBitmask(128) + mobileTemplate.setStalker(False) + + templates = Vector() + templates.add('object/mobile/shared_swirl_prong.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('swirl_prong_impaler', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/endor/swirl_prong_pack_leader.py b/scripts/mobiles/endor/swirl_prong_pack_leader.py new file mode 100644 index 00000000..fc4545d4 --- /dev/null +++ b/scripts/mobiles/endor/swirl_prong_pack_leader.py @@ -0,0 +1,38 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('swirl_prong_pack_leader') + mobileTemplate.setLevel(36) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("swirl prong") + mobileTemplate.setAssistRange(0) + mobileTemplate.setOptionsBitmask(128) + mobileTemplate.setStalker(False) + + templates = Vector() + templates.add('object/mobile/shared_swirl_prong.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('swirl_prong_pack_leader', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/endor/tainted_donkuwah_dark_shaman.py b/scripts/mobiles/endor/tainted_donkuwah_dark_shaman.py new file mode 100644 index 00000000..e01351d7 --- /dev/null +++ b/scripts/mobiles/endor/tainted_donkuwah_dark_shaman.py @@ -0,0 +1,49 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('tainted_donkuwah_dark_shaman') + mobileTemplate.setLevel(79) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(3) + mobileTemplate.setMaxSpawnDistance(5) + mobileTemplate.setDeathblow(True) + mobileTemplate.setSocialGroup('donkuwah tribe') + mobileTemplate.setAssistRange(12) + mobileTemplate.setOptionsBitmask(192) + mobileTemplate.setStalker(True) + + + templates = Vector() + templates.add('object/mobile/shared_jinda_male.iff') + templates.add('object/mobile/shared_jinda_female.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('meleeHit') + mobileTemplate.setAttacks(attacks) + + lootPoolNames_1 = ['Junk'] + lootPoolChances_1 = [100] + lootGroupChance_1 = 65 + mobileTemplate.addToLootGroups(lootPoolNames_1,lootPoolChances_1,lootGroupChance_1) + + lootPoolNames_2 = ['random_loot_primitives'] + lootPoolChances_2 = [100] + lootGroupChance_2 = 35 + mobileTemplate.addToLootGroups(lootPoolNames_2,lootPoolChances_2,lootGroupChance_2) + + core.spawnService.addMobileTemplate('tainted_donkuwah_dark_shaman', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/endor/tainted_korga_dark_shaman.py b/scripts/mobiles/endor/tainted_korga_dark_shaman.py new file mode 100644 index 00000000..9c8b932f --- /dev/null +++ b/scripts/mobiles/endor/tainted_korga_dark_shaman.py @@ -0,0 +1,49 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('tainted_korga_dark_shaman') + mobileTemplate.setLevel(76) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(3) + mobileTemplate.setMaxSpawnDistance(5) + mobileTemplate.setDeathblow(True) + mobileTemplate.setSocialGroup('korga tribe') + mobileTemplate.setAssistRange(12) + mobileTemplate.setOptionsBitmask(192) + mobileTemplate.setStalker(True) + + + templates = Vector() + templates.add('object/mobile/shared_dulok_male.iff') + templates.add('object/mobile/shared_dulok_female.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('meleeHit') + mobileTemplate.setAttacks(attacks) + + lootPoolNames_1 = ['Junk'] + lootPoolChances_1 = [100] + lootGroupChance_1 = 65 + mobileTemplate.addToLootGroups(lootPoolNames_1,lootPoolChances_1,lootGroupChance_1) + + lootPoolNames_2 = ['random_loot_primitives'] + lootPoolChances_2 = [100] + lootGroupChance_2 = 35 + mobileTemplate.addToLootGroups(lootPoolNames_2,lootPoolChances_2,lootGroupChance_2) + + core.spawnService.addMobileTemplate('tainted_korga_dark_shaman', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/endor/tainted_pubam_dark_shaman.py b/scripts/mobiles/endor/tainted_pubam_dark_shaman.py new file mode 100644 index 00000000..e7d6b836 --- /dev/null +++ b/scripts/mobiles/endor/tainted_pubam_dark_shaman.py @@ -0,0 +1,49 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('tainted_pubam_dark_shaman') + mobileTemplate.setLevel(64) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(3) + mobileTemplate.setMaxSpawnDistance(5) + mobileTemplate.setDeathblow(True) + mobileTemplate.setSocialGroup('pubam tribe') + mobileTemplate.setAssistRange(12) + mobileTemplate.setOptionsBitmask(192) + mobileTemplate.setStalker(True) + + + templates = Vector() + templates.add('object/mobile/shared_dulok_male.iff') + templates.add('object/mobile/shared_dulok_female.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('meleeHit') + mobileTemplate.setAttacks(attacks) + + lootPoolNames_1 = ['Junk'] + lootPoolChances_1 = [100] + lootGroupChance_1 = 65 + mobileTemplate.addToLootGroups(lootPoolNames_1,lootPoolChances_1,lootGroupChance_1) + + lootPoolNames_2 = ['random_loot_primitives'] + lootPoolChances_2 = [100] + lootGroupChance_2 = 35 + mobileTemplate.addToLootGroups(lootPoolNames_2,lootPoolChances_2,lootGroupChance_2) + + core.spawnService.addMobileTemplate('tainted_pubam_dark_shaman', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/endor/toxic_merek_battlelord.py b/scripts/mobiles/endor/toxic_merek_battlelord.py new file mode 100644 index 00000000..41347453 --- /dev/null +++ b/scripts/mobiles/endor/toxic_merek_battlelord.py @@ -0,0 +1,40 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('toxic_merek_battlelord') + mobileTemplate.setLevel(64) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(True) + mobileTemplate.setScale(1.2) + mobileTemplate.setHideType("Leathery Hide") + mobileTemplate.setHideAmount(45) + mobileTemplate.setSocialGroup("merek") + mobileTemplate.setAssistRange(12) + mobileTemplate.setStalker(False) + mobileTemplate.setOptionsBitmask(192) + + templates = Vector() + templates.add('object/mobile/shared_merek.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('toxic_merek_battlelord', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/endor/tricky_donkuwah_scout.py b/scripts/mobiles/endor/tricky_donkuwah_scout.py new file mode 100644 index 00000000..44496a24 --- /dev/null +++ b/scripts/mobiles/endor/tricky_donkuwah_scout.py @@ -0,0 +1,49 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('tricky_donkuwah_scout') + mobileTemplate.setLevel(78) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(3) + mobileTemplate.setMaxSpawnDistance(5) + mobileTemplate.setDeathblow(False) + mobileTemplate.setSocialGroup('donkuwah tribe') + mobileTemplate.setAssistRange(12) + mobileTemplate.setOptionsBitmask(192) + mobileTemplate.setStalker(True) + + + templates = Vector() + templates.add('object/mobile/shared_jinda_male.iff') + templates.add('object/mobile/shared_jinda_female.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('meleeHit') + mobileTemplate.setAttacks(attacks) + + lootPoolNames_1 = ['Junk'] + lootPoolChances_1 = [100] + lootGroupChance_1 = 65 + mobileTemplate.addToLootGroups(lootPoolNames_1,lootPoolChances_1,lootGroupChance_1) + + lootPoolNames_2 = ['random_loot_primitives'] + lootPoolChances_2 = [100] + lootGroupChance_2 = 35 + mobileTemplate.addToLootGroups(lootPoolNames_2,lootPoolChances_2,lootGroupChance_2) + + core.spawnService.addMobileTemplate('tricky_donkuwah_scout', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/endor/tricky_korga_scout.py b/scripts/mobiles/endor/tricky_korga_scout.py new file mode 100644 index 00000000..2aae3dde --- /dev/null +++ b/scripts/mobiles/endor/tricky_korga_scout.py @@ -0,0 +1,49 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('tricky_korga_scout') + mobileTemplate.setLevel(77) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(3) + mobileTemplate.setMaxSpawnDistance(5) + mobileTemplate.setDeathblow(True) + mobileTemplate.setSocialGroup('korga tribe') + mobileTemplate.setAssistRange(12) + mobileTemplate.setOptionsBitmask(192) + mobileTemplate.setStalker(True) + + + templates = Vector() + templates.add('object/mobile/shared_dulok_male.iff') + templates.add('object/mobile/shared_dulok_female.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('meleeHit') + mobileTemplate.setAttacks(attacks) + + lootPoolNames_1 = ['Junk'] + lootPoolChances_1 = [100] + lootGroupChance_1 = 65 + mobileTemplate.addToLootGroups(lootPoolNames_1,lootPoolChances_1,lootGroupChance_1) + + lootPoolNames_2 = ['random_loot_primitives'] + lootPoolChances_2 = [100] + lootGroupChance_2 = 35 + mobileTemplate.addToLootGroups(lootPoolNames_2,lootPoolChances_2,lootGroupChance_2) + + core.spawnService.addMobileTemplate('tricky_korga_scout', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/endor/tricky_pubam_scout.py b/scripts/mobiles/endor/tricky_pubam_scout.py new file mode 100644 index 00000000..2062c2c6 --- /dev/null +++ b/scripts/mobiles/endor/tricky_pubam_scout.py @@ -0,0 +1,48 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('tricky_pubam_scout') + mobileTemplate.setLevel(64) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(3) + mobileTemplate.setMaxSpawnDistance(5) + mobileTemplate.setDeathblow(True) + mobileTemplate.setSocialGroup('pubam tribe') + mobileTemplate.setAssistRange(12) + mobileTemplate.setOptionsBitmask(192) + mobileTemplate.setStalker(True) + + templates = Vector() + templates.add('object/mobile/shared_dulok_male.iff') + templates.add('object/mobile/shared_dulok_female.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('meleeHit') + mobileTemplate.setAttacks(attacks) + + lootPoolNames_1 = ['Junk'] + lootPoolChances_1 = [100] + lootGroupChance_1 = 65 + mobileTemplate.addToLootGroups(lootPoolNames_1,lootPoolChances_1,lootGroupChance_1) + + lootPoolNames_2 = ['random_loot_primitives'] + lootPoolChances_2 = [100] + lootGroupChance_2 = 35 + mobileTemplate.addToLootGroups(lootPoolNames_2,lootPoolChances_2,lootGroupChance_2) + + core.spawnService.addMobileTemplate('tricky_pubam_scout', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/endor/venom_filled_arachne.py b/scripts/mobiles/endor/venom_filled_arachne.py new file mode 100644 index 00000000..cbbca23d --- /dev/null +++ b/scripts/mobiles/endor/venom_filled_arachne.py @@ -0,0 +1,38 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('venom_filled_arachne') + mobileTemplate.setLevel(64) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(12) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(True) + mobileTemplate.setScale(1.2) + mobileTemplate.setSocialGroup("arachne") + mobileTemplate.setAssistRange(12) + mobileTemplate.setStalker(False) + mobileTemplate.setOptionsBitmask(192) + + templates = Vector() + templates.add('object/mobile/shared_angler.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureRangedAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('venom_filled_arachne', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/endor/vicious_donkuwah_battlelord.py b/scripts/mobiles/endor/vicious_donkuwah_battlelord.py new file mode 100644 index 00000000..e0bc9153 --- /dev/null +++ b/scripts/mobiles/endor/vicious_donkuwah_battlelord.py @@ -0,0 +1,49 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('vicious_donkuwah_battlelord') + mobileTemplate.setLevel(79) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(3) + mobileTemplate.setMaxSpawnDistance(5) + mobileTemplate.setDeathblow(True) + mobileTemplate.setSocialGroup('donkuwah tribe') + mobileTemplate.setAssistRange(12) + mobileTemplate.setOptionsBitmask(192) + mobileTemplate.setStalker(True) + + + templates = Vector() + templates.add('object/mobile/shared_jinda_male.iff') + templates.add('object/mobile/shared_jinda_female.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('meleeHit') + mobileTemplate.setAttacks(attacks) + + lootPoolNames_1 = ['Junk'] + lootPoolChances_1 = [100] + lootGroupChance_1 = 65 + mobileTemplate.addToLootGroups(lootPoolNames_1,lootPoolChances_1,lootGroupChance_1) + + lootPoolNames_2 = ['random_loot_primitives'] + lootPoolChances_2 = [100] + lootGroupChance_2 = 35 + mobileTemplate.addToLootGroups(lootPoolNames_2,lootPoolChances_2,lootGroupChance_2) + + core.spawnService.addMobileTemplate('vicious_donkuwah_battlelord', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/endor/vicious_korga_battlelord.py b/scripts/mobiles/endor/vicious_korga_battlelord.py new file mode 100644 index 00000000..f23838f1 --- /dev/null +++ b/scripts/mobiles/endor/vicious_korga_battlelord.py @@ -0,0 +1,49 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('vicious_korga_battlelord') + mobileTemplate.setLevel(78) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(3) + mobileTemplate.setMaxSpawnDistance(5) + mobileTemplate.setDeathblow(True) + mobileTemplate.setSocialGroup('korga tribe') + mobileTemplate.setAssistRange(12) + mobileTemplate.setOptionsBitmask(192) + mobileTemplate.setStalker(True) + + + templates = Vector() + templates.add('object/mobile/shared_dulok_male.iff') + templates.add('object/mobile/shared_dulok_female.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('meleeHit') + mobileTemplate.setAttacks(attacks) + + lootPoolNames_1 = ['Junk'] + lootPoolChances_1 = [100] + lootGroupChance_1 = 65 + mobileTemplate.addToLootGroups(lootPoolNames_1,lootPoolChances_1,lootGroupChance_1) + + lootPoolNames_2 = ['random_loot_primitives'] + lootPoolChances_2 = [100] + lootGroupChance_2 = 35 + mobileTemplate.addToLootGroups(lootPoolNames_2,lootPoolChances_2,lootGroupChance_2) + + core.spawnService.addMobileTemplate('vicious_korga_battlelord', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/endor/vicious_pubam_battlelord.py b/scripts/mobiles/endor/vicious_pubam_battlelord.py new file mode 100644 index 00000000..3b6ab684 --- /dev/null +++ b/scripts/mobiles/endor/vicious_pubam_battlelord.py @@ -0,0 +1,49 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('vicious_pubam_battlelord') + mobileTemplate.setLevel(64) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(3) + mobileTemplate.setMaxSpawnDistance(5) + mobileTemplate.setDeathblow(True) + mobileTemplate.setSocialGroup('pubam tribe') + mobileTemplate.setAssistRange(1) + mobileTemplate.setOptionsBitmask(192) + mobileTemplate.setStalker(True) + + + templates = Vector() + templates.add('object/mobile/shared_dulok_male.iff') + templates.add('object/mobile/shared_dulok_female.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('meleeHit') + mobileTemplate.setAttacks(attacks) + + lootPoolNames_1 = ['Junk'] + lootPoolChances_1 = [100] + lootGroupChance_1 = 65 + mobileTemplate.addToLootGroups(lootPoolNames_1,lootPoolChances_1,lootGroupChance_1) + + lootPoolNames_2 = ['random_loot_primitives'] + lootPoolChances_2 = [100] + lootGroupChance_2 = 35 + mobileTemplate.addToLootGroups(lootPoolNames_2,lootPoolChances_2,lootGroupChance_2) + + core.spawnService.addMobileTemplate('vicious_pubam_battlelord', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/endor/vile_donkuwah_battlelord.py b/scripts/mobiles/endor/vile_donkuwah_battlelord.py new file mode 100644 index 00000000..b53003c9 --- /dev/null +++ b/scripts/mobiles/endor/vile_donkuwah_battlelord.py @@ -0,0 +1,49 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('vile_donkuwah_battlelord') + mobileTemplate.setLevel(79) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(3) + mobileTemplate.setMaxSpawnDistance(5) + mobileTemplate.setDeathblow(True) + mobileTemplate.setSocialGroup('donkuwah tribe') + mobileTemplate.setAssistRange(12) + mobileTemplate.setOptionsBitmask(192) + mobileTemplate.setStalker(True) + + + templates = Vector() + templates.add('object/mobile/shared_jinda_male.iff') + templates.add('object/mobile/shared_jinda_female.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('meleeHit') + mobileTemplate.setAttacks(attacks) + + lootPoolNames_1 = ['Junk'] + lootPoolChances_1 = [100] + lootGroupChance_1 = 65 + mobileTemplate.addToLootGroups(lootPoolNames_1,lootPoolChances_1,lootGroupChance_1) + + lootPoolNames_2 = ['random_loot_primitives'] + lootPoolChances_2 = [100] + lootGroupChance_2 = 35 + mobileTemplate.addToLootGroups(lootPoolNames_2,lootPoolChances_2,lootGroupChance_2) + + core.spawnService.addMobileTemplate('vile_donkuwah_battlelord', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/endor/vile_korga_battlelord.py b/scripts/mobiles/endor/vile_korga_battlelord.py new file mode 100644 index 00000000..715abf14 --- /dev/null +++ b/scripts/mobiles/endor/vile_korga_battlelord.py @@ -0,0 +1,49 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('vile_korga_battlelord') + mobileTemplate.setLevel(78) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(3) + mobileTemplate.setMaxSpawnDistance(5) + mobileTemplate.setDeathblow(True) + mobileTemplate.setSocialGroup('korga tribe') + mobileTemplate.setAssistRange(12) + mobileTemplate.setOptionsBitmask(192) + mobileTemplate.setStalker(True) + + + templates = Vector() + templates.add('object/mobile/shared_dulok_male.iff') + templates.add('object/mobile/shared_dulok_female.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('meleeHit') + mobileTemplate.setAttacks(attacks) + + lootPoolNames_1 = ['Junk'] + lootPoolChances_1 = [100] + lootGroupChance_1 = 65 + mobileTemplate.addToLootGroups(lootPoolNames_1,lootPoolChances_1,lootGroupChance_1) + + lootPoolNames_2 = ['random_loot_primitives'] + lootPoolChances_2 = [100] + lootGroupChance_2 = 35 + mobileTemplate.addToLootGroups(lootPoolNames_2,lootPoolChances_2,lootGroupChance_2) + + core.spawnService.addMobileTemplate('vile_korga_battlelord', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/endor/wandering_desert_marauder.py b/scripts/mobiles/endor/wandering_desert_marauder.py new file mode 100644 index 00000000..51647877 --- /dev/null +++ b/scripts/mobiles/endor/wandering_desert_marauder.py @@ -0,0 +1,45 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('wandering_desert_marauder') + mobileTemplate.setLevel(77) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(1) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(True) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("marauder") + mobileTemplate.setAssistRange(12) + mobileTemplate.setStalker(False) + mobileTemplate.setOptionsBitmask(192) + + templates = Vector() + templates.add('object/mobile/shared_marauder_male_01.iff') + templates.add('object/mobile/shared_marauder_male_02.iff') + templates.add('object/mobile/shared_marauder_male_02.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/rifle/shared_rifle_e11.iff', 1, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedshot') + mobileTemplate.setAttacks(attacks) + + lootPoolNames_1 = ['Junk'] + lootPoolChances_1 = [100] + lootGroupChance_1 = 100 + mobileTemplate.addToLootGroups(lootPoolNames_1,lootPoolChances_1,lootGroupChance_1) + + core.spawnService.addMobileTemplate('wandering_desert_marauder', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/endor/weathered_gondula_shaman.py b/scripts/mobiles/endor/weathered_gondula_shaman.py new file mode 100644 index 00000000..a903a2be --- /dev/null +++ b/scripts/mobiles/endor/weathered_gondula_shaman.py @@ -0,0 +1,73 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('weathered_gondula_shaman') + mobileTemplate.setLevel(78) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(3) + mobileTemplate.setMaxSpawnDistance(5) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup('gondula tribe') + mobileTemplate.setAssistRange(1) + mobileTemplate.setOptionsBitmask(128) + mobileTemplate.setStalker(True) + + + templates = Vector() + templates.add('object/mobile/shared_dressed_ewok_f_01.iff') + templates.add('object/mobile/shared_dressed_ewok_f_02.iff') + templates.add('object/mobile/shared_dressed_ewok_f_03.iff') + templates.add('object/mobile/shared_dressed_ewok_f_04.iff') + templates.add('object/mobile/shared_dressed_ewok_f_05.iff') + templates.add('object/mobile/shared_dressed_ewok_f_06.iff') + templates.add('object/mobile/shared_dressed_ewok_f_07.iff') + templates.add('object/mobile/shared_dressed_ewok_f_08.iff') + templates.add('object/mobile/shared_dressed_ewok_f_09.iff') + templates.add('object/mobile/shared_dressed_ewok_f_10.iff') + templates.add('object/mobile/shared_dressed_ewok_f_11.iff') + templates.add('object/mobile/shared_dressed_ewok_f_12.iff') + templates.add('object/mobile/shared_dressed_ewok_m_01.iff') + templates.add('object/mobile/shared_dressed_ewok_m_02.iff') + templates.add('object/mobile/shared_dressed_ewok_m_03.iff') + templates.add('object/mobile/shared_dressed_ewok_m_04.iff') + templates.add('object/mobile/shared_dressed_ewok_m_05.iff') + templates.add('object/mobile/shared_dressed_ewok_m_06.iff') + templates.add('object/mobile/shared_dressed_ewok_m_07.iff') + templates.add('object/mobile/shared_dressed_ewok_m_08.iff') + templates.add('object/mobile/shared_dressed_ewok_m_09.iff') + templates.add('object/mobile/shared_dressed_ewok_m_10.iff') + templates.add('object/mobile/shared_dressed_ewok_m_11.iff') + templates.add('object/mobile/shared_dressed_ewok_m_12.iff') + + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('meleeHit') + mobileTemplate.setAttacks(attacks) + + lootPoolNames_1 = ['Junk'] + lootPoolChances_1 = [100] + lootGroupChance_1 = 65 + mobileTemplate.addToLootGroups(lootPoolNames_1,lootPoolChances_1,lootGroupChance_1) + + lootPoolNames_2 = ['random_loot_primitives'] + lootPoolChances_2 = [100] + lootGroupChance_2 = 35 + mobileTemplate.addToLootGroups(lootPoolNames_2,lootPoolChances_2,lootGroupChance_2) + + core.spawnService.addMobileTemplate('weathered_gondula_shaman', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/endor/weathered_jinda_shaman.py b/scripts/mobiles/endor/weathered_jinda_shaman.py new file mode 100644 index 00000000..aa39bbc0 --- /dev/null +++ b/scripts/mobiles/endor/weathered_jinda_shaman.py @@ -0,0 +1,51 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('weathered_jinda_shaman') + mobileTemplate.setLevel(66) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(3) + mobileTemplate.setMaxSpawnDistance(5) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup('jinda tribe') + mobileTemplate.setAssistRange(1) + mobileTemplate.setOptionsBitmask(128) + mobileTemplate.setStalker(True) + + + templates = Vector() + templates.add('object/mobile/shared_jinda_male.iff') + templates.add('object/mobile/shared_jinda_female.iff') + + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('meleeHit') + mobileTemplate.setAttacks(attacks) + + lootPoolNames_1 = ['Junk'] + lootPoolChances_1 = [100] + lootGroupChance_1 = 65 + mobileTemplate.addToLootGroups(lootPoolNames_1,lootPoolChances_1,lootGroupChance_1) + + lootPoolNames_2 = ['random_loot_primitives'] + lootPoolChances_2 = [100] + lootGroupChance_2 = 35 + mobileTemplate.addToLootGroups(lootPoolNames_2,lootPoolChances_2,lootGroupChance_2) + + core.spawnService.addMobileTemplate('weathered_jinda_shaman', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/endor/weathered_panshee_shaman.py b/scripts/mobiles/endor/weathered_panshee_shaman.py new file mode 100644 index 00000000..23f52eaf --- /dev/null +++ b/scripts/mobiles/endor/weathered_panshee_shaman.py @@ -0,0 +1,73 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('weathered_panshee_shaman') + mobileTemplate.setLevel(70) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(3) + mobileTemplate.setMaxSpawnDistance(5) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup('panshee tribe') + mobileTemplate.setAssistRange(1) + mobileTemplate.setOptionsBitmask(128) + mobileTemplate.setStalker(True) + + + templates = Vector() + templates.add('object/mobile/shared_dressed_ewok_f_01.iff') + templates.add('object/mobile/shared_dressed_ewok_f_02.iff') + templates.add('object/mobile/shared_dressed_ewok_f_03.iff') + templates.add('object/mobile/shared_dressed_ewok_f_04.iff') + templates.add('object/mobile/shared_dressed_ewok_f_05.iff') + templates.add('object/mobile/shared_dressed_ewok_f_06.iff') + templates.add('object/mobile/shared_dressed_ewok_f_07.iff') + templates.add('object/mobile/shared_dressed_ewok_f_08.iff') + templates.add('object/mobile/shared_dressed_ewok_f_09.iff') + templates.add('object/mobile/shared_dressed_ewok_f_10.iff') + templates.add('object/mobile/shared_dressed_ewok_f_11.iff') + templates.add('object/mobile/shared_dressed_ewok_f_12.iff') + templates.add('object/mobile/shared_dressed_ewok_m_01.iff') + templates.add('object/mobile/shared_dressed_ewok_m_02.iff') + templates.add('object/mobile/shared_dressed_ewok_m_03.iff') + templates.add('object/mobile/shared_dressed_ewok_m_04.iff') + templates.add('object/mobile/shared_dressed_ewok_m_05.iff') + templates.add('object/mobile/shared_dressed_ewok_m_06.iff') + templates.add('object/mobile/shared_dressed_ewok_m_07.iff') + templates.add('object/mobile/shared_dressed_ewok_m_08.iff') + templates.add('object/mobile/shared_dressed_ewok_m_09.iff') + templates.add('object/mobile/shared_dressed_ewok_m_10.iff') + templates.add('object/mobile/shared_dressed_ewok_m_11.iff') + templates.add('object/mobile/shared_dressed_ewok_m_12.iff') + + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('meleeHit') + mobileTemplate.setAttacks(attacks) + + lootPoolNames_1 = ['Junk'] + lootPoolChances_1 = [100] + lootGroupChance_1 = 65 + mobileTemplate.addToLootGroups(lootPoolNames_1,lootPoolChances_1,lootGroupChance_1) + + lootPoolNames_2 = ['random_loot_primitives'] + lootPoolChances_2 = [100] + lootGroupChance_2 = 35 + mobileTemplate.addToLootGroups(lootPoolNames_2,lootPoolChances_2,lootGroupChance_2) + + core.spawnService.addMobileTemplate('weathered_panshee_shaman', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/endor/wise_gondula_ritualist.py b/scripts/mobiles/endor/wise_gondula_ritualist.py new file mode 100644 index 00000000..1c9d0ecc --- /dev/null +++ b/scripts/mobiles/endor/wise_gondula_ritualist.py @@ -0,0 +1,73 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('wise_gondula_ritualist') + mobileTemplate.setLevel(79) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(3) + mobileTemplate.setMaxSpawnDistance(5) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup('gondula tribe') + mobileTemplate.setAssistRange(1) + mobileTemplate.setOptionsBitmask(128) + mobileTemplate.setStalker(True) + + + templates = Vector() + templates.add('object/mobile/shared_dressed_ewok_f_01.iff') + templates.add('object/mobile/shared_dressed_ewok_f_02.iff') + templates.add('object/mobile/shared_dressed_ewok_f_03.iff') + templates.add('object/mobile/shared_dressed_ewok_f_04.iff') + templates.add('object/mobile/shared_dressed_ewok_f_05.iff') + templates.add('object/mobile/shared_dressed_ewok_f_06.iff') + templates.add('object/mobile/shared_dressed_ewok_f_07.iff') + templates.add('object/mobile/shared_dressed_ewok_f_08.iff') + templates.add('object/mobile/shared_dressed_ewok_f_09.iff') + templates.add('object/mobile/shared_dressed_ewok_f_10.iff') + templates.add('object/mobile/shared_dressed_ewok_f_11.iff') + templates.add('object/mobile/shared_dressed_ewok_f_12.iff') + templates.add('object/mobile/shared_dressed_ewok_m_01.iff') + templates.add('object/mobile/shared_dressed_ewok_m_02.iff') + templates.add('object/mobile/shared_dressed_ewok_m_03.iff') + templates.add('object/mobile/shared_dressed_ewok_m_04.iff') + templates.add('object/mobile/shared_dressed_ewok_m_05.iff') + templates.add('object/mobile/shared_dressed_ewok_m_06.iff') + templates.add('object/mobile/shared_dressed_ewok_m_07.iff') + templates.add('object/mobile/shared_dressed_ewok_m_08.iff') + templates.add('object/mobile/shared_dressed_ewok_m_09.iff') + templates.add('object/mobile/shared_dressed_ewok_m_10.iff') + templates.add('object/mobile/shared_dressed_ewok_m_11.iff') + templates.add('object/mobile/shared_dressed_ewok_m_12.iff') + + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('meleeHit') + mobileTemplate.setAttacks(attacks) + + lootPoolNames_1 = ['Junk'] + lootPoolChances_1 = [100] + lootGroupChance_1 = 65 + mobileTemplate.addToLootGroups(lootPoolNames_1,lootPoolChances_1,lootGroupChance_1) + + lootPoolNames_2 = ['random_loot_primitives'] + lootPoolChances_2 = [100] + lootGroupChance_2 = 35 + mobileTemplate.addToLootGroups(lootPoolNames_2,lootPoolChances_2,lootGroupChance_2) + + core.spawnService.addMobileTemplate('wise_gondula_ritualist', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/endor/wise_jinda_ritualist.py b/scripts/mobiles/endor/wise_jinda_ritualist.py new file mode 100644 index 00000000..f49bbd75 --- /dev/null +++ b/scripts/mobiles/endor/wise_jinda_ritualist.py @@ -0,0 +1,51 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('wise_jinda_ritualist') + mobileTemplate.setLevel(67) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(3) + mobileTemplate.setMaxSpawnDistance(5) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup('jinda tribe') + mobileTemplate.setAssistRange(1) + mobileTemplate.setOptionsBitmask(128) + mobileTemplate.setStalker(True) + + + templates = Vector() + templates.add('object/mobile/shared_jinda_male.iff') + templates.add('object/mobile/shared_jinda_female.iff') + + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('meleeHit') + mobileTemplate.setAttacks(attacks) + + lootPoolNames_1 = ['Junk'] + lootPoolChances_1 = [100] + lootGroupChance_1 = 65 + mobileTemplate.addToLootGroups(lootPoolNames_1,lootPoolChances_1,lootGroupChance_1) + + lootPoolNames_2 = ['random_loot_primitives'] + lootPoolChances_2 = [100] + lootGroupChance_2 = 35 + mobileTemplate.addToLootGroups(lootPoolNames_2,lootPoolChances_2,lootGroupChance_2) + + core.spawnService.addMobileTemplate('wise_jinda_ritualist', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/endor/wise_panshee_ritualist.py b/scripts/mobiles/endor/wise_panshee_ritualist.py new file mode 100644 index 00000000..60d2e2f6 --- /dev/null +++ b/scripts/mobiles/endor/wise_panshee_ritualist.py @@ -0,0 +1,73 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('wise_panshee_ritualist') + mobileTemplate.setLevel(70) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(3) + mobileTemplate.setMaxSpawnDistance(5) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup('panshee tribe') + mobileTemplate.setAssistRange(1) + mobileTemplate.setOptionsBitmask(128) + mobileTemplate.setStalker(True) + + + templates = Vector() + templates.add('object/mobile/shared_dressed_ewok_f_01.iff') + templates.add('object/mobile/shared_dressed_ewok_f_02.iff') + templates.add('object/mobile/shared_dressed_ewok_f_03.iff') + templates.add('object/mobile/shared_dressed_ewok_f_04.iff') + templates.add('object/mobile/shared_dressed_ewok_f_05.iff') + templates.add('object/mobile/shared_dressed_ewok_f_06.iff') + templates.add('object/mobile/shared_dressed_ewok_f_07.iff') + templates.add('object/mobile/shared_dressed_ewok_f_08.iff') + templates.add('object/mobile/shared_dressed_ewok_f_09.iff') + templates.add('object/mobile/shared_dressed_ewok_f_10.iff') + templates.add('object/mobile/shared_dressed_ewok_f_11.iff') + templates.add('object/mobile/shared_dressed_ewok_f_12.iff') + templates.add('object/mobile/shared_dressed_ewok_m_01.iff') + templates.add('object/mobile/shared_dressed_ewok_m_02.iff') + templates.add('object/mobile/shared_dressed_ewok_m_03.iff') + templates.add('object/mobile/shared_dressed_ewok_m_04.iff') + templates.add('object/mobile/shared_dressed_ewok_m_05.iff') + templates.add('object/mobile/shared_dressed_ewok_m_06.iff') + templates.add('object/mobile/shared_dressed_ewok_m_07.iff') + templates.add('object/mobile/shared_dressed_ewok_m_08.iff') + templates.add('object/mobile/shared_dressed_ewok_m_09.iff') + templates.add('object/mobile/shared_dressed_ewok_m_10.iff') + templates.add('object/mobile/shared_dressed_ewok_m_11.iff') + templates.add('object/mobile/shared_dressed_ewok_m_12.iff') + + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('meleeHit') + mobileTemplate.setAttacks(attacks) + + lootPoolNames_1 = ['Junk'] + lootPoolChances_1 = [100] + lootGroupChance_1 = 65 + mobileTemplate.addToLootGroups(lootPoolNames_1,lootPoolChances_1,lootGroupChance_1) + + lootPoolNames_2 = ['random_loot_primitives'] + lootPoolChances_2 = [100] + lootGroupChance_2 = 35 + mobileTemplate.addToLootGroups(lootPoolNames_2,lootPoolChances_2,lootGroupChance_2) + + core.spawnService.addMobileTemplate('wise_panshee_ritualist', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/forage/goon.py b/scripts/mobiles/forage/goon.py new file mode 100644 index 00000000..16dbc898 --- /dev/null +++ b/scripts/mobiles/forage/goon.py @@ -0,0 +1,39 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('forage_goon') + mobileTemplate.setLevel(1) + mobileTemplate.setDifficulty(1) + mobileTemplate.setAttackRange(6) + mobileTemplate.setAttackSpeed(1.0) + + templates = Vector() + templates.add('object/mobile/shared_dressed_criminal_assassin_human_female_01.iff') + templates.add('object/mobile/shared_dressed_criminal_assassin_human_male_01.iff') + templates.add('object/mobile/shared_twilek_male.iff') + templates.add('object/mobile/shared_dressed_binayre_pirate_zabrak_male_01.iff') + templates.add('object/mobile/shared_dressed_borvos_thug.iff') + templates.add('object/mobile/shared_wookiee_male.iff') + + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/carbine/shared_carbine_dh17.iff', 1, 0.6) + weaponTemplates.add(weapontemplate) + weapontemplate = WeaponTemplate('object/weapon/ranged/pistol/shared_pistol_dl44.iff', 2, 0.4) + weaponTemplates.add(weapontemplate) + weapontemplate = WeaponTemplate('object/weapon/ranged/rifle/shared_rifle_dlt20a.iff', 0, 0.8) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedShot') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('forage_goon', mobileTemplate) + \ No newline at end of file diff --git a/scripts/mobiles/forage/treasure_guard.py b/scripts/mobiles/forage/treasure_guard.py new file mode 100644 index 00000000..4071449b --- /dev/null +++ b/scripts/mobiles/forage/treasure_guard.py @@ -0,0 +1,57 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('treasure_guard') + mobileTemplate.setLevel(1) + mobileTemplate.setDifficulty(1) + mobileTemplate.setAttackRange(6) + mobileTemplate.setAttackSpeed(1.0) + + templates = Vector() + templates.add('object/mobile/shared_dressed_dark_jedi_male_human_01.iff') + templates.add('object/mobile/shared_dressed_dark_jedi_male_human_02.iff') + templates.add('object/mobile/shared_dressed_dark_jedi_male_human_03.iff') + templates.add('object/mobile/shared_dressed_dark_jedi_male_human_04.iff') + templates.add('object/mobile/shared_dressed_dark_jedi_male_human_05.iff') + templates.add('object/mobile/shared_dressed_dark_jedi_male_human_06.iff') + templates.add('object/mobile/shared_dressed_dark_jedi_female_human_01.iff') + templates.add('object/mobile/shared_dressed_dark_jedi_female_human_02.iff') + templates.add('object/mobile/shared_dressed_dark_jedi_female_human_03.iff') + templates.add('object/mobile/shared_dressed_dark_jedi_female_human_04.iff') + templates.add('object/mobile/shared_dressed_dark_jedi_male_twk_01.iff') + templates.add('object/mobile/shared_dressed_dark_jedi_male_twk_02.iff') + templates.add('object/mobile/shared_dressed_dark_jedi_male_twk_03.iff') + templates.add('object/mobile/shared_dressed_dark_jedi_male_zab_01.iff') + templates.add('object/mobile/shared_dressed_dark_jedi_male_zab_02.iff') + templates.add('object/mobile/shared_dressed_dark_jedi_male_zab_03.iff') + templates.add('object/mobile/shared_dressed_dark_jedi_female_twk_01.iff') + templates.add('object/mobile/shared_dressed_dark_jedi_female_twk_02.iff') + templates.add('object/mobile/shared_dressed_dark_jedi_female_twk_03.iff') + templates.add('object/mobile/shared_dressed_dark_jedi_female_zab_01.iff') + templates.add('object/mobile/shared_dressed_dark_jedi_female_zab_02.iff') + templates.add('object/mobile/shared_dressed_dark_jedi_female_zab_03.iff') + + + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/sword/crafted_saber/shared_sword_lightsaber_one_handed_gen5.iff', 9, 1.0) + weaponTemplates.add(weapontemplate) + weapontemplate = WeaponTemplate('object/weapon/melee/2h_sword/crafted_saber/shared_sword_lightsaber_two_handed_gen5.iff', 10, 1.0) + weaponTemplates.add(weapontemplate) + weapontemplate = WeaponTemplate('object/weapon/melee/polearm/crafted_saber/shared_sword_lightsaber_polearm_gen5.iff', 11, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('saberHit') + mobileTemplate.setDefaultAttack('fs_flurry_1') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('treasure_guard', mobileTemplate) + \ No newline at end of file diff --git a/scripts/mobiles/forage/worm.py b/scripts/mobiles/forage/worm.py new file mode 100644 index 00000000..c8e96a8c --- /dev/null +++ b/scripts/mobiles/forage/worm.py @@ -0,0 +1,39 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('forage_worm') + mobileTemplate.setLevel(1) + mobileTemplate.setDifficulty(1) + mobileTemplate.setAttackRange(6) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + + templates = Vector() + templates.add('object/mobile/shared_col_forage_aggravated_worm.iff') + templates.add('object/mobile/shared_col_forage_angry_worm.iff') + templates.add('object/mobile/shared_col_forage_brutal_worm.iff') + templates.add('object/mobile/shared_col_forage_carnivorous_worm.iff') + templates.add('object/mobile/shared_col_forage_ferocious_worm.iff') + templates.add('object/mobile/shared_col_forage_fierce_worm.iff') + templates.add('object/mobile/shared_col_forage_hungry_worm.iff') + templates.add('object/mobile/shared_col_forage_oozing_worm.iff') + templates.add('object/mobile/shared_col_forage_savage_worm.iff') + templates.add('object/mobile/shared_col_forage_territorial_worm.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + #mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('forage_worm', mobileTemplate) + \ No newline at end of file diff --git a/scripts/mobiles/generic/faction/imperial/ace_imp_bombardier_50.py b/scripts/mobiles/generic/faction/imperial/ace_imp_bombardier_50.py new file mode 100644 index 00000000..99d66d7f --- /dev/null +++ b/scripts/mobiles/generic/faction/imperial/ace_imp_bombardier_50.py @@ -0,0 +1,39 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('crackdown_stormtrooper_bombardier_hard') + mobileTemplate.setLevel(50) + mobileTemplate.setDifficulty(1) + mobileTemplate.setAttackRange(15) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(1) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("imperial") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(False) + mobileTemplate.setFaction("imperial") + mobileTemplate.setFactionStatus(1) + + templates = Vector() + templates.add('object/mobile/shared_dressed_stormtrooper_bombardier_m.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/carbine/shared_carbine_e11.iff', 1, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedShot') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('imp_bombardier_50', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/generic/faction/imperial/ace_imp_bombardier_74.py b/scripts/mobiles/generic/faction/imperial/ace_imp_bombardier_74.py new file mode 100644 index 00000000..96ecca64 --- /dev/null +++ b/scripts/mobiles/generic/faction/imperial/ace_imp_bombardier_74.py @@ -0,0 +1,39 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('crackdown_stormtrooper_bombardier_hard') + mobileTemplate.setLevel(74) + mobileTemplate.setDifficulty(1) + mobileTemplate.setAttackRange(15) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(1) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("imperial") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(False) + mobileTemplate.setFaction("imperial") + mobileTemplate.setFactionStatus(1) + + templates = Vector() + templates.add('object/mobile/shared_dressed_stormtrooper_bombardier_m.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/carbine/shared_carbine_e11.iff', 1, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedShot') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('imp_bombardier_74', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/generic/faction/imperial/ace_imp_bombardier_89.py b/scripts/mobiles/generic/faction/imperial/ace_imp_bombardier_89.py new file mode 100644 index 00000000..366d5e69 --- /dev/null +++ b/scripts/mobiles/generic/faction/imperial/ace_imp_bombardier_89.py @@ -0,0 +1,39 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('crackdown_stormtrooper_bombardier_hard') + mobileTemplate.setLevel(89) + mobileTemplate.setDifficulty(1) + mobileTemplate.setAttackRange(15) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(1) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("imperial") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(False) + mobileTemplate.setFaction("imperial") + mobileTemplate.setFactionStatus(1) + + templates = Vector() + templates.add('object/mobile/shared_dressed_stormtrooper_bombardier_m.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/carbine/shared_carbine_e11.iff', 1, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedShot') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('imp_bombardier_89', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/generic/faction/imperial/ace_imp_storm_com_70.py b/scripts/mobiles/generic/faction/imperial/ace_imp_storm_com_70.py new file mode 100644 index 00000000..8eebeeff --- /dev/null +++ b/scripts/mobiles/generic/faction/imperial/ace_imp_storm_com_70.py @@ -0,0 +1,39 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('crackdown_storm_commando_hard') + mobileTemplate.setLevel(50) + mobileTemplate.setDifficulty(1) + mobileTemplate.setAttackRange(15) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(1) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("imperial") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(True) + mobileTemplate.setFaction("imperial") + mobileTemplate.setFactionStatus(1) + + templates = Vector() + templates.add('object/mobile/shared_dressed_stormtrooper_bombardier_m.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/carbine/shared_carbine_e11.iff', 1, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedShot') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('imp_bombardier_50', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/generic/faction/imperial/ace_imp_storm_com_87.py b/scripts/mobiles/generic/faction/imperial/ace_imp_storm_com_87.py new file mode 100644 index 00000000..23843948 --- /dev/null +++ b/scripts/mobiles/generic/faction/imperial/ace_imp_storm_com_87.py @@ -0,0 +1,39 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('crackdown_storm_commando_hard') + mobileTemplate.setLevel(87) + mobileTemplate.setDifficulty(1) + mobileTemplate.setAttackRange(15) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(1) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("imperial") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(True) + mobileTemplate.setFaction("imperial") + mobileTemplate.setFactionStatus(1) + + templates = Vector() + templates.add('object/mobile/shared_dressed_stormtrooper_bombardier_m.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/carbine/shared_carbine_e11.iff', 1, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedShot') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('imp_bombardier_87', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/generic/faction/imperial/ace_imp_storm_com_89.py b/scripts/mobiles/generic/faction/imperial/ace_imp_storm_com_89.py new file mode 100644 index 00000000..c07765bc --- /dev/null +++ b/scripts/mobiles/generic/faction/imperial/ace_imp_storm_com_89.py @@ -0,0 +1,39 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('crackdown_storm_commando_hard') + mobileTemplate.setLevel(89) + mobileTemplate.setDifficulty(1) + mobileTemplate.setAttackRange(15) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(1) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("imperial") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(True) + mobileTemplate.setFaction("imperial") + mobileTemplate.setFactionStatus(1) + + templates = Vector() + templates.add('object/mobile/shared_dressed_stormtrooper_bombardier_m.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/carbine/shared_carbine_e11.iff', 1, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedShot') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('imp_bombardier_89', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/generic/faction/imperial/battle_droid_imp.py b/scripts/mobiles/generic/faction/imperial/battle_droid_imp.py new file mode 100644 index 00000000..e53d8f03 --- /dev/null +++ b/scripts/mobiles/generic/faction/imperial/battle_droid_imp.py @@ -0,0 +1,40 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from resources.datatables import FactionStatus +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('imperial_battle_droid') + mobileTemplate.setLevel(83) + mobileTemplate.setDifficulty(1) + mobileTemplate.setAttackRange(15) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(1) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(True) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("imperial") + mobileTemplate.setAssistRange(12) + mobileTemplate.setStalker(False) + mobileTemplate.setFaction("imperial") + mobileTemplate.setFactionStatus(1) + + templates = Vector() + templates.add('object/mobile/shared_battle_droid.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/carbine/shared_carbine_e5.iff', 1, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedShot') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('battle_droid_imperial', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/generic/faction/imperial/battle_shocked_imp_noncom_32.py b/scripts/mobiles/generic/faction/imperial/battle_shocked_imp_noncom_32.py new file mode 100644 index 00000000..196596e7 --- /dev/null +++ b/scripts/mobiles/generic/faction/imperial/battle_shocked_imp_noncom_32.py @@ -0,0 +1,39 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('crackdown_imperial_noncom_hard') + mobileTemplate.setLevel(32) + mobileTemplate.setDifficulty(1) + mobileTemplate.setAttackRange(15) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(1) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("imperial") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(False) + mobileTemplate.setFaction("imperial") + mobileTemplate.setFactionStatus(1) + + templates = Vector() + templates.add('object/mobile/shared_dressed_stormtrooper_black_blue.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/carbine/shared_carbine_e11.iff', 1, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedShot') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('battle-shocked_imp_noncom_32', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/generic/faction/imperial/battle_shocked_imp_noncom_77.py b/scripts/mobiles/generic/faction/imperial/battle_shocked_imp_noncom_77.py new file mode 100644 index 00000000..eb20d9ab --- /dev/null +++ b/scripts/mobiles/generic/faction/imperial/battle_shocked_imp_noncom_77.py @@ -0,0 +1,39 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('crackdown_imperial_noncom_hard') + mobileTemplate.setLevel(77) + mobileTemplate.setDifficulty(1) + mobileTemplate.setAttackRange(15) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(1) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("imperial") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(False) + mobileTemplate.setFaction("imperial") + mobileTemplate.setFactionStatus(1) + + templates = Vector() + templates.add('object/mobile/shared_dressed_stormtrooper_white_black.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/carbine/shared_carbine_e11.iff', 1, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedShot') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('battle-shocked_imp_noncom_77', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/generic/faction/imperial/bombardier.py b/scripts/mobiles/generic/faction/imperial/bombardier.py new file mode 100644 index 00000000..e18c226b --- /dev/null +++ b/scripts/mobiles/generic/faction/imperial/bombardier.py @@ -0,0 +1,39 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('bombardier') + mobileTemplate.setLevel(15) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(15) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(1) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("imperial") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(False) + mobileTemplate.setFaction("imperial") + mobileTemplate.setFactionStatus(1) + + templates = Vector() + templates.add('object/mobile/shared_dressed_stormtrooper_bombardier_m.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/carbine/shared_carbine_e11.iff', 1, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedShot') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('imp_bombardier', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/generic/faction/imperial/civil_patrol_captain.py b/scripts/mobiles/generic/faction/imperial/civil_patrol_captain.py new file mode 100644 index 00000000..15295c67 --- /dev/null +++ b/scripts/mobiles/generic/faction/imperial/civil_patrol_captain.py @@ -0,0 +1,40 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('imperial_civil_patrol_captain') + mobileTemplate.setLevel(7) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(15) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(1) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("imperial") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(False) + mobileTemplate.setFaction("imperial") + mobileTemplate.setFactionStatus(1) + + templates = Vector() + templates.add('object/mobile/shared_dressed_patrol_member_01.iff') + templates.add('object/mobile/shared_dressed_patrol_member_02.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/carbine/shared_carbine_e11.iff', 1, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedShot') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('civil_partrol_captain', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/generic/faction/imperial/civil_patrol_commander.py b/scripts/mobiles/generic/faction/imperial/civil_patrol_commander.py new file mode 100644 index 00000000..6117eb27 --- /dev/null +++ b/scripts/mobiles/generic/faction/imperial/civil_patrol_commander.py @@ -0,0 +1,40 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('imperial_civil_patrol_commander') + mobileTemplate.setLevel(8) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(15) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(1) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("imperial") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(False) + mobileTemplate.setFaction("imperial") + mobileTemplate.setFactionStatus(1) + + templates = Vector() + templates.add('object/mobile/shared_dressed_patrol_member_01.iff') + templates.add('object/mobile/shared_dressed_patrol_member_02.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/carbine/shared_carbine_e11.iff', 1, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedShot') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('civil_partrol_commander', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/generic/faction/imperial/civil_patrol_corporal.py b/scripts/mobiles/generic/faction/imperial/civil_patrol_corporal.py new file mode 100644 index 00000000..200f148e --- /dev/null +++ b/scripts/mobiles/generic/faction/imperial/civil_patrol_corporal.py @@ -0,0 +1,40 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('imperial_civil_patrol_corporal') + mobileTemplate.setLevel(4) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(15) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(1) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("imperial") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(False) + mobileTemplate.setFaction("imperial") + mobileTemplate.setFactionStatus(1) + + templates = Vector() + templates.add('object/mobile/shared_dressed_patrol_member_01.iff') + templates.add('object/mobile/shared_dressed_patrol_member_02.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/carbine/shared_carbine_e11.iff', 1, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedShot') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('civil_partrol_corporal', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/generic/faction/imperial/civil_patrol_sergeant.py b/scripts/mobiles/generic/faction/imperial/civil_patrol_sergeant.py new file mode 100644 index 00000000..64087a12 --- /dev/null +++ b/scripts/mobiles/generic/faction/imperial/civil_patrol_sergeant.py @@ -0,0 +1,40 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('imperial_civil_patrol_sergeant') + mobileTemplate.setLevel(5) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(15) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(1) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("imperial") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(False) + mobileTemplate.setFaction("imperial") + mobileTemplate.setFactionStatus(1) + + templates = Vector() + templates.add('object/mobile/shared_dressed_patrol_member_01.iff') + templates.add('object/mobile/shared_dressed_patrol_member_02.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/carbine/shared_carbine_e11.iff', 1, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedShot') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('civil_partrol_sergeant', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/generic/faction/imperial/civillian_patrolman.py b/scripts/mobiles/generic/faction/imperial/civillian_patrolman.py new file mode 100644 index 00000000..0671e5f3 --- /dev/null +++ b/scripts/mobiles/generic/faction/imperial/civillian_patrolman.py @@ -0,0 +1,40 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('imperial_civil_patrolman') + mobileTemplate.setLevel(2) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(15) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(1) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("imperial") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(False) + mobileTemplate.setFaction("imperial") + mobileTemplate.setFactionStatus(1) + + templates = Vector() + templates.add('object/mobile/shared_dressed_patrol_member_01.iff') + templates.add('object/mobile/shared_dressed_patrol_member_02.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/carbine/shared_carbine_e11.iff', 1, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedShot') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('civilian_patrolman', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/generic/faction/imperial/comm_operator.py b/scripts/mobiles/generic/faction/imperial/comm_operator.py new file mode 100644 index 00000000..1d8e5fd0 --- /dev/null +++ b/scripts/mobiles/generic/faction/imperial/comm_operator.py @@ -0,0 +1,39 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('comm_operator') + mobileTemplate.setLevel(14) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(15) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(1) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("imperial") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(False) + mobileTemplate.setFaction("imperial") + mobileTemplate.setFactionStatus(1) + + templates = Vector() + templates.add('object/mobile/shared_dressed_imperial_lieutenant_m.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/carbine/shared_carbine_e11.iff', 1, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedShot') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('comm_operator', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/generic/faction/imperial/command_security_guard.py b/scripts/mobiles/generic/faction/imperial/command_security_guard.py new file mode 100644 index 00000000..a2e49cc7 --- /dev/null +++ b/scripts/mobiles/generic/faction/imperial/command_security_guard.py @@ -0,0 +1,43 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('command_security_guard') + mobileTemplate.setLevel(15) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(15) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(1) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("imperial") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(False) + mobileTemplate.setFaction("imperial") + mobileTemplate.setFactionStatus(1) + + templates = Vector() + templates.add('object/mobile/shared_imp_security_01.iff') + templates.add('object/mobile/shared_imp_security_02.iff') + templates.add('object/mobile/shared_imp_security_03.iff') + templates.add('object/mobile/shared_imp_security_04.iff') + templates.add('object/mobile/shared_imp_security_05.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/carbine/shared_carbine_e11.iff', 1, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedShot') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('command_security_guard', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/generic/faction/imperial/commander_byrne.py b/scripts/mobiles/generic/faction/imperial/commander_byrne.py new file mode 100644 index 00000000..c188b7f2 --- /dev/null +++ b/scripts/mobiles/generic/faction/imperial/commander_byrne.py @@ -0,0 +1,39 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('commander_byrne') + mobileTemplate.setLevel(23) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(15) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(1) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(True) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("imperial") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(False) + mobileTemplate.setFaction("imperial") + mobileTemplate.setFactionStatus(1) + + templates = Vector() + templates.add('object/mobile/shared_dressed_lian_byrne.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/carbine/shared_carbine_e11.iff', 1, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedShot') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('commander_byrne', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/generic/faction/imperial/crackdown_stormtrooper_captain.py b/scripts/mobiles/generic/faction/imperial/crackdown_stormtrooper_captain.py new file mode 100644 index 00000000..77046a4a --- /dev/null +++ b/scripts/mobiles/generic/faction/imperial/crackdown_stormtrooper_captain.py @@ -0,0 +1,41 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('crackdown_imperial_army_captain_hard') + mobileTemplate.setLevel(60) + mobileTemplate.setDifficulty(1) + mobileTemplate.setAttackRange(15) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(1) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("imperial") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(True) + mobileTemplate.setFaction("imperial") + mobileTemplate.setFactionStatus(1) + + templates = Vector() + templates.add('object/mobile/shared_dressed_stormtrooper_captain_black_black.iff') + templates.add('object/mobile/shared_dressed_stormtrooper_captain_black_gold.iff') + templates.add('object/mobile/shared_dressed_stormtrooper_captain_white_white.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/carbine/shared_carbine_e11.iff', 1, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedShot') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('crackdown_stormtrooper_captain_hard', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/generic/faction/imperial/dark_nova_trooper.py b/scripts/mobiles/generic/faction/imperial/dark_nova_trooper.py new file mode 100644 index 00000000..2bc2b28d --- /dev/null +++ b/scripts/mobiles/generic/faction/imperial/dark_nova_trooper.py @@ -0,0 +1,39 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('stormtrooper_dark_trooper_novatrooper') + mobileTemplate.setLevel(82) + mobileTemplate.setDifficulty(1) + mobileTemplate.setAttackRange(15) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(1) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(True) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("imperial") + mobileTemplate.setAssistRange(12) + mobileTemplate.setStalker(False) + mobileTemplate.setFaction("imperial") + mobileTemplate.setFactionStatus(1) + + templates = Vector() + templates.add('object/mobile/shared_dressed_dark_trooper_black_hole.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/carbine/shared_carbine_e11.iff', 1, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedShot') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('dark_novatrooper', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/generic/faction/imperial/dark_trooper.py b/scripts/mobiles/generic/faction/imperial/dark_trooper.py new file mode 100644 index 00000000..079d3c25 --- /dev/null +++ b/scripts/mobiles/generic/faction/imperial/dark_trooper.py @@ -0,0 +1,39 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('dark_trooper') + mobileTemplate.setLevel(32) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(15) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(1) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(True) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("imperial") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(False) + mobileTemplate.setFaction("imperial") + mobileTemplate.setFactionStatus(1) + + templates = Vector() + templates.add('object/mobile/shared_dark_trooper.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/carbine/shared_carbine_e11.iff', 1, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedShot') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('dark_trooper', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/generic/faction/imperial/decorated_imperial_colonel_50.py b/scripts/mobiles/generic/faction/imperial/decorated_imperial_colonel_50.py new file mode 100644 index 00000000..3779e04f --- /dev/null +++ b/scripts/mobiles/generic/faction/imperial/decorated_imperial_colonel_50.py @@ -0,0 +1,39 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('crackdown_imperial_colonel_hard') + mobileTemplate.setLevel(50) + mobileTemplate.setDifficulty(1) + mobileTemplate.setAttackRange(15) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(1) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("imperial") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(True) + mobileTemplate.setFaction("imperial") + mobileTemplate.setFactionStatus(1) + + templates = Vector() + templates.add('object/mobile/shared_dressed_imperial_colonel_m.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/carbine/shared_carbine_e11.iff', 1, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedShot') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('decorated_imperial_col_50', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/generic/faction/imperial/decorated_imperial_colonel_87.py b/scripts/mobiles/generic/faction/imperial/decorated_imperial_colonel_87.py new file mode 100644 index 00000000..3a766343 --- /dev/null +++ b/scripts/mobiles/generic/faction/imperial/decorated_imperial_colonel_87.py @@ -0,0 +1,39 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('crackdown_imperial_colonel_hard') + mobileTemplate.setLevel(87) + mobileTemplate.setDifficulty(1) + mobileTemplate.setAttackRange(15) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(1) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("imperial") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(True) + mobileTemplate.setFaction("imperial") + mobileTemplate.setFactionStatus(1) + + templates = Vector() + templates.add('object/mobile/shared_dressed_imperial_colonel_m.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/carbine/shared_carbine_e11.iff', 1, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedShot') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('decorated_imperial_col_87', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/generic/faction/imperial/detention_security_guard.py b/scripts/mobiles/generic/faction/imperial/detention_security_guard.py new file mode 100644 index 00000000..b45bb0d6 --- /dev/null +++ b/scripts/mobiles/generic/faction/imperial/detention_security_guard.py @@ -0,0 +1,39 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('detention_security_guard') + mobileTemplate.setLevel(15) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(15) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(1) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("imperial") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(True) + mobileTemplate.setFaction("imperial") + mobileTemplate.setFactionStatus(1) + + templates = Vector() + templates.add('object/mobile/shared_stormtrooper.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/carbine/shared_carbine_e11.iff', 1, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedShot') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('detention_security_guard', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/generic/faction/imperial/droid_corps_junior_technican.py b/scripts/mobiles/generic/faction/imperial/droid_corps_junior_technican.py new file mode 100644 index 00000000..937a96dc --- /dev/null +++ b/scripts/mobiles/generic/faction/imperial/droid_corps_junior_technican.py @@ -0,0 +1,39 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('imperial_probot_handler') + mobileTemplate.setLevel(15) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(15) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(2) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("imperial") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(True) + mobileTemplate.setFaction("imperial") + mobileTemplate.setFactionStatus(1) + + templates = Vector() + templates.add('object/mobile/shared_dressed_imperial_mechanic_nils_cridmeen.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/pistol/shared_pistol_striker.iff', 2, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedShot') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('droid_corps_junior_technican', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/generic/faction/imperial/elite_dark_trooper.py b/scripts/mobiles/generic/faction/imperial/elite_dark_trooper.py new file mode 100644 index 00000000..cb8084be --- /dev/null +++ b/scripts/mobiles/generic/faction/imperial/elite_dark_trooper.py @@ -0,0 +1,39 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('dark_trooper') + mobileTemplate.setLevel(64) + mobileTemplate.setDifficulty(1) + mobileTemplate.setAttackRange(15) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(1) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(True) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("imperial") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(False) + mobileTemplate.setFaction("imperial") + mobileTemplate.setFactionStatus(1) + + templates = Vector() + templates.add('object/mobile/shared_dark_trooper.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/carbine/shared_carbine_e11.iff', 1, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedShot') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('dark_trooper_elite', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/generic/faction/imperial/elite_exogen_class_dark_trooper.py b/scripts/mobiles/generic/faction/imperial/elite_exogen_class_dark_trooper.py new file mode 100644 index 00000000..8a494ecf --- /dev/null +++ b/scripts/mobiles/generic/faction/imperial/elite_exogen_class_dark_trooper.py @@ -0,0 +1,39 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('crackdown_elite_dark_trooper') + mobileTemplate.setLevel(88) + mobileTemplate.setDifficulty(1) + mobileTemplate.setAttackRange(15) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(1) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("imperial") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(False) + mobileTemplate.setFaction("imperial") + mobileTemplate.setFactionStatus(1) + + templates = Vector() + templates.add('object/mobile/shared_dressed_stormtrooper_assault_trooper_m.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/carbine/shared_carbine_e11.iff', 1, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedShot') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('exogen_dark_trooper_elite', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/generic/faction/imperial/elite_imperial_master_sergant_34.py b/scripts/mobiles/generic/faction/imperial/elite_imperial_master_sergant_34.py new file mode 100644 index 00000000..34770523 --- /dev/null +++ b/scripts/mobiles/generic/faction/imperial/elite_imperial_master_sergant_34.py @@ -0,0 +1,39 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('crackdown_imperial_master_sergeant_hard') + mobileTemplate.setLevel(34) + mobileTemplate.setDifficulty(1) + mobileTemplate.setAttackRange(15) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(1) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("imperial") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(True) + mobileTemplate.setFaction("imperial") + mobileTemplate.setFactionStatus(1) + + templates = Vector() + templates.add('object/mobile/shared_dressed_stormtrooper_white_black.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/carbine/shared_carbine_e11.iff', 1, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedShot') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('elite_imperial_master_serg_34', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/generic/faction/imperial/elite_imperial_master_sergant_79.py b/scripts/mobiles/generic/faction/imperial/elite_imperial_master_sergant_79.py new file mode 100644 index 00000000..9bc7c6d1 --- /dev/null +++ b/scripts/mobiles/generic/faction/imperial/elite_imperial_master_sergant_79.py @@ -0,0 +1,39 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('crackdown_imperial_master_sergeant_hard') + mobileTemplate.setLevel(79) + mobileTemplate.setDifficulty(1) + mobileTemplate.setAttackRange(15) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(1) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("imperial") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(True) + mobileTemplate.setFaction("imperial") + mobileTemplate.setFactionStatus(1) + + templates = Vector() + templates.add('object/mobile/shared_dressed_stormtrooper_white_black.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/carbine/shared_carbine_e11.iff', 1, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedShot') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('elite_imperial_master_serg_79', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/generic/faction/imperial/elite_imperial_sand_trooper_50.py b/scripts/mobiles/generic/faction/imperial/elite_imperial_sand_trooper_50.py new file mode 100644 index 00000000..59417fe9 --- /dev/null +++ b/scripts/mobiles/generic/faction/imperial/elite_imperial_sand_trooper_50.py @@ -0,0 +1,39 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('crackdown_sand_trooper_hard') + mobileTemplate.setLevel(50) + mobileTemplate.setDifficulty(1) + mobileTemplate.setAttackRange(15) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(1) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("imperial") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(False) + mobileTemplate.setFaction("imperial") + mobileTemplate.setFactionStatus(1) + + templates = Vector() + templates.add('object/mobile/shared_dressed_stormtrooper_sand_trooper_m.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/carbine/shared_carbine_e11.iff', 1, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedShot') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('elite_imperial_sand_trooper_50', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/generic/faction/imperial/elite_imperial_sand_trooper_85.py b/scripts/mobiles/generic/faction/imperial/elite_imperial_sand_trooper_85.py new file mode 100644 index 00000000..93202c44 --- /dev/null +++ b/scripts/mobiles/generic/faction/imperial/elite_imperial_sand_trooper_85.py @@ -0,0 +1,39 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('crackdown_sand_trooper_hard') + mobileTemplate.setLevel(85) + mobileTemplate.setDifficulty(1) + mobileTemplate.setAttackRange(15) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(1) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("imperial") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(False) + mobileTemplate.setFaction("imperial") + mobileTemplate.setFactionStatus(1) + + templates = Vector() + templates.add('object/mobile/shared_dressed_stormtrooper_sand_trooper_m.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/carbine/shared_carbine_e11.iff', 1, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedShot') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('elite_imperial_sand_trooper_85', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/generic/faction/imperial/elite_imperial_scout_trooper_45.py b/scripts/mobiles/generic/faction/imperial/elite_imperial_scout_trooper_45.py new file mode 100644 index 00000000..19011c10 --- /dev/null +++ b/scripts/mobiles/generic/faction/imperial/elite_imperial_scout_trooper_45.py @@ -0,0 +1,39 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('crackdown_scout_trooper_hard') + mobileTemplate.setLevel(45) + mobileTemplate.setDifficulty(1) + mobileTemplate.setAttackRange(15) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(1) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("imperial") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(False) + mobileTemplate.setFaction("imperial") + mobileTemplate.setFactionStatus(1) + + templates = Vector() + templates.add('object/mobile/shared_dressed_scout_trooper_white_white.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/carbine/shared_carbine_e11.iff', 1, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedShot') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('elite_imperial_scout_trooper_45', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/generic/faction/imperial/elite_imperial_scout_trooper_84.py b/scripts/mobiles/generic/faction/imperial/elite_imperial_scout_trooper_84.py new file mode 100644 index 00000000..dab6c43f --- /dev/null +++ b/scripts/mobiles/generic/faction/imperial/elite_imperial_scout_trooper_84.py @@ -0,0 +1,39 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('crackdown_scout_trooper_hard') + mobileTemplate.setLevel(84) + mobileTemplate.setDifficulty(1) + mobileTemplate.setAttackRange(15) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(1) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("imperial") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(False) + mobileTemplate.setFaction("imperial") + mobileTemplate.setFactionStatus(1) + + templates = Vector() + templates.add('object/mobile/shared_dressed_scout_trooper_white_white.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/carbine/shared_carbine_e11.iff', 1, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedShot') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('elite_imperial_scout_trooper_84', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/generic/faction/imperial/elite_imperial_security_guard_25.py b/scripts/mobiles/generic/faction/imperial/elite_imperial_security_guard_25.py new file mode 100644 index 00000000..38d9f5cf --- /dev/null +++ b/scripts/mobiles/generic/faction/imperial/elite_imperial_security_guard_25.py @@ -0,0 +1,39 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('crackdown_command_security_guard_hard') + mobileTemplate.setLevel(25) + mobileTemplate.setDifficulty(1) + mobileTemplate.setAttackRange(15) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(1) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("imperial") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(False) + mobileTemplate.setFaction("imperial") + mobileTemplate.setFactionStatus(1) + + templates = Vector() + templates.add('object/mobile/shared_dressed_stormtrooper_white_black.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/carbine/shared_carbine_e11.iff', 1, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedShot') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('elite_imperial_secuirty_guard_25', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/generic/faction/imperial/elite_imperial_security_guard_76.py b/scripts/mobiles/generic/faction/imperial/elite_imperial_security_guard_76.py new file mode 100644 index 00000000..d59d4eb2 --- /dev/null +++ b/scripts/mobiles/generic/faction/imperial/elite_imperial_security_guard_76.py @@ -0,0 +1,39 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('crackdown_command_security_guard_hard') + mobileTemplate.setLevel(76) + mobileTemplate.setDifficulty(1) + mobileTemplate.setAttackRange(15) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(1) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("imperial") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(False) + mobileTemplate.setFaction("imperial") + mobileTemplate.setFactionStatus(1) + + templates = Vector() + templates.add('object/mobile/shared_dressed_stormtrooper_white_black.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/carbine/shared_carbine_e11.iff', 1, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedShot') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('elite_imperial_secuirty_guard_76', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/generic/faction/imperial/elite_imperial_stormcaptain.py b/scripts/mobiles/generic/faction/imperial/elite_imperial_stormcaptain.py new file mode 100644 index 00000000..93678b38 --- /dev/null +++ b/scripts/mobiles/generic/faction/imperial/elite_imperial_stormcaptain.py @@ -0,0 +1,41 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('crackdown_stormtrooper_captain') + mobileTemplate.setLevel(89) + mobileTemplate.setDifficulty(1) + mobileTemplate.setAttackRange(15) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(1) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("imperial") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(False) + mobileTemplate.setFaction("imperial") + mobileTemplate.setFactionStatus(1) + + templates = Vector() + templates.add('object/mobile/shared_dressed_stormtrooper_captain_black_gold.iff') + templates.add('object/mobile/shared_dressed_stormtrooper_captain_black_black.iff') + templates.add('object/mobile/shared_dressed_stormtrooper_captain_white_white.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/carbine/shared_carbine_e11.iff', 1, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedShot') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('elite_imperial_stormcaptain', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/generic/faction/imperial/elite_imperial_stormrifle_50.py b/scripts/mobiles/generic/faction/imperial/elite_imperial_stormrifle_50.py new file mode 100644 index 00000000..387bf8b8 --- /dev/null +++ b/scripts/mobiles/generic/faction/imperial/elite_imperial_stormrifle_50.py @@ -0,0 +1,39 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('crackdown_stormtrooper_rifleman_hard') + mobileTemplate.setLevel(50) + mobileTemplate.setDifficulty(1) + mobileTemplate.setAttackRange(15) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(1) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("imperial") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(False) + mobileTemplate.setFaction("imperial") + mobileTemplate.setFactionStatus(1) + + templates = Vector() + templates.add('object/mobile/shared_dressed_stormtrooper_rifleman_m.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/carbine/shared_carbine_e11.iff', 1, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedShot') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('elite_imperial_stormrifle_50', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/generic/faction/imperial/elite_imperial_stormrifle_85.py b/scripts/mobiles/generic/faction/imperial/elite_imperial_stormrifle_85.py new file mode 100644 index 00000000..1f04d9f6 --- /dev/null +++ b/scripts/mobiles/generic/faction/imperial/elite_imperial_stormrifle_85.py @@ -0,0 +1,39 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('crackdown_stormtrooper_rifleman_hard') + mobileTemplate.setLevel(85) + mobileTemplate.setDifficulty(1) + mobileTemplate.setAttackRange(15) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(1) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("imperial") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(False) + mobileTemplate.setFaction("imperial") + mobileTemplate.setFactionStatus(1) + + templates = Vector() + templates.add('object/mobile/shared_dressed_stormtrooper_rifleman_m.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/carbine/shared_carbine_e11.iff', 1, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedShot') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('elite_imperial_stormrifle_85', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/generic/faction/imperial/elite_imperial_stormrifle_88.py b/scripts/mobiles/generic/faction/imperial/elite_imperial_stormrifle_88.py new file mode 100644 index 00000000..f20a9ca7 --- /dev/null +++ b/scripts/mobiles/generic/faction/imperial/elite_imperial_stormrifle_88.py @@ -0,0 +1,39 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('crackdown_stormtrooper_rifleman_hard') + mobileTemplate.setLevel(88) + mobileTemplate.setDifficulty(1) + mobileTemplate.setAttackRange(15) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(0) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("imperial") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(False) + mobileTemplate.setFaction("imperial") + mobileTemplate.setFactionStatus(1) + + templates = Vector() + templates.add('object/mobile/shared_dressed_stormtrooper_rifleman_m.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/rifle/shared_rifle_e11.iff', 0, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedShot') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('elite_imperial_stormrifle_88', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/generic/faction/imperial/elite_imperial_stormsniper_50.py b/scripts/mobiles/generic/faction/imperial/elite_imperial_stormsniper_50.py new file mode 100644 index 00000000..9f4c25cb --- /dev/null +++ b/scripts/mobiles/generic/faction/imperial/elite_imperial_stormsniper_50.py @@ -0,0 +1,39 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('crackdown_stormtrooper_sniper_hard') + mobileTemplate.setLevel(50) + mobileTemplate.setDifficulty(1) + mobileTemplate.setAttackRange(15) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(1) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("imperial") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(False) + mobileTemplate.setFaction("imperial") + mobileTemplate.setFactionStatus(1) + + templates = Vector() + templates.add('object/mobile/shared_dressed_stormtrooper_sniper_m.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/carbine/shared_carbine_e11.iff', 1, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedShot') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('elite_imperial_stormsniper_50', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/generic/faction/imperial/elite_imperial_stormsniper_85.py b/scripts/mobiles/generic/faction/imperial/elite_imperial_stormsniper_85.py new file mode 100644 index 00000000..7acccd0a --- /dev/null +++ b/scripts/mobiles/generic/faction/imperial/elite_imperial_stormsniper_85.py @@ -0,0 +1,39 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('crackdown_stormtrooper_sniper_hard') + mobileTemplate.setLevel(85) + mobileTemplate.setDifficulty(1) + mobileTemplate.setAttackRange(15) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(0) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("imperial") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(False) + mobileTemplate.setFaction("imperial") + mobileTemplate.setFactionStatus(1) + + templates = Vector() + templates.add('object/mobile/shared_dressed_stormtrooper_sniper_m.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/rifle/shared_rifle_e11.iff', 0, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedShot') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('elite_imperial_stormsniper_85', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/generic/faction/imperial/elite_imperial_stormsniper_89.py b/scripts/mobiles/generic/faction/imperial/elite_imperial_stormsniper_89.py new file mode 100644 index 00000000..ae834b53 --- /dev/null +++ b/scripts/mobiles/generic/faction/imperial/elite_imperial_stormsniper_89.py @@ -0,0 +1,39 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('crackdown_stormtrooper_sniper_hard') + mobileTemplate.setLevel(89) + mobileTemplate.setDifficulty(1) + mobileTemplate.setAttackRange(15) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(0) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("imperial") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(False) + mobileTemplate.setFaction("imperial") + mobileTemplate.setFactionStatus(1) + + templates = Vector() + templates.add('object/mobile/shared_dressed_stormtrooper_sniper_m.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/rifle/shared_rifle_e11.iff', 0, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedShot') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('elite_imperial_stormsniper_89', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/generic/faction/imperial/elite_imperial_stormtrooper_50.py b/scripts/mobiles/generic/faction/imperial/elite_imperial_stormtrooper_50.py new file mode 100644 index 00000000..70ad5c82 --- /dev/null +++ b/scripts/mobiles/generic/faction/imperial/elite_imperial_stormtrooper_50.py @@ -0,0 +1,52 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('crackdown_stormtrooper_hard') + mobileTemplate.setLevel(50) + mobileTemplate.setDifficulty(1) + mobileTemplate.setAttackRange(15) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(1) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("imperial") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(False) + mobileTemplate.setFaction("imperial") + mobileTemplate.setFactionStatus(1) + + templates = Vector() + templates.add('object/mobile/shared_dressed_stormtrooper_black_black.iff') + templates.add('object/mobile/shared_dressed_stormtrooper_black_blue.iff') + templates.add('object/mobile/shared_dressed_stormtrooper_black_gold.iff') + templates.add('object/mobile/shared_dressed_stormtrooper_black_green.iff') + templates.add('object/mobile/shared_dressed_stormtrooper_black_grey.iff') + templates.add('object/mobile/shared_dressed_stormtrooper_black_red.iff') + templates.add('object/mobile/shared_dressed_stormtrooper_black_white.iff') + templates.add('object/mobile/shared_dressed_stormtrooper_white_black.iff') + templates.add('object/mobile/shared_dressed_stormtrooper_white_blue.iff') + templates.add('object/mobile/shared_dressed_stormtrooper_white_gold.iff') + templates.add('object/mobile/shared_dressed_stormtrooper_white_green.iff') + templates.add('object/mobile/shared_dressed_stormtrooper_white_grey.iff') + templates.add('object/mobile/shared_dressed_stormtrooper_white_red.iff') + templates.add('object/mobile/shared_dressed_stormtrooper_white_white.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/carbine/shared_carbine_e11.iff', 1, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedShot') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('elite_imperial_stormrifle_50', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/generic/faction/imperial/elite_imperial_stormtrooper_84.py b/scripts/mobiles/generic/faction/imperial/elite_imperial_stormtrooper_84.py new file mode 100644 index 00000000..2e8ef43a --- /dev/null +++ b/scripts/mobiles/generic/faction/imperial/elite_imperial_stormtrooper_84.py @@ -0,0 +1,52 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('crackdown_stormtrooper_hard') + mobileTemplate.setLevel(84) + mobileTemplate.setDifficulty(1) + mobileTemplate.setAttackRange(15) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(1) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("imperial") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(False) + mobileTemplate.setFaction("imperial") + mobileTemplate.setFactionStatus(1) + + templates = Vector() + templates.add('object/mobile/shared_dressed_stormtrooper_black_black.iff') + templates.add('object/mobile/shared_dressed_stormtrooper_black_blue.iff') + templates.add('object/mobile/shared_dressed_stormtrooper_black_gold.iff') + templates.add('object/mobile/shared_dressed_stormtrooper_black_green.iff') + templates.add('object/mobile/shared_dressed_stormtrooper_black_grey.iff') + templates.add('object/mobile/shared_dressed_stormtrooper_black_red.iff') + templates.add('object/mobile/shared_dressed_stormtrooper_black_white.iff') + templates.add('object/mobile/shared_dressed_stormtrooper_white_black.iff') + templates.add('object/mobile/shared_dressed_stormtrooper_white_blue.iff') + templates.add('object/mobile/shared_dressed_stormtrooper_white_gold.iff') + templates.add('object/mobile/shared_dressed_stormtrooper_white_green.iff') + templates.add('object/mobile/shared_dressed_stormtrooper_white_grey.iff') + templates.add('object/mobile/shared_dressed_stormtrooper_white_red.iff') + templates.add('object/mobile/shared_dressed_stormtrooper_white_white.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/carbine/shared_carbine_e11.iff', 1, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedShot') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('elite_imperial_stormrifle_84', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/generic/faction/imperial/elite_imperial_stormtrooper_89.py b/scripts/mobiles/generic/faction/imperial/elite_imperial_stormtrooper_89.py new file mode 100644 index 00000000..6ca7b509 --- /dev/null +++ b/scripts/mobiles/generic/faction/imperial/elite_imperial_stormtrooper_89.py @@ -0,0 +1,52 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('crackdown_stormtrooper_hard') + mobileTemplate.setLevel(89) + mobileTemplate.setDifficulty(1) + mobileTemplate.setAttackRange(15) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(1) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("imperial") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(False) + mobileTemplate.setFaction("imperial") + mobileTemplate.setFactionStatus(1) + + templates = Vector() + templates.add('object/mobile/shared_dressed_stormtrooper_black_black.iff') + templates.add('object/mobile/shared_dressed_stormtrooper_black_blue.iff') + templates.add('object/mobile/shared_dressed_stormtrooper_black_gold.iff') + templates.add('object/mobile/shared_dressed_stormtrooper_black_green.iff') + templates.add('object/mobile/shared_dressed_stormtrooper_black_grey.iff') + templates.add('object/mobile/shared_dressed_stormtrooper_black_red.iff') + templates.add('object/mobile/shared_dressed_stormtrooper_black_white.iff') + templates.add('object/mobile/shared_dressed_stormtrooper_white_black.iff') + templates.add('object/mobile/shared_dressed_stormtrooper_white_blue.iff') + templates.add('object/mobile/shared_dressed_stormtrooper_white_gold.iff') + templates.add('object/mobile/shared_dressed_stormtrooper_white_green.iff') + templates.add('object/mobile/shared_dressed_stormtrooper_white_grey.iff') + templates.add('object/mobile/shared_dressed_stormtrooper_white_red.iff') + templates.add('object/mobile/shared_dressed_stormtrooper_white_white.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/carbine/shared_carbine_e11.iff', 1, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedShot') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('elite_imperial_stormrifle_89', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/generic/faction/imperial/elite_novatrooper.py b/scripts/mobiles/generic/faction/imperial/elite_novatrooper.py new file mode 100644 index 00000000..1ef82853 --- /dev/null +++ b/scripts/mobiles/generic/faction/imperial/elite_novatrooper.py @@ -0,0 +1,39 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('stormtrooper_novatrooper_elite') + mobileTemplate.setLevel(82) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(15) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(1) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(True) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("imperial") + mobileTemplate.setAssistRange(12) + mobileTemplate.setStalker(False) + mobileTemplate.setFaction("imperial") + mobileTemplate.setFactionStatus(1) + + templates = Vector() + templates.add('object/mobile/shared_restuss_dark_trooper.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/carbine/shared_carbine_e11.iff', 1, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedShot') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('elite_novatrooper', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/generic/faction/imperial/elite_novatrooper_commander.py b/scripts/mobiles/generic/faction/imperial/elite_novatrooper_commander.py new file mode 100644 index 00000000..67c5d347 --- /dev/null +++ b/scripts/mobiles/generic/faction/imperial/elite_novatrooper_commander.py @@ -0,0 +1,39 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('stormtrooper_novatrooper_elite_commander') + mobileTemplate.setLevel(83) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(15) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(1) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(True) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("imperial") + mobileTemplate.setAssistRange(12) + mobileTemplate.setStalker(False) + mobileTemplate.setFaction("imperial") + mobileTemplate.setFactionStatus(1) + + templates = Vector() + templates.add('object/mobile/shared_restuss_dark_trooper.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/carbine/shared_carbine_e11.iff', 1, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedShot') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('elite_novatrooper_commander', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/generic/faction/imperial/elite_sand_trooper_45_1.py b/scripts/mobiles/generic/faction/imperial/elite_sand_trooper_45_1.py new file mode 100644 index 00000000..d2603a01 --- /dev/null +++ b/scripts/mobiles/generic/faction/imperial/elite_sand_trooper_45_1.py @@ -0,0 +1,39 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('crackdown_elite_sand_trooper') + mobileTemplate.setLevel(45) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(15) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(1) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("imperial") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(False) + mobileTemplate.setFaction("imperial") + mobileTemplate.setFactionStatus(1) + + templates = Vector() + templates.add('object/mobile/shared_dressed_stormtrooper_sandtrooper_m.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/carbine/shared_carbine_e11.iff', 1, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedShot') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('elite_sandtrooper_45_1', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/generic/faction/imperial/elite_sand_trooper_45_2.py b/scripts/mobiles/generic/faction/imperial/elite_sand_trooper_45_2.py new file mode 100644 index 00000000..d4814148 --- /dev/null +++ b/scripts/mobiles/generic/faction/imperial/elite_sand_trooper_45_2.py @@ -0,0 +1,39 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('crackdown_elite_sand_trooper') + mobileTemplate.setLevel(45) + mobileTemplate.setDifficulty(1) + mobileTemplate.setAttackRange(15) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(1) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(True) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("imperial") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(False) + mobileTemplate.setFaction("imperial") + mobileTemplate.setFactionStatus(1) + + templates = Vector() + templates.add('object/mobile/shared_dressed_stormtrooper_sandtrooper_m.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/rifle/shared_rifle_e11.iff', 0, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedShot') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('elite_sandtrooper_45_2', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/generic/faction/imperial/elite_sand_trooper_81.py b/scripts/mobiles/generic/faction/imperial/elite_sand_trooper_81.py new file mode 100644 index 00000000..e58e3f32 --- /dev/null +++ b/scripts/mobiles/generic/faction/imperial/elite_sand_trooper_81.py @@ -0,0 +1,39 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('crackdown_elite_sand_trooper') + mobileTemplate.setLevel(81) + mobileTemplate.setDifficulty(1) + mobileTemplate.setAttackRange(15) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(1) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("imperial") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(False) + mobileTemplate.setFaction("imperial") + mobileTemplate.setFactionStatus(1) + + templates = Vector() + templates.add('object/mobile/shared_dressed_stormtrooper_sandtrooper_m.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/carbine/shared_carbine_e11.iff', 1, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedShot') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('elite_sandtrooper_81', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/generic/faction/imperial/elite_sand_trooper_commando_75.py b/scripts/mobiles/generic/faction/imperial/elite_sand_trooper_commando_75.py new file mode 100644 index 00000000..acc542e9 --- /dev/null +++ b/scripts/mobiles/generic/faction/imperial/elite_sand_trooper_commando_75.py @@ -0,0 +1,39 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('crackdown_elite_sand_trooper_hard') + mobileTemplate.setLevel(75) + mobileTemplate.setDifficulty(1) + mobileTemplate.setAttackRange(15) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(1) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("imperial") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(False) + mobileTemplate.setFaction("imperial") + mobileTemplate.setFactionStatus(1) + + templates = Vector() + templates.add('object/mobile/shared_dressed_stormtrooper_sandtrooper_m.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/carbine/shared_carbine_e11.iff', 1, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedShot') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('elite_sandtrooper_commando_75', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/generic/faction/imperial/elite_sand_trooper_commando_87.py b/scripts/mobiles/generic/faction/imperial/elite_sand_trooper_commando_87.py new file mode 100644 index 00000000..43261c13 --- /dev/null +++ b/scripts/mobiles/generic/faction/imperial/elite_sand_trooper_commando_87.py @@ -0,0 +1,39 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('crackdown_elite_sand_trooper_hard') + mobileTemplate.setLevel(87) + mobileTemplate.setDifficulty(1) + mobileTemplate.setAttackRange(15) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(1) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("imperial") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(False) + mobileTemplate.setFaction("imperial") + mobileTemplate.setFactionStatus(1) + + templates = Vector() + templates.add('object/mobile/shared_dressed_stormtrooper_sandtrooper_m.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/carbine/shared_carbine_e11.iff', 1, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedShot') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('elite_sandtrooper_commando_87', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/generic/faction/imperial/elite_sand_trooper_commando_vet.py b/scripts/mobiles/generic/faction/imperial/elite_sand_trooper_commando_vet.py new file mode 100644 index 00000000..c506a64c --- /dev/null +++ b/scripts/mobiles/generic/faction/imperial/elite_sand_trooper_commando_vet.py @@ -0,0 +1,39 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('fbase_elite_sand_trooper_extreme') + mobileTemplate.setLevel(89) + mobileTemplate.setDifficulty(1) + mobileTemplate.setAttackRange(15) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(1) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("imperial") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(False) + mobileTemplate.setFaction("imperial") + mobileTemplate.setFactionStatus(1) + + templates = Vector() + templates.add('object/mobile/shared_dressed_stormtrooper_sandtrooper_m.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/carbine/shared_carbine_e11.iff', 1, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedShot') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('elite_sandtrooper_commando_vet', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/generic/faction/imperial/emperors_hand.py b/scripts/mobiles/generic/faction/imperial/emperors_hand.py new file mode 100644 index 00000000..65456f74 --- /dev/null +++ b/scripts/mobiles/generic/faction/imperial/emperors_hand.py @@ -0,0 +1,42 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('emperors_hand') + mobileTemplate.setLevel(80) + mobileTemplate.setDifficulty(2) + mobileTemplate.setAttackRange(15) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(1) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(True) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("imperial") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(False) + mobileTemplate.setFaction("imperial") + mobileTemplate.setFactionStatus(1) + + templates = Vector() + templates.add('object/mobile/shared_dressed_emperors_hand_human_female_01.iff') + templates.add('object/mobile/shared_dressed_emperors_hand_human_male_01.iff') + templates.add('object/mobile/shared_dressed_emperors_hand_human_male_02.iff') + templates.add('object/mobile/shared_dressed_emperors_hand_zabrak_male_01.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/carbine/shared_carbine_e11.iff', 1, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedShot') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('emperors_hand', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/generic/faction/imperial/eow_fbase_imperial_corporal.py b/scripts/mobiles/generic/faction/imperial/eow_fbase_imperial_corporal.py new file mode 100644 index 00000000..7cca0708 --- /dev/null +++ b/scripts/mobiles/generic/faction/imperial/eow_fbase_imperial_corporal.py @@ -0,0 +1,38 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('eow_fbase_imperial_corporal') + mobileTemplate.setLevel(90) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(15) + mobileTemplate.setAttackSpeed(1.0) + #mobileTemplate.setWeaponType(1) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(True) + mobileTemplate.setSocialGroup("imperial") + mobileTemplate.setAssistRange(12) + mobileTemplate.setStalker(False) + mobileTemplate.setFaction("imperial") + mobileTemplate.setFactionStatus(1) + + templates = Vector() + templates.add('object/mobile/shared_dressed_imperial_captain_m.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/carbine/shared_carbine_e11.iff', 1, 1.0) + weaponTemplates.add(weapontemplate) + #mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + #mobileTemplate.setDefaultAttack('rangedShot') + #mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('eow_fbase_imperial_corporal', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/generic/faction/imperial/eow_fbase_stormtrooper.py b/scripts/mobiles/generic/faction/imperial/eow_fbase_stormtrooper.py new file mode 100644 index 00000000..10a31f91 --- /dev/null +++ b/scripts/mobiles/generic/faction/imperial/eow_fbase_stormtrooper.py @@ -0,0 +1,38 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('eow_fbase_stormtrooper') + mobileTemplate.setLevel(90) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(15) + mobileTemplate.setAttackSpeed(1.0) + #mobileTemplate.setWeaponType(1) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(True) + mobileTemplate.setSocialGroup("imperial") + mobileTemplate.setAssistRange(12) + mobileTemplate.setStalker(False) + mobileTemplate.setFaction("imperial") + mobileTemplate.setFactionStatus(1) + + templates = Vector() + templates.add('object/mobile/shared_dressed_stormtrooper_m.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/carbine/shared_carbine_e11.iff', 1, 1.0) + weaponTemplates.add(weapontemplate) + #mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + #mobileTemplate.setDefaultAttack('rangedShot') + #mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('eow_fbase_stormtrooper', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/generic/faction/imperial/exogen_class_dark_trooper.py b/scripts/mobiles/generic/faction/imperial/exogen_class_dark_trooper.py new file mode 100644 index 00000000..74c29bc2 --- /dev/null +++ b/scripts/mobiles/generic/faction/imperial/exogen_class_dark_trooper.py @@ -0,0 +1,39 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('crackdown_elite_dark_trooper') + mobileTemplate.setLevel(64) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(15) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(1) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("imperial") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(False) + mobileTemplate.setFaction("imperial") + mobileTemplate.setFactionStatus(1) + + templates = Vector() + templates.add('object/mobile/shared_dark_trooper.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/carbine/shared_carbine_e11.iff', 1, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedShot') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('exogen_dark_trooper', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/generic/faction/imperial/experienced_imp_captain_45.py b/scripts/mobiles/generic/faction/imperial/experienced_imp_captain_45.py new file mode 100644 index 00000000..feeb06c8 --- /dev/null +++ b/scripts/mobiles/generic/faction/imperial/experienced_imp_captain_45.py @@ -0,0 +1,39 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('crackdown_imperial_army_captain_hard') + mobileTemplate.setLevel(45) + mobileTemplate.setDifficulty(1) + mobileTemplate.setAttackRange(15) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(1) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("imperial") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(False) + mobileTemplate.setFaction("imperial") + mobileTemplate.setFactionStatus(1) + + templates = Vector() + templates.add('object/mobile/shared_dressed_imperial_captain_m.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/carbine/shared_carbine_e11.iff', 1, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedShot') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('exp_imp_captain_45', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/generic/faction/imperial/experienced_imp_captain_85.py b/scripts/mobiles/generic/faction/imperial/experienced_imp_captain_85.py new file mode 100644 index 00000000..47a000b1 --- /dev/null +++ b/scripts/mobiles/generic/faction/imperial/experienced_imp_captain_85.py @@ -0,0 +1,39 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('crackdown_imperial_army_captain_hard') + mobileTemplate.setLevel(85) + mobileTemplate.setDifficulty(1) + mobileTemplate.setAttackRange(15) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(1) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("imperial") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(False) + mobileTemplate.setFaction("imperial") + mobileTemplate.setFactionStatus(1) + + templates = Vector() + templates.add('object/mobile/shared_dressed_imperial_captain_m.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/carbine/shared_carbine_e11.iff', 1, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedShot') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('exp_imp_captain_85', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/generic/faction/imperial/experienced_imp_corporal_40.py b/scripts/mobiles/generic/faction/imperial/experienced_imp_corporal_40.py new file mode 100644 index 00000000..82fa8c0f --- /dev/null +++ b/scripts/mobiles/generic/faction/imperial/experienced_imp_corporal_40.py @@ -0,0 +1,39 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('crackdown_imperial_corporal_hard') + mobileTemplate.setLevel(40) + mobileTemplate.setDifficulty(1) + mobileTemplate.setAttackRange(15) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(1) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("imperial") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(False) + mobileTemplate.setFaction("imperial") + mobileTemplate.setFactionStatus(1) + + templates = Vector() + templates.add('object/mobile/shared_dressed_imperial_captain_m.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/carbine/shared_carbine_e11.iff', 1, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedShot') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('exp_imp_corporal_40', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/generic/faction/imperial/experienced_imp_corporal_78.py b/scripts/mobiles/generic/faction/imperial/experienced_imp_corporal_78.py new file mode 100644 index 00000000..f006a0a0 --- /dev/null +++ b/scripts/mobiles/generic/faction/imperial/experienced_imp_corporal_78.py @@ -0,0 +1,39 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('crackdown_imperial_corporal_hard') + mobileTemplate.setLevel(78) + mobileTemplate.setDifficulty(1) + mobileTemplate.setAttackRange(15) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(1) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("imperial") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(False) + mobileTemplate.setFaction("imperial") + mobileTemplate.setFactionStatus(1) + + templates = Vector() + templates.add('object/mobile/shared_dressed_imperial_captain_m.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/carbine/shared_carbine_e11.iff', 1, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedShot') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('exp_imp_corporal_78', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/generic/faction/imperial/general_otto.py b/scripts/mobiles/generic/faction/imperial/general_otto.py new file mode 100644 index 00000000..37ae9e0b --- /dev/null +++ b/scripts/mobiles/generic/faction/imperial/general_otto.py @@ -0,0 +1,39 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('general_otto') + mobileTemplate.setLevel(25) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(15) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(1) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("imperial") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(False) + mobileTemplate.setFaction("imperial") + mobileTemplate.setFactionStatus(1) + + templates = Vector() + templates.add('object/mobile/shared_dressed_imperial_general_m.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/carbine/shared_carbine_e11.iff', 1, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedShot') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('general_otto', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/generic/faction/imperial/glory_class_dark_trooper.py b/scripts/mobiles/generic/faction/imperial/glory_class_dark_trooper.py new file mode 100644 index 00000000..8ef5350a --- /dev/null +++ b/scripts/mobiles/generic/faction/imperial/glory_class_dark_trooper.py @@ -0,0 +1,39 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('crackdown_dark_trooper_hard') + mobileTemplate.setLevel(50) + mobileTemplate.setDifficulty(1) + mobileTemplate.setAttackRange(15) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(1) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("imperial") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(False) + mobileTemplate.setFaction("imperial") + mobileTemplate.setFactionStatus(1) + + templates = Vector() + templates.add('object/mobile/shared_dressed_stormtrooper_sand_trooper_m.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/carbine/shared_carbine_e11.iff', 1, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedShot') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('glory_trooper', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/generic/faction/imperial/glory_class_dark_trooper_2.py b/scripts/mobiles/generic/faction/imperial/glory_class_dark_trooper_2.py new file mode 100644 index 00000000..75645b7d --- /dev/null +++ b/scripts/mobiles/generic/faction/imperial/glory_class_dark_trooper_2.py @@ -0,0 +1,39 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('crackdown_dark_trooper_hard') + mobileTemplate.setLevel(86) + mobileTemplate.setDifficulty(1) + mobileTemplate.setAttackRange(15) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(1) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("imperial") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(False) + mobileTemplate.setFaction("imperial") + mobileTemplate.setFactionStatus(1) + + templates = Vector() + templates.add('object/mobile/shared_dressed_stormtrooper_sand_trooper_m.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/carbine/shared_carbine_e11.iff', 1, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedShot') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('glory_trooper_2', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/generic/faction/imperial/grizzled_elite_sand_trooper.py b/scripts/mobiles/generic/faction/imperial/grizzled_elite_sand_trooper.py new file mode 100644 index 00000000..a2d8637c --- /dev/null +++ b/scripts/mobiles/generic/faction/imperial/grizzled_elite_sand_trooper.py @@ -0,0 +1,41 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('fbase_scout_trooper_extreme') + mobileTemplate.setLevel(88) + mobileTemplate.setDifficulty(1) + mobileTemplate.setAttackRange(15) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(1) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("imperial") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(False) + mobileTemplate.setFaction("imperial") + mobileTemplate.setFactionStatus(1) + + templates = Vector() + templates.add('object/mobile/shared_dressed_scout_trooper_white_white.iff') + templates.add('object/mobile/shared_dressed_scout_trooper_m.iff') + templates.add('object/mobile/shared_dressed_scout_trooper_black_black.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/carbine/shared_carbine_e11.iff', 1, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedShot') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('grizzled_elite_scouttrooper', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/generic/faction/imperial/grizzled_elite_scout_trooper.py b/scripts/mobiles/generic/faction/imperial/grizzled_elite_scout_trooper.py new file mode 100644 index 00000000..319b009b --- /dev/null +++ b/scripts/mobiles/generic/faction/imperial/grizzled_elite_scout_trooper.py @@ -0,0 +1,39 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('fbase_sand_trooper_extreme') + mobileTemplate.setLevel(89) + mobileTemplate.setDifficulty(1) + mobileTemplate.setAttackRange(15) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(1) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("imperial") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(False) + mobileTemplate.setFaction("imperial") + mobileTemplate.setFactionStatus(1) + + templates = Vector() + templates.add('object/mobile/shared_dressed_stormtrooper_sandtrooper_m.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/carbine/shared_carbine_e11.iff', 1, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedShot') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('grizzled_elite_sandtrooper', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/generic/faction/imperial/grizzled_imp_colonel.py b/scripts/mobiles/generic/faction/imperial/grizzled_imp_colonel.py new file mode 100644 index 00000000..9e77381c --- /dev/null +++ b/scripts/mobiles/generic/faction/imperial/grizzled_imp_colonel.py @@ -0,0 +1,39 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('fbase_imperial_colonel_extreme') + mobileTemplate.setLevel(89) + mobileTemplate.setDifficulty(1) + mobileTemplate.setAttackRange(15) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(1) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("imperial") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(False) + mobileTemplate.setFaction("imperial") + mobileTemplate.setFactionStatus(1) + + templates = Vector() + templates.add('object/mobile/shared_dressed_imperial_colonel_m.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/carbine/shared_carbine_e11.iff', 1, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedShot') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('grizzled_imp_colonel', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/generic/faction/imperial/grizzled_imp_exterminator.py b/scripts/mobiles/generic/faction/imperial/grizzled_imp_exterminator.py new file mode 100644 index 00000000..e4dc431c --- /dev/null +++ b/scripts/mobiles/generic/faction/imperial/grizzled_imp_exterminator.py @@ -0,0 +1,39 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('fbase_imperial_exterminator_extreme') + mobileTemplate.setLevel(89) + mobileTemplate.setDifficulty(1) + mobileTemplate.setAttackRange(15) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(1) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("imperial") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(False) + mobileTemplate.setFaction("imperial") + mobileTemplate.setFactionStatus(1) + + templates = Vector() + templates.add('object/mobile/shared_dressed_imperial_exterminator.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/carbine/shared_carbine_e11.iff', 1, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedShot') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('grizzled_imp_exterminator', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/generic/faction/imperial/gunner.py b/scripts/mobiles/generic/faction/imperial/gunner.py new file mode 100644 index 00000000..553f3928 --- /dev/null +++ b/scripts/mobiles/generic/faction/imperial/gunner.py @@ -0,0 +1,39 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('mission_gunner') + mobileTemplate.setLevel(15) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(15) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(1) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("imperial") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(False) + mobileTemplate.setFaction("imperial") + mobileTemplate.setFactionStatus(1) + + templates = Vector() + templates.add('object/mobile/shared_dressed_imperial_gunner_m.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/carbine/shared_carbine_e11.iff', 1, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedShot') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('gunner', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/generic/faction/imperial/hardened_swamp_trooper_25.py b/scripts/mobiles/generic/faction/imperial/hardened_swamp_trooper_25.py new file mode 100644 index 00000000..aecc489a --- /dev/null +++ b/scripts/mobiles/generic/faction/imperial/hardened_swamp_trooper_25.py @@ -0,0 +1,40 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('crackdown_swamp_trooper_hard') + mobileTemplate.setLevel(25) + mobileTemplate.setDifficulty(1) + mobileTemplate.setAttackRange(15) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(1) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("imperial") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(False) + mobileTemplate.setFaction("imperial") + mobileTemplate.setFactionStatus(1) + + templates = Vector() + templates.add('object/mobile/shared_dressed_swamp_trooper.iff') + templates.add('object/mobile/shared_dressed_swamp_trooper_m.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/carbine/shared_carbine_e11.iff', 1, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedShot') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('hardened_swamp_troop_25', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/generic/faction/imperial/high_colonel.py b/scripts/mobiles/generic/faction/imperial/high_colonel.py new file mode 100644 index 00000000..b2686056 --- /dev/null +++ b/scripts/mobiles/generic/faction/imperial/high_colonel.py @@ -0,0 +1,39 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('high_colonel') + mobileTemplate.setLevel(24) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(15) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(1) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(True) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("imperial") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(False) + mobileTemplate.setFaction("imperial") + mobileTemplate.setFactionStatus(1) + + templates = Vector() + templates.add('object/mobile/shared_dressed_imperial_colonel_m.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/carbine/shared_carbine_e11.iff', 1, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedShot') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('high_colonel', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/generic/faction/imperial/imp_1st_lieutenant_20.py b/scripts/mobiles/generic/faction/imperial/imp_1st_lieutenant_20.py new file mode 100644 index 00000000..fc042194 --- /dev/null +++ b/scripts/mobiles/generic/faction/imperial/imp_1st_lieutenant_20.py @@ -0,0 +1,39 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('crackdown_imperial_first_lieutenant') + mobileTemplate.setLevel(20) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(15) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(1) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("imperial") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(False) + mobileTemplate.setFaction("imperial") + mobileTemplate.setFactionStatus(1) + + templates = Vector() + templates.add('object/mobile/shared_dressed_imperial_lieutenant_m.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/carbine/shared_carbine_e11.iff', 1, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedShot') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('imp_fst_lieutenant', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/generic/faction/imperial/imp_1st_lieutenant_20_2.py b/scripts/mobiles/generic/faction/imperial/imp_1st_lieutenant_20_2.py new file mode 100644 index 00000000..4a4f3898 --- /dev/null +++ b/scripts/mobiles/generic/faction/imperial/imp_1st_lieutenant_20_2.py @@ -0,0 +1,39 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('crackdown_imperial_first_lieutenant') + mobileTemplate.setLevel(20) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(15) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(1) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(True) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("imperial") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(False) + mobileTemplate.setFaction("imperial") + mobileTemplate.setFactionStatus(1) + + templates = Vector() + templates.add('object/mobile/shared_dressed_imperial_lieutenant_m.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/carbine/shared_carbine_e11.iff', 1, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedShot') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('imp_fst_lieutenant_20_2', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/generic/faction/imperial/imp_1st_lieutenant_68.py b/scripts/mobiles/generic/faction/imperial/imp_1st_lieutenant_68.py new file mode 100644 index 00000000..620ad55b --- /dev/null +++ b/scripts/mobiles/generic/faction/imperial/imp_1st_lieutenant_68.py @@ -0,0 +1,39 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('crackdown_imperial_first_lieutenant') + mobileTemplate.setLevel(68) + mobileTemplate.setDifficulty(1) + mobileTemplate.setAttackRange(15) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(1) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("imperial") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(False) + mobileTemplate.setFaction("imperial") + mobileTemplate.setFactionStatus(1) + + templates = Vector() + templates.add('object/mobile/shared_dressed_imperial_lieutenant_m.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/carbine/shared_carbine_e11.iff', 1, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedShot') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('imp_fst_lieutenant_68', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/generic/faction/imperial/imp_army_captain.py b/scripts/mobiles/generic/faction/imperial/imp_army_captain.py new file mode 100644 index 00000000..82b6cfaf --- /dev/null +++ b/scripts/mobiles/generic/faction/imperial/imp_army_captain.py @@ -0,0 +1,39 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('imperial_army_captain') + mobileTemplate.setLevel(21) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(15) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(1) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("imperial") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(False) + mobileTemplate.setFaction("imperial") + mobileTemplate.setFactionStatus(1) + + templates = Vector() + templates.add('object/mobile/shared_dressed_imperial_captain_m.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/carbine/shared_carbine_e11.iff', 1, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedShot') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('imp_army_captain', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/generic/faction/imperial/imp_assault_trooper.py b/scripts/mobiles/generic/faction/imperial/imp_assault_trooper.py new file mode 100644 index 00000000..ecc796be --- /dev/null +++ b/scripts/mobiles/generic/faction/imperial/imp_assault_trooper.py @@ -0,0 +1,39 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('assault_trooper') + mobileTemplate.setLevel(26) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(15) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(1) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(True) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("imperial") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(True) + mobileTemplate.setFaction("imperial") + mobileTemplate.setFactionStatus(1) + + templates = Vector() + templates.add('object/mobile/shared_dressed_stormtrooper_assault_trooper_m.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/carbine/shared_carbine_e11.iff', 1, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedShot') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('imp_assault_trooper', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/generic/faction/imperial/imp_assault_trooper_squad_leader.py b/scripts/mobiles/generic/faction/imperial/imp_assault_trooper_squad_leader.py new file mode 100644 index 00000000..d891d25e --- /dev/null +++ b/scripts/mobiles/generic/faction/imperial/imp_assault_trooper_squad_leader.py @@ -0,0 +1,39 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('crackdown_stormtrooper_squad_leader') + mobileTemplate.setLevel(27) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(15) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(0) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(True) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("imperial") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(True) + mobileTemplate.setFaction("imperial") + mobileTemplate.setFactionStatus(1) + + templates = Vector() + templates.add('object/mobile/shared_dressed_stormtrooper_assault_trooper_m.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/rifle/shared_rifle_e11.iff', 0, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedShot') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('imp_assault_trooper_squadleader', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/generic/faction/imperial/imp_bombardier_25.py b/scripts/mobiles/generic/faction/imperial/imp_bombardier_25.py new file mode 100644 index 00000000..175e508a --- /dev/null +++ b/scripts/mobiles/generic/faction/imperial/imp_bombardier_25.py @@ -0,0 +1,39 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('crackdown_stormtrooper_bombardier') + mobileTemplate.setLevel(25) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(15) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(1) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("imperial") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(False) + mobileTemplate.setFaction("imperial") + mobileTemplate.setFactionStatus(1) + + templates = Vector() + templates.add('object/mobile/shared_dressed_stormtrooper_bombardier_m.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/carbine/shared_carbine_e11.iff', 1, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedShot') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('imp_bombardier_25', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/generic/faction/imperial/imp_bombardier_75.py b/scripts/mobiles/generic/faction/imperial/imp_bombardier_75.py new file mode 100644 index 00000000..f011ed76 --- /dev/null +++ b/scripts/mobiles/generic/faction/imperial/imp_bombardier_75.py @@ -0,0 +1,39 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('crackdown_stormtrooper_bombardier') + mobileTemplate.setLevel(75) + mobileTemplate.setDifficulty(1) + mobileTemplate.setAttackRange(15) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(1) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("imperial") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(False) + mobileTemplate.setFaction("imperial") + mobileTemplate.setFactionStatus(1) + + templates = Vector() + templates.add('object/mobile/shared_dressed_stormtrooper_bombardier_m.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/carbine/shared_carbine_e11.iff', 1, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedShot') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('imp_bombardier_75', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/generic/faction/imperial/imp_brigadier_general.py b/scripts/mobiles/generic/faction/imperial/imp_brigadier_general.py new file mode 100644 index 00000000..43d93116 --- /dev/null +++ b/scripts/mobiles/generic/faction/imperial/imp_brigadier_general.py @@ -0,0 +1,39 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('imperial_brigadier_general') + mobileTemplate.setLevel(25) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(15) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(1) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(True) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("imperial") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(False) + mobileTemplate.setFaction("imperial") + mobileTemplate.setFactionStatus(1) + + templates = Vector() + templates.add('object/mobile/shared_dressed_imperial_general_m.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/carbine/shared_carbine_e11.iff', 1, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedShot') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('imperial_brigadier_general', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/generic/faction/imperial/imp_cadet.py b/scripts/mobiles/generic/faction/imperial/imp_cadet.py new file mode 100644 index 00000000..bf6dc621 --- /dev/null +++ b/scripts/mobiles/generic/faction/imperial/imp_cadet.py @@ -0,0 +1,39 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('imperial_cadet') + mobileTemplate.setLevel(7) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(15) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(1) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("imperial") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(False) + mobileTemplate.setFaction("imperial") + mobileTemplate.setFactionStatus(1) + + templates = Vector() + templates.add('object/mobile/shared_dressed_imperial_soldier_m.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/carbine/shared_carbine_e11.iff', 1, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedShot') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('imp_cadet', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/generic/faction/imperial/imp_cadet_squad.py b/scripts/mobiles/generic/faction/imperial/imp_cadet_squad.py new file mode 100644 index 00000000..b85ebda8 --- /dev/null +++ b/scripts/mobiles/generic/faction/imperial/imp_cadet_squad.py @@ -0,0 +1,39 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('imperial_cadet_squadleader') + mobileTemplate.setLevel(7) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(15) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(1) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("imperial") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(False) + mobileTemplate.setFaction("imperial") + mobileTemplate.setFactionStatus(1) + + templates = Vector() + templates.add('object/mobile/shared_dressed_imperial_soldier_m.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/carbine/shared_carbine_e11.iff', 1, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedShot') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('imp_cadet_squadl', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/generic/faction/imperial/imp_captain_21.py b/scripts/mobiles/generic/faction/imperial/imp_captain_21.py new file mode 100644 index 00000000..f1ed31c4 --- /dev/null +++ b/scripts/mobiles/generic/faction/imperial/imp_captain_21.py @@ -0,0 +1,39 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('crackdown_imperial_army_captain') + mobileTemplate.setLevel(21) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(15) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(1) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("imperial") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(False) + mobileTemplate.setFaction("imperial") + mobileTemplate.setFactionStatus(1) + + templates = Vector() + templates.add('object/mobile/shared_dressed_imperial_captain_m.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/carbine/shared_carbine_e11.iff', 1, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedShot') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('imp_captain_21', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/generic/faction/imperial/imp_captain_69.py b/scripts/mobiles/generic/faction/imperial/imp_captain_69.py new file mode 100644 index 00000000..29438eaf --- /dev/null +++ b/scripts/mobiles/generic/faction/imperial/imp_captain_69.py @@ -0,0 +1,39 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('crackdown_imperial_army_captain') + mobileTemplate.setLevel(69) + mobileTemplate.setDifficulty(1) + mobileTemplate.setAttackRange(15) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(1) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("imperial") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(False) + mobileTemplate.setFaction("imperial") + mobileTemplate.setFactionStatus(1) + + templates = Vector() + templates.add('object/mobile/shared_dressed_imperial_captain_m.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/carbine/shared_carbine_e11.iff', 1, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedShot') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('imp_captain_69', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/generic/faction/imperial/imp_colonel.py b/scripts/mobiles/generic/faction/imperial/imp_colonel.py new file mode 100644 index 00000000..9e77381c --- /dev/null +++ b/scripts/mobiles/generic/faction/imperial/imp_colonel.py @@ -0,0 +1,39 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('fbase_imperial_colonel_extreme') + mobileTemplate.setLevel(89) + mobileTemplate.setDifficulty(1) + mobileTemplate.setAttackRange(15) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(1) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("imperial") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(False) + mobileTemplate.setFaction("imperial") + mobileTemplate.setFactionStatus(1) + + templates = Vector() + templates.add('object/mobile/shared_dressed_imperial_colonel_m.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/carbine/shared_carbine_e11.iff', 1, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedShot') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('grizzled_imp_colonel', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/generic/faction/imperial/imp_colonel_23.py b/scripts/mobiles/generic/faction/imperial/imp_colonel_23.py new file mode 100644 index 00000000..c939f22d --- /dev/null +++ b/scripts/mobiles/generic/faction/imperial/imp_colonel_23.py @@ -0,0 +1,39 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('crackdown_imperial_colonel') + mobileTemplate.setLevel(23) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(15) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(1) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("imperial") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(False) + mobileTemplate.setFaction("imperial") + mobileTemplate.setFactionStatus(1) + + templates = Vector() + templates.add('object/mobile/shared_dressed_imperial_colonel_m.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/carbine/shared_carbine_e11.iff', 1, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedShot') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('imp_colonel_23', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/generic/faction/imperial/imp_colonel_77.py b/scripts/mobiles/generic/faction/imperial/imp_colonel_77.py new file mode 100644 index 00000000..2320abb5 --- /dev/null +++ b/scripts/mobiles/generic/faction/imperial/imp_colonel_77.py @@ -0,0 +1,39 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('crackdown_imperial_colonel') + mobileTemplate.setLevel(77) + mobileTemplate.setDifficulty(1) + mobileTemplate.setAttackRange(15) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(1) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("imperial") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(False) + mobileTemplate.setFaction("imperial") + mobileTemplate.setFactionStatus(1) + + templates = Vector() + templates.add('object/mobile/shared_dressed_imperial_colonel_m.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/carbine/shared_carbine_e11.iff', 1, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedShot') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('imp_colonel_77', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/generic/faction/imperial/imp_comm_security_guard_15.py b/scripts/mobiles/generic/faction/imperial/imp_comm_security_guard_15.py new file mode 100644 index 00000000..e710c3ff --- /dev/null +++ b/scripts/mobiles/generic/faction/imperial/imp_comm_security_guard_15.py @@ -0,0 +1,39 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('crackdown_command_security_guard') + mobileTemplate.setLevel(15) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(15) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(1) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(True) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("imperial") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(True) + mobileTemplate.setFaction("imperial") + mobileTemplate.setFactionStatus(1) + + templates = Vector() + templates.add('object/mobile/shared_dressed_npe_imperial_officer.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/carbine/shared_carbine_e11.iff', 1, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedShot') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('imp_comm_security_guard_15', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/generic/faction/imperial/imp_comm_security_guard_67.py b/scripts/mobiles/generic/faction/imperial/imp_comm_security_guard_67.py new file mode 100644 index 00000000..6ddd90d2 --- /dev/null +++ b/scripts/mobiles/generic/faction/imperial/imp_comm_security_guard_67.py @@ -0,0 +1,39 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('crackdown_command_security_guard') + mobileTemplate.setLevel(67) + mobileTemplate.setDifficulty(1) + mobileTemplate.setAttackRange(15) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(1) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(True) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("imperial") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(True) + mobileTemplate.setFaction("imperial") + mobileTemplate.setFactionStatus(1) + + templates = Vector() + templates.add('object/mobile/shared_dressed_npe_imperial_officer.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/carbine/shared_carbine_e11.iff', 1, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedShot') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('imp_comm_security_guard_67', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/generic/faction/imperial/imp_comm_specialist_35.py b/scripts/mobiles/generic/faction/imperial/imp_comm_specialist_35.py new file mode 100644 index 00000000..56493dc3 --- /dev/null +++ b/scripts/mobiles/generic/faction/imperial/imp_comm_specialist_35.py @@ -0,0 +1,39 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('crackdown_comm_operator_hard') + mobileTemplate.setLevel(77) + mobileTemplate.setDifficulty(1) + mobileTemplate.setAttackRange(15) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(1) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(True) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("imperial") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(True) + mobileTemplate.setFaction("imperial") + mobileTemplate.setFactionStatus(1) + + templates = Vector() + templates.add('object/mobile/shared_dressed_npe_imperial_officer.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/carbine/shared_carbine_e11.iff', 1, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedShot') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('imp_comm_specialist_77', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/generic/faction/imperial/imp_comm_specialist_77.py b/scripts/mobiles/generic/faction/imperial/imp_comm_specialist_77.py new file mode 100644 index 00000000..1685a7df --- /dev/null +++ b/scripts/mobiles/generic/faction/imperial/imp_comm_specialist_77.py @@ -0,0 +1,39 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('crackdown_comm_operator_hard') + mobileTemplate.setLevel(35) + mobileTemplate.setDifficulty(1) + mobileTemplate.setAttackRange(15) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(1) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(True) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("imperial") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(True) + mobileTemplate.setFaction("imperial") + mobileTemplate.setFactionStatus(1) + + templates = Vector() + templates.add('object/mobile/shared_dressed_npe_imperial_officer.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/carbine/shared_carbine_e11.iff', 1, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedShot') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('imp_comm_specialist_35', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/generic/faction/imperial/imp_commop_14.py b/scripts/mobiles/generic/faction/imperial/imp_commop_14.py new file mode 100644 index 00000000..6084ef71 --- /dev/null +++ b/scripts/mobiles/generic/faction/imperial/imp_commop_14.py @@ -0,0 +1,39 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('fbase_comm_operator') + mobileTemplate.setLevel(14) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(15) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(1) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(True) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("imperial") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(True) + mobileTemplate.setFaction("imperial") + mobileTemplate.setFactionStatus(1) + + templates = Vector() + templates.add('object/mobile/shared_dressed_npe_imperial_officer.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/carbine/shared_carbine_e11.iff', 1, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedShot') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('imp_comm_op_14', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/generic/faction/imperial/imp_commop_64.py b/scripts/mobiles/generic/faction/imperial/imp_commop_64.py new file mode 100644 index 00000000..2dbf9a69 --- /dev/null +++ b/scripts/mobiles/generic/faction/imperial/imp_commop_64.py @@ -0,0 +1,39 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('fbase_comm_operator') + mobileTemplate.setLevel(64) + mobileTemplate.setDifficulty(1) + mobileTemplate.setAttackRange(15) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(1) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(True) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("imperial") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(True) + mobileTemplate.setFaction("imperial") + mobileTemplate.setFactionStatus(1) + + templates = Vector() + templates.add('object/mobile/shared_dressed_npe_imperial_officer.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/carbine/shared_carbine_e11.iff', 1, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedShot') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('imp_comm_op_64', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/generic/faction/imperial/imp_corporal_16.py b/scripts/mobiles/generic/faction/imperial/imp_corporal_16.py new file mode 100644 index 00000000..a76dbe4d --- /dev/null +++ b/scripts/mobiles/generic/faction/imperial/imp_corporal_16.py @@ -0,0 +1,39 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('crackdown_imperial_corporal') + mobileTemplate.setLevel(16) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(15) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(1) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(True) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("imperial") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(True) + mobileTemplate.setFaction("imperial") + mobileTemplate.setFactionStatus(1) + + templates = Vector() + templates.add('object/mobile/shared_dressed_npe_imperial_officer.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/carbine/shared_carbine_e11.iff', 1, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedShot') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('imp_corporal_16', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/generic/faction/imperial/imp_corporal_66.py b/scripts/mobiles/generic/faction/imperial/imp_corporal_66.py new file mode 100644 index 00000000..ac377ff2 --- /dev/null +++ b/scripts/mobiles/generic/faction/imperial/imp_corporal_66.py @@ -0,0 +1,39 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('crackdown_imperial_corporal') + mobileTemplate.setLevel(66) + mobileTemplate.setDifficulty(1) + mobileTemplate.setAttackRange(15) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(1) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(True) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("imperial") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(True) + mobileTemplate.setFaction("imperial") + mobileTemplate.setFactionStatus(1) + + templates = Vector() + templates.add('object/mobile/shared_dressed_npe_imperial_officer.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/carbine/shared_carbine_e11.iff', 1, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedShot') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('imp_corporal_66', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/generic/faction/imperial/imp_dead-eye_36.py b/scripts/mobiles/generic/faction/imperial/imp_dead-eye_36.py new file mode 100644 index 00000000..d43d6bc0 --- /dev/null +++ b/scripts/mobiles/generic/faction/imperial/imp_dead-eye_36.py @@ -0,0 +1,39 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('crackdown_imperial_sharpshooter_hard') + mobileTemplate.setLevel(36) + mobileTemplate.setDifficulty(1) + mobileTemplate.setAttackRange(15) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(1) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(True) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("imperial") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(True) + mobileTemplate.setFaction("imperial") + mobileTemplate.setFactionStatus(1) + + templates = Vector() + templates.add('object/mobile/shared_dressed_npe_imperial_officer.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/carbine/shared_carbine_e11.iff', 1, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedShot') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('imp_dead-eye_36', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/generic/faction/imperial/imp_dead-eye_78.py b/scripts/mobiles/generic/faction/imperial/imp_dead-eye_78.py new file mode 100644 index 00000000..4a87a4a1 --- /dev/null +++ b/scripts/mobiles/generic/faction/imperial/imp_dead-eye_78.py @@ -0,0 +1,39 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('crackdown_imperial_sharpshooter_hard') + mobileTemplate.setLevel(78) + mobileTemplate.setDifficulty(1) + mobileTemplate.setAttackRange(15) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(1) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(True) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("imperial") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(True) + mobileTemplate.setFaction("imperial") + mobileTemplate.setFactionStatus(1) + + templates = Vector() + templates.add('object/mobile/shared_dressed_npe_imperial_officer.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/carbine/shared_carbine_e11.iff', 1, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedShot') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('imp_dead-eye_78', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/generic/faction/imperial/imp_exterminator.py b/scripts/mobiles/generic/faction/imperial/imp_exterminator.py new file mode 100644 index 00000000..9ccb2c04 --- /dev/null +++ b/scripts/mobiles/generic/faction/imperial/imp_exterminator.py @@ -0,0 +1,39 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('crackdown_imperial_exterminator') + mobileTemplate.setLevel(28) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(15) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(1) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(True) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("imperial") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(True) + mobileTemplate.setFaction("imperial") + mobileTemplate.setFactionStatus(1) + + templates = Vector() + templates.add('object/mobile/shared_dressed_imperial_exterminator.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/carbine/shared_carbine_e11.iff', 1, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedShot') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('imp_exterminator', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/generic/faction/imperial/imp_general.py b/scripts/mobiles/generic/faction/imperial/imp_general.py new file mode 100644 index 00000000..dfc7f87e --- /dev/null +++ b/scripts/mobiles/generic/faction/imperial/imp_general.py @@ -0,0 +1,39 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('imperial_general') + mobileTemplate.setLevel(28) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(15) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(1) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(True) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("imperial") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(False) + mobileTemplate.setFaction("imperial") + mobileTemplate.setFactionStatus(1) + + templates = Vector() + templates.add('object/mobile/shared_dressed_imperial_general_m.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/carbine/shared_carbine_e11.iff', 1, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedShot') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('imp_general', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/generic/faction/imperial/imp_high_general.py b/scripts/mobiles/generic/faction/imperial/imp_high_general.py new file mode 100644 index 00000000..2c20bb4e --- /dev/null +++ b/scripts/mobiles/generic/faction/imperial/imp_high_general.py @@ -0,0 +1,39 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('imperial_high_general') + mobileTemplate.setLevel(29) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(15) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(1) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(True) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("imperial") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(False) + mobileTemplate.setFaction("imperial") + mobileTemplate.setFactionStatus(1) + + templates = Vector() + templates.add('object/mobile/shared_dressed_imperial_general_m.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/carbine/shared_carbine_e11.iff', 1, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedShot') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('imp_high_general', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/generic/faction/imperial/imp_inquisitor_80.py b/scripts/mobiles/generic/faction/imperial/imp_inquisitor_80.py new file mode 100644 index 00000000..c07118cd --- /dev/null +++ b/scripts/mobiles/generic/faction/imperial/imp_inquisitor_80.py @@ -0,0 +1,41 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('imperial_inquisitor') + mobileTemplate.setLevel(80) + mobileTemplate.setDifficulty(1) + mobileTemplate.setAttackRange(15) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(4) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("imperial") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(False) + mobileTemplate.setFaction("imperial") + mobileTemplate.setFactionStatus(1) + + templates = Vector() + templates.add('object/mobile/shared_dressed_imperial_inquisitor_human_male_01.iff') + templates.add('object/mobile/shared_dressed_imperial_inquisitor_human_male_02.iff') + templates.add('object/mobile/shared_dressed_imperial_inquisitor_human_male_03.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/baton/shared_baton_stun.iff', 4, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedShot') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('imp_inquisitor_80', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/generic/faction/imperial/imp_inquisitor_83.py b/scripts/mobiles/generic/faction/imperial/imp_inquisitor_83.py new file mode 100644 index 00000000..19e156a3 --- /dev/null +++ b/scripts/mobiles/generic/faction/imperial/imp_inquisitor_83.py @@ -0,0 +1,41 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('imperial_inquisitor') + mobileTemplate.setLevel(16) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(15) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(1) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("imperial") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(False) + mobileTemplate.setFaction("imperial") + mobileTemplate.setFactionStatus(1) + + templates = Vector() + templates.add('object/mobile/shared_dressed_imperial_inquisitor_human_male_01.iff') + templates.add('object/mobile/shared_dressed_imperial_inquisitor_human_male_02.iff') + templates.add('object/mobile/shared_dressed_imperial_inquisitor_human_male_03.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/carbine/shared_carbine_e11.iff', 1, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedShot') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('imp_corporal_16', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/generic/faction/imperial/imp_lance_corporal.py b/scripts/mobiles/generic/faction/imperial/imp_lance_corporal.py new file mode 100644 index 00000000..e5810fcd --- /dev/null +++ b/scripts/mobiles/generic/faction/imperial/imp_lance_corporal.py @@ -0,0 +1,39 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('imperial_lance_corporal') + mobileTemplate.setLevel(15) + mobileTemplate.setDifficulty(1) + mobileTemplate.setAttackRange(15) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(1) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("imperial") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(False) + mobileTemplate.setFaction("imperial") + mobileTemplate.setFactionStatus(1) + + templates = Vector() + templates.add('object/mobile/shared_dressed_npe_imperial_officer.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/carbine/shared_carbine_e11.iff', 1, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedShot') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('imp_lance_corp', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/generic/faction/imperial/imp_lieutenant_colonel.py b/scripts/mobiles/generic/faction/imperial/imp_lieutenant_colonel.py new file mode 100644 index 00000000..0cc698bd --- /dev/null +++ b/scripts/mobiles/generic/faction/imperial/imp_lieutenant_colonel.py @@ -0,0 +1,39 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('imperial_lieutenant_colonel') + mobileTemplate.setLevel(22) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(15) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(1) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(True) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("imperial") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(False) + mobileTemplate.setFaction("imperial") + mobileTemplate.setFactionStatus(1) + + templates = Vector() + templates.add('object/mobile/shared_dressed_imperial_colonel_m.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/carbine/shared_carbine_e11.iff', 1, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedShot') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('imp_lieutenant_colonel', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/generic/faction/imperial/imp_lieutenant_general.py b/scripts/mobiles/generic/faction/imperial/imp_lieutenant_general.py new file mode 100644 index 00000000..b6e52466 --- /dev/null +++ b/scripts/mobiles/generic/faction/imperial/imp_lieutenant_general.py @@ -0,0 +1,39 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('imperial_lieutenant_general') + mobileTemplate.setLevel(27) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(15) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(1) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(True) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("imperial") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(False) + mobileTemplate.setFaction("imperial") + mobileTemplate.setFactionStatus(1) + + templates = Vector() + templates.add('object/mobile/shared_dressed_imperial_general_m.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/carbine/shared_carbine_e11.iff', 1, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedShot') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('imp_lieutenant_general', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/generic/faction/imperial/imp_major.py b/scripts/mobiles/generic/faction/imperial/imp_major.py new file mode 100644 index 00000000..aaf2b9ff --- /dev/null +++ b/scripts/mobiles/generic/faction/imperial/imp_major.py @@ -0,0 +1,39 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('imperial_major') + mobileTemplate.setLevel(21) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(15) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(1) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(True) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("imperial") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(False) + mobileTemplate.setFaction("imperial") + mobileTemplate.setFactionStatus(1) + + templates = Vector() + templates.add('object/mobile/shared_dressed_imperial_major_m.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/carbine/shared_carbine_e11.iff', 1, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedShot') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('imp_major', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/generic/faction/imperial/imp_major_general.py b/scripts/mobiles/generic/faction/imperial/imp_major_general.py new file mode 100644 index 00000000..04edf015 --- /dev/null +++ b/scripts/mobiles/generic/faction/imperial/imp_major_general.py @@ -0,0 +1,39 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('imperial_major_general') + mobileTemplate.setLevel(26) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(15) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(1) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(True) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("imperial") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(False) + mobileTemplate.setFaction("imperial") + mobileTemplate.setFactionStatus(1) + + templates = Vector() + templates.add('object/mobile/shared_dressed_imperial_general_m.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/carbine/shared_carbine_e11.iff', 1, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedShot') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('imp_major_general', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/generic/faction/imperial/imp_master_sergant_18.py b/scripts/mobiles/generic/faction/imperial/imp_master_sergant_18.py new file mode 100644 index 00000000..ce9f08e6 --- /dev/null +++ b/scripts/mobiles/generic/faction/imperial/imp_master_sergant_18.py @@ -0,0 +1,39 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('imperial_master_sergeant') + mobileTemplate.setLevel(18) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(15) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(1) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(True) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("imperial") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(True) + mobileTemplate.setFaction("imperial") + mobileTemplate.setFactionStatus(1) + + templates = Vector() + templates.add('object/mobile/shared_dressed_npe_imperial_officer.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/carbine/shared_carbine_e11.iff', 1, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedShot') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('imp_master_sergant_18', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/generic/faction/imperial/imp_master_sergant_67.py b/scripts/mobiles/generic/faction/imperial/imp_master_sergant_67.py new file mode 100644 index 00000000..99e92ad0 --- /dev/null +++ b/scripts/mobiles/generic/faction/imperial/imp_master_sergant_67.py @@ -0,0 +1,39 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('imperial_master_sergeant') + mobileTemplate.setLevel(67) + mobileTemplate.setDifficulty(1) + mobileTemplate.setAttackRange(15) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(1) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(True) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("imperial") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(False) + mobileTemplate.setFaction("imperial") + mobileTemplate.setFactionStatus(1) + + templates = Vector() + templates.add('object/mobile/shared_dressed_npe_imperial_officer.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/carbine/shared_carbine_e11.iff', 1, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedShot') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('imp_master_sergant_67', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/generic/faction/imperial/imp_medic_16.py b/scripts/mobiles/generic/faction/imperial/imp_medic_16.py new file mode 100644 index 00000000..e9f46309 --- /dev/null +++ b/scripts/mobiles/generic/faction/imperial/imp_medic_16.py @@ -0,0 +1,41 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('imperial_medic') + mobileTemplate.setLevel(16) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(15) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(1) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("imperial") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(False) + mobileTemplate.setFaction("imperial") + mobileTemplate.setFactionStatus(1) + + templates = Vector() + templates.add('object/mobile/shared_dressed_imperial_medic1_human_male_01.iff') + templates.add('object/mobile/shared_dressed_imperial_medic3_human_male_01.iff') + templates.add('object/mobile/shared_dressed_stormtrooper_medic_m.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/carbine/shared_carbine_e11.iff', 1, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedShot') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('imp_medic_16', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/generic/faction/imperial/imp_medic_65.py b/scripts/mobiles/generic/faction/imperial/imp_medic_65.py new file mode 100644 index 00000000..eabbc37a --- /dev/null +++ b/scripts/mobiles/generic/faction/imperial/imp_medic_65.py @@ -0,0 +1,41 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('imperial_medic') + mobileTemplate.setLevel(65) + mobileTemplate.setDifficulty(1) + mobileTemplate.setAttackRange(15) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(1) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("imperial") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(False) + mobileTemplate.setFaction("imperial") + mobileTemplate.setFactionStatus(1) + + templates = Vector() + templates.add('object/mobile/shared_dressed_imperial_medic1_human_male_01.iff') + templates.add('object/mobile/shared_dressed_imperial_medic3_human_male_01.iff') + templates.add('object/mobile/shared_dressed_stormtrooper_medic_m.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/carbine/shared_carbine_e11.iff', 1, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedShot') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('imp_medic_65', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/generic/faction/imperial/imp_noncom_14.py b/scripts/mobiles/generic/faction/imperial/imp_noncom_14.py new file mode 100644 index 00000000..84223f52 --- /dev/null +++ b/scripts/mobiles/generic/faction/imperial/imp_noncom_14.py @@ -0,0 +1,39 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('crackdown_imperial_noncom') + mobileTemplate.setLevel(14) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(15) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(1) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(True) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("imperial") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(False) + mobileTemplate.setFaction("imperial") + mobileTemplate.setFactionStatus(1) + + templates = Vector() + templates.add('object/mobile/shared_dressed_npe_imperial_officer.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/carbine/shared_carbine_e11.iff', 1, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedShot') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('imp_noncom_14', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/generic/faction/imperial/imp_noncom_64.py b/scripts/mobiles/generic/faction/imperial/imp_noncom_64.py new file mode 100644 index 00000000..23594506 --- /dev/null +++ b/scripts/mobiles/generic/faction/imperial/imp_noncom_64.py @@ -0,0 +1,39 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('crackdown_imperial_noncom') + mobileTemplate.setLevel(64) + mobileTemplate.setDifficulty(1) + mobileTemplate.setAttackRange(15) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(1) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(True) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("imperial") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(False) + mobileTemplate.setFaction("imperial") + mobileTemplate.setFactionStatus(1) + + templates = Vector() + templates.add('object/mobile/shared_dressed_npe_imperial_officer.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/carbine/shared_carbine_e11.iff', 1, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedShot') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('imp_noncom_64', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/generic/faction/imperial/imp_pilot.py b/scripts/mobiles/generic/faction/imperial/imp_pilot.py new file mode 100644 index 00000000..f9b46448 --- /dev/null +++ b/scripts/mobiles/generic/faction/imperial/imp_pilot.py @@ -0,0 +1,40 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('storyteller_imperial_pilot') + mobileTemplate.setLevel(64) + mobileTemplate.setDifficulty(1) + mobileTemplate.setAttackRange(15) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(1) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(True) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("imperial") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(False) + mobileTemplate.setFaction("imperial") + mobileTemplate.setFactionStatus(1) + + templates = Vector() + templates.add('object/mobile/shared_tie_pilot_f.iff') + templates.add('object/mobile/shared_tie_pilot_m.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/carbine/shared_carbine_e11.iff', 1, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedShot') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('imp_pilot', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/generic/faction/imperial/imp_private.py b/scripts/mobiles/generic/faction/imperial/imp_private.py new file mode 100644 index 00000000..1439ad02 --- /dev/null +++ b/scripts/mobiles/generic/faction/imperial/imp_private.py @@ -0,0 +1,39 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('imperial_private') + mobileTemplate.setLevel(15) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(15) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(1) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("imperial") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(False) + mobileTemplate.setFaction("imperial") + mobileTemplate.setFactionStatus(1) + + templates = Vector() + templates.add('object/mobile/shared_dressed_npe_imperial_officer.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/carbine/shared_carbine_e11.iff', 1, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedShot') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('imp_private', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/generic/faction/imperial/imp_sandtrooper_25.py b/scripts/mobiles/generic/faction/imperial/imp_sandtrooper_25.py new file mode 100644 index 00000000..2aa37cfd --- /dev/null +++ b/scripts/mobiles/generic/faction/imperial/imp_sandtrooper_25.py @@ -0,0 +1,39 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('crackdown_sand_trooper') + mobileTemplate.setLevel(25) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(15) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(1) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("imperial") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(False) + mobileTemplate.setFaction("imperial") + mobileTemplate.setFactionStatus(1) + + templates = Vector() + templates.add('object/mobile/shared_dressed_stormtrooper_sand_trooper_m.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/carbine/shared_carbine_e11.iff', 1, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedShot') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('imp_sandtrooper_25', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/generic/faction/imperial/imp_sandtrooper_75.py b/scripts/mobiles/generic/faction/imperial/imp_sandtrooper_75.py new file mode 100644 index 00000000..39250a46 --- /dev/null +++ b/scripts/mobiles/generic/faction/imperial/imp_sandtrooper_75.py @@ -0,0 +1,39 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('crackdown_sand_trooper') + mobileTemplate.setLevel(75) + mobileTemplate.setDifficulty(1) + mobileTemplate.setAttackRange(15) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(1) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("imperial") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(False) + mobileTemplate.setFaction("imperial") + mobileTemplate.setFactionStatus(1) + + templates = Vector() + templates.add('object/mobile/shared_dressed_stormtrooper_sand_trooper_m.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/carbine/shared_carbine_e11.iff', 1, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedShot') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('imp_sandtrooper_75', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/generic/faction/imperial/imp_scouttrooper_23.py b/scripts/mobiles/generic/faction/imperial/imp_scouttrooper_23.py new file mode 100644 index 00000000..91c361f7 --- /dev/null +++ b/scripts/mobiles/generic/faction/imperial/imp_scouttrooper_23.py @@ -0,0 +1,39 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('crackdown_scout_trooper') + mobileTemplate.setLevel(23) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(15) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(1) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("imperial") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(False) + mobileTemplate.setFaction("imperial") + mobileTemplate.setFactionStatus(1) + + templates = Vector() + templates.add('object/mobile/shared_dressed_scout_trooper_white_white.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/carbine/shared_carbine_e11.iff', 1, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedShot') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('imp_scout_trooper_23', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/generic/faction/imperial/imp_scouttrooper_67.py b/scripts/mobiles/generic/faction/imperial/imp_scouttrooper_67.py new file mode 100644 index 00000000..2e6eff56 --- /dev/null +++ b/scripts/mobiles/generic/faction/imperial/imp_scouttrooper_67.py @@ -0,0 +1,39 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('crackdown_scout_trooper') + mobileTemplate.setLevel(67) + mobileTemplate.setDifficulty(1) + mobileTemplate.setAttackRange(15) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(1) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("imperial") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(False) + mobileTemplate.setFaction("imperial") + mobileTemplate.setFactionStatus(1) + + templates = Vector() + templates.add('object/mobile/shared_dressed_scout_trooper_white_white.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/carbine/shared_carbine_e11.iff', 1, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedShot') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('imp_scout_trooper_67', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/generic/faction/imperial/imp_second_lieutenant.py b/scripts/mobiles/generic/faction/imperial/imp_second_lieutenant.py new file mode 100644 index 00000000..3ba3a6dc --- /dev/null +++ b/scripts/mobiles/generic/faction/imperial/imp_second_lieutenant.py @@ -0,0 +1,39 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('imperial_second_lieutenant') + mobileTemplate.setLevel(20) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(15) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(1) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(True) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("imperial") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(False) + mobileTemplate.setFaction("imperial") + mobileTemplate.setFactionStatus(1) + + templates = Vector() + templates.add('object/mobile/shared_dressed_imperial_lieutenant_m.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/carbine/shared_carbine_e11.iff', 1, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedShot') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('imp_2nd_lieutenant', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/generic/faction/imperial/imp_senior_cadet.py b/scripts/mobiles/generic/faction/imperial/imp_senior_cadet.py new file mode 100644 index 00000000..f02086f2 --- /dev/null +++ b/scripts/mobiles/generic/faction/imperial/imp_senior_cadet.py @@ -0,0 +1,39 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('imperial_senior_cadet') + mobileTemplate.setLevel(8) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(15) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(1) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("imperial") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(False) + mobileTemplate.setFaction("imperial") + mobileTemplate.setFactionStatus(1) + + templates = Vector() + templates.add('object/mobile/shared_dressed_imperial_soldier_m.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/carbine/shared_carbine_e11.iff', 1, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedShot') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('imp_senior_cadet', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/generic/faction/imperial/imp_sergeant_16.py b/scripts/mobiles/generic/faction/imperial/imp_sergeant_16.py new file mode 100644 index 00000000..668fa8f3 --- /dev/null +++ b/scripts/mobiles/generic/faction/imperial/imp_sergeant_16.py @@ -0,0 +1,39 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('imperial_sergeant') + mobileTemplate.setLevel(16) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(15) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(1) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("imperial") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(False) + mobileTemplate.setFaction("imperial") + mobileTemplate.setFactionStatus(1) + + templates = Vector() + templates.add('object/mobile/shared_dressed_npe_imperial_officer.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/carbine/shared_carbine_e11.iff', 1, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedShot') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('imp_sergeant_16', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/generic/faction/imperial/imp_sergeant_65.py b/scripts/mobiles/generic/faction/imperial/imp_sergeant_65.py new file mode 100644 index 00000000..60e57e86 --- /dev/null +++ b/scripts/mobiles/generic/faction/imperial/imp_sergeant_65.py @@ -0,0 +1,39 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('imperial_sergeant') + mobileTemplate.setLevel(65) + mobileTemplate.setDifficulty(1) + mobileTemplate.setAttackRange(15) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(1) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("imperial") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(False) + mobileTemplate.setFaction("imperial") + mobileTemplate.setFactionStatus(1) + + templates = Vector() + templates.add('object/mobile/shared_dressed_npe_imperial_officer.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/carbine/shared_carbine_e11.iff', 1, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedShot') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('imp_sergeant_65', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/generic/faction/imperial/imp_sergeant_major.py b/scripts/mobiles/generic/faction/imperial/imp_sergeant_major.py new file mode 100644 index 00000000..499f8f66 --- /dev/null +++ b/scripts/mobiles/generic/faction/imperial/imp_sergeant_major.py @@ -0,0 +1,39 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('imperial_sergeant_major') + mobileTemplate.setLevel(16) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(15) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(1) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("imperial") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(False) + mobileTemplate.setFaction("imperial") + mobileTemplate.setFactionStatus(1) + + templates = Vector() + templates.add('object/mobile/shared_dressed_npe_imperial_officer.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/carbine/shared_carbine_e11.iff', 1, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedShot') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('imp_sergeant_major', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/generic/faction/imperial/imp_sharpshooter_17.py b/scripts/mobiles/generic/faction/imperial/imp_sharpshooter_17.py new file mode 100644 index 00000000..36d399f6 --- /dev/null +++ b/scripts/mobiles/generic/faction/imperial/imp_sharpshooter_17.py @@ -0,0 +1,39 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('imperial_sharpshooter') + mobileTemplate.setLevel(17) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(15) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(1) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("imperial") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(False) + mobileTemplate.setFaction("imperial") + mobileTemplate.setFactionStatus(1) + + templates = Vector() + templates.add('object/mobile/shared_dressed_npe_imperial_officer.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/carbine/shared_carbine_e11.iff', 1, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedShot') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('imp_sharpshooter_17', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/generic/faction/imperial/imp_sharpshooter_66.py b/scripts/mobiles/generic/faction/imperial/imp_sharpshooter_66.py new file mode 100644 index 00000000..d729278f --- /dev/null +++ b/scripts/mobiles/generic/faction/imperial/imp_sharpshooter_66.py @@ -0,0 +1,39 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('imperial_sharpshooter') + mobileTemplate.setLevel(66) + mobileTemplate.setDifficulty(1) + mobileTemplate.setAttackRange(15) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(1) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("imperial") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(False) + mobileTemplate.setFaction("imperial") + mobileTemplate.setFactionStatus(1) + + templates = Vector() + templates.add('object/mobile/shared_dressed_npe_imperial_officer.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/rifle/shared_rifle_e11.iff', 1, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedShot') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('imp_sharpshooter_66', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/generic/faction/imperial/imp_specialist_13.py b/scripts/mobiles/generic/faction/imperial/imp_specialist_13.py new file mode 100644 index 00000000..1428ffd7 --- /dev/null +++ b/scripts/mobiles/generic/faction/imperial/imp_specialist_13.py @@ -0,0 +1,39 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('crackdown_specialist_noncom') + mobileTemplate.setLevel(13) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(15) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(1) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("imperial") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(False) + mobileTemplate.setFaction("imperial") + mobileTemplate.setFactionStatus(1) + + templates = Vector() + templates.add('object/mobile/shared_dressed_npe_imperial_officer.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/carbine/shared_carbine_e11.iff', 1, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedShot') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('imp_specialist_13', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/generic/faction/imperial/imp_specialist_65.py b/scripts/mobiles/generic/faction/imperial/imp_specialist_65.py new file mode 100644 index 00000000..3ef94922 --- /dev/null +++ b/scripts/mobiles/generic/faction/imperial/imp_specialist_65.py @@ -0,0 +1,39 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('crackdown_specialist_noncom') + mobileTemplate.setLevel(65) + mobileTemplate.setDifficulty(1) + mobileTemplate.setAttackRange(15) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(1) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("imperial") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(False) + mobileTemplate.setFaction("imperial") + mobileTemplate.setFactionStatus(1) + + templates = Vector() + templates.add('object/mobile/shared_dressed_npe_imperial_officer.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/carbine/shared_carbine_e11.iff', 1, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedShot') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('imp_specialist_65', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/generic/faction/imperial/imp_staff_corporal.py b/scripts/mobiles/generic/faction/imperial/imp_staff_corporal.py new file mode 100644 index 00000000..ee337374 --- /dev/null +++ b/scripts/mobiles/generic/faction/imperial/imp_staff_corporal.py @@ -0,0 +1,39 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('imperial_staff_corporal') + mobileTemplate.setLevel(17) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(15) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(1) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("imperial") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(False) + mobileTemplate.setFaction("imperial") + mobileTemplate.setFactionStatus(1) + + templates = Vector() + templates.add('object/mobile/shared_dressed_npe_imperial_officer.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/carbine/shared_carbine_e11.iff', 1, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedShot') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('imp_staff_corp', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/generic/faction/imperial/imp_staff_sergeant.py b/scripts/mobiles/generic/faction/imperial/imp_staff_sergeant.py new file mode 100644 index 00000000..8addc0e6 --- /dev/null +++ b/scripts/mobiles/generic/faction/imperial/imp_staff_sergeant.py @@ -0,0 +1,39 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('imperial_staff_sergeant') + mobileTemplate.setLevel(17) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(15) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(1) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("imperial") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(False) + mobileTemplate.setFaction("imperial") + mobileTemplate.setFactionStatus(1) + + templates = Vector() + templates.add('object/mobile/shared_dressed_npe_imperial_officer.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/carbine/shared_carbine_e11.iff', 1, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedShot') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('imp_staff_serg', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/generic/faction/imperial/imp_stealth_operative.py b/scripts/mobiles/generic/faction/imperial/imp_stealth_operative.py new file mode 100644 index 00000000..92a7fceb --- /dev/null +++ b/scripts/mobiles/generic/faction/imperial/imp_stealth_operative.py @@ -0,0 +1,39 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('assassin_mission_recruiter_imperial') + mobileTemplate.setLevel(16) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(15) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(1) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("imperial") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(False) + mobileTemplate.setFaction("imperial") + mobileTemplate.setFactionStatus(1) + + templates = Vector() + templates.add('object/mobile/shared_dressed_npe_imperial_officer.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/carbine/shared_carbine_e11.iff', 1, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedShot') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('imp_stealth_op', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/generic/faction/imperial/imp_storm_captain_29.py b/scripts/mobiles/generic/faction/imperial/imp_storm_captain_29.py new file mode 100644 index 00000000..36c2b05c --- /dev/null +++ b/scripts/mobiles/generic/faction/imperial/imp_storm_captain_29.py @@ -0,0 +1,41 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('crackdown_stormtrooper_captain') + mobileTemplate.setLevel(29) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(15) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(1) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("imperial") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(False) + mobileTemplate.setFaction("imperial") + mobileTemplate.setFactionStatus(1) + + templates = Vector() + templates.add('object/mobile/shared_dressed_stormtrooper_captain_black_black.iff') + templates.add('object/mobile/shared_dressed_stormtrooper_captain_black_gold.iff') + templates.add('object/mobile/shared_dressed_stormtrooper_captain_white_white.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/carbine/shared_carbine_e11.iff', 1, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedShot') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('imp_storm_captain_29', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/generic/faction/imperial/imp_storm_captain_81.py b/scripts/mobiles/generic/faction/imperial/imp_storm_captain_81.py new file mode 100644 index 00000000..7e87dda5 --- /dev/null +++ b/scripts/mobiles/generic/faction/imperial/imp_storm_captain_81.py @@ -0,0 +1,41 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('crackdown_stormtrooper_captain') + mobileTemplate.setLevel(81) + mobileTemplate.setDifficulty(1) + mobileTemplate.setAttackRange(15) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(1) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("imperial") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(False) + mobileTemplate.setFaction("imperial") + mobileTemplate.setFactionStatus(1) + + templates = Vector() + templates.add('object/mobile/shared_dressed_stormtrooper_captain_black_black.iff') + templates.add('object/mobile/shared_dressed_stormtrooper_captain_black_gold.iff') + templates.add('object/mobile/shared_dressed_stormtrooper_captain_white_white.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/carbine/shared_carbine_e11.iff', 1, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedShot') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('imp_storm_captain_81', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/generic/faction/imperial/imp_storm_commando_29.py b/scripts/mobiles/generic/faction/imperial/imp_storm_commando_29.py new file mode 100644 index 00000000..2b462191 --- /dev/null +++ b/scripts/mobiles/generic/faction/imperial/imp_storm_commando_29.py @@ -0,0 +1,40 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('crackdown_storm_commando') + mobileTemplate.setLevel(16) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(15) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(1) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("imperial") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(True) + mobileTemplate.setFaction("imperial") + mobileTemplate.setFactionStatus(1) + + templates = Vector() + templates.add('object/mobile/shared_dressed_stormtrooper_commando_m.iff') + templates.add('object/mobile/shared_dressed_stormtrooper_commando1_m.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/carbine/shared_carbine_e11.iff', 1, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedShot') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('imp_storm_commando_16', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/generic/faction/imperial/imp_storm_commando_80.py b/scripts/mobiles/generic/faction/imperial/imp_storm_commando_80.py new file mode 100644 index 00000000..7fff379e --- /dev/null +++ b/scripts/mobiles/generic/faction/imperial/imp_storm_commando_80.py @@ -0,0 +1,40 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('crackdown_storm_commando') + mobileTemplate.setLevel(80) + mobileTemplate.setDifficulty(1) + mobileTemplate.setAttackRange(15) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(1) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("imperial") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(True) + mobileTemplate.setFaction("imperial") + mobileTemplate.setFactionStatus(1) + + templates = Vector() + templates.add('object/mobile/shared_dressed_stormtrooper_commando_m.iff') + templates.add('object/mobile/shared_dressed_stormtrooper_commando1_m.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/carbine/shared_carbine_e11.iff', 1, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedShot') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('imp_storm_commando_80', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/generic/faction/imperial/imp_stormmedic_25.py b/scripts/mobiles/generic/faction/imperial/imp_stormmedic_25.py new file mode 100644 index 00000000..39761871 --- /dev/null +++ b/scripts/mobiles/generic/faction/imperial/imp_stormmedic_25.py @@ -0,0 +1,41 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('crackdown_stormtrooper_medic') + mobileTemplate.setLevel(25) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(15) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(1) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("imperial") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(False) + mobileTemplate.setFaction("imperial") + mobileTemplate.setFactionStatus(1) + + templates = Vector() + templates.add('object/mobile/shared_dressed_imperial_medic1_human_male_01.iff') + templates.add('object/mobile/shared_dressed_imperial_medic3_human_male_01.iff') + templates.add('object/mobile/shared_dressed_stormtrooper_medic_m.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/carbine/shared_carbine_e11.iff', 1, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedShot') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('imp_stormmedic_25', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/generic/faction/imperial/imp_stormmedic_74.py b/scripts/mobiles/generic/faction/imperial/imp_stormmedic_74.py new file mode 100644 index 00000000..7072dac1 --- /dev/null +++ b/scripts/mobiles/generic/faction/imperial/imp_stormmedic_74.py @@ -0,0 +1,41 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('crackdown_stormtrooper_medic') + mobileTemplate.setLevel(74) + mobileTemplate.setDifficulty(1) + mobileTemplate.setAttackRange(15) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(1) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("imperial") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(False) + mobileTemplate.setFaction("imperial") + mobileTemplate.setFactionStatus(1) + + templates = Vector() + templates.add('object/mobile/shared_dressed_imperial_medic1_human_male_01.iff') + templates.add('object/mobile/shared_dressed_imperial_medic3_human_male_01.iff') + templates.add('object/mobile/shared_dressed_stormtrooper_medic_m.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/carbine/shared_carbine_e11.iff', 1, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedShot') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('imp_stormmedic_74', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/generic/faction/imperial/imp_stormrifle_25.py b/scripts/mobiles/generic/faction/imperial/imp_stormrifle_25.py new file mode 100644 index 00000000..d05826ec --- /dev/null +++ b/scripts/mobiles/generic/faction/imperial/imp_stormrifle_25.py @@ -0,0 +1,39 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('crackdown_stormtrooper_rifleman') + mobileTemplate.setLevel(25) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(15) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(1) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("imperial") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(False) + mobileTemplate.setFaction("imperial") + mobileTemplate.setFactionStatus(1) + + templates = Vector() + templates.add('object/mobile/shared_dressed_stormtrooper_rifleman_m.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/carbine/shared_carbine_e11.iff', 1, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedShot') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('imp_stormrifle_25', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/generic/faction/imperial/imp_stormrifle_79.py b/scripts/mobiles/generic/faction/imperial/imp_stormrifle_79.py new file mode 100644 index 00000000..a0d32eb9 --- /dev/null +++ b/scripts/mobiles/generic/faction/imperial/imp_stormrifle_79.py @@ -0,0 +1,39 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('crackdown_stormtrooper_rifleman') + mobileTemplate.setLevel(79) + mobileTemplate.setDifficulty(1) + mobileTemplate.setAttackRange(15) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(1) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("imperial") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(False) + mobileTemplate.setFaction("imperial") + mobileTemplate.setFactionStatus(1) + + templates = Vector() + templates.add('object/mobile/shared_dressed_stormtrooper_rifleman_m.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/carbine/shared_carbine_e11.iff', 1, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedShot') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('imp_stormrifle_79', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/generic/faction/imperial/imp_stormsniper_25.py b/scripts/mobiles/generic/faction/imperial/imp_stormsniper_25.py new file mode 100644 index 00000000..5e597eca --- /dev/null +++ b/scripts/mobiles/generic/faction/imperial/imp_stormsniper_25.py @@ -0,0 +1,39 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('crackdown_stormtrooper_sniper') + mobileTemplate.setLevel(25) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(15) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(1) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("imperial") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(False) + mobileTemplate.setFaction("imperial") + mobileTemplate.setFactionStatus(1) + + templates = Vector() + templates.add('object/mobile/shared_dressed_stormtrooper_sniper_m.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/carbine/shared_carbine_e11.iff', 1, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedShot') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('imp_stormsniper_25', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/generic/faction/imperial/imp_stormsniper_79.py b/scripts/mobiles/generic/faction/imperial/imp_stormsniper_79.py new file mode 100644 index 00000000..eb5b16aa --- /dev/null +++ b/scripts/mobiles/generic/faction/imperial/imp_stormsniper_79.py @@ -0,0 +1,39 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('crackdown_stormtrooper_sniper') + mobileTemplate.setLevel(75) + mobileTemplate.setDifficulty(1) + mobileTemplate.setAttackRange(15) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(0) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("imperial") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(False) + mobileTemplate.setFaction("imperial") + mobileTemplate.setFactionStatus(1) + + templates = Vector() + templates.add('object/mobile/shared_dressed_stormtrooper_sniper_m.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/rifle/shared_rifle_e11.iff', 0, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedShot') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('imp_stormsniper_75', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/generic/faction/imperial/imp_stormsurgeon_50.py b/scripts/mobiles/generic/faction/imperial/imp_stormsurgeon_50.py new file mode 100644 index 00000000..8794f0c7 --- /dev/null +++ b/scripts/mobiles/generic/faction/imperial/imp_stormsurgeon_50.py @@ -0,0 +1,41 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('crackdown_stormtrooper_medic_hard') + mobileTemplate.setLevel(50) + mobileTemplate.setDifficulty(1) + mobileTemplate.setAttackRange(15) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(1) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("imperial") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(False) + mobileTemplate.setFaction("imperial") + mobileTemplate.setFactionStatus(1) + + templates = Vector() + templates.add('object/mobile/shared_dressed_imperial_medic1_human_male_01.iff') + templates.add('object/mobile/shared_dressed_imperial_medic3_human_male_01.iff') + templates.add('object/mobile/shared_dressed_stormtrooper_medic_m.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/carbine/shared_carbine_e11.iff', 1, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedShot') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('imp_stormsurgeon_50', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/generic/faction/imperial/imp_stormsurgeon_85.py b/scripts/mobiles/generic/faction/imperial/imp_stormsurgeon_85.py new file mode 100644 index 00000000..75cdf96b --- /dev/null +++ b/scripts/mobiles/generic/faction/imperial/imp_stormsurgeon_85.py @@ -0,0 +1,41 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('crackdown_stormtrooper_medic_hard') + mobileTemplate.setLevel(85) + mobileTemplate.setDifficulty(1) + mobileTemplate.setAttackRange(15) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(1) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("imperial") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(False) + mobileTemplate.setFaction("imperial") + mobileTemplate.setFactionStatus(1) + + templates = Vector() + templates.add('object/mobile/shared_dressed_imperial_medic1_human_male_01.iff') + templates.add('object/mobile/shared_dressed_imperial_medic3_human_male_01.iff') + templates.add('object/mobile/shared_dressed_stormtrooper_medic_m.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/carbine/shared_carbine_e11.iff', 1, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedShot') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('imp_stormsurgeon_85', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/generic/faction/imperial/imp_stormsurgeon_89.py b/scripts/mobiles/generic/faction/imperial/imp_stormsurgeon_89.py new file mode 100644 index 00000000..4cb9f5e4 --- /dev/null +++ b/scripts/mobiles/generic/faction/imperial/imp_stormsurgeon_89.py @@ -0,0 +1,41 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('crackdown_stormtrooper_medic_hard') + mobileTemplate.setLevel(89) + mobileTemplate.setDifficulty(1) + mobileTemplate.setAttackRange(15) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(1) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("imperial") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(False) + mobileTemplate.setFaction("imperial") + mobileTemplate.setFactionStatus(1) + + templates = Vector() + templates.add('object/mobile/shared_dressed_imperial_medic1_human_male_01.iff') + templates.add('object/mobile/shared_dressed_imperial_medic3_human_male_01.iff') + templates.add('object/mobile/shared_dressed_stormtrooper_medic_m.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/carbine/shared_carbine_e11.iff', 1, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedShot') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('imp_stormsurgeon_89', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/generic/faction/imperial/imp_stormtrooper_25.py b/scripts/mobiles/generic/faction/imperial/imp_stormtrooper_25.py new file mode 100644 index 00000000..9951511e --- /dev/null +++ b/scripts/mobiles/generic/faction/imperial/imp_stormtrooper_25.py @@ -0,0 +1,39 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('crackdown_stormtrooper') + mobileTemplate.setLevel(25) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(15) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(1) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("imperial") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(False) + mobileTemplate.setFaction("imperial") + mobileTemplate.setFactionStatus(1) + + templates = Vector() + templates.add('object/mobile/shared_stormtrooper.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/carbine/shared_carbine_e11.iff', 1, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedShot') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('imp_stormtrooper_25', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/generic/faction/imperial/imp_stormtrooper_80.py b/scripts/mobiles/generic/faction/imperial/imp_stormtrooper_80.py new file mode 100644 index 00000000..20617178 --- /dev/null +++ b/scripts/mobiles/generic/faction/imperial/imp_stormtrooper_80.py @@ -0,0 +1,39 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('crackdown_stormtrooper') + mobileTemplate.setLevel(80) + mobileTemplate.setDifficulty(1) + mobileTemplate.setAttackRange(15) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(1) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("imperial") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(False) + mobileTemplate.setFaction("imperial") + mobileTemplate.setFactionStatus(1) + + templates = Vector() + templates.add('object/mobile/shared_stormtrooper.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/carbine/shared_carbine_e11.iff', 1, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedShot') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('imp_stormtrooper_80', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/generic/faction/imperial/imp_stormtrooper_colonel_55.py b/scripts/mobiles/generic/faction/imperial/imp_stormtrooper_colonel_55.py new file mode 100644 index 00000000..fa22af52 --- /dev/null +++ b/scripts/mobiles/generic/faction/imperial/imp_stormtrooper_colonel_55.py @@ -0,0 +1,39 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('fbase_stormtrooper_squad_leader_extreme') + mobileTemplate.setLevel(55) + mobileTemplate.setDifficulty(1) + mobileTemplate.setAttackRange(15) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(1) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("imperial") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(False) + mobileTemplate.setFaction("imperial") + mobileTemplate.setFactionStatus(1) + + templates = Vector() + templates.add('object/mobile/shared_stormtrooper.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/carbine/shared_carbine_e11.iff', 1, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedShot') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('imp_stormtrooper_colonel_55', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/generic/faction/imperial/imp_stormtrooper_colonel_86.py b/scripts/mobiles/generic/faction/imperial/imp_stormtrooper_colonel_86.py new file mode 100644 index 00000000..9ffb1607 --- /dev/null +++ b/scripts/mobiles/generic/faction/imperial/imp_stormtrooper_colonel_86.py @@ -0,0 +1,39 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('fbase_stormtrooper_squad_leader_extreme') + mobileTemplate.setLevel(86) + mobileTemplate.setDifficulty(1) + mobileTemplate.setAttackRange(15) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(1) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("imperial") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(False) + mobileTemplate.setFaction("imperial") + mobileTemplate.setFactionStatus(1) + + templates = Vector() + templates.add('object/mobile/shared_stormtrooper.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/carbine/shared_carbine_e11.iff', 1, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedShot') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('imp_stormtrooper_colonel_86', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/generic/faction/imperial/imp_stormtrooper_colonel_89.py b/scripts/mobiles/generic/faction/imperial/imp_stormtrooper_colonel_89.py new file mode 100644 index 00000000..a40e5ebb --- /dev/null +++ b/scripts/mobiles/generic/faction/imperial/imp_stormtrooper_colonel_89.py @@ -0,0 +1,39 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('fbase_stormtrooper_squad_leader_extreme') + mobileTemplate.setLevel(89) + mobileTemplate.setDifficulty(1) + mobileTemplate.setAttackRange(15) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(1) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("imperial") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(False) + mobileTemplate.setFaction("imperial") + mobileTemplate.setFactionStatus(1) + + templates = Vector() + templates.add('object/mobile/shared_stormtrooper.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/carbine/shared_carbine_e11.iff', 1, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedShot') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('imp_stormtrooper_colonel_89', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/generic/faction/imperial/imp_stormtrooper_squad_leader_27.py b/scripts/mobiles/generic/faction/imperial/imp_stormtrooper_squad_leader_27.py new file mode 100644 index 00000000..91695b01 --- /dev/null +++ b/scripts/mobiles/generic/faction/imperial/imp_stormtrooper_squad_leader_27.py @@ -0,0 +1,39 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('fbase_stormtrooper_squad_leader') + mobileTemplate.setLevel(27) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(15) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(1) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("imperial") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(False) + mobileTemplate.setFaction("imperial") + mobileTemplate.setFactionStatus(1) + + templates = Vector() + templates.add('object/mobile/shared_stormtrooper.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/carbine/shared_carbine_e11.iff', 1, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedShot') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('imp_stormtrooper_squad_leader_27', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/generic/faction/imperial/imp_stormtrooper_squad_leader_76.py b/scripts/mobiles/generic/faction/imperial/imp_stormtrooper_squad_leader_76.py new file mode 100644 index 00000000..75cd634f --- /dev/null +++ b/scripts/mobiles/generic/faction/imperial/imp_stormtrooper_squad_leader_76.py @@ -0,0 +1,39 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('fbase_stormtrooper_squad_leader') + mobileTemplate.setLevel(76) + mobileTemplate.setDifficulty(2) + mobileTemplate.setAttackRange(15) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(1) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("imperial") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(False) + mobileTemplate.setFaction("imperial") + mobileTemplate.setFactionStatus(1) + + templates = Vector() + templates.add('object/mobile/shared_stormtrooper.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/carbine/shared_carbine_e11.iff', 1, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedShot') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('imp_stormtrooper_squad_leader_76', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/generic/faction/imperial/imp_surface_marshall.py b/scripts/mobiles/generic/faction/imperial/imp_surface_marshall.py new file mode 100644 index 00000000..9c94d781 --- /dev/null +++ b/scripts/mobiles/generic/faction/imperial/imp_surface_marshall.py @@ -0,0 +1,39 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('imperial_surface_marshal') + mobileTemplate.setLevel(30) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(15) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(1) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(True) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("imperial") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(False) + mobileTemplate.setFaction("imperial") + mobileTemplate.setFactionStatus(1) + + templates = Vector() + templates.add('object/mobile/shared_dressed_npe_imperial_officer.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/carbine/shared_carbine_e11.iff', 1, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedShot') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('imp_surface_marshall', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/generic/faction/imperial/imp_surgeon_33.py b/scripts/mobiles/generic/faction/imperial/imp_surgeon_33.py new file mode 100644 index 00000000..869eb854 --- /dev/null +++ b/scripts/mobiles/generic/faction/imperial/imp_surgeon_33.py @@ -0,0 +1,41 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('crackdown_imperial_medic_hard') + mobileTemplate.setLevel(33) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(15) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(1) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("imperial") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(False) + mobileTemplate.setFaction("imperial") + mobileTemplate.setFactionStatus(1) + + templates = Vector() + templates.add('object/mobile/shared_dressed_imperial_medic1_human_male_01.iff') + templates.add('object/mobile/shared_dressed_imperial_medic3_human_male_01.iff') + templates.add('object/mobile/shared_dressed_stormtrooper_medic_m.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/carbine/shared_carbine_e11.iff', 1, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedShot') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('imp_surgeon_33', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/generic/faction/imperial/imp_surgeon_77.py b/scripts/mobiles/generic/faction/imperial/imp_surgeon_77.py new file mode 100644 index 00000000..b63705b1 --- /dev/null +++ b/scripts/mobiles/generic/faction/imperial/imp_surgeon_77.py @@ -0,0 +1,41 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('crackdown_imperial_medic_hard') + mobileTemplate.setLevel(77) + mobileTemplate.setDifficulty(1) + mobileTemplate.setAttackRange(15) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(1) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("imperial") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(False) + mobileTemplate.setFaction("imperial") + mobileTemplate.setFactionStatus(1) + + templates = Vector() + templates.add('object/mobile/shared_dressed_imperial_medic1_human_male_01.iff') + templates.add('object/mobile/shared_dressed_imperial_medic3_human_male_01.iff') + templates.add('object/mobile/shared_dressed_stormtrooper_medic_m.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/carbine/shared_carbine_e11.iff', 1, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedShot') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('imp_surgeon_77', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/generic/faction/imperial/imp_swamp_trooper.py b/scripts/mobiles/generic/faction/imperial/imp_swamp_trooper.py new file mode 100644 index 00000000..65c794b1 --- /dev/null +++ b/scripts/mobiles/generic/faction/imperial/imp_swamp_trooper.py @@ -0,0 +1,40 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('crackdown_swamp_trooper') + mobileTemplate.setLevel(25) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(15) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(1) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("imperial") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(False) + mobileTemplate.setFaction("imperial") + mobileTemplate.setFactionStatus(1) + + templates = Vector() + templates.add('object/mobile/shared_dressed_swamp_trooper.iff') + templates.add('object/mobile/shared_dressed_swamp_trooper_m.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/carbine/shared_carbine_e11.iff', 1, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedShot') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('swamp_trooper', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/generic/faction/imperial/imp_trooper.py b/scripts/mobiles/generic/faction/imperial/imp_trooper.py new file mode 100644 index 00000000..3c37938c --- /dev/null +++ b/scripts/mobiles/generic/faction/imperial/imp_trooper.py @@ -0,0 +1,39 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('imperial_trooper') + mobileTemplate.setLevel(15) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(15) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(1) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("imperial") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(False) + mobileTemplate.setFaction("imperial") + mobileTemplate.setFactionStatus(1) + + templates = Vector() + templates.add('object/mobile/shared_stormtrooper.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/carbine/shared_carbine_e11.iff', 1, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedShot') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('imp_trooper', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/generic/faction/imperial/imp_warant_officer_i.py b/scripts/mobiles/generic/faction/imperial/imp_warant_officer_i.py new file mode 100644 index 00000000..9bb2e1ef --- /dev/null +++ b/scripts/mobiles/generic/faction/imperial/imp_warant_officer_i.py @@ -0,0 +1,39 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('imperial_warrant_officer_i') + mobileTemplate.setLevel(19) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(15) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(1) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(True) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("imperial") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(False) + mobileTemplate.setFaction("imperial") + mobileTemplate.setFactionStatus(1) + + templates = Vector() + templates.add('object/mobile/shared_dressed_npe_imperial_officer.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/carbine/shared_carbine_e11.iff', 1, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedShot') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('imp_warrant_offi_i', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/generic/faction/imperial/imp_warant_officer_ii.py b/scripts/mobiles/generic/faction/imperial/imp_warant_officer_ii.py new file mode 100644 index 00000000..d0bc9036 --- /dev/null +++ b/scripts/mobiles/generic/faction/imperial/imp_warant_officer_ii.py @@ -0,0 +1,39 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('imperial_warrant_officer_ii') + mobileTemplate.setLevel(18) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(15) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(1) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(True) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("imperial") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(False) + mobileTemplate.setFaction("imperial") + mobileTemplate.setFactionStatus(1) + + templates = Vector() + templates.add('object/mobile/shared_dressed_npe_imperial_officer.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/carbine/shared_carbine_e11.iff', 1, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedShot') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('imp_warrant_offi_ii', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/generic/faction/imperial/imp_warant_officer_ii_1st_class_33.py b/scripts/mobiles/generic/faction/imperial/imp_warant_officer_ii_1st_class_33.py new file mode 100644 index 00000000..d2007979 --- /dev/null +++ b/scripts/mobiles/generic/faction/imperial/imp_warant_officer_ii_1st_class_33.py @@ -0,0 +1,39 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('crackdown_imperial_warrant_officer_ii_hard') + mobileTemplate.setLevel(33) + mobileTemplate.setDifficulty(1) + mobileTemplate.setAttackRange(15) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(1) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(True) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("imperial") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(False) + mobileTemplate.setFaction("imperial") + mobileTemplate.setFactionStatus(1) + + templates = Vector() + templates.add('object/mobile/shared_dressed_npe_imperial_officer.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/carbine/shared_carbine_e11.iff', 1, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedShot') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('imp_warrant_offi_1st_class_ii_33', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/generic/faction/imperial/imp_warant_officer_ii_1st_class_79.py b/scripts/mobiles/generic/faction/imperial/imp_warant_officer_ii_1st_class_79.py new file mode 100644 index 00000000..90b8f652 --- /dev/null +++ b/scripts/mobiles/generic/faction/imperial/imp_warant_officer_ii_1st_class_79.py @@ -0,0 +1,39 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('crackdown_imperial_warrant_officer_ii_hard') + mobileTemplate.setLevel(79) + mobileTemplate.setDifficulty(1) + mobileTemplate.setAttackRange(15) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(1) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(True) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("imperial") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(False) + mobileTemplate.setFaction("imperial") + mobileTemplate.setFactionStatus(1) + + templates = Vector() + templates.add('object/mobile/shared_dressed_npe_imperial_officer.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/carbine/shared_carbine_e11.iff', 1, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedShot') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('imp_warrant_offi_1st_class_ii_79', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/generic/faction/imperial/imp_warant_officer_ii_2nd_class_18.py b/scripts/mobiles/generic/faction/imperial/imp_warant_officer_ii_2nd_class_18.py new file mode 100644 index 00000000..b08b94fc --- /dev/null +++ b/scripts/mobiles/generic/faction/imperial/imp_warant_officer_ii_2nd_class_18.py @@ -0,0 +1,39 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('crackdown_imperial_warrant_officer_ii') + mobileTemplate.setLevel(18) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(15) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(1) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(True) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("imperial") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(False) + mobileTemplate.setFaction("imperial") + mobileTemplate.setFactionStatus(1) + + templates = Vector() + templates.add('object/mobile/shared_dressed_npe_imperial_officer.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/carbine/shared_carbine_e11.iff', 1, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedShot') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('imp_warrant_offi_2nd_class_ii_18', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/generic/faction/imperial/imp_warant_officer_ii_2nd_class_67.py b/scripts/mobiles/generic/faction/imperial/imp_warant_officer_ii_2nd_class_67.py new file mode 100644 index 00000000..412fed84 --- /dev/null +++ b/scripts/mobiles/generic/faction/imperial/imp_warant_officer_ii_2nd_class_67.py @@ -0,0 +1,39 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('crackdown_imperial_warrant_officer_ii') + mobileTemplate.setLevel(67) + mobileTemplate.setDifficulty(1) + mobileTemplate.setAttackRange(15) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(1) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(True) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("imperial") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(False) + mobileTemplate.setFaction("imperial") + mobileTemplate.setFactionStatus(1) + + templates = Vector() + templates.add('object/mobile/shared_dressed_npe_imperial_officer.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/carbine/shared_carbine_e11.iff', 1, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedShot') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('imp_warrant_offi_2nd_class_ii_67', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/generic/faction/imperial/imprisoned_imp_offi.py b/scripts/mobiles/generic/faction/imperial/imprisoned_imp_offi.py new file mode 100644 index 00000000..1fdd9db7 --- /dev/null +++ b/scripts/mobiles/generic/faction/imperial/imprisoned_imp_offi.py @@ -0,0 +1,39 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('imprisoned_imperial') + mobileTemplate.setLevel(11) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(15) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(1) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(True) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("imperial") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(False) + mobileTemplate.setFaction("imperial") + mobileTemplate.setFactionStatus(1) + + templates = Vector() + templates.add('object/mobile/shared_dressed_npe_imperial_officer.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/carbine/shared_carbine_e11.iff', 1, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedShot') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('imp_imp_officer', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/generic/faction/imperial/lance_bombardier.py b/scripts/mobiles/generic/faction/imperial/lance_bombardier.py new file mode 100644 index 00000000..781ea7b3 --- /dev/null +++ b/scripts/mobiles/generic/faction/imperial/lance_bombardier.py @@ -0,0 +1,39 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('lance_bombardier') + mobileTemplate.setLevel(16) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(15) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(1) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("imperial") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(True) + mobileTemplate.setFaction("imperial") + mobileTemplate.setFactionStatus(1) + + templates = Vector() + templates.add('object/mobile/shared_dressed_stormtrooper_bombardier_m.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/carbine/shared_carbine_e11.iff', 1, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedShot') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('lance_bombardier', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/generic/faction/imperial/lesser_prophet_dark.py b/scripts/mobiles/generic/faction/imperial/lesser_prophet_dark.py new file mode 100644 index 00000000..3ab7b70d --- /dev/null +++ b/scripts/mobiles/generic/faction/imperial/lesser_prophet_dark.py @@ -0,0 +1,41 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('lesser_prophet_of_the_dark_side') + mobileTemplate.setLevel(80) + mobileTemplate.setDifficulty(1) + mobileTemplate.setAttackRange(15) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(9) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(True) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("imperial") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(False) + mobileTemplate.setFaction("imperial") + mobileTemplate.setFactionStatus(1) + + templates = Vector() + templates.add('object/mobile/shared_dressed_dark_jedi_human_female_01.iff') + templates.add('object/mobile/shared_dressed_dark_jedi_human_male_01.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/sword/crafted_saber/shared_sword_lightsaber_one_handed_gcw_s01_gen4.iff', 9, 1.0) + weapontemplate = WeaponTemplate('object/weapon/melee/sword/crafted_saber/shared_sword_lightsaber_one_handed_gcw_s01_gen5.iff', 9, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('saberhit') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('lesser_prophet_dark_side', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/generic/faction/imperial/master_prophet_dark.py b/scripts/mobiles/generic/faction/imperial/master_prophet_dark.py new file mode 100644 index 00000000..a859156a --- /dev/null +++ b/scripts/mobiles/generic/faction/imperial/master_prophet_dark.py @@ -0,0 +1,46 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('master_prophet_of_the_dark_side') + mobileTemplate.setLevel(80) + mobileTemplate.setDifficulty(1) + mobileTemplate.setAttackRange(15) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(9) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(True) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("imperial") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(False) + mobileTemplate.setFaction("imperial") + mobileTemplate.setFactionStatus(1) + + templates = Vector() + templates.add('object/mobile/shared_dressed_dark_jedi_elder_female_human_01.iff') + templates.add('object/mobile/shared_dressed_dark_jedi_elder_female_human_02.iff') + templates.add('object/mobile/shared_dressed_dark_jedi_elder_female_human_03.iff') + templates.add('object/mobile/shared_dressed_dark_jedi_elder_male_human_01.iff') + templates.add('object/mobile/shared_dressed_dark_jedi_elder_male_human_02.iff') + templates.add('object/mobile/shared_dressed_dark_jedi_elder_male_human_03.iff') + templates.add('object/mobile/shared_dressed_dark_jedi_elder_male_human_04.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/sword/crafted_saber/shared_sword_lightsaber_one_handed_gcw_s01_gen4.iff', 9, 1.0) + weapontemplate = WeaponTemplate('object/weapon/melee/sword/crafted_saber/shared_sword_lightsaber_one_handed_gcw_s01_gen5.iff', 9, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('saberhit') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('master_prophet_dark_side', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/generic/faction/imperial/nova_trooper.py b/scripts/mobiles/generic/faction/imperial/nova_trooper.py new file mode 100644 index 00000000..8d1a09b8 --- /dev/null +++ b/scripts/mobiles/generic/faction/imperial/nova_trooper.py @@ -0,0 +1,45 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('stormtrooper_novatrooper') + mobileTemplate.setLevel(80) + mobileTemplate.setDifficulty(1) + mobileTemplate.setAttackRange(15) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(1) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(True) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("imperial") + mobileTemplate.setAssistRange(12) + mobileTemplate.setStalker(False) + mobileTemplate.setFaction("imperial") + mobileTemplate.setFactionStatus(1) + + templates = Vector() + templates.add('object/mobile/shared_dressed_stormtrooper_black_black.iff') + templates.add('object/mobile/shared_dressed_stormtrooper_black_blue.iff') + templates.add('object/mobile/shared_dressed_stormtrooper_black_gold.iff') + templates.add('object/mobile/shared_dressed_stormtrooper_black_green.iff') + templates.add('object/mobile/shared_dressed_stormtrooper_black_grey.iff') + templates.add('object/mobile/shared_dressed_stormtrooper_black_red.iff') + templates.add('object/mobile/shared_dressed_stormtrooper_black_white.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/carbine/shared_carbine_e11.iff', 1, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedShot') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('novatrooper', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/generic/faction/imperial/nova_trooper_cadet.py b/scripts/mobiles/generic/faction/imperial/nova_trooper_cadet.py new file mode 100644 index 00000000..6304ed88 --- /dev/null +++ b/scripts/mobiles/generic/faction/imperial/nova_trooper_cadet.py @@ -0,0 +1,45 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('stormtrooper_novatrooper_cadet') + mobileTemplate.setLevel(80) + mobileTemplate.setDifficulty(1) + mobileTemplate.setAttackRange(15) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(1) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(True) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("imperial") + mobileTemplate.setAssistRange(8) + mobileTemplate.setStalker(False) + mobileTemplate.setFaction("imperial") + mobileTemplate.setFactionStatus(1) + + templates = Vector() + templates.add('object/mobile/shared_dressed_stormtrooper_black_black.iff') + templates.add('object/mobile/shared_dressed_stormtrooper_black_blue.iff') + templates.add('object/mobile/shared_dressed_stormtrooper_black_gold.iff') + templates.add('object/mobile/shared_dressed_stormtrooper_black_green.iff') + templates.add('object/mobile/shared_dressed_stormtrooper_black_grey.iff') + templates.add('object/mobile/shared_dressed_stormtrooper_black_red.iff') + templates.add('object/mobile/shared_dressed_stormtrooper_black_white.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/carbine/shared_carbine_e11.iff', 1, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedShot') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('novatrooper_cadet', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/generic/faction/imperial/nova_trooper_captain.py b/scripts/mobiles/generic/faction/imperial/nova_trooper_captain.py new file mode 100644 index 00000000..58367eed --- /dev/null +++ b/scripts/mobiles/generic/faction/imperial/nova_trooper_captain.py @@ -0,0 +1,45 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('stormtrooper_novatrooper_captain') + mobileTemplate.setLevel(82) + mobileTemplate.setDifficulty(1) + mobileTemplate.setAttackRange(15) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(1) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(True) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("imperial") + mobileTemplate.setAssistRange(12) + mobileTemplate.setStalker(False) + mobileTemplate.setFaction("imperial") + mobileTemplate.setFactionStatus(1) + + templates = Vector() + templates.add('object/mobile/shared_dressed_stormtrooper_black_black.iff') + templates.add('object/mobile/shared_dressed_stormtrooper_black_blue.iff') + templates.add('object/mobile/shared_dressed_stormtrooper_black_gold.iff') + templates.add('object/mobile/shared_dressed_stormtrooper_black_green.iff') + templates.add('object/mobile/shared_dressed_stormtrooper_black_grey.iff') + templates.add('object/mobile/shared_dressed_stormtrooper_black_red.iff') + templates.add('object/mobile/shared_dressed_stormtrooper_black_white.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/carbine/shared_carbine_e11.iff', 1, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedShot') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('novatrooper_captain', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/generic/faction/imperial/nova_trooper_commander.py b/scripts/mobiles/generic/faction/imperial/nova_trooper_commander.py new file mode 100644 index 00000000..f9a5d63e --- /dev/null +++ b/scripts/mobiles/generic/faction/imperial/nova_trooper_commander.py @@ -0,0 +1,45 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('stormtrooper_novatrooper_commander') + mobileTemplate.setLevel(82) + mobileTemplate.setDifficulty(1) + mobileTemplate.setAttackRange(15) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(1) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(True) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("imperial") + mobileTemplate.setAssistRange(12) + mobileTemplate.setStalker(False) + mobileTemplate.setFaction("imperial") + mobileTemplate.setFactionStatus(1) + + templates = Vector() + templates.add('object/mobile/shared_dressed_stormtrooper_black_black.iff') + templates.add('object/mobile/shared_dressed_stormtrooper_black_blue.iff') + templates.add('object/mobile/shared_dressed_stormtrooper_black_gold.iff') + templates.add('object/mobile/shared_dressed_stormtrooper_black_green.iff') + templates.add('object/mobile/shared_dressed_stormtrooper_black_grey.iff') + templates.add('object/mobile/shared_dressed_stormtrooper_black_red.iff') + templates.add('object/mobile/shared_dressed_stormtrooper_black_white.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/carbine/shared_carbine_e11.iff', 1, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedShot') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('novatrooper_commander', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/generic/faction/imperial/nova_trooper_ensign.py b/scripts/mobiles/generic/faction/imperial/nova_trooper_ensign.py new file mode 100644 index 00000000..2243e49a --- /dev/null +++ b/scripts/mobiles/generic/faction/imperial/nova_trooper_ensign.py @@ -0,0 +1,45 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('stormtrooper_novatrooper_ensign') + mobileTemplate.setLevel(81) + mobileTemplate.setDifficulty(1) + mobileTemplate.setAttackRange(15) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(1) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(True) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("imperial") + mobileTemplate.setAssistRange(12) + mobileTemplate.setStalker(False) + mobileTemplate.setFaction("imperial") + mobileTemplate.setFactionStatus(1) + + templates = Vector() + templates.add('object/mobile/shared_dressed_stormtrooper_black_black.iff') + templates.add('object/mobile/shared_dressed_stormtrooper_black_blue.iff') + templates.add('object/mobile/shared_dressed_stormtrooper_black_gold.iff') + templates.add('object/mobile/shared_dressed_stormtrooper_black_green.iff') + templates.add('object/mobile/shared_dressed_stormtrooper_black_grey.iff') + templates.add('object/mobile/shared_dressed_stormtrooper_black_red.iff') + templates.add('object/mobile/shared_dressed_stormtrooper_black_white.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/carbine/shared_carbine_e11.iff', 1, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedShot') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('novatrooper_ensign', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/generic/faction/imperial/nova_trooper_medic.py b/scripts/mobiles/generic/faction/imperial/nova_trooper_medic.py new file mode 100644 index 00000000..8ca2ac78 --- /dev/null +++ b/scripts/mobiles/generic/faction/imperial/nova_trooper_medic.py @@ -0,0 +1,45 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('stormtrooper_novatrooper_medic') + mobileTemplate.setLevel(80) + mobileTemplate.setDifficulty(1) + mobileTemplate.setAttackRange(15) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(1) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(True) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("imperial") + mobileTemplate.setAssistRange(12) + mobileTemplate.setStalker(False) + mobileTemplate.setFaction("imperial") + mobileTemplate.setFactionStatus(1) + + templates = Vector() + templates.add('object/mobile/shared_dressed_stormtrooper_black_black.iff') + templates.add('object/mobile/shared_dressed_stormtrooper_black_blue.iff') + templates.add('object/mobile/shared_dressed_stormtrooper_black_gold.iff') + templates.add('object/mobile/shared_dressed_stormtrooper_black_green.iff') + templates.add('object/mobile/shared_dressed_stormtrooper_black_grey.iff') + templates.add('object/mobile/shared_dressed_stormtrooper_black_red.iff') + templates.add('object/mobile/shared_dressed_stormtrooper_black_white.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/carbine/shared_carbine_e11.iff', 1, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedShot') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('novatrooper_medic', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/generic/faction/imperial/nova_trooper_squad_leader.py b/scripts/mobiles/generic/faction/imperial/nova_trooper_squad_leader.py new file mode 100644 index 00000000..64e32a14 --- /dev/null +++ b/scripts/mobiles/generic/faction/imperial/nova_trooper_squad_leader.py @@ -0,0 +1,45 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('stormtrooper_novatrooper_squad_leader') + mobileTemplate.setLevel(81) + mobileTemplate.setDifficulty(1) + mobileTemplate.setAttackRange(15) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(1) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(True) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("imperial") + mobileTemplate.setAssistRange(12) + mobileTemplate.setStalker(False) + mobileTemplate.setFaction("imperial") + mobileTemplate.setFactionStatus(1) + + templates = Vector() + templates.add('object/mobile/shared_dressed_stormtrooper_black_black.iff') + templates.add('object/mobile/shared_dressed_stormtrooper_black_blue.iff') + templates.add('object/mobile/shared_dressed_stormtrooper_black_gold.iff') + templates.add('object/mobile/shared_dressed_stormtrooper_black_green.iff') + templates.add('object/mobile/shared_dressed_stormtrooper_black_grey.iff') + templates.add('object/mobile/shared_dressed_stormtrooper_black_red.iff') + templates.add('object/mobile/shared_dressed_stormtrooper_black_white.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/carbine/shared_carbine_e11.iff', 1, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedShot') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('novatrooper_squad_leader', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/generic/faction/imperial/opressor_7_dark_trooper_80.py b/scripts/mobiles/generic/faction/imperial/opressor_7_dark_trooper_80.py new file mode 100644 index 00000000..b3812249 --- /dev/null +++ b/scripts/mobiles/generic/faction/imperial/opressor_7_dark_trooper_80.py @@ -0,0 +1,39 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('crackdown_elite_dark_trooper_hard') + mobileTemplate.setLevel(80) + mobileTemplate.setDifficulty(1) + mobileTemplate.setAttackRange(15) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(1) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(True) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("imperial") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(False) + mobileTemplate.setFaction("imperial") + mobileTemplate.setFactionStatus(1) + + templates = Vector() + templates.add('object/mobile/shared_dark_trooper.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/carbine/shared_carbine_e11.iff', 1, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedShot') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('opp_7_80', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/generic/faction/imperial/opressor_7_dark_trooper_88.py b/scripts/mobiles/generic/faction/imperial/opressor_7_dark_trooper_88.py new file mode 100644 index 00000000..06b9629e --- /dev/null +++ b/scripts/mobiles/generic/faction/imperial/opressor_7_dark_trooper_88.py @@ -0,0 +1,39 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('fbase_elite_dark_trooper_extreme') + mobileTemplate.setLevel(88) + mobileTemplate.setDifficulty(1) + mobileTemplate.setAttackRange(15) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(1) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(True) + mobileTemplate.setScale(1.1) + mobileTemplate.setSocialGroup("imperial") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(False) + mobileTemplate.setFaction("imperial") + mobileTemplate.setFactionStatus(1) + + templates = Vector() + templates.add('object/mobile/shared_dressed_dark_trooper_black_hole.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/carbine/shared_carbine_e11.iff', 1, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedShot') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('opp_7_88', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/generic/faction/imperial/opressor_9_dark_trooper.py b/scripts/mobiles/generic/faction/imperial/opressor_9_dark_trooper.py new file mode 100644 index 00000000..d2ef9b48 --- /dev/null +++ b/scripts/mobiles/generic/faction/imperial/opressor_9_dark_trooper.py @@ -0,0 +1,39 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('crackdown_elite_dark_trooper_hard') + mobileTemplate.setLevel(89) + mobileTemplate.setDifficulty(1) + mobileTemplate.setAttackRange(15) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(1) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(True) + mobileTemplate.setScale(1.1) + mobileTemplate.setSocialGroup("imperial") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(False) + mobileTemplate.setFaction("imperial") + mobileTemplate.setFactionStatus(1) + + templates = Vector() + templates.add('object/mobile/shared_dark_trooper.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/carbine/shared_carbine_e11.iff', 1, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedShot') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('opp_9', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/generic/faction/imperial/probot_drone.py b/scripts/mobiles/generic/faction/imperial/probot_drone.py new file mode 100644 index 00000000..55374b6d --- /dev/null +++ b/scripts/mobiles/generic/faction/imperial/probot_drone.py @@ -0,0 +1,39 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('crackdown_dark_trooper') + mobileTemplate.setLevel(5) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(15) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(1) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1.1) + mobileTemplate.setSocialGroup("imperial") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(False) + mobileTemplate.setFaction("imperial") + mobileTemplate.setFactionStatus(1) + + templates = Vector() + templates.add('object/mobile/shared_probot.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/carbine/shared_carbine_e11.iff', 1, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedShot') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('probot_drone', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/generic/faction/imperial/probot_seeker.py b/scripts/mobiles/generic/faction/imperial/probot_seeker.py new file mode 100644 index 00000000..2ed5b8d6 --- /dev/null +++ b/scripts/mobiles/generic/faction/imperial/probot_seeker.py @@ -0,0 +1,39 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('imperial_probot_drone') + mobileTemplate.setLevel(8) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(15) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(1) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1.1) + mobileTemplate.setSocialGroup("imperial") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(False) + mobileTemplate.setFaction("imperial") + mobileTemplate.setFactionStatus(1) + + templates = Vector() + templates.add('object/mobile/shared_probot.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/carbine/shared_carbine_e11.iff', 1, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedShot') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('probot_seeker', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/generic/faction/imperial/prophet_dark.py b/scripts/mobiles/generic/faction/imperial/prophet_dark.py new file mode 100644 index 00000000..1a5ed129 --- /dev/null +++ b/scripts/mobiles/generic/faction/imperial/prophet_dark.py @@ -0,0 +1,46 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('prophet_of_the_dark_side') + mobileTemplate.setLevel(80) + mobileTemplate.setDifficulty(1) + mobileTemplate.setAttackRange(15) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(9) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(True) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("imperial") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(False) + mobileTemplate.setFaction("imperial") + mobileTemplate.setFactionStatus(1) + + templates = Vector() + templates.add('object/mobile/shared_dressed_dark_jedi_elder_female_human_01.iff') + templates.add('object/mobile/shared_dressed_dark_jedi_elder_female_human_02.iff') + templates.add('object/mobile/shared_dressed_dark_jedi_elder_female_human_03.iff') + templates.add('object/mobile/shared_dressed_dark_jedi_elder_male_human_01.iff') + templates.add('object/mobile/shared_dressed_dark_jedi_elder_male_human_02.iff') + templates.add('object/mobile/shared_dressed_dark_jedi_elder_male_human_03.iff') + templates.add('object/mobile/shared_dressed_dark_jedi_elder_male_human_04.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/sword/crafted_saber/shared_sword_lightsaber_one_handed_gcw_s01_gen4.iff', 9, 1.0) + weapontemplate = WeaponTemplate('object/weapon/melee/sword/crafted_saber/shared_sword_lightsaber_one_handed_gcw_s01_gen5.iff', 9, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('saberhit') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('prophet_dark_side', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/generic/faction/imperial/sand_trooper.py b/scripts/mobiles/generic/faction/imperial/sand_trooper.py new file mode 100644 index 00000000..9df51e20 --- /dev/null +++ b/scripts/mobiles/generic/faction/imperial/sand_trooper.py @@ -0,0 +1,39 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('mission_sand_trooper') + mobileTemplate.setLevel(25) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(15) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(1) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("imperial") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(False) + mobileTemplate.setFaction("imperial") + mobileTemplate.setFactionStatus(1) + + templates = Vector() + templates.add('object/mobile/shared_dressed_stormtrooper_sand_trooper_m.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/carbine/shared_carbine_e11.iff', 1, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedShot') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('sandtrooper', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/generic/faction/imperial/scouttrooper.py b/scripts/mobiles/generic/faction/imperial/scouttrooper.py new file mode 100644 index 00000000..7f3635bb --- /dev/null +++ b/scripts/mobiles/generic/faction/imperial/scouttrooper.py @@ -0,0 +1,39 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('mission_scout_trooper') + mobileTemplate.setLevel(23) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(15) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(0) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("imperial") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(False) + mobileTemplate.setFaction("imperial") + mobileTemplate.setFactionStatus(1) + + templates = Vector() + templates.add('object/mobile/shared_dressed_scout_trooper_white_white.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/rifle/shared_rifle_e11.iff', 0, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedShot') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('scouttrooper', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/generic/faction/imperial/senior_prophet_dark.py b/scripts/mobiles/generic/faction/imperial/senior_prophet_dark.py new file mode 100644 index 00000000..db8ec696 --- /dev/null +++ b/scripts/mobiles/generic/faction/imperial/senior_prophet_dark.py @@ -0,0 +1,46 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('senior_prophet_of_the_dark_side') + mobileTemplate.setLevel(80) + mobileTemplate.setDifficulty(1) + mobileTemplate.setAttackRange(15) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(9) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(True) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("imperial") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(False) + mobileTemplate.setFaction("imperial") + mobileTemplate.setFactionStatus(1) + + templates = Vector() + templates.add('object/mobile/shared_dressed_dark_jedi_elder_female_human_01.iff') + templates.add('object/mobile/shared_dressed_dark_jedi_elder_female_human_02.iff') + templates.add('object/mobile/shared_dressed_dark_jedi_elder_female_human_03.iff') + templates.add('object/mobile/shared_dressed_dark_jedi_elder_male_human_01.iff') + templates.add('object/mobile/shared_dressed_dark_jedi_elder_male_human_02.iff') + templates.add('object/mobile/shared_dressed_dark_jedi_elder_male_human_03.iff') + templates.add('object/mobile/shared_dressed_dark_jedi_elder_male_human_04.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/sword/crafted_saber/shared_sword_lightsaber_one_handed_gcw_s01_gen4.iff', 9, 1.0) + weapontemplate = WeaponTemplate('object/weapon/melee/sword/crafted_saber/shared_sword_lightsaber_one_handed_gcw_s01_gen5.iff', 9, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('saberhit') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('senior_prophet_dark_side', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/generic/faction/imperial/signalman.py b/scripts/mobiles/generic/faction/imperial/signalman.py new file mode 100644 index 00000000..3aca2683 --- /dev/null +++ b/scripts/mobiles/generic/faction/imperial/signalman.py @@ -0,0 +1,39 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('mission_signalman') + mobileTemplate.setLevel(15) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(15) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(1) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("imperial") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(False) + mobileTemplate.setFaction("imperial") + mobileTemplate.setFactionStatus(1) + + templates = Vector() + templates.add('object/mobile/shared_dressed_npe_imperial_officer.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/carbine/shared_carbine_e11.iff', 1, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedShot') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('signalman', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/generic/faction/imperial/skilled_1st_lieutenant_35.py b/scripts/mobiles/generic/faction/imperial/skilled_1st_lieutenant_35.py new file mode 100644 index 00000000..6d2f943e --- /dev/null +++ b/scripts/mobiles/generic/faction/imperial/skilled_1st_lieutenant_35.py @@ -0,0 +1,39 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('crackdown_imperial_first_lieutenant_hard') + mobileTemplate.setLevel(35) + mobileTemplate.setDifficulty(1) + mobileTemplate.setAttackRange(15) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(1) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("imperial") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(False) + mobileTemplate.setFaction("imperial") + mobileTemplate.setFactionStatus(1) + + templates = Vector() + templates.add('object/mobile/shared_dressed_imperial_lieutenant_m.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/carbine/shared_carbine_e11.iff', 1, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedShot') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('skilled_1st_lieut_35', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/generic/faction/imperial/skilled_1st_lieutenant_80.py b/scripts/mobiles/generic/faction/imperial/skilled_1st_lieutenant_80.py new file mode 100644 index 00000000..6c43928b --- /dev/null +++ b/scripts/mobiles/generic/faction/imperial/skilled_1st_lieutenant_80.py @@ -0,0 +1,39 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('crackdown_imperial_first_lieutenant_hard') + mobileTemplate.setLevel(80) + mobileTemplate.setDifficulty(1) + mobileTemplate.setAttackRange(15) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(1) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("imperial") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(False) + mobileTemplate.setFaction("imperial") + mobileTemplate.setFactionStatus(1) + + templates = Vector() + templates.add('object/mobile/shared_dressed_imperial_lieutenant_m.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/carbine/shared_carbine_e11.iff', 1, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedShot') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('skilled_1st_lieut_80', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/generic/faction/imperial/special_missions_engineer.py b/scripts/mobiles/generic/faction/imperial/special_missions_engineer.py new file mode 100644 index 00000000..34319439 --- /dev/null +++ b/scripts/mobiles/generic/faction/imperial/special_missions_engineer.py @@ -0,0 +1,39 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('mission_special_missions_engineer') + mobileTemplate.setLevel(16) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(15) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(1) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("imperial") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(False) + mobileTemplate.setFaction("imperial") + mobileTemplate.setFactionStatus(1) + + templates = Vector() + templates.add('object/mobile/shared_dressed_npe_imperial_officer.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/carbine/shared_carbine_e11.iff', 1, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedShot') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('special_missions_engineer', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/generic/faction/imperial/specialis_noncom.py b/scripts/mobiles/generic/faction/imperial/specialis_noncom.py new file mode 100644 index 00000000..3ac69bb8 --- /dev/null +++ b/scripts/mobiles/generic/faction/imperial/specialis_noncom.py @@ -0,0 +1,39 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('mission_specialist_noncom') + mobileTemplate.setLevel(13) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(15) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(1) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("imperial") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(False) + mobileTemplate.setFaction("imperial") + mobileTemplate.setFactionStatus(1) + + templates = Vector() + templates.add('object/mobile/shared_dressed_npe_imperial_officer.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/carbine/shared_carbine_e11.iff', 1, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedShot') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('special_noncom', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/generic/faction/imperial/storm_commando.py b/scripts/mobiles/generic/faction/imperial/storm_commando.py new file mode 100644 index 00000000..14a4c0dc --- /dev/null +++ b/scripts/mobiles/generic/faction/imperial/storm_commando.py @@ -0,0 +1,40 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('mission_storm_commando') + mobileTemplate.setLevel(29) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(15) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(1) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(True) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("imperial") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(True) + mobileTemplate.setFaction("imperial") + mobileTemplate.setFactionStatus(1) + + templates = Vector() + templates.add('object/mobile/shared_dressed_stormtrooper_commando_m.iff') + templates.add('object/mobile/shared_dressed_stormtrooper_commando1_m.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/carbine/shared_carbine_e11.iff', 1, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedShot') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('stormcommando', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/generic/faction/imperial/stormtrooper.py b/scripts/mobiles/generic/faction/imperial/stormtrooper.py new file mode 100644 index 00000000..9f61e58b --- /dev/null +++ b/scripts/mobiles/generic/faction/imperial/stormtrooper.py @@ -0,0 +1,39 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('mission_stormtrooper') + mobileTemplate.setLevel(3) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(15) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(1) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("imperial") + mobileTemplate.setAssistRange(5) + mobileTemplate.setStalker(False) + mobileTemplate.setFaction("imperial") + mobileTemplate.setFactionStatus(1) + + templates = Vector() + templates.add('object/mobile/shared_stormtrooper.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/carbine/shared_carbine_e11.iff', 1, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedShot') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('stormtrooper', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/generic/faction/imperial/stormtrooper_2.py b/scripts/mobiles/generic/faction/imperial/stormtrooper_2.py new file mode 100644 index 00000000..7e335032 --- /dev/null +++ b/scripts/mobiles/generic/faction/imperial/stormtrooper_2.py @@ -0,0 +1,39 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('mission_stormtrooper') + mobileTemplate.setLevel(2) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(15) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(1) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("imperial") + mobileTemplate.setAssistRange(5) + mobileTemplate.setStalker(False) + mobileTemplate.setFaction("imperial") + mobileTemplate.setFactionStatus(1) + + templates = Vector() + templates.add('object/mobile/shared_stormtrooper.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/carbine/shared_carbine_e11.iff', 1, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedShot') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('stormtrooper_2', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/generic/faction/imperial/stormtrooper_25.py b/scripts/mobiles/generic/faction/imperial/stormtrooper_25.py new file mode 100644 index 00000000..2e1bee6a --- /dev/null +++ b/scripts/mobiles/generic/faction/imperial/stormtrooper_25.py @@ -0,0 +1,39 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('mission_stormtrooper') + mobileTemplate.setLevel(25) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(15) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(1) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(True) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("imperial") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(False) + mobileTemplate.setFaction("imperial") + mobileTemplate.setFactionStatus(1) + + templates = Vector() + templates.add('object/mobile/shared_dressed_dark_trooper_black_hole.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/carbine/shared_carbine_e11.iff', 1, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedShot') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('stormtrooper_25', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/generic/faction/imperial/super_battle_droid_imp.py b/scripts/mobiles/generic/faction/imperial/super_battle_droid_imp.py new file mode 100644 index 00000000..82ccd9ff --- /dev/null +++ b/scripts/mobiles/generic/faction/imperial/super_battle_droid_imp.py @@ -0,0 +1,39 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('imperial_battle_droid') + mobileTemplate.setLevel(86) + mobileTemplate.setDifficulty(1) + mobileTemplate.setAttackRange(15) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(1) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(True) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("imperial") + mobileTemplate.setAssistRange(12) + mobileTemplate.setStalker(False) + mobileTemplate.setFaction("imperial") + mobileTemplate.setFactionStatus(1) + + templates = Vector() + templates.add('object/mobile/shared_super_battle_droid.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 1, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedShot') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('sbd_imperials', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/generic/faction/imperial/triumphant_class_dark_trooper.py b/scripts/mobiles/generic/faction/imperial/triumphant_class_dark_trooper.py new file mode 100644 index 00000000..11e1ee32 --- /dev/null +++ b/scripts/mobiles/generic/faction/imperial/triumphant_class_dark_trooper.py @@ -0,0 +1,39 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('crackdown_elite_dark_trooper_hard') + mobileTemplate.setLevel(90) + mobileTemplate.setDifficulty(1) + mobileTemplate.setAttackRange(15) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(1) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("imperial") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(False) + mobileTemplate.setFaction("imperial") + mobileTemplate.setFactionStatus(1) + + templates = Vector() + templates.add('object/mobile/shared_dark_trooper.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/carbine/shared_carbine_e11.iff', 1, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedShot') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('opp_9', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/generic/faction/imperial/veteran_ imperial_storm_captain.py b/scripts/mobiles/generic/faction/imperial/veteran_ imperial_storm_captain.py new file mode 100644 index 00000000..2012353a --- /dev/null +++ b/scripts/mobiles/generic/faction/imperial/veteran_ imperial_storm_captain.py @@ -0,0 +1,41 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('veteran_stormtrooper_captain') + mobileTemplate.setLevel(72) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(15) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(1) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(True) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("imperial") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(False) + mobileTemplate.setFaction("imperial") + mobileTemplate.setFactionStatus(1) + + templates = Vector() + templates.add('object/mobile/shared_dressed_stormtrooper_captain_black_black.iff') + templates.add('object/mobile/shared_dressed_stormtrooper_captain_black_gold.iff') + templates.add('object/mobile/shared_dressed_stormtrooper_captain_white_white.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/carbine/shared_carbine_e11.iff', 1, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedShot') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('vet_stormtrooper_captain', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/generic/faction/imperial/veteran_ imperial_storm_commando.py b/scripts/mobiles/generic/faction/imperial/veteran_ imperial_storm_commando.py new file mode 100644 index 00000000..1d9ee80d --- /dev/null +++ b/scripts/mobiles/generic/faction/imperial/veteran_ imperial_storm_commando.py @@ -0,0 +1,40 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('veteran_storm_commando') + mobileTemplate.setLevel(75) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(15) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(1) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(True) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("imperial") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(True) + mobileTemplate.setFaction("imperial") + mobileTemplate.setFactionStatus(1) + + templates = Vector() + templates.add('object/mobile/shared_dressed_stormtrooper_commando_m.iff') + templates.add('object/mobile/shared_dressed_stormtrooper_commando1_m.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/carbine/shared_carbine_e11.iff', 1, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedShot') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('vet_storm_commando', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/generic/faction/imperial/veteran_ imperial_stormmedic.py b/scripts/mobiles/generic/faction/imperial/veteran_ imperial_stormmedic.py new file mode 100644 index 00000000..ca8c8d06 --- /dev/null +++ b/scripts/mobiles/generic/faction/imperial/veteran_ imperial_stormmedic.py @@ -0,0 +1,41 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('veteran_stormtrooper_medic') + mobileTemplate.setLevel(60) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(15) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(1) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(True) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("imperial") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(False) + mobileTemplate.setFaction("imperial") + mobileTemplate.setFactionStatus(1) + + templates = Vector() + templates.add('object/mobile/shared_dressed_imperial_medic1_human_male_01.iff') + templates.add('object/mobile/shared_dressed_imperial_medic3_human_male_01.iff') + templates.add('object/mobile/shared_dressed_stormtrooper_medic_m.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/carbine/shared_carbine_e11.iff', 1, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedShot') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('vet_stormtrooper_medic', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/generic/faction/imperial/veteran_ imperial_stormrifle.py b/scripts/mobiles/generic/faction/imperial/veteran_ imperial_stormrifle.py new file mode 100644 index 00000000..514aff82 --- /dev/null +++ b/scripts/mobiles/generic/faction/imperial/veteran_ imperial_stormrifle.py @@ -0,0 +1,39 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('veteran_stormtrooper_rifleman') + mobileTemplate.setLevel(62) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(15) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(1) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(True) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("imperial") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(False) + mobileTemplate.setFaction("imperial") + mobileTemplate.setFactionStatus(1) + + templates = Vector() + templates.add('object/mobile/shared_dressed_stormtrooper_rifleman_m.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/rifle/shared_rifle_e11.iff', 1, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedShot') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('vet_stormtrooper_rifleman', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/generic/faction/imperial/veteran_ imperial_stormsniper.py b/scripts/mobiles/generic/faction/imperial/veteran_ imperial_stormsniper.py new file mode 100644 index 00000000..d9dfcbd3 --- /dev/null +++ b/scripts/mobiles/generic/faction/imperial/veteran_ imperial_stormsniper.py @@ -0,0 +1,39 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('veteran_stormtrooper_sniper') + mobileTemplate.setLevel(63) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(15) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(0) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(True) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("imperial") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(False) + mobileTemplate.setFaction("imperial") + mobileTemplate.setFactionStatus(1) + + templates = Vector() + templates.add('object/mobile/shared_dressed_stormtrooper_sniper_m.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/rifle/shared_rifle_e11.iff', 0, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedShot') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('vet_stormtrooper_sniper', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/generic/faction/imperial/veteran_ imperial_stormtrooper_squad_leader.py b/scripts/mobiles/generic/faction/imperial/veteran_ imperial_stormtrooper_squad_leader.py new file mode 100644 index 00000000..56c2f4ba --- /dev/null +++ b/scripts/mobiles/generic/faction/imperial/veteran_ imperial_stormtrooper_squad_leader.py @@ -0,0 +1,39 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('veteran_stormtrooper_squad_leader') + mobileTemplate.setLevel(70) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(15) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(1) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(True) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("imperial") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(False) + mobileTemplate.setFaction("imperial") + mobileTemplate.setFactionStatus(1) + + templates = Vector() + templates.add('object/mobile/shared_stormtrooper.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/carbine/shared_carbine_e11.iff', 1, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedShot') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('vet_stormtrooper_squad_leader', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/generic/faction/imperial/veteran_assault_trooper.py b/scripts/mobiles/generic/faction/imperial/veteran_assault_trooper.py new file mode 100644 index 00000000..af52fa71 --- /dev/null +++ b/scripts/mobiles/generic/faction/imperial/veteran_assault_trooper.py @@ -0,0 +1,39 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('veteran_assault_trooper') + mobileTemplate.setLevel(65) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(15) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(1) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(True) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("imperial") + mobileTemplate.setAssistRange(5) + mobileTemplate.setStalker(True) + mobileTemplate.setFaction("imperial") + mobileTemplate.setFactionStatus(1) + + templates = Vector() + templates.add('object/mobile/shared_dressed_stormtrooper_assault_trooper_m.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/carbine/shared_carbine_e11.iff', 1, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedShot') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('vet_assault_trooper', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/generic/faction/imperial/veteran_assault_trooper_squad.py b/scripts/mobiles/generic/faction/imperial/veteran_assault_trooper_squad.py new file mode 100644 index 00000000..a3f542e6 --- /dev/null +++ b/scripts/mobiles/generic/faction/imperial/veteran_assault_trooper_squad.py @@ -0,0 +1,39 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('veteran_assault_trooper_squad_leader') + mobileTemplate.setLevel(68) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(15) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(0) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("imperial") + mobileTemplate.setAssistRange(5) + mobileTemplate.setStalker(False) + mobileTemplate.setFaction("imperial") + mobileTemplate.setFactionStatus(1) + + templates = Vector() + templates.add('object/mobile/shared_dressed_stormtrooper_assault_trooper_m.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/rifle/shared_rifle_e11.iff', 0, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedShot') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('Vet_assault_trooper_squad', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/generic/faction/imperial/veteran_brigadier_general.py b/scripts/mobiles/generic/faction/imperial/veteran_brigadier_general.py new file mode 100644 index 00000000..a031301e --- /dev/null +++ b/scripts/mobiles/generic/faction/imperial/veteran_brigadier_general.py @@ -0,0 +1,39 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('veteran_imperial_brigadier_general') + mobileTemplate.setLevel(63) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(15) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(1) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(True) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("imperial") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(False) + mobileTemplate.setFaction("imperial") + mobileTemplate.setFactionStatus(1) + + templates = Vector() + templates.add('object/mobile/shared_dressed_imperial_general_m.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/carbine/shared_carbine_e11.iff', 1, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedShot') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('vet_imperial_brigadier_general', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/generic/faction/imperial/veteran_com_security_guard.py b/scripts/mobiles/generic/faction/imperial/veteran_com_security_guard.py new file mode 100644 index 00000000..39c85464 --- /dev/null +++ b/scripts/mobiles/generic/faction/imperial/veteran_com_security_guard.py @@ -0,0 +1,39 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('veteran_command_security_guard') + mobileTemplate.setLevel(36) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(15) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(1) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("imperial") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(False) + mobileTemplate.setFaction("imperial") + mobileTemplate.setFactionStatus(1) + + templates = Vector() + templates.add('object/mobile/shared_stormtrooper.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/carbine/shared_carbine_e11.iff', 1, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedShot') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('vet_com_sec_guard', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/generic/faction/imperial/veteran_compforce_trooper.py b/scripts/mobiles/generic/faction/imperial/veteran_compforce_trooper.py new file mode 100644 index 00000000..d7f7521a --- /dev/null +++ b/scripts/mobiles/generic/faction/imperial/veteran_compforce_trooper.py @@ -0,0 +1,39 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('veteran_imperial_army_captain') + mobileTemplate.setLevel(53) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(15) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(1) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(True) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("imperial") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(False) + mobileTemplate.setFaction("imperial") + mobileTemplate.setFactionStatus(1) + + templates = Vector() + templates.add('object/mobile/shared_stormtrooper.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/carbine/shared_carbine_e11.iff', 1, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedShot') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('vet_imperial_army_captain', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/generic/faction/imperial/veteran_dark_trooper.py b/scripts/mobiles/generic/faction/imperial/veteran_dark_trooper.py new file mode 100644 index 00000000..0068e29d --- /dev/null +++ b/scripts/mobiles/generic/faction/imperial/veteran_dark_trooper.py @@ -0,0 +1,39 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('crackdown_dark_trooper') + mobileTemplate.setLevel(65) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(15) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(1) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("imperial") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(False) + mobileTemplate.setFaction("imperial") + mobileTemplate.setFactionStatus(1) + + templates = Vector() + templates.add('object/mobile/shared_dark_trooper.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/carbine/shared_carbine_e11.iff', 1, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedShot') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('victory_class_dark_trooper_32', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/generic/faction/imperial/veteran_first_lieutenant.py b/scripts/mobiles/generic/faction/imperial/veteran_first_lieutenant.py new file mode 100644 index 00000000..8dcff480 --- /dev/null +++ b/scripts/mobiles/generic/faction/imperial/veteran_first_lieutenant.py @@ -0,0 +1,39 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('veteran_imperial_first_lieutenant') + mobileTemplate.setLevel(49) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(15) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(1) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(True) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("imperial") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(False) + mobileTemplate.setFaction("imperial") + mobileTemplate.setFactionStatus(1) + + templates = Vector() + templates.add('object/mobile/shared_dressed_imperial_lieutenant_m.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/carbine/shared_carbine_e11.iff', 1, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedShot') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('vet_imp_fst_lieutenant', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/generic/faction/imperial/veteran_imp_army_captain.py b/scripts/mobiles/generic/faction/imperial/veteran_imp_army_captain.py new file mode 100644 index 00000000..2decf27a --- /dev/null +++ b/scripts/mobiles/generic/faction/imperial/veteran_imp_army_captain.py @@ -0,0 +1,39 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('veteran_imperial_army_captain') + mobileTemplate.setLevel(53) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(15) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(1) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(True) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("imperial") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(False) + mobileTemplate.setFaction("imperial") + mobileTemplate.setFactionStatus(1) + + templates = Vector() + templates.add('object/mobile/shared_dressed_imperial_captain_m.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/carbine/shared_carbine_e11.iff', 1, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedShot') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('vet_imp_army_captain', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/generic/faction/imperial/veteran_imp_captain.py b/scripts/mobiles/generic/faction/imperial/veteran_imp_captain.py new file mode 100644 index 00000000..44a4a7d0 --- /dev/null +++ b/scripts/mobiles/generic/faction/imperial/veteran_imp_captain.py @@ -0,0 +1,39 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('fbase_imperial_army_captain_extreme') + mobileTemplate.setLevel(89) + mobileTemplate.setDifficulty(1) + mobileTemplate.setAttackRange(15) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(1) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("imperial") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(False) + mobileTemplate.setFaction("imperial") + mobileTemplate.setFactionStatus(1) + + templates = Vector() + templates.add('object/mobile/shared_dressed_imperial_captain_m.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/carbine/shared_carbine_e11.iff', 1, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedShot') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('vet_imperial_army_captain', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/generic/faction/imperial/veteran_imp_colonel.py b/scripts/mobiles/generic/faction/imperial/veteran_imp_colonel.py new file mode 100644 index 00000000..e54068fe --- /dev/null +++ b/scripts/mobiles/generic/faction/imperial/veteran_imp_colonel.py @@ -0,0 +1,39 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('veteran_imperial_colonel') + mobileTemplate.setLevel(60) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(15) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(1) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(True) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("imperial") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(False) + mobileTemplate.setFaction("imperial") + mobileTemplate.setFactionStatus(1) + + templates = Vector() + templates.add('object/mobile/shared_dressed_imperial_colonel_m.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/carbine/shared_carbine_e11.iff', 1, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedShot') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('vet_imp_colonel', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/generic/faction/imperial/veteran_imp_corporal.py b/scripts/mobiles/generic/faction/imperial/veteran_imp_corporal.py new file mode 100644 index 00000000..44b9e335 --- /dev/null +++ b/scripts/mobiles/generic/faction/imperial/veteran_imp_corporal.py @@ -0,0 +1,39 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('veteran_imperial_corporal') + mobileTemplate.setLevel(35) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(15) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(1) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("imperial") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(False) + mobileTemplate.setFaction("imperial") + mobileTemplate.setFactionStatus(1) + + templates = Vector() + templates.add('object/mobile/shared_dressed_imperial_officer_m.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/carbine/shared_carbine_e11.iff', 1, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedShot') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('vet_imp_corporal', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/generic/faction/imperial/veteran_imp_lance_corporal.py b/scripts/mobiles/generic/faction/imperial/veteran_imp_lance_corporal.py new file mode 100644 index 00000000..b427089b --- /dev/null +++ b/scripts/mobiles/generic/faction/imperial/veteran_imp_lance_corporal.py @@ -0,0 +1,39 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('veteran_imperial_lance_corporal') + mobileTemplate.setLevel(34) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(15) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(1) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("imperial") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(False) + mobileTemplate.setFaction("imperial") + mobileTemplate.setFactionStatus(1) + + templates = Vector() + templates.add('object/mobile/shared_dressed_imperial_officer_m.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/carbine/shared_carbine_e11.iff', 1, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedShot') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('vet_imp_lance_corporal', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/generic/faction/imperial/veteran_imp_lieutenant_colonel.py b/scripts/mobiles/generic/faction/imperial/veteran_imp_lieutenant_colonel.py new file mode 100644 index 00000000..a4bd5337 --- /dev/null +++ b/scripts/mobiles/generic/faction/imperial/veteran_imp_lieutenant_colonel.py @@ -0,0 +1,39 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('veteran_imperial_lieutenant_colonel') + mobileTemplate.setLevel(58) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(15) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(1) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(True) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("imperial") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(False) + mobileTemplate.setFaction("imperial") + mobileTemplate.setFactionStatus(1) + + templates = Vector() + templates.add('object/mobile/shared_dressed_imperial_lieutenant_m.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/carbine/shared_carbine_e11.iff', 1, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedShot') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('vet_imp_lieutenant_colonel', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/generic/faction/imperial/veteran_imp_lieutenant_general.py b/scripts/mobiles/generic/faction/imperial/veteran_imp_lieutenant_general.py new file mode 100644 index 00000000..fa4c79fb --- /dev/null +++ b/scripts/mobiles/generic/faction/imperial/veteran_imp_lieutenant_general.py @@ -0,0 +1,39 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('veteran_imperial_lieutenant_general') + mobileTemplate.setLevel(68) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(15) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(1) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(True) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("imperial") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(False) + mobileTemplate.setFaction("imperial") + mobileTemplate.setFactionStatus(1) + + templates = Vector() + templates.add('object/mobile/shared_dressed_imperial_general_m.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/carbine/shared_carbine_e11.iff', 1, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedShot') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('vet_imp_lieutenant_general', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/generic/faction/imperial/veteran_imperial_2nd_lieutenant.py b/scripts/mobiles/generic/faction/imperial/veteran_imperial_2nd_lieutenant.py new file mode 100644 index 00000000..8eef291d --- /dev/null +++ b/scripts/mobiles/generic/faction/imperial/veteran_imperial_2nd_lieutenant.py @@ -0,0 +1,39 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('veteran_imperial_second_lieutenant') + mobileTemplate.setLevel(50) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(15) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(1) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(True) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("imperial") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(False) + mobileTemplate.setFaction("imperial") + mobileTemplate.setFactionStatus(1) + + templates = Vector() + templates.add('object/mobile/shared_dressed_imperial_lieutenant_m.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/carbine/shared_carbine_e11.iff', 1, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedShot') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('vet_imp_second_lieutenant', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/generic/faction/imperial/veteran_imperial_army_captain.py b/scripts/mobiles/generic/faction/imperial/veteran_imperial_army_captain.py new file mode 100644 index 00000000..f3446390 --- /dev/null +++ b/scripts/mobiles/generic/faction/imperial/veteran_imperial_army_captain.py @@ -0,0 +1,39 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('veteran_imperial_army_captain') + mobileTemplate.setLevel(89) + mobileTemplate.setDifficulty(1) + mobileTemplate.setAttackRange(15) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(1) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(True) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("imperial") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(False) + mobileTemplate.setFaction("imperial") + mobileTemplate.setFactionStatus(1) + + templates = Vector() + templates.add('object/mobile/shared_dressed_imperial_captain_m.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/carbine/shared_carbine_e11.iff', 1, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedShot') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('vet_imperial_army_captain', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/generic/faction/imperial/veteran_imperial_bombardier.py b/scripts/mobiles/generic/faction/imperial/veteran_imperial_bombardier.py new file mode 100644 index 00000000..5eb2d696 --- /dev/null +++ b/scripts/mobiles/generic/faction/imperial/veteran_imperial_bombardier.py @@ -0,0 +1,39 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('veteran_stormtrooper_bombardier') + mobileTemplate.setLevel(55) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(15) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(1) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(True) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("imperial") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(False) + mobileTemplate.setFaction("imperial") + mobileTemplate.setFactionStatus(1) + + templates = Vector() + templates.add('object/mobile/shared_dressed_stormtrooper_bombardier_m.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/carbine/shared_carbine_e11.iff', 1, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedShot') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('veteran_stormtrooper_bombardier', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/generic/faction/imperial/veteran_imperial_general.py b/scripts/mobiles/generic/faction/imperial/veteran_imperial_general.py new file mode 100644 index 00000000..72fda8df --- /dev/null +++ b/scripts/mobiles/generic/faction/imperial/veteran_imperial_general.py @@ -0,0 +1,39 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('veteran_imperial_general') + mobileTemplate.setLevel(70) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(15) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(1) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(True) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("imperial") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(False) + mobileTemplate.setFaction("imperial") + mobileTemplate.setFactionStatus(1) + + templates = Vector() + templates.add('object/mobile/shared_dressed_imperial_general_m.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/carbine/shared_carbine_e11.iff', 1, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedShot') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('vet_imp_general', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/generic/faction/imperial/veteran_imperial_high_general.py b/scripts/mobiles/generic/faction/imperial/veteran_imperial_high_general.py new file mode 100644 index 00000000..56b58cbf --- /dev/null +++ b/scripts/mobiles/generic/faction/imperial/veteran_imperial_high_general.py @@ -0,0 +1,39 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('veteran_imperial_high_general') + mobileTemplate.setLevel(73) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(15) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(1) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(True) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("imperial") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(False) + mobileTemplate.setFaction("imperial") + mobileTemplate.setFactionStatus(1) + + templates = Vector() + templates.add('object/mobile/shared_dressed_imperial_general_m.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/carbine/shared_carbine_e11.iff', 1, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedShot') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('vet_imp_high_general', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/generic/faction/imperial/veteran_imperial_major.py b/scripts/mobiles/generic/faction/imperial/veteran_imperial_major.py new file mode 100644 index 00000000..9cfd83d8 --- /dev/null +++ b/scripts/mobiles/generic/faction/imperial/veteran_imperial_major.py @@ -0,0 +1,39 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('veteran_imperial_major') + mobileTemplate.setLevel(55) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(15) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(1) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(True) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("imperial") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(False) + mobileTemplate.setFaction("imperial") + mobileTemplate.setFactionStatus(1) + + templates = Vector() + templates.add('object/mobile/shared_dressed_imperial_major_m.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/carbine/shared_carbine_e11.iff', 1, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedShot') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('vet_imp_major', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/generic/faction/imperial/veteran_imperial_major_general.py b/scripts/mobiles/generic/faction/imperial/veteran_imperial_major_general.py new file mode 100644 index 00000000..7c05546d --- /dev/null +++ b/scripts/mobiles/generic/faction/imperial/veteran_imperial_major_general.py @@ -0,0 +1,39 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('veteran_imperial_major_general') + mobileTemplate.setLevel(65) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(15) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(1) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(True) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("imperial") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(False) + mobileTemplate.setFaction("imperial") + mobileTemplate.setFactionStatus(1) + + templates = Vector() + templates.add('object/mobile/shared_dressed_imperial_general_m.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/carbine/shared_carbine_e11.iff', 1, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedShot') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('vet_imp_major_general', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/generic/faction/imperial/veteran_imperial_master_sergeant.py b/scripts/mobiles/generic/faction/imperial/veteran_imperial_master_sergeant.py new file mode 100644 index 00000000..839b6e43 --- /dev/null +++ b/scripts/mobiles/generic/faction/imperial/veteran_imperial_master_sergeant.py @@ -0,0 +1,39 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('veteran_imperial_master_sergeant') + mobileTemplate.setLevel(43) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(15) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(1) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(True) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("imperial") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(True) + mobileTemplate.setFaction("imperial") + mobileTemplate.setFactionStatus(1) + + templates = Vector() + templates.add('object/mobile/shared_dressed_npe_imperial_officer.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/carbine/shared_carbine_e11.iff', 1, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedShot') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('vet_imp_master_sergant', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/generic/faction/imperial/veteran_imperial_medic.py b/scripts/mobiles/generic/faction/imperial/veteran_imperial_medic.py new file mode 100644 index 00000000..625b961f --- /dev/null +++ b/scripts/mobiles/generic/faction/imperial/veteran_imperial_medic.py @@ -0,0 +1,41 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('veteran_imperial_medic') + mobileTemplate.setLevel(40) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(15) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(1) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("imperial") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(False) + mobileTemplate.setFaction("imperial") + mobileTemplate.setFactionStatus(1) + + templates = Vector() + templates.add('object/mobile/shared_dressed_imperial_medic1_human_male_01.iff') + templates.add('object/mobile/shared_dressed_imperial_medic3_human_male_01.iff') + templates.add('object/mobile/shared_dressed_stormtrooper_medic_m.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/carbine/shared_carbine_e11.iff', 1, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedShot') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('vet_imp_medic', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/generic/faction/imperial/veteran_imperial_sandtrooper.py b/scripts/mobiles/generic/faction/imperial/veteran_imperial_sandtrooper.py new file mode 100644 index 00000000..50bf6258 --- /dev/null +++ b/scripts/mobiles/generic/faction/imperial/veteran_imperial_sandtrooper.py @@ -0,0 +1,39 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('veteran_sand_trooper') + mobileTemplate.setLevel(49) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(15) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(1) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(True) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("imperial") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(False) + mobileTemplate.setFaction("imperial") + mobileTemplate.setFactionStatus(1) + + templates = Vector() + templates.add('object/mobile/shared_dressed_stormtrooper_sandtrooper_m.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/carbine/shared_carbine_e11.iff', 1, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedShot') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('vet_sand_trooper', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/generic/faction/imperial/veteran_imperial_scouttrooper.py b/scripts/mobiles/generic/faction/imperial/veteran_imperial_scouttrooper.py new file mode 100644 index 00000000..e086ee82 --- /dev/null +++ b/scripts/mobiles/generic/faction/imperial/veteran_imperial_scouttrooper.py @@ -0,0 +1,39 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('veteran_scout_trooper') + mobileTemplate.setLevel(46) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(15) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(0) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("imperial") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(False) + mobileTemplate.setFaction("imperial") + mobileTemplate.setFactionStatus(1) + + templates = Vector() + templates.add('object/mobile/shared_dressed_scout_trooper_white_white.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/rifle/shared_rifle_e11.iff', 0, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedShot') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('vet_scout_trooper', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/generic/faction/imperial/veteran_imperial_sergeant.py b/scripts/mobiles/generic/faction/imperial/veteran_imperial_sergeant.py new file mode 100644 index 00000000..4156ae66 --- /dev/null +++ b/scripts/mobiles/generic/faction/imperial/veteran_imperial_sergeant.py @@ -0,0 +1,39 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('veteran_imperial_sergeant') + mobileTemplate.setLevel(36) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(15) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(1) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("imperial") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(False) + mobileTemplate.setFaction("imperial") + mobileTemplate.setFactionStatus(1) + + templates = Vector() + templates.add('object/mobile/shared_dressed_npe_imperial_officer.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/carbine/shared_carbine_e11.iff', 1, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedShot') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('vet_imp_sergeant', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/generic/faction/imperial/veteran_imperial_sergeant_major.py b/scripts/mobiles/generic/faction/imperial/veteran_imperial_sergeant_major.py new file mode 100644 index 00000000..c19e3387 --- /dev/null +++ b/scripts/mobiles/generic/faction/imperial/veteran_imperial_sergeant_major.py @@ -0,0 +1,39 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('veteran_imperial_sergeant_major') + mobileTemplate.setLevel(46) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(15) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(1) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(True) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("imperial") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(False) + mobileTemplate.setFaction("imperial") + mobileTemplate.setFactionStatus(1) + + templates = Vector() + templates.add('object/mobile/shared_dressed_imperial_major_m.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/carbine/shared_carbine_e11.iff', 1, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedShot') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('vet_imp_sergeant_major', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/generic/faction/imperial/veteran_imperial_sharpshooter.py b/scripts/mobiles/generic/faction/imperial/veteran_imperial_sharpshooter.py new file mode 100644 index 00000000..02f30a84 --- /dev/null +++ b/scripts/mobiles/generic/faction/imperial/veteran_imperial_sharpshooter.py @@ -0,0 +1,39 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('veteran_imperial_sharpshooter') + mobileTemplate.setLevel(43) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(15) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(1) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("imperial") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(False) + mobileTemplate.setFaction("imperial") + mobileTemplate.setFactionStatus(1) + + templates = Vector() + templates.add('object/mobile/shared_dressed_npe_imperial_officer.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/rifle/shared_rifle_e11.iff', 1, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedShot') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('vet_imp_sharpshooter', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/generic/faction/imperial/veteran_imperial_staff_corporal.py b/scripts/mobiles/generic/faction/imperial/veteran_imperial_staff_corporal.py new file mode 100644 index 00000000..8703019c --- /dev/null +++ b/scripts/mobiles/generic/faction/imperial/veteran_imperial_staff_corporal.py @@ -0,0 +1,39 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('veteran_imperial_staff_corporal') + mobileTemplate.setLevel(38) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(15) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(1) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("imperial") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(False) + mobileTemplate.setFaction("imperial") + mobileTemplate.setFactionStatus(1) + + templates = Vector() + templates.add('object/mobile/shared_dressed_imperial_officer_m.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/carbine/shared_carbine_e11.iff', 1, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedShot') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('vet_imp_staff_corporal', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/generic/faction/imperial/veteran_imperial_staff_sergeant.py b/scripts/mobiles/generic/faction/imperial/veteran_imperial_staff_sergeant.py new file mode 100644 index 00000000..233e75ad --- /dev/null +++ b/scripts/mobiles/generic/faction/imperial/veteran_imperial_staff_sergeant.py @@ -0,0 +1,39 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('veteran_imperial_staff_sergeant') + mobileTemplate.setLevel(40) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(15) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(1) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("imperial") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(False) + mobileTemplate.setFaction("imperial") + mobileTemplate.setFactionStatus(1) + + templates = Vector() + templates.add('object/mobile/shared_dressed_npe_imperial_officer.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/carbine/shared_carbine_e11.iff', 1, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedShot') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('vet_imp_staff_sergeant', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/generic/faction/imperial/veteran_imperial_surface_marshall.py b/scripts/mobiles/generic/faction/imperial/veteran_imperial_surface_marshall.py new file mode 100644 index 00000000..adc3ba11 --- /dev/null +++ b/scripts/mobiles/generic/faction/imperial/veteran_imperial_surface_marshall.py @@ -0,0 +1,39 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('veteran_imperial_surface_marshal') + mobileTemplate.setLevel(75) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(15) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(1) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(True) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("imperial") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(False) + mobileTemplate.setFaction("imperial") + mobileTemplate.setFactionStatus(1) + + templates = Vector() + templates.add('object/mobile/shared_dressed_npe_imperial_officer.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/carbine/shared_carbine_e11.iff', 1, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedShot') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('vet_imp_surface_marshall', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/generic/faction/imperial/veteran_imperial_warant_officer_i.py b/scripts/mobiles/generic/faction/imperial/veteran_imperial_warant_officer_i.py new file mode 100644 index 00000000..594694f7 --- /dev/null +++ b/scripts/mobiles/generic/faction/imperial/veteran_imperial_warant_officer_i.py @@ -0,0 +1,39 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('veteran_imperial_warrant_officer_i') + mobileTemplate.setLevel(48) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(15) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(1) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(True) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("imperial") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(False) + mobileTemplate.setFaction("imperial") + mobileTemplate.setFactionStatus(1) + + templates = Vector() + templates.add('object/mobile/shared_dressed_npe_imperial_officer.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/carbine/shared_carbine_e11.iff', 1, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedShot') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('vet_imp_warrant_offi_i', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/generic/faction/imperial/veteran_imperial_warant_officer_ii.py b/scripts/mobiles/generic/faction/imperial/veteran_imperial_warant_officer_ii.py new file mode 100644 index 00000000..0600b4d9 --- /dev/null +++ b/scripts/mobiles/generic/faction/imperial/veteran_imperial_warant_officer_ii.py @@ -0,0 +1,39 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('veteran_imperial_warrant_officer_ii') + mobileTemplate.setLevel(45) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(15) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(1) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(True) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("imperial") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(False) + mobileTemplate.setFaction("imperial") + mobileTemplate.setFactionStatus(1) + + templates = Vector() + templates.add('object/mobile/shared_dressed_npe_imperial_officer.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/carbine/shared_carbine_e11.iff', 1, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedShot') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('vet_imp_warrant_offi_ii', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/generic/faction/imperial/victory_class_dark_trooper_32.py b/scripts/mobiles/generic/faction/imperial/victory_class_dark_trooper_32.py new file mode 100644 index 00000000..f9b79886 --- /dev/null +++ b/scripts/mobiles/generic/faction/imperial/victory_class_dark_trooper_32.py @@ -0,0 +1,39 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('crackdown_dark_trooper') + mobileTemplate.setLevel(32) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(15) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(1) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("imperial") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(False) + mobileTemplate.setFaction("imperial") + mobileTemplate.setFactionStatus(1) + + templates = Vector() + templates.add('object/mobile/shared_dark_trooper.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/carbine/shared_carbine_e11.iff', 1, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedShot') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('vic_dark_trooper_32', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/generic/faction/imperial/victory_class_dark_trooper_80.py b/scripts/mobiles/generic/faction/imperial/victory_class_dark_trooper_80.py new file mode 100644 index 00000000..c30c312c --- /dev/null +++ b/scripts/mobiles/generic/faction/imperial/victory_class_dark_trooper_80.py @@ -0,0 +1,39 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('crackdown_dark_trooper') + mobileTemplate.setLevel(80) + mobileTemplate.setDifficulty(1) + mobileTemplate.setAttackRange(15) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(1) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("imperial") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(False) + mobileTemplate.setFaction("imperial") + mobileTemplate.setFactionStatus(1) + + templates = Vector() + templates.add('object/mobile/shared_dark_trooper.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/carbine/shared_carbine_e11.iff', 1, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedShot') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('vic_dark_trooper_80', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/generic/faction/rebel/battle_droid_reb.py b/scripts/mobiles/generic/faction/rebel/battle_droid_reb.py new file mode 100644 index 00000000..5325c108 --- /dev/null +++ b/scripts/mobiles/generic/faction/rebel/battle_droid_reb.py @@ -0,0 +1,40 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from resources.datatables import FactionStatus +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('rebel_battle_droid') + mobileTemplate.setLevel(83) + mobileTemplate.setDifficulty(1) + mobileTemplate.setAttackRange(15) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(1) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(True) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("imperial") + mobileTemplate.setAssistRange(24) + mobileTemplate.setStalker(False) + mobileTemplate.setFaction("rebel") + mobileTemplate.setFactionStatus(1) + + templates = Vector() + templates.add('object/mobile/shared_battle_droid.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/carbine/shared_carbine_e5.iff', 1, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedShot') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('battle_droid_rebel', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/generic/faction/rebel/decorated_sith_hunter.py b/scripts/mobiles/generic/faction/rebel/decorated_sith_hunter.py new file mode 100644 index 00000000..5a4fba78 --- /dev/null +++ b/scripts/mobiles/generic/faction/rebel/decorated_sith_hunter.py @@ -0,0 +1,43 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from resources.datatables import FactionStatus +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('fbase_rebel_elite_heavy_trooper_extreme') + mobileTemplate.setLevel(89) + mobileTemplate.setDifficulty(1) + mobileTemplate.setAttackRange(15) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(1) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("rebel") + mobileTemplate.setAssistRange(24) + mobileTemplate.setStalker(False) + mobileTemplate.setFaction("rebel") + mobileTemplate.setFactionStatus(1) + + templates = Vector() + templates.add('object/mobile/shared_dressed_rebel_ris_01.iff') + templates.add('object/mobile/shared_dressed_rebel_ris_02.iff') + templates.add('object/mobile/shared_dressed_rebel_ris_03.iff') + templates.add('object/mobile/shared_dressed_rebel_ris_04.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/carbine/shared_carbine_e5.iff', 1, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedShot') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('decorated_sith_hunter', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/generic/faction/rebel/tamed_gurrcat.py b/scripts/mobiles/generic/faction/rebel/tamed_gurrcat.py new file mode 100644 index 00000000..b9374fc1 --- /dev/null +++ b/scripts/mobiles/generic/faction/rebel/tamed_gurrcat.py @@ -0,0 +1,45 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('rebel_tamed_gurrcat') + mobileTemplate.setLevel(4) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setMeatType("Carnivore Meat") + mobileTemplate.setMeatAmount(65) + mobileTemplate.setHideType("Bristly Hide") + mobileTemplate.setHideAmount(35) + mobileTemplate.setBoneType("Mammal Bones") + mobileTemplate.setBoneAmount(30) + mobileTemplate.setSocialGroup("dire cat") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(True) + mobileTemplate.setFaction("rebel") + mobileTemplate.setFactionStatus(1) + + templates = Vector() + templates.add('object/mobile/shared_gurrcat.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('tamed_gurrcat', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/generic/faction/rebel/tamed_huurton.py b/scripts/mobiles/generic/faction/rebel/tamed_huurton.py new file mode 100644 index 00000000..88ddc47a --- /dev/null +++ b/scripts/mobiles/generic/faction/rebel/tamed_huurton.py @@ -0,0 +1,39 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('rebel_tamed_huurton') + mobileTemplate.setLevel(61) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(5) + mobileTemplate.setMaxSpawnDistance(10) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("rebel") + mobileTemplate.setAssistRange(12) + mobileTemplate.setStalker(False) + mobileTemplate.setFaction("rebel") + mobileTemplate.setFactionStatus(1) + + templates = Vector() + templates.add('object/mobile/shared_huurton.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('tamed_huurton', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/generic/faction/rebel/tamed_razor_cat.py b/scripts/mobiles/generic/faction/rebel/tamed_razor_cat.py new file mode 100644 index 00000000..214a2f5b --- /dev/null +++ b/scripts/mobiles/generic/faction/rebel/tamed_razor_cat.py @@ -0,0 +1,45 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('rebel_tamed_razor_cat') + mobileTemplate.setLevel(10) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setMeatType("Carnivore Meat") + mobileTemplate.setMeatAmount(65) + mobileTemplate.setHideType("Bristly Hide") + mobileTemplate.setHideAmount(35) + mobileTemplate.setBoneType("Mammal Bones") + mobileTemplate.setBoneAmount(30) + mobileTemplate.setSocialGroup("razor cat") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(True) + mobileTemplate.setFaction("rebel") + mobileTemplate.setFactionStatus(1) + + templates = Vector() + templates.add('object/mobile/shared_corellian_sand_panther.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('tamed_razor_cat', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/generic/faction/rebel/tamed_slice_hound.py b/scripts/mobiles/generic/faction/rebel/tamed_slice_hound.py new file mode 100644 index 00000000..4ee80f60 --- /dev/null +++ b/scripts/mobiles/generic/faction/rebel/tamed_slice_hound.py @@ -0,0 +1,45 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('rebel_tamed_slice_hound') + mobileTemplate.setLevel(4) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setMeatType("Carnivore Meat") + mobileTemplate.setMeatAmount(65) + mobileTemplate.setHideType("Bristly Hide") + mobileTemplate.setHideAmount(35) + mobileTemplate.setBoneType("Mammal Bones") + mobileTemplate.setBoneAmount(30) + mobileTemplate.setSocialGroup("slice hound") + mobileTemplate.setAssistRange(6) + mobileTemplate.setStalker(False) + mobileTemplate.setFaction("rebel") + mobileTemplate.setFactionStatus(1) + + templates = Vector() + templates.add('object/mobile/shared_corellian_slice_hound.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('tamed_slice_hound', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/instances/tuskenking/mosespa/bestine_police_officer.py b/scripts/mobiles/instances/tuskenking/mosespa/bestine_police_officer.py new file mode 100644 index 00000000..8899d636 --- /dev/null +++ b/scripts/mobiles/instances/tuskenking/mosespa/bestine_police_officer.py @@ -0,0 +1,38 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('heroic_tusken_bestine_police_offcier') + mobileTemplate.setLevel(90) + mobileTemplate.setDifficulty(1) + mobileTemplate.setAttackRange(12) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(2) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(True) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("heroic mos espa citizien") + mobileTemplate.setAssistRange(12) + mobileTemplate.setStalker(True) + mobileTemplate.setOptionsBitmask(128) + + templates = Vector() + templates.add('object/mobile/shared_dressed_tatooine_mos_eisley_police_officer.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/pistol/shared_pistol_scout_blaster.iff', 2, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedShot') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('heroic_bestine_police_officer', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/instances/tuskenking/mosespa/bioengineer.py b/scripts/mobiles/instances/tuskenking/mosespa/bioengineer.py new file mode 100644 index 00000000..ee75731b --- /dev/null +++ b/scripts/mobiles/instances/tuskenking/mosespa/bioengineer.py @@ -0,0 +1,40 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('heroic_tusken_bio_engineer') + mobileTemplate.setLevel(90) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(12) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(2) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(True) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("heroic mos espa citizien") + mobileTemplate.setAssistRange(12) + mobileTemplate.setStalker(True) + mobileTemplate.setOptionsBitmask(128) + + templates = Vector() + templates.add('object/mobile/shared_dressed_bioengineer_trainer_01.iff') + templates.add('object/mobile/shared_dressed_bioengineer_trainer_02.iff') + templates.add('object/mobile/shared_dressed_bioengineer_trainer_03.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/pistol/shared_pistol_scout_blaster.iff', 2, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedShot') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('heroic_tusken_bio_engineer', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/instances/tuskenking/mosespa/blood_hunter.py b/scripts/mobiles/instances/tuskenking/mosespa/blood_hunter.py new file mode 100644 index 00000000..68e4f218 --- /dev/null +++ b/scripts/mobiles/instances/tuskenking/mosespa/blood_hunter.py @@ -0,0 +1,40 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('heroic_tusken_blood_hunter') + mobileTemplate.setLevel(90) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(12) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(0) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(True) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("heroic mos espa citizien") + mobileTemplate.setAssistRange(12) + mobileTemplate.setStalker(True) + mobileTemplate.setOptionsBitmask(128) + + templates = Vector() + templates.add('object/mobile/shared_dressed_commando_trainer_trandoshan_male_01.iff') + templates.add('object/mobile/shared_dressed_commoner_tatooine_trandoshan_female_01.iff') + templates.add('object/mobile/shared_dressed_commoner_tatooine_trandoshan_male_01.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/rifle/shared_rifle_t21.iff', 0, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedShotrifle') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('heroic_tusken_blood_hunter', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/instances/tuskenking/mosespa/buisnessman.py b/scripts/mobiles/instances/tuskenking/mosespa/buisnessman.py new file mode 100644 index 00000000..99cfaa12 --- /dev/null +++ b/scripts/mobiles/instances/tuskenking/mosespa/buisnessman.py @@ -0,0 +1,40 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('heroic_tusken_businessman') + mobileTemplate.setLevel(90) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(12) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(2) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(True) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("heroic mos espa citizien") + mobileTemplate.setAssistRange(12) + mobileTemplate.setStalker(True) + mobileTemplate.setOptionsBitmask(128) + + templates = Vector() + templates.add('object/mobile/shared_dressed_merchant_trainer_01.iff') + templates.add('object/mobile/shared_dressed_merchant_trainer_02.iff') + templates.add('object/mobile/shared_dressed_merchant_trainer_03.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/pistol/shared_pistol_scout_blaster.iff', 2, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedShot') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('heroic_tusken_businessman', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/instances/tuskenking/mosespa/citizien.py b/scripts/mobiles/instances/tuskenking/mosespa/citizien.py new file mode 100644 index 00000000..79259e94 --- /dev/null +++ b/scripts/mobiles/instances/tuskenking/mosespa/citizien.py @@ -0,0 +1,106 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('heroic_tusken_mos_espa_citizen') + mobileTemplate.setLevel(90) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(12) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(True) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("heroic mos espa citizien") + mobileTemplate.setAssistRange(12) + mobileTemplate.setStalker(True) + mobileTemplate.setOptionsBitmask(128) + + templates = Vector() + templates.add('object/mobile/shared_warren_research_scientist.iff') + templates.add('object/mobile/shared_dressed_commoner_tatooine_aqualish_female_06.iff') + templates.add('object/mobile/shared_dressed_commoner_tatooine_aqualish_male_05.iff') + templates.add('object/mobile/shared_dressed_commoner_tatooine_nikto_male_06.iff') + templates.add('object/mobile/shared_dressed_commoner_tatooine_rodian_female_04.iff') + templates.add('object/mobile/shared_dressed_commoner_tatooine_devaronian_male_03.iff') + templates.add('object/mobile/shared_dressed_commoner_tatooine_sullustan_male_03.iff') + templates.add('object/mobile/shared_dressed_commoner_tatooine_aqualish_female_02.iff') + templates.add('object/mobile/shared_dressed_commoner_tatooine_aqualish_male_01.iff') + templates.add('object/mobile/shared_dressed_commoner_tatooine_aqualish_male_08.iff') + templates.add('object/mobile/shared_dressed_commoner_tatooine_bith_female_03.iff') + templates.add('object/mobile/shared_dressed_commoner_tatooine_bith_male_04.iff') + templates.add('object/mobile/shared_dressed_commoner_tatooine_ishitib_male_02.iff') + templates.add('object/mobile/shared_dressed_commoner_tatooine_aqualish_male_08.iff') + templates.add('object/mobile/shared_dressed_commoner_tatooine_nikto_male_02.iff') + templates.add('object/mobile/shared_dressed_commoner_tatooine_rodian_male_01.iff') + templates.add('object/mobile/shared_dressed_commoner_tatooine_trandoshan_female_02.iff') + templates.add('object/mobile/shared_dressed_commoner_tatooine_aqualish_female_07.iff') + templates.add('object/mobile/shared_dressed_commoner_tatooine_aqualish_male_04.iff') + templates.add('object/mobile/shared_dressed_commoner_tatooine_bith_male_01.iff') + templates.add('object/mobile/shared_dressed_commoner_tatooine_trandoshan_male_02.iff') + templates.add('object/mobile/shared_dressed_commoner_tatooine_bith_female_06.iff') + templates.add('object/mobile/shared_dressed_commoner_tatooine_nikto_male_07.iff') + templates.add('object/mobile/shared_dressed_commoner_tatooine_rodian_male_04.iff') + templates.add('object/mobile/shared_dressed_commoner_tatooine_sullustan_male_02.iff') + templates.add('object/mobile/shared_dressed_commoner_tatooine_aqualish_female_03.iff') + templates.add('object/mobile/shared_dressed_commoner_tatooine_bith_male_05.iff') + templates.add('object/mobile/shared_dressed_commoner_tatooine_devaronian_male_02.iff') + templates.add('object/mobile/shared_dressed_commoner_tatooine_ishitib_male_03.iff') + templates.add('object/mobile/shared_dressed_commoner_tatooine_nikto_male_03.iff') + templates.add('object/mobile/shared_dressed_commoner_tatooine_rodian_female_01.iff') + templates.add('object/mobile/shared_dressed_commoner_tatooine_trandoshan_female_03.iff') + templates.add('object/mobile/shared_dressed_commoner_tatooine_aqualish_male_09.iff') + templates.add('object/mobile/shared_dressed_commoner_tatooine_bith_female_02.iff') + templates.add('object/mobile/shared_dressed_commoner_tatooine_sullustan_male_06.iff') + templates.add('object/mobile/shared_dressed_commoner_tatooine_devaronian_male_01.iff') + templates.add('object/mobile/shared_dressed_commoner_tatooine_sullustan_male_01.iff') + templates.add('object/mobile/shared_dressed_commoner_tatooine_aqualish_female_04.iff') + templates.add('object/mobile/shared_dressed_commoner_tatooine_aqualish_male_07.iff') + templates.add('object/mobile/shared_dressed_commoner_tatooine_bith_female_05.iff') + templates.add('object/mobile/shared_dressed_commoner_tatooine_bith_male_02.iff') + templates.add('object/mobile/shared_dressed_commoner_tatooine_nikto_male_04.iff') + templates.add('object/mobile/shared_dressed_commoner_tatooine_trandoshan_female_04.iff') + templates.add('object/mobile/shared_dressed_commoner_tatooine_rodian_female_02.iff') + templates.add('object/mobile/shared_dressed_commoner_tatooine_sullustan_male_05.iff') + templates.add('object/mobile/shared_dressed_commoner_tatooine_aqualish_male_03.iff') + templates.add('object/mobile/shared_dressed_commoner_tatooine_bith_female_01.iff') + templates.add('object/mobile/shared_dressed_commoner_tatooine_bith_male_06.iff') + templates.add('object/mobile/shared_dressed_commoner_tatooine_rodian_male_03.iff') + templates.add('object/mobile/shared_dressed_commoner_tatooine_aqualish_male_06.iff') + templates.add('object/mobile/shared_dressed_commoner_tatooine_bith_male_03.iff') + templates.add('object/mobile/shared_dressed_commoner_tatooine_nikto_male_05.iff') + templates.add('object/mobile/shared_dressed_commoner_tatooine_aqualish_female_05.iff') + templates.add('object/mobile/shared_dressed_commoner_tatooine_bith_female_04.iff') + templates.add('object/mobile/shared_dressed_commoner_tatooine_trandoshan_male_01.iff') + templates.add('object/mobile/shared_dressed_commoner_tatooine_sullustan_male_04.iff') + templates.add('object/mobile/shared_dressed_commoner_tatooine_devaronian_male_04.iff') + templates.add('object/mobile/shared_dressed_commoner_tatooine_aqualish_male_02.iff') + templates.add('object/mobile/shared_dressed_commoner_tatooine_ishitib_male_01.iff') + templates.add('object/mobile/shared_dressed_commoner_tatooine_aqualish_female_01.iff') + templates.add('object/mobile/shared_dressed_commoner_tatooine_nikto_male_01.iff') + templates.add('object/mobile/shared_dressed_commoner_tatooine_rodian_female_03.iff') + templates.add('object/mobile/shared_dressed_commoner_tatooine_trandoshan_female_01.iff') + templates.add('object/mobile/shared_dressed_commoner_tatooine_aqualish_female_08.iff') + templates.add('object/mobile/shared_dressed_commoner_tatooine_nikto_male_08.iff') + templates.add('object/mobile/shared_dressed_commoner_tatooine_rodian_male_02.iff') + templates.add('object/mobile/shared_dressed_twi_female_scientist_01.iff') + templates.add('object/mobile/shared_warren_scientist_s01.iff') + + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('meleeHit') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('heroic_mos_espa_citizen', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/instances/tuskenking/mosespa/droidengineer.py b/scripts/mobiles/instances/tuskenking/mosespa/droidengineer.py new file mode 100644 index 00000000..43baf61f --- /dev/null +++ b/scripts/mobiles/instances/tuskenking/mosespa/droidengineer.py @@ -0,0 +1,40 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('heroic_tusken_droid_engineer') + mobileTemplate.setLevel(90) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(12) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(2) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(True) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("heroic mos espa citizien") + mobileTemplate.setAssistRange(12) + mobileTemplate.setStalker(True) + mobileTemplate.setOptionsBitmask(128) + + templates = Vector() + templates.add('object/mobile/shared_dressed_droidengineer_trainer_human_male_01.iff') + templates.add('object/mobile/shared_dressed_droidengineer_trainer_moncal_male_01.iff') + templates.add('object/mobile/shared_dressed_droidengineer_trainer_rodian_male_01.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/pistol/shared_pistol_scout_blaster.iff', 2, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedShot') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('heroic_tusken_droid_engineer', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/instances/tuskenking/mosespa/expert.py b/scripts/mobiles/instances/tuskenking/mosespa/expert.py new file mode 100644 index 00000000..d13b4996 --- /dev/null +++ b/scripts/mobiles/instances/tuskenking/mosespa/expert.py @@ -0,0 +1,40 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('heroic_tusken_mos_espa_expert') + mobileTemplate.setLevel(90) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(12) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(2) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(True) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("heroic mos espa citizien") + mobileTemplate.setAssistRange(12) + mobileTemplate.setStalker(True) + mobileTemplate.setOptionsBitmask(128) + + templates = Vector() + templates.add('object/mobile/shared_dressed_twi_female_scientist_01.iff') + templates.add('object/mobile/shared_warren_research_scientist.iff') + templates.add('object/mobile/shared_warren_scientist_s03.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/pistol/shared_pistol_scout_blaster.iff', 2, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedShot') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('heroic_tusken_mos_espa_expert', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/instances/tuskenking/mosespa/kav_goldor.py b/scripts/mobiles/instances/tuskenking/mosespa/kav_goldor.py new file mode 100644 index 00000000..4905caf3 --- /dev/null +++ b/scripts/mobiles/instances/tuskenking/mosespa/kav_goldor.py @@ -0,0 +1,38 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('heroic_tusken_kav_goldor') + mobileTemplate.setLevel(90) + mobileTemplate.setDifficulty(2) + mobileTemplate.setAttackRange(12) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(2) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(True) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("heroic mos espa citizien") + mobileTemplate.setAssistRange(12) + mobileTemplate.setStalker(True) + mobileTemplate.setOptionsBitmask(128) + + templates = Vector() + templates.add('object/mobile/shared_heroic_tusken_kav_golder.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/pistol/shared_pistol_scout_blaster.iff', 2, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedShot') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('heroic_kav_golder', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/instances/tuskenking/mosespa/medic.py b/scripts/mobiles/instances/tuskenking/mosespa/medic.py new file mode 100644 index 00000000..5891df3a --- /dev/null +++ b/scripts/mobiles/instances/tuskenking/mosespa/medic.py @@ -0,0 +1,40 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('heroic_tusken_mos_espa_medic') + mobileTemplate.setLevel(90) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(12) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(2) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(True) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("heroic mos espa citizien") + mobileTemplate.setAssistRange(12) + mobileTemplate.setStalker(True) + mobileTemplate.setOptionsBitmask(128) + + templates = Vector() + templates.add('object/mobile/shared_dressed_medic_trainer_03.iff') + templates.add('object/mobile/shared_dressed_medic_trainer_02.iff') + templates.add('object/mobile/shared_dressed_medic_trainer_01.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/pistol/shared_pistol_scout_blaster.iff', 2, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedShot') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('heroic_tusken_mos_espa_medic', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/instances/tuskenking/mosespa/mercanary.py b/scripts/mobiles/instances/tuskenking/mosespa/mercanary.py new file mode 100644 index 00000000..7cfbf893 --- /dev/null +++ b/scripts/mobiles/instances/tuskenking/mosespa/mercanary.py @@ -0,0 +1,38 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('heroic_tusken_mos_espa_mercenary') + mobileTemplate.setLevel(90) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(12) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(2) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(True) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("heroic mos espa citizien") + mobileTemplate.setAssistRange(12) + mobileTemplate.setStalker(True) + mobileTemplate.setOptionsBitmask(128) + + templates = Vector() + templates.add('object/mobile/shared_dressed_borvos_mercenary.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/pistol/shared_pistol_scout_blaster.iff', 2, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedShot') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('heroic_tusken_mos_espa_mercenary', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/instances/tuskenking/mosespa/militia.py b/scripts/mobiles/instances/tuskenking/mosespa/militia.py new file mode 100644 index 00000000..c2091ec1 --- /dev/null +++ b/scripts/mobiles/instances/tuskenking/mosespa/militia.py @@ -0,0 +1,39 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('heroic_tusken_mos_espa_militia') + mobileTemplate.setLevel(90) + mobileTemplate.setDifficulty(1) + mobileTemplate.setAttackRange(12) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(2) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(True) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("heroic mos espa citizien") + mobileTemplate.setAssistRange(12) + mobileTemplate.setStalker(True) + mobileTemplate.setOptionsBitmask(128) + + templates = Vector() + templates.add('object/mobile/shared_dressed_tatooine_militiaman.iff') + + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/pistol/shared_pistol_scout_blaster.iff', 2, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedShot') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('heroic_tusken_mos_espa_militia', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/instances/tuskenking/mosespa/mos_eisley_police_officer.py b/scripts/mobiles/instances/tuskenking/mosespa/mos_eisley_police_officer.py new file mode 100644 index 00000000..a3bd2b8c --- /dev/null +++ b/scripts/mobiles/instances/tuskenking/mosespa/mos_eisley_police_officer.py @@ -0,0 +1,38 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('heroic_tusken_mos_eisley_police_officer') + mobileTemplate.setLevel(90) + mobileTemplate.setDifficulty(1) + mobileTemplate.setAttackRange(12) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(2) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(True) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("heroic mos espa citizien") + mobileTemplate.setAssistRange(12) + mobileTemplate.setStalker(True) + mobileTemplate.setOptionsBitmask(128) + + templates = Vector() + templates.add('object/mobile/shared_dressed_tatooine_mos_eisley_police_officer.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/pistol/shared_pistol_scout_blaster.iff', 2, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedShot') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('heroic_mos_eisley_police_officer', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/instances/tuskenking/mosespa/mos_espa_police_officer.py b/scripts/mobiles/instances/tuskenking/mosespa/mos_espa_police_officer.py new file mode 100644 index 00000000..7f096ee2 --- /dev/null +++ b/scripts/mobiles/instances/tuskenking/mosespa/mos_espa_police_officer.py @@ -0,0 +1,38 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('heroic_tusken_mos_espa_police_officer') + mobileTemplate.setLevel(90) + mobileTemplate.setDifficulty(1) + mobileTemplate.setAttackRange(12) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(2) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(True) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("heroic mos espa citizien") + mobileTemplate.setAssistRange(12) + mobileTemplate.setStalker(True) + mobileTemplate.setOptionsBitmask(128) + + templates = Vector() + templates.add('object/mobile/shared_dressed_tatooine_mos_eisley_police_officer.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/pistol/shared_pistol_scout_blaster.iff', 2, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedShot') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('heroic_mos_espa_police_officer', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/instances/tuskenking/mosespa/mse_droid.py b/scripts/mobiles/instances/tuskenking/mosespa/mse_droid.py new file mode 100644 index 00000000..fc09ce71 --- /dev/null +++ b/scripts/mobiles/instances/tuskenking/mosespa/mse_droid.py @@ -0,0 +1,39 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('heroic_tusken_mse_droid') + mobileTemplate.setLevel(90) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(12) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(True) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("heroic mos espa citizien") + mobileTemplate.setAssistRange(12) + mobileTemplate.setStalker(True) + mobileTemplate.setOptionsBitmask(128) + + templates = Vector() + templates.add('object/mobile/shared_mouse_droid.iff') + + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('meleeHit') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('heroic_tusken_mse_droid', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/instances/tuskenking/mosespa/nova_trooper.py b/scripts/mobiles/instances/tuskenking/mosespa/nova_trooper.py new file mode 100644 index 00000000..eface2ad --- /dev/null +++ b/scripts/mobiles/instances/tuskenking/mosespa/nova_trooper.py @@ -0,0 +1,38 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('heroic_tusken_nova_trooper') + mobileTemplate.setLevel(90) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(12) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(1) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(True) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("heroic mos espa citizien") + mobileTemplate.setAssistRange(12) + mobileTemplate.setStalker(True) + mobileTemplate.setOptionsBitmask(128) + + templates = Vector() + templates.add('object/mobile/shared_dark_trooper.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/carbine/shared_carbine_bounty_ee3.iff', 1, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedShot') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('heroic_tusken_nova_trooper', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/instances/tuskenking/mosespa/pilot.py b/scripts/mobiles/instances/tuskenking/mosespa/pilot.py new file mode 100644 index 00000000..9d239188 --- /dev/null +++ b/scripts/mobiles/instances/tuskenking/mosespa/pilot.py @@ -0,0 +1,43 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('heroic_tusken_flight_crew') + mobileTemplate.setLevel(90) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(12) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(2) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(True) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("heroic mos espa citizien") + mobileTemplate.setAssistRange(12) + mobileTemplate.setStalker(True) + mobileTemplate.setOptionsBitmask(128) + + templates = Vector() + templates.add('object/mobile/shared_miner_pilot.iff') + templates.add('object/mobile/shared_space_newbie_generic_pilot_male_01.iff') + templates.add('object/mobile/shared_dressed_royal_pilot_human_male_01.iff') + templates.add('object/mobile/shared_dressed_royal_pilot_human_female_01.iff') + templates.add('object/mobile/shared_dressed_bth_spynet_pilot_f_01.iff') + templates.add('object/mobile/shared_dressed_bth_spynet_pilot_m_02.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/pistol/shared_pistol_scout_blaster.iff', 2, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedShot') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('heroic_tusken_flight_crew', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/instances/tuskenking/mosespa/pit_droid.py b/scripts/mobiles/instances/tuskenking/mosespa/pit_droid.py new file mode 100644 index 00000000..0ae25ecd --- /dev/null +++ b/scripts/mobiles/instances/tuskenking/mosespa/pit_droid.py @@ -0,0 +1,39 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('heroic_tusken_pit_droid') + mobileTemplate.setLevel(90) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(12) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(True) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("heroic mos espa citizien") + mobileTemplate.setAssistRange(12) + mobileTemplate.setStalker(True) + mobileTemplate.setOptionsBitmask(128) + + templates = Vector() + templates.add('object/mobile/shared_pit_droid.iff') + + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('meleeHit') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('heroic_tusken_pit_droid', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/instances/tuskenking/mosespa/power_droid.py b/scripts/mobiles/instances/tuskenking/mosespa/power_droid.py new file mode 100644 index 00000000..e7ca0a16 --- /dev/null +++ b/scripts/mobiles/instances/tuskenking/mosespa/power_droid.py @@ -0,0 +1,39 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('heroic_tusken_power_droid') + mobileTemplate.setLevel(90) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(12) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(True) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("heroic mos espa citizien") + mobileTemplate.setAssistRange(12) + mobileTemplate.setStalker(True) + mobileTemplate.setOptionsBitmask(128) + + templates = Vector() + templates.add('object/mobile/shared_eg6_power_droid.iff') + + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('meleeHit') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('heroic_tusken_power_droid', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/instances/tuskenking/mosespa/scholar.py b/scripts/mobiles/instances/tuskenking/mosespa/scholar.py new file mode 100644 index 00000000..ea942f78 --- /dev/null +++ b/scripts/mobiles/instances/tuskenking/mosespa/scholar.py @@ -0,0 +1,39 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('heroic_tusken_scholar') + mobileTemplate.setLevel(90) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(12) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(True) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("heroic mos espa citizien") + mobileTemplate.setAssistRange(12) + mobileTemplate.setStalker(True) + mobileTemplate.setOptionsBitmask(128) + + templates = Vector() + templates.add('object/mobile/shared_dressed_scholar_szingo.iff') + + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('meleeHit') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('heroic_tusken_scholar', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/instances/tuskenking/prequest/tusken_relic_fanatic.py b/scripts/mobiles/instances/tuskenking/prequest/tusken_relic_fanatic.py new file mode 100644 index 00000000..460624e9 --- /dev/null +++ b/scripts/mobiles/instances/tuskenking/prequest/tusken_relic_fanatic.py @@ -0,0 +1,41 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('feeder_tusken_patrol') + mobileTemplate.setLevel(85) + mobileTemplate.setDifficulty(1) + mobileTemplate.setAttackRange(12) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(0) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(True) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("heroic tusken") + mobileTemplate.setAssistRange(12) + mobileTemplate.setStalker(True) + mobileTemplate.setOptionsBitmask(192) + + templates = Vector() + templates.add('object/mobile/shared_tusken_raider.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/rifle/shared_rifle_tusken.iff', 0, 1.0) + weapontemplate1 = WeaponTemplate('object/weapon/melee/baton/shared_baton_gaderiffi_elite.iff', 4, 1.0) + weaponTemplates.add(weapontemplate) + weaponTemplates.add(weapontemplate1) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedShotrifle') + attacks.add('meleeHit') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('heroic_tusken_relic_fanatic', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/instances/tuskenking/prequest/tusken_relic_guard.py b/scripts/mobiles/instances/tuskenking/prequest/tusken_relic_guard.py new file mode 100644 index 00000000..715e3af1 --- /dev/null +++ b/scripts/mobiles/instances/tuskenking/prequest/tusken_relic_guard.py @@ -0,0 +1,41 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('feeder_tusken_guard') + mobileTemplate.setLevel(85) + mobileTemplate.setDifficulty(1) + mobileTemplate.setAttackRange(12) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(0) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(True) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("heroic tusken") + mobileTemplate.setAssistRange(12) + mobileTemplate.setStalker(True) + mobileTemplate.setOptionsBitmask(192) + + templates = Vector() + templates.add('object/mobile/shared_tusken_raider.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/rifle/shared_rifle_tusken.iff', 0, 1.0) + weapontemplate1 = WeaponTemplate('object/weapon/melee/baton/shared_baton_gaderiffi_elite.iff', 4, 1.0) + weaponTemplates.add(weapontemplate) + weaponTemplates.add(weapontemplate1) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedShotrifle') + attacks.add('meleeHit') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('heroic_tusken_relic_guard', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/instances/tuskenking/prequest/tusken_relic_worshiper.py b/scripts/mobiles/instances/tuskenking/prequest/tusken_relic_worshiper.py new file mode 100644 index 00000000..080e4929 --- /dev/null +++ b/scripts/mobiles/instances/tuskenking/prequest/tusken_relic_worshiper.py @@ -0,0 +1,41 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('feeder_tusken_raider') + mobileTemplate.setLevel(85) + mobileTemplate.setDifficulty(1) + mobileTemplate.setAttackRange(12) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(0) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(True) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("heroic tusken") + mobileTemplate.setAssistRange(12) + mobileTemplate.setStalker(True) + mobileTemplate.setOptionsBitmask(192) + + templates = Vector() + templates.add('object/mobile/shared_tusken_raider.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/rifle/shared_rifle_tusken.iff', 0, 1.0) + weapontemplate1 = WeaponTemplate('object/weapon/melee/baton/shared_baton_gaderiffi_elite.iff', 4, 1.0) + weaponTemplates.add(weapontemplate) + weaponTemplates.add(weapontemplate1) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedShotrifle') + attacks.add('meleeHit') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('heroic_tusken_relic_worshiper', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/instances/tuskenking/tusken/tusken_bantha.py b/scripts/mobiles/instances/tuskenking/tusken/tusken_bantha.py new file mode 100644 index 00000000..1b2c745a --- /dev/null +++ b/scripts/mobiles/instances/tuskenking/tusken/tusken_bantha.py @@ -0,0 +1,38 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('heroic_tusken_bantha') + mobileTemplate.setLevel(90) + mobileTemplate.setDifficulty(1) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(True) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("heroic tusken") + mobileTemplate.setAssistRange(12) + mobileTemplate.setStalker(True) + mobileTemplate.setOptionsBitmask(192) + + templates = Vector() + templates.add('object/mobile/shared_bantha_hue.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('heroic_tusken_bantha', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/instances/tuskenking/tusken/tusken_berserker.py b/scripts/mobiles/instances/tuskenking/tusken/tusken_berserker.py new file mode 100644 index 00000000..ffe982b9 --- /dev/null +++ b/scripts/mobiles/instances/tuskenking/tusken/tusken_berserker.py @@ -0,0 +1,41 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('heroic_tusken_berserker') + mobileTemplate.setLevel(90) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(12) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(0) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(True) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("heroic tusken") + mobileTemplate.setAssistRange(12) + mobileTemplate.setStalker(True) + mobileTemplate.setOptionsBitmask(192) + + templates = Vector() + templates.add('object/mobile/shared_tusken_raider.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/rifle/shared_rifle_tusken.iff', 0, 1.0) + weapontemplate1 = WeaponTemplate('object/weapon/melee/baton/shared_baton_gaderiffi_elite.iff', 4, 1.0) + weaponTemplates.add(weapontemplate) + weaponTemplates.add(weapontemplate1) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedShotrifle') + attacks.add('meleeHit') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('heroic_tusken_berserker', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/instances/tuskenking/tusken/tusken_champion.py b/scripts/mobiles/instances/tuskenking/tusken/tusken_champion.py new file mode 100644 index 00000000..cd636e03 --- /dev/null +++ b/scripts/mobiles/instances/tuskenking/tusken/tusken_champion.py @@ -0,0 +1,41 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('heroic_tusken_champion') + mobileTemplate.setLevel(90) + mobileTemplate.setDifficulty(1) + mobileTemplate.setAttackRange(12) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(0) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(True) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("heroic tusken") + mobileTemplate.setAssistRange(12) + mobileTemplate.setStalker(True) + mobileTemplate.setOptionsBitmask(192) + + templates = Vector() + templates.add('object/mobile/shared_tusken_raider.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/rifle/shared_rifle_tusken.iff', 0, 1.0) + weapontemplate1 = WeaponTemplate('object/weapon/melee/baton/shared_baton_gaderiffi_elite.iff', 4, 1.0) + weaponTemplates.add(weapontemplate) + weaponTemplates.add(weapontemplate1) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedShotrifle') + attacks.add('meleeHit') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('heroic_tusken_champion', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/instances/tuskenking/tusken/tusken_flesh_hunter.py b/scripts/mobiles/instances/tuskenking/tusken/tusken_flesh_hunter.py new file mode 100644 index 00000000..816d3715 --- /dev/null +++ b/scripts/mobiles/instances/tuskenking/tusken/tusken_flesh_hunter.py @@ -0,0 +1,41 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('heroic_tusken_flesh_hunter') + mobileTemplate.setLevel(91) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(12) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(0) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(True) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("heroic tusken") + mobileTemplate.setAssistRange(12) + mobileTemplate.setStalker(True) + mobileTemplate.setOptionsBitmask(192) + + templates = Vector() + templates.add('object/mobile/shared_tusken_raider.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/rifle/shared_rifle_tusken.iff', 0, 1.0) + weapontemplate1 = WeaponTemplate('object/weapon/melee/baton/shared_baton_gaderiffi_elite.iff', 4, 1.0) + weaponTemplates.add(weapontemplate) + weaponTemplates.add(weapontemplate1) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedShotrifle') + attacks.add('meleeHit') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('heroic_tusken_flesh_hunter', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/instances/tuskenking/tusken/tusken_honor_guard.py b/scripts/mobiles/instances/tuskenking/tusken/tusken_honor_guard.py new file mode 100644 index 00000000..f926ede6 --- /dev/null +++ b/scripts/mobiles/instances/tuskenking/tusken/tusken_honor_guard.py @@ -0,0 +1,41 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('heroic_tusken_honor_guard') + mobileTemplate.setLevel(90) + mobileTemplate.setDifficulty(2) + mobileTemplate.setAttackRange(12) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(0) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(True) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("heroic tusken") + mobileTemplate.setAssistRange(12) + mobileTemplate.setStalker(True) + mobileTemplate.setOptionsBitmask(192) + + templates = Vector() + templates.add('object/mobile/shared_tusken_raider.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/rifle/shared_rifle_tusken.iff', 0, 1.0) + weapontemplate1 = WeaponTemplate('object/weapon/melee/baton/shared_baton_gaderiffi_elite.iff', 4, 1.0) + weaponTemplates.add(weapontemplate) + weaponTemplates.add(weapontemplate1) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedShotrifle') + attacks.add('meleeHit') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('heroic_tusken_honor_guard', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/instances/tuskenking/tusken/tusken_king.py b/scripts/mobiles/instances/tuskenking/tusken/tusken_king.py new file mode 100644 index 00000000..67c0cad3 --- /dev/null +++ b/scripts/mobiles/instances/tuskenking/tusken/tusken_king.py @@ -0,0 +1,41 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('heroic_tusken_king') + mobileTemplate.setLevel(95) + mobileTemplate.setDifficulty(2) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(0) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(True) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("heroic tusken") + mobileTemplate.setAssistRange(12) + mobileTemplate.setStalker(True) + mobileTemplate.setOptionsBitmask(192) + + templates = Vector() + templates.add('object/mobile/shared_tusken_king.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/rifle/shared_rifle_tusken.iff', 0, 1.0) + weapontemplate1 = WeaponTemplate('object/weapon/melee/baton/shared_baton_gaderiffi_elite.iff', 4, 1.0) + weaponTemplates.add(weapontemplate) + weaponTemplates.add(weapontemplate1) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedShotrifle') + attacks.add('meleeHit') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('heroic_tusken_king', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/instances/tuskenking/tusken/tusken_massiff.py b/scripts/mobiles/instances/tuskenking/tusken/tusken_massiff.py new file mode 100644 index 00000000..68ef9fd9 --- /dev/null +++ b/scripts/mobiles/instances/tuskenking/tusken/tusken_massiff.py @@ -0,0 +1,40 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('heroic_tusken_massiff') + mobileTemplate.setLevel(90) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(12) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(0) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(True) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("heroic tusken") + mobileTemplate.setAssistRange(12) + mobileTemplate.setStalker(True) + mobileTemplate.setOptionsBitmask(192) + + templates = Vector() + templates.add('object/mobile/shared_tusken_massif.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/rifle/shared_rifle_tusken.iff', 0, 1.0) + weapontemplate1 = WeaponTemplate('object/weapon/melee/baton/shared_baton_gaderiffi_elite.iff', 4, 1.0) + weaponTemplates.add(weapontemplate) + weaponTemplates.add(weapontemplate1) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('heroic_tusken_massiff', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/instances/tuskenking/tusken/tusken_pack_master.py b/scripts/mobiles/instances/tuskenking/tusken/tusken_pack_master.py new file mode 100644 index 00000000..7890ceb4 --- /dev/null +++ b/scripts/mobiles/instances/tuskenking/tusken/tusken_pack_master.py @@ -0,0 +1,42 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('heroic_tusken_pack_master') + mobileTemplate.setLevel(90) + mobileTemplate.setDifficulty(1) + mobileTemplate.setAttackRange(12) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(0) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(True) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("heroic tusken") + mobileTemplate.setAssistRange(12) + mobileTemplate.setStalker(True) + mobileTemplate.setOptionsBitmask(192) + + templates = Vector() + templates.add('object/mobile/shared_tusken_raider.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/rifle/shared_rifle_tusken.iff', 0, 1.0) + weapontemplate1 = WeaponTemplate('object/weapon/melee/baton/shared_baton_gaderiffi_elite.iff', 4, 1.0) + weaponTemplates.add(weapontemplate) + weaponTemplates.add(weapontemplate1) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedShotrifle') + attacks.add('meleeHit') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('heroic_tusken_pack_master', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/instances/tuskenking/tusken/tusken_raid_leader.py b/scripts/mobiles/instances/tuskenking/tusken/tusken_raid_leader.py new file mode 100644 index 00000000..a01d688f --- /dev/null +++ b/scripts/mobiles/instances/tuskenking/tusken/tusken_raid_leader.py @@ -0,0 +1,41 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('heroic_tusken_raid_leader') + mobileTemplate.setLevel(90) + mobileTemplate.setDifficulty(2) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(4) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(True) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("heroic tusken") + mobileTemplate.setAssistRange(12) + mobileTemplate.setStalker(True) + mobileTemplate.setOptionsBitmask(192) + + templates = Vector() + templates.add('object/mobile/shared_tusken_raider.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/rifle/shared_rifle_tusken.iff', 0, 1.0) + weapontemplate1 = WeaponTemplate('object/weapon/melee/baton/shared_baton_gaderiffi_elite.iff', 4, 1.0) + weaponTemplates.add(weapontemplate) + weaponTemplates.add(weapontemplate1) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedShotrifle') + attacks.add('meleeHit') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('heroic_tusken_raid_leader', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/instances/tuskenking/tusken/tusken_raider.py b/scripts/mobiles/instances/tuskenking/tusken/tusken_raider.py new file mode 100644 index 00000000..754a0820 --- /dev/null +++ b/scripts/mobiles/instances/tuskenking/tusken/tusken_raider.py @@ -0,0 +1,41 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('heroic_tusken_raider') + mobileTemplate.setLevel(90) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(12) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(0) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(True) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("heroic tusken") + mobileTemplate.setAssistRange(12) + mobileTemplate.setStalker(True) + mobileTemplate.setOptionsBitmask(192) + + templates = Vector() + templates.add('object/mobile/shared_tusken_raider.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/rifle/shared_rifle_tusken.iff', 0, 1.0) + weapontemplate1 = WeaponTemplate('object/weapon/melee/baton/shared_baton_gaderiffi_elite.iff', 4, 1.0) + weaponTemplates.add(weapontemplate) + weaponTemplates.add(weapontemplate1) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedShotrifle') + attacks.add('meleeHit') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('heroic_tusken_raider', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/instances/tuskenking/tusken/tusken_savage.py b/scripts/mobiles/instances/tuskenking/tusken/tusken_savage.py new file mode 100644 index 00000000..3986bfa7 --- /dev/null +++ b/scripts/mobiles/instances/tuskenking/tusken/tusken_savage.py @@ -0,0 +1,41 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('heroic_tusken_savage') + mobileTemplate.setLevel(90) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(12) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(0) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(True) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("heroic tusken") + mobileTemplate.setAssistRange(12) + mobileTemplate.setStalker(True) + mobileTemplate.setOptionsBitmask(192) + + templates = Vector() + templates.add('object/mobile/shared_tusken_raider.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/rifle/shared_rifle_tusken.iff', 0, 1.0) + weapontemplate1 = WeaponTemplate('object/weapon/melee/baton/shared_baton_gaderiffi_elite.iff', 4, 1.0) + weaponTemplates.add(weapontemplate) + weaponTemplates.add(weapontemplate1) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedShotrifle') + attacks.add('meleeHit') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('heroic_tusken_savage', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/instances/tuskenking/tusken/tusken_sniper.py b/scripts/mobiles/instances/tuskenking/tusken/tusken_sniper.py new file mode 100644 index 00000000..c523749b --- /dev/null +++ b/scripts/mobiles/instances/tuskenking/tusken/tusken_sniper.py @@ -0,0 +1,41 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('heroic_tusken_sniper') + mobileTemplate.setLevel(90) + mobileTemplate.setDifficulty(1) + mobileTemplate.setAttackRange(12) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(0) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(True) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("heroic tusken") + mobileTemplate.setAssistRange(12) + mobileTemplate.setStalker(True) + mobileTemplate.setOptionsBitmask(192) + + templates = Vector() + templates.add('object/mobile/shared_tusken_raider.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/rifle/shared_rifle_tusken.iff', 0, 1.0) + weapontemplate1 = WeaponTemplate('object/weapon/melee/baton/shared_baton_gaderiffi_elite.iff', 4, 1.0) + weaponTemplates.add(weapontemplate) + weaponTemplates.add(weapontemplate1) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedShotrifle') + attacks.add('meleeHit') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('heroic_tusken_sniper', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/instances/tuskenking/tusken/tusken_warlord.py b/scripts/mobiles/instances/tuskenking/tusken/tusken_warlord.py new file mode 100644 index 00000000..a87a34e3 --- /dev/null +++ b/scripts/mobiles/instances/tuskenking/tusken/tusken_warlord.py @@ -0,0 +1,41 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('heroic_tusken_warlord') + mobileTemplate.setLevel(90) + mobileTemplate.setDifficulty(2) + mobileTemplate.setAttackRange(12) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(0) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(True) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("heroic tusken") + mobileTemplate.setAssistRange(12) + mobileTemplate.setStalker(True) + mobileTemplate.setOptionsBitmask(192) + + templates = Vector() + templates.add('object/mobile/shared_tusken_raider.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/rifle/shared_rifle_tusken.iff', 0, 1.0) + weapontemplate1 = WeaponTemplate('object/weapon/melee/baton/shared_baton_gaderiffi_elite.iff', 4, 1.0) + weaponTemplates.add(weapontemplate) + weaponTemplates.add(weapontemplate1) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedShotrifle') + attacks.add('meleeHit') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('heroic_tusken_warlord', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/instances/tuskenking/tusken/tusken_warmaster.py b/scripts/mobiles/instances/tuskenking/tusken/tusken_warmaster.py new file mode 100644 index 00000000..6549b6b6 --- /dev/null +++ b/scripts/mobiles/instances/tuskenking/tusken/tusken_warmaster.py @@ -0,0 +1,41 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('heroic_tusken_war_master') + mobileTemplate.setLevel(90) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(12) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(0) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(True) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("heroic tusken") + mobileTemplate.setAssistRange(12) + mobileTemplate.setStalker(True) + mobileTemplate.setOptionsBitmask(192) + + templates = Vector() + templates.add('object/mobile/shared_tusken_raider.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/rifle/shared_rifle_tusken.iff', 0, 1.0) + weapontemplate1 = WeaponTemplate('object/weapon/melee/baton/shared_baton_gaderiffi_elite.iff', 4, 1.0) + weaponTemplates.add(weapontemplate) + weaponTemplates.add(weapontemplate1) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedShotrifle') + attacks.add('meleeHit') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('heroic_tusken_warmaster', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/instances/tuskenking/tusken/tusken_warrior.py b/scripts/mobiles/instances/tuskenking/tusken/tusken_warrior.py new file mode 100644 index 00000000..68b609b4 --- /dev/null +++ b/scripts/mobiles/instances/tuskenking/tusken/tusken_warrior.py @@ -0,0 +1,41 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('heroic_tusken_warrior') + mobileTemplate.setLevel(90) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(12) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(0) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(True) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("heroic tusken") + mobileTemplate.setAssistRange(12) + mobileTemplate.setStalker(True) + mobileTemplate.setOptionsBitmask(192) + + templates = Vector() + templates.add('object/mobile/shared_tusken_raider.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/rifle/shared_rifle_tusken.iff', 0, 1.0) + weapontemplate1 = WeaponTemplate('object/weapon/melee/baton/shared_baton_gaderiffi_elite.iff', 4, 1.0) + weaponTemplates.add(weapontemplate) + weaponTemplates.add(weapontemplate1) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedShotrifle') + attacks.add('meleeHit') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('heroic_tusken_warrior', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/kashyyyk/general_grievous.py b/scripts/mobiles/kashyyyk/general_grievous.py new file mode 100644 index 00000000..c6b18095 --- /dev/null +++ b/scripts/mobiles/kashyyyk/general_grievous.py @@ -0,0 +1,30 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('ep3_general_grievous') + mobileTemplate.setLevel(80) + mobileTemplate.setDifficulty(2) + mobileTemplate.setAttackRange(6) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(9) + + templates = Vector() + templates.add('object/mobile/ep3/shared_general_grievous.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/2h_sword/crafted_saber/shared_sword_lightsaber_two_handed_gen5.iff', 10, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('saberHit') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('general_grievous', mobileTemplate) + \ No newline at end of file diff --git a/scripts/mobiles/lairgroups/bol_lair_group_1.py b/scripts/mobiles/lairgroups/bol_lair_group_1.py new file mode 100644 index 00000000..0aff2d4d --- /dev/null +++ b/scripts/mobiles/lairgroups/bol_lair_group_1.py @@ -0,0 +1,11 @@ +# Spawn Group file created with PSWG Planetary Spawn Tool +import sys +from services.spawn import LairSpawnTemplate +from java.util import Vector + +def addLairGroup(core): + spawnTemplates = Vector() + spawnTemplate = LairSpawnTemplate(-1, 'dantooine_bol_lair_1', -1, -1) + spawnTemplates.add(spawnTemplate) + core.spawnService.addLairGroup('bol_lair_group_1', spawnTemplates) + return diff --git a/scripts/mobiles/lairgroups/dantooine_mining_area.py b/scripts/mobiles/lairgroups/dantooine_mining_area.py new file mode 100644 index 00000000..19cf6d7d --- /dev/null +++ b/scripts/mobiles/lairgroups/dantooine_mining_area.py @@ -0,0 +1,19 @@ +import sys +from services.spawn import LairSpawnTemplate +from java.util import Vector + +def addLairGroup(core): + spawnTemplate1 = LairSpawnTemplate(-1, 'dantooine_huurton_lair_1', -1, -1) + spawnTemplate2 = LairSpawnTemplate(-1, 'dantooine_huurton_lair_2', -1, -1) + spawnTemplate3 = LairSpawnTemplate(-1, 'dantooine_bol_lair_1', -1, -1) + spawnTemplate4 = LairSpawnTemplate(-1, 'dantooine_piket_lair_1',-1, -1) + spawnTemplate5 = LairSpawnTemplate(-1, 'dantooine_piket_longhorn_lair_1',-1, -1) + spawnTemplate6 = LairSpawnTemplate(-1, 'dantooine_quenker_lair_1', -1, -1) + spawnTemplates = Vector() + spawnTemplates.add(spawnTemplate1) + spawnTemplates.add(spawnTemplate2) + spawnTemplates.add(spawnTemplate3) + spawnTemplates.add(spawnTemplate4) + + core.spawnService.addLairGroup('dantooine_mining_area', spawnTemplates) + return \ No newline at end of file diff --git a/scripts/mobiles/lairgroups/dantooine_nw_lair_group_1.py b/scripts/mobiles/lairgroups/dantooine_nw_lair_group_1.py new file mode 100644 index 00000000..bb93ad97 --- /dev/null +++ b/scripts/mobiles/lairgroups/dantooine_nw_lair_group_1.py @@ -0,0 +1,13 @@ +# Spawn Group file created with PSWG Planetary Spawn Tool +import sys +from services.spawn import LairSpawnTemplate +from java.util import Vector + +def addLairGroup(core): + spawnTemplates = Vector() + spawnTemplate = LairSpawnTemplate(-1, 'dantooine_graul_mauler_lair_1', -1, -1) + spawnTemplates.add(spawnTemplate) + spawnTemplate = LairSpawnTemplate(-1, 'dantooine_voritor_lair_1', -1, -1) + spawnTemplates.add(spawnTemplate) + core.spawnService.addLairGroup('dantooine_nw_lair_group_1', spawnTemplates) + return diff --git a/scripts/mobiles/lairgroups/graul_lair_group_1.py b/scripts/mobiles/lairgroups/graul_lair_group_1.py new file mode 100644 index 00000000..6700ed59 --- /dev/null +++ b/scripts/mobiles/lairgroups/graul_lair_group_1.py @@ -0,0 +1,11 @@ +# Spawn Group file created with PSWG Planetary Spawn Tool +import sys +from services.spawn import LairSpawnTemplate +from java.util import Vector + +def addLairGroup(core): + spawnTemplates = Vector() + spawnTemplate = LairSpawnTemplate(-1, 'dantooine_graul_lair_1', -1, -1) + spawnTemplates.add(spawnTemplate) + core.spawnService.addLairGroup('graul_lair_group_1', spawnTemplates) + return diff --git a/scripts/mobiles/lairgroups/graul_mauler_lair_group_1.py b/scripts/mobiles/lairgroups/graul_mauler_lair_group_1.py new file mode 100644 index 00000000..11142ef1 --- /dev/null +++ b/scripts/mobiles/lairgroups/graul_mauler_lair_group_1.py @@ -0,0 +1,11 @@ +# Spawn Group file created with PSWG Planetary Spawn Tool +import sys +from services.spawn import LairSpawnTemplate +from java.util import Vector + +def addLairGroup(core): + spawnTemplates = Vector() + spawnTemplate = LairSpawnTemplate(-1, 'dantooine_graul_lair_1', -1, -1) + spawnTemplates.add(spawnTemplate) + core.spawnService.addLairGroup('graul_mauler_lair_group_1', spawnTemplates) + return diff --git a/scripts/mobiles/lairgroups/huurton_lair_group_1.py b/scripts/mobiles/lairgroups/huurton_lair_group_1.py new file mode 100644 index 00000000..662e23c1 --- /dev/null +++ b/scripts/mobiles/lairgroups/huurton_lair_group_1.py @@ -0,0 +1,11 @@ +# Spawn Group file created with PSWG Planetary Spawn Tool +import sys +from services.spawn import LairSpawnTemplate +from java.util import Vector + +def addLairGroup(core): + spawnTemplates = Vector() + spawnTemplate = LairSpawnTemplate(-1, 'dantooine_huurton_lair_1', -1, -1) + spawnTemplates.add(spawnTemplate) + core.spawnService.addLairGroup('huurton_lair_group_1', spawnTemplates) + return diff --git a/scripts/mobiles/lairgroups/mixed_lair_group_1.py b/scripts/mobiles/lairgroups/mixed_lair_group_1.py new file mode 100644 index 00000000..571b1f66 --- /dev/null +++ b/scripts/mobiles/lairgroups/mixed_lair_group_1.py @@ -0,0 +1,21 @@ +# Spawn Group file created with PSWG Planetary Spawn Tool +import sys +from services.spawn import LairSpawnTemplate +from java.util import Vector + +def addLairGroup(core): + spawnTemplates = Vector() + spawnTemplate = LairSpawnTemplate(-1, 'dantooine_huurton_lair_1', -1, -1) + spawnTemplates.add(spawnTemplate) + spawnTemplate = LairSpawnTemplate(-1, 'dantooine_huurton_lair_2', -1, -1) + spawnTemplates.add(spawnTemplate) + spawnTemplate = LairSpawnTemplate(-1, 'dantooine_bol_lair_1', -1, -1) + spawnTemplates.add(spawnTemplate) + spawnTemplate = LairSpawnTemplate(-1, 'dantooine_piket_lair_1', -1, -1) + spawnTemplates.add(spawnTemplate) + spawnTemplate = LairSpawnTemplate(-1, 'dantooine_piket_longhorn_lair_1', -1, -1) + spawnTemplates.add(spawnTemplate) + spawnTemplate = LairSpawnTemplate(-1, 'dantooine_quenker_lair_1', -1, -1) + spawnTemplates.add(spawnTemplate) + core.spawnService.addLairGroup('mixed_lair_group_1', spawnTemplates) + return diff --git a/scripts/mobiles/lairgroups/naboo_starter.py b/scripts/mobiles/lairgroups/naboo_starter.py new file mode 100644 index 00000000..a046b63e --- /dev/null +++ b/scripts/mobiles/lairgroups/naboo_starter.py @@ -0,0 +1,11 @@ +import sys +from services.spawn import LairSpawnTemplate +from java.util import Vector + +def addLairGroup(core): + spawnTemplate1 = LairSpawnTemplate(-1, 'naboo_chuba_lair_neutral_small', 5, 20) + + spawnTemplates = Vector() + spawnTemplates.add(spawnTemplate1) + + core.spawnService.addLairGroup('naboo_starter', spawnTemplates) \ No newline at end of file diff --git a/scripts/mobiles/lairgroups/piket_longhorn_lair_group_1.py b/scripts/mobiles/lairgroups/piket_longhorn_lair_group_1.py new file mode 100644 index 00000000..d63ad6e7 --- /dev/null +++ b/scripts/mobiles/lairgroups/piket_longhorn_lair_group_1.py @@ -0,0 +1,11 @@ +# Spawn Group file created with PSWG Planetary Spawn Tool +import sys +from services.spawn import LairSpawnTemplate +from java.util import Vector + +def addLairGroup(core): + spawnTemplates = Vector() + spawnTemplate = LairSpawnTemplate(-1, 'dantooine_piket_longhorn_lair_1', -1, -1) + spawnTemplates.add(spawnTemplate) + core.spawnService.addLairGroup('piket_longhorn_lair_group_1', spawnTemplates) + return diff --git a/scripts/mobiles/lairgroups/quenker_lair_group_1.py b/scripts/mobiles/lairgroups/quenker_lair_group_1.py new file mode 100644 index 00000000..ba1bf3e8 --- /dev/null +++ b/scripts/mobiles/lairgroups/quenker_lair_group_1.py @@ -0,0 +1,11 @@ +# Spawn Group file created with PSWG Planetary Spawn Tool +import sys +from services.spawn import LairSpawnTemplate +from java.util import Vector + +def addLairGroup(core): + spawnTemplates = Vector() + spawnTemplate = LairSpawnTemplate(-1, 'dantooine_quenker_lair_1', -1, -1) + spawnTemplates.add(spawnTemplate) + core.spawnService.addLairGroup('quenker_lair_group_1', spawnTemplates) + return diff --git a/scripts/mobiles/lairgroups/tatooine_starter.py b/scripts/mobiles/lairgroups/tatooine_starter.py new file mode 100644 index 00000000..55016760 --- /dev/null +++ b/scripts/mobiles/lairgroups/tatooine_starter.py @@ -0,0 +1,17 @@ +import sys +from services.spawn import LairSpawnTemplate +from java.util import Vector + +def addLairGroup(core): + spawnTemplate1 = LairSpawnTemplate(-1, 'tatooine_kreetle_lair_neutral_small', 5, 20) + spawnTemplate2 = LairSpawnTemplate(-1, 'tatooine_womprat_lair_neutral_small', 5, 15) + spawnTemplate3 = LairSpawnTemplate(-1, 'tatooine_rill_lair_neutral_small', 5, 15) + spawnTemplate4 = LairSpawnTemplate(-1, 'tatooine_worrt_lair_neutral_small', 5, 15) + spawnTemplates = Vector() + spawnTemplates.add(spawnTemplate1) + spawnTemplates.add(spawnTemplate2) + spawnTemplates.add(spawnTemplate3) + spawnTemplates.add(spawnTemplate4) + + core.spawnService.addLairGroup('tatooine_starter', spawnTemplates) + return \ No newline at end of file diff --git a/scripts/mobiles/lairgroups/thune_lair_group_1.py b/scripts/mobiles/lairgroups/thune_lair_group_1.py new file mode 100644 index 00000000..4d0b1767 --- /dev/null +++ b/scripts/mobiles/lairgroups/thune_lair_group_1.py @@ -0,0 +1,11 @@ +# Spawn Group file created with PSWG Planetary Spawn Tool +import sys +from services.spawn import LairSpawnTemplate +from java.util import Vector + +def addLairGroup(core): + spawnTemplates = Vector() + spawnTemplate = LairSpawnTemplate(-1, 'dantooine_thune_lair_1', -1, -1) + spawnTemplates.add(spawnTemplate) + core.spawnService.addLairGroup('thune_lair_group_1', spawnTemplates) + return diff --git a/scripts/mobiles/lairgroups/voritor_lair_group_1.py b/scripts/mobiles/lairgroups/voritor_lair_group_1.py new file mode 100644 index 00000000..028ceab1 --- /dev/null +++ b/scripts/mobiles/lairgroups/voritor_lair_group_1.py @@ -0,0 +1,11 @@ +# Spawn Group file created with PSWG Planetary Spawn Tool +import sys +from services.spawn import LairSpawnTemplate +from java.util import Vector + +def addLairGroup(core): + spawnTemplates = Vector() + spawnTemplate = LairSpawnTemplate(-1, 'dantooine_voritor_lair_1', -1, -1) + spawnTemplates.add(spawnTemplate) + core.spawnService.addLairGroup('voritor_lair_group_1', spawnTemplates) + return diff --git a/scripts/mobiles/lairgroups/voritor_lair_group_2.py b/scripts/mobiles/lairgroups/voritor_lair_group_2.py new file mode 100644 index 00000000..ece717a5 --- /dev/null +++ b/scripts/mobiles/lairgroups/voritor_lair_group_2.py @@ -0,0 +1,11 @@ +# Spawn Group file created with PSWG Planetary Spawn Tool +import sys +from services.spawn import LairSpawnTemplate +from java.util import Vector + +def addLairGroup(core): + spawnTemplates = Vector() + spawnTemplate = LairSpawnTemplate(-1, 'dantooine_voritor_lair_2', -1, -1) + spawnTemplates.add(spawnTemplate) + core.spawnService.addLairGroup('voritor_lair_group_2', spawnTemplates) + return diff --git a/scripts/mobiles/lairs/dantooine_bol_lair_1.py b/scripts/mobiles/lairs/dantooine_bol_lair_1.py new file mode 100644 index 00000000..953c80f5 --- /dev/null +++ b/scripts/mobiles/lairs/dantooine_bol_lair_1.py @@ -0,0 +1,9 @@ +import sys +from java.util import Vector + +def addTemplate(core): + mobileTemplates = Vector() + mobileTemplates.add('lesser_plains_bol') + mobileTemplates.add('seething_bol_crusher') + mobileTemplates.add('swift_charging_bol') + core.spawnService.addLairTemplate('dantooine_bol_lair_1', mobileTemplates, 15, 'object/tangible/lair/base/shared_poi_all_lair_brambles_small.iff') \ No newline at end of file diff --git a/scripts/mobiles/lairs/dantooine_graul_lair_1.py b/scripts/mobiles/lairs/dantooine_graul_lair_1.py new file mode 100644 index 00000000..953c80f5 --- /dev/null +++ b/scripts/mobiles/lairs/dantooine_graul_lair_1.py @@ -0,0 +1,9 @@ +import sys +from java.util import Vector + +def addTemplate(core): + mobileTemplates = Vector() + mobileTemplates.add('lesser_plains_bol') + mobileTemplates.add('seething_bol_crusher') + mobileTemplates.add('swift_charging_bol') + core.spawnService.addLairTemplate('dantooine_bol_lair_1', mobileTemplates, 15, 'object/tangible/lair/base/shared_poi_all_lair_brambles_small.iff') \ No newline at end of file diff --git a/scripts/mobiles/lairs/dantooine_graul_mauler_lair_1.py b/scripts/mobiles/lairs/dantooine_graul_mauler_lair_1.py new file mode 100644 index 00000000..dfad5707 --- /dev/null +++ b/scripts/mobiles/lairs/dantooine_graul_mauler_lair_1.py @@ -0,0 +1,5 @@ +import sys +from java.util import Vector + +def addTemplate(core): + core.spawnService.addLairTemplate('dantooine_graul_mauler_lair_1', 'graul_mauler', 15, 'object/tangible/lair/base/shared_poi_all_lair_brambles_small.iff') \ No newline at end of file diff --git a/scripts/mobiles/lairs/dantooine_huurton_lair_1.py b/scripts/mobiles/lairs/dantooine_huurton_lair_1.py new file mode 100644 index 00000000..68fe6e33 --- /dev/null +++ b/scripts/mobiles/lairs/dantooine_huurton_lair_1.py @@ -0,0 +1,9 @@ +import sys +from java.util import Vector + +def addTemplate(core): + mobileTemplates = Vector() + mobileTemplates.add('huurton') + mobileTemplates.add('huurton_howler') + mobileTemplates.add('huurton_matron') + core.spawnService.addLairTemplate('dantooine_huurton_lair_1', mobileTemplates, 15, 'object/tangible/lair/base/shared_poi_all_lair_brambles_small.iff') \ No newline at end of file diff --git a/scripts/mobiles/lairs/dantooine_huurton_lair_2.py b/scripts/mobiles/lairs/dantooine_huurton_lair_2.py new file mode 100644 index 00000000..a94d718e --- /dev/null +++ b/scripts/mobiles/lairs/dantooine_huurton_lair_2.py @@ -0,0 +1,9 @@ +import sys +from java.util import Vector + +def addTemplate(core): + mobileTemplates = Vector() + mobileTemplates.add('huurton_pub') + mobileTemplates.add('huurton_reaper') + mobileTemplates.add('huurton_stalker') + core.spawnService.addLairTemplate('dantooine_huurton_lair_2', mobileTemplates, 15, 'object/tangible/lair/base/shared_poi_all_lair_brambles_small.iff') \ No newline at end of file diff --git a/scripts/mobiles/lairs/dantooine_piket_lair_1.py b/scripts/mobiles/lairs/dantooine_piket_lair_1.py new file mode 100644 index 00000000..a6ccd8a6 --- /dev/null +++ b/scripts/mobiles/lairs/dantooine_piket_lair_1.py @@ -0,0 +1,4 @@ +import sys + +def addTemplate(core): + core.spawnService.addLairTemplate('dantooine_piket_lair_1', 'piket', 15, 'object/tangible/lair/base/shared_earthmound_light.iff') \ No newline at end of file diff --git a/scripts/mobiles/lairs/dantooine_piket_longhorn_lair_1.py b/scripts/mobiles/lairs/dantooine_piket_longhorn_lair_1.py new file mode 100644 index 00000000..1e24cef1 --- /dev/null +++ b/scripts/mobiles/lairs/dantooine_piket_longhorn_lair_1.py @@ -0,0 +1,9 @@ +import sys +from java.util import Vector + +def addTemplate(core): + mobileTemplates = Vector() + mobileTemplates.add('piket_longhorn') + mobileTemplates.add('piket_longhorn_female') + mobileTemplates.add('piket_plains_walker') + core.spawnService.addLairTemplate('dantooine_piket_longhorn_lair_1', mobileTemplates, 15, 'object/tangible/lair/base/shared_earthmound_light.iff') \ No newline at end of file diff --git a/scripts/mobiles/lairs/dantooine_piket_plains_walker_lair_1.py b/scripts/mobiles/lairs/dantooine_piket_plains_walker_lair_1.py new file mode 100644 index 00000000..b837fe8c --- /dev/null +++ b/scripts/mobiles/lairs/dantooine_piket_plains_walker_lair_1.py @@ -0,0 +1,7 @@ +import sys +from java.util import Vector + +def addTemplate(core): + mobileTemplates = Vector() + mobileTemplates.add('piket_plains_walker') + core.spawnService.addLairTemplate('dantooine_piket_plains_walker_lair_1', mobileTemplates, 15, 'object/tangible/lair/base/shared_earthmound_light.iff') \ No newline at end of file diff --git a/scripts/mobiles/lairs/dantooine_quenker_lair_1.py b/scripts/mobiles/lairs/dantooine_quenker_lair_1.py new file mode 100644 index 00000000..4856d31e --- /dev/null +++ b/scripts/mobiles/lairs/dantooine_quenker_lair_1.py @@ -0,0 +1,9 @@ +import sys +from java.util import Vector + +def addTemplate(core): + mobileTemplates = Vector() + mobileTemplates.add('quenker') + mobileTemplates.add('quenker_ravager') + mobileTemplates.add('quenker_relic_reaper') + core.spawnService.addLairTemplate('dantooine_quenker_lair_1', mobileTemplates, 15, 'object/tangible/lair/base/shared_poi_all_lair_brambles_small.iff') \ No newline at end of file diff --git a/scripts/mobiles/lairs/dantooine_thune_lair_1.py b/scripts/mobiles/lairs/dantooine_thune_lair_1.py new file mode 100644 index 00000000..93962a7a --- /dev/null +++ b/scripts/mobiles/lairs/dantooine_thune_lair_1.py @@ -0,0 +1,9 @@ +import sys +from java.util import Vector + +def addTemplate(core): + mobileTemplates = Vector() + mobileTemplates.add('thune') + mobileTemplates.add('thune_grassland_guardian') + mobileTemplates.add('thune_herd_leader') + core.spawnService.addLairTemplate('dantooine_thune_lair_1', mobileTemplates, 15, 'object/tangible/lair/base/shared_earthmound_light.iff') \ No newline at end of file diff --git a/scripts/mobiles/lairs/dantooine_voritor_lair_1.py b/scripts/mobiles/lairs/dantooine_voritor_lair_1.py new file mode 100644 index 00000000..8e1afee4 --- /dev/null +++ b/scripts/mobiles/lairs/dantooine_voritor_lair_1.py @@ -0,0 +1,5 @@ +import sys +from java.util import Vector + +def addTemplate(core): + core.spawnService.addLairTemplate('dantooine_voritor_lair_1', 'voritor_lizard', 15, 'object/tangible/lair/base/shared_poi_all_lair_brambles_small.iff') \ No newline at end of file diff --git a/scripts/mobiles/lairs/dantooine_voritor_lair_2.py b/scripts/mobiles/lairs/dantooine_voritor_lair_2.py new file mode 100644 index 00000000..9352c9f3 --- /dev/null +++ b/scripts/mobiles/lairs/dantooine_voritor_lair_2.py @@ -0,0 +1,11 @@ +import sys +from java.util import Vector + +def addTemplate(core): + mobileTemplates = Vector() + mobileTemplates.add('voritor_lizard') + mobileTemplates.add('horned_voritor_jungle_lizard') + mobileTemplates.add('vexed_voritor_lizard') + mobileTemplates.add('voritor_dasher') + mobileTemplates.add('spiked_slasher') + core.spawnService.addLairTemplate('dantooine_voritor_lair_2', mobileTemplates, 15, 'object/tangible/lair/base/shared_poi_all_lair_brambles_small.iff') \ No newline at end of file diff --git a/scripts/mobiles/lairs/naboo_chuba_lair_neutral_small.py b/scripts/mobiles/lairs/naboo_chuba_lair_neutral_small.py new file mode 100644 index 00000000..ac408bdb --- /dev/null +++ b/scripts/mobiles/lairs/naboo_chuba_lair_neutral_small.py @@ -0,0 +1,4 @@ +import sys + +def addTemplate(core): + core.spawnService.addLairTemplate('naboo_chuba_lair_neutral_small', 'chuba', 15, 'object/tangible/lair/base/shared_poi_all_lair_brambles_small.iff') \ No newline at end of file diff --git a/scripts/mobiles/lairs/tatooine_kreetle_lair_neutral_small.py b/scripts/mobiles/lairs/tatooine_kreetle_lair_neutral_small.py new file mode 100644 index 00000000..76e76ebe --- /dev/null +++ b/scripts/mobiles/lairs/tatooine_kreetle_lair_neutral_small.py @@ -0,0 +1,4 @@ +import sys + +def addTemplate(core): + core.spawnService.addLairTemplate('tatooine_kreetle_lair_neutral_small', 'kreetle', 15, 'object/tangible/lair/base/shared_poi_all_lair_brambles_small.iff') \ No newline at end of file diff --git a/scripts/mobiles/lairs/tatooine_rill_lair_neutral_small.py b/scripts/mobiles/lairs/tatooine_rill_lair_neutral_small.py new file mode 100644 index 00000000..5eed8400 --- /dev/null +++ b/scripts/mobiles/lairs/tatooine_rill_lair_neutral_small.py @@ -0,0 +1,5 @@ +import sys + +def addTemplate(core): + core.spawnService.addLairTemplate('tatooine_rill_lair_neutral_small', 'rill', 15, 'object/tangible/lair/base/shared_poi_all_lair_brambles_small.iff') + return \ No newline at end of file diff --git a/scripts/mobiles/lairs/tatooine_womprat_lair_neutral_small.py b/scripts/mobiles/lairs/tatooine_womprat_lair_neutral_small.py new file mode 100644 index 00000000..60400598 --- /dev/null +++ b/scripts/mobiles/lairs/tatooine_womprat_lair_neutral_small.py @@ -0,0 +1,4 @@ +import sys + +def addTemplate(core): + core.spawnService.addLairTemplate('tatooine_womprat_lair_neutral_small', 'womprat', 15, 'object/tangible/lair/base/shared_poi_all_lair_brambles_small.iff') \ No newline at end of file diff --git a/scripts/mobiles/lairs/tatooine_worrt_lair_neutral_small.py b/scripts/mobiles/lairs/tatooine_worrt_lair_neutral_small.py new file mode 100644 index 00000000..87905581 --- /dev/null +++ b/scripts/mobiles/lairs/tatooine_worrt_lair_neutral_small.py @@ -0,0 +1,5 @@ +import sys + +def addTemplate(core): + core.spawnService.addLairTemplate('tatooine_worrt_lair_neutral_small', 'worrt', 15, 'object/tangible/lair/base/shared_poi_all_lair_brambles_small.iff') + return \ No newline at end of file diff --git a/scripts/mobiles/lok/aged_kimogila.py b/scripts/mobiles/lok/aged_kimogila.py new file mode 100644 index 00000000..33f4d623 --- /dev/null +++ b/scripts/mobiles/lok/aged_kimogila.py @@ -0,0 +1,44 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('kimogila_aged') + mobileTemplate.setLevel(79) + mobileTemplate.setMinLevel(79) + mobileTemplate.setMaxLevel(80) + mobileTemplate.setDifficulty(2) + mobileTemplate.setAttackRange(12) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(True) + mobileTemplate.setScale(1) + mobileTemplate.setMeatType("Carnivore Meat") + mobileTemplate.setMeatAmount(1450) + mobileTemplate.setHideType("Leathery Hide") + mobileTemplate.setHideAmount(1350) + mobileTemplate.setSocialGroup("kimogila") + mobileTemplate.setAssistRange(12) + mobileTemplate.setStalker(True) + mobileTemplate.setOptionsBitmask(192) + + templates = Vector() + templates.add('object/mobile/shared_kimogila_hue.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('aged_kimogila', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/mustafar/Blistmok_Shrieker.py b/scripts/mobiles/mustafar/Blistmok_Shrieker.py new file mode 100644 index 00000000..f4154231 --- /dev/null +++ b/scripts/mobiles/mustafar/Blistmok_Shrieker.py @@ -0,0 +1,42 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('som_blistmok_shrieker') + mobileTemplate.setLevel(82) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setMeatType("Reptile Meat") + mobileTemplate.setMeatAmount(19) + mobileTemplate.setHideType("Scaley Hide") + mobileTemplate.setHideAmount(22) + mobileTemplate.setSocialGroup("blistmok") + mobileTemplate.setAssistRange(24) + mobileTemplate.setStalker(False) + mobileTemplate.setOptionsBitmask(192) + + templates = Vector() + templates.add('object/mobile/shared_blistmok.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('Blistmok_Shrieker', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/mustafar/Blistmok_Trampler.py b/scripts/mobiles/mustafar/Blistmok_Trampler.py new file mode 100644 index 00000000..476a02d3 --- /dev/null +++ b/scripts/mobiles/mustafar/Blistmok_Trampler.py @@ -0,0 +1,42 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('som_blistmok_trampler') + mobileTemplate.setLevel(82) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(True) + mobileTemplate.setScale(1) + mobileTemplate.setMeatType("Reptile Meat") + mobileTemplate.setMeatAmount(19) + mobileTemplate.setHideType("Scaley Hide") + mobileTemplate.setHideAmount(22) + mobileTemplate.setSocialGroup("blistmok") + mobileTemplate.setAssistRange(24) + mobileTemplate.setStalker(False) + mobileTemplate.setOptionsBitmask(192) + + templates = Vector() + templates.add('object/mobile/shared_blistmok.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('Blistmok_Trampler', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/mustafar/ancient_jundak.py b/scripts/mobiles/mustafar/ancient_jundak.py new file mode 100644 index 00000000..888d6160 --- /dev/null +++ b/scripts/mobiles/mustafar/ancient_jundak.py @@ -0,0 +1,42 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('som_ancient_jundak') + mobileTemplate.setLevel(84) + mobileTemplate.setDifficulty(2) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(True) + mobileTemplate.setScale(1.2) + mobileTemplate.setMeatType("Insect Meat") + mobileTemplate.setMeatAmount(1) + mobileTemplate.setHideType("Scaley Hide") + mobileTemplate.setHideAmount(2) + mobileTemplate.setSocialGroup("jundak") + mobileTemplate.setAssistRange(24) + mobileTemplate.setStalker(False) + mobileTemplate.setOptionsBitmask(192) + + templates = Vector() + templates.add('object/mobile/shared_jundak.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('ancient_jundak', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/mustafar/ancient_tulrus.py b/scripts/mobiles/mustafar/ancient_tulrus.py new file mode 100644 index 00000000..e940f6a5 --- /dev/null +++ b/scripts/mobiles/mustafar/ancient_tulrus.py @@ -0,0 +1,42 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('som_nesting_grounds_tulrus_ancient') + mobileTemplate.setLevel(82) + mobileTemplate.setDifficulty(1) + mobileTemplate.setAttackRange(12) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(True) + mobileTemplate.setScale(1.2) + mobileTemplate.setMeatType("Wild Meat") + mobileTemplate.setMeatAmount(33) + mobileTemplate.setHideType("Leathery Hide") + mobileTemplate.setHideAmount(24) + mobileTemplate.setSocialGroup("tulrus") + mobileTemplate.setAssistRange(24) + mobileTemplate.setStalker(False) + mobileTemplate.setOptionsBitmask(192) + + templates = Vector() + templates.add('object/mobile/shared_tulrus.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('ancient_tulrus', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/mustafar/blistmok_crystal_stalker.py b/scripts/mobiles/mustafar/blistmok_crystal_stalker.py new file mode 100644 index 00000000..c45fa73d --- /dev/null +++ b/scripts/mobiles/mustafar/blistmok_crystal_stalker.py @@ -0,0 +1,42 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('som_crystal_flats_blistmok_crystal_stalker') + mobileTemplate.setLevel(72) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(True) + mobileTemplate.setScale(1) + mobileTemplate.setMeatType("Reptile Meat") + mobileTemplate.setMeatAmount(20) + mobileTemplate.setHideType("Scaley Hide") + mobileTemplate.setHideAmount(24) + mobileTemplate.setSocialGroup("blistmok") + mobileTemplate.setAssistRange(24) + mobileTemplate.setStalker(True) + mobileTemplate.setOptionsBitmask(192) + + templates = Vector() + templates.add('object/mobile/shared_blistmok.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('blistmok_crystal_stalker', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/mustafar/bloated_jundak.py b/scripts/mobiles/mustafar/bloated_jundak.py new file mode 100644 index 00000000..cc3482e2 --- /dev/null +++ b/scripts/mobiles/mustafar/bloated_jundak.py @@ -0,0 +1,42 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('som_nesting_grounds_jundak_bloated') + mobileTemplate.setLevel(84) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setMeatType("Insect Meat") + mobileTemplate.setMeatAmount(28) + mobileTemplate.setHideType("Scaley Hide") + mobileTemplate.setHideAmount(38) + mobileTemplate.setSocialGroup("jundak") + mobileTemplate.setAssistRange(24) + mobileTemplate.setStalker(False) + mobileTemplate.setOptionsBitmask(192) + + templates = Vector() + templates.add('object/mobile/shared_jundak.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('bloated_jundak', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/naboo/aggrivated_kaadu_trampler.py b/scripts/mobiles/naboo/aggrivated_kaadu_trampler.py new file mode 100644 index 00000000..6fdc7ac1 --- /dev/null +++ b/scripts/mobiles/naboo/aggrivated_kaadu_trampler.py @@ -0,0 +1,44 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('kaadu_aggrivated_trampler') + mobileTemplate.setLevel(15) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setMeatType("Avian Meat") + mobileTemplate.setMeatAmount(120) + mobileTemplate.setHideType("Leathery Hide") + mobileTemplate.setHideAmount(85) + mobileTemplate.setBoneType("Avian Bones") + mobileTemplate.setBoneAmount(70) + mobileTemplate.setSocialGroup("kaadu") + mobileTemplate.setAssistRange(6) + mobileTemplate.setStalker(False) + mobileTemplate.setOptionsBitmask(192) + + templates = Vector() + templates.add('object/mobile/shared_kaadu.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('aggrivated_kaadu_trampler', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/naboo/alpha_veermok.py b/scripts/mobiles/naboo/alpha_veermok.py new file mode 100644 index 00000000..2a536044 --- /dev/null +++ b/scripts/mobiles/naboo/alpha_veermok.py @@ -0,0 +1,46 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('alpha_veermok') + mobileTemplate.setLevel(19) + mobileTemplate.setMinLevel(19) + mobileTemplate.setMaxLevel(20) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1.2) + mobileTemplate.setMeatType("Carnivore Meat") + mobileTemplate.setMeatAmount(150) + mobileTemplate.setHideType("Bristley Hide") + mobileTemplate.setHideAmount(150) + mobileTemplate.setBoneType("Mammal Bones") + mobileTemplate.setBoneAmount(40) + mobileTemplate.setSocialGroup("veermok") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(False) + mobileTemplate.setOptionsBitmask(128) + + templates = Vector() + templates.add('object/mobile/shared_veermok.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('alpha_veermok', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/naboo/bachelor_gualama.py b/scripts/mobiles/naboo/bachelor_gualama.py new file mode 100644 index 00000000..c66e7326 --- /dev/null +++ b/scripts/mobiles/naboo/bachelor_gualama.py @@ -0,0 +1,44 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('bachelor_gualama') + mobileTemplate.setLevel(41) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setMeatType("Wild Meat") + mobileTemplate.setMeatAmount(150) + mobileTemplate.setHideType("Wooly Hide") + mobileTemplate.setHideAmount(150) + mobileTemplate.setBoneType("Mammal Bones") + mobileTemplate.setBoneAmount(90) + mobileTemplate.setSocialGroup("gualama") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(False) + mobileTemplate.setOptionsBitmask(128) + + templates = Vector() + templates.add('object/mobile/shared_gualama.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('bachelor_gualama', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/naboo/bolle_bol.py b/scripts/mobiles/naboo/bolle_bol.py new file mode 100644 index 00000000..d6df3369 --- /dev/null +++ b/scripts/mobiles/naboo/bolle_bol.py @@ -0,0 +1,44 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('bolle_bol') + mobileTemplate.setLevel(16) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setMeatType("Herbivore Meat") + mobileTemplate.setMeatAmount(450) + mobileTemplate.setHideType("Leathery Hide") + mobileTemplate.setHideAmount(300) + mobileTemplate.setBoneType("Mammal Bones") + mobileTemplate.setBoneAmount(180) + mobileTemplate.setSocialGroup("bolle bol") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(False) + mobileTemplate.setOptionsBitmask(128) + + templates = Vector() + templates.add('object/mobile/shared_bolle_bol.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('bolle_bol', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/naboo/capper_spineflap_drone.py b/scripts/mobiles/naboo/capper_spineflap_drone.py new file mode 100644 index 00000000..6fd319f6 --- /dev/null +++ b/scripts/mobiles/naboo/capper_spineflap_drone.py @@ -0,0 +1,44 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('capper_spineflap_drone') + mobileTemplate.setLevel(2) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setMeatType("Insect Meat") + mobileTemplate.setMeatAmount(6) + mobileTemplate.setHideType("Scaley Hide") + mobileTemplate.setHideAmount(10) + mobileTemplate.setBoneType("Avian Bones") + mobileTemplate.setBoneAmount(6) + mobileTemplate.setSocialGroup("capper spineflap") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(False) + mobileTemplate.setOptionsBitmask(128) + + templates = Vector() + templates.add('object/mobile/shared_capper_spineflap.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('capper_spineflap_drone', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/naboo/carnivorous_nuna.py b/scripts/mobiles/naboo/carnivorous_nuna.py new file mode 100644 index 00000000..317bf875 --- /dev/null +++ b/scripts/mobiles/naboo/carnivorous_nuna.py @@ -0,0 +1,44 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('carnivorous_nuna') + mobileTemplate.setLevel(13) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(True) + mobileTemplate.setScale(1) + mobileTemplate.setMeatType("Avian Meat") + mobileTemplate.setMeatAmount(5) + mobileTemplate.setHideType("Leathery Hide") + mobileTemplate.setHideAmount(5) + mobileTemplate.setBoneType("Avian Bones") + mobileTemplate.setBoneAmount(2) + mobileTemplate.setSocialGroup("self") + mobileTemplate.setAssistRange(8) + mobileTemplate.setStalker(False) + mobileTemplate.setOptionsBitmask(128) + + templates = Vector() + templates.add('object/mobile/shared_nuna.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('carnivorous_nuna', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/naboo/chuba.py b/scripts/mobiles/naboo/chuba.py new file mode 100644 index 00000000..d7276d10 --- /dev/null +++ b/scripts/mobiles/naboo/chuba.py @@ -0,0 +1,44 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('chuba') + mobileTemplate.setLevel(1) + mobileTemplate.setMinLevel(1) + mobileTemplate.setMaxLevel(3) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setMeatType("Herbivore Meat") + mobileTemplate.setMeatAmount(5) + mobileTemplate.setHideType("Leathery Hide") + mobileTemplate.setBoneAmount(3) + mobileTemplate.setSocialGroup("chuba") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(False) + mobileTemplate.setOptionsBitmask(128) + + templates = Vector() + templates.add('object/mobile/shared_chuba.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('chuba', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/naboo/fambaa.py b/scripts/mobiles/naboo/fambaa.py new file mode 100644 index 00000000..47cfd27f --- /dev/null +++ b/scripts/mobiles/naboo/fambaa.py @@ -0,0 +1,46 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('fambaa') + mobileTemplate.setLevel(22) + mobileTemplate.setMinLevel(22) + mobileTemplate.setMaxLevel(23) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setMeatType("Reptile Meat") + mobileTemplate.setMeatAmount(1250) + mobileTemplate.setHideType("Leathery Hide") + mobileTemplate.setHideAmount(325) + mobileTemplate.setBoneType("Mammal Bones") + mobileTemplate.setBoneAmount(675) + mobileTemplate.setSocialGroup("fambaa") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(False) + mobileTemplate.setOptionsBitmask(128) + + templates = Vector() + templates.add('object/mobile/shared_fambaa.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('fambaa', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/naboo/gualama.py b/scripts/mobiles/naboo/gualama.py new file mode 100644 index 00000000..3108f2bb --- /dev/null +++ b/scripts/mobiles/naboo/gualama.py @@ -0,0 +1,46 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('gualama') + mobileTemplate.setLevel(39) + mobileTemplate.setMinLevel(39) + mobileTemplate.setMaxLevel(40) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setMeatType("Wild Meat") + mobileTemplate.setMeatAmount(200) + mobileTemplate.setHideType("Wooly Hide") + mobileTemplate.setHideAmount(150) + mobileTemplate.setBoneType("Mammal Bones") + mobileTemplate.setBoneAmount(90) + mobileTemplate.setSocialGroup("gualama") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(False) + mobileTemplate.setOptionsBitmask(128) + + templates = Vector() + templates.add('object/mobile/shared_gualama.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('gualama', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/naboo/hermit_spider.py b/scripts/mobiles/naboo/hermit_spider.py new file mode 100644 index 00000000..55014de7 --- /dev/null +++ b/scripts/mobiles/naboo/hermit_spider.py @@ -0,0 +1,42 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('hermit_spider') + mobileTemplate.setLevel(33) + mobileTemplate.setMinLevel(33) + mobileTemplate.setMaxLevel(35) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setMeatType("Insect Meat") + mobileTemplate.setMeatAmount(60) + mobileTemplate.setSocialGroup("hermit spider") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(True) + mobileTemplate.setOptionsBitmask(192) + + templates = Vector() + templates.add('object/mobile/shared_hermit_spider.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('hermit_spider', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/naboo/kaadu.py b/scripts/mobiles/naboo/kaadu.py new file mode 100644 index 00000000..e1f778f4 --- /dev/null +++ b/scripts/mobiles/naboo/kaadu.py @@ -0,0 +1,46 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('kaadu') + mobileTemplate.setLevel(8) + mobileTemplate.setMinLevel(8) + mobileTemplate.setMaxLevel(12) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setMeatType("Avian Meat") + mobileTemplate.setMeatAmount(120) + mobileTemplate.setHideType("Leathery Hide") + mobileTemplate.setHideAmount(85) + mobileTemplate.setBoneType("Avian Bones") + mobileTemplate.setBoneAmount(70) + mobileTemplate.setSocialGroup("kaadu") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(False) + mobileTemplate.setOptionsBitmask(128) + + templates = Vector() + templates.add('object/mobile/shared_kaadu.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('kaadu', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/naboo/narglatch.py b/scripts/mobiles/naboo/narglatch.py new file mode 100644 index 00000000..c8e25c2e --- /dev/null +++ b/scripts/mobiles/naboo/narglatch.py @@ -0,0 +1,46 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('narglatch') + mobileTemplate.setLevel(21) + mobileTemplate.setMinLevel(21) + mobileTemplate.setMaxLevel(23) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setMeatType("Carnivore Meat") + mobileTemplate.setMeatAmount(60) + mobileTemplate.setHideType("Bristley Hide") + mobileTemplate.setHideAmount(45) + mobileTemplate.setBoneType("Mammal Bones") + mobileTemplate.setBoneAmount(40) + mobileTemplate.setSocialGroup("narglatch") + mobileTemplate.setAssistRange(0) + mobileTemplate.setOptionsBitmask(128) + mobileTemplate.setStalker(False) + + templates = Vector() + templates.add('object/mobile/shared_narglatch.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('narglatch', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/naboo/veermok.py b/scripts/mobiles/naboo/veermok.py new file mode 100644 index 00000000..47c07893 --- /dev/null +++ b/scripts/mobiles/naboo/veermok.py @@ -0,0 +1,46 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('veermok') + mobileTemplate.setLevel(18) + mobileTemplate.setMinLevel(18) + mobileTemplate.setMaxLevel(26) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setMeatType("Carnivore Meat") + mobileTemplate.setMeatAmount(150) + mobileTemplate.setHideType("Bristley Hide") + mobileTemplate.setHideAmount(150) + mobileTemplate.setBoneType("Mammal Bones") + mobileTemplate.setBoneAmount(60) + mobileTemplate.setSocialGroup("veermok") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(False) + mobileTemplate.setOptionsBitmask(128) + + templates = Vector() + templates.add('object/mobile/shared_veermok.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('veermok', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/rori/adult_pygmy_torton.py b/scripts/mobiles/rori/adult_pygmy_torton.py new file mode 100644 index 00000000..0d7e8788 --- /dev/null +++ b/scripts/mobiles/rori/adult_pygmy_torton.py @@ -0,0 +1,46 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('torton_pygmy_adult') + mobileTemplate.setLevel(16) + mobileTemplate.setMinLevel(16) + mobileTemplate.setMaxLevel(18) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(.5) + mobileTemplate.setMeatType("Carnivore Meat") + mobileTemplate.setMeatAmount(600) + mobileTemplate.setHideType("Wooly Hide") + mobileTemplate.setHideAmount(400) + mobileTemplate.setBoneType("Mammal Bones") + mobileTemplate.setBoneAmount(600) + mobileTemplate.setSocialGroup("torton") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(False) + mobileTemplate.setOptionsBitmask(128) + + templates = Vector() + templates.add('object/mobile/shared_torton.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('adult_pygmy_torton', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/rori/bark_mite.py b/scripts/mobiles/rori/bark_mite.py new file mode 100644 index 00000000..6fb5d13c --- /dev/null +++ b/scripts/mobiles/rori/bark_mite.py @@ -0,0 +1,46 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('bark_mite') + mobileTemplate.setLevel(37) + mobileTemplate.setMinLevel(37) + mobileTemplate.setMaxLevel(37) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setMeatType("Insect Meat") + mobileTemplate.setMeatAmount(5) + mobileTemplate.setHideType("Scaley Hide") + mobileTemplate.setHideAmount(4) + mobileTemplate.setBoneType("Mammal Bones") + mobileTemplate.setBoneAmount(3) + mobileTemplate.setSocialGroup("bark mite") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(False) + mobileTemplate.setOptionsBitmask(128) + + templates = Vector() + templates.add('object/mobile/shared_bark_mite.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('bark_mite', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/rori/bark_mite_hatchling.py b/scripts/mobiles/rori/bark_mite_hatchling.py new file mode 100644 index 00000000..7f40123c --- /dev/null +++ b/scripts/mobiles/rori/bark_mite_hatchling.py @@ -0,0 +1,42 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('bark_mite_hatchling') + mobileTemplate.setLevel(36) + mobileTemplate.setMinLevel(36) + mobileTemplate.setMaxLevel(36) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(.5) + mobileTemplate.setMeatType("Insect Meat") + mobileTemplate.setMeatAmount(5) + mobileTemplate.setSocialGroup("bark mite") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(False) + mobileTemplate.setOptionsBitmask(128) + + templates = Vector() + templates.add('object/mobile/shared_bark_mite.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('bark_mite_hatchling', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/rori/bearded_jax.py b/scripts/mobiles/rori/bearded_jax.py new file mode 100644 index 00000000..90a4958c --- /dev/null +++ b/scripts/mobiles/rori/bearded_jax.py @@ -0,0 +1,46 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('bearded_jax') + mobileTemplate.setLevel(37) + mobileTemplate.setMinLevel(37) + mobileTemplate.setMaxLevel(38) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setMeatType("Herbivore Meat") + mobileTemplate.setMeatAmount(15) + mobileTemplate.setHideType("Bristley Hide") + mobileTemplate.setHideAmount(15) + mobileTemplate.setBoneType("Mammal Bones") + mobileTemplate.setBoneAmount(10) + mobileTemplate.setSocialGroup("jax") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(False) + mobileTemplate.setOptionsBitmask(128) + + templates = Vector() + templates.add('object/mobile/shared_bearded_jax.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('bearded_jax', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/rori/blood_thirsty_borgle.py b/scripts/mobiles/rori/blood_thirsty_borgle.py new file mode 100644 index 00000000..6e7bce1b --- /dev/null +++ b/scripts/mobiles/rori/blood_thirsty_borgle.py @@ -0,0 +1,46 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('blood_thirsty_borgle') + mobileTemplate.setLevel(39) + mobileTemplate.setMinLevel(39) + mobileTemplate.setMaxLevel(39) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(True) + mobileTemplate.setScale(1) + mobileTemplate.setMeatType("Carnivore Meat") + mobileTemplate.setMeatAmount(5) + mobileTemplate.setHideType("Leathery Hide") + mobileTemplate.setHideAmount(5) + mobileTemplate.setBoneType("Avian Bones") + mobileTemplate.setBoneAmount(5) + mobileTemplate.setSocialGroup("borgle") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(False) + mobileTemplate.setOptionsBitmask(192) + + templates = Vector() + templates.add('object/mobile/shared_borgle.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('blood_thirsty_borgle', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/rori/borgle.py b/scripts/mobiles/rori/borgle.py new file mode 100644 index 00000000..a79e9f94 --- /dev/null +++ b/scripts/mobiles/rori/borgle.py @@ -0,0 +1,46 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('borgle') + mobileTemplate.setLevel(39) + mobileTemplate.setMinLevel(39) + mobileTemplate.setMaxLevel(42) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setMeatType("Carnivore Meat") + mobileTemplate.setMeatAmount(5) + mobileTemplate.setHideType("Leathery Hide") + mobileTemplate.setHideAmount(5) + mobileTemplate.setBoneType("Avian Bones") + mobileTemplate.setBoneAmount(5) + mobileTemplate.setSocialGroup("borgle") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(False) + mobileTemplate.setOptionsBitmask(128) + + templates = Vector() + templates.add('object/mobile/shared_borgle.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('borgle', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/rori/borgle_harvester.py b/scripts/mobiles/rori/borgle_harvester.py new file mode 100644 index 00000000..774b9a09 --- /dev/null +++ b/scripts/mobiles/rori/borgle_harvester.py @@ -0,0 +1,46 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('borgle_harvester') + mobileTemplate.setLevel(37) + mobileTemplate.setMinLevel(37) + mobileTemplate.setMaxLevel(37) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setMeatType("Carnivore Meat") + mobileTemplate.setMeatAmount(5) + mobileTemplate.setHideType("Leathery Hide") + mobileTemplate.setHideAmount(5) + mobileTemplate.setBoneType("Avian Bones") + mobileTemplate.setBoneAmount(5) + mobileTemplate.setSocialGroup("borgle") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(False) + mobileTemplate.setOptionsBitmask(128) + + templates = Vector() + templates.add('object/mobile/shared_borgle.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('borgle_harvester', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/rori/borgle_matriarch.py b/scripts/mobiles/rori/borgle_matriarch.py new file mode 100644 index 00000000..e8d0903d --- /dev/null +++ b/scripts/mobiles/rori/borgle_matriarch.py @@ -0,0 +1,46 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('borgle_matriarch') + mobileTemplate.setLevel(40) + mobileTemplate.setMinLevel(40) + mobileTemplate.setMaxLevel(40) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(True) + mobileTemplate.setScale(1.2) + mobileTemplate.setMeatType("Carnivore Meat") + mobileTemplate.setMeatAmount(5) + mobileTemplate.setHideType("Leathery Hide") + mobileTemplate.setHideAmount(5) + mobileTemplate.setBoneType("Avian Bones") + mobileTemplate.setBoneAmount(5) + mobileTemplate.setSocialGroup("borgle") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(False) + mobileTemplate.setOptionsBitmask(192) + + templates = Vector() + templates.add('object/mobile/shared_borgle.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('borgle_matriarch', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/rori/borgle_protector.py b/scripts/mobiles/rori/borgle_protector.py new file mode 100644 index 00000000..142ec8fa --- /dev/null +++ b/scripts/mobiles/rori/borgle_protector.py @@ -0,0 +1,46 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('borgle_protector') + mobileTemplate.setLevel(39) + mobileTemplate.setMinLevel(39) + mobileTemplate.setMaxLevel(39) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setMeatType("Carnivore Meat") + mobileTemplate.setMeatAmount(5) + mobileTemplate.setHideType("Leathery Hide") + mobileTemplate.setHideAmount(5) + mobileTemplate.setBoneType("Avian Bones") + mobileTemplate.setBoneAmount(5) + mobileTemplate.setSocialGroup("borgle") + mobileTemplate.setAssistRange(6) + mobileTemplate.setStalker(False) + mobileTemplate.setOptionsBitmask(128) + + templates = Vector() + templates.add('object/mobile/shared_borgle.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('borgle_protector', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/rori/capper_spineflap.py b/scripts/mobiles/rori/capper_spineflap.py new file mode 100644 index 00000000..82c9f4b2 --- /dev/null +++ b/scripts/mobiles/rori/capper_spineflap.py @@ -0,0 +1,46 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('capper_spineflap') + mobileTemplate.setLevel(31) + mobileTemplate.setMinLevel(31) + mobileTemplate.setMaxLevel(35) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setMeatType("Insect Meat") + mobileTemplate.setMeatAmount(3) + mobileTemplate.setHideType("Scaley Hide") + mobileTemplate.setHideAmount(5) + mobileTemplate.setBoneType("Avian Bones") + mobileTemplate.setBoneAmount(3) + mobileTemplate.setSocialGroup("capper spineflap") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(False) + mobileTemplate.setOptionsBitmask(128) + + templates = Vector() + templates.add('object/mobile/shared_capper_spineflap.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('capper_spineflap', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/rori/emperors_hand.py b/scripts/mobiles/rori/emperors_hand.py new file mode 100644 index 00000000..d878eb8b --- /dev/null +++ b/scripts/mobiles/rori/emperors_hand.py @@ -0,0 +1,38 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('restuss_emperors_hand') + mobileTemplate.setLevel(90) + mobileTemplate.setDifficulty(2) + mobileTemplate.setAttackRange(12) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(9) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(True) + mobileTemplate.setScale(1) + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(True) + mobileTemplate.setOptionsBitmask(192) + + + templates = Vector() + templates.add('object/mobile/shared_dressed_restuss_emperors_hand.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/sword/crafted_saber/shared_sword_lightsaber_mandalorian.iff', 9, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('saberHit') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('restuss_emperors_hand', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/rori/horned_rasp.py b/scripts/mobiles/rori/horned_rasp.py new file mode 100644 index 00000000..b6b1f7ae --- /dev/null +++ b/scripts/mobiles/rori/horned_rasp.py @@ -0,0 +1,44 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('horned_rasp') + mobileTemplate.setLevel(31) + mobileTemplate.setMinLevel(31) + mobileTemplate.setMaxLevel(33) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setMeatType("Avian Meat") + mobileTemplate.setMeatAmount(8) + mobileTemplate.setBoneType("Avian Bones") + mobileTemplate.setBoneAmount(1) + mobileTemplate.setSocialGroup("rasp") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(False) + mobileTemplate.setOptionsBitmask(128) + + templates = Vector() + templates.add('object/mobile/shared_horned_rasp.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('horned_rasp', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/rori/pugoriss.py b/scripts/mobiles/rori/pugoriss.py new file mode 100644 index 00000000..a02c9420 --- /dev/null +++ b/scripts/mobiles/rori/pugoriss.py @@ -0,0 +1,46 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('pugoriss') + mobileTemplate.setLevel(42) + mobileTemplate.setMinLevel(42) + mobileTemplate.setMaxLevel(45) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setMeatType("Carnivore Meat") + mobileTemplate.setMeatAmount(375) + mobileTemplate.setHideType("Leathery Hide") + mobileTemplate.setHideAmount(425) + mobileTemplate.setBoneType("Mammal Bones") + mobileTemplate.setBoneAmount(375) + mobileTemplate.setSocialGroup("pugoriss") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(False) + mobileTemplate.setOptionsBitmask(128) + + templates = Vector() + templates.add('object/mobile/shared_pugoriss.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('pugoriss', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/rori/torton.py b/scripts/mobiles/rori/torton.py new file mode 100644 index 00000000..4e96998e --- /dev/null +++ b/scripts/mobiles/rori/torton.py @@ -0,0 +1,46 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('torton') + mobileTemplate.setLevel(53) + mobileTemplate.setMinLevel(53) + mobileTemplate.setMaxLevel(55) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setMeatType("Carnivore Meat") + mobileTemplate.setMeatAmount(1300) + mobileTemplate.setHideType("Wooly Hide") + mobileTemplate.setHideAmount(1150) + mobileTemplate.setBoneType("Mammal Bones") + mobileTemplate.setBoneAmount(1300) + mobileTemplate.setSocialGroup("torton") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(False) + mobileTemplate.setOptionsBitmask(128) + + templates = Vector() + templates.add('object/mobile/shared_torton.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('torton', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/rori/vir_vur.py b/scripts/mobiles/rori/vir_vur.py new file mode 100644 index 00000000..f93e456c --- /dev/null +++ b/scripts/mobiles/rori/vir_vur.py @@ -0,0 +1,44 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('vir_vur') + mobileTemplate.setLevel(37) + mobileTemplate.setMinLevel(37) + mobileTemplate.setMaxLevel(40) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setMeatType("Avian Meat") + mobileTemplate.setMeatAmount(10) + mobileTemplate.setBoneType("Mammal Bones") + mobileTemplate.setBoneAmount(4) + mobileTemplate.setSocialGroup("vir vur") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(False) + mobileTemplate.setOptionsBitmask(128) + + templates = Vector() + templates.add('object/mobile/shared_vir_vur.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('vir_vur', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/spawnareas/dantooine_central_mixed_1.py b/scripts/mobiles/spawnareas/dantooine_central_mixed_1.py new file mode 100644 index 00000000..5a45beeb --- /dev/null +++ b/scripts/mobiles/spawnareas/dantooine_central_mixed_1.py @@ -0,0 +1,11 @@ +# Spawn Area file created with PSWG Planetary Spawn Tool +import sys +from java.util import Vector + +def addSpawnArea(core): + mixedGroups = Vector() + mixedGroups.add('huurton_lair_group_1') + mixedGroups.add('piket_longhorn_lair_group_1') + mixedGroups.add('bol_lair_group_1') + core.spawnService.addMixedSpawnArea(mixedGroups, -2580, 737, 2068, 'dantooine') + return diff --git a/scripts/mobiles/spawnareas/dantooine_central_mixed_2.py b/scripts/mobiles/spawnareas/dantooine_central_mixed_2.py new file mode 100644 index 00000000..8da5820c --- /dev/null +++ b/scripts/mobiles/spawnareas/dantooine_central_mixed_2.py @@ -0,0 +1,13 @@ +# Spawn Area file created with PSWG Planetary Spawn Tool +import sys +from java.util import Vector + +def addSpawnArea(core): + mixedGroups = Vector() + mixedGroups.add('kunga_central_group_1') + mixedGroups.add('huurton_lair_group_1') + mixedGroups.add('thune_lair_group_1') + mixedGroups.add('graul_lair_group_1') + mixedGroups.add('huurton_group_2') + core.spawnService.addMixedSpawnArea(mixedGroups, 1044, -798, 2252, 'dantooine') + return diff --git a/scripts/mobiles/spawnareas/dantooine_central_mixed_3.py b/scripts/mobiles/spawnareas/dantooine_central_mixed_3.py new file mode 100644 index 00000000..7730e79a --- /dev/null +++ b/scripts/mobiles/spawnareas/dantooine_central_mixed_3.py @@ -0,0 +1,13 @@ +# Spawn Area file created with PSWG Planetary Spawn Tool +import sys +from java.util import Vector + +def addSpawnArea(core): + mixedGroups = Vector() + mixedGroups.add('mokk_group_1') + mixedGroups.add('piket_longhorn_lair_group_1') + mixedGroups.add('huurton_lair_group_1') + mixedGroups.add('bol_lair_group_1') + mixedGroups.add('huurton_group_1') + core.spawnService.addMixedSpawnArea(mixedGroups, -1740, -3297, 1822, 'dantooine') + return diff --git a/scripts/mobiles/spawnareas/dantooine_east_mixed_1.py b/scripts/mobiles/spawnareas/dantooine_east_mixed_1.py new file mode 100644 index 00000000..b80c96c0 --- /dev/null +++ b/scripts/mobiles/spawnareas/dantooine_east_mixed_1.py @@ -0,0 +1,10 @@ +# Spawn Area file created with PSWG Planetary Spawn Tool +import sys +from java.util import Vector + +def addSpawnArea(core): + mixedGroups = Vector() + mixedGroups.add('voritors_east_group_1') + mixedGroups.add('voritor_lair_group_1') + core.spawnService.addMixedSpawnArea(mixedGroups, 5672, -1146, 2396, 'dantooine') + return diff --git a/scripts/mobiles/spawnareas/dantooine_east_mixed_2.py b/scripts/mobiles/spawnareas/dantooine_east_mixed_2.py new file mode 100644 index 00000000..5dabb9c8 --- /dev/null +++ b/scripts/mobiles/spawnareas/dantooine_east_mixed_2.py @@ -0,0 +1,9 @@ +# Spawn Area file created with PSWG Planetary Spawn Tool +import sys +from java.util import Vector + +def addSpawnArea(core): + mixedGroups = Vector() + mixedGroups.add('voritor_lair_group_2') + core.spawnService.addMixedSpawnArea(mixedGroups, 5345, -5795, 2560, 'dantooine') + return diff --git a/scripts/mobiles/spawnareas/dantooine_east_mixed_3.py b/scripts/mobiles/spawnareas/dantooine_east_mixed_3.py new file mode 100644 index 00000000..b2debb9f --- /dev/null +++ b/scripts/mobiles/spawnareas/dantooine_east_mixed_3.py @@ -0,0 +1,11 @@ +# Spawn Area file created with PSWG Planetary Spawn Tool +import sys +from java.util import Vector + +def addSpawnArea(core): + mixedGroups = Vector() + mixedGroups.add('piket_plains_walker_lair_group') + mixedGroups.add('quenker_relic_reaper_group') + mixedGroups.add('thune_lair_group_1') + core.spawnService.addMixedSpawnArea(mixedGroups, 3440, 1310, 2641, 'dantooine') + return diff --git a/scripts/mobiles/spawnareas/dantooine_imperial_op_lair.py b/scripts/mobiles/spawnareas/dantooine_imperial_op_lair.py new file mode 100644 index 00000000..fa814fba --- /dev/null +++ b/scripts/mobiles/spawnareas/dantooine_imperial_op_lair.py @@ -0,0 +1,6 @@ +# Spawn Area file created with PSWG Planetary Spawn Tool +import sys + +def addSpawnArea(core): + core.spawnService.addLairSpawnArea('mixed_lair_group_1', -4014, -1966, 1024, 'dantooine') + return diff --git a/scripts/mobiles/spawnareas/dantooine_mining_lair.py b/scripts/mobiles/spawnareas/dantooine_mining_lair.py new file mode 100644 index 00000000..a4e6734a --- /dev/null +++ b/scripts/mobiles/spawnareas/dantooine_mining_lair.py @@ -0,0 +1,7 @@ +# Spawn Area file created with PSWG Planetary Spawn Tool +import sys +from java.util import Vector + +def addSpawnArea(core): + #core.spawnService.addLairSpawnArea('mixed_lair_group_1', 0, 2355, 1024, 'dantooine') + return diff --git a/scripts/mobiles/spawnareas/dantooine_mining_mixed.py b/scripts/mobiles/spawnareas/dantooine_mining_mixed.py new file mode 100644 index 00000000..7fd81cad --- /dev/null +++ b/scripts/mobiles/spawnareas/dantooine_mining_mixed.py @@ -0,0 +1,11 @@ +# Spawn Area file created with PSWG Planetary Spawn Tool +import sys +from java.util import Vector + +def addSpawnArea(core): + mixedGroups = Vector() + mixedGroups.add('piket_plains_walker_group') + mixedGroups.add('mixed_lair_group_1') + mixedGroups.add('naboo_starter') + core.spawnService.addMixedSpawnArea(mixedGroups, 0, 2355, 1024, 'dantooine') + return diff --git a/scripts/mobiles/spawnareas/dantooine_north_mixed_1.py b/scripts/mobiles/spawnareas/dantooine_north_mixed_1.py new file mode 100644 index 00000000..0105e3c0 --- /dev/null +++ b/scripts/mobiles/spawnareas/dantooine_north_mixed_1.py @@ -0,0 +1,11 @@ +# Spawn Area file created with PSWG Planetary Spawn Tool +import sys +from java.util import Vector + +def addSpawnArea(core): + mixedGroups = Vector() + mixedGroups.add('force_sensitives_wild_1') + mixedGroups.add('graul_mauler_lair_group_1') + mixedGroups.add('graul_mauler_nw_group_1') + core.spawnService.addMixedSpawnArea(mixedGroups, 20, 6574, 1966, 'dantooine') + return diff --git a/scripts/mobiles/spawnareas/dantooine_north_mixed_2.py b/scripts/mobiles/spawnareas/dantooine_north_mixed_2.py new file mode 100644 index 00000000..f24e179b --- /dev/null +++ b/scripts/mobiles/spawnareas/dantooine_north_mixed_2.py @@ -0,0 +1,12 @@ +# Spawn Area file created with PSWG Planetary Spawn Tool +import sys +from java.util import Vector + +def addSpawnArea(core): + mixedGroups = Vector() + mixedGroups.add('huurton_lair_group_1') + mixedGroups.add('bol_lair_group_1') + mixedGroups.add('mokk_group_1') + mixedGroups.add('quenker_lair_group_1') + core.spawnService.addMixedSpawnArea(mixedGroups, -1454, 3829, 1044, 'dantooine') + return diff --git a/scripts/mobiles/spawnareas/dantooine_north_mixed_3.py b/scripts/mobiles/spawnareas/dantooine_north_mixed_3.py new file mode 100644 index 00000000..237654cb --- /dev/null +++ b/scripts/mobiles/spawnareas/dantooine_north_mixed_3.py @@ -0,0 +1,12 @@ +# Spawn Area file created with PSWG Planetary Spawn Tool +import sys +from java.util import Vector + +def addSpawnArea(core): + mixedGroups = Vector() + mixedGroups.add('quenker_lair_group_1') + mixedGroups.add('huurton_lair_group_1') + mixedGroups.add('bol_lair_group_1') + mixedGroups.add('mokk_group_1') + core.spawnService.addMixedSpawnArea(mixedGroups, 757, 4321, 1167, 'dantooine') + return diff --git a/scripts/mobiles/spawnareas/dantooine_nw_mixed_1.py b/scripts/mobiles/spawnareas/dantooine_nw_mixed_1.py new file mode 100644 index 00000000..1ffb716c --- /dev/null +++ b/scripts/mobiles/spawnareas/dantooine_nw_mixed_1.py @@ -0,0 +1,10 @@ +# Spawn Area file created with PSWG Planetary Spawn Tool +import sys +from java.util import Vector + +def addSpawnArea(core): + mixedGroups = Vector() + mixedGroups.add('dantooine_nw_lair_group_1') + mixedGroups.add('jantas_nw_group_1') + core.spawnService.addMixedSpawnArea(mixedGroups, -4751, 4935, 3200, 'dantooine') + return diff --git a/scripts/mobiles/spawnareas/dantooine_pirate_lair.py b/scripts/mobiles/spawnareas/dantooine_pirate_lair.py new file mode 100644 index 00000000..ef872c08 --- /dev/null +++ b/scripts/mobiles/spawnareas/dantooine_pirate_lair.py @@ -0,0 +1,6 @@ +# Spawn Area file created with PSWG Planetary Spawn Tool +import sys + +def addSpawnArea(core): + core.spawnService.addLairSpawnArea('mixed_lair_group_1', 1699, -6471, 1024, 'dantooine') + return diff --git a/scripts/mobiles/spawnareas/dantooine_south_mixed_1.py b/scripts/mobiles/spawnareas/dantooine_south_mixed_1.py new file mode 100644 index 00000000..28c50059 --- /dev/null +++ b/scripts/mobiles/spawnareas/dantooine_south_mixed_1.py @@ -0,0 +1,14 @@ +# Spawn Area file created with PSWG Planetary Spawn Tool +import sys +from java.util import Vector + +def addSpawnArea(core): + mixedGroups = Vector() + mixedGroups.add('jantas_nw_group_1') + mixedGroups.add('graul_mauler_lair_group_1') + mixedGroups.add('quenker_relic_reaper_group') + mixedGroups.add('voritor_lair_group_1') + mixedGroups.add('thune_lair_group_1') + mixedGroups.add('bol_lair_group_1') + core.spawnService.addMixedSpawnArea(mixedGroups, -2109, -6983, 2580, 'dantooine') + return diff --git a/scripts/mobiles/spawnareas/dantooine_south_mixed_3.py b/scripts/mobiles/spawnareas/dantooine_south_mixed_3.py new file mode 100644 index 00000000..addd1210 --- /dev/null +++ b/scripts/mobiles/spawnareas/dantooine_south_mixed_3.py @@ -0,0 +1,11 @@ +# Spawn Area file created with PSWG Planetary Spawn Tool +import sys +from java.util import Vector + +def addSpawnArea(core): + mixedGroups = Vector() + mixedGroups.add('quenker_lair_group_1') + mixedGroups.add('huurton_lair_group_1') + mixedGroups.add('quenker_group_south_1') + core.spawnService.addMixedSpawnArea(mixedGroups, 1495, -3502, 2396, 'dantooine') + return diff --git a/scripts/mobiles/spawnareas/dantooine_sw_mixed_1.py b/scripts/mobiles/spawnareas/dantooine_sw_mixed_1.py new file mode 100644 index 00000000..57fa09a7 --- /dev/null +++ b/scripts/mobiles/spawnareas/dantooine_sw_mixed_1.py @@ -0,0 +1,12 @@ +# Spawn Area file created with PSWG Planetary Spawn Tool +import sys +from java.util import Vector + +def addSpawnArea(core): + mixedGroups = Vector() + mixedGroups.add('mokk_group_1') + mixedGroups.add('voritor_lair_group_1') + mixedGroups.add('graul_mauler_lair_group_1') + mixedGroups.add('quenker_relic_reaper_group') + core.spawnService.addMixedSpawnArea(mixedGroups, -5877, -4239, 2170, 'dantooine') + return diff --git a/scripts/mobiles/spawnareas/dantooine_west_mixed_1.py b/scripts/mobiles/spawnareas/dantooine_west_mixed_1.py new file mode 100644 index 00000000..a0e8156a --- /dev/null +++ b/scripts/mobiles/spawnareas/dantooine_west_mixed_1.py @@ -0,0 +1,12 @@ +# Spawn Area file created with PSWG Planetary Spawn Tool +import sys +from java.util import Vector + +def addSpawnArea(core): + mixedGroups = Vector() + mixedGroups.add('kunga_central_group_1') + mixedGroups.add('piket_longhorn_lair_group_1') + mixedGroups.add('thune_lair_group_1') + mixedGroups.add('piket_longhorn_group_1') + core.spawnService.addMixedSpawnArea(mixedGroups, -6410, 0, 1986, 'dantooine') + return diff --git a/scripts/mobiles/spawnareas/force_sensitives_dynamic_1.py b/scripts/mobiles/spawnareas/force_sensitives_dynamic_1.py new file mode 100644 index 00000000..dca3c08d --- /dev/null +++ b/scripts/mobiles/spawnareas/force_sensitives_dynamic_1.py @@ -0,0 +1,10 @@ +# Spawn Area file created with PSWG Planetary Spawn Tool +import sys +from java.util import Vector + +def addSpawnArea(core): + dynamicGroups = Vector() + dynamicGroups.add('force_sensitives_wild_1') + dynamicGroups.add('dark_jedi_wild_1') + core.spawnService.addDynamicSpawnArea(dynamicGroups, 4362, 5488, 2560, 'dantooine') + return diff --git a/scripts/mobiles/spawnareas/keren_lair.py b/scripts/mobiles/spawnareas/keren_lair.py new file mode 100644 index 00000000..8723ee3f --- /dev/null +++ b/scripts/mobiles/spawnareas/keren_lair.py @@ -0,0 +1,6 @@ +import sys + +def addSpawnArea(core): + core.spawnService.addLairSpawnArea('naboo_starter', 1685, 2620, 1360, 'naboo') + + diff --git a/scripts/mobiles/spawnareas/krayt_graveyard_dynamic_1.py b/scripts/mobiles/spawnareas/krayt_graveyard_dynamic_1.py new file mode 100644 index 00000000..e69a5c02 --- /dev/null +++ b/scripts/mobiles/spawnareas/krayt_graveyard_dynamic_1.py @@ -0,0 +1,11 @@ +import sys +from java.util import Vector + +def addSpawnArea(core): + dynamicGroups = Vector() + dynamicGroups.add('adolescent_krayt_wild_1') + dynamicGroups.add('juvenile_krayts_wild_1') + dynamicGroups.add('canyon_krayt_wild_1') + dynamicGroups.add('giant_canyon_krayt_wild_1') + #core.spawnService.addDynamicSpawnArea(dynamicGroups, 6471, 4267, 1024, 'tatooine') + return \ No newline at end of file diff --git a/scripts/mobiles/spawnareas/krayt_graveyard_dynamic_2.py b/scripts/mobiles/spawnareas/krayt_graveyard_dynamic_2.py new file mode 100644 index 00000000..c4efc05e --- /dev/null +++ b/scripts/mobiles/spawnareas/krayt_graveyard_dynamic_2.py @@ -0,0 +1,8 @@ +import sys +from java.util import Vector + +def addSpawnArea(core): + dynamicGroups = Vector() + dynamicGroups.add('grand_canyon_krayt_wild_1') + #core.spawnService.addDynamicSpawnArea(dynamicGroups, 7431, 4762, 120, 'tatooine') + return \ No newline at end of file diff --git a/scripts/mobiles/spawnareas/krayt_graveyard_dynamic_3.py b/scripts/mobiles/spawnareas/krayt_graveyard_dynamic_3.py new file mode 100644 index 00000000..ca80d382 --- /dev/null +++ b/scripts/mobiles/spawnareas/krayt_graveyard_dynamic_3.py @@ -0,0 +1,8 @@ +import sys +from java.util import Vector + +def addSpawnArea(core): + dynamicGroups = Vector() + dynamicGroups.add('krayt_dragon_ancient_wild_1') + #core.spawnService.addDynamicSpawnArea(dynamicGroups, 7490, 4466, 10, 'tatooine') + return \ No newline at end of file diff --git a/scripts/mobiles/spawnareas/krayt_graveyard_dynamic_4.py b/scripts/mobiles/spawnareas/krayt_graveyard_dynamic_4.py new file mode 100644 index 00000000..cf2bd911 --- /dev/null +++ b/scripts/mobiles/spawnareas/krayt_graveyard_dynamic_4.py @@ -0,0 +1,8 @@ +import sys +from java.util import Vector + +def addSpawnArea(core): + dynamicGroups = Vector() + dynamicGroups.add('krayt_dragon_ancient_wild_1') + #core.spawnService.addDynamicSpawnArea(dynamicGroups, 6794, 4307, 10, 'tatooine') + return \ No newline at end of file diff --git a/scripts/mobiles/spawnareas/krayt_graveyard_dynamic_5.py b/scripts/mobiles/spawnareas/krayt_graveyard_dynamic_5.py new file mode 100644 index 00000000..19471168 --- /dev/null +++ b/scripts/mobiles/spawnareas/krayt_graveyard_dynamic_5.py @@ -0,0 +1,8 @@ +import sys +from java.util import Vector + +def addSpawnArea(core): + dynamicGroups = Vector() + dynamicGroups.add('krayt_dragon_ancient_wild_1') + #core.spawnService.addDynamicSpawnArea(dynamicGroups, 7493, 5992, 10, 'tatooine') + return \ No newline at end of file diff --git a/scripts/mobiles/spawnareas/mos_eisley_lair.py b/scripts/mobiles/spawnareas/mos_eisley_lair.py new file mode 100644 index 00000000..6b2de98f --- /dev/null +++ b/scripts/mobiles/spawnareas/mos_eisley_lair.py @@ -0,0 +1,5 @@ +import sys + +def addSpawnArea(core): + core.spawnService.addLairSpawnArea('tatooine_starter', 3730, -4655, 1024, 'tatooine') + return \ No newline at end of file diff --git a/scripts/mobiles/spawnareas/ns_stronghold_dyn_1.py b/scripts/mobiles/spawnareas/ns_stronghold_dyn_1.py new file mode 100644 index 00000000..6e8cca1d --- /dev/null +++ b/scripts/mobiles/spawnareas/ns_stronghold_dyn_1.py @@ -0,0 +1,9 @@ +# Spawn Area file created with PSWG Planetary Spawn Tool +import sys +from java.util import Vector + +def addSpawnArea(core): + dynamicGroups = Vector() + dynamicGroups.add('nightsisters_dyn_1') + core.spawnService.addDynamicSpawnArea(dynamicGroups, -4055, -81, 2990, 'dathomir') + return diff --git a/scripts/mobiles/spawnareas/smc_dny_1.py b/scripts/mobiles/spawnareas/smc_dny_1.py new file mode 100644 index 00000000..45d52a8d --- /dev/null +++ b/scripts/mobiles/spawnareas/smc_dny_1.py @@ -0,0 +1,9 @@ +# Spawn Area file created with PSWG Planetary Spawn Tool +import sys +from java.util import Vector + +def addSpawnArea(core): + dynamicGroups = Vector() + dynamicGroups.add('smc_dyn_1') + core.spawnService.addDynamicSpawnArea(dynamicGroups, 512, 4792, 1966, 'dathomir') + return diff --git a/scripts/mobiles/spawnareas/tuskens_dynamic_1.py b/scripts/mobiles/spawnareas/tuskens_dynamic_1.py new file mode 100644 index 00000000..eefb2d5e --- /dev/null +++ b/scripts/mobiles/spawnareas/tuskens_dynamic_1.py @@ -0,0 +1,5 @@ +import sys + +def addSpawnArea(core): + #core.spawnService.addDynamicSpawnArea('tuskens_wild_1', 4310, -4786, 250, 'tatooine') + return \ No newline at end of file diff --git a/scripts/mobiles/talus/aakuan_champion.py b/scripts/mobiles/talus/aakuan_champion.py new file mode 100644 index 00000000..5a0b916c --- /dev/null +++ b/scripts/mobiles/talus/aakuan_champion.py @@ -0,0 +1,44 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('aakuan_champion') + mobileTemplate.setLevel(53) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(1) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(True) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("aakuans") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(True) + mobileTemplate.setOptionsBitmask(192) + + templates = Vector() + templates.add('object/mobile/shared_dressed_aakuan_champion_zabrak_male_01.iff') + templates.add('object/mobile/shared_dressed_aakuan_champion_zabrak_female_01.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/sword/shared_sword_01.iff', 1, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('meleeHit') + mobileTemplate.setAttacks(attacks) + + lootPoolNames_1 = ['Junk'] + lootPoolChances_1 = [100] + lootGroupChance_1 = 100 + mobileTemplate.addToLootGroups(lootPoolNames_1,lootPoolChances_1,lootGroupChance_1) + + core.spawnService.addMobileTemplate('aakuan_champion', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/talus/aakuan_defender.py b/scripts/mobiles/talus/aakuan_defender.py new file mode 100644 index 00000000..9b415fbc --- /dev/null +++ b/scripts/mobiles/talus/aakuan_defender.py @@ -0,0 +1,44 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('aakuan_defender') + mobileTemplate.setLevel(47) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(1) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(True) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("aakuans") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(True) + mobileTemplate.setOptionsBitmask(192) + + templates = Vector() + templates.add('object/mobile/shared_dressed_aakuan_defender_human_male_01.iff') + templates.add('object/mobile/shared_dressed_aakuan_defender_human_female_01.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/polearm/shared_polearm_vibro_axe.iff', 1, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + lootPoolNames_1 = ['Junk'] + lootPoolChances_1 = [100] + lootGroupChance_1 = 100 + mobileTemplate.addToLootGroups(lootPoolNames_1,lootPoolChances_1,lootGroupChance_1) + + attacks = Vector() + mobileTemplate.setDefaultAttack('meleeHit') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('aakuan_defender', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/talus/aakuan_follower.py b/scripts/mobiles/talus/aakuan_follower.py new file mode 100644 index 00000000..2758d903 --- /dev/null +++ b/scripts/mobiles/talus/aakuan_follower.py @@ -0,0 +1,44 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('aakuan_follower') + mobileTemplate.setLevel(39) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(1) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("aakuans") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(True) + mobileTemplate.setOptionsBitmask(128) + + templates = Vector() + templates.add('object/mobile/shared_dressed_aakuan_follower_trandoshan_male_01.iff') + templates.add('object/mobile/shared_dressed_aakuan_follower_trandoshan_female_01.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/polearm/shared_polearm_vibro_axe.iff', 1, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('meleeHit') + mobileTemplate.setAttacks(attacks) + + lootPoolNames_1 = ['Junk'] + lootPoolChances_1 = [100] + lootGroupChance_1 = 100 + mobileTemplate.addToLootGroups(lootPoolNames_1,lootPoolChances_1,lootGroupChance_1) + + core.spawnService.addMobileTemplate('aakuan_follower', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/talus/aakuan_guardian.py b/scripts/mobiles/talus/aakuan_guardian.py new file mode 100644 index 00000000..49a31357 --- /dev/null +++ b/scripts/mobiles/talus/aakuan_guardian.py @@ -0,0 +1,44 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('aakuan_guardian') + mobileTemplate.setLevel(48) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(1) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(True) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("aakuans") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(True) + mobileTemplate.setOptionsBitmask(192) + + templates = Vector() + templates.add('object/mobile/shared_dressed_aakuan_guardian_trandoshan_male_01.iff') + templates.add('object/mobile/shared_dressed_aakuan_guardian_trandoshan_female_01.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/polearm/shared_polearm_vibro_axe.iff', 1, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('meleeHit') + mobileTemplate.setAttacks(attacks) + + lootPoolNames_1 = ['Junk'] + lootPoolChances_1 = [100] + lootGroupChance_1 = 100 + mobileTemplate.addToLootGroups(lootPoolNames_1,lootPoolChances_1,lootGroupChance_1) + + core.spawnService.addMobileTemplate('aakuan_guardian', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/talus/aakuan_keeper.py b/scripts/mobiles/talus/aakuan_keeper.py new file mode 100644 index 00000000..f44b0909 --- /dev/null +++ b/scripts/mobiles/talus/aakuan_keeper.py @@ -0,0 +1,44 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('aakuan_keeper') + mobileTemplate.setLevel(42) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(1) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(True) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("aakuans") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(True) + mobileTemplate.setOptionsBitmask(192) + + templates = Vector() + templates.add('object/mobile/shared_dressed_aakuan_keeper_zabrak_male_01.iff') + templates.add('object/mobile/shared_dressed_aakuan_keeper_zabrak_female_01.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/polearm/shared_polearm_vibro_axe.iff', 1, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('meleeHit') + mobileTemplate.setAttacks(attacks) + + lootPoolNames_1 = ['Junk'] + lootPoolChances_1 = [100] + lootGroupChance_1 = 100 + mobileTemplate.addToLootGroups(lootPoolNames_1,lootPoolChances_1,lootGroupChance_1) + + core.spawnService.addMobileTemplate('aakuan_keeper', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/talus/aakuan_sentinal.py b/scripts/mobiles/talus/aakuan_sentinal.py new file mode 100644 index 00000000..82b78145 --- /dev/null +++ b/scripts/mobiles/talus/aakuan_sentinal.py @@ -0,0 +1,44 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('aakuan_sentinal') + mobileTemplate.setLevel(45) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(1) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(True) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("aakuans") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(True) + mobileTemplate.setOptionsBitmask(192) + + templates = Vector() + templates.add('object/mobile/shared_dressed_aakuan_sentinal_rodian_male_01.iff') + templates.add('object/mobile/shared_dressed_aakuan_sentinal_rodian_female_01.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/sword/shared_sword_01.iff', 1, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('meleeHit') + mobileTemplate.setAttacks(attacks) + + lootPoolNames_1 = ['Junk'] + lootPoolChances_1 = [100] + lootGroupChance_1 = 100 + mobileTemplate.addToLootGroups(lootPoolNames_1,lootPoolChances_1,lootGroupChance_1) + + core.spawnService.addMobileTemplate('aakuan_sentinal', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/talus/aakuan_steward.py b/scripts/mobiles/talus/aakuan_steward.py new file mode 100644 index 00000000..bb480e1f --- /dev/null +++ b/scripts/mobiles/talus/aakuan_steward.py @@ -0,0 +1,44 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('aakuan_steward') + mobileTemplate.setLevel(43) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(1) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(True) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("aakuans") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(True) + mobileTemplate.setOptionsBitmask(192) + + templates = Vector() + templates.add('object/mobile/shared_dressed_aakuan_steward_human_male_01.iff') + templates.add('object/mobile/shared_dressed_aakuan_steward_human_female_01.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/polearm/shared_polearm_vibro_axe.iff', 1, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('meleeHit') + mobileTemplate.setAttacks(attacks) + + lootPoolNames_1 = ['Junk'] + lootPoolChances_1 = [100] + lootGroupChance_1 = 100 + mobileTemplate.addToLootGroups(lootPoolNames_1,lootPoolChances_1,lootGroupChance_1) + + core.spawnService.addMobileTemplate('aakuan_steward', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/talus/aakuan_warder.py b/scripts/mobiles/talus/aakuan_warder.py new file mode 100644 index 00000000..e7aed24f --- /dev/null +++ b/scripts/mobiles/talus/aakuan_warder.py @@ -0,0 +1,44 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('aakuan_warder') + mobileTemplate.setLevel(52) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(1) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(True) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("aakuans") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(True) + mobileTemplate.setOptionsBitmask(192) + + templates = Vector() + templates.add('object/mobile/shared_dressed_aakuan_warder_zabrak_male_01.iff') + templates.add('object/mobile/shared_dressed_aakuan_warder_zabrak_female_01.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/polearm/shared_polearm_vibro_axe.iff', 1, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('meleeHit') + mobileTemplate.setAttacks(attacks) + + lootPoolNames_1 = ['Junk'] + lootPoolChances_1 = [100] + lootGroupChance_1 = 100 + mobileTemplate.addToLootGroups(lootPoolNames_1,lootPoolChances_1,lootGroupChance_1) + + core.spawnService.addMobileTemplate('aakuan_steward', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/talus/berserk_kahmurra.py b/scripts/mobiles/talus/berserk_kahmurra.py new file mode 100644 index 00000000..fb2b9925 --- /dev/null +++ b/scripts/mobiles/talus/berserk_kahmurra.py @@ -0,0 +1,44 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('berserk_kahmurra') + mobileTemplate.setLevel(46) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(True) + mobileTemplate.setScale(1) + mobileTemplate.setMeatType("Herbivore Meat") + mobileTemplate.setMeatAmount(50) + mobileTemplate.setHideType("Bristley Hide") + mobileTemplate.setHideAmount(50) + mobileTemplate.setBoneType("Mammal Bones") + mobileTemplate.setBoneAmount(35) + mobileTemplate.setSocialGroup("kahmurra") + mobileTemplate.setAssistRange(6) + mobileTemplate.setStalker(False) + mobileTemplate.setOptionsBitmask(128) + + templates = Vector() + templates.add('object/mobile/shared_kahmurra.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('berserk_kahmurra', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/talus/binayre_chief.py b/scripts/mobiles/talus/binayre_chief.py new file mode 100644 index 00000000..0e813b90 --- /dev/null +++ b/scripts/mobiles/talus/binayre_chief.py @@ -0,0 +1,44 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('binayre_chief') + mobileTemplate.setLevel(47) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(15) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(1) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("binayre") + mobileTemplate.setAssistRange(6) + mobileTemplate.setStalker(True) + mobileTemplate.setOptionsBitmask(192) + + templates = Vector() + templates.add('object/mobile/shared_dressed_binayre_chief_human_male_01.iff') + templates.add('object/mobile/shared_dressed_binayre_chief_human_female_01.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/rifle/shared_rifle_e11.iff', 1, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedShot') + mobileTemplate.setAttacks(attacks) + + lootPoolNames_1 = ['Junk'] + lootPoolChances_1 = [100] + lootGroupChance_1 = 100 + mobileTemplate.addToLootGroups(lootPoolNames_1,lootPoolChances_1,lootGroupChance_1) + + core.spawnService.addMobileTemplate('binayre_chief', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/talus/binayre_hooligan.py b/scripts/mobiles/talus/binayre_hooligan.py new file mode 100644 index 00000000..98552d7e --- /dev/null +++ b/scripts/mobiles/talus/binayre_hooligan.py @@ -0,0 +1,44 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('binayre_hooligan') + mobileTemplate.setLevel(36) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(1) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("binayre") + mobileTemplate.setAssistRange(6) + mobileTemplate.setStalker(True) + mobileTemplate.setOptionsBitmask(192) + + templates = Vector() + templates.add('object/mobile/shared_dressed_binayre_hooligan_zabrak_male_01.iff') + templates.add('object/mobile/shared_dressed_binayre_hooligan_zabrak_female_01.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/polearm/shared_polearm_vibro_axe.iff', 1, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('meleeHit') + mobileTemplate.setAttacks(attacks) + + lootPoolNames_1 = ['Junk'] + lootPoolChances_1 = [100] + lootGroupChance_1 = 100 + mobileTemplate.addToLootGroups(lootPoolNames_1,lootPoolChances_1,lootGroupChance_1) + + core.spawnService.addMobileTemplate('binayre_hooligan', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/talus/binayre_pirate.py b/scripts/mobiles/talus/binayre_pirate.py new file mode 100644 index 00000000..68620b29 --- /dev/null +++ b/scripts/mobiles/talus/binayre_pirate.py @@ -0,0 +1,44 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('binayre_pirate') + mobileTemplate.setLevel(43) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(15) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(1) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("binayre") + mobileTemplate.setAssistRange(6) + mobileTemplate.setStalker(True) + mobileTemplate.setOptionsBitmask(192) + + templates = Vector() + templates.add('object/mobile/shared_dressed_binayre_pirate_zabrak_male_01.iff') + templates.add('object/mobile/shared_dressed_binayre_pirate_zabrak_female_01.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/carbine/shared_carbine_e11.iff', 1, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedShot') + mobileTemplate.setAttacks(attacks) + + lootPoolNames_1 = ['Junk'] + lootPoolChances_1 = [100] + lootGroupChance_1 = 100 + mobileTemplate.addToLootGroups(lootPoolNames_1,lootPoolChances_1,lootGroupChance_1) + + core.spawnService.addMobileTemplate('binayre_pirate', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/talus/binayre_ruffian.py b/scripts/mobiles/talus/binayre_ruffian.py new file mode 100644 index 00000000..6e5840d0 --- /dev/null +++ b/scripts/mobiles/talus/binayre_ruffian.py @@ -0,0 +1,44 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('binayre_ruffian') + mobileTemplate.setLevel(43) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(15) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(1) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("binayre") + mobileTemplate.setAssistRange(6) + mobileTemplate.setStalker(True) + mobileTemplate.setOptionsBitmask(192) + + templates = Vector() + templates.add('object/mobile/shared_dressed_binayre_ruffian_trandoshan_male_01.iff') + templates.add('object/mobile/shared_dressed_binayre_ruffian_trandoshan_female_01.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/pistol/shared_pistol_d18.iff', 1, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedShot') + mobileTemplate.setAttacks(attacks) + + lootPoolNames_1 = ['Junk'] + lootPoolChances_1 = [100] + lootGroupChance_1 = 100 + mobileTemplate.addToLootGroups(lootPoolNames_1,lootPoolChances_1,lootGroupChance_1) + + core.spawnService.addMobileTemplate('binayre_ruffian', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/talus/binayre_scalawag.py b/scripts/mobiles/talus/binayre_scalawag.py new file mode 100644 index 00000000..226ef631 --- /dev/null +++ b/scripts/mobiles/talus/binayre_scalawag.py @@ -0,0 +1,44 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('binayre_scalawag') + mobileTemplate.setLevel(39) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(15) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(1) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("binayre") + mobileTemplate.setAssistRange(6) + mobileTemplate.setStalker(True) + mobileTemplate.setOptionsBitmask(192) + + templates = Vector() + templates.add('object/mobile/shared_dressed_binayre_scalawag_twk_male_01.iff') + templates.add('object/mobile/shared_dressed_binayre_scalawag_twk_female_01.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/pistol/shared_pistol_d18.iff', 1, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedShot') + mobileTemplate.setAttacks(attacks) + + lootPoolNames_1 = ['Junk'] + lootPoolChances_1 = [100] + lootGroupChance_1 = 100 + mobileTemplate.addToLootGroups(lootPoolNames_1,lootPoolChances_1,lootGroupChance_1) + + core.spawnService.addMobileTemplate('binayre_scalawag', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/talus/binayre_smuggler.py b/scripts/mobiles/talus/binayre_smuggler.py new file mode 100644 index 00000000..650bd834 --- /dev/null +++ b/scripts/mobiles/talus/binayre_smuggler.py @@ -0,0 +1,44 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('binayre_smuggler') + mobileTemplate.setLevel(45) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(15) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(1) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("binayre") + mobileTemplate.setAssistRange(6) + mobileTemplate.setStalker(False) + mobileTemplate.setOptionsBitmask(192) + + templates = Vector() + templates.add('object/mobile/shared_dressed_binayre_smuggler_trandoshan_male_01.iff') + templates.add('object/mobile/shared_dressed_binayre_smuggler_trandoshan_female_01.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/carbine/shared_carbine_e11.iff', 1, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedShot') + mobileTemplate.setAttacks(attacks) + + lootPoolNames_1 = ['Junk'] + lootPoolChances_1 = [100] + lootGroupChance_1 = 100 + mobileTemplate.addToLootGroups(lootPoolNames_1,lootPoolChances_1,lootGroupChance_1) + + core.spawnService.addMobileTemplate('binayre_smuggler', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/talus/black_sun_initiate.py b/scripts/mobiles/talus/black_sun_initiate.py new file mode 100644 index 00000000..649925ba --- /dev/null +++ b/scripts/mobiles/talus/black_sun_initiate.py @@ -0,0 +1,44 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('black_sun_initiate') + mobileTemplate.setLevel(17) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(15) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(1) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("bandit") + mobileTemplate.setAssistRange(6) + mobileTemplate.setStalker(True) + mobileTemplate.setOptionsBitmask(128) + + + templates = Vector() + templates.add('object/mobile/shared_dressed_black_sun_thug.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/carbine/shared_carbine_e11.iff', 1, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedShot') + mobileTemplate.setAttacks(attacks) + + lootPoolNames_1 = ['Junk'] + lootPoolChances_1 = [100] + lootGroupChance_1 = 100 + mobileTemplate.addToLootGroups(lootPoolNames_1,lootPoolChances_1,lootGroupChance_1) + + core.spawnService.addMobileTemplate('black_sun_initiate', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/talus/black_sun_minion.py b/scripts/mobiles/talus/black_sun_minion.py new file mode 100644 index 00000000..cd938016 --- /dev/null +++ b/scripts/mobiles/talus/black_sun_minion.py @@ -0,0 +1,44 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('black_sun_minion') + mobileTemplate.setLevel(21) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(15) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(1) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("bandit") + mobileTemplate.setAssistRange(6) + mobileTemplate.setStalker(True) + mobileTemplate.setOptionsBitmask(128) + + + templates = Vector() + templates.add('object/mobile/shared_dressed_black_sun_henchman.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/carbine/shared_carbine_e11.iff', 1, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedShot') + mobileTemplate.setAttacks(attacks) + + lootPoolNames_1 = ['Junk'] + lootPoolChances_1 = [100] + lootGroupChance_1 = 100 + mobileTemplate.addToLootGroups(lootPoolNames_1,lootPoolChances_1,lootGroupChance_1) + + core.spawnService.addMobileTemplate('black_sun_minion', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/talus/black_sun_smuggler.py b/scripts/mobiles/talus/black_sun_smuggler.py new file mode 100644 index 00000000..0fcc21ee --- /dev/null +++ b/scripts/mobiles/talus/black_sun_smuggler.py @@ -0,0 +1,43 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('black_sun_smuggler') + mobileTemplate.setLevel(19) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(15) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(1) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("bandit") + mobileTemplate.setAssistRange(6) + mobileTemplate.setStalker(True) + mobileTemplate.setOptionsBitmask(128) + + templates = Vector() + templates.add('object/mobile/shared_dressed_black_sun_thug.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/carbine/shared_carbine_e11.iff', 1, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedShot') + mobileTemplate.setAttacks(attacks) + + lootPoolNames_1 = ['Junk'] + lootPoolChances_1 = [100] + lootGroupChance_1 = 100 + mobileTemplate.addToLootGroups(lootPoolNames_1,lootPoolChances_1,lootGroupChance_1) + + core.spawnService.addMobileTemplate('black_sun_smuggler', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/talus/borvos_mutant_kahmurra.py b/scripts/mobiles/talus/borvos_mutant_kahmurra.py new file mode 100644 index 00000000..90f0fb7c --- /dev/null +++ b/scripts/mobiles/talus/borvos_mutant_kahmurra.py @@ -0,0 +1,44 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('rabid_mutant_kahmurra') + mobileTemplate.setLevel(23) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(5) + mobileTemplate.setMaxSpawnDistance(10) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setMeatType("Herbivore Meat") + mobileTemplate.setMeatAmount(50) + mobileTemplate.setHideType("Bristley Hide") + mobileTemplate.setBoneAmount(30) + mobileTemplate.setBoneType("Mammal Bone") + mobileTemplate.setHideAmount(35) + mobileTemplate.setSocialGroup("kahmurra") + mobileTemplate.setAssistRange(6) + mobileTemplate.setStalker(True) + mobileTemplate.setOptionsBitmask(128) + + templates = Vector() + templates.add('object/mobile/shared_kahmurra.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('borvos_mutant_kahmurra', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/talus/brood_i_arachne.py b/scripts/mobiles/talus/brood_i_arachne.py new file mode 100644 index 00000000..5f051315 --- /dev/null +++ b/scripts/mobiles/talus/brood_i_arachne.py @@ -0,0 +1,38 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('talus_nashal_brood1_arachne') + mobileTemplate.setLevel(41) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("brood arachne") + mobileTemplate.setAssistRange(12) + mobileTemplate.setStalker(True) + mobileTemplate.setOptionsBitmask(192) + + templates = Vector() + templates.add('object/mobile/shared_angler.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('brood_i_arachne', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/talus/brood_i_aurek_arachne.py b/scripts/mobiles/talus/brood_i_aurek_arachne.py new file mode 100644 index 00000000..9720a841 --- /dev/null +++ b/scripts/mobiles/talus/brood_i_aurek_arachne.py @@ -0,0 +1,38 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('talus_nashal_brood1a_arachne') + mobileTemplate.setLevel(42) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(12) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("brood arachne") + mobileTemplate.setAssistRange(12) + mobileTemplate.setStalker(True) + mobileTemplate.setOptionsBitmask(192) + + templates = Vector() + templates.add('object/mobile/shared_gaping_spider.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureRangedAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('brood_i_aurek_arachne', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/talus/brood_ii_arachne.py b/scripts/mobiles/talus/brood_ii_arachne.py new file mode 100644 index 00000000..9d290cad --- /dev/null +++ b/scripts/mobiles/talus/brood_ii_arachne.py @@ -0,0 +1,38 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('talus_nashal_brood2_arachne') + mobileTemplate.setLevel(42) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1.5) + mobileTemplate.setSocialGroup("brood arachne") + mobileTemplate.setAssistRange(12) + mobileTemplate.setStalker(True) + mobileTemplate.setOptionsBitmask(192) + + templates = Vector() + templates.add('object/mobile/shared_angler.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('brood_ii_arachne', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/talus/brood_ii_aurek_arachne.py b/scripts/mobiles/talus/brood_ii_aurek_arachne.py new file mode 100644 index 00000000..bbe87388 --- /dev/null +++ b/scripts/mobiles/talus/brood_ii_aurek_arachne.py @@ -0,0 +1,38 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('talus_nashal_brood2a_arachne') + mobileTemplate.setLevel(43) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(12) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(True) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("brood arachne") + mobileTemplate.setAssistRange(12) + mobileTemplate.setStalker(True) + mobileTemplate.setOptionsBitmask(192) + + templates = Vector() + templates.add('object/mobile/shared_gaping_spider.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureRangedAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('brood_ii_aurek_arachne', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/talus/brood_v_arachne.py b/scripts/mobiles/talus/brood_v_arachne.py new file mode 100644 index 00000000..ba226eb2 --- /dev/null +++ b/scripts/mobiles/talus/brood_v_arachne.py @@ -0,0 +1,38 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('talus_nashal_brood5_arachne') + mobileTemplate.setLevel(42) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1.75) + mobileTemplate.setSocialGroup("brood arachne") + mobileTemplate.setAssistRange(12) + mobileTemplate.setStalker(True) + mobileTemplate.setOptionsBitmask(192) + + templates = Vector() + templates.add('object/mobile/shared_razor_angler_hue.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('brood_v_arachne', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/talus/brood_v_aurek_arachne.py b/scripts/mobiles/talus/brood_v_aurek_arachne.py new file mode 100644 index 00000000..84bffd8a --- /dev/null +++ b/scripts/mobiles/talus/brood_v_aurek_arachne.py @@ -0,0 +1,38 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('talus_nashal_brood5a_arachne') + mobileTemplate.setLevel(45) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(12) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(True) + mobileTemplate.setScale(1.5) + mobileTemplate.setSocialGroup("brood arachne") + mobileTemplate.setAssistRange(12) + mobileTemplate.setStalker(True) + mobileTemplate.setOptionsBitmask(192) + + templates = Vector() + templates.add('object/mobile/shared_bane_back_spider.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureRangedAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('brood_v_aurek_arachne', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/talus/brood_x_arachne.py b/scripts/mobiles/talus/brood_x_arachne.py new file mode 100644 index 00000000..a4f6d569 --- /dev/null +++ b/scripts/mobiles/talus/brood_x_arachne.py @@ -0,0 +1,38 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('talus_nashal_brood10_arachne') + mobileTemplate.setLevel(45) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(2) + mobileTemplate.setSocialGroup("brood arachne") + mobileTemplate.setAssistRange(12) + mobileTemplate.setStalker(True) + mobileTemplate.setOptionsBitmask(192) + + templates = Vector() + templates.add('object/mobile/shared_razor_angler_hue.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('brood_x_arachne', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/talus/brood_x_aurek_arachne.py b/scripts/mobiles/talus/brood_x_aurek_arachne.py new file mode 100644 index 00000000..57048a94 --- /dev/null +++ b/scripts/mobiles/talus/brood_x_aurek_arachne.py @@ -0,0 +1,38 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('talus_nashal_brood10a_arachne') + mobileTemplate.setLevel(47) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(12) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(True) + mobileTemplate.setScale(2) + mobileTemplate.setSocialGroup("brood arachne") + mobileTemplate.setAssistRange(12) + mobileTemplate.setStalker(True) + mobileTemplate.setOptionsBitmask(192) + + templates = Vector() + templates.add('object/mobile/shared_bane_back_spider_hue.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureRangedAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('brood_x_aurek_arachne', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/talus/chunker_braggart.py b/scripts/mobiles/talus/chunker_braggart.py new file mode 100644 index 00000000..158e7f4a --- /dev/null +++ b/scripts/mobiles/talus/chunker_braggart.py @@ -0,0 +1,43 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('chunker_braggart') + mobileTemplate.setLevel(5) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(15) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(1) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("chunker gang") + mobileTemplate.setAssistRange(6) + mobileTemplate.setStalker(True) + mobileTemplate.setOptionsBitmask(128) + + templates = Vector() + templates.add('object/mobile/shared_dressed_black_sun_henchman.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/pistol/shared_pistol_d18.iff', 1, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedShot') + mobileTemplate.setAttacks(attacks) + + lootPoolNames_1 = ['Junk'] + lootPoolChances_1 = [100] + lootGroupChance_1 = 100 + mobileTemplate.addToLootGroups(lootPoolNames_1,lootPoolChances_1,lootGroupChance_1) + + core.spawnService.addMobileTemplate('chunker_braggart', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/talus/chunker_bruiser.py b/scripts/mobiles/talus/chunker_bruiser.py new file mode 100644 index 00000000..6bacb83a --- /dev/null +++ b/scripts/mobiles/talus/chunker_bruiser.py @@ -0,0 +1,44 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('chunker_bruiser') + mobileTemplate.setLevel(10) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(15) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(1) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("chunker gang") + mobileTemplate.setAssistRange(4) + mobileTemplate.setStalker(True) + mobileTemplate.setOptionsBitmask(128) + + + templates = Vector() + templates.add('object/mobile/shared_dressed_talus_ttlp_soldier_hum_f_01.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/carbine/shared_carbine_e11.iff', 1, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedShot') + mobileTemplate.setAttacks(attacks) + + lootPoolNames_1 = ['Junk'] + lootPoolChances_1 = [100] + lootGroupChance_1 = 100 + mobileTemplate.addToLootGroups(lootPoolNames_1,lootPoolChances_1,lootGroupChance_1) + + core.spawnService.addMobileTemplate('chunker_bruiser', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/talus/chunker_bully.py b/scripts/mobiles/talus/chunker_bully.py new file mode 100644 index 00000000..455bcf69 --- /dev/null +++ b/scripts/mobiles/talus/chunker_bully.py @@ -0,0 +1,43 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('chunker_bully') + mobileTemplate.setLevel(8) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(15) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(1) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("chunker gang") + mobileTemplate.setAssistRange(4) + mobileTemplate.setStalker(True) + mobileTemplate.setOptionsBitmask(128) + + templates = Vector() + templates.add('object/mobile/shared_dressed_talus_ttlp_soldier_hum_m_02.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/rifle/shared_rifle_e11.iff', 1, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedShot') + mobileTemplate.setAttacks(attacks) + + lootPoolNames_1 = ['Junk'] + lootPoolChances_1 = [100] + lootGroupChance_1 = 100 + mobileTemplate.addToLootGroups(lootPoolNames_1,lootPoolChances_1,lootGroupChance_1) + + core.spawnService.addMobileTemplate('chunker_bully', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/talus/chunker_goon.py b/scripts/mobiles/talus/chunker_goon.py new file mode 100644 index 00000000..3b9886de --- /dev/null +++ b/scripts/mobiles/talus/chunker_goon.py @@ -0,0 +1,43 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('chunker_goon') + mobileTemplate.setLevel(4) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(15) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(1) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("chunker gang") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(True) + mobileTemplate.setOptionsBitmask(128) + + templates = Vector() + templates.add('object/mobile/shared_dressed_talus_ttlp_soldier_hum_m_01.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/pistol/shared_pistol_d18.iff', 1, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedShot') + mobileTemplate.setAttacks(attacks) + + lootPoolNames_1 = ['Junk'] + lootPoolChances_1 = [100] + lootGroupChance_1 = 100 + mobileTemplate.addToLootGroups(lootPoolNames_1,lootPoolChances_1,lootGroupChance_1) + + core.spawnService.addMobileTemplate('chunker_goon', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/talus/chunker_mooch.py b/scripts/mobiles/talus/chunker_mooch.py new file mode 100644 index 00000000..f9386446 --- /dev/null +++ b/scripts/mobiles/talus/chunker_mooch.py @@ -0,0 +1,43 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('chunker_mooch') + mobileTemplate.setLevel(4) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(15) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(1) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("chunker gang") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(True) + mobileTemplate.setOptionsBitmask(128) + + templates = Vector() + templates.add('object/mobile/shared_dressed_talus_ttlp_soldier_hum_f_01.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/pistol/shared_pistol_d18.iff', 1, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedShot') + mobileTemplate.setAttacks(attacks) + + lootPoolNames_1 = ['Junk'] + lootPoolChances_1 = [100] + lootGroupChance_1 = 100 + mobileTemplate.addToLootGroups(lootPoolNames_1,lootPoolChances_1,lootGroupChance_1) + + core.spawnService.addMobileTemplate('chunker_mooch', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/talus/chunker_nitwit.py b/scripts/mobiles/talus/chunker_nitwit.py new file mode 100644 index 00000000..e5c388f0 --- /dev/null +++ b/scripts/mobiles/talus/chunker_nitwit.py @@ -0,0 +1,43 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('chunker_nitwit') + mobileTemplate.setLevel(1) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(15) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(1) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("chunker gang") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(True) + mobileTemplate.setOptionsBitmask(128) + + templates = Vector() + templates.add('object/mobile/shared_dressed_talus_ttlp_soldier_hum_m_02.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/pistol/shared_pistol_d18.iff', 1, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedShot') + mobileTemplate.setAttacks(attacks) + + lootPoolNames_1 = ['Junk'] + lootPoolChances_1 = [100] + lootGroupChance_1 = 100 + mobileTemplate.addToLootGroups(lootPoolNames_1,lootPoolChances_1,lootGroupChance_1) + + core.spawnService.addMobileTemplate('chunker_nitwit', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/talus/chunker_pest.py b/scripts/mobiles/talus/chunker_pest.py new file mode 100644 index 00000000..86786b1a --- /dev/null +++ b/scripts/mobiles/talus/chunker_pest.py @@ -0,0 +1,43 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('chunker_pest') + mobileTemplate.setLevel(2) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(1) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("chunker gang") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(True) + mobileTemplate.setOptionsBitmask(128) + + templates = Vector() + templates.add('object/mobile/shared_dressed_talus_ttlp_soldier_hum_m_02.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/polearm/shared_polearm_vibro_axe.iff', 1, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('meleeHit') + mobileTemplate.setAttacks(attacks) + + lootPoolNames_1 = ['Junk'] + lootPoolChances_1 = [100] + lootGroupChance_1 = 100 + mobileTemplate.addToLootGroups(lootPoolNames_1,lootPoolChances_1,lootGroupChance_1) + + core.spawnService.addMobileTemplate('chunker_pest', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/talus/chunker_punk.py b/scripts/mobiles/talus/chunker_punk.py new file mode 100644 index 00000000..ef28079b --- /dev/null +++ b/scripts/mobiles/talus/chunker_punk.py @@ -0,0 +1,43 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('chunker_punk') + mobileTemplate.setLevel(2) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(15) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(1) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("chunker gang") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(True) + mobileTemplate.setOptionsBitmask(128) + + templates = Vector() + templates.add('object/mobile/shared_dressed_talus_ttlp_soldier_hum_m_01.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/pistol/shared_pistol_d18.iff', 1, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedShot') + mobileTemplate.setAttacks(attacks) + + lootPoolNames_1 = ['Junk'] + lootPoolChances_1 = [100] + lootGroupChance_1 = 100 + mobileTemplate.addToLootGroups(lootPoolNames_1,lootPoolChances_1,lootGroupChance_1) + + core.spawnService.addMobileTemplate('chunker_punk', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/talus/chunker_swindler.py b/scripts/mobiles/talus/chunker_swindler.py new file mode 100644 index 00000000..b53b7a1d --- /dev/null +++ b/scripts/mobiles/talus/chunker_swindler.py @@ -0,0 +1,43 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('chunker_swindler') + mobileTemplate.setLevel(5) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(15) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(1) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("chunker gang") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(True) + mobileTemplate.setOptionsBitmask(128) + + templates = Vector() + templates.add('object/mobile/shared_dressed_talus_ttlp_soldier_hum_m_02.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/pistol/shared_pistol_d18.iff', 1, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedShot') + mobileTemplate.setAttacks(attacks) + + lootPoolNames_1 = ['Junk'] + lootPoolChances_1 = [100] + lootGroupChance_1 = 100 + mobileTemplate.addToLootGroups(lootPoolNames_1,lootPoolChances_1,lootGroupChance_1) + + core.spawnService.addMobileTemplate('chunker_swindler', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/talus/claw_bodyguard.py b/scripts/mobiles/talus/claw_bodyguard.py new file mode 100644 index 00000000..f27c34f8 --- /dev/null +++ b/scripts/mobiles/talus/claw_bodyguard.py @@ -0,0 +1,44 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('clone_relics__claw_bodyguard_02') + mobileTemplate.setLevel(36) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("clone relics claw") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(False) + mobileTemplate.setOptionsBitmask(192) + + templates = Vector() + templates.add('object/mobile/shared_ep3_clone_relics_claw_bodyguard_02.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('meleeHit') + mobileTemplate.setAttacks(attacks) + + lootPoolNames_1 = ['Junk'] + lootPoolChances_1 = [100] + lootGroupChance_1 = 100 + mobileTemplate.addToLootGroups(lootPoolNames_1,lootPoolChances_1,lootGroupChance_1) + + + core.spawnService.addMobileTemplate('claw_bodyguard', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/talus/claw_bodyguard_01.py b/scripts/mobiles/talus/claw_bodyguard_01.py new file mode 100644 index 00000000..bfd16759 --- /dev/null +++ b/scripts/mobiles/talus/claw_bodyguard_01.py @@ -0,0 +1,43 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('clone_relics__claw_bodyguard_02') + mobileTemplate.setLevel(36) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("clone relics claw") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(False) + mobileTemplate.setOptionsBitmask(192) + + templates = Vector() + templates.add('object/mobile/shared_ep3_clone_relics_claw_bodyguard_02.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('meleeHit') + mobileTemplate.setAttacks(attacks) + + lootPoolNames_1 = ['Junk'] + lootPoolChances_1 = [100] + lootGroupChance_1 = 100 + mobileTemplate.addToLootGroups(lootPoolNames_1,lootPoolChances_1,lootGroupChance_1) + + core.spawnService.addMobileTemplate('claw_bodyguard_01', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/talus/claw_thug.py b/scripts/mobiles/talus/claw_thug.py new file mode 100644 index 00000000..381f4a21 --- /dev/null +++ b/scripts/mobiles/talus/claw_thug.py @@ -0,0 +1,46 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('clone_relics__claw_grunt') + mobileTemplate.setLevel(20) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("clone relics claw") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(False) + + templates = Vector() + templates.add('object/mobile/shared_ep3_clone_relics_claw_grunt_01.iff') + templates.add('object/mobile/shared_ep3_clone_relics_claw_grunt_02.iff') + templates.add('object/mobile/shared_ep3_clone_relics_claw_grunt_03.iff') + templates.add('object/mobile/shared_ep3_clone_relics_claw_grunt_04.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('meleeHit') + mobileTemplate.setAttacks(attacks) + + lootPoolNames_1 = ['Junk'] + lootPoolChances_1 = [100] + lootGroupChance_1 = 100 + mobileTemplate.addToLootGroups(lootPoolNames_1,lootPoolChances_1,lootGroupChance_1) + + + core.spawnService.addMobileTemplate('claw_thug', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/talus/clipped_fynock.py b/scripts/mobiles/talus/clipped_fynock.py new file mode 100644 index 00000000..4eeab952 --- /dev/null +++ b/scripts/mobiles/talus/clipped_fynock.py @@ -0,0 +1,43 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + mobileTemplate.setCreatureName('clipped_fynock') + mobileTemplate.setLevel(36) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(5) + mobileTemplate.setMaxSpawnDistance(10) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setMeatType("Avian Meat") + mobileTemplate.setMeatAmount(20) + mobileTemplate.setHideType("Leathery Hide") + mobileTemplate.setBoneAmount(30) + mobileTemplate.setBoneType("Avian Bone") + mobileTemplate.setHideAmount(7) + mobileTemplate.setSocialGroup("fynock") + mobileTemplate.setAssistRange(6) + mobileTemplate.setStalker(False) + mobileTemplate.setOptionsBitmask(128) + + templates = Vector() + templates.add('object/mobile/shared_fynock.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('clipped_fynock', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/talus/crazed_roba.py b/scripts/mobiles/talus/crazed_roba.py new file mode 100644 index 00000000..75dea797 --- /dev/null +++ b/scripts/mobiles/talus/crazed_roba.py @@ -0,0 +1,43 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + mobileTemplate.setCreatureName('crazed_roba') + mobileTemplate.setLevel(40) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(5) + mobileTemplate.setMaxSpawnDistance(10) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setMeatType("Carnivore Meat") + mobileTemplate.setMeatAmount(12) + mobileTemplate.setHideType("Leathery Hide") + mobileTemplate.setBoneAmount(18) + mobileTemplate.setBoneType("Mammal Bone") + mobileTemplate.setHideAmount(12) + mobileTemplate.setSocialGroup("self") + mobileTemplate.setAssistRange(6) + mobileTemplate.setStalker(False) + mobileTemplate.setOptionsBitmask(192) + + templates = Vector() + templates.add('object/mobile/shared_roba.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('crazed_roba', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/talus/decay_mite.py b/scripts/mobiles/talus/decay_mite.py new file mode 100644 index 00000000..55b7372d --- /dev/null +++ b/scripts/mobiles/talus/decay_mite.py @@ -0,0 +1,41 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('decay_mite') + mobileTemplate.setLevel(36) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setMeatType("Insect Meat") + mobileTemplate.setMeatAmount(4) + mobileTemplate.setHideType("Scaley Hide") + mobileTemplate.setHideAmount(3) + mobileTemplate.setSocialGroup("decay mite") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(False) + + templates = Vector() + templates.add('object/mobile/shared_bark_mite_hue.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('decay_mite', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/talus/doak_sif.py b/scripts/mobiles/talus/doak_sif.py new file mode 100644 index 00000000..82665c90 --- /dev/null +++ b/scripts/mobiles/talus/doak_sif.py @@ -0,0 +1,43 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('doak_sif') + mobileTemplate.setLevel(48) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(15) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(1) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(True) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("sif") + mobileTemplate.setAssistRange(6) + mobileTemplate.setStalker(True) + mobileTemplate.setOptionsBitmask(192) + + templates = Vector() + templates.add('object/mobile/shared_dressed_doak_sif.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/pistol/shared_pistol_d18.iff', 1, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedShot') + mobileTemplate.setAttacks(attacks) + + lootPoolNames_1 = ['Junk'] + lootPoolChances_1 = [100] + lootGroupChance_1 = 100 + mobileTemplate.addToLootGroups(lootPoolNames_1,lootPoolChances_1,lootGroupChance_1) + + core.spawnService.addMobileTemplate('doak_sif', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/talus/docile_kahmurra.py b/scripts/mobiles/talus/docile_kahmurra.py new file mode 100644 index 00000000..deba54a0 --- /dev/null +++ b/scripts/mobiles/talus/docile_kahmurra.py @@ -0,0 +1,43 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + mobileTemplate.setCreatureName('docile_kahmurra') + mobileTemplate.setLevel(37) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(5) + mobileTemplate.setMaxSpawnDistance(10) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setMeatType("Herbivore Meat") + mobileTemplate.setMeatAmount(45) + mobileTemplate.setHideType("Bristley Hide") + mobileTemplate.setBoneAmount(27) + mobileTemplate.setBoneType("Mammal Bone") + mobileTemplate.setHideAmount(32) + mobileTemplate.setSocialGroup("self") + mobileTemplate.setAssistRange(6) + mobileTemplate.setStalker(False) + mobileTemplate.setOptionsBitmask(128) + + templates = Vector() + templates.add('object/mobile/shared_kahmurra.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('docile_kahmurra', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/talus/dung_mite.py b/scripts/mobiles/talus/dung_mite.py new file mode 100644 index 00000000..298b192f --- /dev/null +++ b/scripts/mobiles/talus/dung_mite.py @@ -0,0 +1,41 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + mobileTemplate.setCreatureName('dung_mite') + mobileTemplate.setLevel(42) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(5) + mobileTemplate.setMaxSpawnDistance(10) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setMeatType("Insect Meat") + mobileTemplate.setMeatAmount(9) + mobileTemplate.setHideType("Scaley Hide") + mobileTemplate.setBoneAmount(9) + mobileTemplate.setSocialGroup("decay mite") + mobileTemplate.setAssistRange(6) + mobileTemplate.setStalker(True) + mobileTemplate.setOptionsBitmask(128) + + templates = Vector() + templates.add('object/mobile/shared_bark_mite_hue.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('dung_mite', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/talus/erran_sif.py b/scripts/mobiles/talus/erran_sif.py new file mode 100644 index 00000000..0bb36e87 --- /dev/null +++ b/scripts/mobiles/talus/erran_sif.py @@ -0,0 +1,43 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('erran_sif') + mobileTemplate.setLevel(67) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(15) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(1) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(True) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("sif") + mobileTemplate.setAssistRange(6) + mobileTemplate.setStalker(True) + mobileTemplate.setOptionsBitmask(192) + + templates = Vector() + templates.add('object/mobile/shared_dressed_erran_sif.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/pistol/shared_pistol_dh17.iff', 1, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedShot') + mobileTemplate.setAttacks(attacks) + + lootPoolNames_1 = ['Junk'] + lootPoolChances_1 = [100] + lootGroupChance_1 = 100 + mobileTemplate.addToLootGroups(lootPoolNames_1,lootPoolChances_1,lootGroupChance_1) + + core.spawnService.addMobileTemplate('erran_sif', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/talus/famished_sludge_panther.py b/scripts/mobiles/talus/famished_sludge_panther.py new file mode 100644 index 00000000..5fc94382 --- /dev/null +++ b/scripts/mobiles/talus/famished_sludge_panther.py @@ -0,0 +1,43 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + mobileTemplate.setCreatureName('famished_sludge_panther') + mobileTemplate.setLevel(46) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(5) + mobileTemplate.setMaxSpawnDistance(10) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setMeatType("Carnivore Meat") + mobileTemplate.setMeatAmount(40) + mobileTemplate.setHideType("Leathery Hide") + mobileTemplate.setBoneAmount(35) + mobileTemplate.setBoneType("Mammal Bone") + mobileTemplate.setHideAmount(35) + mobileTemplate.setSocialGroup("sludge panther") + mobileTemplate.setAssistRange(6) + mobileTemplate.setStalker(True) + mobileTemplate.setOptionsBitmask(128) + + templates = Vector() + templates.add('object/mobile/shared_sludge_panther.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('famished_sludge_panther', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/talus/fearful_fynock_youth.py b/scripts/mobiles/talus/fearful_fynock_youth.py new file mode 100644 index 00000000..6a082f6c --- /dev/null +++ b/scripts/mobiles/talus/fearful_fynock_youth.py @@ -0,0 +1,42 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + mobileTemplate.setCreatureName('fearful_fynock_youth') + mobileTemplate.setLevel(30) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(5) + mobileTemplate.setMaxSpawnDistance(10) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(.5) + mobileTemplate.setMeatType("Avian Meat") + mobileTemplate.setMeatAmount(3) + mobileTemplate.setBoneType("Avian Bone") + mobileTemplate.setHideAmount(3) + mobileTemplate.setSocialGroup("fynock") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(True) + mobileTemplate.setOptionsBitmask(128) + + + templates = Vector() + templates.add('object/mobile/shared_fynock.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('fearful_fynock_youth', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/talus/fed_dub_captain.py b/scripts/mobiles/talus/fed_dub_captain.py new file mode 100644 index 00000000..71091708 --- /dev/null +++ b/scripts/mobiles/talus/fed_dub_captain.py @@ -0,0 +1,44 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('fed_dub_captain') + mobileTemplate.setLevel(46) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(15) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(1) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("fed dub") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(True) + mobileTemplate.setOptionsBitmask(128) + + templates = Vector() + templates.add('object/mobile/shared_dressed_fed_dub_captain_twk_male_01.iff') + templates.add('object/mobile/shared_dressed_fed_dub_captain_twk_female_01.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/carbine/shared_carbine_e11.iff', 1, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedShot') + mobileTemplate.setAttacks(attacks) + + lootPoolNames_1 = ['Junk'] + lootPoolChances_1 = [100] + lootGroupChance_1 = 100 + mobileTemplate.addToLootGroups(lootPoolNames_1,lootPoolChances_1,lootGroupChance_1) + + core.spawnService.addMobileTemplate('fed_dub_captain', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/talus/fed_dub_commander.py b/scripts/mobiles/talus/fed_dub_commander.py new file mode 100644 index 00000000..0ffab2b4 --- /dev/null +++ b/scripts/mobiles/talus/fed_dub_commander.py @@ -0,0 +1,44 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('fed_dub_commander') + mobileTemplate.setLevel(47) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(1) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("fed dub") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(True) + mobileTemplate.setOptionsBitmask(128) + + templates = Vector() + templates.add('object/mobile/shared_dressed_fed_dub_commander_bith_male_01.iff') + templates.add('object/mobile/shared_dressed_fed_dub_commander_bith_female_01.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('meleeHit') + mobileTemplate.setAttacks(attacks) + + lootPoolNames_1 = ['Junk'] + lootPoolChances_1 = [100] + lootGroupChance_1 = 100 + mobileTemplate.addToLootGroups(lootPoolNames_1,lootPoolChances_1,lootGroupChance_1) + + core.spawnService.addMobileTemplate('fed_dub_commander', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/talus/fed_dub_constable.py b/scripts/mobiles/talus/fed_dub_constable.py new file mode 100644 index 00000000..7c42688b --- /dev/null +++ b/scripts/mobiles/talus/fed_dub_constable.py @@ -0,0 +1,44 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('fed_dub_constable') + mobileTemplate.setLevel(40) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(15) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(1) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("fed dub") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(True) + mobileTemplate.setOptionsBitmask(128) + + templates = Vector() + templates.add('object/mobile/shared_dressed_fed_dub_constable_twk_male_01.iff') + templates.add('object/mobile/shared_dressed_fed_dub_constable_twk_female_01.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/carbine/shared_carbine_e11.iff', 1, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedShot') + mobileTemplate.setAttacks(attacks) + + lootPoolNames_1 = ['Junk'] + lootPoolChances_1 = [100] + lootGroupChance_1 = 100 + mobileTemplate.addToLootGroups(lootPoolNames_1,lootPoolChances_1,lootGroupChance_1) + + core.spawnService.addMobileTemplate('fed_dub_constable', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/talus/fed_dub_investigator.py b/scripts/mobiles/talus/fed_dub_investigator.py new file mode 100644 index 00000000..40b98fe7 --- /dev/null +++ b/scripts/mobiles/talus/fed_dub_investigator.py @@ -0,0 +1,44 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('fed_dub_investigator') + mobileTemplate.setLevel(43) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(15) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(1) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("fed dub") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(True) + mobileTemplate.setOptionsBitmask(128) + + templates = Vector() + templates.add('object/mobile/shared_dressed_fed_dub_investigator_twk_male_01.iff') + templates.add('object/mobile/shared_dressed_fed_dub_investigator_twk_female_01.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/carbine/shared_carbine_e11.iff', 1, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedShot') + mobileTemplate.setAttacks(attacks) + + lootPoolNames_1 = ['Junk'] + lootPoolChances_1 = [100] + lootGroupChance_1 = 100 + mobileTemplate.addToLootGroups(lootPoolNames_1,lootPoolChances_1,lootGroupChance_1) + + core.spawnService.addMobileTemplate('fed_dub_investigator', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/talus/fed_dub_patrolman.py b/scripts/mobiles/talus/fed_dub_patrolman.py new file mode 100644 index 00000000..27a008c6 --- /dev/null +++ b/scripts/mobiles/talus/fed_dub_patrolman.py @@ -0,0 +1,44 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('fed_dub_patrolman') + mobileTemplate.setLevel(36) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(15) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(1) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("fed dub") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(True) + mobileTemplate.setOptionsBitmask(128) + + templates = Vector() + templates.add('object/mobile/shared_dressed_fed_dub_patrolman_human_male_01.iff') + templates.add('object/mobile/shared_dressed_fed_dub_patrolman_human_female_01.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/carbine/shared_carbine_e11.iff', 1, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedShot') + mobileTemplate.setAttacks(attacks) + + lootPoolNames_1 = ['Junk'] + lootPoolChances_1 = [100] + lootGroupChance_1 = 100 + mobileTemplate.addToLootGroups(lootPoolNames_1,lootPoolChances_1,lootGroupChance_1) + + core.spawnService.addMobileTemplate('fed_dub_patrolman', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/talus/fed_dub_supporter.py b/scripts/mobiles/talus/fed_dub_supporter.py new file mode 100644 index 00000000..431a779b --- /dev/null +++ b/scripts/mobiles/talus/fed_dub_supporter.py @@ -0,0 +1,44 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('fed_dub_supporter') + mobileTemplate.setLevel(34) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(15) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(1) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("fed dub") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(True) + mobileTemplate.setOptionsBitmask(128) + + templates = Vector() + templates.add('object/mobile/shared_dressed_fed_dub_supporter_human_male_01.iff') + templates.add('object/mobile/shared_dressed_fed_dub_supporter_human_female_01.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/carbine/shared_carbine_e11.iff', 1, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedShot') + mobileTemplate.setAttacks(attacks) + + lootPoolNames_1 = ['Junk'] + lootPoolChances_1 = [100] + lootGroupChance_1 = 100 + mobileTemplate.addToLootGroups(lootPoolNames_1,lootPoolChances_1,lootGroupChance_1) + + core.spawnService.addMobileTemplate('fed_dub_supporter', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/talus/feeble_kima.py b/scripts/mobiles/talus/feeble_kima.py new file mode 100644 index 00000000..919fb9b3 --- /dev/null +++ b/scripts/mobiles/talus/feeble_kima.py @@ -0,0 +1,44 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + mobileTemplate.setCreatureName('feeble_kima') + mobileTemplate.setLevel(39) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(5) + mobileTemplate.setMaxSpawnDistance(10) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setMeatType("Herbivore Meat") + mobileTemplate.setMeatAmount(5) + mobileTemplate.setHideType("Bristley Hide") + mobileTemplate.setBoneAmount(7) + mobileTemplate.setBoneType("Mammal Bone") + mobileTemplate.setHideAmount(5) + mobileTemplate.setSocialGroup("kima") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(False) + mobileTemplate.setOptionsBitmask(128) + + + templates = Vector() + templates.add('object/mobile/shared_kima.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('feeble_kima', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/talus/female_roba.py b/scripts/mobiles/talus/female_roba.py new file mode 100644 index 00000000..a7f7b605 --- /dev/null +++ b/scripts/mobiles/talus/female_roba.py @@ -0,0 +1,43 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + mobileTemplate.setCreatureName('female_roba') + mobileTemplate.setLevel(44) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(5) + mobileTemplate.setMaxSpawnDistance(10) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setMeatType("Carnivore Meat") + mobileTemplate.setMeatAmount(10) + mobileTemplate.setHideType("Leathery Hide") + mobileTemplate.setBoneAmount(15) + mobileTemplate.setBoneType("Mammal Bone") + mobileTemplate.setHideAmount(10) + mobileTemplate.setSocialGroup("roba") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(False) + mobileTemplate.setOptionsBitmask(128) + + templates = Vector() + templates.add('object/mobile/shared_roba.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('female_roba', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/talus/ferine_razorfang.py b/scripts/mobiles/talus/ferine_razorfang.py new file mode 100644 index 00000000..6bdc8921 --- /dev/null +++ b/scripts/mobiles/talus/ferine_razorfang.py @@ -0,0 +1,44 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('kima_ferine_razorfang') + mobileTemplate.setLevel(20) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(5) + mobileTemplate.setMaxSpawnDistance(10) + mobileTemplate.setDeathblow(True) + mobileTemplate.setScale(1) + mobileTemplate.setMeatType("Herbivore Meat") + mobileTemplate.setMeatAmount(7) + mobileTemplate.setHideType("Bristley Hide") + mobileTemplate.setBoneAmount(8) + mobileTemplate.setBoneType("Mammal Bone") + mobileTemplate.setHideAmount(7) + mobileTemplate.setSocialGroup("kima") + mobileTemplate.setAssistRange(6) + mobileTemplate.setStalker(False) + mobileTemplate.setOptionsBitmask(192) + + templates = Vector() + templates.add('object/mobile/shared_kima.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('ferine_razorfang', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/talus/festering_dung_mite_queen.py b/scripts/mobiles/talus/festering_dung_mite_queen.py new file mode 100644 index 00000000..433e1055 --- /dev/null +++ b/scripts/mobiles/talus/festering_dung_mite_queen.py @@ -0,0 +1,39 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + mobileTemplate.setCreatureName('festering_dung_queen') + mobileTemplate.setLevel(17) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(5) + mobileTemplate.setMaxSpawnDistance(10) + mobileTemplate.setDeathblow(True) + mobileTemplate.setScale(1.1) + mobileTemplate.setMeatType("Insect Meat") + mobileTemplate.setMeatAmount(13) + mobileTemplate.setSocialGroup("decay mite") + mobileTemplate.setAssistRange(4) + mobileTemplate.setStalker(False) + mobileTemplate.setOptionsBitmask(192) + + templates = Vector() + templates.add('object/mobile/shared_bark_mite_hue.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('festering_dung_mite_queen', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/talus/flite_rasp.py b/scripts/mobiles/talus/flite_rasp.py new file mode 100644 index 00000000..362fcf68 --- /dev/null +++ b/scripts/mobiles/talus/flite_rasp.py @@ -0,0 +1,41 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + mobileTemplate.setCreatureName('flite_rasp') + mobileTemplate.setLevel(34) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(5) + mobileTemplate.setMaxSpawnDistance(10) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setMeatType("Avian Meat") + mobileTemplate.setMeatAmount(11) + mobileTemplate.setBoneType("Avian Bone") + mobileTemplate.setHideAmount(3) + mobileTemplate.setSocialGroup("rasp") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(False) + mobileTemplate.setOptionsBitmask(128) + + templates = Vector() + templates.add('object/mobile/shared_flite_rasp.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('flite_rasp', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/talus/flite_rasp2.py b/scripts/mobiles/talus/flite_rasp2.py new file mode 100644 index 00000000..90c340c7 --- /dev/null +++ b/scripts/mobiles/talus/flite_rasp2.py @@ -0,0 +1,41 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + mobileTemplate.setCreatureName('flite_rasp') + mobileTemplate.setLevel(35) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(5) + mobileTemplate.setMaxSpawnDistance(10) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setMeatType("Avian Meat") + mobileTemplate.setMeatAmount(11) + mobileTemplate.setBoneType("Avian Bone") + mobileTemplate.setHideAmount(3) + mobileTemplate.setSocialGroup("rasp") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(False) + mobileTemplate.setOptionsBitmask(128) + + templates = Vector() + templates.add('object/mobile/shared_flite_rasp.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('flite_rasp2', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/talus/foaming_vynock.py b/scripts/mobiles/talus/foaming_vynock.py new file mode 100644 index 00000000..441233d7 --- /dev/null +++ b/scripts/mobiles/talus/foaming_vynock.py @@ -0,0 +1,43 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + mobileTemplate.setCreatureName('foaming_vynock') + mobileTemplate.setLevel(43) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(5) + mobileTemplate.setMaxSpawnDistance(10) + mobileTemplate.setDeathblow(True) + mobileTemplate.setScale(1) + mobileTemplate.setMeatType("Herbivore Meat") + mobileTemplate.setMeatAmount(50) + mobileTemplate.setHideType("Leathery Hide") + mobileTemplate.setBoneAmount(70) + mobileTemplate.setBoneType("Mammal Bone") + mobileTemplate.setHideAmount(20) + mobileTemplate.setSocialGroup("self") + mobileTemplate.setAssistRange(6) + mobileTemplate.setStalker(False) + mobileTemplate.setOptionsBitmask(192) + + templates = Vector() + templates.add('object/mobile/shared_vynock.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('foaming_vynock', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/talus/frenzied_fynock_guardian.py b/scripts/mobiles/talus/frenzied_fynock_guardian.py new file mode 100644 index 00000000..4f229cf5 --- /dev/null +++ b/scripts/mobiles/talus/frenzied_fynock_guardian.py @@ -0,0 +1,42 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('frenzied_fynock_guardian') + mobileTemplate.setLevel(11) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setMeatType("Avian Meat") + mobileTemplate.setMeatAmount(8) + mobileTemplate.setBoneType("Avian Bones") + mobileTemplate.setBoneAmount(8) + mobileTemplate.setSocialGroup("fynock") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(True) + mobileTemplate.setOptionsBitmask(128) + + templates = Vector() + templates.add('object/mobile/shared_fynock.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('frenzied_fynock_guardian', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/talus/fynock.py b/scripts/mobiles/talus/fynock.py new file mode 100644 index 00000000..475145ba --- /dev/null +++ b/scripts/mobiles/talus/fynock.py @@ -0,0 +1,46 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('fynock') + mobileTemplate.setLevel(40) + mobileTemplate.setMinLevel(40) + mobileTemplate.setMaxLevel(43) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setMeatType("Avian Meat") + mobileTemplate.setMeatAmount(22) + mobileTemplate.setHideType("Leathery Hide") + mobileTemplate.setHideAmount(33) + mobileTemplate.setBoneType("Avian Bones") + mobileTemplate.setBoneAmount(10) + mobileTemplate.setSocialGroup("fynock") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(False) + mobileTemplate.setOptionsBitmask(128) + + templates = Vector() + templates.add('object/mobile/shared_fynock.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('fynock', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/talus/genetically_enhanced_kahmurra.py b/scripts/mobiles/talus/genetically_enhanced_kahmurra.py new file mode 100644 index 00000000..e781f360 --- /dev/null +++ b/scripts/mobiles/talus/genetically_enhanced_kahmurra.py @@ -0,0 +1,44 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('genetically_enhanced_kahmurra') + mobileTemplate.setLevel(30) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(True) + mobileTemplate.setScale(1.2) + mobileTemplate.setMeatType("Herbivore Meat") + mobileTemplate.setMeatAmount(50) + mobileTemplate.setHideType("Bristley Hide") + mobileTemplate.setHideAmount(30) + mobileTemplate.setBoneType("Mammal Bones") + mobileTemplate.setBoneAmount(35) + mobileTemplate.setSocialGroup("kahmurra") + mobileTemplate.setAssistRange(6) + mobileTemplate.setStalker(False) + mobileTemplate.setOptionsBitmask(192) + + templates = Vector() + templates.add('object/mobile/shared_kahmurra.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('genetically_enhanced_kahmurra', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/talus/giant_decay_mite_guardian.py b/scripts/mobiles/talus/giant_decay_mite_guardian.py new file mode 100644 index 00000000..ec5b3ae5 --- /dev/null +++ b/scripts/mobiles/talus/giant_decay_mite_guardian.py @@ -0,0 +1,40 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('giant_decay_mite_royal_guardian') + mobileTemplate.setLevel(19) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1.5) + mobileTemplate.setMeatType("Insect Meat") + mobileTemplate.setMeatAmount(22) + mobileTemplate.setSocialGroup("decay mite") + mobileTemplate.setAssistRange(4) + mobileTemplate.setStalker(False) + mobileTemplate.setOptionsBitmask(128) + + templates = Vector() + templates.add('object/mobile/shared_bark_mite_hue.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('giant_decay_mite_guardian', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/talus/giant_decay_mite_harvester.py b/scripts/mobiles/talus/giant_decay_mite_harvester.py new file mode 100644 index 00000000..08398ace --- /dev/null +++ b/scripts/mobiles/talus/giant_decay_mite_harvester.py @@ -0,0 +1,40 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('giant_decay_mite_harvester') + mobileTemplate.setLevel(10) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1.5) + mobileTemplate.setMeatType("Insect Meat") + mobileTemplate.setMeatAmount(12) + mobileTemplate.setSocialGroup("decay mite") + mobileTemplate.setAssistRange(4) + mobileTemplate.setStalker(False) + mobileTemplate.setOptionsBitmask(128) + + templates = Vector() + templates.add('object/mobile/shared_bark_mite_hue.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('giant_decay_mite_harvester', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/talus/giant_decay_mite_hatchling.py b/scripts/mobiles/talus/giant_decay_mite_hatchling.py new file mode 100644 index 00000000..c241a112 --- /dev/null +++ b/scripts/mobiles/talus/giant_decay_mite_hatchling.py @@ -0,0 +1,40 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('giant_decay_mite_hatchling') + mobileTemplate.setLevel(2) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setMeatType("Insect Meat") + mobileTemplate.setMeatAmount(5) + mobileTemplate.setSocialGroup("decay mite") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(False) + mobileTemplate.setOptionsBitmask(128) + + templates = Vector() + templates.add('object/mobile/shared_bark_mite_hue.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('giant_decay_mite_hatchling', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/talus/giant_decay_mite_protector.py b/scripts/mobiles/talus/giant_decay_mite_protector.py new file mode 100644 index 00000000..bf2251f9 --- /dev/null +++ b/scripts/mobiles/talus/giant_decay_mite_protector.py @@ -0,0 +1,40 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('giant_decay_mite_protector') + mobileTemplate.setLevel(13) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1.5) + mobileTemplate.setMeatType("Insect Meat") + mobileTemplate.setMeatAmount(16) + mobileTemplate.setSocialGroup("decay mite") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(False) + mobileTemplate.setOptionsBitmask(128) + + templates = Vector() + templates.add('object/mobile/shared_bark_mite_hue.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('giant_decay_mite_protector', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/talus/giant_decay_mite_queen.py b/scripts/mobiles/talus/giant_decay_mite_queen.py new file mode 100644 index 00000000..bcfc1eb8 --- /dev/null +++ b/scripts/mobiles/talus/giant_decay_mite_queen.py @@ -0,0 +1,40 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('giant_decay_mite_queen') + mobileTemplate.setLevel(20) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1.5) + mobileTemplate.setMeatType("Insect Meat") + mobileTemplate.setMeatAmount(28) + mobileTemplate.setSocialGroup("decay mite") + mobileTemplate.setAssistRange(4) + mobileTemplate.setStalker(False) + mobileTemplate.setOptionsBitmask(192) + + templates = Vector() + templates.add('object/mobile/shared_bark_mite_hue.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('giant_decay_mite_queen', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/talus/giant_decay_mite_sentry.py b/scripts/mobiles/talus/giant_decay_mite_sentry.py new file mode 100644 index 00000000..1b923bb7 --- /dev/null +++ b/scripts/mobiles/talus/giant_decay_mite_sentry.py @@ -0,0 +1,40 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('giant_decay_mite_sentry') + mobileTemplate.setLevel(16) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(12) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1.3) + mobileTemplate.setMeatType("Insect Meat") + mobileTemplate.setMeatAmount(15) + mobileTemplate.setSocialGroup("decay mite") + mobileTemplate.setAssistRange(4) + mobileTemplate.setStalker(False) + mobileTemplate.setOptionsBitmask(192) + + templates = Vector() + templates.add('object/mobile/shared_bark_mite_hue.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureRangedAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('giant_decay_mite_sentry', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/talus/giant_decay_mite_soldier.py b/scripts/mobiles/talus/giant_decay_mite_soldier.py new file mode 100644 index 00000000..ce47f694 --- /dev/null +++ b/scripts/mobiles/talus/giant_decay_mite_soldier.py @@ -0,0 +1,40 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('giant_decay_mite_soldier') + mobileTemplate.setLevel(15) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1.5) + mobileTemplate.setMeatType("Insect Meat") + mobileTemplate.setMeatAmount(18) + mobileTemplate.setSocialGroup("decay mite") + mobileTemplate.setAssistRange(4) + mobileTemplate.setStalker(False) + mobileTemplate.setOptionsBitmask(192) + + templates = Vector() + templates.add('object/mobile/shared_bark_mite_hue.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('giant_decay_mite_soldier', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/talus/giant_fynock.py b/scripts/mobiles/talus/giant_fynock.py new file mode 100644 index 00000000..c3ef33c3 --- /dev/null +++ b/scripts/mobiles/talus/giant_fynock.py @@ -0,0 +1,44 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('giant_fynock') + mobileTemplate.setLevel(40) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(True) + mobileTemplate.setScale(1.2) + mobileTemplate.setMeatType("Avian Meat") + mobileTemplate.setMeatAmount(70) + mobileTemplate.setHideType("Leathery Hide") + mobileTemplate.setHideAmount(50) + mobileTemplate.setBoneType("Avian Bones") + mobileTemplate.setBoneAmount(55) + mobileTemplate.setSocialGroup("fynock") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(False) + mobileTemplate.setOptionsBitmask(192) + + templates = Vector() + templates.add('object/mobile/shared_fynock_hue.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('giant_fynock', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/talus/giga_flite_rasp.py b/scripts/mobiles/talus/giga_flite_rasp.py new file mode 100644 index 00000000..560de228 --- /dev/null +++ b/scripts/mobiles/talus/giga_flite_rasp.py @@ -0,0 +1,41 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + mobileTemplate.setCreatureName('giga_flite_rasp') + mobileTemplate.setLevel(39) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(5) + mobileTemplate.setMaxSpawnDistance(10) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setMeatType("Avian Meat") + mobileTemplate.setMeatAmount(20) + mobileTemplate.setBoneType("Avian Bone") + mobileTemplate.setHideAmount(6) + mobileTemplate.setSocialGroup("rasp") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(False) + mobileTemplate.setOptionsBitmask(128) + + templates = Vector() + templates.add('object/mobile/shared_flite_rasp.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('giga_flite_rasp', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/talus/glutted_fynock_queen.py b/scripts/mobiles/talus/glutted_fynock_queen.py new file mode 100644 index 00000000..895f6752 --- /dev/null +++ b/scripts/mobiles/talus/glutted_fynock_queen.py @@ -0,0 +1,44 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('glutted_fynock_queen') + mobileTemplate.setLevel(14) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(True) + mobileTemplate.setScale(1.2) + mobileTemplate.setMeatType("Avian Meat") + mobileTemplate.setMeatAmount(30) + mobileTemplate.setHideType("Leathery Hide") + mobileTemplate.setHideAmount(25) + mobileTemplate.setBoneType("Avian Bones") + mobileTemplate.setBoneAmount(20) + mobileTemplate.setSocialGroup("fynock") + mobileTemplate.setAssistRange(4) + mobileTemplate.setStalker(False) + mobileTemplate.setOptionsBitmask(192) + + templates = Vector() + templates.add('object/mobile/shared_fynock_hue.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('glutted_fynock_queen', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/talus/greater_sludge_panther.py b/scripts/mobiles/talus/greater_sludge_panther.py new file mode 100644 index 00000000..e5d630b5 --- /dev/null +++ b/scripts/mobiles/talus/greater_sludge_panther.py @@ -0,0 +1,43 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + mobileTemplate.setCreatureName('greater_sludge_panther') + mobileTemplate.setLevel(49) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(5) + mobileTemplate.setMaxSpawnDistance(10) + mobileTemplate.setDeathblow(True) + mobileTemplate.setScale(1.1) + mobileTemplate.setMeatType("Carnivore Meat") + mobileTemplate.setMeatAmount(80) + mobileTemplate.setHideType("Leathery Hide") + mobileTemplate.setBoneAmount(70) + mobileTemplate.setBoneType("Mammal Bone") + mobileTemplate.setHideAmount(70) + mobileTemplate.setSocialGroup("sludge panther") + mobileTemplate.setAssistRange(6) + mobileTemplate.setStalker(False) + mobileTemplate.setOptionsBitmask(192) + + templates = Vector() + templates.add('object/mobile/shared_sludge_panther.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('greater_sludge_panther', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/talus/guf_drolg.py b/scripts/mobiles/talus/guf_drolg.py new file mode 100644 index 00000000..76b23e53 --- /dev/null +++ b/scripts/mobiles/talus/guf_drolg.py @@ -0,0 +1,46 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('guf_drolg') + mobileTemplate.setLevel(42) + mobileTemplate.setMinLevel(42) + mobileTemplate.setMaxLevel(43) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setMeatType("Reptile Meat") + mobileTemplate.setMeatAmount(350) + mobileTemplate.setHideType("Leathery Hide") + mobileTemplate.setHideAmount(275) + mobileTemplate.setBoneType("Mammal Bones") + mobileTemplate.setBoneAmount(200) + mobileTemplate.setSocialGroup("guf drolg") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(True) + mobileTemplate.setOptionsBitmask(192) + + templates = Vector() + templates.add('object/mobile/shared_guf_drolg.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('guf_drolg', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/talus/guf_drolg_female.py b/scripts/mobiles/talus/guf_drolg_female.py new file mode 100644 index 00000000..98512850 --- /dev/null +++ b/scripts/mobiles/talus/guf_drolg_female.py @@ -0,0 +1,43 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('guf_drolg_female') + mobileTemplate.setLevel(43) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(.9) + mobileTemplate.setMeatType("Reptile Meat") + mobileTemplate.setMeatAmount(325) + mobileTemplate.setHideType("Leathery Hide") + mobileTemplate.setHideAmount(265) + mobileTemplate.setBoneType("Mammal Bones") + mobileTemplate.setBoneAmount(190) + mobileTemplate.setSocialGroup("guf drolg") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(True) + + templates = Vector() + templates.add('object/mobile/shared_guf_drolg.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('guf_drolg_female', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/talus/hilltop_kima.py b/scripts/mobiles/talus/hilltop_kima.py new file mode 100644 index 00000000..896a9d51 --- /dev/null +++ b/scripts/mobiles/talus/hilltop_kima.py @@ -0,0 +1,44 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('hillto_kima') + mobileTemplate.setLevel(47) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setMeatType("Herbivore Meat") + mobileTemplate.setMeatAmount(87) + mobileTemplate.setHideType("Bristley Hide") + mobileTemplate.setHideAmount(10) + mobileTemplate.setBoneType("Mammal Bones") + mobileTemplate.setBoneAmount(8) + mobileTemplate.setSocialGroup("kima") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(False) + mobileTemplate.setOptionsBitmask(128) + + templates = Vector() + templates.add('object/mobile/shared_kima.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('hilltop_kima', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/talus/hirsch_sif.py b/scripts/mobiles/talus/hirsch_sif.py new file mode 100644 index 00000000..a5d1f65a --- /dev/null +++ b/scripts/mobiles/talus/hirsch_sif.py @@ -0,0 +1,39 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('hirsch_sif') + mobileTemplate.setLevel(57) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(15) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(1) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(True) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("sif") + mobileTemplate.setAssistRange(6) + mobileTemplate.setStalker(True) + mobileTemplate.setOptionsBitmask(192) + mobileTemplate.setOptionsBitmask(128) + + templates = Vector() + templates.add('object/mobile/shared_dressed_hirsch_sif.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/carbine/shared_carbine_e11.iff', 1, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedShot') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('hirsch_sif', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/talus/huf_dun.py b/scripts/mobiles/talus/huf_dun.py new file mode 100644 index 00000000..0e91cbbd --- /dev/null +++ b/scripts/mobiles/talus/huf_dun.py @@ -0,0 +1,46 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('huf_dun') + mobileTemplate.setLevel(47) + mobileTemplate.setMinLevel(47) + mobileTemplate.setMaxLevel(49) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setMeatType("Herbivore Meat") + mobileTemplate.setMeatAmount(1350) + mobileTemplate.setHideType("Leathery Hide") + mobileTemplate.setHideAmount(1600) + mobileTemplate.setBoneType("Mammal Bones") + mobileTemplate.setBoneAmount(1350) + mobileTemplate.setSocialGroup("huf dun") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(False) + mobileTemplate.setOptionsBitmask(128) + + templates = Vector() + templates.add('object/mobile/shared_huf_dun.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('huf_dun', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/talus/huf_dun_bull.py b/scripts/mobiles/talus/huf_dun_bull.py new file mode 100644 index 00000000..b3fb8aa9 --- /dev/null +++ b/scripts/mobiles/talus/huf_dun_bull.py @@ -0,0 +1,44 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('huf_dun_bull') + mobileTemplate.setLevel(48) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1.1) + mobileTemplate.setMeatType("Herbivore Meat") + mobileTemplate.setMeatAmount(1350) + mobileTemplate.setHideType("Leathery Hide") + mobileTemplate.setHideAmount(1600) + mobileTemplate.setBoneType("Mammal Bones") + mobileTemplate.setBoneAmount(1350) + mobileTemplate.setSocialGroup("huf dun") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(False) + mobileTemplate.setOptionsBitmask(192) + + templates = Vector() + templates.add('object/mobile/shared_huf_dun.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('huf_dun_bull', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/talus/hunter_talus.py b/scripts/mobiles/talus/hunter_talus.py new file mode 100644 index 00000000..6f77507c --- /dev/null +++ b/scripts/mobiles/talus/hunter_talus.py @@ -0,0 +1,38 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('hunter_talus') + mobileTemplate.setLevel(17) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(15) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(1) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("talus poachers") + mobileTemplate.setAssistRange(6) + mobileTemplate.setStalker(True) + mobileTemplate.setOptionsBitmask(192) + + templates = Vector() + templates.add('object/mobile/shared_dressed_forest_hunter.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/rifle/shared_rifle_e11.iff', 1, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedShot') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('hunter_talus', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/talus/jungle_fynock.py b/scripts/mobiles/talus/jungle_fynock.py new file mode 100644 index 00000000..0e36c4a6 --- /dev/null +++ b/scripts/mobiles/talus/jungle_fynock.py @@ -0,0 +1,44 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('jungle_fynock') + mobileTemplate.setLevel(42) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setMeatType("Avian Meat") + mobileTemplate.setMeatAmount(28) + mobileTemplate.setHideType("Leathery Hide") + mobileTemplate.setHideAmount(18) + mobileTemplate.setBoneType("Avian Bones") + mobileTemplate.setBoneAmount(15) + mobileTemplate.setSocialGroup("fynock") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(True) + mobileTemplate.setOptionsBitmask(192) + + templates = Vector() + templates.add('object/mobile/shared_fynock.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('jungle_fynock', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/talus/kahmurra_blanca.py b/scripts/mobiles/talus/kahmurra_blanca.py new file mode 100644 index 00000000..478dd7d7 --- /dev/null +++ b/scripts/mobiles/talus/kahmurra_blanca.py @@ -0,0 +1,38 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('murra_blanca') + mobileTemplate.setLevel(30) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(True) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("kahmurra") + mobileTemplate.setAssistRange(12) + mobileTemplate.setStalker(False) + mobileTemplate.setOptionsBitmask(192) + + templates = Vector() + templates.add('object/mobile/shared_kahmurra.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('kahmurra_blanca', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/talus/kima.py b/scripts/mobiles/talus/kima.py new file mode 100644 index 00000000..5cfcc206 --- /dev/null +++ b/scripts/mobiles/talus/kima.py @@ -0,0 +1,46 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('kima') + mobileTemplate.setLevel(45) + mobileTemplate.setMinLevel(45) + mobileTemplate.setMaxLevel(47) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setMeatType("Herbivore Meat") + mobileTemplate.setMeatAmount(7) + mobileTemplate.setHideType("Bristley Hide") + mobileTemplate.setHideAmount(8) + mobileTemplate.setBoneType("Mammal Bones") + mobileTemplate.setBoneAmount(7) + mobileTemplate.setSocialGroup("kima") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(False) + mobileTemplate.setOptionsBitmask(128) + + templates = Vector() + templates.add('object/mobile/shared_kima.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('kima', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/talus/liberation_activist.py b/scripts/mobiles/talus/liberation_activist.py new file mode 100644 index 00000000..664aadc7 --- /dev/null +++ b/scripts/mobiles/talus/liberation_activist.py @@ -0,0 +1,46 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('liberation_activist') + mobileTemplate.setLevel(47) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(15) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(1) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("liberation party") + mobileTemplate.setAssistRange(6) + mobileTemplate.setStalker(True) + mobileTemplate.setOptionsBitmask(128) + + templates = Vector() + templates.add('object/mobile/shared_dressed_liberation_activist_rodian_female_01.iff') + templates.add('object/mobile/shared_dressed_liberation_activist_rodian_male_01.iff') + + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/carbine/shared_carbine_e11.iff', 1, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedShot') + mobileTemplate.setAttacks(attacks) + + lootPoolNames_1 = ['Junk'] + lootPoolChances_1 = [100] + lootGroupChance_1 = 100 + mobileTemplate.addToLootGroups(lootPoolNames_1,lootPoolChances_1,lootGroupChance_1) + + + core.spawnService.addMobileTemplate('liberation_activist', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/talus/liberation_fanatic.py b/scripts/mobiles/talus/liberation_fanatic.py new file mode 100644 index 00000000..80ebd70b --- /dev/null +++ b/scripts/mobiles/talus/liberation_fanatic.py @@ -0,0 +1,46 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('liberation_fanatic') + mobileTemplate.setLevel(45) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(15) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(1) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("liberation party") + mobileTemplate.setAssistRange(6) + mobileTemplate.setStalker(True) + mobileTemplate.setOptionsBitmask(128) + + + templates = Vector() + templates.add('object/mobile/shared_dressed_liberation_fanatic_bith_female_01.iff') + templates.add('object/mobile/shared_dressed_liberation_fanatic_bith_male_01.iff') + + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/carbine/shared_carbine_e11.iff', 1, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedShot') + mobileTemplate.setAttacks(attacks) + + lootPoolNames_1 = ['Junk'] + lootPoolChances_1 = [100] + lootGroupChance_1 = 100 + mobileTemplate.addToLootGroups(lootPoolNames_1,lootPoolChances_1,lootGroupChance_1) + + core.spawnService.addMobileTemplate('liberation_fanatic', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/talus/liberation_loyalist.py b/scripts/mobiles/talus/liberation_loyalist.py new file mode 100644 index 00000000..3de1461b --- /dev/null +++ b/scripts/mobiles/talus/liberation_loyalist.py @@ -0,0 +1,46 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('liberation_loyalist') + mobileTemplate.setLevel(36) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(15) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(1) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("liberation party") + mobileTemplate.setAssistRange(6) + mobileTemplate.setStalker(True) + mobileTemplate.setOptionsBitmask(128) + + + templates = Vector() + templates.add('object/mobile/shared_dressed_liberation_loyalist_bith_female_01.iff') + templates.add('object/mobile/shared_dressed_liberation_loyalist_bith_male_01.iff') + + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/carbine/shared_carbine_e11.iff', 1, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedShot') + mobileTemplate.setAttacks(attacks) + + lootPoolNames_1 = ['Junk'] + lootPoolChances_1 = [100] + lootGroupChance_1 = 100 + mobileTemplate.addToLootGroups(lootPoolNames_1,lootPoolChances_1,lootGroupChance_1) + + core.spawnService.addMobileTemplate('liberation_loyalist', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/talus/liberation_partisan.py b/scripts/mobiles/talus/liberation_partisan.py new file mode 100644 index 00000000..4443693d --- /dev/null +++ b/scripts/mobiles/talus/liberation_partisan.py @@ -0,0 +1,46 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('liberation_partisan') + mobileTemplate.setLevel(40) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(15) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(1) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("liberation party") + mobileTemplate.setAssistRange(6) + mobileTemplate.setStalker(True) + mobileTemplate.setOptionsBitmask(128) + + + templates = Vector() + templates.add('object/mobile/shared_dressed_liberation_partisan_rodian_female_01.iff') + templates.add('object/mobile/shared_dressed_liberation_partisan_rodian_male_01.iff') + + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/carbine/shared_carbine_e11.iff', 1, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedShot') + mobileTemplate.setAttacks(attacks) + + lootPoolNames_1 = ['Junk'] + lootPoolChances_1 = [100] + lootGroupChance_1 = 100 + mobileTemplate.addToLootGroups(lootPoolNames_1,lootPoolChances_1,lootGroupChance_1) + + core.spawnService.addMobileTemplate('liberation_partisan', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/talus/liberation_patriot.py b/scripts/mobiles/talus/liberation_patriot.py new file mode 100644 index 00000000..c8ae95c2 --- /dev/null +++ b/scripts/mobiles/talus/liberation_patriot.py @@ -0,0 +1,47 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('liberation_patriot') + mobileTemplate.setLevel(43) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(15) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(1) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("liberation party") + mobileTemplate.setAssistRange(6) + mobileTemplate.setStalker(True) + mobileTemplate.setOptionsBitmask(128) + + + templates = Vector() + templates.add('object/mobile/shared_dressed_liberation_patriot_rodian_female_01.iff') + templates.add('object/mobile/shared_dressed_liberation_patriot_rodian_male_01.iff') + + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/carbine/shared_carbine_e11.iff', 1, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedShot') + mobileTemplate.setAttacks(attacks) + + lootPoolNames_1 = ['Junk'] + lootPoolChances_1 = [100] + lootGroupChance_1 = 100 + mobileTemplate.addToLootGroups(lootPoolNames_1,lootPoolChances_1,lootGroupChance_1) + + + core.spawnService.addMobileTemplate('liberation_patriot', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/talus/liberation_reactionist.py b/scripts/mobiles/talus/liberation_reactionist.py new file mode 100644 index 00000000..b641fd2a --- /dev/null +++ b/scripts/mobiles/talus/liberation_reactionist.py @@ -0,0 +1,46 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('liberation_reactionist') + mobileTemplate.setLevel(46) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(15) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(1) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("liberation party") + mobileTemplate.setAssistRange(6) + mobileTemplate.setStalker(True) + mobileTemplate.setOptionsBitmask(128) + + + templates = Vector() + templates.add('object/mobile/shared_dressed_liberation_reactionist_human_female_01.iff') + templates.add('object/mobile/shared_dressed_liberation_reactionist_human_male_01.iff') + + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/carbine/shared_carbine_e11.iff', 1, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedShot') + mobileTemplate.setAttacks(attacks) + + lootPoolNames_1 = ['Junk'] + lootPoolChances_1 = [100] + lootGroupChance_1 = 100 + mobileTemplate.addToLootGroups(lootPoolNames_1,lootPoolChances_1,lootGroupChance_1) + + core.spawnService.addMobileTemplate('liberation_reactionist', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/talus/liberation_volunteer.py b/scripts/mobiles/talus/liberation_volunteer.py new file mode 100644 index 00000000..bb3a712e --- /dev/null +++ b/scripts/mobiles/talus/liberation_volunteer.py @@ -0,0 +1,45 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('liberation_volunteer') + mobileTemplate.setLevel(34) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(15) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(1) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("liberation party") + mobileTemplate.setAssistRange(6) + mobileTemplate.setStalker(True) + mobileTemplate.setOptionsBitmask(128) + + templates = Vector() + templates.add('object/mobile/shared_dressed_liberation_volunteer_rodian_female_01.iff') + templates.add('object/mobile/shared_dressed_liberation_volunteer_rodian_male_01.iff') + + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/carbine/shared_carbine_e11.iff', 1, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedShot') + mobileTemplate.setAttacks(attacks) + + lootPoolNames_1 = ['Junk'] + lootPoolChances_1 = [100] + lootGroupChance_1 = 100 + mobileTemplate.addToLootGroups(lootPoolNames_1,lootPoolChances_1,lootGroupChance_1) + + core.spawnService.addMobileTemplate('liberation_volunteer', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/talus/lost_aqualish_bomber.py b/scripts/mobiles/talus/lost_aqualish_bomber.py new file mode 100644 index 00000000..d3562aeb --- /dev/null +++ b/scripts/mobiles/talus/lost_aqualish_bomber.py @@ -0,0 +1,45 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('lost_aqualish_bomber') + mobileTemplate.setLevel(43) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(15) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(1) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("lost aqualish") + mobileTemplate.setAssistRange(6) + mobileTemplate.setStalker(True) + mobileTemplate.setOptionsBitmask(192) + + templates = Vector() + templates.add('object/mobile/shared_dressed_lost_aqualish_bomber_male_01.iff') + templates.add('object/mobile/shared_dressed_lost_aqualish_bomber_female_01.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/carbine/shared_carbine_e11.iff', 1, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedShot') + mobileTemplate.setAttacks(attacks) + + lootPoolNames_1 = ['Junk'] + lootPoolChances_1 = [100] + lootGroupChance_1 = 100 + mobileTemplate.addToLootGroups(lootPoolNames_1,lootPoolChances_1,lootGroupChance_1) + + + core.spawnService.addMobileTemplate('lost_aqualish_bomber', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/talus/lost_aqualish_captain.py b/scripts/mobiles/talus/lost_aqualish_captain.py new file mode 100644 index 00000000..751ff668 --- /dev/null +++ b/scripts/mobiles/talus/lost_aqualish_captain.py @@ -0,0 +1,44 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('lost_aqualish_captain') + mobileTemplate.setLevel(47) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(15) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(1) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("lost aqualish") + mobileTemplate.setAssistRange(6) + mobileTemplate.setStalker(True) + mobileTemplate.setOptionsBitmask(192) + + templates = Vector() + templates.add('object/mobile/shared_dressed_lost_aqualish_captain_male_01.iff') + templates.add('object/mobile/shared_dressed_lost_aqualish_captain_female_01.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/carbine/shared_carbine_e11.iff', 1, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedShot') + mobileTemplate.setAttacks(attacks) + + lootPoolNames_1 = ['Junk'] + lootPoolChances_1 = [100] + lootGroupChance_1 = 100 + mobileTemplate.addToLootGroups(lootPoolNames_1,lootPoolChances_1,lootGroupChance_1) + + core.spawnService.addMobileTemplate('lost_aqualish_captain', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/talus/lost_aqualish_commando.py b/scripts/mobiles/talus/lost_aqualish_commando.py new file mode 100644 index 00000000..c94c9933 --- /dev/null +++ b/scripts/mobiles/talus/lost_aqualish_commando.py @@ -0,0 +1,44 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('lost_aqualish_commando') + mobileTemplate.setLevel(43) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(15) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(1) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("lost aqualish") + mobileTemplate.setAssistRange(6) + mobileTemplate.setStalker(True) + mobileTemplate.setOptionsBitmask(192) + + templates = Vector() + templates.add('object/mobile/shared_dressed_lost_aqualish_commando_male_01.iff') + templates.add('object/mobile/shared_dressed_lost_aqualish_commando_female_01.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/carbine/shared_carbine_e11.iff', 1, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedShot') + mobileTemplate.setAttacks(attacks) + + lootPoolNames_1 = ['Junk'] + lootPoolChances_1 = [100] + lootGroupChance_1 = 100 + mobileTemplate.addToLootGroups(lootPoolNames_1,lootPoolChances_1,lootGroupChance_1) + + core.spawnService.addMobileTemplate('lost_aqualish_commando', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/talus/lost_aqualish_infiltrator.py b/scripts/mobiles/talus/lost_aqualish_infiltrator.py new file mode 100644 index 00000000..c2427bea --- /dev/null +++ b/scripts/mobiles/talus/lost_aqualish_infiltrator.py @@ -0,0 +1,44 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('lost_aqualish_infiltrator') + mobileTemplate.setLevel(45) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(15) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(1) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("lost aqualish") + mobileTemplate.setAssistRange(6) + mobileTemplate.setStalker(True) + mobileTemplate.setOptionsBitmask(192) + + templates = Vector() + templates.add('object/mobile/shared_dressed_lost_aqualish_infiltrator_male_01.iff') + templates.add('object/mobile/shared_dressed_lost_aqualish_infiltrator_female_01.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/pistol/shared_pistol_d18.iff', 1, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedShot') + mobileTemplate.setAttacks(attacks) + + lootPoolNames_1 = ['Junk'] + lootPoolChances_1 = [100] + lootGroupChance_1 = 100 + mobileTemplate.addToLootGroups(lootPoolNames_1,lootPoolChances_1,lootGroupChance_1) + + core.spawnService.addMobileTemplate('lost_aqualish_infiltrator', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/talus/lost_aqualish_lookout.py b/scripts/mobiles/talus/lost_aqualish_lookout.py new file mode 100644 index 00000000..2ab06718 --- /dev/null +++ b/scripts/mobiles/talus/lost_aqualish_lookout.py @@ -0,0 +1,44 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('lost_aqualish_lookout.py') + mobileTemplate.setLevel(37) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(15) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(1) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("lost aqualish") + mobileTemplate.setAssistRange(6) + mobileTemplate.setStalker(True) + mobileTemplate.setOptionsBitmask(192) + + templates = Vector() + templates.add('object/mobile/shared_dressed_lost_aqualish_lookout_male_01.iff') + templates.add('object/mobile/shared_dressed_lost_aqualish_lookout_female_01.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/carbine/shared_carbine_e11.iff', 1, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedShot') + mobileTemplate.setAttacks(attacks) + + lootPoolNames_1 = ['Junk'] + lootPoolChances_1 = [100] + lootGroupChance_1 = 100 + mobileTemplate.addToLootGroups(lootPoolNames_1,lootPoolChances_1,lootGroupChance_1) + + core.spawnService.addMobileTemplate('lost_aqualish_lookout', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/talus/lost_aqualish_marksman.py b/scripts/mobiles/talus/lost_aqualish_marksman.py new file mode 100644 index 00000000..db516f0c --- /dev/null +++ b/scripts/mobiles/talus/lost_aqualish_marksman.py @@ -0,0 +1,44 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('lost_aqualish_marksman') + mobileTemplate.setLevel(43) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(15) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(1) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("lost aqualish") + mobileTemplate.setAssistRange(6) + mobileTemplate.setStalker(True) + mobileTemplate.setOptionsBitmask(192) + + templates = Vector() + templates.add('object/mobile/shared_dressed_lost_aqualish_marksman_male_01.iff') + templates.add('object/mobile/shared_dressed_lost_aqualish_marksman_female_01.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/rifle/shared_rifle_t21.iff', 1, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedShot') + mobileTemplate.setAttacks(attacks) + + lootPoolNames_1 = ['Junk'] + lootPoolChances_1 = [100] + lootGroupChance_1 = 100 + mobileTemplate.addToLootGroups(lootPoolNames_1,lootPoolChances_1,lootGroupChance_1) + + core.spawnService.addMobileTemplate('lost_aqualish_marksman', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/talus/lost_aqualish_marshal.py b/scripts/mobiles/talus/lost_aqualish_marshal.py new file mode 100644 index 00000000..7c4972f8 --- /dev/null +++ b/scripts/mobiles/talus/lost_aqualish_marshal.py @@ -0,0 +1,44 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('lost_aqualish_marshal') + mobileTemplate.setLevel(50) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(15) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(1) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(True) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("lost aqualish") + mobileTemplate.setAssistRange(6) + mobileTemplate.setStalker(True) + mobileTemplate.setOptionsBitmask(192) + + templates = Vector() + templates.add('object/mobile/shared_dressed_lost_aqualish_marshal_male_01.iff') + templates.add('object/mobile/shared_dressed_lost_aqualish_marshal_female_01.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/carbine/shared_carbine_e11.iff', 1, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedShot') + mobileTemplate.setAttacks(attacks) + + lootPoolNames_1 = ['Junk'] + lootPoolChances_1 = [100] + lootGroupChance_1 = 100 + mobileTemplate.addToLootGroups(lootPoolNames_1,lootPoolChances_1,lootGroupChance_1) + + core.spawnService.addMobileTemplate('lost_aqualish_marshal', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/talus/lost_aqualish_outrider.py b/scripts/mobiles/talus/lost_aqualish_outrider.py new file mode 100644 index 00000000..50dd24cc --- /dev/null +++ b/scripts/mobiles/talus/lost_aqualish_outrider.py @@ -0,0 +1,44 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('lost_aqualish_outrider') + mobileTemplate.setLevel(40) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(15) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(1) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("lost aqualish") + mobileTemplate.setAssistRange(6) + mobileTemplate.setStalker(True) + mobileTemplate.setOptionsBitmask(192) + + templates = Vector() + templates.add('object/mobile/shared_dressed_lost_aqualish_outrider_male_01.iff') + templates.add('object/mobile/shared_dressed_lost_aqualish_outrider_female_01.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/rifle/shared_rifle_t21.iff', 1, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedShot') + mobileTemplate.setAttacks(attacks) + + lootPoolNames_1 = ['Junk'] + lootPoolChances_1 = [100] + lootGroupChance_1 = 100 + mobileTemplate.addToLootGroups(lootPoolNames_1,lootPoolChances_1,lootGroupChance_1) + + core.spawnService.addMobileTemplate('lost_aqualish_outrider', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/talus/lost_aqualish_scout.py b/scripts/mobiles/talus/lost_aqualish_scout.py new file mode 100644 index 00000000..24058ce1 --- /dev/null +++ b/scripts/mobiles/talus/lost_aqualish_scout.py @@ -0,0 +1,44 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('lost_aqualish_scout') + mobileTemplate.setLevel(36) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(15) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(1) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("lost aqualish") + mobileTemplate.setAssistRange(6) + mobileTemplate.setStalker(True) + mobileTemplate.setOptionsBitmask(192) + + templates = Vector() + templates.add('object/mobile/shared_dressed_lost_aqualish_scout_male_01.iff') + templates.add('object/mobile/shared_dressed_lost_aqualish_scout_female_01.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/rifle/shared_rifle_t21.iff', 1, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedShot') + mobileTemplate.setAttacks(attacks) + + lootPoolNames_1 = ['Junk'] + lootPoolChances_1 = [100] + lootGroupChance_1 = 100 + mobileTemplate.addToLootGroups(lootPoolNames_1,lootPoolChances_1,lootGroupChance_1) + + core.spawnService.addMobileTemplate('lost_aqualish_scout', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/talus/lost_aqualish_soldier.py b/scripts/mobiles/talus/lost_aqualish_soldier.py new file mode 100644 index 00000000..c1012675 --- /dev/null +++ b/scripts/mobiles/talus/lost_aqualish_soldier.py @@ -0,0 +1,44 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('lost_aqualish_soldier') + mobileTemplate.setLevel(39) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(15) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(1) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("lost aqualish") + mobileTemplate.setAssistRange(6) + mobileTemplate.setStalker(True) + mobileTemplate.setOptionsBitmask(192) + + templates = Vector() + templates.add('object/mobile/shared_dressed_lost_aqualish_soldier_male_01.iff') + templates.add('object/mobile/shared_dressed_lost_aqualish_soldier_female_01.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/carbine/shared_carbine_e11.iff', 1, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedShot') + mobileTemplate.setAttacks(attacks) + + lootPoolNames_1 = ['Junk'] + lootPoolChances_1 = [100] + lootGroupChance_1 = 100 + mobileTemplate.addToLootGroups(lootPoolNames_1,lootPoolChances_1,lootGroupChance_1) + + core.spawnService.addMobileTemplate('lost_aqualish_soldier', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/talus/lost_aqualish_warchief.py b/scripts/mobiles/talus/lost_aqualish_warchief.py new file mode 100644 index 00000000..ef527cdb --- /dev/null +++ b/scripts/mobiles/talus/lost_aqualish_warchief.py @@ -0,0 +1,44 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('lost_aqualish_warchief') + mobileTemplate.setLevel(52) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(15) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(1) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("lost aqualish") + mobileTemplate.setAssistRange(6) + mobileTemplate.setStalker(True) + mobileTemplate.setOptionsBitmask(192) + + templates = Vector() + templates.add('object/mobile/shared_dressed_lost_aqualish_warchief_male_01.iff') + templates.add('object/mobile/shared_dressed_lost_aqualish_warchief_female_01.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/carbine/shared_carbine_e11.iff', 1, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedShot') + mobileTemplate.setAttacks(attacks) + + lootPoolNames_1 = ['Junk'] + lootPoolChances_1 = [100] + lootGroupChance_1 = 100 + mobileTemplate.addToLootGroups(lootPoolNames_1,lootPoolChances_1,lootGroupChance_1) + + core.spawnService.addMobileTemplate('lost_aqualish_warchief', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/talus/lost_aqualish_warrior.py b/scripts/mobiles/talus/lost_aqualish_warrior.py new file mode 100644 index 00000000..96c477e9 --- /dev/null +++ b/scripts/mobiles/talus/lost_aqualish_warrior.py @@ -0,0 +1,44 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('lost_aqualish_warrior') + mobileTemplate.setLevel(42) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(15) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(1) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("lost aqualish") + mobileTemplate.setAssistRange(6) + mobileTemplate.setStalker(True) + mobileTemplate.setOptionsBitmask(192) + + templates = Vector() + templates.add('object/mobile/shared_dressed_lost_aqualish_warrior_male_01.iff') + templates.add('object/mobile/shared_dressed_lost_aqualish_warrior_female_01.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/pistol/shared_pistol_dh17.iff', 1, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedShot') + mobileTemplate.setAttacks(attacks) + + lootPoolNames_1 = ['Junk'] + lootPoolChances_1 = [100] + lootGroupChance_1 = 100 + mobileTemplate.addToLootGroups(lootPoolNames_1,lootPoolChances_1,lootGroupChance_1) + + core.spawnService.addMobileTemplate('lost_aqualish_warrior', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/talus/male_roba.py b/scripts/mobiles/talus/male_roba.py new file mode 100644 index 00000000..c8ce452a --- /dev/null +++ b/scripts/mobiles/talus/male_roba.py @@ -0,0 +1,44 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('roba_male') + mobileTemplate.setLevel(43) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(5) + mobileTemplate.setMaxSpawnDistance(10) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setMeatType("Carnivore Meat") + mobileTemplate.setMeatAmount(11) + mobileTemplate.setHideType("Leathery Hide") + mobileTemplate.setBoneAmount(17) + mobileTemplate.setBoneType("Mammal Bone") + mobileTemplate.setHideAmount(12) + mobileTemplate.setSocialGroup("roba") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(False) + mobileTemplate.setOptionsBitmask(128) + + templates = Vector() + templates.add('object/mobile/shared_roba.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('male_roba', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/talus/meager_tortur.py b/scripts/mobiles/talus/meager_tortur.py new file mode 100644 index 00000000..97522b6e --- /dev/null +++ b/scripts/mobiles/talus/meager_tortur.py @@ -0,0 +1,44 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('meager_tortur') + mobileTemplate.setLevel(42) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(.7) + mobileTemplate.setMeatType("Carnivore Meat") + mobileTemplate.setMeatAmount(650) + mobileTemplate.setHideType("Wooly Hide") + mobileTemplate.setHideAmount(575) + mobileTemplate.setBoneType("Mammal Bones") + mobileTemplate.setBoneAmount(650) + mobileTemplate.setSocialGroup("tortur") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(False) + mobileTemplate.setOptionsBitmask(128) + + templates = Vector() + templates.add('object/mobile/shared_torton_hue.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('meager_tortur', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/talus/minor_guf_drolg.py b/scripts/mobiles/talus/minor_guf_drolg.py new file mode 100644 index 00000000..53249014 --- /dev/null +++ b/scripts/mobiles/talus/minor_guf_drolg.py @@ -0,0 +1,44 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('minor_guf_drolg') + mobileTemplate.setLevel(36) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(.7) + mobileTemplate.setMeatType("Reptile Meat") + mobileTemplate.setMeatAmount(300) + mobileTemplate.setHideType("Leathery Hide") + mobileTemplate.setHideAmount(240) + mobileTemplate.setBoneType("Mammal Bones") + mobileTemplate.setBoneAmount(170) + mobileTemplate.setSocialGroup("guf drolg") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(False) + mobileTemplate.setOptionsBitmask(128) + + templates = Vector() + templates.add('object/mobile/shared_guf_drolg.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('minor_guf_drolg', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/talus/minor_sludge_panther.py b/scripts/mobiles/talus/minor_sludge_panther.py new file mode 100644 index 00000000..29c8761a --- /dev/null +++ b/scripts/mobiles/talus/minor_sludge_panther.py @@ -0,0 +1,44 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('minor_sludge_panther') + mobileTemplate.setLevel(37) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(5) + mobileTemplate.setMaxSpawnDistance(10) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(.7) + mobileTemplate.setMeatType("Carnivore Meat") + mobileTemplate.setMeatAmount(20) + mobileTemplate.setHideType("Leathery Hide") + mobileTemplate.setBoneAmount(27) + mobileTemplate.setBoneType("Mammal Bone") + mobileTemplate.setHideAmount(27) + mobileTemplate.setSocialGroup("sludge panther") + mobileTemplate.setAssistRange(6) + mobileTemplate.setStalker(False) + mobileTemplate.setOptionsBitmask(192) + + templates = Vector() + templates.add('object/mobile/shared_sludge_panther.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('minor_sludge_panther', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/talus/mire_marauder.py b/scripts/mobiles/talus/mire_marauder.py new file mode 100644 index 00000000..463aa5b2 --- /dev/null +++ b/scripts/mobiles/talus/mire_marauder.py @@ -0,0 +1,44 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('mire_marauder') + mobileTemplate.setLevel(60) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(5) + mobileTemplate.setMaxSpawnDistance(10) + mobileTemplate.setDeathblow(True) + mobileTemplate.setScale(1.1) + mobileTemplate.setMeatType("Carnivore Meat") + mobileTemplate.setMeatAmount(150) + mobileTemplate.setHideType("Leathery Hide") + mobileTemplate.setBoneAmount(140) + mobileTemplate.setBoneType("Mammal Bone") + mobileTemplate.setHideAmount(140) + mobileTemplate.setSocialGroup("sludge panther") + mobileTemplate.setAssistRange(6) + mobileTemplate.setStalker(True) + mobileTemplate.setOptionsBitmask(192) + + templates = Vector() + templates.add('object/mobile/shared_sludge_panther_hue.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('mire_marauder', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/talus/mutated_kahmurra.py b/scripts/mobiles/talus/mutated_kahmurra.py new file mode 100644 index 00000000..7912117f --- /dev/null +++ b/scripts/mobiles/talus/mutated_kahmurra.py @@ -0,0 +1,44 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('mutated_kahmurra') + mobileTemplate.setLevel(50) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setMeatType("Herbivore Meat") + mobileTemplate.setMeatAmount(50) + mobileTemplate.setHideType("Bristley Hide") + mobileTemplate.setHideAmount(33) + mobileTemplate.setBoneType("Mammal Bone") + mobileTemplate.setBoneAmount(37) + mobileTemplate.setSocialGroup("kahmurra") + mobileTemplate.setAssistRange(6) + mobileTemplate.setStalker(False) + mobileTemplate.setOptionsBitmask(192) + + templates = Vector() + templates.add('object/mobile/shared_kahmurra.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('mutated_kahmurra', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/talus/oozing_dung_mite_guardian.py b/scripts/mobiles/talus/oozing_dung_mite_guardian.py new file mode 100644 index 00000000..0ec03bea --- /dev/null +++ b/scripts/mobiles/talus/oozing_dung_mite_guardian.py @@ -0,0 +1,40 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('oozing_dung_royal_guardian') + mobileTemplate.setLevel(16) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(12) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(5) + mobileTemplate.setMaxSpawnDistance(10) + mobileTemplate.setDeathblow(True) + mobileTemplate.setScale(1) + mobileTemplate.setMeatType("Insect Meat") + mobileTemplate.setMeatAmount(16) + mobileTemplate.setSocialGroup("decay mite") + mobileTemplate.setAssistRange(4) + mobileTemplate.setStalker(False) + mobileTemplate.setOptionsBitmask(192) + + templates = Vector() + templates.add('object/mobile/shared_bark_mite_hue.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureRangedAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('oozing_dung_mite_guardian', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/talus/painted_spat.py b/scripts/mobiles/talus/painted_spat.py new file mode 100644 index 00000000..d8bf78eb --- /dev/null +++ b/scripts/mobiles/talus/painted_spat.py @@ -0,0 +1,38 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('painted_spat') + mobileTemplate.setLevel(30) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(True) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("carrion spat") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(False) + mobileTemplate.setOptionsBitmask(192) + + templates = Vector() + templates.add('object/mobile/shared_carrion_spat_hue.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('painted_spat', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/talus/percussive_rasp.py b/scripts/mobiles/talus/percussive_rasp.py new file mode 100644 index 00000000..0aaa677b --- /dev/null +++ b/scripts/mobiles/talus/percussive_rasp.py @@ -0,0 +1,42 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('percussive_rasp') + mobileTemplate.setLevel(40) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(5) + mobileTemplate.setMaxSpawnDistance(10) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setMeatType("Avian Meat") + mobileTemplate.setMeatAmount(12) + mobileTemplate.setBoneType("Avian Bone") + mobileTemplate.setHideAmount(5) + mobileTemplate.setSocialGroup("rasp") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(False) + mobileTemplate.setOptionsBitmask(128) + + templates = Vector() + templates.add('object/mobile/shared_horned_rasp.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('percussive_rasp', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/talus/poacher_talus.py b/scripts/mobiles/talus/poacher_talus.py new file mode 100644 index 00000000..370fcd43 --- /dev/null +++ b/scripts/mobiles/talus/poacher_talus.py @@ -0,0 +1,38 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('poacher_talus') + mobileTemplate.setLevel(17) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(15) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(1) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(True) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("talus poachers") + mobileTemplate.setAssistRange(6) + mobileTemplate.setStalker(True) + mobileTemplate.setOptionsBitmask(192) + + templates = Vector() + templates.add('object/mobile/shared_dressed_forest_hunter.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/rifle/shared_rifle_e11.iff', 1, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedShot') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('poacher_talus', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/talus/putrid_decay_mite_hatchling.py b/scripts/mobiles/talus/putrid_decay_mite_hatchling.py new file mode 100644 index 00000000..9f71b865 --- /dev/null +++ b/scripts/mobiles/talus/putrid_decay_mite_hatchling.py @@ -0,0 +1,40 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('putrid_decay_mite_hatchling') + mobileTemplate.setLevel(33) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(.5) + mobileTemplate.setMeatType("Insect Meat") + mobileTemplate.setMeatAmount(12) + mobileTemplate.setSocialGroup("decay mite") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(False) + mobileTemplate.setOptionsBitmask(128) + + templates = Vector() + templates.add('object/mobile/shared_bark_mite_hue.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('putrid_decay_mite_hatchling', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/talus/rabid_mutant_kahmurra.py b/scripts/mobiles/talus/rabid_mutant_kahmurra.py new file mode 100644 index 00000000..d91e748a --- /dev/null +++ b/scripts/mobiles/talus/rabid_mutant_kahmurra.py @@ -0,0 +1,44 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('rabid_mutant_kahmurra') + mobileTemplate.setLevel(40) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setMeatType("Herbivore Meat") + mobileTemplate.setMeatAmount(50) + mobileTemplate.setHideType("Bristley Hide") + mobileTemplate.setHideAmount(30) + mobileTemplate.setBoneType("Mammal Bone") + mobileTemplate.setBoneAmount(35) + mobileTemplate.setSocialGroup("kahmurra") + mobileTemplate.setAssistRange(6) + mobileTemplate.setStalker(False) + mobileTemplate.setOptionsBitmask(192) + + templates = Vector() + templates.add('object/mobile/shared_kahmurra.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('rabid_mutant_kahmurra', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/talus/ravenous_rasp.py b/scripts/mobiles/talus/ravenous_rasp.py new file mode 100644 index 00000000..fee9afd9 --- /dev/null +++ b/scripts/mobiles/talus/ravenous_rasp.py @@ -0,0 +1,42 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('ravenous_rasp') + mobileTemplate.setLevel(35) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(5) + mobileTemplate.setMaxSpawnDistance(10) + mobileTemplate.setDeathblow(True) + mobileTemplate.setScale(1) + mobileTemplate.setMeatType("Avian Meat") + mobileTemplate.setMeatAmount(45) + mobileTemplate.setBoneType("Avian Bone") + mobileTemplate.setHideAmount(15) + mobileTemplate.setSocialGroup("voracious rasp") + mobileTemplate.setAssistRange(6) + mobileTemplate.setStalker(True) + mobileTemplate.setOptionsBitmask(192) + + templates = Vector() + templates.add('object/mobile/shared_horned_rasp_hue.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('ravenous_rasp', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/talus/rot_mite.py b/scripts/mobiles/talus/rot_mite.py new file mode 100644 index 00000000..1036d215 --- /dev/null +++ b/scripts/mobiles/talus/rot_mite.py @@ -0,0 +1,42 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('rot_mite') + mobileTemplate.setLevel(39) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(.8) + mobileTemplate.setMeatType("Insect Meat") + mobileTemplate.setMeatAmount(3) + mobileTemplate.setHideType("Scaley Hide") + mobileTemplate.setHideAmount(2) + mobileTemplate.setSocialGroup("decay mite") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(False) + mobileTemplate.setOptionsBitmask(128) + + templates = Vector() + templates.add('object/mobile/shared_bark_mite_hue.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('rot_mite', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/talus/savage_guf_drolg.py b/scripts/mobiles/talus/savage_guf_drolg.py new file mode 100644 index 00000000..e1b69638 --- /dev/null +++ b/scripts/mobiles/talus/savage_guf_drolg.py @@ -0,0 +1,44 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('savage_guf_drolg') + mobileTemplate.setLevel(43) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setMeatType("Reptile Meat") + mobileTemplate.setMeatAmount(550) + mobileTemplate.setHideType("Leathery Hide") + mobileTemplate.setHideAmount(460) + mobileTemplate.setBoneType("Mammal Bones") + mobileTemplate.setBoneAmount(320) + mobileTemplate.setSocialGroup("guf drolg") + mobileTemplate.setAssistRange(6) + mobileTemplate.setStalker(True) + mobileTemplate.setOptionsBitmask(192) + + templates = Vector() + templates.add('object/mobile/shared_guf_drolg.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('savage_guf_drolg', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/talus/sickly_decay_mite_queen.py b/scripts/mobiles/talus/sickly_decay_mite_queen.py new file mode 100644 index 00000000..2784087a --- /dev/null +++ b/scripts/mobiles/talus/sickly_decay_mite_queen.py @@ -0,0 +1,40 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('sickly_decay_mite_queen') + mobileTemplate.setLevel(19) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(12) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setMeatType("Insect Meat") + mobileTemplate.setMeatAmount(15) + mobileTemplate.setSocialGroup("decay mite") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(False) + mobileTemplate.setOptionsBitmask(128) + + templates = Vector() + templates.add('object/mobile/shared_bark_mite_hue.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureRangedAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('sickly_decay_mite_queen', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/talus/sleemo_delinquent.py b/scripts/mobiles/talus/sleemo_delinquent.py new file mode 100644 index 00000000..387376a7 --- /dev/null +++ b/scripts/mobiles/talus/sleemo_delinquent.py @@ -0,0 +1,44 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('sleemo_delinquent') + mobileTemplate.setLevel(4) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(15) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(1) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("sleemo gang") + mobileTemplate.setAssistRange(6) + mobileTemplate.setStalker(True) + mobileTemplate.setOptionsBitmask(128) + + templates = Vector() + templates.add('object/mobile/shared_dressed_talus_sif_mercenary_rodian_01.iff') + + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/carbine/shared_carbine_e11.iff', 1, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedShot') + mobileTemplate.setAttacks(attacks) + + lootPoolNames_1 = ['Junk'] + lootPoolChances_1 = [100] + lootGroupChance_1 = 100 + mobileTemplate.addToLootGroups(lootPoolNames_1,lootPoolChances_1,lootGroupChance_1) + + core.spawnService.addMobileTemplate('sleemo_delinquent', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/talus/sleemo_hoodlum.py b/scripts/mobiles/talus/sleemo_hoodlum.py new file mode 100644 index 00000000..7f894349 --- /dev/null +++ b/scripts/mobiles/talus/sleemo_hoodlum.py @@ -0,0 +1,44 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('sleemo_hoodlum') + mobileTemplate.setLevel(2) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(15) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(1) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("sleemo gang") + mobileTemplate.setAssistRange(6) + mobileTemplate.setStalker(True) + mobileTemplate.setOptionsBitmask(128) + + templates = Vector() + templates.add('object/mobile/shared_dressed_talus_sif_mercenary_rodian_02.iff') + + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/carbine/shared_carbine_e11.iff', 1, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedShot') + mobileTemplate.setAttacks(attacks) + + lootPoolNames_1 = ['Junk'] + lootPoolChances_1 = [100] + lootGroupChance_1 = 100 + mobileTemplate.addToLootGroups(lootPoolNames_1,lootPoolChances_1,lootGroupChance_1) + + core.spawnService.addMobileTemplate('sleemo_hoodlum', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/talus/sleemo_punk.py b/scripts/mobiles/talus/sleemo_punk.py new file mode 100644 index 00000000..1feddcb4 --- /dev/null +++ b/scripts/mobiles/talus/sleemo_punk.py @@ -0,0 +1,44 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('sleemo_punk') + mobileTemplate.setLevel(2) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(15) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(1) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("sleemo gang") + mobileTemplate.setAssistRange(6) + mobileTemplate.setStalker(True) + mobileTemplate.setOptionsBitmask(128) + + templates = Vector() + templates.add('object/mobile/shared_dressed_talus_sif_mercenary_trand_01.iff') + + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/carbine/shared_carbine_e11.iff', 1, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedShot') + mobileTemplate.setAttacks(attacks) + + lootPoolNames_1 = ['Junk'] + lootPoolChances_1 = [100] + lootGroupChance_1 = 100 + mobileTemplate.addToLootGroups(lootPoolNames_1,lootPoolChances_1,lootGroupChance_1) + + core.spawnService.addMobileTemplate('sleemo_punk', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/talus/sleemo_scamp.py b/scripts/mobiles/talus/sleemo_scamp.py new file mode 100644 index 00000000..326768a3 --- /dev/null +++ b/scripts/mobiles/talus/sleemo_scamp.py @@ -0,0 +1,44 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('sleemo_scamp') + mobileTemplate.setLevel(5) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(15) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(1) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("sleemo gang") + mobileTemplate.setAssistRange(6) + mobileTemplate.setStalker(True) + mobileTemplate.setOptionsBitmask(128) + + templates = Vector() + templates.add('object/mobile/shared_dressed_talus_sif_mercenary_trand_02.iff') + + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/carbine/shared_carbine_e11.iff', 1, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedShot') + mobileTemplate.setAttacks(attacks) + + lootPoolNames_1 = ['Junk'] + lootPoolChances_1 = [100] + lootGroupChance_1 = 100 + mobileTemplate.addToLootGroups(lootPoolNames_1,lootPoolChances_1,lootGroupChance_1) + + core.spawnService.addMobileTemplate('sleemo_scamp', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/talus/sleemo_vandal.py b/scripts/mobiles/talus/sleemo_vandal.py new file mode 100644 index 00000000..b57aa58b --- /dev/null +++ b/scripts/mobiles/talus/sleemo_vandal.py @@ -0,0 +1,44 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('sleemo_vandal') + mobileTemplate.setLevel(7) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(15) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(1) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("sleemo gang") + mobileTemplate.setAssistRange(6) + mobileTemplate.setStalker(True) + mobileTemplate.setOptionsBitmask(128) + + templates = Vector() + templates.add('object/mobile/shared_dressed_talus_sif_mercenary_rodian_01.iff') + + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/carbine/shared_carbine_e11.iff', 1, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedShot') + mobileTemplate.setAttacks(attacks) + + lootPoolNames_1 = ['Junk'] + lootPoolChances_1 = [100] + lootGroupChance_1 = 100 + mobileTemplate.addToLootGroups(lootPoolNames_1,lootPoolChances_1,lootGroupChance_1) + + core.spawnService.addMobileTemplate('sleemo_vandal', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/talus/sludge_panther.py b/scripts/mobiles/talus/sludge_panther.py new file mode 100644 index 00000000..5fbf5deb --- /dev/null +++ b/scripts/mobiles/talus/sludge_panther.py @@ -0,0 +1,43 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + mobileTemplate.setCreatureName('sludge_panther') + mobileTemplate.setLevel(44) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(5) + mobileTemplate.setMaxSpawnDistance(10) + mobileTemplate.setDeathblow(True) + mobileTemplate.setScale(1) + mobileTemplate.setMeatType("Carnivore Meat") + mobileTemplate.setMeatAmount(24) + mobileTemplate.setHideType("Leathery Hide") + mobileTemplate.setBoneAmount(30) + mobileTemplate.setBoneType("Mammal Bone") + mobileTemplate.setHideAmount(31) + mobileTemplate.setSocialGroup("sludge panther") + mobileTemplate.setAssistRange(6) + mobileTemplate.setStalker(False) + mobileTemplate.setOptionsBitmask(192) + + templates = Vector() + templates.add('object/mobile/shared_sludge_panther.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('sludge_panther', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/talus/song_rasp.py b/scripts/mobiles/talus/song_rasp.py new file mode 100644 index 00000000..de0825bb --- /dev/null +++ b/scripts/mobiles/talus/song_rasp.py @@ -0,0 +1,41 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + mobileTemplate.setCreatureName('song_rasp') + mobileTemplate.setLevel(37) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(5) + mobileTemplate.setMaxSpawnDistance(10) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setMeatType("Avian Meat") + mobileTemplate.setMeatAmount(10) + mobileTemplate.setBoneType("Avian Bone") + mobileTemplate.setHideAmount(3) + mobileTemplate.setSocialGroup("rasp") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(False) + mobileTemplate.setOptionsBitmask(128) + + templates = Vector() + templates.add('object/mobile/shared_horned_rasp_hue.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('song_rasp', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/talus/stunted_huf_dun.py b/scripts/mobiles/talus/stunted_huf_dun.py new file mode 100644 index 00000000..a2e1a455 --- /dev/null +++ b/scripts/mobiles/talus/stunted_huf_dun.py @@ -0,0 +1,44 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('stunted_huf_dun') + mobileTemplate.setLevel(36) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(.6) + mobileTemplate.setMeatType("Herbivore Meat") + mobileTemplate.setMeatAmount(775) + mobileTemplate.setHideType("Leathery Hide") + mobileTemplate.setHideAmount(800) + mobileTemplate.setBoneType("Mammal Bones") + mobileTemplate.setBoneAmount(775) + mobileTemplate.setSocialGroup("huf dun") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(False) + mobileTemplate.setOptionsBitmask(128) + + templates = Vector() + templates.add('object/mobile/shared_huf_dun.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('stunted_huf_dun', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/talus/tortur_bull.py b/scripts/mobiles/talus/tortur_bull.py new file mode 100644 index 00000000..db441e94 --- /dev/null +++ b/scripts/mobiles/talus/tortur_bull.py @@ -0,0 +1,44 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('tortur_bull') + mobileTemplate.setLevel(50) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setMeatType("Carnivore Meat") + mobileTemplate.setMeatAmount(1300) + mobileTemplate.setHideType("Leathery Hide") + mobileTemplate.setHideAmount(1151) + mobileTemplate.setBoneType("Mammal Bones") + mobileTemplate.setBoneAmount(1301) + mobileTemplate.setSocialGroup("tortur") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(False) + mobileTemplate.setOptionsBitmask(128) + + templates = Vector() + templates.add('object/mobile/shared_torton_hue.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('tortur_bull', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/talus/trandoshan_sif_02.py b/scripts/mobiles/talus/trandoshan_sif_02.py new file mode 100644 index 00000000..6a347d6e --- /dev/null +++ b/scripts/mobiles/talus/trandoshan_sif_02.py @@ -0,0 +1,44 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('trandoshan_sif') + mobileTemplate.setLevel(43) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(15) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(1) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("sif") + mobileTemplate.setAssistRange(6) + mobileTemplate.setStalker(True) + mobileTemplate.setOptionsBitmask(128) + + templates = Vector() + templates.add('object/mobile/shared_dressed_talus_sif_mercenary_trand_02.iff') + + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/carbine/shared_carbine_e11.iff', 1, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedShot') + mobileTemplate.setAttacks(attacks) + + lootPoolNames_1 = ['Junk'] + lootPoolChances_1 = [100] + lootGroupChance_1 = 100 + mobileTemplate.addToLootGroups(lootPoolNames_1,lootPoolChances_1,lootGroupChance_1) + + core.spawnService.addMobileTemplate('trandoshan_sif_02', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/talus/vicious_huf_dun.py b/scripts/mobiles/talus/vicious_huf_dun.py new file mode 100644 index 00000000..c45ba93d --- /dev/null +++ b/scripts/mobiles/talus/vicious_huf_dun.py @@ -0,0 +1,44 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('vicious_huf_dun') + mobileTemplate.setLevel(46) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(True) + mobileTemplate.setScale(1) + mobileTemplate.setMeatType("Herbivore Meat") + mobileTemplate.setMeatAmount(850) + mobileTemplate.setHideType("Leathery Hide") + mobileTemplate.setHideAmount(900) + mobileTemplate.setBoneType("Mammal Bones") + mobileTemplate.setBoneAmount(850) + mobileTemplate.setSocialGroup("huf dun") + mobileTemplate.setAssistRange(6) + mobileTemplate.setStalker(False) + mobileTemplate.setOptionsBitmask(192) + + templates = Vector() + templates.add('object/mobile/shared_huf_dun.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('vicious_huf_dun', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/talus/voracious_rasp.py b/scripts/mobiles/talus/voracious_rasp.py new file mode 100644 index 00000000..2389c673 --- /dev/null +++ b/scripts/mobiles/talus/voracious_rasp.py @@ -0,0 +1,41 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + mobileTemplate.setCreatureName('voracious_rasp') + mobileTemplate.setLevel(35) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(5) + mobileTemplate.setMaxSpawnDistance(10) + mobileTemplate.setDeathblow(True) + mobileTemplate.setScale(1) + mobileTemplate.setMeatType("Avian Meat") + mobileTemplate.setMeatAmount(60) + mobileTemplate.setBoneType("Avian Bone") + mobileTemplate.setHideAmount(25) + mobileTemplate.setSocialGroup("voracious rasp") + mobileTemplate.setAssistRange(6) + mobileTemplate.setStalker(True) + mobileTemplate.setOptionsBitmask(192) + + templates = Vector() + templates.add('object/mobile/shared_horned_rasp_hue.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('voracious_rasp', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/talus/wolf_kima.py b/scripts/mobiles/talus/wolf_kima.py new file mode 100644 index 00000000..965fdb54 --- /dev/null +++ b/scripts/mobiles/talus/wolf_kima.py @@ -0,0 +1,44 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('wolf_kima') + mobileTemplate.setLevel(45) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1.2) + mobileTemplate.setMeatType("Herbivore Meat") + mobileTemplate.setMeatAmount(10) + mobileTemplate.setHideType("Bristley Hide") + mobileTemplate.setHideAmount(11) + mobileTemplate.setBoneType("Mammal Bones") + mobileTemplate.setBoneAmount(10) + mobileTemplate.setSocialGroup("kima") + mobileTemplate.setAssistRange(6) + mobileTemplate.setStalker(True) + mobileTemplate.setOptionsBitmask(192) + + templates = Vector() + templates.add('object/mobile/shared_kima.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('wolf_kima', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/tatooine/adolescent_krayt_dragon.py b/scripts/mobiles/tatooine/adolescent_krayt_dragon.py new file mode 100644 index 00000000..f40e4860 --- /dev/null +++ b/scripts/mobiles/tatooine/adolescent_krayt_dragon.py @@ -0,0 +1,47 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('krayt_dragon_adolescent') + mobileTemplate.setLevel(84) + mobileTemplate.setMinLevel(80) + mobileTemplate.setMaxLevel(84) + mobileTemplate.setDifficulty(2) + mobileTemplate.setAttackRange(10) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(True) + mobileTemplate.setScale(0.7) + mobileTemplate.setMeatType("Carnivore Meat") + mobileTemplate.setMeatAmount(1700) + mobileTemplate.setHideType("Bristly Hide") + mobileTemplate.setHideAmount(950) + mobileTemplate.setBoneType("Animal Bones") + mobileTemplate.setBoneAmount(905) + mobileTemplate.setSocialGroup("krayt dragon") + mobileTemplate.setAssistRange(6) + mobileTemplate.setStalker(False) + mobileTemplate.setOptionsBitmask(192) + + + templates = Vector() + templates.add('object/mobile/shared_krayt_dragon.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('adolescent_krayt_dragon', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/tatooine/alkhara_bandit.py b/scripts/mobiles/tatooine/alkhara_bandit.py new file mode 100644 index 00000000..3aaa476e --- /dev/null +++ b/scripts/mobiles/tatooine/alkhara_bandit.py @@ -0,0 +1,40 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('alkhara_bandit') + mobileTemplate.setLevel(15) + mobileTemplate.setMinLevel(14) + mobileTemplate.setMaxLevel(16) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(12) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(0) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(True) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("alkhara") + mobileTemplate.setAssistRange(4) + mobileTemplate.setStalker(True) + + + templates = Vector() + templates.add('object/mobile/shared_dressed_tatooine_alkhara_bandit.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/rifle/shared_rifle_cdef.iff', 0, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedShotrifle') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('alkhara_bandit', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/tatooine/alkhara_bandit_king.py b/scripts/mobiles/tatooine/alkhara_bandit_king.py new file mode 100644 index 00000000..df9d1855 --- /dev/null +++ b/scripts/mobiles/tatooine/alkhara_bandit_king.py @@ -0,0 +1,38 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('alkhara_bandit_king') + mobileTemplate.setLevel(17) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(12) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(0) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(True) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("alkhara") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(True) + + + templates = Vector() + templates.add('object/mobile/shared_dressed_tatooine_alkhara_king.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/rifle/shared_rifle_cdef.iff', 0, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedShotrifle') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('alkhara_bandit_king', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/tatooine/alkhara_champion.py b/scripts/mobiles/tatooine/alkhara_champion.py new file mode 100644 index 00000000..16d0180f --- /dev/null +++ b/scripts/mobiles/tatooine/alkhara_champion.py @@ -0,0 +1,38 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('alkhara_champion') + mobileTemplate.setLevel(21) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(12) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(1) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(True) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("alkhara") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(True) + + + templates = Vector() + templates.add('object/mobile/shared_dressed_tatooine_alkhara_champion.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/carbine/shared_carbine_cdef.iff', 1, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedShot') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('alkhara_bandit_champion', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/tatooine/alkhara_lieutenant.py b/scripts/mobiles/tatooine/alkhara_lieutenant.py new file mode 100644 index 00000000..897bfdaf --- /dev/null +++ b/scripts/mobiles/tatooine/alkhara_lieutenant.py @@ -0,0 +1,38 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('alkhara_lieutenant') + mobileTemplate.setLevel(20) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(12) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(0) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(True) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("alkhara") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(True) + + + templates = Vector() + templates.add('object/mobile/shared_dressed_tatooine_alkhara_lieutenant.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/rifle/shared_rifle_cdef.iff', 0, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedShotrifle') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('alkhara_lieutenant', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/tatooine/armodragon.py b/scripts/mobiles/tatooine/armodragon.py new file mode 100644 index 00000000..c571d5ee --- /dev/null +++ b/scripts/mobiles/tatooine/armodragon.py @@ -0,0 +1,45 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('dragonet_armodragon') + mobileTemplate.setLevel(25) + mobileTemplate.setMinLevel(25) + mobileTemplate.setMaxLevel(27) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(15) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setMeatType("Carnivore Meat") + mobileTemplate.setMeatAmount(125) + mobileTemplate.setHideType("Bristly Hide") + mobileTemplate.setHideAmount(68) + mobileTemplate.setBoneType("Animal Bones") + mobileTemplate.setBoneAmount(75) + mobileTemplate.setSocialGroup("dragonet") + mobileTemplate.setAssistRange(24) + mobileTemplate.setStalker(True) + + templates = Vector() + templates.add('object/mobile/shared_dragonet.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureRangedAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('armodragon', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/tatooine/arrworr.py b/scripts/mobiles/tatooine/arrworr.py new file mode 100644 index 00000000..325f6e1a --- /dev/null +++ b/scripts/mobiles/tatooine/arrworr.py @@ -0,0 +1,38 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('c_syren_3_arrworr') + mobileTemplate.setLevel(55) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("kashyyyk") + mobileTemplate.setAssistRange(12) + mobileTemplate.setStalker(False) + + + templates = Vector() + templates.add('object/mobile/shared_c_syren_3_trandoshan_boss.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('arrworr', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/tatooine/bantha.py b/scripts/mobiles/tatooine/bantha.py new file mode 100644 index 00000000..aa1699eb --- /dev/null +++ b/scripts/mobiles/tatooine/bantha.py @@ -0,0 +1,45 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('bantha') + mobileTemplate.setLevel(14) + mobileTemplate.setMinLevel(14) + mobileTemplate.setMaxLevel(15) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setMeatType("Herbivore Meat") + mobileTemplate.setMeatAmount(450) + mobileTemplate.setHideType("Wooly Hide") + mobileTemplate.setHideAmount(325) + mobileTemplate.setBoneType("Animal Bones") + mobileTemplate.setBoneAmount(250) + mobileTemplate.setSocialGroup("bantha") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(False) + + templates = Vector() + templates.add('object/mobile/shared_bantha_hue.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('bantha', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/tatooine/bantha_low.py b/scripts/mobiles/tatooine/bantha_low.py new file mode 100644 index 00000000..18c3f7cb --- /dev/null +++ b/scripts/mobiles/tatooine/bantha_low.py @@ -0,0 +1,45 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('bantha') + mobileTemplate.setLevel(8) + mobileTemplate.setMinLevel(8) + mobileTemplate.setMaxLevel(10) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setMeatType("Herbivore Meat") + mobileTemplate.setMeatAmount(450) + mobileTemplate.setHideType("Wooly Hide") + mobileTemplate.setBoneAmount(250) + mobileTemplate.setBoneType("Animal Bones") + mobileTemplate.setHideAmount(325) + mobileTemplate.setSocialGroup("bantha") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(False) + + templates = Vector() + templates.add('object/mobile/shared_bantha_hue.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('bantha_low', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/tatooine/bantha_matriarch.py b/scripts/mobiles/tatooine/bantha_matriarch.py new file mode 100644 index 00000000..6f480187 --- /dev/null +++ b/scripts/mobiles/tatooine/bantha_matriarch.py @@ -0,0 +1,45 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('matriarch_bantha') + mobileTemplate.setLevel(15) + mobileTemplate.setMinLevel(15) + mobileTemplate.setMaxLevel(17) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setMeatType("Herbivore Meat") + mobileTemplate.setMeatAmount(485) + mobileTemplate.setHideType("Wooly Hide") + mobileTemplate.setBoneAmount(365) + mobileTemplate.setBoneType("Animal Bones") + mobileTemplate.setHideAmount(320) + mobileTemplate.setSocialGroup("bantha") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(False) + + templates = Vector() + templates.add('object/mobile/shared_matriarch_bantha.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('bantha_matriarch', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/tatooine/bd34.py b/scripts/mobiles/tatooine/bd34.py new file mode 100644 index 00000000..e99b37e7 --- /dev/null +++ b/scripts/mobiles/tatooine/bd34.py @@ -0,0 +1,37 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('legacy_lin34_droid') + mobileTemplate.setLevel(22) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(15) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(1) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("astromech") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(False) + + templates = Vector() + templates.add('object/mobile/shared_battle_droid.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/carbine/shared_carbine_e5.iff', 1, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedShot') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('bd34', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/tatooine/blight_boar.py b/scripts/mobiles/tatooine/blight_boar.py new file mode 100644 index 00000000..a5bde055 --- /dev/null +++ b/scripts/mobiles/tatooine/blight_boar.py @@ -0,0 +1,45 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('zucca_boar_blight') + mobileTemplate.setLevel(9) + mobileTemplate.setMinLevel(9) + mobileTemplate.setMaxLevel(10) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setMeatType("Herbivore Meat") + mobileTemplate.setMeatAmount(65) + mobileTemplate.setHideType("Leathery Hide") + mobileTemplate.setHideAmount(40) + mobileTemplate.setBoneType("Animal Bones") + mobileTemplate.setBoneAmount(25) + mobileTemplate.setSocialGroup("bantha") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(False) + + templates = Vector() + templates.add('object/mobile/shared_zucca_boar.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('blight_boar', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/tatooine/bocatt.py b/scripts/mobiles/tatooine/bocatt.py new file mode 100644 index 00000000..69d0b5ef --- /dev/null +++ b/scripts/mobiles/tatooine/bocatt.py @@ -0,0 +1,46 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('bocatt') + mobileTemplate.setLevel(17) + mobileTemplate.setMinLevel(17) + mobileTemplate.setMaxLevel(18) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setMeatType("Reptilian Meat") + mobileTemplate.setMeatAmount(100) + mobileTemplate.setHideType("Leathery Hide") + mobileTemplate.setBoneAmount(60) + mobileTemplate.setBoneType("Animal Bones") + mobileTemplate.setHideAmount(35) + mobileTemplate.setSocialGroup("bocatt") + mobileTemplate.setAssistRange(12) + mobileTemplate.setStalker(True) + mobileTemplate.setOptionsBitmask(192) + + templates = Vector() + templates.add('object/mobile/shared_bocatt.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/creature/shared_creature_spit_small_toxicgreen.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureRangedAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('bocatt', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/tatooine/bomarr_monk.py b/scripts/mobiles/tatooine/bomarr_monk.py new file mode 100644 index 00000000..2777e69b --- /dev/null +++ b/scripts/mobiles/tatooine/bomarr_monk.py @@ -0,0 +1,37 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('bomarr_monk') + mobileTemplate.setLevel(1) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("spiderdroid") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(False) + + templates = Vector() + templates.add('object/mobile/shared_bomarr_spider_monk_droid.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('meleehit') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('bomarr_monk', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/tatooine/bomarr_monk_abbot.py b/scripts/mobiles/tatooine/bomarr_monk_abbot.py new file mode 100644 index 00000000..017cce98 --- /dev/null +++ b/scripts/mobiles/tatooine/bomarr_monk_abbot.py @@ -0,0 +1,37 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('bomarr_monk_abbot') + mobileTemplate.setLevel(2) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("spiderdroid") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(False) + + templates = Vector() + templates.add('object/mobile/shared_bomarr_spider_monk_droid.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('meleehit') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('bomarr_monk_abbot', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/tatooine/bomarr_monk_bodyguard.py b/scripts/mobiles/tatooine/bomarr_monk_bodyguard.py new file mode 100644 index 00000000..290961fc --- /dev/null +++ b/scripts/mobiles/tatooine/bomarr_monk_bodyguard.py @@ -0,0 +1,37 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('bomarr_monk_bodyguard') + mobileTemplate.setLevel(2) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("spiderdroid") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(False) + + templates = Vector() + templates.add('object/mobile/shared_bomarr_spider_monk_droid.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('meleehit') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('bomarr_monk_bodyguard', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/tatooine/bomarr_monk_healer.py b/scripts/mobiles/tatooine/bomarr_monk_healer.py new file mode 100644 index 00000000..5ff6ef95 --- /dev/null +++ b/scripts/mobiles/tatooine/bomarr_monk_healer.py @@ -0,0 +1,37 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('bomarr_monk_healer') + mobileTemplate.setLevel(1) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("spiderdroid") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(False) + + templates = Vector() + templates.add('object/mobile/shared_bomarr_spider_monk_droid.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('meleehit') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('bomarr_monk_healer', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/tatooine/bomarr_monk_initiate.py b/scripts/mobiles/tatooine/bomarr_monk_initiate.py new file mode 100644 index 00000000..dd53113c --- /dev/null +++ b/scripts/mobiles/tatooine/bomarr_monk_initiate.py @@ -0,0 +1,37 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('bomarr_monk_initiate') + mobileTemplate.setLevel(1) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("spiderdroid") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(False) + + templates = Vector() + templates.add('object/mobile/shared_bomarr_spider_monk_droid.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('meleehit') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('bomarr_monk_initiate', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/tatooine/bonecracker_bantha.py b/scripts/mobiles/tatooine/bonecracker_bantha.py new file mode 100644 index 00000000..88361e49 --- /dev/null +++ b/scripts/mobiles/tatooine/bonecracker_bantha.py @@ -0,0 +1,45 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('bantha_bonecracker') + mobileTemplate.setLevel(21) + mobileTemplate.setMinLevel(21) + mobileTemplate.setMaxLevel(22) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setMeatType("Herbivore Meat") + mobileTemplate.setMeatAmount(475) + mobileTemplate.setHideType("Wooly Hide") + mobileTemplate.setBoneAmount(345) + mobileTemplate.setBoneType("Animal Bones") + mobileTemplate.setHideAmount(300) + mobileTemplate.setSocialGroup("bantha") + mobileTemplate.setAssistRange(6) + mobileTemplate.setStalker(False) + + templates = Vector() + templates.add('object/mobile/shared_bantha_hue.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('bonecracker_bantha', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/tatooine/bull_bantha.py b/scripts/mobiles/tatooine/bull_bantha.py new file mode 100644 index 00000000..5001ca79 --- /dev/null +++ b/scripts/mobiles/tatooine/bull_bantha.py @@ -0,0 +1,45 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('bull_bantha') + mobileTemplate.setLevel(15) + mobileTemplate.setMinLevel(15) + mobileTemplate.setMaxLevel(17) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setMeatType("Herbivore Meat") + mobileTemplate.setMeatAmount(475) + mobileTemplate.setHideType("Wooly Hide") + mobileTemplate.setBoneAmount(345) + mobileTemplate.setBoneType("Animal Bones") + mobileTemplate.setHideAmount(300) + mobileTemplate.setSocialGroup("bantha") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(False) + + templates = Vector() + templates.add('object/mobile/shared_bantha_hue.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('bull_bantha', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/tatooine/bull_ronto.py b/scripts/mobiles/tatooine/bull_ronto.py new file mode 100644 index 00000000..01ffb015 --- /dev/null +++ b/scripts/mobiles/tatooine/bull_ronto.py @@ -0,0 +1,46 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('ronto_male') + mobileTemplate.setLevel(18) + mobileTemplate.setMinLevel(18) + mobileTemplate.setMaxLevel(19) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setMeatType("Herbivore Meat") + mobileTemplate.setMeatAmount(465) + mobileTemplate.setHideType("Leathery Hide") + mobileTemplate.setBoneAmount(320) + mobileTemplate.setBoneType("Animal Bones") + mobileTemplate.setHideAmount(200) + mobileTemplate.setSocialGroup("ronto") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(False) + mobileTemplate.setOptionsBitmask(192) + + templates = Vector() + templates.add('object/mobile/shared_ronto.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('bullronto', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/tatooine/cannibal.py b/scripts/mobiles/tatooine/cannibal.py new file mode 100644 index 00000000..e92a226d --- /dev/null +++ b/scripts/mobiles/tatooine/cannibal.py @@ -0,0 +1,38 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('cannibal') + mobileTemplate.setLevel(4) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("kashyyyk") + mobileTemplate.setAssistRange(12) + mobileTemplate.setStalker(False) + + + templates = Vector() + templates.add('object/mobile/shared_dressed_tatooine_cannibal.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('cannibal', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/tatooine/cannibal_dewback.py b/scripts/mobiles/tatooine/cannibal_dewback.py new file mode 100644 index 00000000..f6dcf294 --- /dev/null +++ b/scripts/mobiles/tatooine/cannibal_dewback.py @@ -0,0 +1,46 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('dewback_cannibal') + mobileTemplate.setLevel(13) + mobileTemplate.setMinLevel(13) + mobileTemplate.setMaxLevel(14) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setMeatType("Reptilian Meat") + mobileTemplate.setMeatAmount(340) + mobileTemplate.setHideType("Leathery Hide") + mobileTemplate.setBoneAmount(260) + mobileTemplate.setBoneType("Animal Bones") + mobileTemplate.setHideAmount(185) + mobileTemplate.setSocialGroup("dewback cannibal") + mobileTemplate.setAssistRange(10) + mobileTemplate.setStalker(True) + mobileTemplate.setOptionsBitmask(192) + + templates = Vector() + templates.add('object/mobile/shared_dewback.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('cannibal_dewback', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/tatooine/canyon_krayt_dragon.py b/scripts/mobiles/tatooine/canyon_krayt_dragon.py new file mode 100644 index 00000000..15c2befe --- /dev/null +++ b/scripts/mobiles/tatooine/canyon_krayt_dragon.py @@ -0,0 +1,46 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('canyon_krayt_dragon') + mobileTemplate.setLevel(85) + mobileTemplate.setMinLevel(80) + mobileTemplate.setMaxLevel(86) + mobileTemplate.setDifficulty(2) + mobileTemplate.setAttackRange(12) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(True) + mobileTemplate.setScale(0.9) + mobileTemplate.setMeatType("Carnivore Meat") + mobileTemplate.setMeatAmount(1250) + mobileTemplate.setHideType("Bristly Hide") + mobileTemplate.setBoneAmount(750) + mobileTemplate.setBoneType("Animal Bones") + mobileTemplate.setHideAmount(675) + mobileTemplate.setSocialGroup("krayt dragon") + mobileTemplate.setAssistRange(36) + mobileTemplate.setStalker(True) + mobileTemplate.setOptionsBitmask(192) + + templates = Vector() + templates.add('object/mobile/shared_canyon_krayt_dragon.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('canyon_krayt_dragon', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/tatooine/carion_kreetle.py b/scripts/mobiles/tatooine/carion_kreetle.py new file mode 100644 index 00000000..7f066d5a --- /dev/null +++ b/scripts/mobiles/tatooine/carion_kreetle.py @@ -0,0 +1,43 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('fragile_kreetle') + mobileTemplate.setLevel(2) + mobileTemplate.setMinLevel(2) + mobileTemplate.setMaxLevel(7) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setMeatType("Insect Meat") + mobileTemplate.setMeatAmount(1) + mobileTemplate.setHideType("Scaley Hide") + mobileTemplate.setHideAmount(2) + mobileTemplate.setSocialGroup("kreetle") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(False) + + templates = Vector() + templates.add('object/mobile/shared_kreetle.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('carrion_kreetle', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/tatooine/cave_beetle.py b/scripts/mobiles/tatooine/cave_beetle.py new file mode 100644 index 00000000..19718882 --- /dev/null +++ b/scripts/mobiles/tatooine/cave_beetle.py @@ -0,0 +1,43 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('cave_beetle') + mobileTemplate.setLevel(20) + mobileTemplate.setMinLevel(20) + mobileTemplate.setMaxLevel(21) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(15) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(True) + mobileTemplate.setScale(1) + mobileTemplate.setMeatType("Insect Meat") + mobileTemplate.setMeatAmount(6) + mobileTemplate.setHideType("Scaley Hide") + mobileTemplate.setHideAmount(8) + mobileTemplate.setSocialGroup("rock beetle") + mobileTemplate.setAssistRange(4) + mobileTemplate.setStalker(False) + + templates = Vector() + templates.add('object/mobile/shared_rock_beetle.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/creature/shared_creature_spit_small_toxicgreen.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureRangedAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('cave_beetle', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/tatooine/cave_beetle2.py b/scripts/mobiles/tatooine/cave_beetle2.py new file mode 100644 index 00000000..3c8a5ea3 --- /dev/null +++ b/scripts/mobiles/tatooine/cave_beetle2.py @@ -0,0 +1,43 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('cave_beetle') + mobileTemplate.setLevel(20) + mobileTemplate.setMinLevel(20) + mobileTemplate.setMaxLevel(22) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(15) + mobileTemplate.setAttackSpeed(1.2) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(True) + mobileTemplate.setScale(1) + mobileTemplate.setMeatType("Insect Meat") + mobileTemplate.setMeatAmount(8) + mobileTemplate.setHideType("Scaley Hide") + mobileTemplate.setHideAmount(10) + mobileTemplate.setSocialGroup("rock beetle") + mobileTemplate.setAssistRange(6) + mobileTemplate.setStalker(False) + + templates = Vector() + templates.add('object/mobile/shared_rock_beetle.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/creature/shared_creature_spit_small_toxicgreen.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureRangedAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('cave_beetle', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/tatooine/city_rockmite.py b/scripts/mobiles/tatooine/city_rockmite.py new file mode 100644 index 00000000..b0164043 --- /dev/null +++ b/scripts/mobiles/tatooine/city_rockmite.py @@ -0,0 +1,43 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('city_rockmite') + mobileTemplate.setLevel(5) + mobileTemplate.setMinLevel(5) + mobileTemplate.setMaxLevel(7) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setMeatType("Insect Meat") + mobileTemplate.setMeatAmount(3) + mobileTemplate.setHideType("Scaley Hide") + mobileTemplate.setHideAmount(4) + mobileTemplate.setSocialGroup("rockmite") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(False) + + templates = Vector() + templates.add('object/mobile/shared_rock_mite.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('city_rockmite', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/tatooine/city_sewer_swamprat.py b/scripts/mobiles/tatooine/city_sewer_swamprat.py new file mode 100644 index 00000000..7e6b22ce --- /dev/null +++ b/scripts/mobiles/tatooine/city_sewer_swamprat.py @@ -0,0 +1,45 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('city_sewer_swamprat') + mobileTemplate.setLevel(3) + mobileTemplate.setMinLevel(3) + mobileTemplate.setMaxLevel(5) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setMeatType("Wild Meat") + mobileTemplate.setMeatAmount(2) + mobileTemplate.setHideType("Leathery Hide") + mobileTemplate.setBoneAmount(2) + mobileTemplate.setBoneType("Animal Bone") + mobileTemplate.setHideAmount(1) + mobileTemplate.setSocialGroup("womprat") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(False) + + templates = Vector() + templates.add('object/mobile/shared_womp_rat.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('city_sewer_swamprat', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/tatooine/crimelord.py b/scripts/mobiles/tatooine/crimelord.py new file mode 100644 index 00000000..0f97408d --- /dev/null +++ b/scripts/mobiles/tatooine/crimelord.py @@ -0,0 +1,38 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('crimelord') + mobileTemplate.setLevel(11) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(12) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(1) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("hutt") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(False) + + + templates = Vector() + templates.add('object/mobile/shared_dressed_tatooine_crimelord.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/carbine/shared_carbine_cdef.iff', 1, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedShot') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('crimelord', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/tatooine/crimelord_1.py b/scripts/mobiles/tatooine/crimelord_1.py new file mode 100644 index 00000000..75e497a7 --- /dev/null +++ b/scripts/mobiles/tatooine/crimelord_1.py @@ -0,0 +1,38 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('crimelord') + mobileTemplate.setLevel(15) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(12) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(1) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("hutt") + mobileTemplate.setAssistRange(4) + mobileTemplate.setStalker(False) + + + templates = Vector() + templates.add('object/mobile/shared_dressed_tatooine_crimelord.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/carbine/shared_carbine_cdef.iff', 1, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedShot') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('crimelord_1', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/tatooine/cupa.py b/scripts/mobiles/tatooine/cupa.py new file mode 100644 index 00000000..ac4aa47e --- /dev/null +++ b/scripts/mobiles/tatooine/cupa.py @@ -0,0 +1,45 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('cu_pa') + mobileTemplate.setLevel(10) + mobileTemplate.setMinLevel(10) + mobileTemplate.setMaxLevel(11) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setMeatType("Reptilian Meat") + mobileTemplate.setMeatAmount(215) + mobileTemplate.setHideType("Bristly Hide") + mobileTemplate.setBoneAmount(100) + mobileTemplate.setBoneType("Animal Bone") + mobileTemplate.setHideAmount(100) + mobileTemplate.setSocialGroup("cu pa") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(False) + + templates = Vector() + templates.add('object/mobile/shared_cu_pa.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('cu_pa', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/tatooine/death_kreetle.py b/scripts/mobiles/tatooine/death_kreetle.py new file mode 100644 index 00000000..adaad64f --- /dev/null +++ b/scripts/mobiles/tatooine/death_kreetle.py @@ -0,0 +1,44 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('kreetle_death') + mobileTemplate.setLevel(7) + mobileTemplate.setMinLevel(7) + mobileTemplate.setMaxLevel(8) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(True) + mobileTemplate.setScale(1) + mobileTemplate.setMeatType("Insect Meat") + mobileTemplate.setMeatAmount(3) + mobileTemplate.setHideType("Scaley Hide") + mobileTemplate.setHideAmount(4) + mobileTemplate.setSocialGroup("uber kreetle") + mobileTemplate.setAssistRange(6) + mobileTemplate.setStalker(False) + mobileTemplate.setOptionsBitmask(192) + + templates = Vector() + templates.add('object/mobile/shared_kreetle.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('death_kreetle', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/tatooine/dervish.py b/scripts/mobiles/tatooine/dervish.py new file mode 100644 index 00000000..ebc20f07 --- /dev/null +++ b/scripts/mobiles/tatooine/dervish.py @@ -0,0 +1,38 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('dervish') + mobileTemplate.setLevel(5) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(12) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(1) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("dervish") + mobileTemplate.setAssistRange(10) + mobileTemplate.setStalker(True) + + + templates = Vector() + templates.add('object/mobile/shared_dressed_tatooine_dervish.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/carbine/shared_carbine_cdef.iff', 1, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedShot') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('dervish', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/tatooine/desert_demon.py b/scripts/mobiles/tatooine/desert_demon.py new file mode 100644 index 00000000..c4017e5d --- /dev/null +++ b/scripts/mobiles/tatooine/desert_demon.py @@ -0,0 +1,38 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('desert_demon') + mobileTemplate.setLevel(13) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(12) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(1) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("desert demon") + mobileTemplate.setAssistRange(4) + mobileTemplate.setStalker(False) + + + templates = Vector() + templates.add('object/mobile/shared_dressed_tatooine_desert_demon.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/carbine/shared_carbine_cdef.iff', 1, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedShot') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('desert_demon', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/tatooine/desert_demon_bodyguard.py b/scripts/mobiles/tatooine/desert_demon_bodyguard.py new file mode 100644 index 00000000..ac4c2b7b --- /dev/null +++ b/scripts/mobiles/tatooine/desert_demon_bodyguard.py @@ -0,0 +1,38 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('desert_demon_bodyguard') + mobileTemplate.setLevel(14) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(12) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(1) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("desert demon") + mobileTemplate.setAssistRange(4) + mobileTemplate.setStalker(False) + + + templates = Vector() + templates.add('object/mobile/shared_dressed_tatooine_desert_demon_bodyguard.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/carbine/shared_carbine_cdef.iff', 1, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedShot') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('desert_demon_bodyguard', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/tatooine/desert_demon_brawler.py b/scripts/mobiles/tatooine/desert_demon_brawler.py new file mode 100644 index 00000000..db38bbe7 --- /dev/null +++ b/scripts/mobiles/tatooine/desert_demon_brawler.py @@ -0,0 +1,40 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('desert_demon_brawler') + mobileTemplate.setLevel(13) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(12) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(1) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("desert demon") + mobileTemplate.setAssistRange(4) + mobileTemplate.setStalker(False) + + + templates = Vector() + templates.add('object/mobile/shared_dressed_tatooine_desert_demon_brawler.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/carbine/shared_carbine_cdef.iff', 1, 1.0) + weaponTemplates.add(weapontemplate) + weapontemplate1 = WeaponTemplate('object/weapon/ranged/pistol/shared_pistol_cdef.iff', 1, 1.0) + weaponTemplates.add(weapontemplate1) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedShot') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('desert_demon_brawler', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/tatooine/desert_demon_leader.py b/scripts/mobiles/tatooine/desert_demon_leader.py new file mode 100644 index 00000000..3899cf4c --- /dev/null +++ b/scripts/mobiles/tatooine/desert_demon_leader.py @@ -0,0 +1,38 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('desert_demon_leader') + mobileTemplate.setLevel(3) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(12) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(1) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(True) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("desert demon") + mobileTemplate.setAssistRange(4) + mobileTemplate.setStalker(False) + + + templates = Vector() + templates.add('object/mobile/shared_dressed_tatooine_desert_demon_leader.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/carbine/shared_carbine_cdef.iff', 1, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedShot') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('desert_demon_leader', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/tatooine/desert_demon_marksman.py b/scripts/mobiles/tatooine/desert_demon_marksman.py new file mode 100644 index 00000000..c2ef4f15 --- /dev/null +++ b/scripts/mobiles/tatooine/desert_demon_marksman.py @@ -0,0 +1,38 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('desert_demon_marksman') + mobileTemplate.setLevel(13) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(12) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(0) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("desert demon") + mobileTemplate.setAssistRange(4) + mobileTemplate.setStalker(True) + + + templates = Vector() + templates.add('object/mobile/shared_dressed_tatooine_desert_demon_marksman.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/rifle/shared_rifle_cdef.iff', 0, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedShotrifle') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('desert_demon_marksman', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/tatooine/desert_eopie.py b/scripts/mobiles/tatooine/desert_eopie.py new file mode 100644 index 00000000..1f629028 --- /dev/null +++ b/scripts/mobiles/tatooine/desert_eopie.py @@ -0,0 +1,45 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('desert_eopie') + mobileTemplate.setLevel(16) + mobileTemplate.setMinLevel(16) + mobileTemplate.setMaxLevel(17) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setMeatType("Herbivore Meat") + mobileTemplate.setMeatAmount(300) + mobileTemplate.setHideType("Leathery Hide") + mobileTemplate.setBoneAmount(225) + mobileTemplate.setBoneType("Animal Bone") + mobileTemplate.setHideAmount(125) + mobileTemplate.setSocialGroup("eopie") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(False) + + templates = Vector() + templates.add('object/mobile/shared_eopie.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('desert_eopie', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/tatooine/desert_kreetle.py b/scripts/mobiles/tatooine/desert_kreetle.py new file mode 100644 index 00000000..5a33b9be --- /dev/null +++ b/scripts/mobiles/tatooine/desert_kreetle.py @@ -0,0 +1,43 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('orphan_kreetle') + mobileTemplate.setLevel(3) + mobileTemplate.setMinLevel(3) + mobileTemplate.setMaxLevel(5) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(True) + mobileTemplate.setScale(1) + mobileTemplate.setMeatType("Insect Meat") + mobileTemplate.setMeatAmount(1) + mobileTemplate.setHideType("Scaley Hide") + mobileTemplate.setHideAmount(2) + mobileTemplate.setSocialGroup("kreetle") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(False) + + templates = Vector() + templates.add('object/mobile/shared_kreetle.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('desert_kreetle', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/tatooine/desert_razorback.py b/scripts/mobiles/tatooine/desert_razorback.py new file mode 100644 index 00000000..7e78276a --- /dev/null +++ b/scripts/mobiles/tatooine/desert_razorback.py @@ -0,0 +1,45 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('desert_razorback') + mobileTemplate.setLevel(23) + mobileTemplate.setMinLevel(23) + mobileTemplate.setMaxLevel(25) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setMeatType("Herbivore Meat") + mobileTemplate.setMeatAmount(65) + mobileTemplate.setHideType("Leathery Hide") + mobileTemplate.setBoneAmount(40) + mobileTemplate.setBoneType("Animal Bone") + mobileTemplate.setHideAmount(25) + mobileTemplate.setSocialGroup("zucca Boar") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(False) + + templates = Vector() + templates.add('object/mobile/shared_zucca_boar.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('desert_razorback', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/tatooine/desert_squill.py b/scripts/mobiles/tatooine/desert_squill.py new file mode 100644 index 00000000..23ef655b --- /dev/null +++ b/scripts/mobiles/tatooine/desert_squill.py @@ -0,0 +1,46 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('desert_squill') + mobileTemplate.setLevel(14) + mobileTemplate.setMinLevel(14) + mobileTemplate.setMaxLevel(15) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setMeatType("Carnivore Meat") + mobileTemplate.setMeatAmount(4) + mobileTemplate.setHideType("Leathery Hide") + mobileTemplate.setBoneAmount(4) + mobileTemplate.setBoneType("Animal Bone") + mobileTemplate.setHideAmount(3) + mobileTemplate.setSocialGroup("squill") + mobileTemplate.setAssistRange(10) + mobileTemplate.setStalker(False) + mobileTemplate.setOptionsBitmask(192) + + templates = Vector() + templates.add('object/mobile/shared_squill.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('desert_squill', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/tatooine/desert_swooper.py b/scripts/mobiles/tatooine/desert_swooper.py new file mode 100644 index 00000000..1092efd5 --- /dev/null +++ b/scripts/mobiles/tatooine/desert_swooper.py @@ -0,0 +1,38 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('desert_swooper') + mobileTemplate.setLevel(2) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(12) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(1) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("swoop") + mobileTemplate.setAssistRange(4) + mobileTemplate.setStalker(False) + mobileTemplate.setOptionsBitmask(192) + + templates = Vector() + templates.add('object/mobile/shared_dressed_tatooine_desert_swooper.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/carbine/shared_carbine_cdef.iff', 1, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedShot') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('desert_swooper', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/tatooine/desert_swooper_leader.py b/scripts/mobiles/tatooine/desert_swooper_leader.py new file mode 100644 index 00000000..14e40754 --- /dev/null +++ b/scripts/mobiles/tatooine/desert_swooper_leader.py @@ -0,0 +1,38 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('desert_swooper_leader') + mobileTemplate.setLevel(3) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(12) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(1) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("swoop") + mobileTemplate.setAssistRange(4) + mobileTemplate.setStalker(False) + mobileTemplate.setOptionsBitmask(192) + + templates = Vector() + templates.add('object/mobile/shared_dressed_tatooine_desert_swooper_leader.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/carbine/shared_carbine_cdef.iff', 1, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedShot') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('desert_swooper_leader', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/tatooine/desert_thug.py b/scripts/mobiles/tatooine/desert_thug.py new file mode 100644 index 00000000..6bca18ea --- /dev/null +++ b/scripts/mobiles/tatooine/desert_thug.py @@ -0,0 +1,38 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('desert_thug') + mobileTemplate.setLevel(1) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(12) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(1) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("thug") + mobileTemplate.setAssistRange(4) + mobileTemplate.setStalker(False) + + + templates = Vector() + templates.add('object/mobile/shared_dressed_tatooine_valarian_thug.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/carbine/shared_carbine_cdef.iff', 1, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedShot') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('desert_thug', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/tatooine/dewback.py b/scripts/mobiles/tatooine/dewback.py new file mode 100644 index 00000000..9808f52e --- /dev/null +++ b/scripts/mobiles/tatooine/dewback.py @@ -0,0 +1,45 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('dewback') + mobileTemplate.setLevel(17) + mobileTemplate.setMinLevel(17) + mobileTemplate.setMaxLevel(18) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setMeatType("Reptilian Meat") + mobileTemplate.setMeatAmount(350) + mobileTemplate.setHideType("Leathery Hide") + mobileTemplate.setBoneAmount(275) + mobileTemplate.setBoneType("Animal Bone") + mobileTemplate.setHideAmount(200) + mobileTemplate.setSocialGroup("dewback") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(False) + + templates = Vector() + templates.add('object/mobile/shared_dewback.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('dewback', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/tatooine/dimu_abbot.py b/scripts/mobiles/tatooine/dimu_abbot.py new file mode 100644 index 00000000..8ab0045a --- /dev/null +++ b/scripts/mobiles/tatooine/dimu_abbot.py @@ -0,0 +1,37 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('dim_u_c') + mobileTemplate.setLevel(4) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("dim-u") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(False) + + templates = Vector() + templates.add('object/mobile/shared_dressed_tatooine_dim_u_abbot.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('meleehit') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('dimu_abbot', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/tatooine/dimu_bantha.py b/scripts/mobiles/tatooine/dimu_bantha.py new file mode 100644 index 00000000..9eb67934 --- /dev/null +++ b/scripts/mobiles/tatooine/dimu_bantha.py @@ -0,0 +1,45 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('dim_u_bantha') + mobileTemplate.setLevel(3) + mobileTemplate.setMinLevel(3) + mobileTemplate.setMaxLevel(4) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setMeatType("Herbivore Meat") + mobileTemplate.setMeatAmount(450) + mobileTemplate.setHideType("Wooly Hide") + mobileTemplate.setBoneAmount(325) + mobileTemplate.setBoneType("Animal Bone") + mobileTemplate.setHideAmount(250) + mobileTemplate.setSocialGroup("dim-u") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(False) + + templates = Vector() + templates.add('object/mobile/shared_bantha_hue.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('dim-u_bantha', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/tatooine/dimu_cleric.py b/scripts/mobiles/tatooine/dimu_cleric.py new file mode 100644 index 00000000..51c3bcae --- /dev/null +++ b/scripts/mobiles/tatooine/dimu_cleric.py @@ -0,0 +1,37 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('dim_u_cleric') + mobileTemplate.setLevel(3) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("dim-u") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(False) + + templates = Vector() + templates.add('object/mobile/shared_dressed_tatooine_dim_u_cleric.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('meleehit') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('dimu_cleric', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/tatooine/dimu_monastery_nun.py b/scripts/mobiles/tatooine/dimu_monastery_nun.py new file mode 100644 index 00000000..5d341724 --- /dev/null +++ b/scripts/mobiles/tatooine/dimu_monastery_nun.py @@ -0,0 +1,37 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('dim_u_monastery_nun') + mobileTemplate.setLevel(2) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("dim-u") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(False) + + templates = Vector() + templates.add('object/mobile/shared_dressed_tatooine_dim_u_monastery_nun.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('meleehit') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('dimu_monastery_nun', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/tatooine/dimu_monk.py b/scripts/mobiles/tatooine/dimu_monk.py new file mode 100644 index 00000000..8ff4c056 --- /dev/null +++ b/scripts/mobiles/tatooine/dimu_monk.py @@ -0,0 +1,37 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('dim_u_monk') + mobileTemplate.setLevel(2) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("dim-u") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(False) + + templates = Vector() + templates.add('object/mobile/shared_dressed_tatooine_dim_u_monk.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('meleehit') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('dimu_monk', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/tatooine/dimu_preacher.py b/scripts/mobiles/tatooine/dimu_preacher.py new file mode 100644 index 00000000..07a4965e --- /dev/null +++ b/scripts/mobiles/tatooine/dimu_preacher.py @@ -0,0 +1,37 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('dim_u_preacher') + mobileTemplate.setLevel(5) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("dim-u") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(False) + + templates = Vector() + templates.add('object/mobile/shared_dressed_tatooine_dim_u_preacher.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('meleehit') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('dimu_preacher', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/tatooine/dimu_priestess.py b/scripts/mobiles/tatooine/dimu_priestess.py new file mode 100644 index 00000000..6f59d217 --- /dev/null +++ b/scripts/mobiles/tatooine/dimu_priestess.py @@ -0,0 +1,37 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('dim_u_priestess') + mobileTemplate.setLevel(5) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("dim-u") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(False) + + templates = Vector() + templates.add('object/mobile/shared_dressed_tatooine_dim_u_priestess.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('meleehit') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('dimu_priestess', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/tatooine/diseased_bocatt.py b/scripts/mobiles/tatooine/diseased_bocatt.py new file mode 100644 index 00000000..81638d7d --- /dev/null +++ b/scripts/mobiles/tatooine/diseased_bocatt.py @@ -0,0 +1,46 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('bocatt_diseased') + mobileTemplate.setLevel(5) + mobileTemplate.setMinLevel(5) + mobileTemplate.setMaxLevel(6) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setMeatType("Wild Meat") + mobileTemplate.setMeatAmount(6) + mobileTemplate.setHideType("Leathery Hide") + mobileTemplate.setBoneAmount(5) + mobileTemplate.setBoneType("Animal Bone") + mobileTemplate.setHideAmount(4) + mobileTemplate.setSocialGroup("bocatt") + mobileTemplate.setAssistRange(10) + mobileTemplate.setStalker(True) + mobileTemplate.setOptionsBitmask(192) + + templates = Vector() + templates.add('object/mobile/shared_bocatt.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('diseased_bocatt', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/tatooine/domestic_eopie.py b/scripts/mobiles/tatooine/domestic_eopie.py new file mode 100644 index 00000000..0cddcc55 --- /dev/null +++ b/scripts/mobiles/tatooine/domestic_eopie.py @@ -0,0 +1,45 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('domestic_eopie') + mobileTemplate.setLevel(1) + mobileTemplate.setMinLevel(1) + mobileTemplate.setMaxLevel(3) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setMeatType("Domesticated Meat") + mobileTemplate.setMeatAmount(335) + mobileTemplate.setHideType("Leathery Hide") + mobileTemplate.setBoneAmount(260) + mobileTemplate.setBoneType("Animal Bone") + mobileTemplate.setHideAmount(190) + mobileTemplate.setSocialGroup("eopie") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(False) + + templates = Vector() + templates.add('object/mobile/shared_eopie.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('domestic_eopie', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/tatooine/dragonet.py b/scripts/mobiles/tatooine/dragonet.py new file mode 100644 index 00000000..d67323d9 --- /dev/null +++ b/scripts/mobiles/tatooine/dragonet.py @@ -0,0 +1,46 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('dragonet') + mobileTemplate.setLevel(24) + mobileTemplate.setMinLevel(24) + mobileTemplate.setMaxLevel(27) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(15) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setMeatType("Carnivore Meat") + mobileTemplate.setMeatAmount(125) + mobileTemplate.setHideType("Bristly Hide") + mobileTemplate.setBoneAmount(75) + mobileTemplate.setBoneType("Animal Bone") + mobileTemplate.setHideAmount(68) + mobileTemplate.setSocialGroup("dragonet") + mobileTemplate.setAssistRange(10) + mobileTemplate.setStalker(True) + mobileTemplate.setOptionsBitmask(192) + + templates = Vector() + templates.add('object/mobile/shared_dune_lizard.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/creature/shared_creature_spit_small_toxicgreen.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureRangedAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('dragonet', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/tatooine/drooling_nuna.py b/scripts/mobiles/tatooine/drooling_nuna.py new file mode 100644 index 00000000..e3be3acb --- /dev/null +++ b/scripts/mobiles/tatooine/drooling_nuna.py @@ -0,0 +1,45 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('dwarf_nuna_drooling') + mobileTemplate.setLevel(2) + mobileTemplate.setMinLevel(2) + mobileTemplate.setMaxLevel(3) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setMeatType("Avian Meat") + mobileTemplate.setMeatAmount(2) + mobileTemplate.setHideType("Leathery Hide") + mobileTemplate.setBoneAmount(3) + mobileTemplate.setBoneType("Avian Bone") + mobileTemplate.setHideAmount(1) + mobileTemplate.setSocialGroup("dwarf nuna") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(False) + + templates = Vector() + templates.add('object/mobile/shared_nuna.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('drooling_nuna', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/tatooine/dune_bantha.py b/scripts/mobiles/tatooine/dune_bantha.py new file mode 100644 index 00000000..984c29bf --- /dev/null +++ b/scripts/mobiles/tatooine/dune_bantha.py @@ -0,0 +1,45 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('dune_bantha') + mobileTemplate.setLevel(20) + mobileTemplate.setMinLevel(20) + mobileTemplate.setMaxLevel(22) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setMeatType("Herbivore Meat") + mobileTemplate.setMeatAmount(375) + mobileTemplate.setHideType("Wooley Hide") + mobileTemplate.setBoneAmount(275) + mobileTemplate.setBoneType("Animal Bone") + mobileTemplate.setHideAmount(175) + mobileTemplate.setSocialGroup("bantha") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(False) + + templates = Vector() + templates.add('object/mobile/shared_bantha_hue.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('dune_bantha', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/tatooine/dune_beetle.py b/scripts/mobiles/tatooine/dune_beetle.py new file mode 100644 index 00000000..96b36222 --- /dev/null +++ b/scripts/mobiles/tatooine/dune_beetle.py @@ -0,0 +1,43 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('dune_beetle') + mobileTemplate.setLevel(9) + mobileTemplate.setMinLevel(9) + mobileTemplate.setMaxLevel(10) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(True) + mobileTemplate.setScale(1) + mobileTemplate.setMeatType("Insect Meat") + mobileTemplate.setMeatAmount(6) + mobileTemplate.setHideType("Scaley Hide") + mobileTemplate.setHideAmount(8) + mobileTemplate.setSocialGroup("giant sand beetle") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(False) + + templates = Vector() + templates.add('object/mobile/shared_giant_sand_beetle.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('dune_beetle', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/tatooine/dune_lizard.py b/scripts/mobiles/tatooine/dune_lizard.py new file mode 100644 index 00000000..0b8d0664 --- /dev/null +++ b/scripts/mobiles/tatooine/dune_lizard.py @@ -0,0 +1,46 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('dune_lizard') + mobileTemplate.setLevel(18) + mobileTemplate.setMinLevel(18) + mobileTemplate.setMaxLevel(19) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(True) + mobileTemplate.setScale(1) + mobileTemplate.setMeatType("Carnivore Meat") + mobileTemplate.setMeatAmount(85) + mobileTemplate.setHideType("Bristly Hide") + mobileTemplate.setBoneAmount(50) + mobileTemplate.setBoneType("Animal Bone") + mobileTemplate.setHideAmount(35) + mobileTemplate.setSocialGroup("dune lizard") + mobileTemplate.setAssistRange(10) + mobileTemplate.setStalker(True) + mobileTemplate.setOptionsBitmask(192) + + templates = Vector() + templates.add('object/mobile/shared_dune_lizard.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/creature/shared_creature_spit_small_toxicgreen.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('dune_lizard', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/tatooine/dune_stalker.py b/scripts/mobiles/tatooine/dune_stalker.py new file mode 100644 index 00000000..420ee983 --- /dev/null +++ b/scripts/mobiles/tatooine/dune_stalker.py @@ -0,0 +1,37 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('dune_stalker') + mobileTemplate.setLevel(5) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(12) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("dune stalker") + mobileTemplate.setAssistRange(4) + mobileTemplate.setStalker(True) + + templates = Vector() + templates.add('object/mobile/shared_dressed_tatooine_dune_stalker.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedShot') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('dune_stalker', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/tatooine/dune_stalker_brawler.py b/scripts/mobiles/tatooine/dune_stalker_brawler.py new file mode 100644 index 00000000..9df6262e --- /dev/null +++ b/scripts/mobiles/tatooine/dune_stalker_brawler.py @@ -0,0 +1,37 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('dune_stalker_brawler') + mobileTemplate.setLevel(17) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("dune stalker") + mobileTemplate.setAssistRange(4) + mobileTemplate.setStalker(True) + + templates = Vector() + templates.add('object/mobile/shared_dressed_tatooine_dune_stalker_brawler.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('meleehit') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('dune_stalker_brawler', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/tatooine/dune_stalker_enforcer.py b/scripts/mobiles/tatooine/dune_stalker_enforcer.py new file mode 100644 index 00000000..13a28e6b --- /dev/null +++ b/scripts/mobiles/tatooine/dune_stalker_enforcer.py @@ -0,0 +1,37 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('dune_stalker_enforcer') + mobileTemplate.setLevel(18) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(12) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("dune stalker") + mobileTemplate.setAssistRange(4) + mobileTemplate.setStalker(True) + + templates = Vector() + templates.add('object/mobile/shared_dressed_tatooine_dune_stalker.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedShot') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('dune_stalker_enforcer', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/tatooine/dune_stalker_leader.py b/scripts/mobiles/tatooine/dune_stalker_leader.py new file mode 100644 index 00000000..49752d20 --- /dev/null +++ b/scripts/mobiles/tatooine/dune_stalker_leader.py @@ -0,0 +1,37 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('dune_stalker_leader') + mobileTemplate.setLevel(19) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(12) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("dune stalker") + mobileTemplate.setAssistRange(4) + mobileTemplate.setStalker(True) + + templates = Vector() + templates.add('object/mobile/shared_dressed_tatooine_dune_stalker_leader.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedShot') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('dune_stalker_leader', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/tatooine/dune_stalker_marksman.py b/scripts/mobiles/tatooine/dune_stalker_marksman.py new file mode 100644 index 00000000..7f443685 --- /dev/null +++ b/scripts/mobiles/tatooine/dune_stalker_marksman.py @@ -0,0 +1,37 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('dune_stalker_marksman') + mobileTemplate.setLevel(19) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(12) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("dune stalker") + mobileTemplate.setAssistRange(4) + mobileTemplate.setStalker(True) + + templates = Vector() + templates.add('object/mobile/shared_dressed_tatooine_dune_stalker_marksman.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedShot') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('dune_stalker_marksman', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/tatooine/dune_stalker_scavenger.py b/scripts/mobiles/tatooine/dune_stalker_scavenger.py new file mode 100644 index 00000000..e8a77b3f --- /dev/null +++ b/scripts/mobiles/tatooine/dune_stalker_scavenger.py @@ -0,0 +1,37 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('dune_stalker_scavenger') + mobileTemplate.setLevel(19) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(12) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("dune stalker") + mobileTemplate.setAssistRange(4) + mobileTemplate.setStalker(True) + + templates = Vector() + templates.add('object/mobile/shared_dressed_tatooine_dune_stalker.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedShot') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('dune_stalker_scavenger', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/tatooine/dwarf_bantha.py b/scripts/mobiles/tatooine/dwarf_bantha.py new file mode 100644 index 00000000..d8c76e1d --- /dev/null +++ b/scripts/mobiles/tatooine/dwarf_bantha.py @@ -0,0 +1,45 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('dwarf_bantha') + mobileTemplate.setLevel(10) + mobileTemplate.setMinLevel(10) + mobileTemplate.setMaxLevel(11) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setMeatType("Herbivore Meat") + mobileTemplate.setMeatAmount(300) + mobileTemplate.setHideType("Wooly Hide") + mobileTemplate.setBoneAmount(200) + mobileTemplate.setBoneType("Animal Bone") + mobileTemplate.setHideAmount(100) + mobileTemplate.setSocialGroup("bantha") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(False) + + templates = Vector() + templates.add('object/mobile/shared_dwarf_bantha.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('dwarf_bantha', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/tatooine/dwarf_eopie.py b/scripts/mobiles/tatooine/dwarf_eopie.py new file mode 100644 index 00000000..70caf589 --- /dev/null +++ b/scripts/mobiles/tatooine/dwarf_eopie.py @@ -0,0 +1,45 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('dwarf_eopie') + mobileTemplate.setLevel(1) + mobileTemplate.setMinLevel(1) + mobileTemplate.setMaxLevel(3) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setMeatType("Herbivore Meat") + mobileTemplate.setMeatAmount(230) + mobileTemplate.setHideType("Leathery Hide") + mobileTemplate.setBoneAmount(180) + mobileTemplate.setBoneType("Animal Bone") + mobileTemplate.setHideAmount(110) + mobileTemplate.setSocialGroup("eopie") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(False) + + templates = Vector() + templates.add('object/mobile/shared_dwarf_eopie.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('dwarf_eopie', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/tatooine/dwarf_nuna.py b/scripts/mobiles/tatooine/dwarf_nuna.py new file mode 100644 index 00000000..a3d8144c --- /dev/null +++ b/scripts/mobiles/tatooine/dwarf_nuna.py @@ -0,0 +1,45 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('dwarf_nuna') + mobileTemplate.setLevel(1) + mobileTemplate.setMinLevel(1) + mobileTemplate.setMaxLevel(3) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setMeatType("Avian Meat") + mobileTemplate.setMeatAmount(2) + mobileTemplate.setHideType("Leathery Hide") + mobileTemplate.setBoneAmount(3) + mobileTemplate.setBoneType("Avian Bone") + mobileTemplate.setHideAmount(1) + mobileTemplate.setSocialGroup("dwarf nuna") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(False) + + templates = Vector() + templates.add('object/mobile/shared_dwarf_nuna.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('dwarf_nuna', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/tatooine/elder_zucca_boar.py b/scripts/mobiles/tatooine/elder_zucca_boar.py new file mode 100644 index 00000000..3513012c --- /dev/null +++ b/scripts/mobiles/tatooine/elder_zucca_boar.py @@ -0,0 +1,45 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('zucca_boar_elder') + mobileTemplate.setLevel(8) + mobileTemplate.setMinLevel(8) + mobileTemplate.setMaxLevel(9) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setMeatType("Herbivore Meat") + mobileTemplate.setMeatAmount(65) + mobileTemplate.setHideType("Leathery Hide") + mobileTemplate.setBoneAmount(40) + mobileTemplate.setBoneType("Animal Bone") + mobileTemplate.setHideAmount(25) + mobileTemplate.setSocialGroup("zucca boar") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(False) + + templates = Vector() + templates.add('object/mobile/shared_zucca_boar.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('elder_zucca_boar', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/tatooine/elite_desert_swooper.py b/scripts/mobiles/tatooine/elite_desert_swooper.py new file mode 100644 index 00000000..09b3b5d5 --- /dev/null +++ b/scripts/mobiles/tatooine/elite_desert_swooper.py @@ -0,0 +1,38 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('desert_swooper_elite') + mobileTemplate.setLevel(3) + mobileTemplate.setDifficulty(1) + mobileTemplate.setAttackRange(12) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(1) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("swoop") + mobileTemplate.setAssistRange(8) + mobileTemplate.setStalker(False) + + + templates = Vector() + templates.add('object/mobile/shared_dressed_tatooine_desert_swooper.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/carbine/shared_carbine_cdef.iff', 1, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedShot') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('desert_swooper_elite', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/tatooine/elite_dewback_cannibal.py b/scripts/mobiles/tatooine/elite_dewback_cannibal.py new file mode 100644 index 00000000..14c65b79 --- /dev/null +++ b/scripts/mobiles/tatooine/elite_dewback_cannibal.py @@ -0,0 +1,45 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('elite_dewback_canibal') + mobileTemplate.setLevel(13) + mobileTemplate.setMinLevel(13) + mobileTemplate.setMaxLevel(15) + mobileTemplate.setDifficulty(1) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setMeatType("Reptilian Meat") + mobileTemplate.setMeatAmount(340) + mobileTemplate.setHideType("Leathery Hide") + mobileTemplate.setBoneAmount(260) + mobileTemplate.setBoneType("Animal Bone") + mobileTemplate.setHideAmount(185) + mobileTemplate.setSocialGroup("dewback cannibal") + mobileTemplate.setAssistRange(8) + mobileTemplate.setStalker(True) + + templates = Vector() + templates.add('object/mobile/shared_dewback.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('elite_dewback_cannibal', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/tatooine/elite_dragonet.py b/scripts/mobiles/tatooine/elite_dragonet.py new file mode 100644 index 00000000..a7a863ef --- /dev/null +++ b/scripts/mobiles/tatooine/elite_dragonet.py @@ -0,0 +1,45 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('elite_dragonet') + mobileTemplate.setLevel(24) + mobileTemplate.setMinLevel(24) + mobileTemplate.setMaxLevel(26) + mobileTemplate.setDifficulty(1) + mobileTemplate.setAttackRange(15) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setMeatType("Carnivore Meat") + mobileTemplate.setMeatAmount(125) + mobileTemplate.setHideType("Bristly Hide") + mobileTemplate.setBoneAmount(75) + mobileTemplate.setBoneType("Animal Bone") + mobileTemplate.setHideAmount(68) + mobileTemplate.setSocialGroup("dragonet") + mobileTemplate.setAssistRange(8) + mobileTemplate.setStalker(True) + + templates = Vector() + templates.add('object/mobile/shared_dragonet.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/creature/shared_creature_spit_large_toxicgreen.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureRangedAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('elite_dragonet', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/tatooine/elite_dune_lizard.py b/scripts/mobiles/tatooine/elite_dune_lizard.py new file mode 100644 index 00000000..119a2372 --- /dev/null +++ b/scripts/mobiles/tatooine/elite_dune_lizard.py @@ -0,0 +1,45 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('elite_dune_lizard') + mobileTemplate.setLevel(18) + mobileTemplate.setMinLevel(18) + mobileTemplate.setMaxLevel(19) + mobileTemplate.setDifficulty(1) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(True) + mobileTemplate.setScale(1) + mobileTemplate.setMeatType("Carnivore Meat") + mobileTemplate.setMeatAmount(85) + mobileTemplate.setHideType("Bristly Hide") + mobileTemplate.setBoneAmount(50) + mobileTemplate.setBoneType("Animal Bone") + mobileTemplate.setHideAmount(35) + mobileTemplate.setSocialGroup("dune lizard") + mobileTemplate.setAssistRange(8) + mobileTemplate.setStalker(True) + + templates = Vector() + templates.add('object/mobile/shared_dune_lizard.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/creature/shared_creature_spit_large_toxicgreen.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureRangedAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('elite_dune_lizard', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/tatooine/elite_giant_sand_beetle.py b/scripts/mobiles/tatooine/elite_giant_sand_beetle.py new file mode 100644 index 00000000..c4a27c38 --- /dev/null +++ b/scripts/mobiles/tatooine/elite_giant_sand_beetle.py @@ -0,0 +1,43 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('elite_giant_sand_beetle') + mobileTemplate.setLevel(25) + mobileTemplate.setMinLevel(25) + mobileTemplate.setMaxLevel(26) + mobileTemplate.setDifficulty(1) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setMeatType("Insect Meat") + mobileTemplate.setMeatAmount(15) + mobileTemplate.setHideType("Scaley Hide") + mobileTemplate.setHideAmount(20) + mobileTemplate.setSocialGroup("giant sand beetle") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(False) + + templates = Vector() + templates.add('object/mobile/shared_giant_sand_beetle.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('elite_giant_sand_beetle', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/tatooine/elite_mutant_womprat.py b/scripts/mobiles/tatooine/elite_mutant_womprat.py new file mode 100644 index 00000000..ca4db924 --- /dev/null +++ b/scripts/mobiles/tatooine/elite_mutant_womprat.py @@ -0,0 +1,45 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('elite_mutant_womprat') + mobileTemplate.setLevel(12) + mobileTemplate.setMinLevel(12) + mobileTemplate.setMaxLevel(14) + mobileTemplate.setDifficulty(1) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setMeatType("Wild Meat") + mobileTemplate.setMeatAmount(6) + mobileTemplate.setHideType("Leathery Hide") + mobileTemplate.setBoneAmount(5) + mobileTemplate.setBoneType("Animal Bone") + mobileTemplate.setHideAmount(4) + mobileTemplate.setSocialGroup("womprat") + mobileTemplate.setAssistRange(10) + mobileTemplate.setStalker(True) + + templates = Vector() + templates.add('object/mobile/shared_womp_rat.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('womprat', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/tatooine/elite_ronto.py b/scripts/mobiles/tatooine/elite_ronto.py new file mode 100644 index 00000000..2207fa3b --- /dev/null +++ b/scripts/mobiles/tatooine/elite_ronto.py @@ -0,0 +1,45 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('elite_ronto_ronto') + mobileTemplate.setLevel(17) + mobileTemplate.setMinLevel(17) + mobileTemplate.setMaxLevel(18) + mobileTemplate.setDifficulty(1) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setMeatType("Herbivore Meat") + mobileTemplate.setMeatAmount(450) + mobileTemplate.setHideType("Leathery Hide") + mobileTemplate.setBoneAmount(300) + mobileTemplate.setBoneType("Animal Bone") + mobileTemplate.setHideAmount(180) + mobileTemplate.setSocialGroup("ronto") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(False) + + templates = Vector() + templates.add('object/mobile/shared_ronto.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('elite_ronto', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/tatooine/elite_scyk.py b/scripts/mobiles/tatooine/elite_scyk.py new file mode 100644 index 00000000..eb6e2dc6 --- /dev/null +++ b/scripts/mobiles/tatooine/elite_scyk.py @@ -0,0 +1,45 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('elite_scyk') + mobileTemplate.setLevel(11) + mobileTemplate.setMinLevel(11) + mobileTemplate.setMaxLevel(13) + mobileTemplate.setDifficulty(1) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setMeatType("Carnivore Meat") + mobileTemplate.setMeatAmount(40) + mobileTemplate.setHideType("Bristly Hide") + mobileTemplate.setBoneAmount(25) + mobileTemplate.setBoneType("Animal Bone") + mobileTemplate.setHideAmount(18) + mobileTemplate.setSocialGroup("scyk") + mobileTemplate.setAssistRange(8) + mobileTemplate.setStalker(True) + + templates = Vector() + templates.add('object/mobile/shared_scyk.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('elite_scyk', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/tatooine/elite_sevorrt.py b/scripts/mobiles/tatooine/elite_sevorrt.py new file mode 100644 index 00000000..d525dc6a --- /dev/null +++ b/scripts/mobiles/tatooine/elite_sevorrt.py @@ -0,0 +1,45 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('elite_sevorrt') + mobileTemplate.setLevel(8) + mobileTemplate.setMinLevel(8) + mobileTemplate.setMaxLevel(9) + mobileTemplate.setDifficulty(1) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setMeatType("Reptilian Meat") + mobileTemplate.setMeatAmount(10) + mobileTemplate.setHideType("Leathery Hide") + mobileTemplate.setBoneAmount(10) + mobileTemplate.setBoneType("Animal Bone") + mobileTemplate.setHideAmount(4) + mobileTemplate.setSocialGroup("sevorrt") + mobileTemplate.setAssistRange(8) + mobileTemplate.setStalker(True) + + templates = Vector() + templates.add('object/mobile/shared_sevorrt.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('elite_sevorrt', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/tatooine/elite_weequay_zealot.py b/scripts/mobiles/tatooine/elite_weequay_zealot.py new file mode 100644 index 00000000..1c5a243a --- /dev/null +++ b/scripts/mobiles/tatooine/elite_weequay_zealot.py @@ -0,0 +1,38 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('elite_weequay_zealot') + mobileTemplate.setLevel(17) + mobileTemplate.setDifficulty(1) + mobileTemplate.setAttackRange(12) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(1) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(True) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("swoop") + mobileTemplate.setAssistRange(8) + mobileTemplate.setStalker(False) + + + templates = Vector() + templates.add('object/mobile/shared_dressed_tatooine_weequay_zealot.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/carbine/shared_carbine_cdef.iff', 1, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedShot') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('elite_weequay_zealot', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/tatooine/enraged_mountain_dewback.py b/scripts/mobiles/tatooine/enraged_mountain_dewback.py new file mode 100644 index 00000000..95fdd053 --- /dev/null +++ b/scripts/mobiles/tatooine/enraged_mountain_dewback.py @@ -0,0 +1,45 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('elite_mountain_dewback') + mobileTemplate.setLevel(22) + mobileTemplate.setMinLevel(22) + mobileTemplate.setMaxLevel(23) + mobileTemplate.setDifficulty(1) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setMeatType("Reptilian Meat") + mobileTemplate.setMeatAmount(330) + mobileTemplate.setHideType("Leathery Hide") + mobileTemplate.setBoneAmount(240) + mobileTemplate.setBoneType("Animal Bone") + mobileTemplate.setHideAmount(170) + mobileTemplate.setSocialGroup("dewback mountain") + mobileTemplate.setAssistRange(4) + mobileTemplate.setStalker(False) + + templates = Vector() + templates.add('object/mobile/shared_dewback.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('enraged_mountain_dewback', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/tatooine/enraged_squill.py b/scripts/mobiles/tatooine/enraged_squill.py new file mode 100644 index 00000000..0ff84664 --- /dev/null +++ b/scripts/mobiles/tatooine/enraged_squill.py @@ -0,0 +1,45 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('elite_squill') + mobileTemplate.setLevel(12) + mobileTemplate.setMinLevel(12) + mobileTemplate.setMaxLevel(14) + mobileTemplate.setDifficulty(1) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setMeatType("Carnivore Meat") + mobileTemplate.setMeatAmount(6) + mobileTemplate.setHideType("Leathery Hide") + mobileTemplate.setBoneAmount(6) + mobileTemplate.setBoneType("Animal Bone") + mobileTemplate.setHideAmount(5) + mobileTemplate.setSocialGroup("squill") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(True) + + templates = Vector() + templates.add('object/mobile/shared_squill.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('enraged_squill', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/tatooine/eoni.py b/scripts/mobiles/tatooine/eoni.py new file mode 100644 index 00000000..c8f3d202 --- /dev/null +++ b/scripts/mobiles/tatooine/eoni.py @@ -0,0 +1,45 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('elite_jundland_eopie') + mobileTemplate.setLevel(21) + mobileTemplate.setMinLevel(21) + mobileTemplate.setMaxLevel(22) + mobileTemplate.setDifficulty(1) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setMeatType("Herbivore Meat") + mobileTemplate.setMeatAmount(300) + mobileTemplate.setHideType("Leathery Hide") + mobileTemplate.setBoneAmount(225) + mobileTemplate.setBoneType("Animal Bone") + mobileTemplate.setHideAmount(115) + mobileTemplate.setSocialGroup("eopie") + mobileTemplate.setAssistRange(4) + mobileTemplate.setStalker(False) + + templates = Vector() + templates.add('object/mobile/shared_eopie.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('eoni', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/tatooine/eopie.py b/scripts/mobiles/tatooine/eopie.py new file mode 100644 index 00000000..af34d5d6 --- /dev/null +++ b/scripts/mobiles/tatooine/eopie.py @@ -0,0 +1,45 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('eopie') + mobileTemplate.setLevel(4) + mobileTemplate.setMinLevel(4) + mobileTemplate.setMaxLevel(5) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setMeatType("Herbivore Meat") + mobileTemplate.setMeatAmount(315) + mobileTemplate.setHideType("Leathery Hide") + mobileTemplate.setBoneAmount(250) + mobileTemplate.setBoneType("Animal Bone") + mobileTemplate.setHideAmount(150) + mobileTemplate.setSocialGroup("eopie") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(False) + + templates = Vector() + templates.add('object/mobile/shared_eopie.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('eopie', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/tatooine/eopie_herdmaster.py b/scripts/mobiles/tatooine/eopie_herdmaster.py new file mode 100644 index 00000000..7635f124 --- /dev/null +++ b/scripts/mobiles/tatooine/eopie_herdmaster.py @@ -0,0 +1,45 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('eopie_herdmaster') + mobileTemplate.setLevel(5) + mobileTemplate.setMinLevel(5) + mobileTemplate.setMaxLevel(6) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setMeatType("Herbivore Meat") + mobileTemplate.setMeatAmount(315) + mobileTemplate.setHideType("Leathery Hide") + mobileTemplate.setBoneAmount(250) + mobileTemplate.setBoneType("Animal Bone") + mobileTemplate.setHideAmount(150) + mobileTemplate.setSocialGroup("eopie") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(False) + + templates = Vector() + templates.add('object/mobile/shared_eopie.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('eopie_herdmaster', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/tatooine/error_prone_battle_droids.py b/scripts/mobiles/tatooine/error_prone_battle_droids.py new file mode 100644 index 00000000..b2a2d497 --- /dev/null +++ b/scripts/mobiles/tatooine/error_prone_battle_droids.py @@ -0,0 +1,40 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('tatooine_error_prone_droid') + mobileTemplate.setLevel(6) + mobileTemplate.setMinLevel(6) + mobileTemplate.setMaxLevel(7) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(15) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(1) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("error-prone battle droid") + mobileTemplate.setAssistRange(4) + mobileTemplate.setStalker(False) + mobileTemplate.setOptionsBitmask(192) + + templates = Vector() + templates.add('object/mobile/shared_battle_droid.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/carbine/shared_carbine_e5.iff', 1, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedShot') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('error-prone_battle_droid', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/tatooine/escaped_criminal.py b/scripts/mobiles/tatooine/escaped_criminal.py new file mode 100644 index 00000000..e4667cc6 --- /dev/null +++ b/scripts/mobiles/tatooine/escaped_criminal.py @@ -0,0 +1,39 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('tatooine_eisley_escaped_criminal') + mobileTemplate.setLevel(7) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(12) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(1) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("desert demon") + mobileTemplate.setAssistRange(4) + mobileTemplate.setStalker(False) + mobileTemplate.setOptionsBitmask(192) + + + templates = Vector() + templates.add('object/mobile/shared_dressed_criminal_organized_human_male_01.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/carbine/shared_carbine_cdef.iff', 1, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedShot') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('escaped_criminal', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/tatooine/evil_hermit.py b/scripts/mobiles/tatooine/evil_hermit.py new file mode 100644 index 00000000..dde628f8 --- /dev/null +++ b/scripts/mobiles/tatooine/evil_hermit.py @@ -0,0 +1,37 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('evil_hermit') + mobileTemplate.setLevel(2) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(12) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(2) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("evil") + mobileTemplate.setAssistRange(4) + mobileTemplate.setStalker(True) + + templates = Vector() + templates.add('object/mobile/shared_dressed_tatooine_evil_hermit.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/pistol/shared_pistol_cdef.iff', 2, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedShotpistol') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('evil_hermit', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/tatooine/evil_nomad.py b/scripts/mobiles/tatooine/evil_nomad.py new file mode 100644 index 00000000..732af0db --- /dev/null +++ b/scripts/mobiles/tatooine/evil_nomad.py @@ -0,0 +1,40 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('evil_nomad') + mobileTemplate.setLevel(4) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(12) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(1) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("evil") + mobileTemplate.setAssistRange(4) + mobileTemplate.setStalker(True) + + templates = Vector() + templates.add('object/mobile/shared_dressed_tatooine_nomad.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/carbine/shared_carbine_dh17.iff', 1, 1.0) + weaponTemplates.add(weapontemplate) + weapontemplate1 = WeaponTemplate('object/weapon/melee/polearm/shared_lance_electric_polearm.iff', 7, 1.0) + weaponTemplates.add(weapontemplate1) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedShotpistol') + mobileTemplate.setDefaultAttack('meleehit') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('evil_hermit', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/tatooine/evil_settler.py b/scripts/mobiles/tatooine/evil_settler.py new file mode 100644 index 00000000..8a7120ac --- /dev/null +++ b/scripts/mobiles/tatooine/evil_settler.py @@ -0,0 +1,37 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('evil_settler') + mobileTemplate.setLevel(1) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(12) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(2) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("evil") + mobileTemplate.setAssistRange(4) + mobileTemplate.setStalker(True) + + templates = Vector() + templates.add('object/mobile/shared_dressed_tatooine_evil_settler.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/pistol/shared_pistol_cdef.iff', 2, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedShotpistol') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('evil_settler', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/tatooine/female_mountain_squill.py b/scripts/mobiles/tatooine/female_mountain_squill.py new file mode 100644 index 00000000..d38fadef --- /dev/null +++ b/scripts/mobiles/tatooine/female_mountain_squill.py @@ -0,0 +1,45 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('female_mountain_squill') + mobileTemplate.setLevel(7) + mobileTemplate.setMinLevel(7) + mobileTemplate.setMaxLevel(9) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setMeatType("Carnivore Meat") + mobileTemplate.setMeatAmount(4) + mobileTemplate.setHideType("Leathery Hide") + mobileTemplate.setBoneAmount(3) + mobileTemplate.setBoneType("Animal Bone") + mobileTemplate.setHideAmount(2) + mobileTemplate.setSocialGroup("squill") + mobileTemplate.setAssistRange(10) + mobileTemplate.setStalker(False) + + templates = Vector() + templates.add('object/mobile/shared_squill.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('female_mountain_squill', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/tatooine/feral_bantha.py b/scripts/mobiles/tatooine/feral_bantha.py new file mode 100644 index 00000000..f030e8ae --- /dev/null +++ b/scripts/mobiles/tatooine/feral_bantha.py @@ -0,0 +1,46 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('feral_bantha') + mobileTemplate.setLevel(5) + mobileTemplate.setMinLevel(5) + mobileTemplate.setMaxLevel(6) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(True) + mobileTemplate.setScale(1) + mobileTemplate.setMeatType("Herbivore Meat") + mobileTemplate.setMeatAmount(415) + mobileTemplate.setHideType("Leathery Hide") + mobileTemplate.setBoneAmount(305) + mobileTemplate.setBoneType("Animal Bone") + mobileTemplate.setHideAmount(215) + mobileTemplate.setSocialGroup("bantha") + mobileTemplate.setAssistRange(6) + mobileTemplate.setStalker(False) + mobileTemplate.setOptionsBitmask(192) + + templates = Vector() + templates.add('object/mobile/shared_bantha_hue.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('feral_bantha', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/tatooine/fighting_romo_vax.py b/scripts/mobiles/tatooine/fighting_romo_vax.py new file mode 100644 index 00000000..010b3d47 --- /dev/null +++ b/scripts/mobiles/tatooine/fighting_romo_vax.py @@ -0,0 +1,37 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('fighting_romo_vax') + mobileTemplate.setLevel(20) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(15) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(1) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(True) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("sennex") + mobileTemplate.setAssistRange(10) + mobileTemplate.setStalker(False) + + templates = Vector() + templates.add('object/mobile/shared_dressed_trader_thug_male_human_01.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/carbine/shared_carbine_e5.iff', 1, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedShot') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('fighting_romo_vax', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/tatooine/fugitive.py b/scripts/mobiles/tatooine/fugitive.py new file mode 100644 index 00000000..a5050ef5 --- /dev/null +++ b/scripts/mobiles/tatooine/fugitive.py @@ -0,0 +1,37 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('fugitive') + mobileTemplate.setLevel(4) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(15) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(1) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("thug") + mobileTemplate.setAssistRange(4) + mobileTemplate.setStalker(False) + + templates = Vector() + templates.add('object/mobile/shared_dressed_tatooine_fugitive.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/carbine/shared_carbine_e5.iff', 1, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedShot') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('fugitive', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/tatooine/furios_ronto.py b/scripts/mobiles/tatooine/furios_ronto.py new file mode 100644 index 00000000..937930c3 --- /dev/null +++ b/scripts/mobiles/tatooine/furios_ronto.py @@ -0,0 +1,45 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('ronto_furious') + mobileTemplate.setLevel(18) + mobileTemplate.setMinLevel(18) + mobileTemplate.setMaxLevel(19) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setMeatType("Herbivore Meat") + mobileTemplate.setMeatAmount(465) + mobileTemplate.setHideType("Leathery Hide") + mobileTemplate.setBoneAmount(320) + mobileTemplate.setBoneType("Animal Bone") + mobileTemplate.setHideAmount(200) + mobileTemplate.setSocialGroup("ronto") + mobileTemplate.setAssistRange(10) + mobileTemplate.setStalker(False) + + templates = Vector() + templates.add('object/mobile/shared_ronto.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('furious_ronto', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/tatooine/giant_canyon_krayt_dragon.py b/scripts/mobiles/tatooine/giant_canyon_krayt_dragon.py new file mode 100644 index 00000000..0a4e8988 --- /dev/null +++ b/scripts/mobiles/tatooine/giant_canyon_krayt_dragon.py @@ -0,0 +1,46 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('giant_canyon_krayt_dragon') + mobileTemplate.setLevel(87) + mobileTemplate.setMinLevel(80) + mobileTemplate.setMaxLevel(89) + mobileTemplate.setDifficulty(2) + mobileTemplate.setAttackRange(12) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(True) + mobileTemplate.setScale(1.1) + mobileTemplate.setMeatType("Carnivore Meat") + mobileTemplate.setMeatAmount(1500) + mobileTemplate.setHideType("Bristly Hide") + mobileTemplate.setBoneAmount(870) + mobileTemplate.setBoneType("Animal Bones") + mobileTemplate.setHideAmount(805) + mobileTemplate.setSocialGroup("krayt dragon") + mobileTemplate.setAssistRange(34) + mobileTemplate.setStalker(True) + mobileTemplate.setOptionsBitmask(192) + + templates = Vector() + templates.add('object/mobile/shared_canyon_krayt_dragon.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('giant_canyon_krayt_dragon', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/tatooine/giant_sand_beetle.py b/scripts/mobiles/tatooine/giant_sand_beetle.py new file mode 100644 index 00000000..1d582005 --- /dev/null +++ b/scripts/mobiles/tatooine/giant_sand_beetle.py @@ -0,0 +1,44 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('giant_sand_beetle') + mobileTemplate.setLevel(25) + mobileTemplate.setMinLevel(25) + mobileTemplate.setMaxLevel(26) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(True) + mobileTemplate.setScale(1) + mobileTemplate.setMeatType("Insect Meat") + mobileTemplate.setMeatAmount(15) + mobileTemplate.setHideType("Scaley Hide") + mobileTemplate.setHideAmount(20) + mobileTemplate.setSocialGroup("giant sand beetle") + mobileTemplate.setAssistRange(10) + mobileTemplate.setStalker(False) + mobileTemplate.setOptionsBitmask(192) + + templates = Vector() + templates.add('object/mobile/shared_giant_sand_beetle.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('giant_sand_beetle', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/tatooine/giant_worrt.py b/scripts/mobiles/tatooine/giant_worrt.py new file mode 100644 index 00000000..0eb02618 --- /dev/null +++ b/scripts/mobiles/tatooine/giant_worrt.py @@ -0,0 +1,46 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('giant_worrt') + mobileTemplate.setLevel(13) + mobileTemplate.setMinLevel(13) + mobileTemplate.setMaxLevel(15) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setMeatType("Reptilian Meat") + mobileTemplate.setMeatAmount(9) + mobileTemplate.setHideType("Leathery Hide") + mobileTemplate.setBoneAmount(9) + mobileTemplate.setBoneType("Animal Bone") + mobileTemplate.setHideAmount(4) + mobileTemplate.setSocialGroup("worrt") + mobileTemplate.setAssistRange(6) + mobileTemplate.setStalker(False) + mobileTemplate.setOptionsBitmask(192) + + templates = Vector() + templates.add('object/mobile/shared_giant_worrt.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('giant_worrt', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/tatooine/gorg.py b/scripts/mobiles/tatooine/gorg.py new file mode 100644 index 00000000..21ed5741 --- /dev/null +++ b/scripts/mobiles/tatooine/gorg.py @@ -0,0 +1,46 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('gorg') + mobileTemplate.setLevel(2) + mobileTemplate.setMinLevel(1) + mobileTemplate.setMaxLevel(3) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setMeatType("Herbivore Meat") + mobileTemplate.setMeatAmount(5) + mobileTemplate.setHideType("Leathery Hide") + mobileTemplate.setBoneAmount(3) + mobileTemplate.setBoneType("Animal Bone") + mobileTemplate.setHideAmount(2) + mobileTemplate.setSocialGroup("gorg") + mobileTemplate.setAssistRange(10) + mobileTemplate.setStalker(False) + mobileTemplate.setOptionsBitmask(192) + + templates = Vector() + templates.add('object/mobile/shared_gorg.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('gorg', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/tatooine/gorg_glutton.py b/scripts/mobiles/tatooine/gorg_glutton.py new file mode 100644 index 00000000..97e66c08 --- /dev/null +++ b/scripts/mobiles/tatooine/gorg_glutton.py @@ -0,0 +1,45 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('gorg_glutton') + mobileTemplate.setLevel(2) + mobileTemplate.setMinLevel(1) + mobileTemplate.setMaxLevel(3) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setMeatType("Herbivore Meat") + mobileTemplate.setMeatAmount(12) + mobileTemplate.setHideType("Leathery Hide") + mobileTemplate.setBoneAmount(9) + mobileTemplate.setBoneType("Animal Bone") + mobileTemplate.setHideAmount(8) + mobileTemplate.setSocialGroup("gorg") + mobileTemplate.setAssistRange(10) + mobileTemplate.setStalker(False) + + templates = Vector() + templates.add('object/mobile/shared_gorg.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('gorg_glutton', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/tatooine/grand_krayt_dragon.py b/scripts/mobiles/tatooine/grand_krayt_dragon.py new file mode 100644 index 00000000..7abf1f31 --- /dev/null +++ b/scripts/mobiles/tatooine/grand_krayt_dragon.py @@ -0,0 +1,46 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('krayt_dragon_grand') + mobileTemplate.setLevel(87) + mobileTemplate.setMinLevel(80) + mobileTemplate.setMaxLevel(89) + mobileTemplate.setDifficulty(2) + mobileTemplate.setAttackRange(12) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(True) + mobileTemplate.setScale(1.1) + mobileTemplate.setMeatType("Carnivore Meat") + mobileTemplate.setMeatAmount(1700) + mobileTemplate.setHideType("Bristly Hide") + mobileTemplate.setBoneAmount(950) + mobileTemplate.setBoneType("Animal Bones") + mobileTemplate.setHideAmount(905) + mobileTemplate.setSocialGroup("krayt dragon") + mobileTemplate.setAssistRange(24) + mobileTemplate.setStalker(True) + mobileTemplate.setOptionsBitmask(192) + + templates = Vector() + templates.add('object/mobile/shared_canyon_krayt_dragon.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('grand_krayt_dragon', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/tatooine/great_squill.py b/scripts/mobiles/tatooine/great_squill.py new file mode 100644 index 00000000..6c8ec3af --- /dev/null +++ b/scripts/mobiles/tatooine/great_squill.py @@ -0,0 +1,45 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('squill_great') + mobileTemplate.setLevel(13) + mobileTemplate.setMinLevel(13) + mobileTemplate.setMaxLevel(14) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setMeatType("Carnivore Meat") + mobileTemplate.setMeatAmount(6) + mobileTemplate.setHideType("Leathery Hide") + mobileTemplate.setBoneAmount(6) + mobileTemplate.setBoneType("Animal Bone") + mobileTemplate.setHideAmount(6) + mobileTemplate.setSocialGroup("squill") + mobileTemplate.setAssistRange(6) + mobileTemplate.setStalker(True) + + templates = Vector() + templates.add('object/mobile/shared_squill.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('great_squill', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/tatooine/greater_desert_womprat.py b/scripts/mobiles/tatooine/greater_desert_womprat.py new file mode 100644 index 00000000..bedb34e1 --- /dev/null +++ b/scripts/mobiles/tatooine/greater_desert_womprat.py @@ -0,0 +1,46 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('greater_desert_womprat') + mobileTemplate.setLevel(12) + mobileTemplate.setMinLevel(11) + mobileTemplate.setMaxLevel(14) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setMeatType("Wild Meat") + mobileTemplate.setMeatAmount(6) + mobileTemplate.setHideType("Leathery Hide") + mobileTemplate.setBoneAmount(5) + mobileTemplate.setBoneType("Animal Bone") + mobileTemplate.setHideAmount(4) + mobileTemplate.setSocialGroup("womprat") + mobileTemplate.setAssistRange(6) + mobileTemplate.setStalker(True) + mobileTemplate.setOptionsBitmask(192) + + templates = Vector() + templates.add('object/mobile/shared_greater_desert_womp_rat.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureRangedAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('greater_desert_womprat', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/tatooine/grizzled_dewback.py b/scripts/mobiles/tatooine/grizzled_dewback.py new file mode 100644 index 00000000..dcdc227f --- /dev/null +++ b/scripts/mobiles/tatooine/grizzled_dewback.py @@ -0,0 +1,46 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('grizzled_dewback') + mobileTemplate.setLevel(18) + mobileTemplate.setMinLevel(17) + mobileTemplate.setMaxLevel(19) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setMeatType("Reptilian Meat") + mobileTemplate.setMeatAmount(365) + mobileTemplate.setHideType("Leathery Hide") + mobileTemplate.setBoneAmount(285) + mobileTemplate.setBoneType("Animal Bones") + mobileTemplate.setHideAmount(210) + mobileTemplate.setSocialGroup("dewback") + mobileTemplate.setAssistRange(10) + mobileTemplate.setStalker(False) + mobileTemplate.setOptionsBitmask(192) + + templates = Vector() + templates.add('object/mobile/shared_dewback.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('grizzled_dewback', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/tatooine/gunrunner.py b/scripts/mobiles/tatooine/gunrunner.py new file mode 100644 index 00000000..14014c16 --- /dev/null +++ b/scripts/mobiles/tatooine/gunrunner.py @@ -0,0 +1,38 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('gunrunner_newbie') + mobileTemplate.setLevel(5) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(15) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(1) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("gunrunner") + mobileTemplate.setAssistRange(4) + mobileTemplate.setStalker(False) + mobileTemplate.setOptionsBitmask(192) + + templates = Vector() + templates.add('object/mobile/shared_dressed_tatooine_gunrunner.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/carbine/shared_carbine_e5.iff', 1, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedShot') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('gunrunner', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/tatooine/gunrunner1.py b/scripts/mobiles/tatooine/gunrunner1.py new file mode 100644 index 00000000..ffcb5590 --- /dev/null +++ b/scripts/mobiles/tatooine/gunrunner1.py @@ -0,0 +1,37 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('gunrunner_newbie') + mobileTemplate.setLevel(14) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(15) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(1) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("mercenary") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(False) + + templates = Vector() + templates.add('object/mobile/shared_dressed_tatooine_gunrunner.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/carbine/shared_carbine_e5.iff', 1, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedShot') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('gunrunner_1', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/tatooine/gunrunner2.py b/scripts/mobiles/tatooine/gunrunner2.py new file mode 100644 index 00000000..ac555ed7 --- /dev/null +++ b/scripts/mobiles/tatooine/gunrunner2.py @@ -0,0 +1,37 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('gunrunner_newbie') + mobileTemplate.setLevel(14) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(15) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(1) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("mercenary") + mobileTemplate.setAssistRange(4) + mobileTemplate.setStalker(False) + + templates = Vector() + templates.add('object/mobile/shared_dressed_tatooine_gunrunner.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/carbine/shared_carbine_e5.iff', 1, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedShot') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('gunrunner_2', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/tatooine/gunrunner_leader.py b/scripts/mobiles/tatooine/gunrunner_leader.py new file mode 100644 index 00000000..eb408545 --- /dev/null +++ b/scripts/mobiles/tatooine/gunrunner_leader.py @@ -0,0 +1,37 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('gunrunner_newbie_leader') + mobileTemplate.setLevel(8) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(15) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(1) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("gunrunner") + mobileTemplate.setAssistRange(4) + mobileTemplate.setStalker(False) + + templates = Vector() + templates.add('object/mobile/shared_dressed_tatooine_gunrunner.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/carbine/shared_carbine_e5.iff', 1, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedShot') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('gunrunner_leader', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/tatooine/gunrunner_sentry.py b/scripts/mobiles/tatooine/gunrunner_sentry.py new file mode 100644 index 00000000..55b2aa3e --- /dev/null +++ b/scripts/mobiles/tatooine/gunrunner_sentry.py @@ -0,0 +1,38 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('gunrunner_newbie_sentry') + mobileTemplate.setLevel(6) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(15) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(1) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("gunrunner") + mobileTemplate.setAssistRange(4) + mobileTemplate.setStalker(False) + mobileTemplate.setOptionsBitmask(192) + + templates = Vector() + templates.add('object/mobile/shared_dressed_tatooine_gunrunner.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/carbine/shared_carbine_e5.iff', 1, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedShot') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('gunrunner_sentry', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/tatooine/harmony_worrt.py b/scripts/mobiles/tatooine/harmony_worrt.py new file mode 100644 index 00000000..89f59c15 --- /dev/null +++ b/scripts/mobiles/tatooine/harmony_worrt.py @@ -0,0 +1,39 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('harmony_worrt') + mobileTemplate.setLevel(18) + mobileTemplate.setMinLevel(17) + mobileTemplate.setMaxLevel(19) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("worrt") + mobileTemplate.setAssistRange(4) + mobileTemplate.setStalker(False) + + templates = Vector() + templates.add('object/mobile/shared_worrt.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('harmony_worrt', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/tatooine/hermit.py b/scripts/mobiles/tatooine/hermit.py new file mode 100644 index 00000000..82a5e2b2 --- /dev/null +++ b/scripts/mobiles/tatooine/hermit.py @@ -0,0 +1,37 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('hermit') + mobileTemplate.setLevel(1) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(12) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(2) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("evil") + mobileTemplate.setAssistRange(4) + mobileTemplate.setStalker(True) + + templates = Vector() + templates.add('object/mobile/shared_dressed_tatooine_hermit.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/pistol/shared_pistol_cdef.iff', 2, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedShotpistol') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('hermit', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/tatooine/hutt_assassin.py b/scripts/mobiles/tatooine/hutt_assassin.py new file mode 100644 index 00000000..b7118080 --- /dev/null +++ b/scripts/mobiles/tatooine/hutt_assassin.py @@ -0,0 +1,38 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('hutt_assassin') + mobileTemplate.setLevel(22) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(12) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(2) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(True) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("jabba") + mobileTemplate.setAssistRange(4) + mobileTemplate.setStalker(True) + + templates = Vector() + templates.add('object/mobile/shared_hutt_male.iff') + templates.add('object/mobile/shared_hutt_female.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/pistol/shared_pistol_cdef.iff', 2, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedShotpistol') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('hutt_assassin', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/tatooine/hutt_enforcer.py b/scripts/mobiles/tatooine/hutt_enforcer.py new file mode 100644 index 00000000..eac06cef --- /dev/null +++ b/scripts/mobiles/tatooine/hutt_enforcer.py @@ -0,0 +1,38 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('hutt_enforcer') + mobileTemplate.setLevel(22) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(4) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("jabba") + mobileTemplate.setAssistRange(4) + mobileTemplate.setStalker(True) + + templates = Vector() + templates.add('object/mobile/shared_hutt_male.iff') + templates.add('object/mobile/shared_hutt_female.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/sword/shared_sword_01.iff', 4, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('saberhit') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('hutt_enforcer', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/tatooine/hutt_outcast.py b/scripts/mobiles/tatooine/hutt_outcast.py new file mode 100644 index 00000000..b43ca11f --- /dev/null +++ b/scripts/mobiles/tatooine/hutt_outcast.py @@ -0,0 +1,39 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('npe_hutt_minion') + mobileTemplate.setLevel(22) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(4) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("jabba") + mobileTemplate.setAssistRange(4) + mobileTemplate.setStalker(True) + + templates = Vector() + templates.add('object/mobile/shared_hutt_male.iff') + templates.add('object/mobile/shared_hutt_female.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/pistol/shared_pistol_cdef.iff', 2, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedShotpistol') + mobileTemplate.setAttacks(attacks) + + + core.spawnService.addMobileTemplate('hutt_outcast', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/tatooine/insane_kitonak.py b/scripts/mobiles/tatooine/insane_kitonak.py new file mode 100644 index 00000000..f6f29cb2 --- /dev/null +++ b/scripts/mobiles/tatooine/insane_kitonak.py @@ -0,0 +1,38 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('insane_kitonak') + mobileTemplate.setLevel(1) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(12) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(1) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("insane kitonak") + mobileTemplate.setAssistRange(4) + mobileTemplate.setStalker(False) + + + templates = Vector() + templates.add('object/mobile/shared_kitonak_male.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/carbine/shared_carbine_cdef.iff', 1, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedShot') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('insane_kitonak', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/tatooine/jabba_assassin.py b/scripts/mobiles/tatooine/jabba_assassin.py new file mode 100644 index 00000000..e557fa63 --- /dev/null +++ b/scripts/mobiles/tatooine/jabba_assassin.py @@ -0,0 +1,37 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('jabba_assassin') + mobileTemplate.setLevel(15) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(12) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(2) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(True) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("jabba") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(False) + + templates = Vector() + templates.add('object/mobile/shared_dressed_tatooine_jabba_assassin.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/pistol/shared_pistol_cdef.iff', 2, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedShotpistol') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('jabba_assassin', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/tatooine/jabba_compound_guard.py b/scripts/mobiles/tatooine/jabba_compound_guard.py new file mode 100644 index 00000000..f7814e3a --- /dev/null +++ b/scripts/mobiles/tatooine/jabba_compound_guard.py @@ -0,0 +1,40 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('jabba_enforcer') + mobileTemplate.setLevel(14) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(12) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(1) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(True) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("jabba") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(False) + + + templates = Vector() + templates.add('object/mobile/shared_dressed_tatooine_jabba_enforcer.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/carbine/shared_carbine_cdef.iff', 1, 1.0) + weaponTemplates.add(weapontemplate) + weapontemplate1 = WeaponTemplate('object/weapon/melee/sword/shared_sword_01.iff', 4, 1.0) + weaponTemplates.add(weapontemplate1) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedShot') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('jabba_enforcer', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/tatooine/jabba_enforcer.py b/scripts/mobiles/tatooine/jabba_enforcer.py new file mode 100644 index 00000000..25de1bd8 --- /dev/null +++ b/scripts/mobiles/tatooine/jabba_enforcer.py @@ -0,0 +1,38 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('jabba_compound_guard') + mobileTemplate.setLevel(15) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(12) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(1) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("jabba") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(False) + + + templates = Vector() + templates.add('object/mobile/shared_dressed_tatooine_jabba_henchman.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/carbine/shared_carbine_cdef.iff', 1, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedShot') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('jabba_compound_guard', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/tatooine/jabba_henchman.py b/scripts/mobiles/tatooine/jabba_henchman.py new file mode 100644 index 00000000..30af355f --- /dev/null +++ b/scripts/mobiles/tatooine/jabba_henchman.py @@ -0,0 +1,38 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('jabba_henchman') + mobileTemplate.setLevel(14) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(12) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(0) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("jabba") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(True) + + + templates = Vector() + templates.add('object/mobile/shared_dressed_tatooine_jabba_henchman.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/carbine/shared_carbine_cdef.iff', 1, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedShot') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('jabba_henchman', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/tatooine/jabba_medic.py b/scripts/mobiles/tatooine/jabba_medic.py new file mode 100644 index 00000000..27cfeed4 --- /dev/null +++ b/scripts/mobiles/tatooine/jabba_medic.py @@ -0,0 +1,38 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('a Jabba Medic') + mobileTemplate.setLevel(14) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(12) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(1) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("jabba") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(False) + + + templates = Vector() + templates.add('object/mobile/shared_dressed_tatooine_jabba_thug.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/carbine/shared_carbine_cdef.iff', 1, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedShot') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('jabba_medic', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/tatooine/jabba_scout.py b/scripts/mobiles/tatooine/jabba_scout.py new file mode 100644 index 00000000..8e75d57f --- /dev/null +++ b/scripts/mobiles/tatooine/jabba_scout.py @@ -0,0 +1,38 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('jabba_scout') + mobileTemplate.setLevel(14) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(12) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(1) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("jabba") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(False) + + + templates = Vector() + templates.add('object/mobile/shared_dressed_tatooine_jabba_scout.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/rifle/shared_rifle_e11.iff',0, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedShotrifle') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('jabba_scout', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/tatooine/jabba_swooper.py b/scripts/mobiles/tatooine/jabba_swooper.py new file mode 100644 index 00000000..366b7532 --- /dev/null +++ b/scripts/mobiles/tatooine/jabba_swooper.py @@ -0,0 +1,38 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('jabbas_swooper') + mobileTemplate.setLevel(13) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(12) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(0) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("jabba") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(True) + + + templates = Vector() + templates.add('object/mobile/shared_dressed_tatooine_jabba_swooper.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/carbine/shared_carbine_cdef.iff', 1, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedShot') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('jabba_swooper', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/tatooine/jabba_swooper_leader.py b/scripts/mobiles/tatooine/jabba_swooper_leader.py new file mode 100644 index 00000000..59b2bb9f --- /dev/null +++ b/scripts/mobiles/tatooine/jabba_swooper_leader.py @@ -0,0 +1,38 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('jabbas_swooper_leader') + mobileTemplate.setLevel(14) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(12) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(0) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("jabba") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(True) + + + templates = Vector() + templates.add('object/mobile/shared_dressed_tatooine_jabba_swooper_leader.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/carbine/shared_carbine_cdef.iff', 1, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedShot') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('jabba_swooper_leader', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/tatooine/jabba_thief.py b/scripts/mobiles/tatooine/jabba_thief.py new file mode 100644 index 00000000..9cdb72b7 --- /dev/null +++ b/scripts/mobiles/tatooine/jabba_thief.py @@ -0,0 +1,37 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('jabba_thief') + mobileTemplate.setLevel(13) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(12) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(2) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("jabba") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(False) + + templates = Vector() + templates.add('object/mobile/shared_dressed_tatooine_jabba_thief.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/pistol/shared_pistol_cdef.iff', 2, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedShotpistol') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('jabba_thief', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/tatooine/jabba_thug.py b/scripts/mobiles/tatooine/jabba_thug.py new file mode 100644 index 00000000..ea2539c6 --- /dev/null +++ b/scripts/mobiles/tatooine/jabba_thug.py @@ -0,0 +1,37 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('jabba_thief') + mobileTemplate.setLevel(13) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(12) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(2) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("jabba") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(False) + + templates = Vector() + templates.add('object/mobile/shared_dressed_tatooine_jabba_thug.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/pistol/shared_pistol_cdef.iff', 2, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedShotpistol') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('jabba_thug', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/tatooine/jawa.py b/scripts/mobiles/tatooine/jawa.py new file mode 100644 index 00000000..6734a74e --- /dev/null +++ b/scripts/mobiles/tatooine/jawa.py @@ -0,0 +1,37 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('jawa') + mobileTemplate.setLevel(16) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(12) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(1) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("jawa") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(True) + + templates = Vector() + templates.add('object/mobile/shared_jawa.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/carbine/shared_carbine_cdef.iff', 1, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedShot') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('jawa', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/tatooine/jawa_avenger.py b/scripts/mobiles/tatooine/jawa_avenger.py new file mode 100644 index 00000000..80b927d1 --- /dev/null +++ b/scripts/mobiles/tatooine/jawa_avenger.py @@ -0,0 +1,37 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('jawa_avenger') + mobileTemplate.setLevel(18) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(12) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(1) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(True) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("jawa") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(True) + + templates = Vector() + templates.add('object/mobile/shared_jawa.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/carbine/shared_carbine_cdef.iff', 1, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedShot') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('jawa_avenger', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/tatooine/jawa_engineer.py b/scripts/mobiles/tatooine/jawa_engineer.py new file mode 100644 index 00000000..e472853a --- /dev/null +++ b/scripts/mobiles/tatooine/jawa_engineer.py @@ -0,0 +1,37 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('jawa_engineer') + mobileTemplate.setLevel(16) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(12) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(2) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("jawa") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(False) + + templates = Vector() + templates.add('object/mobile/shared_jawa.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/pistol/shared_pistol_cdef.iff', 2, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedShotpistol') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('jawa_engineer', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/tatooine/jawa_healer.py b/scripts/mobiles/tatooine/jawa_healer.py new file mode 100644 index 00000000..6f78ce47 --- /dev/null +++ b/scripts/mobiles/tatooine/jawa_healer.py @@ -0,0 +1,37 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('jawa_healer') + mobileTemplate.setLevel(16) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(12) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(2) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("jawa") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(False) + + templates = Vector() + templates.add('object/mobile/shared_jawa.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/pistol/shared_pistol_cdef.iff', 2, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedShotpistol') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('jawa_healer', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/tatooine/jawa_henchman.py b/scripts/mobiles/tatooine/jawa_henchman.py new file mode 100644 index 00000000..d7952e6e --- /dev/null +++ b/scripts/mobiles/tatooine/jawa_henchman.py @@ -0,0 +1,37 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('jawa_henchman') + mobileTemplate.setLevel(16) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(12) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(2) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("jawa") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(True) + + templates = Vector() + templates.add('object/mobile/shared_jawa.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/pistol/shared_pistol_cdef.iff', 2, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedShotpistol') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('jawa_henchman', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/tatooine/jawa_leader.py b/scripts/mobiles/tatooine/jawa_leader.py new file mode 100644 index 00000000..1a0ff3c3 --- /dev/null +++ b/scripts/mobiles/tatooine/jawa_leader.py @@ -0,0 +1,37 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('jawa_leader') + mobileTemplate.setLevel(17) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(12) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(1) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("jawa") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(True) + + templates = Vector() + templates.add('object/mobile/shared_jawa.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/carbine/shared_carbine_cdef.iff', 1, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedShot') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('jawa_leader', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/tatooine/jawa_protector.py b/scripts/mobiles/tatooine/jawa_protector.py new file mode 100644 index 00000000..0986fb2a --- /dev/null +++ b/scripts/mobiles/tatooine/jawa_protector.py @@ -0,0 +1,37 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('jawa_smuggler') + mobileTemplate.setLevel(17) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(12) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(1) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(True) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("jawa") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(True) + + templates = Vector() + templates.add('object/mobile/shared_jawa.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/carbine/shared_carbine_cdef.iff', 1, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedShot') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('jawa_smuggler', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/tatooine/jawa_smuggler.py b/scripts/mobiles/tatooine/jawa_smuggler.py new file mode 100644 index 00000000..cd3dde7c --- /dev/null +++ b/scripts/mobiles/tatooine/jawa_smuggler.py @@ -0,0 +1,37 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('jawa_protector') + mobileTemplate.setLevel(17) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(12) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(1) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("jawa") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(True) + + templates = Vector() + templates.add('object/mobile/shared_jawa.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/carbine/shared_carbine_cdef.iff', 1, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedShot') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('jawa_protector', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/tatooine/jawa_thief.py b/scripts/mobiles/tatooine/jawa_thief.py new file mode 100644 index 00000000..3c080e59 --- /dev/null +++ b/scripts/mobiles/tatooine/jawa_thief.py @@ -0,0 +1,37 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('jawa_thief') + mobileTemplate.setLevel(16) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(12) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(2) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("jawa") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(False) + + templates = Vector() + templates.add('object/mobile/shared_jawa.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/pistol/shared_pistol_cdef.iff', 2, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedShotpistol') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('jawa_thief', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/tatooine/jawa_warlord.py b/scripts/mobiles/tatooine/jawa_warlord.py new file mode 100644 index 00000000..71ebb866 --- /dev/null +++ b/scripts/mobiles/tatooine/jawa_warlord.py @@ -0,0 +1,37 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('jawa_warlord') + mobileTemplate.setLevel(18) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(12) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(1) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(True) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("jawa") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(True) + + templates = Vector() + templates.add('object/mobile/shared_jawa.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/carbine/shared_carbine_cdef.iff', 1, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedShot') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('jawa_warlord', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/tatooine/jessk.py b/scripts/mobiles/tatooine/jessk.py new file mode 100644 index 00000000..0deff2d1 --- /dev/null +++ b/scripts/mobiles/tatooine/jessk.py @@ -0,0 +1,37 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('ep3_qst_jessk') + mobileTemplate.setLevel(18) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(12) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(1) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("jawa") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(True) + + templates = Vector() + templates.add('object/mobile/shared_ep3_jessk.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/carbine/shared_carbine_cdef.iff', 1, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedShot') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('jessk', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/tatooine/jundland_eopie.py b/scripts/mobiles/tatooine/jundland_eopie.py new file mode 100644 index 00000000..69f75c98 --- /dev/null +++ b/scripts/mobiles/tatooine/jundland_eopie.py @@ -0,0 +1,45 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('jundland_eopie') + mobileTemplate.setLevel(21) + mobileTemplate.setMinLevel(19) + mobileTemplate.setMaxLevel(23) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setMeatType("Herbivore Meat") + mobileTemplate.setMeatAmount(300) + mobileTemplate.setHideType("Leathery Hide") + mobileTemplate.setBoneAmount(225) + mobileTemplate.setBoneType("Animal Bone") + mobileTemplate.setHideAmount(115) + mobileTemplate.setSocialGroup("eopie") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(False) + + templates = Vector() + templates.add('object/mobile/shared_eopie.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('jundland_eopie', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/tatooine/junk_battle_droid.py b/scripts/mobiles/tatooine/junk_battle_droid.py new file mode 100644 index 00000000..27c239c8 --- /dev/null +++ b/scripts/mobiles/tatooine/junk_battle_droid.py @@ -0,0 +1,39 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('tatooine_lin_demolitionmech') + mobileTemplate.setLevel(14) + mobileTemplate.setMinLevel(13) + mobileTemplate.setMaxLevel(15) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(15) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(1) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("battle droid") + mobileTemplate.setAssistRange(4) + mobileTemplate.setStalker(False) + + templates = Vector() + templates.add('object/mobile/shared_battle_droid.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/carbine/shared_carbine_e5.iff', 1, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedShot') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('junk_battle_droid', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/tatooine/juvenile_canyon_krayt_dragon.py b/scripts/mobiles/tatooine/juvenile_canyon_krayt_dragon.py new file mode 100644 index 00000000..091361e3 --- /dev/null +++ b/scripts/mobiles/tatooine/juvenile_canyon_krayt_dragon.py @@ -0,0 +1,46 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('juvenile_canyon_krayt') + mobileTemplate.setLevel(82) + mobileTemplate.setMinLevel(78) + mobileTemplate.setMaxLevel(83) + mobileTemplate.setDifficulty(2) + mobileTemplate.setAttackRange(10) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(True) + mobileTemplate.setScale(0.55) + mobileTemplate.setMeatType("Carnivore Meat") + mobileTemplate.setMeatAmount(750) + mobileTemplate.setHideType("Bristly Hide") + mobileTemplate.setBoneAmount(500) + mobileTemplate.setBoneType("Animal Bones") + mobileTemplate.setHideAmount(410) + mobileTemplate.setSocialGroup("krayt dragon") + mobileTemplate.setAssistRange(24) + mobileTemplate.setStalker(False) + mobileTemplate.setOptionsBitmask(192) + + templates = Vector() + templates.add('object/mobile/shared_krayt_dragon.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('juvenile_canyon_krayt_dragon', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/tatooine/kleetuz.py b/scripts/mobiles/tatooine/kleetuz.py new file mode 100644 index 00000000..9f1ed5a6 --- /dev/null +++ b/scripts/mobiles/tatooine/kleetuz.py @@ -0,0 +1,37 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('tatooine_repo_kleetuz') + mobileTemplate.setLevel(16) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(12) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(2) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("mercenary") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(True) + + templates = Vector() + templates.add('object/mobile/shared_dressed_tatooine_repo_kleetuz.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/pistol/shared_pistol_cdef.iff', 2, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedShotpistol') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('kleetuz', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/tatooine/krayt_dragon.py b/scripts/mobiles/tatooine/krayt_dragon.py new file mode 100644 index 00000000..6eb4001c --- /dev/null +++ b/scripts/mobiles/tatooine/krayt_dragon.py @@ -0,0 +1,46 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('krayt_dragon') + mobileTemplate.setLevel(82) + mobileTemplate.setMinLevel(78) + mobileTemplate.setMaxLevel(83) + mobileTemplate.setDifficulty(2) + mobileTemplate.setAttackRange(12) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(True) + mobileTemplate.setScale(2.6) + mobileTemplate.setMeatType("Carnivore Meat") + mobileTemplate.setMeatAmount(750) + mobileTemplate.setHideType("Bristly Hide") + mobileTemplate.setBoneAmount(500) + mobileTemplate.setBoneType("Animal Bones") + mobileTemplate.setHideAmount(410) + mobileTemplate.setSocialGroup("krayt dragon") + mobileTemplate.setAssistRange(24) + mobileTemplate.setStalker(False) + mobileTemplate.setOptionsBitmask(192) + + templates = Vector() + templates.add('object/mobile/shared_krayt_dragon.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('krayt_dragon', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/tatooine/krayt_dragon_ancient.py b/scripts/mobiles/tatooine/krayt_dragon_ancient.py new file mode 100644 index 00000000..d9e5cb71 --- /dev/null +++ b/scripts/mobiles/tatooine/krayt_dragon_ancient.py @@ -0,0 +1,46 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('krayt_dragon_ancient') + mobileTemplate.setLevel(90) + mobileTemplate.setMinLevel(89) + mobileTemplate.setMaxLevel(90) + mobileTemplate.setDifficulty(2) + mobileTemplate.setAttackRange(12) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(True) + mobileTemplate.setScale(1.33) + mobileTemplate.setMeatType("Carnivore Meat") + mobileTemplate.setMeatAmount(1700) + mobileTemplate.setHideType("Bristly Hide") + mobileTemplate.setBoneAmount(950) + mobileTemplate.setBoneType("Animal Bones") + mobileTemplate.setHideAmount(905) + mobileTemplate.setSocialGroup("krayt dragon") + mobileTemplate.setAssistRange(36) + mobileTemplate.setStalker(True) + mobileTemplate.setOptionsBitmask(192) + + templates = Vector() + templates.add('object/mobile/shared_krayt_dragon.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('krayt_dragon_ancient', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/tatooine/kreetle.py b/scripts/mobiles/tatooine/kreetle.py new file mode 100644 index 00000000..915acf5e --- /dev/null +++ b/scripts/mobiles/tatooine/kreetle.py @@ -0,0 +1,43 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('kreetle') + mobileTemplate.setLevel(5) + mobileTemplate.setMinLevel(4) + mobileTemplate.setMaxLevel(6) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setMeatType("Insect Meat") + mobileTemplate.setMeatAmount(1) + mobileTemplate.setHideType("Scaley Hide") + mobileTemplate.setHideAmount(2) + mobileTemplate.setSocialGroup("kreetle") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(False) + + templates = Vector() + templates.add('object/mobile/shared_kreetle.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('kreetle', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/tatooine/kreetle_swarmling.py b/scripts/mobiles/tatooine/kreetle_swarmling.py new file mode 100644 index 00000000..a7d0acc1 --- /dev/null +++ b/scripts/mobiles/tatooine/kreetle_swarmling.py @@ -0,0 +1,43 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('kreetle_swarming') + mobileTemplate.setLevel(1) + mobileTemplate.setMinLevel(1) + mobileTemplate.setMaxLevel(3) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setMeatType("Insect Meat") + mobileTemplate.setMeatAmount(1) + mobileTemplate.setHideType("Scaley Hide") + mobileTemplate.setHideAmount(2) + mobileTemplate.setSocialGroup("kreetle") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(False) + + templates = Vector() + templates.add('object/mobile/shared_kreetle.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('kreetle_swarmling', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/tatooine/large_cave_beetle.py b/scripts/mobiles/tatooine/large_cave_beetle.py new file mode 100644 index 00000000..daa562ae --- /dev/null +++ b/scripts/mobiles/tatooine/large_cave_beetle.py @@ -0,0 +1,43 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('large_cave_beetle') + mobileTemplate.setLevel(21) + mobileTemplate.setMinLevel(21) + mobileTemplate.setMaxLevel(23) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(True) + mobileTemplate.setScale(1) + mobileTemplate.setMeatType("Insect Meat") + mobileTemplate.setMeatAmount(10) + mobileTemplate.setHideType("Scaley Hide") + mobileTemplate.setHideAmount(14) + mobileTemplate.setSocialGroup("rock beetle") + mobileTemplate.setAssistRange(5) + mobileTemplate.setStalker(False) + + templates = Vector() + templates.add('object/mobile/shared_rock_beetle.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/creature/shared_creature_spit_small_toxicgreen.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureRangedAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('large_cave_beetle', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/tatooine/large_rock_beetle1.py b/scripts/mobiles/tatooine/large_rock_beetle1.py new file mode 100644 index 00000000..fec7bf8e --- /dev/null +++ b/scripts/mobiles/tatooine/large_rock_beetle1.py @@ -0,0 +1,43 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('large_rock_beetle') + mobileTemplate.setLevel(18) + mobileTemplate.setMinLevel(17) + mobileTemplate.setMaxLevel(18) + mobileTemplate.setDifficulty(1) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setMeatType("Insect Meat") + mobileTemplate.setMeatAmount(6) + mobileTemplate.setHideType("Scaley Hide") + mobileTemplate.setHideAmount(8) + mobileTemplate.setSocialGroup("rock beetle") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(False) + + templates = Vector() + templates.add('object/mobile/shared_rock_beetle.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/creature/shared_creature_spit_small_toxicgreen.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureRangedAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('large_rock_beetle_1', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/tatooine/large_rock_beetle2.py b/scripts/mobiles/tatooine/large_rock_beetle2.py new file mode 100644 index 00000000..eb2a89c6 --- /dev/null +++ b/scripts/mobiles/tatooine/large_rock_beetle2.py @@ -0,0 +1,43 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('large_rock_beetle') + mobileTemplate.setLevel(19) + mobileTemplate.setMinLevel(18) + mobileTemplate.setMaxLevel(20) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(True) + mobileTemplate.setScale(1) + mobileTemplate.setMeatType("Insect Meat") + mobileTemplate.setMeatAmount(10) + mobileTemplate.setHideType("Scaley Hide") + mobileTemplate.setHideAmount(14) + mobileTemplate.setSocialGroup("rock beetle") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(False) + + templates = Vector() + templates.add('object/mobile/shared_rock_beetle.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('large_rock_beetle_2', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/tatooine/large_rock_beetle3.py b/scripts/mobiles/tatooine/large_rock_beetle3.py new file mode 100644 index 00000000..cfb3248c --- /dev/null +++ b/scripts/mobiles/tatooine/large_rock_beetle3.py @@ -0,0 +1,43 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('large_rock_beetle') + mobileTemplate.setLevel(19) + mobileTemplate.setMinLevel(18) + mobileTemplate.setMaxLevel(20) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setMeatType("Insect Meat") + mobileTemplate.setMeatAmount(12) + mobileTemplate.setHideType("Scaley Hide") + mobileTemplate.setHideAmount(16) + mobileTemplate.setSocialGroup("rock beetle") + mobileTemplate.setAssistRange(6) + mobileTemplate.setStalker(False) + + templates = Vector() + templates.add('object/mobile/shared_rock_beetle.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('large_rock_beetle_3', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/tatooine/large_sand_beetle.py b/scripts/mobiles/tatooine/large_sand_beetle.py new file mode 100644 index 00000000..df30f8cf --- /dev/null +++ b/scripts/mobiles/tatooine/large_sand_beetle.py @@ -0,0 +1,43 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('large_sand_beetle') + mobileTemplate.setLevel(24) + mobileTemplate.setMinLevel(22) + mobileTemplate.setMaxLevel(25) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(True) + mobileTemplate.setScale(1) + mobileTemplate.setMeatType("Insect Meat") + mobileTemplate.setMeatAmount(10) + mobileTemplate.setHideType("Scaley Hide") + mobileTemplate.setHideAmount(14) + mobileTemplate.setSocialGroup("giant sand beetle") + mobileTemplate.setAssistRange(10) + mobileTemplate.setStalker(False) + + templates = Vector() + templates.add('object/mobile/shared_giant_sand_beetle.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('large_sand_beetle', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/tatooine/lesser_bocatt.py b/scripts/mobiles/tatooine/lesser_bocatt.py new file mode 100644 index 00000000..e74c5f09 --- /dev/null +++ b/scripts/mobiles/tatooine/lesser_bocatt.py @@ -0,0 +1,45 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('lesser_bocatt') + mobileTemplate.setLevel(14) + mobileTemplate.setMinLevel(13) + mobileTemplate.setMaxLevel(15) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setMeatType("Reptilian Meat") + mobileTemplate.setMeatAmount(100) + mobileTemplate.setHideType("Leathery Hide") + mobileTemplate.setBoneAmount(60) + mobileTemplate.setBoneType("Animal Bones") + mobileTemplate.setHideAmount(35) + mobileTemplate.setSocialGroup("bocatt") + mobileTemplate.setAssistRange(10) + mobileTemplate.setStalker(True) + + templates = Vector() + templates.add('object/mobile/shared_bocatt.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('lesser_bocatt', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/tatooine/lesser_desert_womprat.py b/scripts/mobiles/tatooine/lesser_desert_womprat.py new file mode 100644 index 00000000..6d9de71d --- /dev/null +++ b/scripts/mobiles/tatooine/lesser_desert_womprat.py @@ -0,0 +1,45 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('lesser_desert_womprat') + mobileTemplate.setLevel(4) + mobileTemplate.setMinLevel(3) + mobileTemplate.setMaxLevel(5) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setMeatType("Wild Meat") + mobileTemplate.setMeatAmount(2) + mobileTemplate.setHideType("Leathery Hide") + mobileTemplate.setBoneAmount(2) + mobileTemplate.setBoneType("Animal Bone") + mobileTemplate.setHideAmount(1) + mobileTemplate.setSocialGroup("womprat") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(False) + + templates = Vector() + templates.add('object/mobile/shared_lesser_desert_womp_rat.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('lesser_deser_womprat', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/tatooine/lesser_dewback.py b/scripts/mobiles/tatooine/lesser_dewback.py new file mode 100644 index 00000000..a8dad881 --- /dev/null +++ b/scripts/mobiles/tatooine/lesser_dewback.py @@ -0,0 +1,45 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('lesser_dewback') + mobileTemplate.setLevel(4) + mobileTemplate.setMinLevel(3) + mobileTemplate.setMaxLevel(5) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setMeatType("Reptilian Meat") + mobileTemplate.setMeatAmount(175) + mobileTemplate.setHideType("Leathery Hide") + mobileTemplate.setBoneAmount(125) + mobileTemplate.setBoneType("Animal Bones") + mobileTemplate.setHideAmount(100) + mobileTemplate.setSocialGroup("dewback") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(False) + + templates = Vector() + templates.add('object/mobile/shared_dewback.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('lesser_dewback', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/tatooine/malignant_squill.py b/scripts/mobiles/tatooine/malignant_squill.py new file mode 100644 index 00000000..44713158 --- /dev/null +++ b/scripts/mobiles/tatooine/malignant_squill.py @@ -0,0 +1,45 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('malignant_squill') + mobileTemplate.setLevel(50) + mobileTemplate.setMinLevel(48) + mobileTemplate.setMaxLevel(52) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(True) + mobileTemplate.setScale(1) + mobileTemplate.setMeatType("Carnivore Meat") + mobileTemplate.setMeatAmount(25) + mobileTemplate.setHideType("Leathery Hide") + mobileTemplate.setBoneAmount(25) + mobileTemplate.setBoneType("Animal Bone") + mobileTemplate.setHideAmount(20) + mobileTemplate.setSocialGroup("squill") + mobileTemplate.setAssistRange(10) + mobileTemplate.setStalker(True) + + templates = Vector() + templates.add('object/mobile/shared_squill.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('malignant_squill', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/tatooine/minor_worrt.py b/scripts/mobiles/tatooine/minor_worrt.py new file mode 100644 index 00000000..659b7bf9 --- /dev/null +++ b/scripts/mobiles/tatooine/minor_worrt.py @@ -0,0 +1,45 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('minor_worrt') + mobileTemplate.setLevel(3) + mobileTemplate.setMinLevel(2) + mobileTemplate.setMaxLevel(4) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setMeatType("Reptilian Meat") + mobileTemplate.setMeatAmount(3) + mobileTemplate.setHideType("Leathery Hide") + mobileTemplate.setBoneAmount(3) + mobileTemplate.setBoneType("Animal Bone") + mobileTemplate.setHideAmount(1) + mobileTemplate.setSocialGroup("minor worrt") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(False) + + templates = Vector() + templates.add('object/mobile/shared_minor_worrt.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('minor_worrt', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/tatooine/moisture_thief.py b/scripts/mobiles/tatooine/moisture_thief.py new file mode 100644 index 00000000..cc14293d --- /dev/null +++ b/scripts/mobiles/tatooine/moisture_thief.py @@ -0,0 +1,38 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('mission_moisture_thief') + mobileTemplate.setLevel(2) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(4) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("jabba") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(False) + + + templates = Vector() + templates.add('object/mobile/shared_dressed_tatooine_moisture_thief.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/sword/shared_sword_01.iff', 4, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('meleehit') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('moisture_thief', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/tatooine/mound_mite.py b/scripts/mobiles/tatooine/mound_mite.py new file mode 100644 index 00000000..581fde19 --- /dev/null +++ b/scripts/mobiles/tatooine/mound_mite.py @@ -0,0 +1,43 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('mound_mite') + mobileTemplate.setLevel(4) + mobileTemplate.setMinLevel(4) + mobileTemplate.setMaxLevel(7) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setMeatType("Insect Meat") + mobileTemplate.setMeatAmount(3) + mobileTemplate.setHideType("Scaley Hide") + mobileTemplate.setHideAmount(4) + mobileTemplate.setSocialGroup("mound mite") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(False) + + templates = Vector() + templates.add('object/mobile/shared_mound_mite.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('mound_mite', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/tatooine/mountain_dewback.py b/scripts/mobiles/tatooine/mountain_dewback.py new file mode 100644 index 00000000..d01a2c95 --- /dev/null +++ b/scripts/mobiles/tatooine/mountain_dewback.py @@ -0,0 +1,45 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('mountain_dewback') + mobileTemplate.setLevel(22) + mobileTemplate.setMinLevel(21) + mobileTemplate.setMaxLevel(23) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setMeatType("Reptilian Meat") + mobileTemplate.setMeatAmount(330) + mobileTemplate.setHideType("Leathery Hide") + mobileTemplate.setBoneAmount(240) + mobileTemplate.setBoneType("Animal Bones") + mobileTemplate.setHideAmount(170) + mobileTemplate.setSocialGroup("dewback mountain") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(False) + + templates = Vector() + templates.add('object/mobile/shared_mountain_dewback.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('mountain_dewback', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/tatooine/mountain_squill.py b/scripts/mobiles/tatooine/mountain_squill.py new file mode 100644 index 00000000..eadfb722 --- /dev/null +++ b/scripts/mobiles/tatooine/mountain_squill.py @@ -0,0 +1,46 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('mountain_squill') + mobileTemplate.setLevel(18) + mobileTemplate.setMinLevel(17) + mobileTemplate.setMaxLevel(19) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setMeatType("Carnivore Meat") + mobileTemplate.setMeatAmount(3) + mobileTemplate.setHideType("Leathery Hide") + mobileTemplate.setBoneAmount(3) + mobileTemplate.setBoneType("Animal Bone") + mobileTemplate.setHideAmount(2) + mobileTemplate.setSocialGroup("squill") + mobileTemplate.setAssistRange(10) + mobileTemplate.setStalker(True) + mobileTemplate.setOptionsBitmask(192) + + templates = Vector() + templates.add('object/mobile/shared_mountain_squill.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('mountain_squill', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/tatooine/mountain_squill_guardian.py b/scripts/mobiles/tatooine/mountain_squill_guardian.py new file mode 100644 index 00000000..5959aa53 --- /dev/null +++ b/scripts/mobiles/tatooine/mountain_squill_guardian.py @@ -0,0 +1,45 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('mountain_squill_guardian') + mobileTemplate.setLevel(19) + mobileTemplate.setMinLevel(18) + mobileTemplate.setMaxLevel(21) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setMeatType("Carnivore Meat") + mobileTemplate.setMeatAmount(3) + mobileTemplate.setHideType("Leathery Hide") + mobileTemplate.setBoneAmount(4) + mobileTemplate.setBoneType("Animal Bone") + mobileTemplate.setHideAmount(2) + mobileTemplate.setSocialGroup("squill") + mobileTemplate.setAssistRange(10) + mobileTemplate.setStalker(False) + + templates = Vector() + templates.add('object/mobile/shared_mountain_squill.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('mountain_squill_guardian', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/tatooine/mountain_squill_hunter.py b/scripts/mobiles/tatooine/mountain_squill_hunter.py new file mode 100644 index 00000000..f744dcc5 --- /dev/null +++ b/scripts/mobiles/tatooine/mountain_squill_hunter.py @@ -0,0 +1,45 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('mountain_squill_hunter') + mobileTemplate.setLevel(19) + mobileTemplate.setMinLevel(18) + mobileTemplate.setMaxLevel(21) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setMeatType("Carnivore Meat") + mobileTemplate.setMeatAmount(2) + mobileTemplate.setHideType("Leathery Hide") + mobileTemplate.setBoneAmount(2) + mobileTemplate.setBoneType("Animal Bone") + mobileTemplate.setHideAmount(1) + mobileTemplate.setSocialGroup("squill") + mobileTemplate.setAssistRange(10) + mobileTemplate.setStalker(False) + + templates = Vector() + templates.add('object/mobile/shared_mountain_squill.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('mountain_squill_hunter', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/tatooine/mountain_worrt.py b/scripts/mobiles/tatooine/mountain_worrt.py new file mode 100644 index 00000000..01e6f591 --- /dev/null +++ b/scripts/mobiles/tatooine/mountain_worrt.py @@ -0,0 +1,46 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('mountain_worrt') + mobileTemplate.setLevel(19) + mobileTemplate.setMinLevel(18) + mobileTemplate.setMaxLevel(21) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setMeatType("Reptilian Meat") + mobileTemplate.setMeatAmount(4) + mobileTemplate.setHideType("Leathery Hide") + mobileTemplate.setBoneAmount(3) + mobileTemplate.setBoneType("Animal Bone") + mobileTemplate.setHideAmount(2) + mobileTemplate.setSocialGroup("mountain worrt") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(False) + mobileTemplate.setOptionsBitmask(192) + + templates = Vector() + templates.add('object/mobile/shared_worrt.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/creature/shared_creature_spit_small_toxicgreen.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureRangedAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('mountain_worrt', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/tatooine/mutant_womprat.py b/scripts/mobiles/tatooine/mutant_womprat.py new file mode 100644 index 00000000..206a8a0c --- /dev/null +++ b/scripts/mobiles/tatooine/mutant_womprat.py @@ -0,0 +1,46 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('mutant_womprat') + mobileTemplate.setLevel(12) + mobileTemplate.setMinLevel(11) + mobileTemplate.setMaxLevel(13) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setMeatType("Wild Meat") + mobileTemplate.setMeatAmount(6) + mobileTemplate.setHideType("Leathery Hide") + mobileTemplate.setBoneAmount(5) + mobileTemplate.setBoneType("Animal Bone") + mobileTemplate.setHideAmount(4) + mobileTemplate.setSocialGroup("womprat") + mobileTemplate.setAssistRange(6) + mobileTemplate.setStalker(False) + mobileTemplate.setOptionsBitmask(192) + + templates = Vector() + templates.add('object/mobile/shared_womp_rat.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('womprat', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/tatooine/overkreetle.py b/scripts/mobiles/tatooine/overkreetle.py new file mode 100644 index 00000000..e8c4030f --- /dev/null +++ b/scripts/mobiles/tatooine/overkreetle.py @@ -0,0 +1,44 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('kreetle_over') + mobileTemplate.setLevel(11) + mobileTemplate.setMinLevel(10) + mobileTemplate.setMaxLevel(12) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setMeatType("Insect Meat") + mobileTemplate.setMeatAmount(8) + mobileTemplate.setHideType("Scaley Hide") + mobileTemplate.setHideAmount(12) + mobileTemplate.setSocialGroup("uber kreetle") + mobileTemplate.setAssistRange(6) + mobileTemplate.setStalker(False) + mobileTemplate.setOptionsBitmask(192) + + templates = Vector() + templates.add('object/mobile/shared_kreetle.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('overkreetle', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/tatooine/parry_stormtrooper_dewback.py b/scripts/mobiles/tatooine/parry_stormtrooper_dewback.py new file mode 100644 index 00000000..8090d862 --- /dev/null +++ b/scripts/mobiles/tatooine/parry_stormtrooper_dewback.py @@ -0,0 +1,45 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('parry_stormtrooper_dewback') + mobileTemplate.setLevel(17) + mobileTemplate.setMinLevel(16) + mobileTemplate.setMaxLevel(18) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setMeatType("Reptilian Meat") + mobileTemplate.setMeatAmount(360) + mobileTemplate.setHideType("Leathery Hide") + mobileTemplate.setBoneAmount(275) + mobileTemplate.setBoneType("Animal Bones") + mobileTemplate.setHideAmount(250) + mobileTemplate.setSocialGroup("imperial") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(False) + + templates = Vector() + templates.add('object/mobile/shared_dewback_armored.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('parry_stormtrooper_dewback', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/tatooine/pirate.py b/scripts/mobiles/tatooine/pirate.py new file mode 100644 index 00000000..c3eae120 --- /dev/null +++ b/scripts/mobiles/tatooine/pirate.py @@ -0,0 +1,37 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('mission_pirate') + mobileTemplate.setLevel(20) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(12) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(1) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(True) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("pirate") + mobileTemplate.setAssistRange(10) + mobileTemplate.setStalker(False) + + templates = Vector() + templates.add('object/mobile/shared_dressed_pirate_plunderer_of_tatooine.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/carbine/shared_carbine_cdef.iff', 1, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedShot') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('pirate', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/tatooine/pirate_leader.py b/scripts/mobiles/tatooine/pirate_leader.py new file mode 100644 index 00000000..e1deb72b --- /dev/null +++ b/scripts/mobiles/tatooine/pirate_leader.py @@ -0,0 +1,37 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('mission_pirate_leader') + mobileTemplate.setLevel(23) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(12) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(1) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(True) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("pirate") + mobileTemplate.setAssistRange(10) + mobileTemplate.setStalker(False) + + templates = Vector() + templates.add('object/mobile/shared_dressed_pirate_leader_of_tatooine.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/carbine/shared_carbine_cdef.iff', 1, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedShot') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('pirate_leader', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/tatooine/plaque_rat.py b/scripts/mobiles/tatooine/plaque_rat.py new file mode 100644 index 00000000..2eabdeef --- /dev/null +++ b/scripts/mobiles/tatooine/plaque_rat.py @@ -0,0 +1,45 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('womprat_plague') + mobileTemplate.setLevel(11) + mobileTemplate.setMinLevel(10) + mobileTemplate.setMaxLevel(12) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setMeatType("Wild Meat") + mobileTemplate.setMeatAmount(4) + mobileTemplate.setHideType("Leathery Hide") + mobileTemplate.setBoneAmount(3) + mobileTemplate.setBoneType("Animal Bone") + mobileTemplate.setHideAmount(2) + mobileTemplate.setSocialGroup("womprat") + mobileTemplate.setAssistRange(6) + mobileTemplate.setStalker(False) + + templates = Vector() + templates.add('object/mobile/shared_womp_rat.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('plaque_womprat', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/tatooine/plaque_victim.py b/scripts/mobiles/tatooine/plaque_victim.py new file mode 100644 index 00000000..2d51b867 --- /dev/null +++ b/scripts/mobiles/tatooine/plaque_victim.py @@ -0,0 +1,37 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('mission_plague_victim') + mobileTemplate.setLevel(2) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(12) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(1) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("pirate") + mobileTemplate.setAssistRange(10) + mobileTemplate.setStalker(False) + + templates = Vector() + templates.add('object/mobile/shared_dressed_tatooine_plague_victim.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/carbine/shared_carbine_cdef.iff', 1, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedShot') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('plague_victim', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/tatooine/r3-b57.py b/scripts/mobiles/tatooine/r3-b57.py new file mode 100644 index 00000000..9474a87e --- /dev/null +++ b/scripts/mobiles/tatooine/r3-b57.py @@ -0,0 +1,37 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('legacy_r3_droid') + mobileTemplate.setLevel(22) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(15) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(1) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("astromech") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(False) + + templates = Vector() + templates.add('object/mobile/shared_r3.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/carbine/shared_carbine_e5.iff', 1, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedShot') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('r3b57', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/tatooine/ra-316.py b/scripts/mobiles/tatooine/ra-316.py new file mode 100644 index 00000000..77e5e342 --- /dev/null +++ b/scripts/mobiles/tatooine/ra-316.py @@ -0,0 +1,37 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('legacy_ra_droid') + mobileTemplate.setLevel(22) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(15) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(1) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("astromech") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(False) + + templates = Vector() + templates.add('object/mobile/shared_protocol_droid.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/carbine/shared_carbine_e5.iff', 1, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedShot') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('ra316', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/tatooine/razorback_felspur.py b/scripts/mobiles/tatooine/razorback_felspur.py new file mode 100644 index 00000000..3c66dae3 --- /dev/null +++ b/scripts/mobiles/tatooine/razorback_felspur.py @@ -0,0 +1,45 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('desert_razorback_felspur') + mobileTemplate.setLevel(24) + mobileTemplate.setMinLevel(23) + mobileTemplate.setMaxLevel(25) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setMeatType("Herbivore Meat") + mobileTemplate.setMeatAmount(65) + mobileTemplate.setHideType("Leathery Hide") + mobileTemplate.setBoneAmount(40) + mobileTemplate.setBoneType("Animal Bone") + mobileTemplate.setHideAmount(25) + mobileTemplate.setSocialGroup("zucca Boar") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(False) + + templates = Vector() + templates.add('object/mobile/shared_zucca_boar.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('razorback_felspur', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/tatooine/razorclaw.py b/scripts/mobiles/tatooine/razorclaw.py new file mode 100644 index 00000000..f1ad041d --- /dev/null +++ b/scripts/mobiles/tatooine/razorclaw.py @@ -0,0 +1,45 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('elite_desert_razorback') + mobileTemplate.setLevel(24) + mobileTemplate.setMinLevel(23) + mobileTemplate.setMaxLevel(25) + mobileTemplate.setDifficulty(1) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setMeatType("Herbivore Meat") + mobileTemplate.setMeatAmount(65) + mobileTemplate.setHideType("Leathery Hide") + mobileTemplate.setBoneAmount(40) + mobileTemplate.setBoneType("Animal Bone") + mobileTemplate.setHideAmount(25) + mobileTemplate.setSocialGroup("zucca Boar") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(False) + + templates = Vector() + templates.add('object/mobile/shared_zucca_boar.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('razorclaw', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/tatooine/rill.py b/scripts/mobiles/tatooine/rill.py new file mode 100644 index 00000000..e5715117 --- /dev/null +++ b/scripts/mobiles/tatooine/rill.py @@ -0,0 +1,45 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('rill') + mobileTemplate.setLevel(5) + mobileTemplate.setMinLevel(4) + mobileTemplate.setMaxLevel(6) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setMeatType("Carnivore Meat") + mobileTemplate.setMeatAmount(35) + mobileTemplate.setHideType("Bristly Hide") + mobileTemplate.setBoneAmount(20) + mobileTemplate.setBoneType("Animal Bone") + mobileTemplate.setHideAmount(30) + mobileTemplate.setSocialGroup("rill") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(False) + + templates = Vector() + templates.add('object/mobile/shared_rill.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('rill', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/tatooine/rock_beetle.py b/scripts/mobiles/tatooine/rock_beetle.py new file mode 100644 index 00000000..56e756c9 --- /dev/null +++ b/scripts/mobiles/tatooine/rock_beetle.py @@ -0,0 +1,43 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('rock_beetle') + mobileTemplate.setLevel(18) + mobileTemplate.setMinLevel(17) + mobileTemplate.setMaxLevel(18) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setMeatType("Insect Meat") + mobileTemplate.setMeatAmount(8) + mobileTemplate.setHideType("Scaley Hide") + mobileTemplate.setHideAmount(10) + mobileTemplate.setSocialGroup("rock beetle") + mobileTemplate.setAssistRange(6) + mobileTemplate.setStalker(False) + + templates = Vector() + templates.add('object/mobile/shared_rock_beetle.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/creature/shared_creature_spit_small_toxicgreen.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureRangedAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('rock_beetle', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/tatooine/rock_beetle1.py b/scripts/mobiles/tatooine/rock_beetle1.py new file mode 100644 index 00000000..f4760b94 --- /dev/null +++ b/scripts/mobiles/tatooine/rock_beetle1.py @@ -0,0 +1,43 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('rock_beetle') + mobileTemplate.setLevel(19) + mobileTemplate.setMinLevel(18) + mobileTemplate.setMaxLevel(19) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setMeatType("Insect Meat") + mobileTemplate.setMeatAmount(6) + mobileTemplate.setHideType("Scaley Hide") + mobileTemplate.setHideAmount(8) + mobileTemplate.setSocialGroup("rock beetle") + mobileTemplate.setAssistRange(4) + mobileTemplate.setStalker(False) + + templates = Vector() + templates.add('object/mobile/shared_rock_beetle.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/creature/shared_creature_spit_small_toxicgreen.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureRangedAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('rock_beetle_1', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/tatooine/rock_beetle_cave.py b/scripts/mobiles/tatooine/rock_beetle_cave.py new file mode 100644 index 00000000..20296315 --- /dev/null +++ b/scripts/mobiles/tatooine/rock_beetle_cave.py @@ -0,0 +1,43 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('rock_beetle_cave') + mobileTemplate.setLevel(19) + mobileTemplate.setMinLevel(18) + mobileTemplate.setMaxLevel(19) + mobileTemplate.setDifficulty(1) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setMeatType("Insect Meat") + mobileTemplate.setMeatAmount(9) + mobileTemplate.setHideType("Scaley Hide") + mobileTemplate.setHideAmount(10) + mobileTemplate.setSocialGroup("rock beetle") + mobileTemplate.setAssistRange(6) + mobileTemplate.setStalker(False) + + templates = Vector() + templates.add('object/mobile/shared_rock_beetle.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/creature/shared_creature_spit_small_toxicgreen.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureRangedAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('rock_beetle_cave', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/tatooine/rockmite.py b/scripts/mobiles/tatooine/rockmite.py new file mode 100644 index 00000000..6a2422c9 --- /dev/null +++ b/scripts/mobiles/tatooine/rockmite.py @@ -0,0 +1,44 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('rockmite') + mobileTemplate.setLevel(8) + mobileTemplate.setMinLevel(7) + mobileTemplate.setMaxLevel(9) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setMeatType("Insect Meat") + mobileTemplate.setMeatAmount(3) + mobileTemplate.setHideType("Scaley Hide") + mobileTemplate.setHideAmount(4) + mobileTemplate.setSocialGroup("rockmite") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(False) + + + templates = Vector() + templates.add('object/mobile/shared_rock_mite.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('rockmite', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/tatooine/rodian_clan_captain.py b/scripts/mobiles/tatooine/rodian_clan_captain.py new file mode 100644 index 00000000..2a85fa07 --- /dev/null +++ b/scripts/mobiles/tatooine/rodian_clan_captain.py @@ -0,0 +1,37 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('mission_rodian_clan_captain') + mobileTemplate.setLevel(15) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(12) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(1) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(True) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("rodian") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(False) + + templates = Vector() + templates.add('object/mobile/shared_dressed_tatooine_rodian_clan_captain.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/carbine/shared_carbine_cdef.iff', 1, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedShot') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('rodian_clan_captain', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/tatooine/rodian_clan_medic.py b/scripts/mobiles/tatooine/rodian_clan_medic.py new file mode 100644 index 00000000..5bedda7a --- /dev/null +++ b/scripts/mobiles/tatooine/rodian_clan_medic.py @@ -0,0 +1,37 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('mission_rodian_clan_medic') + mobileTemplate.setLevel(14) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(12) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(1) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("rodian") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(False) + + templates = Vector() + templates.add('object/mobile/shared_dressed_tatooine_rodian_clan_medic.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/carbine/shared_carbine_cdef.iff', 1, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedShot') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('rodian_clan_medic', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/tatooine/rodian_clan_warchief.py b/scripts/mobiles/tatooine/rodian_clan_warchief.py new file mode 100644 index 00000000..5a67de39 --- /dev/null +++ b/scripts/mobiles/tatooine/rodian_clan_warchief.py @@ -0,0 +1,37 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('mission_rodian_clan_warchief') + mobileTemplate.setLevel(15) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(12) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(1) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(True) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("rodian") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(False) + + templates = Vector() + templates.add('object/mobile/shared_dressed_tatooine_rodian_clan_warchief.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/carbine/shared_carbine_cdef.iff', 1, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedShot') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('rodian_clan_warchief', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/tatooine/rodian_gladiator.py b/scripts/mobiles/tatooine/rodian_gladiator.py new file mode 100644 index 00000000..fbe56f69 --- /dev/null +++ b/scripts/mobiles/tatooine/rodian_gladiator.py @@ -0,0 +1,37 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('mission_rodian_gladiator') + mobileTemplate.setLevel(14) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(12) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(1) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("rodian") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(False) + + templates = Vector() + templates.add('object/mobile/shared_dressed_tatooine_rodian_gladiator.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/carbine/shared_carbine_cdef.iff', 1, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedShot') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('rodian_gladiator', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/tatooine/ronto.py b/scripts/mobiles/tatooine/ronto.py new file mode 100644 index 00000000..d2d2af5b --- /dev/null +++ b/scripts/mobiles/tatooine/ronto.py @@ -0,0 +1,45 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('ronto') + mobileTemplate.setLevel(7) + mobileTemplate.setMinLevel(16) + mobileTemplate.setMaxLevel(18) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setMeatType("Herbivore Meat") + mobileTemplate.setMeatAmount(450) + mobileTemplate.setHideType("Leathery Hide") + mobileTemplate.setBoneAmount(300) + mobileTemplate.setBoneType("Animal Bone") + mobileTemplate.setHideAmount(180) + mobileTemplate.setSocialGroup("ronto") + mobileTemplate.setAssistRange(10) + mobileTemplate.setStalker(False) + + templates = Vector() + templates.add('object/mobile/shared_ronto.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('ronto', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/tatooine/runted_rill.py b/scripts/mobiles/tatooine/runted_rill.py new file mode 100644 index 00000000..a30260ab --- /dev/null +++ b/scripts/mobiles/tatooine/runted_rill.py @@ -0,0 +1,45 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('runted_rill') + mobileTemplate.setLevel(1) + mobileTemplate.setMinLevel(1) + mobileTemplate.setMaxLevel(3) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(True) + mobileTemplate.setScale(1) + mobileTemplate.setMeatType("Carnivore Meat") + mobileTemplate.setMeatAmount(3) + mobileTemplate.setHideType("Bristly Hide") + mobileTemplate.setBoneAmount(3) + mobileTemplate.setBoneType("Animal Bone") + mobileTemplate.setHideAmount(3) + mobileTemplate.setSocialGroup("rill") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(False) + + templates = Vector() + templates.add('object/mobile/shared_rill.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('runted_rill', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/tatooine/sand_beetle.py b/scripts/mobiles/tatooine/sand_beetle.py new file mode 100644 index 00000000..ed46a5ec --- /dev/null +++ b/scripts/mobiles/tatooine/sand_beetle.py @@ -0,0 +1,43 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('sand_beetle') + mobileTemplate.setLevel(22) + mobileTemplate.setMinLevel(22) + mobileTemplate.setMaxLevel(24) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(True) + mobileTemplate.setScale(1) + mobileTemplate.setMeatType("Insect Meat") + mobileTemplate.setMeatAmount(6) + mobileTemplate.setHideType("Scaley Hide") + mobileTemplate.setHideAmount(8) + mobileTemplate.setSocialGroup("giant sand beetle") + mobileTemplate.setAssistRange(10) + mobileTemplate.setStalker(False) + + templates = Vector() + templates.add('object/mobile/shared_giant_sand_beetle.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('sand_beetle', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/tatooine/sandcrawler_crewman.py b/scripts/mobiles/tatooine/sandcrawler_crewman.py new file mode 100644 index 00000000..f333f314 --- /dev/null +++ b/scripts/mobiles/tatooine/sandcrawler_crewman.py @@ -0,0 +1,37 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('legacy_jawa_grunt') + mobileTemplate.setLevel(16) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(12) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(2) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("jawa") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(False) + + templates = Vector() + templates.add('object/mobile/shared_jawa.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/pistol/shared_pistol_cdef.iff', 2, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedShotpistol') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('sandcrawler_crewman', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/tatooine/sandreaver.py b/scripts/mobiles/tatooine/sandreaver.py new file mode 100644 index 00000000..758f0fa4 --- /dev/null +++ b/scripts/mobiles/tatooine/sandreaver.py @@ -0,0 +1,45 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('dewback_sandreaver') + mobileTemplate.setLevel(18) + mobileTemplate.setMinLevel(17) + mobileTemplate.setMaxLevel(19) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setMeatType("Reptilian Meat") + mobileTemplate.setMeatAmount(340) + mobileTemplate.setHideType("Leathery Hide") + mobileTemplate.setBoneAmount(260) + mobileTemplate.setBoneType("Animal Bones") + mobileTemplate.setHideAmount(185) + mobileTemplate.setSocialGroup("dewback") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(False) + + templates = Vector() + templates.add('object/mobile/shared_dewback.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('sandreaver', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/tatooine/savage_zucca_boar.py b/scripts/mobiles/tatooine/savage_zucca_boar.py new file mode 100644 index 00000000..3f7981fe --- /dev/null +++ b/scripts/mobiles/tatooine/savage_zucca_boar.py @@ -0,0 +1,45 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('elite_zucca_boar') + mobileTemplate.setLevel(8) + mobileTemplate.setMinLevel(8) + mobileTemplate.setMaxLevel(9) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setMeatType("Herbivore Meat") + mobileTemplate.setMeatAmount(65) + mobileTemplate.setHideType("Leathery Hide") + mobileTemplate.setBoneAmount(40) + mobileTemplate.setBoneType("Animal Bone") + mobileTemplate.setHideAmount(25) + mobileTemplate.setSocialGroup("zucca boar") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(False) + + templates = Vector() + templates.add('object/mobile/shared_zucca_boar.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('savage_zucca_boar', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/tatooine/scavenger.py b/scripts/mobiles/tatooine/scavenger.py new file mode 100644 index 00000000..de275efe --- /dev/null +++ b/scripts/mobiles/tatooine/scavenger.py @@ -0,0 +1,39 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('mission_scavenger') + mobileTemplate.setLevel(5) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(12) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(2) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("thug") + mobileTemplate.setAssistRange(4) + mobileTemplate.setStalker(False) + mobileTemplate.setOptionsBitmask(192) + + + templates = Vector() + templates.add('object/mobile/shared_dressed_tatooine_scavenger.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/pistol/shared_pistol_cdef.iff', 2, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedShotpistol') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('scavenger', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/tatooine/scyk.py b/scripts/mobiles/tatooine/scyk.py new file mode 100644 index 00000000..c93319b5 --- /dev/null +++ b/scripts/mobiles/tatooine/scyk.py @@ -0,0 +1,46 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('scyk') + mobileTemplate.setLevel(11) + mobileTemplate.setMinLevel(11) + mobileTemplate.setMaxLevel(13) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setMeatType("Carnivore Meat") + mobileTemplate.setMeatAmount(40) + mobileTemplate.setHideType("Bristly Hide") + mobileTemplate.setBoneAmount(25) + mobileTemplate.setBoneType("Animal Bone") + mobileTemplate.setHideAmount(18) + mobileTemplate.setSocialGroup("scyk") + mobileTemplate.setAssistRange(10) + mobileTemplate.setStalker(True) + mobileTemplate.setOptionsBitmask(192) + + templates = Vector() + templates.add('object/mobile/shared_scyk.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('scyk', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/tatooine/sennex_guard.py b/scripts/mobiles/tatooine/sennex_guard.py new file mode 100644 index 00000000..f0cdf1d8 --- /dev/null +++ b/scripts/mobiles/tatooine/sennex_guard.py @@ -0,0 +1,49 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('sennex_guard') + mobileTemplate.setLevel(20) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(12) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(1) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(True) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("sennex") + mobileTemplate.setAssistRange(5) + mobileTemplate.setStalker(False) + + templates = Vector() + templates.add('object/mobile/shared_dressed_sennex_pirate_01.iff') + templates.add('object/mobile/shared_dressed_sennex_pirate_02.iff') + templates.add('object/mobile/shared_dressed_sennex_pirate_03.iff') + templates.add('object/mobile/shared_dressed_sennex_pirate_04.iff') + templates.add('object/mobile/shared_dressed_sennex_pirate_05.iff') + templates.add('object/mobile/shared_dressed_sennex_pirate_06.iff') + templates.add('object/mobile/shared_dressed_sennex_pirate_07.iff') + templates.add('object/mobile/shared_dressed_sennex_pirate_08.iff') + templates.add('object/mobile/shared_dressed_sennex_pirate_09.iff') + templates.add('object/mobile/shared_dressed_sennex_pirate_10.iff') + templates.add('object/mobile/shared_dressed_sennex_pirate_11.iff') + templates.add('object/mobile/shared_dressed_sennex_pirate_12.iff') + + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/carbine/shared_carbine_cdef.iff', 1, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedShot') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('sennex_guard', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/tatooine/sennex_hunter.py b/scripts/mobiles/tatooine/sennex_hunter.py new file mode 100644 index 00000000..4f9afcc2 --- /dev/null +++ b/scripts/mobiles/tatooine/sennex_hunter.py @@ -0,0 +1,49 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('sennex_hunter') + mobileTemplate.setLevel(22) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(12) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(1) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(True) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("sennex") + mobileTemplate.setAssistRange(5) + mobileTemplate.setStalker(False) + + templates = Vector() + templates.add('object/mobile/shared_dressed_sennex_pirate_01.iff') + templates.add('object/mobile/shared_dressed_sennex_pirate_02.iff') + templates.add('object/mobile/shared_dressed_sennex_pirate_03.iff') + templates.add('object/mobile/shared_dressed_sennex_pirate_04.iff') + templates.add('object/mobile/shared_dressed_sennex_pirate_05.iff') + templates.add('object/mobile/shared_dressed_sennex_pirate_06.iff') + templates.add('object/mobile/shared_dressed_sennex_pirate_07.iff') + templates.add('object/mobile/shared_dressed_sennex_pirate_08.iff') + templates.add('object/mobile/shared_dressed_sennex_pirate_09.iff') + templates.add('object/mobile/shared_dressed_sennex_pirate_10.iff') + templates.add('object/mobile/shared_dressed_sennex_pirate_11.iff') + templates.add('object/mobile/shared_dressed_sennex_pirate_12.iff') + + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/rifle/shared_rifle_cdef.iff', 0, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedShotrifle') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('sennex_hunter', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/tatooine/sennex_lookout.py b/scripts/mobiles/tatooine/sennex_lookout.py new file mode 100644 index 00000000..b04e0b35 --- /dev/null +++ b/scripts/mobiles/tatooine/sennex_lookout.py @@ -0,0 +1,49 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('sennex_lookout') + mobileTemplate.setLevel(18) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(12) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(1) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(True) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("sennex") + mobileTemplate.setAssistRange(5) + mobileTemplate.setStalker(False) + + templates = Vector() + templates.add('object/mobile/shared_dressed_sennex_pirate_01.iff') + templates.add('object/mobile/shared_dressed_sennex_pirate_02.iff') + templates.add('object/mobile/shared_dressed_sennex_pirate_03.iff') + templates.add('object/mobile/shared_dressed_sennex_pirate_04.iff') + templates.add('object/mobile/shared_dressed_sennex_pirate_05.iff') + templates.add('object/mobile/shared_dressed_sennex_pirate_06.iff') + templates.add('object/mobile/shared_dressed_sennex_pirate_07.iff') + templates.add('object/mobile/shared_dressed_sennex_pirate_08.iff') + templates.add('object/mobile/shared_dressed_sennex_pirate_09.iff') + templates.add('object/mobile/shared_dressed_sennex_pirate_10.iff') + templates.add('object/mobile/shared_dressed_sennex_pirate_11.iff') + templates.add('object/mobile/shared_dressed_sennex_pirate_12.iff') + + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/carbine/shared_carbine_cdef.iff', 1, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedShot') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('sennex_lookout', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/tatooine/sennex_slavemaster.py b/scripts/mobiles/tatooine/sennex_slavemaster.py new file mode 100644 index 00000000..a89d44f6 --- /dev/null +++ b/scripts/mobiles/tatooine/sennex_slavemaster.py @@ -0,0 +1,49 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('sennex_slaver') + mobileTemplate.setLevel(24) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(12) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(1) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(True) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("sennex") + mobileTemplate.setAssistRange(5) + mobileTemplate.setStalker(False) + + templates = Vector() + templates.add('object/mobile/shared_dressed_sennex_pirate_01.iff') + templates.add('object/mobile/shared_dressed_sennex_pirate_02.iff') + templates.add('object/mobile/shared_dressed_sennex_pirate_03.iff') + templates.add('object/mobile/shared_dressed_sennex_pirate_04.iff') + templates.add('object/mobile/shared_dressed_sennex_pirate_05.iff') + templates.add('object/mobile/shared_dressed_sennex_pirate_06.iff') + templates.add('object/mobile/shared_dressed_sennex_pirate_07.iff') + templates.add('object/mobile/shared_dressed_sennex_pirate_08.iff') + templates.add('object/mobile/shared_dressed_sennex_pirate_09.iff') + templates.add('object/mobile/shared_dressed_sennex_pirate_10.iff') + templates.add('object/mobile/shared_dressed_sennex_pirate_11.iff') + templates.add('object/mobile/shared_dressed_sennex_pirate_12.iff') + + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/carbine/shared_carbine_cdef.iff', 1, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedShot') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('sennex_slaver', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/tatooine/sennex_slaver.py b/scripts/mobiles/tatooine/sennex_slaver.py new file mode 100644 index 00000000..fb8fe181 --- /dev/null +++ b/scripts/mobiles/tatooine/sennex_slaver.py @@ -0,0 +1,49 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('sennex_slavemaster') + mobileTemplate.setLevel(22) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(12) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(1) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(True) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("sennex") + mobileTemplate.setAssistRange(5) + mobileTemplate.setStalker(False) + + templates = Vector() + templates.add('object/mobile/shared_dressed_sennex_pirate_01.iff') + templates.add('object/mobile/shared_dressed_sennex_pirate_02.iff') + templates.add('object/mobile/shared_dressed_sennex_pirate_03.iff') + templates.add('object/mobile/shared_dressed_sennex_pirate_04.iff') + templates.add('object/mobile/shared_dressed_sennex_pirate_05.iff') + templates.add('object/mobile/shared_dressed_sennex_pirate_06.iff') + templates.add('object/mobile/shared_dressed_sennex_pirate_07.iff') + templates.add('object/mobile/shared_dressed_sennex_pirate_08.iff') + templates.add('object/mobile/shared_dressed_sennex_pirate_09.iff') + templates.add('object/mobile/shared_dressed_sennex_pirate_10.iff') + templates.add('object/mobile/shared_dressed_sennex_pirate_11.iff') + templates.add('object/mobile/shared_dressed_sennex_pirate_12.iff') + + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/carbine/shared_carbine_cdef.iff', 1, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedShot') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('sennex_slavemaster', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/tatooine/sennex_warder.py b/scripts/mobiles/tatooine/sennex_warder.py new file mode 100644 index 00000000..3bc906dc --- /dev/null +++ b/scripts/mobiles/tatooine/sennex_warder.py @@ -0,0 +1,49 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('sennex_warder') + mobileTemplate.setLevel(21) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(12) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(1) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(True) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("sennex") + mobileTemplate.setAssistRange(5) + mobileTemplate.setStalker(False) + + templates = Vector() + templates.add('object/mobile/shared_dressed_sennex_pirate_01.iff') + templates.add('object/mobile/shared_dressed_sennex_pirate_02.iff') + templates.add('object/mobile/shared_dressed_sennex_pirate_03.iff') + templates.add('object/mobile/shared_dressed_sennex_pirate_04.iff') + templates.add('object/mobile/shared_dressed_sennex_pirate_05.iff') + templates.add('object/mobile/shared_dressed_sennex_pirate_06.iff') + templates.add('object/mobile/shared_dressed_sennex_pirate_07.iff') + templates.add('object/mobile/shared_dressed_sennex_pirate_08.iff') + templates.add('object/mobile/shared_dressed_sennex_pirate_09.iff') + templates.add('object/mobile/shared_dressed_sennex_pirate_10.iff') + templates.add('object/mobile/shared_dressed_sennex_pirate_11.iff') + templates.add('object/mobile/shared_dressed_sennex_pirate_12.iff') + + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/carbine/shared_carbine_cdef.iff', 1, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedShot') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('sennex_warder', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/tatooine/sevorrt.py b/scripts/mobiles/tatooine/sevorrt.py new file mode 100644 index 00000000..3ea14405 --- /dev/null +++ b/scripts/mobiles/tatooine/sevorrt.py @@ -0,0 +1,45 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('sevorrt') + mobileTemplate.setLevel(5) + mobileTemplate.setMinLevel(4) + mobileTemplate.setMaxLevel(6) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setMeatType("Reptilian Meat") + mobileTemplate.setMeatAmount(10) + mobileTemplate.setHideType("Leathery Hide") + mobileTemplate.setBoneAmount(10) + mobileTemplate.setBoneType("Animal Bone") + mobileTemplate.setHideAmount(4) + mobileTemplate.setSocialGroup("sevorrt") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(False) + + templates = Vector() + templates.add('object/mobile/shared_sevorrt.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('sevorrt', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/tatooine/sewer_worrt.py b/scripts/mobiles/tatooine/sewer_worrt.py new file mode 100644 index 00000000..377c28bf --- /dev/null +++ b/scripts/mobiles/tatooine/sewer_worrt.py @@ -0,0 +1,45 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('sewer_worrt') + mobileTemplate.setLevel(5) + mobileTemplate.setMinLevel(4) + mobileTemplate.setMaxLevel(6) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setMeatType("Reptilian Meat") + mobileTemplate.setMeatAmount(3) + mobileTemplate.setHideType("Leathery Hide") + mobileTemplate.setBoneAmount(3) + mobileTemplate.setBoneType("Animal Bone") + mobileTemplate.setHideAmount(1) + mobileTemplate.setSocialGroup("minor worrt") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(False) + + templates = Vector() + templates.add('object/mobile/shared_worrt.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('sewer_worrt', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/tatooine/shinn_guard.py b/scripts/mobiles/tatooine/shinn_guard.py new file mode 100644 index 00000000..c9e1a328 --- /dev/null +++ b/scripts/mobiles/tatooine/shinn_guard.py @@ -0,0 +1,38 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('tatooine_shinn_guard') + mobileTemplate.setLevel(8) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(12) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(1) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("shinn mugger") + mobileTemplate.setAssistRange(5) + mobileTemplate.setStalker(False) + mobileTemplate.setOptionsBitmask(192) + + templates = Vector() + templates.add('object/mobile/shared_dressed_mugger.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/carbine/shared_carbine_cdef.iff', 1, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedShot') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('shinn_guard', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/tatooine/shinn_mugger.py b/scripts/mobiles/tatooine/shinn_mugger.py new file mode 100644 index 00000000..4f67d792 --- /dev/null +++ b/scripts/mobiles/tatooine/shinn_mugger.py @@ -0,0 +1,38 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('tatooine_shinn_mugger') + mobileTemplate.setLevel(7) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(12) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(1) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("shinn mugger") + mobileTemplate.setAssistRange(5) + mobileTemplate.setStalker(False) + mobileTemplate.setOptionsBitmask(192) + + templates = Vector() + templates.add('object/mobile/shared_dressed_mugger.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/carbine/shared_carbine_cdef.iff', 1, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedShot') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('shinn_mugger', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/tatooine/sickly_womprat.py b/scripts/mobiles/tatooine/sickly_womprat.py new file mode 100644 index 00000000..2a4fabf5 --- /dev/null +++ b/scripts/mobiles/tatooine/sickly_womprat.py @@ -0,0 +1,47 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('sickly_womprat') + mobileTemplate.setLevel(4) + mobileTemplate.setMinLevel(4) + mobileTemplate.setMaxLevel(13) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setMeatType("Wild Meat") + mobileTemplate.setMeatAmount(2) + mobileTemplate.setHideType("Leathery Hide") + mobileTemplate.setBoneAmount(2) + mobileTemplate.setBoneType("Animal Bone") + mobileTemplate.setHideAmount(1) + mobileTemplate.setSocialGroup("womprat") + mobileTemplate.setAssistRange(6) + mobileTemplate.setStalker(False) + + + + templates = Vector() + templates.add('object/mobile/shared_womp_rat.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('sickly_womprat', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/tatooine/sirad_far.py b/scripts/mobiles/tatooine/sirad_far.py new file mode 100644 index 00000000..381c068f --- /dev/null +++ b/scripts/mobiles/tatooine/sirad_far.py @@ -0,0 +1,37 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('sirad_far') + mobileTemplate.setLevel(20) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("jabba") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(False) + + templates = Vector() + templates.add('object/mobile/shared_sirad_far.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('meleehit') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('sirad_far', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/tatooine/slum_rat.py b/scripts/mobiles/tatooine/slum_rat.py new file mode 100644 index 00000000..3aa000c5 --- /dev/null +++ b/scripts/mobiles/tatooine/slum_rat.py @@ -0,0 +1,45 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('womprat_city') + mobileTemplate.setLevel(5) + mobileTemplate.setMinLevel(4) + mobileTemplate.setMaxLevel(6) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setMeatType("Wild Meat") + mobileTemplate.setMeatAmount(7) + mobileTemplate.setHideType("Leathery Hide") + mobileTemplate.setBoneAmount(7) + mobileTemplate.setBoneType("Animal Bone") + mobileTemplate.setHideAmount(3) + mobileTemplate.setSocialGroup("womprat") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(False) + + templates = Vector() + templates.add('object/mobile/shared_womp_rat.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('slum_rat', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/tatooine/snarlfang.py b/scripts/mobiles/tatooine/snarlfang.py new file mode 100644 index 00000000..1b36ccc7 --- /dev/null +++ b/scripts/mobiles/tatooine/snarlfang.py @@ -0,0 +1,45 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('elite_bocatt') + mobileTemplate.setLevel(17) + mobileTemplate.setMinLevel(17) + mobileTemplate.setMaxLevel(18) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setMeatType("Reptilian Meat") + mobileTemplate.setMeatAmount(100) + mobileTemplate.setHideType("Leathery Hide") + mobileTemplate.setBoneAmount(60) + mobileTemplate.setBoneType("Animal Bones") + mobileTemplate.setHideAmount(35) + mobileTemplate.setSocialGroup("bocatt") + mobileTemplate.setAssistRange(8) + mobileTemplate.setStalker(True) + + templates = Vector() + templates.add('object/mobile/shared_bocatt.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/creature/shared_creature_spit_small_toxicgreen.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureRangedAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('snarlfang', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/tatooine/squill.py b/scripts/mobiles/tatooine/squill.py new file mode 100644 index 00000000..a94b2218 --- /dev/null +++ b/scripts/mobiles/tatooine/squill.py @@ -0,0 +1,45 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('squill') + mobileTemplate.setLevel(12) + mobileTemplate.setMinLevel(11) + mobileTemplate.setMaxLevel(13) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setMeatType("Carnivore Meat") + mobileTemplate.setMeatAmount(6) + mobileTemplate.setHideType("Leathery Hide") + mobileTemplate.setBoneAmount(6) + mobileTemplate.setBoneType("Animal Bone") + mobileTemplate.setHideAmount(5) + mobileTemplate.setSocialGroup("squill") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(True) + + templates = Vector() + templates.add('object/mobile/shared_squill.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('squill', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/tatooine/stormtrooper_dewback.py b/scripts/mobiles/tatooine/stormtrooper_dewback.py new file mode 100644 index 00000000..4f001b45 --- /dev/null +++ b/scripts/mobiles/tatooine/stormtrooper_dewback.py @@ -0,0 +1,45 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('stormtrooper_dewback') + mobileTemplate.setLevel(14) + mobileTemplate.setMinLevel(13) + mobileTemplate.setMaxLevel(15) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setMeatType("Reptilian Meat") + mobileTemplate.setMeatAmount(360) + mobileTemplate.setHideType("Leathery Hide") + mobileTemplate.setBoneAmount(275) + mobileTemplate.setBoneType("Animal Bones") + mobileTemplate.setHideAmount(250) + mobileTemplate.setSocialGroup("imperial") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(False) + + templates = Vector() + templates.add('object/mobile/shared_dewback_armored.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('stormtrooper_dewback', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/tatooine/sunstained_dunelizard.py b/scripts/mobiles/tatooine/sunstained_dunelizard.py new file mode 100644 index 00000000..035d5967 --- /dev/null +++ b/scripts/mobiles/tatooine/sunstained_dunelizard.py @@ -0,0 +1,45 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('dune_lizard_sunstained') + mobileTemplate.setLevel(19) + mobileTemplate.setMinLevel(18) + mobileTemplate.setMaxLevel(20) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(True) + mobileTemplate.setScale(1) + mobileTemplate.setMeatType("Carnivore Meat") + mobileTemplate.setMeatAmount(85) + mobileTemplate.setHideType("Bristly Hide") + mobileTemplate.setBoneAmount(50) + mobileTemplate.setBoneType("Animal Bone") + mobileTemplate.setHideAmount(35) + mobileTemplate.setSocialGroup("dune lizard") + mobileTemplate.setAssistRange(10) + mobileTemplate.setStalker(True) + + templates = Vector() + templates.add('object/mobile/shared_dune_lizard.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('sunstained_dune_lizard', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/tatooine/swarming_lesser_dewback.py b/scripts/mobiles/tatooine/swarming_lesser_dewback.py new file mode 100644 index 00000000..aa7dcff5 --- /dev/null +++ b/scripts/mobiles/tatooine/swarming_lesser_dewback.py @@ -0,0 +1,46 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('swarming_lesser_dewback') + mobileTemplate.setLevel(13) + mobileTemplate.setMinLevel(12) + mobileTemplate.setMaxLevel(14) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setMeatType("Reptilian Meat") + mobileTemplate.setMeatAmount(175) + mobileTemplate.setHideType("Leathery Hide") + mobileTemplate.setBoneAmount(125) + mobileTemplate.setBoneType("Animal Bones") + mobileTemplate.setHideAmount(100) + mobileTemplate.setSocialGroup("dewback") + mobileTemplate.setAssistRange(10) + mobileTemplate.setStalker(True) + mobileTemplate.setOptionsBitmask(192) + + templates = Vector() + templates.add('object/mobile/shared_swarming_lesser_dewback.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('swarming_lesser_dewback', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/tatooine/swoop_gang_enforcer.py b/scripts/mobiles/tatooine/swoop_gang_enforcer.py new file mode 100644 index 00000000..30156fe2 --- /dev/null +++ b/scripts/mobiles/tatooine/swoop_gang_enforcer.py @@ -0,0 +1,42 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('tatooine_opening_smuggler_12') + mobileTemplate.setLevel(10) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(12) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(0) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("niko thug") + mobileTemplate.setAssistRange(4) + mobileTemplate.setStalker(False) + mobileTemplate.setOptionsBitmask(192) + + + templates = Vector() + templates.add('object/mobile/shared_dressed_criminal_swooper_human_female_01.iff') + templates.add('object/mobile/shared_dressed_criminal_swooper_human_male_01.iff') + templates.add('object/mobile/shared_dressed_criminal_swooper_zabrak_female_01.iff') + templates.add('object/mobile/shared_dressed_criminal_swooper_zabrak_male_01.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/rifle/shared_rifle_cdef.iff', 0, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedShotrifle') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('swoop_gang_enforcer', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/tatooine/swoop_gang_punk.py b/scripts/mobiles/tatooine/swoop_gang_punk.py new file mode 100644 index 00000000..6adb06fd --- /dev/null +++ b/scripts/mobiles/tatooine/swoop_gang_punk.py @@ -0,0 +1,41 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('tatooine_opening_smuggler_08') + mobileTemplate.setLevel(7) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(12) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(0) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("niko thug") + mobileTemplate.setAssistRange(4) + mobileTemplate.setStalker(False) + mobileTemplate.setOptionsBitmask(192) + + templates = Vector() + templates.add('object/mobile/shared_dressed_criminal_swooper_human_female_01.iff') + templates.add('object/mobile/shared_dressed_criminal_swooper_human_male_01.iff') + templates.add('object/mobile/shared_dressed_criminal_swooper_zabrak_female_01.iff') + templates.add('object/mobile/shared_dressed_criminal_swooper_zabrak_male_01.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/pistol/shared_pistol_cdef.iff', 2, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedShotpistol') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('swoop_gang_punk', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/tatooine/swoop_gang_rogue.py b/scripts/mobiles/tatooine/swoop_gang_rogue.py new file mode 100644 index 00000000..9d947e14 --- /dev/null +++ b/scripts/mobiles/tatooine/swoop_gang_rogue.py @@ -0,0 +1,41 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('tatooine_opening_smuggler_10') + mobileTemplate.setLevel(9) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(12) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(1) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("niko thug") + mobileTemplate.setAssistRange(4) + mobileTemplate.setStalker(False) + mobileTemplate.setOptionsBitmask(192) + + templates = Vector() + templates.add('object/mobile/shared_dressed_criminal_swooper_human_female_01.iff') + templates.add('object/mobile/shared_dressed_criminal_swooper_human_male_01.iff') + templates.add('object/mobile/shared_dressed_criminal_swooper_zabrak_female_01.iff') + templates.add('object/mobile/shared_dressed_criminal_swooper_zabrak_male_01.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/carbine/shared_carbine_cdef.iff', 1, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedShot') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('swoop_gang_rogue', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/tatooine/swoop_gang_thug.py b/scripts/mobiles/tatooine/swoop_gang_thug.py new file mode 100644 index 00000000..cc1a1f5f --- /dev/null +++ b/scripts/mobiles/tatooine/swoop_gang_thug.py @@ -0,0 +1,41 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('tatooine_opening_smuggler_09') + mobileTemplate.setLevel(8) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(12) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(0) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("niko thug") + mobileTemplate.setAssistRange(4) + mobileTemplate.setStalker(False) + mobileTemplate.setOptionsBitmask(192) + + templates = Vector() + templates.add('object/mobile/shared_dressed_criminal_swooper_human_female_01.iff') + templates.add('object/mobile/shared_dressed_criminal_swooper_human_male_01.iff') + templates.add('object/mobile/shared_dressed_criminal_swooper_zabrak_female_01.iff') + templates.add('object/mobile/shared_dressed_criminal_swooper_zabrak_male_01.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/pistol/shared_pistol_cdef.iff', 2, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedShotpistol') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('swoop_gang_thug', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/tatooine/swooper.py b/scripts/mobiles/tatooine/swooper.py new file mode 100644 index 00000000..22d2b741 --- /dev/null +++ b/scripts/mobiles/tatooine/swooper.py @@ -0,0 +1,37 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('mission_swooper') + mobileTemplate.setLevel(1) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(12) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(0) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("niko thug") + mobileTemplate.setAssistRange(4) + mobileTemplate.setStalker(False) + + templates = Vector() + templates.add('object/mobile/shared_dressed_criminal_swooper_human_female_01.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/carbine/shared_carbine_cdef.iff', 1, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedShot') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('swooper', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/tatooine/tame_rill.py b/scripts/mobiles/tatooine/tame_rill.py new file mode 100644 index 00000000..283b7973 --- /dev/null +++ b/scripts/mobiles/tatooine/tame_rill.py @@ -0,0 +1,45 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('tame_rill') + mobileTemplate.setLevel(1) + mobileTemplate.setMinLevel(1) + mobileTemplate.setMaxLevel(3) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setMeatType("Carnivore Meat") + mobileTemplate.setMeatAmount(3) + mobileTemplate.setHideType("Bristly Hide") + mobileTemplate.setBoneAmount(3) + mobileTemplate.setBoneType("Animal Bone") + mobileTemplate.setHideAmount(1) + mobileTemplate.setSocialGroup("rill") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(False) + + templates = Vector() + templates.add('object/mobile/shared_rill.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('tame_rill', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/tatooine/tame_womprat.py b/scripts/mobiles/tatooine/tame_womprat.py new file mode 100644 index 00000000..e0882686 --- /dev/null +++ b/scripts/mobiles/tatooine/tame_womprat.py @@ -0,0 +1,45 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('tame_womprat') + mobileTemplate.setLevel(2) + mobileTemplate.setMinLevel(1) + mobileTemplate.setMaxLevel(4) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setMeatType("Wild Meat") + mobileTemplate.setMeatAmount(2) + mobileTemplate.setHideType("Leathery Hide") + mobileTemplate.setBoneAmount(2) + mobileTemplate.setBoneType("Animal Bone") + mobileTemplate.setHideAmount(1) + mobileTemplate.setSocialGroup("womprat") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(False) + + templates = Vector() + templates.add('object/mobile/shared_womp_rat.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('tame_womprat', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/tatooine/tame_worrt.py b/scripts/mobiles/tatooine/tame_worrt.py new file mode 100644 index 00000000..999bad4e --- /dev/null +++ b/scripts/mobiles/tatooine/tame_worrt.py @@ -0,0 +1,45 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('tame_worrt') + mobileTemplate.setLevel(5) + mobileTemplate.setMinLevel(4) + mobileTemplate.setMaxLevel(6) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setMeatType("Reptilian Meat") + mobileTemplate.setMeatAmount(5) + mobileTemplate.setHideType("Leathery Hide") + mobileTemplate.setBoneAmount(5) + mobileTemplate.setBoneType("Animal Bone") + mobileTemplate.setHideAmount(2) + mobileTemplate.setSocialGroup("worrt") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(False) + + templates = Vector() + templates.add('object/mobile/shared_worrt_hue.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('tame_worrt', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/tatooine/tatooine_mynock.py b/scripts/mobiles/tatooine/tatooine_mynock.py new file mode 100644 index 00000000..51935e8c --- /dev/null +++ b/scripts/mobiles/tatooine/tatooine_mynock.py @@ -0,0 +1,45 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('tatooine_mynock') + mobileTemplate.setLevel(2) + mobileTemplate.setMinLevel(1) + mobileTemplate.setMaxLevel(3) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setMeatType("Herbivore Meat") + mobileTemplate.setMeatAmount(20) + mobileTemplate.setHideType("Leathery Hide") + mobileTemplate.setBoneAmount(70) + mobileTemplate.setBoneType("Animal Bone") + mobileTemplate.setHideAmount(20) + mobileTemplate.setSocialGroup("tatooine mynock") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(False) + + templates = Vector() + templates.add('object/mobile/shared_mynock.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('tatooine_mynock', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/tatooine/tempest_rill.py b/scripts/mobiles/tatooine/tempest_rill.py new file mode 100644 index 00000000..b7b0ac66 --- /dev/null +++ b/scripts/mobiles/tatooine/tempest_rill.py @@ -0,0 +1,47 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('rill_tempest') + mobileTemplate.setLevel(8) + mobileTemplate.setMinLevel(8) + mobileTemplate.setMaxLevel(10) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setMeatType("Carnivore Meat") + mobileTemplate.setMeatAmount(35) + mobileTemplate.setHideType("Bristly Hide") + mobileTemplate.setBoneAmount(20) + mobileTemplate.setBoneType("Animal Bone") + mobileTemplate.setHideAmount(15) + mobileTemplate.setSocialGroup("rill") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(False) + + + + templates = Vector() + templates.add('object/mobile/shared_rill.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('tempest_rill', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/tatooine/thief.py b/scripts/mobiles/tatooine/thief.py new file mode 100644 index 00000000..0202fd23 --- /dev/null +++ b/scripts/mobiles/tatooine/thief.py @@ -0,0 +1,38 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('mission_thief') + mobileTemplate.setLevel(8) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(4) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("jabba") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(False) + + + templates = Vector() + templates.add('object/mobile/shared_dressed_tatooine_jabba_thief.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/sword/shared_sword_01.iff', 4, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('meleehit') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('thief', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/tatooine/tormented_bocatt.py b/scripts/mobiles/tatooine/tormented_bocatt.py new file mode 100644 index 00000000..549ff0c2 --- /dev/null +++ b/scripts/mobiles/tatooine/tormented_bocatt.py @@ -0,0 +1,45 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('bocatt_tormented') + mobileTemplate.setLevel(18) + mobileTemplate.setMinLevel(17) + mobileTemplate.setMaxLevel(19) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setMeatType("Reptilian Meat") + mobileTemplate.setMeatAmount(100) + mobileTemplate.setHideType("Leathery Hide") + mobileTemplate.setBoneAmount(60) + mobileTemplate.setBoneType("Animal Bones") + mobileTemplate.setHideAmount(35) + mobileTemplate.setSocialGroup("bocatt") + mobileTemplate.setAssistRange(10) + mobileTemplate.setStalker(True) + + templates = Vector() + templates.add('object/mobile/shared_bocatt.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/creature/shared_creature_spit_small_toxicgreen.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureRangedAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('tormented_bocatt', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/tatooine/trandoshan_slavemaster.py b/scripts/mobiles/tatooine/trandoshan_slavemaster.py new file mode 100644 index 00000000..21b4742a --- /dev/null +++ b/scripts/mobiles/tatooine/trandoshan_slavemaster.py @@ -0,0 +1,38 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('ep3_trandoshan_slavermaster') + mobileTemplate.setLevel(2) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(12) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(1) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("slaver") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(False) + + templates = Vector() + templates.add('object/mobile/shared_ep3_trando_slavemaster_01.iff') + templates.add('object/mobile/shared_ep3_trando_slavemaster_02.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/carbine/shared_carbine_cdef.iff', 1, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedShot') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('trandoshan_slavemaster', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/tatooine/trandoshan_slaver.py b/scripts/mobiles/tatooine/trandoshan_slaver.py new file mode 100644 index 00000000..e00e64e8 --- /dev/null +++ b/scripts/mobiles/tatooine/trandoshan_slaver.py @@ -0,0 +1,43 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('ep3_trandoshan_slaver') + mobileTemplate.setLevel(4) + mobileTemplate.setMinLevel(1) + mobileTemplate.setMaxLevel(4) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(12) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(1) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("slaver") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(False) + + templates = Vector() + templates.add('object/mobile/shared_ep3_trando_slaver_01.iff') + templates.add('object/mobile/shared_ep3_trando_slaver_02.iff') + templates.add('object/mobile/shared_ep3_trando_slaver_03.iff') + templates.add('object/mobile/shared_ep3_trando_slaver_04.iff') + templates.add('object/mobile/shared_ep3_trando_slaver_05.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/carbine/shared_carbine_cdef.iff', 1, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedShot') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('trandoshan_slaver', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/tatooine/tusken_avenger.py b/scripts/mobiles/tatooine/tusken_avenger.py new file mode 100644 index 00000000..58d82c85 --- /dev/null +++ b/scripts/mobiles/tatooine/tusken_avenger.py @@ -0,0 +1,38 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('tusken_avenger') + mobileTemplate.setLevel(30) + mobileTemplate.setDifficulty(1) + mobileTemplate.setAttackRange(12) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(0) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(True) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("tusken raider") + mobileTemplate.setAssistRange(6) + mobileTemplate.setStalker(True) + + + templates = Vector() + templates.add('object/mobile/shared_tusken_raider.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/rifle/shared_rifle_tusken_generic.iff', 0, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedShotrifle') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('tusken_avenger', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/tatooine/tusken_bantha.py b/scripts/mobiles/tatooine/tusken_bantha.py new file mode 100644 index 00000000..5db92815 --- /dev/null +++ b/scripts/mobiles/tatooine/tusken_bantha.py @@ -0,0 +1,45 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('feeder_tusken_bantha') + mobileTemplate.setLevel(30) + mobileTemplate.setMinLevel(29) + mobileTemplate.setMaxLevel(31) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setMeatType("Herbivore Meat") + mobileTemplate.setMeatAmount(475) + mobileTemplate.setHideType("Wooly Hide") + mobileTemplate.setHideAmount(350) + mobileTemplate.setBoneType("Animal Bones") + mobileTemplate.setBoneAmount(375) + mobileTemplate.setSocialGroup("tusken raider") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(False) + + templates = Vector() + templates.add('object/mobile/shared_bantha_hue.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('tusken_bantha', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/tatooine/tusken_berserker.py b/scripts/mobiles/tatooine/tusken_berserker.py new file mode 100644 index 00000000..70e12dc1 --- /dev/null +++ b/scripts/mobiles/tatooine/tusken_berserker.py @@ -0,0 +1,38 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('tusken_berserker') + mobileTemplate.setLevel(31) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(12) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(0) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(True) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("tusken raider") + mobileTemplate.setAssistRange(6) + mobileTemplate.setStalker(True) + + + templates = Vector() + templates.add('object/mobile/shared_tusken_raider.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/rifle/shared_rifle_tusken_generic.iff', 0, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedShotrifle') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('tusken_berserker', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/tatooine/tusken_blood_champion.py b/scripts/mobiles/tatooine/tusken_blood_champion.py new file mode 100644 index 00000000..704cf031 --- /dev/null +++ b/scripts/mobiles/tatooine/tusken_blood_champion.py @@ -0,0 +1,38 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('tusken_blood_champion') + mobileTemplate.setLevel(32) + mobileTemplate.setDifficulty(1) + mobileTemplate.setAttackRange(12) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(0) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(True) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("tusken raider") + mobileTemplate.setAssistRange(6) + mobileTemplate.setStalker(True) + + + templates = Vector() + templates.add('object/mobile/shared_tusken_raider.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/rifle/shared_rifle_tusken_generic.iff', 0, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedShotrifle') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('tusken_blood_champion', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/tatooine/tusken_brute.py b/scripts/mobiles/tatooine/tusken_brute.py new file mode 100644 index 00000000..a49c391b --- /dev/null +++ b/scripts/mobiles/tatooine/tusken_brute.py @@ -0,0 +1,38 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('tusken_brute') + mobileTemplate.setLevel(31) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(12) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(0) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(True) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("tusken raider") + mobileTemplate.setAssistRange(6) + mobileTemplate.setStalker(True) + + + templates = Vector() + templates.add('object/mobile/shared_tusken_raider.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/rifle/shared_rifle_tusken_generic.iff', 0, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedShotrifle') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('tusken_brute', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/tatooine/tusken_captain.py b/scripts/mobiles/tatooine/tusken_captain.py new file mode 100644 index 00000000..cc510644 --- /dev/null +++ b/scripts/mobiles/tatooine/tusken_captain.py @@ -0,0 +1,38 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('tusken_chief') + mobileTemplate.setLevel(34) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(12) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(0) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(True) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("tusken raider") + mobileTemplate.setAssistRange(6) + mobileTemplate.setStalker(True) + + + templates = Vector() + templates.add('object/mobile/shared_tusken_raider.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/rifle/shared_rifle_tusken_generic.iff', 0, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedShotrifle') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('tusken_chief', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/tatooine/tusken_carnage_champion.py b/scripts/mobiles/tatooine/tusken_carnage_champion.py new file mode 100644 index 00000000..9b5cb4de --- /dev/null +++ b/scripts/mobiles/tatooine/tusken_carnage_champion.py @@ -0,0 +1,38 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('tusken_fort_tusken_champion') + mobileTemplate.setLevel(34) + mobileTemplate.setDifficulty(1) + mobileTemplate.setAttackRange(12) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(0) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(True) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("tusken raider") + mobileTemplate.setAssistRange(6) + mobileTemplate.setStalker(True) + + + templates = Vector() + templates.add('object/mobile/shared_tusken_raider.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/rifle/shared_rifle_tusken_generic.iff', 0, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedShotrifle') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('tusken_carnage_champion', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/tatooine/tusken_chief.py b/scripts/mobiles/tatooine/tusken_chief.py new file mode 100644 index 00000000..1b733014 --- /dev/null +++ b/scripts/mobiles/tatooine/tusken_chief.py @@ -0,0 +1,38 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('tusken_captain') + mobileTemplate.setLevel(33) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(12) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(0) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(True) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("tusken raider") + mobileTemplate.setAssistRange(6) + mobileTemplate.setStalker(True) + + + templates = Vector() + templates.add('object/mobile/shared_tusken_raider.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/rifle/shared_rifle_tusken_generic.iff', 0, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedShotrifle') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('tusken_captain', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/tatooine/tusken_commoner.py b/scripts/mobiles/tatooine/tusken_commoner.py new file mode 100644 index 00000000..e15a498d --- /dev/null +++ b/scripts/mobiles/tatooine/tusken_commoner.py @@ -0,0 +1,38 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('tusken_commoner') + mobileTemplate.setLevel(30) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(12) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(0) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("tusken raider") + mobileTemplate.setAssistRange(6) + mobileTemplate.setStalker(False) + + + templates = Vector() + templates.add('object/mobile/shared_tusken_raider.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/rifle/shared_rifle_tusken_generic.iff', 0, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedShotrifle') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('tusken_commoner', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/tatooine/tusken_death_hunter.py b/scripts/mobiles/tatooine/tusken_death_hunter.py new file mode 100644 index 00000000..4ad7a23e --- /dev/null +++ b/scripts/mobiles/tatooine/tusken_death_hunter.py @@ -0,0 +1,38 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('tusken_death_hunter') + mobileTemplate.setLevel(32) + mobileTemplate.setDifficulty(1) + mobileTemplate.setAttackRange(12) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(0) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(True) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("tusken raider") + mobileTemplate.setAssistRange(6) + mobileTemplate.setStalker(True) + + + templates = Vector() + templates.add('object/mobile/shared_tusken_raider.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/rifle/shared_rifle_tusken_generic.iff', 0, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedShotrifle') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('tusken_death_hunter', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/tatooine/tusken_elite_guard.py b/scripts/mobiles/tatooine/tusken_elite_guard.py new file mode 100644 index 00000000..7767790a --- /dev/null +++ b/scripts/mobiles/tatooine/tusken_elite_guard.py @@ -0,0 +1,38 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('tusken_elite_guard') + mobileTemplate.setLevel(34) + mobileTemplate.setDifficulty(1) + mobileTemplate.setAttackRange(12) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(0) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(True) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("tusken raider") + mobileTemplate.setAssistRange(6) + mobileTemplate.setStalker(True) + + + templates = Vector() + templates.add('object/mobile/shared_tusken_raider.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/rifle/shared_rifle_tusken_generic.iff', 0, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedShotrifle') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('tusken_elite_guard', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/tatooine/tusken_executioner.py b/scripts/mobiles/tatooine/tusken_executioner.py new file mode 100644 index 00000000..8d6a0dee --- /dev/null +++ b/scripts/mobiles/tatooine/tusken_executioner.py @@ -0,0 +1,38 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('tusken_executioner') + mobileTemplate.setLevel(34) + mobileTemplate.setDifficulty(1) + mobileTemplate.setAttackRange(12) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(0) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(True) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("tusken raider") + mobileTemplate.setAssistRange(6) + mobileTemplate.setStalker(False) + + + templates = Vector() + templates.add('object/mobile/shared_tusken_raider.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/rifle/shared_rifle_tusken_generic.iff', 0, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedShotrifle') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('tusken_executioner', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/tatooine/tusken_fighter.py b/scripts/mobiles/tatooine/tusken_fighter.py new file mode 100644 index 00000000..34d1a74c --- /dev/null +++ b/scripts/mobiles/tatooine/tusken_fighter.py @@ -0,0 +1,38 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('tusken_soldier') + mobileTemplate.setLevel(31) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(12) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(0) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(True) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("tusken raider") + mobileTemplate.setAssistRange(6) + mobileTemplate.setStalker(False) + + + templates = Vector() + templates.add('object/mobile/shared_tusken_raider.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/rifle/shared_rifle_tusken_generic.iff', 0, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedShotrifle') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('tusken_fighter', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/tatooine/tusken_flesh_hunter.py b/scripts/mobiles/tatooine/tusken_flesh_hunter.py new file mode 100644 index 00000000..3e58b259 --- /dev/null +++ b/scripts/mobiles/tatooine/tusken_flesh_hunter.py @@ -0,0 +1,38 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('tusken_flesh_hunter') + mobileTemplate.setLevel(33) + mobileTemplate.setDifficulty(1) + mobileTemplate.setAttackRange(12) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(0) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(True) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("tusken raider") + mobileTemplate.setAssistRange(6) + mobileTemplate.setStalker(True) + + + templates = Vector() + templates.add('object/mobile/shared_tusken_raider.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/rifle/shared_rifle_tusken_generic.iff', 0, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedShotrifle') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('tusken_flesh_hunter', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/tatooine/tusken_follower.py b/scripts/mobiles/tatooine/tusken_follower.py new file mode 100644 index 00000000..3271ef2f --- /dev/null +++ b/scripts/mobiles/tatooine/tusken_follower.py @@ -0,0 +1,40 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('tusken_raider_18') + mobileTemplate.setLevel(19) + mobileTemplate.setMinLevel(18) + mobileTemplate.setMaxLevel(21) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(12) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(0) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("tusken raider") + mobileTemplate.setAssistRange(6) + mobileTemplate.setStalker(False) + + + templates = Vector() + templates.add('object/mobile/shared_tusken_raider.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/rifle/shared_rifle_tusken_generic.iff', 0, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedShotrifle') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('tusken_follower', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/tatooine/tusken_gore_chief.py b/scripts/mobiles/tatooine/tusken_gore_chief.py new file mode 100644 index 00000000..bf77045f --- /dev/null +++ b/scripts/mobiles/tatooine/tusken_gore_chief.py @@ -0,0 +1,38 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('tusken_gore_chief') + mobileTemplate.setLevel(34) + mobileTemplate.setDifficulty(1) + mobileTemplate.setAttackRange(12) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(0) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(True) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("tusken raider") + mobileTemplate.setAssistRange(6) + mobileTemplate.setStalker(True) + + + templates = Vector() + templates.add('object/mobile/shared_tusken_raider.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/rifle/shared_rifle_tusken_generic.iff', 0, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedShotrifle') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('tusken_gore_chief', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/tatooine/tusken_guard.py b/scripts/mobiles/tatooine/tusken_guard.py new file mode 100644 index 00000000..02c979cb --- /dev/null +++ b/scripts/mobiles/tatooine/tusken_guard.py @@ -0,0 +1,38 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('tusken_guard') + mobileTemplate.setLevel(31) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(12) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(0) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(True) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("tusken raider") + mobileTemplate.setAssistRange(6) + mobileTemplate.setStalker(True) + + + templates = Vector() + templates.add('object/mobile/shared_tusken_raider.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/rifle/shared_rifle_tusken_generic.iff', 0, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedShotrifle') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('tusken_guard', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/tatooine/tusken_king.py b/scripts/mobiles/tatooine/tusken_king.py new file mode 100644 index 00000000..68552335 --- /dev/null +++ b/scripts/mobiles/tatooine/tusken_king.py @@ -0,0 +1,38 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('tusken_king') + mobileTemplate.setLevel(33) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(12) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(0) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(True) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("tusken raider") + mobileTemplate.setAssistRange(6) + mobileTemplate.setStalker(True) + + + templates = Vector() + templates.add('object/mobile/shared_tusken_raider.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/rifle/shared_rifle_tusken_generic.iff', 0, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedShotrifle') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('tusken_king', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/tatooine/tusken_observer.py b/scripts/mobiles/tatooine/tusken_observer.py new file mode 100644 index 00000000..05d0faca --- /dev/null +++ b/scripts/mobiles/tatooine/tusken_observer.py @@ -0,0 +1,38 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('tusken_observer') + mobileTemplate.setLevel(32) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(12) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(0) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(True) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("tusken raider") + mobileTemplate.setAssistRange(6) + mobileTemplate.setStalker(False) + + + templates = Vector() + templates.add('object/mobile/shared_tusken_raider.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/rifle/shared_rifle_tusken_generic.iff', 0, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedShotrifle') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('tusken_observer', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/tatooine/tusken_outrider.py b/scripts/mobiles/tatooine/tusken_outrider.py new file mode 100644 index 00000000..ecffd926 --- /dev/null +++ b/scripts/mobiles/tatooine/tusken_outrider.py @@ -0,0 +1,38 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('tusken_raider_wildman') + mobileTemplate.setLevel(14) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(12) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(0) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("tusken raider") + mobileTemplate.setAssistRange(6) + mobileTemplate.setStalker(False) + + + templates = Vector() + templates.add('object/mobile/shared_tusken_raider.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/rifle/shared_rifle_tusken_generic.iff', 0, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedShotrifle') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('tusken_outrider', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/tatooine/tusken_priest.py b/scripts/mobiles/tatooine/tusken_priest.py new file mode 100644 index 00000000..cd9dcff5 --- /dev/null +++ b/scripts/mobiles/tatooine/tusken_priest.py @@ -0,0 +1,38 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('tusken_raider_worshiper') + mobileTemplate.setLevel(20) + mobileTemplate.setDifficulty(1) + mobileTemplate.setAttackRange(12) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(0) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("tusken raider") + mobileTemplate.setAssistRange(6) + mobileTemplate.setStalker(False) + + + templates = Vector() + templates.add('object/mobile/shared_tusken_raider.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/rifle/shared_rifle_tusken_generic.iff', 0, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedShotrifle') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('tusken_worshiper', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/tatooine/tusken_raid_champion.py b/scripts/mobiles/tatooine/tusken_raid_champion.py new file mode 100644 index 00000000..e69d711c --- /dev/null +++ b/scripts/mobiles/tatooine/tusken_raid_champion.py @@ -0,0 +1,38 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('bestine_tusken_raid_leader') + mobileTemplate.setLevel(32) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(12) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(0) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(True) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("tusken raider") + mobileTemplate.setAssistRange(6) + mobileTemplate.setStalker(True) + + + templates = Vector() + templates.add('object/mobile/shared_tusken_raider.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/rifle/shared_rifle_tusken_generic.iff', 0, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedShotrifle') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('tusken_champion', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/tatooine/tusken_raid_hunter.py b/scripts/mobiles/tatooine/tusken_raid_hunter.py new file mode 100644 index 00000000..95dee534 --- /dev/null +++ b/scripts/mobiles/tatooine/tusken_raid_hunter.py @@ -0,0 +1,38 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('bestine_tusken_raid_sub_leader') + mobileTemplate.setLevel(31) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(12) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(0) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(True) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("tusken raider") + mobileTemplate.setAssistRange(6) + mobileTemplate.setStalker(True) + + + templates = Vector() + templates.add('object/mobile/shared_tusken_raider.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/rifle/shared_rifle_tusken_generic.iff', 0, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedShotrifle') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('tusken_raid_hunter', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/tatooine/tusken_raid_leader.py b/scripts/mobiles/tatooine/tusken_raid_leader.py new file mode 100644 index 00000000..1d2562bb --- /dev/null +++ b/scripts/mobiles/tatooine/tusken_raid_leader.py @@ -0,0 +1,38 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('heroic_tusken_raid_leader') + mobileTemplate.setLevel(31) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(12) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(0) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(True) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("tusken raider") + mobileTemplate.setAssistRange(6) + mobileTemplate.setStalker(True) + + + templates = Vector() + templates.add('object/mobile/shared_tusken_raider.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/rifle/shared_rifle_tusken_generic.iff', 0, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedShotrifle') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('tusken_raid_leader', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/tatooine/tusken_raider.py b/scripts/mobiles/tatooine/tusken_raider.py new file mode 100644 index 00000000..1fab5848 --- /dev/null +++ b/scripts/mobiles/tatooine/tusken_raider.py @@ -0,0 +1,37 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('tusken_raider') + mobileTemplate.setLevel(30) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(12) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(0) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(True) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("tusken raider") + mobileTemplate.setAssistRange(4) + mobileTemplate.setStalker(True) + + templates = Vector() + templates.add('object/mobile/shared_tusken_raider.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/rifle/shared_rifle_tusken.iff', 0, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedShotrifle') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('tusken_raider', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/tatooine/tusken_raider_soldier.py b/scripts/mobiles/tatooine/tusken_raider_soldier.py new file mode 100644 index 00000000..9d29bd5c --- /dev/null +++ b/scripts/mobiles/tatooine/tusken_raider_soldier.py @@ -0,0 +1,40 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('tusken_raider_soldier') + mobileTemplate.setLevel(5) + mobileTemplate.setMinLevel(5) + mobileTemplate.setMaxLevel(6) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(12) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(0) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("tusken raider") + mobileTemplate.setAssistRange(4) + mobileTemplate.setStalker(False) + + + templates = Vector() + templates.add('object/mobile/shared_tusken_raider.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/rifle/shared_rifle_tusken_generic.iff', 0, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedShotrifle') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('tusken_soldier', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/tatooine/tusken_raider_warrior.py b/scripts/mobiles/tatooine/tusken_raider_warrior.py new file mode 100644 index 00000000..1da648d3 --- /dev/null +++ b/scripts/mobiles/tatooine/tusken_raider_warrior.py @@ -0,0 +1,39 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('tusken_raider_warrior') + mobileTemplate.setLevel(6) + mobileTemplate.setMinLevel(6) + mobileTemplate.setMaxLevel(7) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(12) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(0) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("tusken raider") + mobileTemplate.setAssistRange(4) + mobileTemplate.setStalker(False) + + templates = Vector() + templates.add('object/mobile/shared_tusken_raider.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/rifle/shared_rifle_tusken_generic.iff', 0, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedShotrifle') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('tusken_warrior', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/tatooine/tusken_savage.py b/scripts/mobiles/tatooine/tusken_savage.py new file mode 100644 index 00000000..7bd2227c --- /dev/null +++ b/scripts/mobiles/tatooine/tusken_savage.py @@ -0,0 +1,37 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('tusken_savage') + mobileTemplate.setLevel(30) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(12) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(0) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(True) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("tusken raider") + mobileTemplate.setAssistRange(4) + mobileTemplate.setStalker(True) + + templates = Vector() + templates.add('object/mobile/shared_tusken_raider.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/rifle/shared_rifle_tusken.iff', 0, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedShotrifle') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('tusken_savage', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/tatooine/tusken_sniper.py b/scripts/mobiles/tatooine/tusken_sniper.py new file mode 100644 index 00000000..26514d52 --- /dev/null +++ b/scripts/mobiles/tatooine/tusken_sniper.py @@ -0,0 +1,37 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('tusken_sniper') + mobileTemplate.setLevel(30) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(12) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(0) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(True) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("tusken raider") + mobileTemplate.setAssistRange(4) + mobileTemplate.setStalker(True) + + templates = Vector() + templates.add('object/mobile/shared_tusken_raider.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/rifle/shared_rifle_tusken.iff', 0, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedShotrifle') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('tusken_sniper', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/tatooine/tusken_torture_lord.py b/scripts/mobiles/tatooine/tusken_torture_lord.py new file mode 100644 index 00000000..083797b8 --- /dev/null +++ b/scripts/mobiles/tatooine/tusken_torture_lord.py @@ -0,0 +1,38 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('tusken_torture_lord') + mobileTemplate.setLevel(32) + mobileTemplate.setDifficulty(1) + mobileTemplate.setAttackRange(12) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(0) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("tusken raider") + mobileTemplate.setAssistRange(6) + mobileTemplate.setStalker(True) + + + templates = Vector() + templates.add('object/mobile/shared_tusken_raider.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/rifle/shared_rifle_tusken_generic.iff', 0, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedShotrifle') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('tusken_torture_lord', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/tatooine/tusken_wanderer.py b/scripts/mobiles/tatooine/tusken_wanderer.py new file mode 100644 index 00000000..f6ead25a --- /dev/null +++ b/scripts/mobiles/tatooine/tusken_wanderer.py @@ -0,0 +1,38 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('tusken_wanderer') + mobileTemplate.setLevel(33) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(12) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(0) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(True) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("tusken raider") + mobileTemplate.setAssistRange(6) + mobileTemplate.setStalker(True) + + + templates = Vector() + templates.add('object/mobile/shared_tusken_raider.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/rifle/shared_rifle_tusken_generic.iff', 0, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedShotrifle') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('tusken_wanderer', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/tatooine/tusken_warlord.py b/scripts/mobiles/tatooine/tusken_warlord.py new file mode 100644 index 00000000..f6ead25a --- /dev/null +++ b/scripts/mobiles/tatooine/tusken_warlord.py @@ -0,0 +1,38 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('tusken_wanderer') + mobileTemplate.setLevel(33) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(12) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(0) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(True) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("tusken raider") + mobileTemplate.setAssistRange(6) + mobileTemplate.setStalker(True) + + + templates = Vector() + templates.add('object/mobile/shared_tusken_raider.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/rifle/shared_rifle_tusken_generic.iff', 0, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedShotrifle') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('tusken_wanderer', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/tatooine/tusken_warmaster.py b/scripts/mobiles/tatooine/tusken_warmaster.py new file mode 100644 index 00000000..c402c817 --- /dev/null +++ b/scripts/mobiles/tatooine/tusken_warmaster.py @@ -0,0 +1,38 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('tusken_war_master') + mobileTemplate.setLevel(32) + mobileTemplate.setDifficulty(1) + mobileTemplate.setAttackRange(12) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(0) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(True) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("tusken raider") + mobileTemplate.setAssistRange(6) + mobileTemplate.setStalker(True) + + + templates = Vector() + templates.add('object/mobile/shared_tusken_raider.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('meleehit') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('tusken_warmaster', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/tatooine/tusken_warrior.py b/scripts/mobiles/tatooine/tusken_warrior.py new file mode 100644 index 00000000..4581fde7 --- /dev/null +++ b/scripts/mobiles/tatooine/tusken_warrior.py @@ -0,0 +1,38 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('tusken_warrior') + mobileTemplate.setLevel(32) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(12) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(0) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(True) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("tusken raider") + mobileTemplate.setAssistRange(6) + mobileTemplate.setStalker(True) + + + templates = Vector() + templates.add('object/mobile/shared_tusken_raider.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('meleehit') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('tusken_warrior_1', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/tatooine/tusken_witch_doctor.py b/scripts/mobiles/tatooine/tusken_witch_doctor.py new file mode 100644 index 00000000..fcaf6cf2 --- /dev/null +++ b/scripts/mobiles/tatooine/tusken_witch_doctor.py @@ -0,0 +1,38 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('tusken_witch_doctor') + mobileTemplate.setLevel(33) + mobileTemplate.setDifficulty(1) + mobileTemplate.setAttackRange(12) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(0) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(True) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("tusken raider") + mobileTemplate.setAssistRange(6) + mobileTemplate.setStalker(True) + + + templates = Vector() + templates.add('object/mobile/shared_tusken_raider.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/rifle/shared_rifle_tusken_generic.iff', 0, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedShotrifle') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('tusken_witch_doctor', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/tatooine/tusken_zealot.py b/scripts/mobiles/tatooine/tusken_zealot.py new file mode 100644 index 00000000..32548ca0 --- /dev/null +++ b/scripts/mobiles/tatooine/tusken_zealot.py @@ -0,0 +1,40 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('tusken_raider_zealot') + mobileTemplate.setLevel(5) + mobileTemplate.setMinLevel(5) + mobileTemplate.setMaxLevel(6) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(12) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(0) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("tusken raider") + mobileTemplate.setAssistRange(4) + mobileTemplate.setStalker(False) + + + templates = Vector() + templates.add('object/mobile/shared_tusken_raider.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/rifle/shared_rifle_tusken_generic.iff', 0, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedShotrifle') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('tusken_zealot', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/tatooine/twisted_dewback.py b/scripts/mobiles/tatooine/twisted_dewback.py new file mode 100644 index 00000000..633560a5 --- /dev/null +++ b/scripts/mobiles/tatooine/twisted_dewback.py @@ -0,0 +1,45 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('twisted_dewback') + mobileTemplate.setLevel(11) + mobileTemplate.setMinLevel(10) + mobileTemplate.setMaxLevel(12) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setMeatType("Reptilian Meat") + mobileTemplate.setMeatAmount(175) + mobileTemplate.setHideType("Leathery Hide") + mobileTemplate.setBoneAmount(125) + mobileTemplate.setBoneType("Animal Bones") + mobileTemplate.setHideAmount(100) + mobileTemplate.setSocialGroup("twisted") + mobileTemplate.setAssistRange(6) + mobileTemplate.setStalker(False) + + templates = Vector() + templates.add('object/mobile/shared_dewback.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('twisted_dewback', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/tatooine/twisted_rill.py b/scripts/mobiles/tatooine/twisted_rill.py new file mode 100644 index 00000000..752e2e0b --- /dev/null +++ b/scripts/mobiles/tatooine/twisted_rill.py @@ -0,0 +1,45 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('twisted_rill') + mobileTemplate.setLevel(11) + mobileTemplate.setMinLevel(10) + mobileTemplate.setMaxLevel(13) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setMeatType("Carnivore Meat") + mobileTemplate.setMeatAmount(35) + mobileTemplate.setHideType("Bristly Hide") + mobileTemplate.setBoneAmount(20) + mobileTemplate.setBoneType("Animal Bone") + mobileTemplate.setHideAmount(15) + mobileTemplate.setSocialGroup("twisted") + mobileTemplate.setAssistRange(6) + mobileTemplate.setStalker(False) + + templates = Vector() + templates.add('object/mobile/shared_rill.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('twisted_rill', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/tatooine/twisted_womprat.py b/scripts/mobiles/tatooine/twisted_womprat.py new file mode 100644 index 00000000..ca4b5198 --- /dev/null +++ b/scripts/mobiles/tatooine/twisted_womprat.py @@ -0,0 +1,46 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('twisted_womprat') + mobileTemplate.setLevel(11) + mobileTemplate.setMinLevel(10) + mobileTemplate.setMaxLevel(12) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setMeatType("Wild Meat") + mobileTemplate.setMeatAmount(4) + mobileTemplate.setHideType("Leathery Hide") + mobileTemplate.setBoneAmount(3) + mobileTemplate.setBoneType("Animal Bone") + mobileTemplate.setHideAmount(2) + mobileTemplate.setSocialGroup("twisted") + mobileTemplate.setAssistRange(6) + mobileTemplate.setStalker(False) + + + templates = Vector() + templates.add('object/mobile/shared_womp_rat.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('twisted_womprat', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/tatooine/vaigonn_shinn.py b/scripts/mobiles/tatooine/vaigonn_shinn.py new file mode 100644 index 00000000..071e5e22 --- /dev/null +++ b/scripts/mobiles/tatooine/vaigonn_shinn.py @@ -0,0 +1,45 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('tatooine_vaigon_shinn') + mobileTemplate.setLevel(8) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(12) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(1) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("shinn mugger") + mobileTemplate.setAssistRange(4) + mobileTemplate.setStalker(False) + mobileTemplate.setOptionsBitmask(192) + + templates = Vector() + templates.add('object/mobile/shared_dressed_commoner_tatooine_nikto_male_01.iff') + templates.add('object/mobile/shared_dressed_commoner_tatooine_nikto_male_02.iff') + templates.add('object/mobile/shared_dressed_commoner_tatooine_nikto_male_03.iff') + templates.add('object/mobile/shared_dressed_commoner_tatooine_nikto_male_04.iff') + templates.add('object/mobile/shared_dressed_commoner_tatooine_nikto_male_05.iff') + templates.add('object/mobile/shared_dressed_commoner_tatooine_nikto_male_06.iff') + templates.add('object/mobile/shared_dressed_commoner_tatooine_nikto_male_07.iff') + templates.add('object/mobile/shared_dressed_commoner_tatooine_nikto_male_08.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/carbine/shared_carbine_cdef.iff', 1, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedShot') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('vaigon_shinn', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/tatooine/valarian_assassin.py b/scripts/mobiles/tatooine/valarian_assassin.py new file mode 100644 index 00000000..83abf464 --- /dev/null +++ b/scripts/mobiles/tatooine/valarian_assassin.py @@ -0,0 +1,38 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('valarian_assassin') + mobileTemplate.setLevel(15) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(12) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(0) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(True) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("valarian") + mobileTemplate.setAssistRange(4) + mobileTemplate.setStalker(False) + + + templates = Vector() + templates.add('object/mobile/shared_dressed_tatooine_valarian_assassin.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/pistol/shared_pistol_cdef.iff', 2, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedShotpistol') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('valarian_assassin', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/tatooine/valarian_compound_guard.py b/scripts/mobiles/tatooine/valarian_compound_guard.py new file mode 100644 index 00000000..c132509b --- /dev/null +++ b/scripts/mobiles/tatooine/valarian_compound_guard.py @@ -0,0 +1,38 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('valarian_compound_guard') + mobileTemplate.setLevel(14) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(12) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(0) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(True) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("valarian") + mobileTemplate.setAssistRange(4) + mobileTemplate.setStalker(False) + + + templates = Vector() + templates.add('object/mobile/shared_dressed_tatooine_valarian_compound_guard.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/carbine/shared_carbine_cdef.iff', 1, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedShot') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('valarian_compound_guard', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/tatooine/valarian_crew_chief.py b/scripts/mobiles/tatooine/valarian_crew_chief.py new file mode 100644 index 00000000..ef74a5dc --- /dev/null +++ b/scripts/mobiles/tatooine/valarian_crew_chief.py @@ -0,0 +1,38 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('valarian_crew_chief') + mobileTemplate.setLevel(13) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(12) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(0) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("valarian") + mobileTemplate.setAssistRange(4) + mobileTemplate.setStalker(False) + + + templates = Vector() + templates.add('object/mobile/shared_dressed_tatooine_valarian_thug.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/pistol/shared_pistol_cdef.iff', 2, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedShotpistol') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('valarian_chief', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/tatooine/valarian_depot_boss.py b/scripts/mobiles/tatooine/valarian_depot_boss.py new file mode 100644 index 00000000..32701f92 --- /dev/null +++ b/scripts/mobiles/tatooine/valarian_depot_boss.py @@ -0,0 +1,38 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('valarian_elite_shuttle') + mobileTemplate.setLevel(22) + mobileTemplate.setDifficulty(1) + mobileTemplate.setAttackRange(12) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(0) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("valarian") + mobileTemplate.setAssistRange(4) + mobileTemplate.setStalker(False) + + + templates = Vector() + templates.add('object/mobile/shared_dressed_valarian_assassin_boss.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/pistol/shared_pistol_cdef.iff', 2, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedShotpistol') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('valarian_depot_boss', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/tatooine/valarian_depot_foreman.py b/scripts/mobiles/tatooine/valarian_depot_foreman.py new file mode 100644 index 00000000..d1a82dbe --- /dev/null +++ b/scripts/mobiles/tatooine/valarian_depot_foreman.py @@ -0,0 +1,38 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('valarian_boss_depot') + mobileTemplate.setLevel(16) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(12) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(0) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("valarian") + mobileTemplate.setAssistRange(4) + mobileTemplate.setStalker(False) + + + templates = Vector() + templates.add('object/mobile/shared_dressed_tatooine_valarian_thug.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/pistol/shared_pistol_cdef.iff', 2, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedShotpistol') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('valarian_depot_foreman', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/tatooine/valarian_depot_guard.py b/scripts/mobiles/tatooine/valarian_depot_guard.py new file mode 100644 index 00000000..659e83da --- /dev/null +++ b/scripts/mobiles/tatooine/valarian_depot_guard.py @@ -0,0 +1,38 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('valarian_boss_shuttle') + mobileTemplate.setLevel(14) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(12) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(0) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("valarian") + mobileTemplate.setAssistRange(4) + mobileTemplate.setStalker(False) + + + templates = Vector() + templates.add('object/mobile/shared_dressed_tatooine_valarian_thug.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/pistol/shared_pistol_cdef.iff', 2, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedShotpistol') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('valarian_depot_guard', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/tatooine/valarian_depot_scout.py b/scripts/mobiles/tatooine/valarian_depot_scout.py new file mode 100644 index 00000000..dfe2c81a --- /dev/null +++ b/scripts/mobiles/tatooine/valarian_depot_scout.py @@ -0,0 +1,38 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('valarian_scout_depot') + mobileTemplate.setLevel(12) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(12) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(0) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("valarian") + mobileTemplate.setAssistRange(4) + mobileTemplate.setStalker(False) + + + templates = Vector() + templates.add('object/mobile/shared_dressed_tatooine_valarian_thug.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/rifle/shared_rifle_dlt20.iff', 0, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedShotrifle') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('valarian_depot_scout', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/tatooine/valarian_depot_swooper.py b/scripts/mobiles/tatooine/valarian_depot_swooper.py new file mode 100644 index 00000000..d54842f2 --- /dev/null +++ b/scripts/mobiles/tatooine/valarian_depot_swooper.py @@ -0,0 +1,38 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('valarian_swooper_depot') + mobileTemplate.setLevel(12) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(12) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(0) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("valarian") + mobileTemplate.setAssistRange(4) + mobileTemplate.setStalker(False) + + + templates = Vector() + templates.add('object/mobile/shared_dressed_tatooine_valarian_thug.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/carbine/shared_carbine_cdef.iff', 1, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedShot') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('valarian_depot_swooper', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/tatooine/valarian_depot_worker.py b/scripts/mobiles/tatooine/valarian_depot_worker.py new file mode 100644 index 00000000..4a50ff5f --- /dev/null +++ b/scripts/mobiles/tatooine/valarian_depot_worker.py @@ -0,0 +1,38 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('valarian_thug_depot') + mobileTemplate.setLevel(12) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(12) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(0) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("valarian") + mobileTemplate.setAssistRange(4) + mobileTemplate.setStalker(False) + + + templates = Vector() + templates.add('object/mobile/shared_dressed_tatooine_valarian_thug.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/pistol/shared_pistol_cdef.iff', 2, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedShotpistol') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('valarian_depot_worker', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/tatooine/valarian_enforcer.py b/scripts/mobiles/tatooine/valarian_enforcer.py new file mode 100644 index 00000000..e64d4d9b --- /dev/null +++ b/scripts/mobiles/tatooine/valarian_enforcer.py @@ -0,0 +1,38 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('valarian_enforcer') + mobileTemplate.setLevel(15) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(12) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(0) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("valarian") + mobileTemplate.setAssistRange(4) + mobileTemplate.setStalker(False) + + + templates = Vector() + templates.add('object/mobile/shared_dressed_tatooine_valarian_enforcer.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/carbine/shared_carbine_cdef.iff', 1, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedShot') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('valarian_enforcer', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/tatooine/valarian_henchman.py b/scripts/mobiles/tatooine/valarian_henchman.py new file mode 100644 index 00000000..4351ac14 --- /dev/null +++ b/scripts/mobiles/tatooine/valarian_henchman.py @@ -0,0 +1,38 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('valarian_henchman') + mobileTemplate.setLevel(14) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(12) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(0) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("valarian") + mobileTemplate.setAssistRange(4) + mobileTemplate.setStalker(False) + + + templates = Vector() + templates.add('object/mobile/shared_dressed_tatooine_valarian_henchman.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/carbine/shared_carbine_cdef.iff', 1, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedShot') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('valarian_henchman', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/tatooine/valarian_mechanic.py b/scripts/mobiles/tatooine/valarian_mechanic.py new file mode 100644 index 00000000..8a4eeacb --- /dev/null +++ b/scripts/mobiles/tatooine/valarian_mechanic.py @@ -0,0 +1,38 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('valarian_mechanic') + mobileTemplate.setLevel(13) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(12) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(0) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("valarian") + mobileTemplate.setAssistRange(4) + mobileTemplate.setStalker(False) + + + templates = Vector() + templates.add('object/mobile/shared_dressed_tatooine_valarian_thug.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/pistol/shared_pistol_cdef.iff', 2, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedShotpistol') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('valarian_mechanic', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/tatooine/valarian_pod_racer.py b/scripts/mobiles/tatooine/valarian_pod_racer.py new file mode 100644 index 00000000..d7424b22 --- /dev/null +++ b/scripts/mobiles/tatooine/valarian_pod_racer.py @@ -0,0 +1,38 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('valarian_pod_racer') + mobileTemplate.setLevel(13) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(12) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(0) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("valarian") + mobileTemplate.setAssistRange(4) + mobileTemplate.setStalker(False) + + + templates = Vector() + templates.add('object/mobile/shared_dressed_tatooine_valarian_swooper.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/pistol/shared_pistol_cdef.iff', 2, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedShotpistol') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('valarian_pod_racer', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/tatooine/valarian_scout.py b/scripts/mobiles/tatooine/valarian_scout.py new file mode 100644 index 00000000..c7f1add6 --- /dev/null +++ b/scripts/mobiles/tatooine/valarian_scout.py @@ -0,0 +1,38 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('valarian_scout') + mobileTemplate.setLevel(13) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(12) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(0) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("valarian") + mobileTemplate.setAssistRange(4) + mobileTemplate.setStalker(False) + + + templates = Vector() + templates.add('object/mobile/shared_dressed_tatooine_valarian_scout.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/rifle/shared_rifle_dlt20.iff', 0, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedShotrifle') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('valarian_scout', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/tatooine/valarian_shuttle_guard.py b/scripts/mobiles/tatooine/valarian_shuttle_guard.py new file mode 100644 index 00000000..d62435c3 --- /dev/null +++ b/scripts/mobiles/tatooine/valarian_shuttle_guard.py @@ -0,0 +1,40 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('valarian_swooper_shuttle') + mobileTemplate.setLevel(18) + mobileTemplate.setMinLevel(17) + mobileTemplate.setMaxLevel(22) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(12) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(0) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("valarian") + mobileTemplate.setAssistRange(4) + mobileTemplate.setStalker(False) + + + templates = Vector() + templates.add('object/mobile/shared_dressed_tatooine_valarian_thug.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/pistol/shared_pistol_cdef.iff', 2, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedShotpistol') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('valarian_shuttle_guard', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/tatooine/valarian_swooper.py b/scripts/mobiles/tatooine/valarian_swooper.py new file mode 100644 index 00000000..bdb0d623 --- /dev/null +++ b/scripts/mobiles/tatooine/valarian_swooper.py @@ -0,0 +1,38 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('valarian_swooper_leader') + mobileTemplate.setLevel(14) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(12) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(0) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("valarian") + mobileTemplate.setAssistRange(4) + mobileTemplate.setStalker(False) + + + templates = Vector() + templates.add('object/mobile/shared_dressed_tatooine_valarian_swooper_leader.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/pistol/shared_pistol_cdef.iff', 2, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedShotpistol') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('valarian_swooper_leader', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/tatooine/valarian_swooper_leader.py b/scripts/mobiles/tatooine/valarian_swooper_leader.py new file mode 100644 index 00000000..56537037 --- /dev/null +++ b/scripts/mobiles/tatooine/valarian_swooper_leader.py @@ -0,0 +1,38 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('valarian_swooper') + mobileTemplate.setLevel(14) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(12) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(0) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("valarian") + mobileTemplate.setAssistRange(4) + mobileTemplate.setStalker(False) + + + templates = Vector() + templates.add('object/mobile/shared_dressed_tatooine_valarian_swooper.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/pistol/shared_pistol_cdef.iff', 2, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedShotpistol') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('valarian_swooper', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/tatooine/valarian_thief.py b/scripts/mobiles/tatooine/valarian_thief.py new file mode 100644 index 00000000..7e30bf8a --- /dev/null +++ b/scripts/mobiles/tatooine/valarian_thief.py @@ -0,0 +1,38 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('valarian_thief') + mobileTemplate.setLevel(13) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(12) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(0) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("valarian") + mobileTemplate.setAssistRange(4) + mobileTemplate.setStalker(False) + + + templates = Vector() + templates.add('object/mobile/shared_dressed_tatooine_valarian_thief.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/pistol/shared_pistol_cdef.iff', 2, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedShotpistol') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('valarian_thief', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/tatooine/valarian_thug.py b/scripts/mobiles/tatooine/valarian_thug.py new file mode 100644 index 00000000..04ce215c --- /dev/null +++ b/scripts/mobiles/tatooine/valarian_thug.py @@ -0,0 +1,38 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('valarian_thug') + mobileTemplate.setLevel(13) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(12) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(0) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("valarian") + mobileTemplate.setAssistRange(4) + mobileTemplate.setStalker(False) + + + templates = Vector() + templates.add('object/mobile/shared_dressed_tatooine_valarian_thug.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/pistol/shared_pistol_cdef.iff', 2, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedShotpistol') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('valarian_thug', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/tatooine/variegated_womprat.py b/scripts/mobiles/tatooine/variegated_womprat.py new file mode 100644 index 00000000..f2df5312 --- /dev/null +++ b/scripts/mobiles/tatooine/variegated_womprat.py @@ -0,0 +1,46 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('variegated_womprat') + mobileTemplate.setLevel(12) + mobileTemplate.setMinLevel(11) + mobileTemplate.setMaxLevel(14) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setMeatType("Wild Meat") + mobileTemplate.setMeatAmount(3) + mobileTemplate.setHideType("Leathery Hide") + mobileTemplate.setBoneAmount(3) + mobileTemplate.setBoneType("Animal Bone") + mobileTemplate.setHideAmount(2) + mobileTemplate.setSocialGroup("variegated womprat") + mobileTemplate.setAssistRange(6) + mobileTemplate.setStalker(False) + mobileTemplate.setOptionsBitmask(192) + + templates = Vector() + templates.add('object/mobile/shared_variegated_womp_rat.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('variegated_womprat', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/tatooine/vicious_rill.py b/scripts/mobiles/tatooine/vicious_rill.py new file mode 100644 index 00000000..93a7e55d --- /dev/null +++ b/scripts/mobiles/tatooine/vicious_rill.py @@ -0,0 +1,45 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('vicious_rill') + mobileTemplate.setLevel(3) + mobileTemplate.setMinLevel(2) + mobileTemplate.setMaxLevel(4) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(True) + mobileTemplate.setScale(1) + mobileTemplate.setMeatType("Carnivore Meat") + mobileTemplate.setMeatAmount(35) + mobileTemplate.setHideType("Bristly Hide") + mobileTemplate.setBoneAmount(20) + mobileTemplate.setBoneType("Animal Bone") + mobileTemplate.setHideAmount(15) + mobileTemplate.setSocialGroup("rill") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(False) + + templates = Vector() + templates.add('object/mobile/shared_rill.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('vicious_rill', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/tatooine/volatile_scyk.py b/scripts/mobiles/tatooine/volatile_scyk.py new file mode 100644 index 00000000..dc0fab06 --- /dev/null +++ b/scripts/mobiles/tatooine/volatile_scyk.py @@ -0,0 +1,45 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('scyk_volatile') + mobileTemplate.setLevel(12) + mobileTemplate.setMinLevel(11) + mobileTemplate.setMaxLevel(13) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setMeatType("Carnivore Meat") + mobileTemplate.setMeatAmount(40) + mobileTemplate.setHideType("Bristly Hide") + mobileTemplate.setBoneAmount(25) + mobileTemplate.setBoneType("Animal Bone") + mobileTemplate.setHideAmount(18) + mobileTemplate.setSocialGroup("scyk") + mobileTemplate.setAssistRange(10) + mobileTemplate.setStalker(True) + + templates = Vector() + templates.add('object/mobile/shared_scyk.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('volatile_scyk', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/tatooine/wasteland_cupa.py b/scripts/mobiles/tatooine/wasteland_cupa.py new file mode 100644 index 00000000..574df453 --- /dev/null +++ b/scripts/mobiles/tatooine/wasteland_cupa.py @@ -0,0 +1,45 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('wasteland_cu_pa') + mobileTemplate.setLevel(20) + mobileTemplate.setMinLevel(19) + mobileTemplate.setMaxLevel(21) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setMeatType("Reptilian Meat") + mobileTemplate.setMeatAmount(215) + mobileTemplate.setHideType("Bristly Hide") + mobileTemplate.setBoneAmount(100) + mobileTemplate.setBoneType("Animal Bone") + mobileTemplate.setHideAmount(115) + mobileTemplate.setSocialGroup("cu pa") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(False) + + templates = Vector() + templates.add('object/mobile/shared_cu_pa.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('wasteland_cu_pa', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/tatooine/water_thief.py b/scripts/mobiles/tatooine/water_thief.py new file mode 100644 index 00000000..4e372bf0 --- /dev/null +++ b/scripts/mobiles/tatooine/water_thief.py @@ -0,0 +1,38 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('water_thief') + mobileTemplate.setLevel(5) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(4) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("thug") + mobileTemplate.setAssistRange(4) + mobileTemplate.setStalker(True) + mobileTemplate.setOptionsBitmask(192) + + templates = Vector() + templates.add('object/mobile/shared_dressed_tatooine_moisture_thief.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/sword/shared_sword_01.iff', 4, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('saberhit') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('water_thief', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/tatooine/white_thranta_manager.py b/scripts/mobiles/tatooine/white_thranta_manager.py new file mode 100644 index 00000000..f57bf0ca --- /dev/null +++ b/scripts/mobiles/tatooine/white_thranta_manager.py @@ -0,0 +1,38 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('tatooine_opening_swooper_13') + mobileTemplate.setLevel(12) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(12) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(0) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("whitethranta") + mobileTemplate.setAssistRange(3) + mobileTemplate.setStalker(False) + + + templates = Vector() + templates.add('object/mobile/shared_dressed_tatooine_opening_wh_guard.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/pistol/shared_pistol_cdef.iff', 2, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedShotpistol') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('white_thranta_manager', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/tatooine/white_thranta_security_captain.py b/scripts/mobiles/tatooine/white_thranta_security_captain.py new file mode 100644 index 00000000..4d419c61 --- /dev/null +++ b/scripts/mobiles/tatooine/white_thranta_security_captain.py @@ -0,0 +1,38 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('tatooine_opening_swooper_15') + mobileTemplate.setLevel(14) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(12) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(0) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(True) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("whitethranta") + mobileTemplate.setAssistRange(5) + mobileTemplate.setStalker(False) + + + templates = Vector() + templates.add('object/mobile/shared_dressed_tatooine_opening_wh_guard.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/rifle/shared_rifle_dlt20.iff', 0, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedShotrifle') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('white_thranta_security_captain', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/tatooine/white_thranta_security_elite.py b/scripts/mobiles/tatooine/white_thranta_security_elite.py new file mode 100644 index 00000000..db035c10 --- /dev/null +++ b/scripts/mobiles/tatooine/white_thranta_security_elite.py @@ -0,0 +1,38 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('tatooine_opening_swooper_15') + mobileTemplate.setLevel(13) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(12) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(0) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("whitethranta") + mobileTemplate.setAssistRange(5) + mobileTemplate.setStalker(False) + + + templates = Vector() + templates.add('object/mobile/shared_dressed_tatooine_opening_wh_guard.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/rifle/shared_rifle_dlt20.iff', 0, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedShotrifle') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('white_thranta_security_elite', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/tatooine/white_thranta_security_guard.py b/scripts/mobiles/tatooine/white_thranta_security_guard.py new file mode 100644 index 00000000..f652ece2 --- /dev/null +++ b/scripts/mobiles/tatooine/white_thranta_security_guard.py @@ -0,0 +1,38 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('tatooine_opening_swooper_9') + mobileTemplate.setLevel(13) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(12) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(0) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("whitethranta") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(False) + + + templates = Vector() + templates.add('object/mobile/shared_dressed_tatooine_opening_wh_guard.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/rifle/shared_rifle_dlt20.iff', 0, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedShotrifle') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('white_thranta_security_guard', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/tatooine/white_thranta_security_officer.py b/scripts/mobiles/tatooine/white_thranta_security_officer.py new file mode 100644 index 00000000..ce9f6a30 --- /dev/null +++ b/scripts/mobiles/tatooine/white_thranta_security_officer.py @@ -0,0 +1,38 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('tatooine_opening_swooper_11') + mobileTemplate.setLevel(13) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(12) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(0) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("whitethranta") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(False) + + + templates = Vector() + templates.add('object/mobile/shared_dressed_tatooine_opening_wh_guard.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/rifle/shared_rifle_dlt20.iff', 0, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedShotrifle') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('white_thranta_security_officer', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/tatooine/white_thranta_specialist.py b/scripts/mobiles/tatooine/white_thranta_specialist.py new file mode 100644 index 00000000..8754ae56 --- /dev/null +++ b/scripts/mobiles/tatooine/white_thranta_specialist.py @@ -0,0 +1,38 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('tatooine_opening_swooper_10') + mobileTemplate.setLevel(9) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(12) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(0) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("whitethranta") + mobileTemplate.setAssistRange(3) + mobileTemplate.setStalker(False) + + + templates = Vector() + templates.add('object/mobile/shared_dressed_tatooine_opening_wh_guard.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/pistol/shared_pistol_cdef.iff', 2, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedShotpistol') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('white_thranta_specialist', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/tatooine/white_thranta_technican.py b/scripts/mobiles/tatooine/white_thranta_technican.py new file mode 100644 index 00000000..c8542f36 --- /dev/null +++ b/scripts/mobiles/tatooine/white_thranta_technican.py @@ -0,0 +1,38 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('tatooine_opening_swooper_8') + mobileTemplate.setLevel(8) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(12) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(0) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("whitethranta") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(False) + + + templates = Vector() + templates.add('object/mobile/shared_dressed_tatooine_opening_wh_guard.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/pistol/shared_pistol_cdef.iff', 2, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedShotpistol') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('white_thranta_technican', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/tatooine/wild_bladeback_boar.py b/scripts/mobiles/tatooine/wild_bladeback_boar.py new file mode 100644 index 00000000..59ab35da --- /dev/null +++ b/scripts/mobiles/tatooine/wild_bladeback_boar.py @@ -0,0 +1,45 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('quest_hero_of_tatooine_ferocious_beast') + mobileTemplate.setLevel(40) + mobileTemplate.setMinLevel(39) + mobileTemplate.setMaxLevel(41) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(True) + mobileTemplate.setScale(1) + mobileTemplate.setMeatType("Herbivore Meat") + mobileTemplate.setMeatAmount(120) + mobileTemplate.setHideType("Leathery Hide") + mobileTemplate.setBoneAmount(80) + mobileTemplate.setBoneType("Animal Bone") + mobileTemplate.setHideAmount(50) + mobileTemplate.setSocialGroup("zucca boar") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(False) + + templates = Vector() + templates.add('object/mobile/shared_zucca_boar.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('wild_bladeback_boar', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/tatooine/wild_dune_boar.py b/scripts/mobiles/tatooine/wild_dune_boar.py new file mode 100644 index 00000000..4796affd --- /dev/null +++ b/scripts/mobiles/tatooine/wild_dune_boar.py @@ -0,0 +1,45 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('wild_dune_boar') + mobileTemplate.setLevel(50) + mobileTemplate.setMinLevel(49) + mobileTemplate.setMaxLevel(51) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(True) + mobileTemplate.setScale(1) + mobileTemplate.setMeatType("Herbivore Meat") + mobileTemplate.setMeatAmount(90) + mobileTemplate.setHideType("Leathery Hide") + mobileTemplate.setBoneAmount(80) + mobileTemplate.setBoneType("Animal Bone") + mobileTemplate.setHideAmount(75) + mobileTemplate.setSocialGroup("zucca boar") + mobileTemplate.setAssistRange(12) + mobileTemplate.setStalker(False) + + templates = Vector() + templates.add('object/mobile/shared_zucca_boar.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('wild_dune_boar', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/tatooine/womprat.py b/scripts/mobiles/tatooine/womprat.py new file mode 100644 index 00000000..b50adcad --- /dev/null +++ b/scripts/mobiles/tatooine/womprat.py @@ -0,0 +1,47 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('womprat') + mobileTemplate.setLevel(4) + mobileTemplate.setMinLevel(3) + mobileTemplate.setMaxLevel(6) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setMeatType("Wild Meat") + mobileTemplate.setMeatAmount(4) + mobileTemplate.setHideType("Leathery Hide") + mobileTemplate.setBoneAmount(3) + mobileTemplate.setBoneType("Animal Bone") + mobileTemplate.setHideAmount(2) + mobileTemplate.setSocialGroup("womprat") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(False) + + + + templates = Vector() + templates.add('object/mobile/shared_womp_rat.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('womprat', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/tatooine/wonderous_cupa.py b/scripts/mobiles/tatooine/wonderous_cupa.py new file mode 100644 index 00000000..2d34e4af --- /dev/null +++ b/scripts/mobiles/tatooine/wonderous_cupa.py @@ -0,0 +1,45 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('cu_pa_wonderous') + mobileTemplate.setLevel(12) + mobileTemplate.setMinLevel(11) + mobileTemplate.setMaxLevel(13) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setMeatType("Reptilian Meat") + mobileTemplate.setMeatAmount(215) + mobileTemplate.setHideType("Bristly Hide") + mobileTemplate.setBoneAmount(100) + mobileTemplate.setBoneType("Animal Bone") + mobileTemplate.setHideAmount(115) + mobileTemplate.setSocialGroup("cu pa") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(False) + + templates = Vector() + templates.add('object/mobile/shared_cu_pa.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('wonderous_cu_pa', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/tatooine/worrt.py b/scripts/mobiles/tatooine/worrt.py new file mode 100644 index 00000000..4a49556b --- /dev/null +++ b/scripts/mobiles/tatooine/worrt.py @@ -0,0 +1,45 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('worrt') + mobileTemplate.setLevel(5) + mobileTemplate.setMinLevel(4) + mobileTemplate.setMaxLevel(6) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setMeatType("Reptilian Meat") + mobileTemplate.setMeatAmount(5) + mobileTemplate.setHideType("Leathery Hide") + mobileTemplate.setBoneAmount(5) + mobileTemplate.setBoneType("Animal Bone") + mobileTemplate.setHideAmount(2) + mobileTemplate.setSocialGroup("worrt") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(False) + + templates = Vector() + templates.add('object/mobile/shared_worrt.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('worrt', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/tatooine/worrt_gutbuster.py b/scripts/mobiles/tatooine/worrt_gutbuster.py new file mode 100644 index 00000000..e39f0ffb --- /dev/null +++ b/scripts/mobiles/tatooine/worrt_gutbuster.py @@ -0,0 +1,45 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('worrt_gutbuster') + mobileTemplate.setLevel(13) + mobileTemplate.setMinLevel(12) + mobileTemplate.setMaxLevel(14) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setMeatType("Reptilian Meat") + mobileTemplate.setMeatAmount(9) + mobileTemplate.setHideType("Leathery Hide") + mobileTemplate.setBoneAmount(9) + mobileTemplate.setBoneType("Animal Bone") + mobileTemplate.setHideAmount(4) + mobileTemplate.setSocialGroup("worrt") + mobileTemplate.setAssistRange(6) + mobileTemplate.setStalker(False) + + templates = Vector() + templates.add('object/mobile/shared_worrt.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('worrt_gutbuster', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/tatooine/young_mountain_squill.py b/scripts/mobiles/tatooine/young_mountain_squill.py new file mode 100644 index 00000000..411e0c15 --- /dev/null +++ b/scripts/mobiles/tatooine/young_mountain_squill.py @@ -0,0 +1,45 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('young_mountain_squill') + mobileTemplate.setLevel(16) + mobileTemplate.setMinLevel(15) + mobileTemplate.setMaxLevel(17) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setMeatType("Carnivore Meat") + mobileTemplate.setMeatAmount(2) + mobileTemplate.setHideType("Leathery Hide") + mobileTemplate.setBoneAmount(2) + mobileTemplate.setBoneType("Animal Bone") + mobileTemplate.setHideAmount(1) + mobileTemplate.setSocialGroup("squill") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(False) + + templates = Vector() + templates.add('object/mobile/shared_squill.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('young_mountain_squill', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/tatooine/zucca_boar.py b/scripts/mobiles/tatooine/zucca_boar.py new file mode 100644 index 00000000..6865bcac --- /dev/null +++ b/scripts/mobiles/tatooine/zucca_boar.py @@ -0,0 +1,45 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('zucca_boar') + mobileTemplate.setLevel(8) + mobileTemplate.setMinLevel(7) + mobileTemplate.setMaxLevel(9) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setMeatType("Herbivore Meat") + mobileTemplate.setMeatAmount(65) + mobileTemplate.setHideType("Leathery Hide") + mobileTemplate.setBoneAmount(40) + mobileTemplate.setBoneType("Animal Bone") + mobileTemplate.setHideAmount(25) + mobileTemplate.setSocialGroup("zucca boar") + mobileTemplate.setAssistRange(12) + mobileTemplate.setStalker(False) + + templates = Vector() + templates.add('object/mobile/shared_zucca_boar.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('zucca_boar', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/yavin4/ancient_mamien.py b/scripts/mobiles/yavin4/ancient_mamien.py new file mode 100644 index 00000000..dbf12dec --- /dev/null +++ b/scripts/mobiles/yavin4/ancient_mamien.py @@ -0,0 +1,44 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('mamien_ancient') + mobileTemplate.setLevel(63) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(True) + mobileTemplate.setScale(1) + mobileTemplate.setMeatType("Wild Meat") + mobileTemplate.setMeatAmount(20) + mobileTemplate.setHideType("Wooly Hide") + mobileTemplate.setHideAmount(20) + mobileTemplate.setBoneType("Mammal Bones") + mobileTemplate.setBoneAmount(20) + mobileTemplate.setSocialGroup("mamien") + mobileTemplate.setAssistRange(12) + mobileTemplate.setStalker(False) + mobileTemplate.setOptionsBitmask(128) + + templates = Vector() + templates.add('object/mobile/shared_mamien.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('ancient_mamien', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/yavin4/angler.py b/scripts/mobiles/yavin4/angler.py new file mode 100644 index 00000000..c0cfb19a --- /dev/null +++ b/scripts/mobiles/yavin4/angler.py @@ -0,0 +1,40 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('angler') + mobileTemplate.setLevel(72) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setMeatType("Insect Meat") + mobileTemplate.setMeatAmount(4) + mobileTemplate.setSocialGroup("angler") + mobileTemplate.setAssistRange(12) + mobileTemplate.setStalker(True) + mobileTemplate.setOptionsBitmask(192) + + templates = Vector() + templates.add('object/mobile/shared_angler.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('angler', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/yavin4/angler_bone.py b/scripts/mobiles/yavin4/angler_bone.py new file mode 100644 index 00000000..e98a684d --- /dev/null +++ b/scripts/mobiles/yavin4/angler_bone.py @@ -0,0 +1,40 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('angler_bone') + mobileTemplate.setLevel(68) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setMeatType("Insect Meat") + mobileTemplate.setMeatAmount(4) + mobileTemplate.setSocialGroup("angler") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(False) + mobileTemplate.setOptionsBitmask(128) + + templates = Vector() + templates.add('object/mobile/shared_angler.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('bone_angler', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/yavin4/angler_hatchling.py b/scripts/mobiles/yavin4/angler_hatchling.py new file mode 100644 index 00000000..1f3a1933 --- /dev/null +++ b/scripts/mobiles/yavin4/angler_hatchling.py @@ -0,0 +1,40 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('angler_hatchling') + mobileTemplate.setLevel(71) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(.5) + mobileTemplate.setMeatType("Insect Meat") + mobileTemplate.setMeatAmount(2) + mobileTemplate.setSocialGroup("angler") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(True) + mobileTemplate.setOptionsBitmask(128) + + templates = Vector() + templates.add('object/mobile/shared_angler.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('angler_hatchling', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/yavin4/angler_recluse.py b/scripts/mobiles/yavin4/angler_recluse.py new file mode 100644 index 00000000..a3ed054a --- /dev/null +++ b/scripts/mobiles/yavin4/angler_recluse.py @@ -0,0 +1,40 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('angler_hatchling') + mobileTemplate.setLevel(73) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setMeatType("Insect Meat") + mobileTemplate.setMeatAmount(2) + mobileTemplate.setSocialGroup("angler") + mobileTemplate.setAssistRange(12) + mobileTemplate.setStalker(True) + mobileTemplate.setOptionsBitmask(192) + + templates = Vector() + templates.add('object/mobile/shared_angler.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('angler_recluse', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/yavin4/blood_fanged_gackle_bat.py b/scripts/mobiles/yavin4/blood_fanged_gackle_bat.py new file mode 100644 index 00000000..0c0f21c9 --- /dev/null +++ b/scripts/mobiles/yavin4/blood_fanged_gackle_bat.py @@ -0,0 +1,44 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('bloodfanged_gackle_bat') + mobileTemplate.setLevel(63) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(True) + mobileTemplate.setScale(1) + mobileTemplate.setMeatType("Avian Meat") + mobileTemplate.setMeatAmount(9) + mobileTemplate.setHideType("Leathery Hide") + mobileTemplate.setHideAmount(9) + mobileTemplate.setBoneType("Avian Bones") + mobileTemplate.setBoneAmount(9) + mobileTemplate.setSocialGroup("gacklebat") + mobileTemplate.setAssistRange(12) + mobileTemplate.setStalker(False) + mobileTemplate.setOptionsBitmask(192) + + templates = Vector() + templates.add('object/mobile/shared_gackle.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('blood_fanged_gackle_bat', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/yavin4/choku.py b/scripts/mobiles/yavin4/choku.py new file mode 100644 index 00000000..59f319d7 --- /dev/null +++ b/scripts/mobiles/yavin4/choku.py @@ -0,0 +1,42 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('choku') + mobileTemplate.setLevel(63) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setMeatType("Avian Meat") + mobileTemplate.setMeatAmount(10) + mobileTemplate.setBoneType("Avian Bones") + mobileTemplate.setBoneAmount(8) + mobileTemplate.setSocialGroup("choku") + mobileTemplate.setAssistRange(12) + mobileTemplate.setStalker(True) + mobileTemplate.setOptionsBitmask(128) + + templates = Vector() + templates.add('object/mobile/shared_choku.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('choku', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/yavin4/choku_female.py b/scripts/mobiles/yavin4/choku_female.py new file mode 100644 index 00000000..93581639 --- /dev/null +++ b/scripts/mobiles/yavin4/choku_female.py @@ -0,0 +1,42 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('choku_female') + mobileTemplate.setLevel(69) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setMeatType("Avian Meat") + mobileTemplate.setMeatAmount(10) + mobileTemplate.setBoneType("Avian Bones") + mobileTemplate.setBoneAmount(8) + mobileTemplate.setSocialGroup("choku") + mobileTemplate.setAssistRange(12) + mobileTemplate.setStalker(True) + mobileTemplate.setOptionsBitmask(128) + + templates = Vector() + templates.add('object/mobile/shared_choku.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('choku_female', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/yavin4/choku_hunter.py b/scripts/mobiles/yavin4/choku_hunter.py new file mode 100644 index 00000000..5ed02d64 --- /dev/null +++ b/scripts/mobiles/yavin4/choku_hunter.py @@ -0,0 +1,42 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('choku_hunter') + mobileTemplate.setLevel(71) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setMeatType("Avian Meat") + mobileTemplate.setMeatAmount(10) + mobileTemplate.setBoneType("Avian Bones") + mobileTemplate.setBoneAmount(8) + mobileTemplate.setSocialGroup("choku") + mobileTemplate.setAssistRange(12) + mobileTemplate.setStalker(True) + mobileTemplate.setOptionsBitmask(192) + + templates = Vector() + templates.add('object/mobile/shared_choku.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('choku_hunter', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/yavin4/choku_male.py b/scripts/mobiles/yavin4/choku_male.py new file mode 100644 index 00000000..2b70e07c --- /dev/null +++ b/scripts/mobiles/yavin4/choku_male.py @@ -0,0 +1,42 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('choku_male') + mobileTemplate.setLevel(70) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setMeatType("Avian Meat") + mobileTemplate.setMeatAmount(10) + mobileTemplate.setBoneType("Avian Bones") + mobileTemplate.setBoneAmount(8) + mobileTemplate.setSocialGroup("choku") + mobileTemplate.setAssistRange(12) + mobileTemplate.setStalker(True) + mobileTemplate.setOptionsBitmask(192) + + templates = Vector() + templates.add('object/mobile/shared_choku.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('choku_male', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/yavin4/choku_packmaster.py b/scripts/mobiles/yavin4/choku_packmaster.py new file mode 100644 index 00000000..039bc66e --- /dev/null +++ b/scripts/mobiles/yavin4/choku_packmaster.py @@ -0,0 +1,42 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('choku_packmaster') + mobileTemplate.setLevel(66) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setMeatType("Avian Meat") + mobileTemplate.setMeatAmount(10) + mobileTemplate.setBoneType("Avian Bones") + mobileTemplate.setBoneAmount(8) + mobileTemplate.setSocialGroup("choku") + mobileTemplate.setAssistRange(12) + mobileTemplate.setStalker(True) + mobileTemplate.setOptionsBitmask(128) + + templates = Vector() + templates.add('object/mobile/shared_choku.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('choku_packmaster', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/yavin4/choku_pup.py b/scripts/mobiles/yavin4/choku_pup.py new file mode 100644 index 00000000..8bed76a0 --- /dev/null +++ b/scripts/mobiles/yavin4/choku_pup.py @@ -0,0 +1,42 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('choku_pup') + mobileTemplate.setLevel(68) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(.5) + mobileTemplate.setMeatType("Avian Meat") + mobileTemplate.setMeatAmount(7) + mobileTemplate.setBoneType("Avian Bones") + mobileTemplate.setBoneAmount(5) + mobileTemplate.setSocialGroup("choku") + mobileTemplate.setAssistRange(12) + mobileTemplate.setStalker(True) + mobileTemplate.setOptionsBitmask(128) + + templates = Vector() + templates.add('object/mobile/shared_choku.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('choku_pup', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/yavin4/crystal_snake.py b/scripts/mobiles/yavin4/crystal_snake.py new file mode 100644 index 00000000..a58c453c --- /dev/null +++ b/scripts/mobiles/yavin4/crystal_snake.py @@ -0,0 +1,42 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('crystal_snake') + mobileTemplate.setLevel(65) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setMeatType("Carnivore Meat") + mobileTemplate.setMeatAmount(5) + mobileTemplate.setHideType("Scaley Hide") + mobileTemplate.setHideAmount(2) + mobileTemplate.setSocialGroup("crystal snake") + mobileTemplate.setAssistRange(12) + mobileTemplate.setStalker(False) + mobileTemplate.setOptionsBitmask(128) + + templates = Vector() + templates.add('object/mobile/shared_crystal_snake.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('crystal_snake', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/yavin4/elder_mamien.py b/scripts/mobiles/yavin4/elder_mamien.py new file mode 100644 index 00000000..963482e0 --- /dev/null +++ b/scripts/mobiles/yavin4/elder_mamien.py @@ -0,0 +1,44 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('mamien_elder') + mobileTemplate.setLevel(62) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setMeatType("Carnivore Meat") + mobileTemplate.setMeatAmount(35) + mobileTemplate.setHideType("Leathery Hide") + mobileTemplate.setHideAmount(40) + mobileTemplate.setBoneType("Mammal Bones") + mobileTemplate.setBoneAmount(45) + mobileTemplate.setSocialGroup("mamien") + mobileTemplate.setAssistRange(12) + mobileTemplate.setStalker(False) + mobileTemplate.setOptionsBitmask(128) + + templates = Vector() + templates.add('object/mobile/shared_mamien.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('eler_mamien', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/yavin4/enraged_tybis.py b/scripts/mobiles/yavin4/enraged_tybis.py new file mode 100644 index 00000000..3f2841f6 --- /dev/null +++ b/scripts/mobiles/yavin4/enraged_tybis.py @@ -0,0 +1,44 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('enraged_tybis') + mobileTemplate.setLevel(75) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setMeatType("Herbivore Meat") + mobileTemplate.setMeatAmount(220) + mobileTemplate.setHideType("Bristley Hide") + mobileTemplate.setHideAmount(160) + mobileTemplate.setBoneType("Mammal Bones") + mobileTemplate.setBoneAmount(105) + mobileTemplate.setSocialGroup("tybis") + mobileTemplate.setAssistRange(12) + mobileTemplate.setStalker(False) + mobileTemplate.setOptionsBitmask(128) + + templates = Vector() + templates.add('object/mobile/shared_tybis.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('enraged_tybis', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/yavin4/female_mamien.py b/scripts/mobiles/yavin4/female_mamien.py new file mode 100644 index 00000000..6e04a67f --- /dev/null +++ b/scripts/mobiles/yavin4/female_mamien.py @@ -0,0 +1,44 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('mamien_female') + mobileTemplate.setLevel(67) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setMeatType("Wild Meat") + mobileTemplate.setMeatAmount(45) + mobileTemplate.setHideType("Wooly Hide") + mobileTemplate.setHideAmount(20) + mobileTemplate.setBoneType("Mammal Bones") + mobileTemplate.setBoneAmount(20) + mobileTemplate.setSocialGroup("mamien") + mobileTemplate.setAssistRange(12) + mobileTemplate.setStalker(False) + mobileTemplate.setOptionsBitmask(128) + + templates = Vector() + templates.add('object/mobile/shared_mamien.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('female_mamien', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/yavin4/female_mawgax.py b/scripts/mobiles/yavin4/female_mawgax.py new file mode 100644 index 00000000..9c003136 --- /dev/null +++ b/scripts/mobiles/yavin4/female_mawgax.py @@ -0,0 +1,44 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('mawgax_female') + mobileTemplate.setLevel(60) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setMeatType("Domesticated Meat") + mobileTemplate.setMeatAmount(115) + mobileTemplate.setHideType("Leathery Hide") + mobileTemplate.setHideAmount(72) + mobileTemplate.setBoneType("Avian Bones") + mobileTemplate.setBoneAmount(52) + mobileTemplate.setSocialGroup("mawgax") + mobileTemplate.setAssistRange(12) + mobileTemplate.setStalker(False) + mobileTemplate.setOptionsBitmask(128) + + templates = Vector() + templates.add('object/mobile/shared_mawgax.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('female_mawgax', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/yavin4/female_tybis.py b/scripts/mobiles/yavin4/female_tybis.py new file mode 100644 index 00000000..0100a516 --- /dev/null +++ b/scripts/mobiles/yavin4/female_tybis.py @@ -0,0 +1,44 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('tybis_female') + mobileTemplate.setLevel(77) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setMeatType("Herbivore Meat") + mobileTemplate.setMeatAmount(220) + mobileTemplate.setHideType("Bristley Hide") + mobileTemplate.setHideAmount(160) + mobileTemplate.setBoneType("Mammal Bones") + mobileTemplate.setBoneAmount(105) + mobileTemplate.setSocialGroup("tybis") + mobileTemplate.setAssistRange(12) + mobileTemplate.setStalker(False) + mobileTemplate.setOptionsBitmask(128) + + templates = Vector() + templates.add('object/mobile/shared_tybis.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('female_tybis', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/yavin4/feral_mutant_gackle_stalker.py b/scripts/mobiles/yavin4/feral_mutant_gackle_stalker.py new file mode 100644 index 00000000..2f74e14d --- /dev/null +++ b/scripts/mobiles/yavin4/feral_mutant_gackle_stalker.py @@ -0,0 +1,44 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('feral_mutant_gackle_stalker') + mobileTemplate.setLevel(62) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setMeatType("Avian Meat") + mobileTemplate.setMeatAmount(9) + mobileTemplate.setHideType("Leathery Hide") + mobileTemplate.setHideAmount(9) + mobileTemplate.setBoneType("Avian Bones") + mobileTemplate.setBoneAmount(9) + mobileTemplate.setSocialGroup("gacklebat") + mobileTemplate.setAssistRange(12) + mobileTemplate.setStalker(True) + mobileTemplate.setOptionsBitmask(192) + + templates = Vector() + templates.add('object/mobile/shared_gackle_bat_hue.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('feral_mutant_gackle_stalker', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/yavin4/frenzied_choku.py b/scripts/mobiles/yavin4/frenzied_choku.py new file mode 100644 index 00000000..5cc27ba3 --- /dev/null +++ b/scripts/mobiles/yavin4/frenzied_choku.py @@ -0,0 +1,42 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('frenzied_choku') + mobileTemplate.setLevel(71) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setMeatType("Avian Meat") + mobileTemplate.setMeatAmount(10) + mobileTemplate.setBoneType("Avian Bones") + mobileTemplate.setBoneAmount(8) + mobileTemplate.setSocialGroup("choku") + mobileTemplate.setAssistRange(12) + mobileTemplate.setStalker(True) + mobileTemplate.setOptionsBitmask(192) + + templates = Vector() + templates.add('object/mobile/shared_choku.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('frenzied_choku', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/yavin4/gackle_bat.py b/scripts/mobiles/yavin4/gackle_bat.py new file mode 100644 index 00000000..16723014 --- /dev/null +++ b/scripts/mobiles/yavin4/gackle_bat.py @@ -0,0 +1,44 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('gackle_bat') + mobileTemplate.setLevel(65) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setMeatType("Carnivore Meat") + mobileTemplate.setMeatAmount(4) + mobileTemplate.setHideType("Bristley Hide") + mobileTemplate.setHideAmount(2) + mobileTemplate.setBoneType("Mammal Bones") + mobileTemplate.setBoneAmount(3) + mobileTemplate.setSocialGroup("gacklebat") + mobileTemplate.setAssistRange(12) + mobileTemplate.setStalker(False) + mobileTemplate.setOptionsBitmask(192) + + templates = Vector() + templates.add('object/mobile/shared_gackle_bat.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('gackle_bat', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/yavin4/gackle_bat_hunter.py b/scripts/mobiles/yavin4/gackle_bat_hunter.py new file mode 100644 index 00000000..444ac1c2 --- /dev/null +++ b/scripts/mobiles/yavin4/gackle_bat_hunter.py @@ -0,0 +1,44 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('gackle_bat_hunter') + mobileTemplate.setLevel(65) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setMeatType("Carnivore Meat") + mobileTemplate.setMeatAmount(4) + mobileTemplate.setHideType("Bristley Hide") + mobileTemplate.setHideAmount(2) + mobileTemplate.setBoneType("Mammal Bones") + mobileTemplate.setBoneAmount(3) + mobileTemplate.setSocialGroup("gacklebat") + mobileTemplate.setAssistRange(12) + mobileTemplate.setStalker(False) + mobileTemplate.setOptionsBitmask(192) + + templates = Vector() + templates.add('object/mobile/shared_gackle_bat.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('gackle_bat_hunter', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/yavin4/gackle_bat_mymidon_lord.py b/scripts/mobiles/yavin4/gackle_bat_mymidon_lord.py new file mode 100644 index 00000000..8d9fd29d --- /dev/null +++ b/scripts/mobiles/yavin4/gackle_bat_mymidon_lord.py @@ -0,0 +1,44 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('gackle_bat_myrmidon_lord') + mobileTemplate.setLevel(63) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(True) + mobileTemplate.setScale(1) + mobileTemplate.setMeatType("Avian Meat") + mobileTemplate.setMeatAmount(10) + mobileTemplate.setHideType("Leathery Hide") + mobileTemplate.setHideAmount(10) + mobileTemplate.setBoneType("Avian Bones") + mobileTemplate.setBoneAmount(10) + mobileTemplate.setSocialGroup("gacklebat") + mobileTemplate.setAssistRange(12) + mobileTemplate.setStalker(True) + mobileTemplate.setOptionsBitmask(192) + + templates = Vector() + templates.add('object/mobile/shared_giant_gackle_bat.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('gackle_bat_myrmidon_lord', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/yavin4/geonosian_bunker/enhanced_gaping_spider.py b/scripts/mobiles/yavin4/geonosian_bunker/enhanced_gaping_spider.py new file mode 100644 index 00000000..387b4ca9 --- /dev/null +++ b/scripts/mobiles/yavin4/geonosian_bunker/enhanced_gaping_spider.py @@ -0,0 +1,40 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('geonosian_gaping_spider_fire') + mobileTemplate.setLevel(88) + mobileTemplate.setDifficulty(1) + mobileTemplate.setAttackRange(12) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(True) + mobileTemplate.setScale(1) + mobileTemplate.setMeatType("Insect Meat") + mobileTemplate.setMeatAmount(50) + mobileTemplate.setSocialGroup("geonosian bunker") + mobileTemplate.setAssistRange(12) + mobileTemplate.setStalker(True) + mobileTemplate.setOptionsBitmask(192) + + templates = Vector() + templates.add('object/mobile/shared_gaping_spider_hue.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/base/shared_creature_base.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureRangedAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('enhanced_gaping_spider', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/yavin4/geonosian_bunker/enhanced_kliknik.py b/scripts/mobiles/yavin4/geonosian_bunker/enhanced_kliknik.py new file mode 100644 index 00000000..1ad10dbc --- /dev/null +++ b/scripts/mobiles/yavin4/geonosian_bunker/enhanced_kliknik.py @@ -0,0 +1,42 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('geonosian_kliknik_force_strong') + mobileTemplate.setLevel(89) + mobileTemplate.setDifficulty(1) + mobileTemplate.setAttackRange(12) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(True) + mobileTemplate.setScale(1) + mobileTemplate.setMeatType("Carnivore Meat") + mobileTemplate.setMeatAmount(45) + mobileTemplate.setHideType("Scaley Meat") + mobileTemplate.setHideAmount(40) + mobileTemplate.setSocialGroup("geonosian bunker") + mobileTemplate.setAssistRange(12) + mobileTemplate.setStalker(True) + mobileTemplate.setOptionsBitmask(192) + + templates = Vector() + templates.add('object/mobile/shared_kliknik_hue.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/base/shared_creature_base.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureRangedAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('enhanced_kliknik', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/yavin4/geonosian_bunker/enhanced_kwi.py b/scripts/mobiles/yavin4/geonosian_bunker/enhanced_kwi.py new file mode 100644 index 00000000..6cc6a288 --- /dev/null +++ b/scripts/mobiles/yavin4/geonosian_bunker/enhanced_kwi.py @@ -0,0 +1,44 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('geonosian_enhanced_kwi') + mobileTemplate.setLevel(88) + mobileTemplate.setDifficulty(1) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(True) + mobileTemplate.setScale(1) + mobileTemplate.setMeatType("Herbivore Meat") + mobileTemplate.setMeatAmount(100) + mobileTemplate.setHideType("Leathery Hide") + mobileTemplate.setHideAmount(85) + mobileTemplate.setBoneType("Mammal Bones") + mobileTemplate.setBoneAmount(75) + mobileTemplate.setSocialGroup("geonosian bunker") + mobileTemplate.setAssistRange(12) + mobileTemplate.setStalker(True) + mobileTemplate.setOptionsBitmask(192) + + templates = Vector() + templates.add('object/mobile/shared_kwi_hue.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('enhanced_kwi', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/yavin4/geonosian_bunker/geonosian_acklay_bunker_boss.py b/scripts/mobiles/yavin4/geonosian_bunker/geonosian_acklay_bunker_boss.py new file mode 100644 index 00000000..ff94ddd2 --- /dev/null +++ b/scripts/mobiles/yavin4/geonosian_bunker/geonosian_acklay_bunker_boss.py @@ -0,0 +1,38 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('geonosian_acklay_bunker_boss') + mobileTemplate.setLevel(93) + mobileTemplate.setDifficulty(2) + mobileTemplate.setAttackRange(12) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(True) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("geonosian bunker") + mobileTemplate.setAssistRange(12) + mobileTemplate.setStalker(True) + mobileTemplate.setOptionsBitmask(192) + + templates = Vector() + templates.add('object/mobile/shared_acklay.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/base/shared_base_weapon_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureRangedAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('geonosian_acklay_bunker_boss', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/yavin4/geonosian_bunker/geonosian_crazed_guard.py b/scripts/mobiles/yavin4/geonosian_bunker/geonosian_crazed_guard.py new file mode 100644 index 00000000..ad8cf4b6 --- /dev/null +++ b/scripts/mobiles/yavin4/geonosian_bunker/geonosian_crazed_guard.py @@ -0,0 +1,45 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('geonosian_crazed_guard') + mobileTemplate.setLevel(90) + mobileTemplate.setDifficulty(1) + mobileTemplate.setAttackRange(15) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(1) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(True) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("geonosian bunker") + mobileTemplate.setAssistRange(12) + mobileTemplate.setStalker(True) + mobileTemplate.setOptionsBitmask(192) + + templates = Vector() + templates.add('object/mobile/shared_dressed_geonosian_warrior_01.iff') + templates.add('object/mobile/shared_dressed_geonosian_warrior_02.iff') + templates.add('object/mobile/shared_dressed_geonosian_warrior_03.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/carbine/shared_geo_generic.iff', 1, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedshot') + mobileTemplate.setAttacks(attacks) + + lootPoolNames_1 = ['Junk'] + lootPoolChances_1 = [100] + lootGroupChance_1 = 100 + mobileTemplate.addToLootGroups(lootPoolNames_1,lootPoolChances_1,lootGroupChance_1) + + core.spawnService.addMobileTemplate('geonosian_crazed_guard', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/yavin4/geonosian_bunker/geonosian_droideka_crazed.py b/scripts/mobiles/yavin4/geonosian_bunker/geonosian_droideka_crazed.py new file mode 100644 index 00000000..4523dcce --- /dev/null +++ b/scripts/mobiles/yavin4/geonosian_bunker/geonosian_droideka_crazed.py @@ -0,0 +1,43 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('geonosian_droideka_crazed') + mobileTemplate.setLevel(90) + mobileTemplate.setDifficulty(1) + mobileTemplate.setAttackRange(15) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(1) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(True) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("geonosian bunker") + mobileTemplate.setAssistRange(12) + mobileTemplate.setStalker(True) + mobileTemplate.setOptionsBitmask(192) + + templates = Vector() + templates.add('object/mobile/shared_droideka.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/droid/shared_droid_droideka_ranged.iff', 1, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedshot') + mobileTemplate.setAttacks(attacks) + + lootPoolNames_1 = ['Junk'] + lootPoolChances_1 = [100] + lootGroupChance_1 = 100 + mobileTemplate.addToLootGroups(lootPoolNames_1,lootPoolChances_1,lootGroupChance_1) + + core.spawnService.addMobileTemplate('geonosian_droideka_crazed', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/yavin4/geonosian_bunker/geonosian_scientist.py b/scripts/mobiles/yavin4/geonosian_bunker/geonosian_scientist.py new file mode 100644 index 00000000..c0d13cf4 --- /dev/null +++ b/scripts/mobiles/yavin4/geonosian_bunker/geonosian_scientist.py @@ -0,0 +1,44 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('geonosian_scientist') + mobileTemplate.setLevel(86) + mobileTemplate.setDifficulty(1) + mobileTemplate.setAttackRange(15) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(1) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(True) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("geonosian bunker") + mobileTemplate.setAssistRange(12) + mobileTemplate.setStalker(True) + mobileTemplate.setOptionsBitmask(192) + + templates = Vector() + templates.add('object/mobile/shared_dressed_geonosian_scientist_01.iff') + templates.add('object/mobile/shared_dressed_geonosian_scientist_02.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/pistol/shared_geonosian_sonic_blaster_loot.iff', 1, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedshotpistol') + mobileTemplate.setAttacks(attacks) + + lootPoolNames_1 = ['Junk'] + lootPoolChances_1 = [100] + lootGroupChance_1 = 100 + mobileTemplate.addToLootGroups(lootPoolNames_1,lootPoolChances_1,lootGroupChance_1) + + core.spawnService.addMobileTemplate('geonosian_scientist', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/yavin4/geonosian_bunker/geonosian_technical_assistant.py b/scripts/mobiles/yavin4/geonosian_bunker/geonosian_technical_assistant.py new file mode 100644 index 00000000..1acef5cf --- /dev/null +++ b/scripts/mobiles/yavin4/geonosian_bunker/geonosian_technical_assistant.py @@ -0,0 +1,45 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('geonosian_tech_assistant') + mobileTemplate.setLevel(86) + mobileTemplate.setDifficulty(1) + mobileTemplate.setAttackRange(15) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(1) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(True) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("geonosian bunker") + mobileTemplate.setAssistRange(12) + mobileTemplate.setStalker(True) + mobileTemplate.setOptionsBitmask(192) + + templates = Vector() + templates.add('object/mobile/shared_dressed_geonosian_warrior_01.iff') + templates.add('object/mobile/shared_dressed_geonosian_warrior_02.iff') + templates.add('object/mobile/shared_dressed_geonosian_warrior_03.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/pistol/shared_geonosian_sonic_blaster_loot.iff', 1, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedshotpistol') + mobileTemplate.setAttacks(attacks) + + lootPoolNames_1 = ['Junk'] + lootPoolChances_1 = [100] + lootGroupChance_1 = 100 + mobileTemplate.addToLootGroups(lootPoolNames_1,lootPoolChances_1,lootGroupChance_1) + + core.spawnService.addMobileTemplate('geonosian_technical_assistant', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/yavin4/geonosian_bunker/geonosian_worker.py b/scripts/mobiles/yavin4/geonosian_bunker/geonosian_worker.py new file mode 100644 index 00000000..5f12658a --- /dev/null +++ b/scripts/mobiles/yavin4/geonosian_bunker/geonosian_worker.py @@ -0,0 +1,44 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('geonosian_worker') + mobileTemplate.setLevel(85) + mobileTemplate.setDifficulty(1) + mobileTemplate.setAttackRange(15) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(1) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(True) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("geonosian bunker") + mobileTemplate.setAssistRange(12) + mobileTemplate.setStalker(True) + mobileTemplate.setOptionsBitmask(192) + + templates = Vector() + templates.add('object/mobile/shared_dressed_geonosian_commoner_01.iff') + templates.add('object/mobile/shared_dressed_geonosian_commoner_02.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/carbine/shared_geo_generic.iff', 1, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedshot') + mobileTemplate.setAttacks(attacks) + + lootPoolNames_1 = ['Junk'] + lootPoolChances_1 = [100] + lootGroupChance_1 = 100 + mobileTemplate.addToLootGroups(lootPoolNames_1,lootPoolChances_1,lootGroupChance_1) + + core.spawnService.addMobileTemplate('geonosian_worker', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/yavin4/geonosian_bunker/imperial_observer.py b/scripts/mobiles/yavin4/geonosian_bunker/imperial_observer.py new file mode 100644 index 00000000..1e294dd2 --- /dev/null +++ b/scripts/mobiles/yavin4/geonosian_bunker/imperial_observer.py @@ -0,0 +1,43 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('eow_geonosian_imperial_observer') + mobileTemplate.setLevel(88) + mobileTemplate.setDifficulty(1) + mobileTemplate.setAttackRange(15) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(1) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(True) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("geonosian bunker") + mobileTemplate.setAssistRange(12) + mobileTemplate.setStalker(True) + mobileTemplate.setOptionsBitmask(192) + + templates = Vector() + templates.add('object/mobile/shared_dressed_imperial_officer_m.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/carbine/shared_carbine_e11.iff', 1, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedshot') + mobileTemplate.setAttacks(attacks) + + lootPoolNames_1 = ['Junk'] + lootPoolChances_1 = [100] + lootGroupChance_1 = 100 + mobileTemplate.addToLootGroups(lootPoolNames_1,lootPoolChances_1,lootGroupChance_1) + + core.spawnService.addMobileTemplate('imperial_observer', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/yavin4/geonosian_bunker/mercenary_sentry.py b/scripts/mobiles/yavin4/geonosian_bunker/mercenary_sentry.py new file mode 100644 index 00000000..91861738 --- /dev/null +++ b/scripts/mobiles/yavin4/geonosian_bunker/mercenary_sentry.py @@ -0,0 +1,44 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('eow_geonosian_human_security_force') + mobileTemplate.setLevel(88) + mobileTemplate.setDifficulty(1) + mobileTemplate.setAttackRange(15) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(1) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(True) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("geonosian bunker") + mobileTemplate.setAssistRange(12) + mobileTemplate.setStalker(True) + mobileTemplate.setOptionsBitmask(192) + + templates = Vector() + templates.add('object/mobile/shared_dressed_mercenary_elite_hum_f.iff') + templates.add('object/mobile/shared_dressed_mercenary_elite_hum_m.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/carbine/shared_carbine_e11.iff', 1, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedshot') + mobileTemplate.setAttacks(attacks) + + lootPoolNames_1 = ['Junk'] + lootPoolChances_1 = [100] + lootGroupChance_1 = 100 + mobileTemplate.addToLootGroups(lootPoolNames_1,lootPoolChances_1,lootGroupChance_1) + + core.spawnService.addMobileTemplate('mercenary_sentry', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/yavin4/giant_angler.py b/scripts/mobiles/yavin4/giant_angler.py new file mode 100644 index 00000000..dce8ae78 --- /dev/null +++ b/scripts/mobiles/yavin4/giant_angler.py @@ -0,0 +1,40 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('giant_angler') + mobileTemplate.setLevel(73) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setMeatType("Insect Meat") + mobileTemplate.setMeatAmount(3) + mobileTemplate.setSocialGroup("angler") + mobileTemplate.setAssistRange(12) + mobileTemplate.setStalker(True) + mobileTemplate.setOptionsBitmask(192) + + templates = Vector() + templates.add('object/mobile/shared_giant_angler.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('giant_angler', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/yavin4/giant_crystal_snake.py b/scripts/mobiles/yavin4/giant_crystal_snake.py new file mode 100644 index 00000000..d0b81980 --- /dev/null +++ b/scripts/mobiles/yavin4/giant_crystal_snake.py @@ -0,0 +1,42 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('giant_crystal_snake') + mobileTemplate.setLevel(68) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setMeatType("Carnivore Meat") + mobileTemplate.setMeatAmount(7) + mobileTemplate.setHideType("Scaley Hide") + mobileTemplate.setHideAmount(4) + mobileTemplate.setSocialGroup("crystal snake") + mobileTemplate.setAssistRange(12) + mobileTemplate.setStalker(False) + mobileTemplate.setOptionsBitmask(192) + + templates = Vector() + templates.add('object/mobile/shared_giant_crystal_snake.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('giant_crystal_snake', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/yavin4/giant_gackle_bat.py b/scripts/mobiles/yavin4/giant_gackle_bat.py new file mode 100644 index 00000000..70440ef9 --- /dev/null +++ b/scripts/mobiles/yavin4/giant_gackle_bat.py @@ -0,0 +1,44 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('giant_gackle_bat') + mobileTemplate.setLevel(68) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setMeatType("Carnivore Meat") + mobileTemplate.setMeatAmount(7) + mobileTemplate.setHideType("Bristley Hide") + mobileTemplate.setHideAmount(5) + mobileTemplate.setBoneType("Mammal Bones") + mobileTemplate.setBoneAmount(6) + mobileTemplate.setSocialGroup("gacklebat") + mobileTemplate.setAssistRange(12) + mobileTemplate.setStalker(False) + mobileTemplate.setOptionsBitmask(192) + + templates = Vector() + templates.add('object/mobile/shared_giant_gackle_bat.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('giant_gackle_bat', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/yavin4/giant_mawgax.py b/scripts/mobiles/yavin4/giant_mawgax.py new file mode 100644 index 00000000..f07ab6b9 --- /dev/null +++ b/scripts/mobiles/yavin4/giant_mawgax.py @@ -0,0 +1,44 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('giant_mawgax') + mobileTemplate.setLevel(60) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setMeatType("Domesticated Meat") + mobileTemplate.setMeatAmount(135) + mobileTemplate.setHideType("Leathery Hide") + mobileTemplate.setHideAmount(85) + mobileTemplate.setBoneType("Avian Bones") + mobileTemplate.setBoneAmount(70) + mobileTemplate.setSocialGroup("mawgax") + mobileTemplate.setAssistRange(12) + mobileTemplate.setStalker(False) + mobileTemplate.setOptionsBitmask(128) + + templates = Vector() + templates.add('object/mobile/shared_giant_mawgax.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('giant_mawgax', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/yavin4/giant_spined_puc.py b/scripts/mobiles/yavin4/giant_spined_puc.py new file mode 100644 index 00000000..024bb1f1 --- /dev/null +++ b/scripts/mobiles/yavin4/giant_spined_puc.py @@ -0,0 +1,42 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('giant_spined_puc') + mobileTemplate.setLevel(71) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setMeatType("Reptile Meat") + mobileTemplate.setMeatAmount(7) + mobileTemplate.setHideType("Leathery Hide") + mobileTemplate.setHideAmount(7) + mobileTemplate.setSocialGroup("spined puc") + mobileTemplate.setAssistRange(12) + mobileTemplate.setStalker(False) + mobileTemplate.setOptionsBitmask(128) + + templates = Vector() + templates.add('object/mobile/shared_giant_spined_puc.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('giant_spined_puc', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/yavin4/giant_stintaril.py b/scripts/mobiles/yavin4/giant_stintaril.py new file mode 100644 index 00000000..502629e0 --- /dev/null +++ b/scripts/mobiles/yavin4/giant_stintaril.py @@ -0,0 +1,44 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('giant_stintaril') + mobileTemplate.setLevel(63) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setMeatType("Carnivore Meat") + mobileTemplate.setMeatAmount(9) + mobileTemplate.setHideType("Bristley Hide") + mobileTemplate.setHideAmount(7) + mobileTemplate.setBoneType("Mammal Bones") + mobileTemplate.setBoneAmount(6) + mobileTemplate.setSocialGroup("stintaril") + mobileTemplate.setAssistRange(12) + mobileTemplate.setStalker(False) + mobileTemplate.setOptionsBitmask(128) + + templates = Vector() + templates.add('object/mobile/shared_giant_stintaril.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('giant_stintaril', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/yavin4/giant_tanc_mite.py b/scripts/mobiles/yavin4/giant_tanc_mite.py new file mode 100644 index 00000000..9091d6ed --- /dev/null +++ b/scripts/mobiles/yavin4/giant_tanc_mite.py @@ -0,0 +1,40 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('giant_tanc_mite') + mobileTemplate.setLevel(68) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setMeatType("Insect Meat") + mobileTemplate.setMeatAmount(6) + mobileTemplate.setSocialGroup("tancmite") + mobileTemplate.setAssistRange(12) + mobileTemplate.setStalker(False) + mobileTemplate.setOptionsBitmask(128) + + templates = Vector() + templates.add('object/mobile/shared_giant_tanc_mite.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('giant_tanc_mite', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/yavin4/hooded_crystal_snake.py b/scripts/mobiles/yavin4/hooded_crystal_snake.py new file mode 100644 index 00000000..069f1cf3 --- /dev/null +++ b/scripts/mobiles/yavin4/hooded_crystal_snake.py @@ -0,0 +1,42 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('crystal_snake_hooded') + mobileTemplate.setLevel(62) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setMeatType("Carnivore Meat") + mobileTemplate.setMeatAmount(5) + mobileTemplate.setHideType("Scaley Hide") + mobileTemplate.setHideAmount(2) + mobileTemplate.setSocialGroup("crystal snake") + mobileTemplate.setAssistRange(12) + mobileTemplate.setStalker(False) + mobileTemplate.setOptionsBitmask(128) + + templates = Vector() + templates.add('object/mobile/shared_crystal_snake.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('hooded_crystal_snake', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/yavin4/hutt_expeditionary_force_leader.py b/scripts/mobiles/yavin4/hutt_expeditionary_force_leader.py new file mode 100644 index 00000000..7210b145 --- /dev/null +++ b/scripts/mobiles/yavin4/hutt_expeditionary_force_leader.py @@ -0,0 +1,43 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('hutt_expedition_force_leader') + mobileTemplate.setLevel(78) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(15) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(1) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(True) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("hutt") + mobileTemplate.setAssistRange(6) + mobileTemplate.setStalker(True) + mobileTemplate.setOptionsBitmask(192) + + templates = Vector() + templates.add('object/mobile/shared_dressed_hutt_expedition_force_leader.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/carbine/shared_carbine_e11.iff', 1, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedshot') + mobileTemplate.setAttacks(attacks) + + lootPoolNames_1 = ['Junk'] + lootPoolChances_1 = [100] + lootGroupChance_1 = 100 + mobileTemplate.addToLootGroups(lootPoolNames_1,lootPoolChances_1,lootGroupChance_1) + + core.spawnService.addMobileTemplate('hutt_expeditionary_force_leader', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/yavin4/hutt_expeditionary_force_member.py b/scripts/mobiles/yavin4/hutt_expeditionary_force_member.py new file mode 100644 index 00000000..d8f0dd31 --- /dev/null +++ b/scripts/mobiles/yavin4/hutt_expeditionary_force_member.py @@ -0,0 +1,43 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('hutt_expedition_force_member') + mobileTemplate.setLevel(78) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(15) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(1) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(True) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("hutt") + mobileTemplate.setAssistRange(6) + mobileTemplate.setStalker(True) + mobileTemplate.setOptionsBitmask(192) + + templates = Vector() + templates.add('object/mobile/shared_dressed_hutt_expedition_force_member.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/carbine/shared_carbine_e11.iff', 1, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedshot') + mobileTemplate.setAttacks(attacks) + + lootPoolNames_1 = ['Junk'] + lootPoolChances_1 = [100] + lootGroupChance_1 = 100 + mobileTemplate.addToLootGroups(lootPoolNames_1,lootPoolChances_1,lootGroupChance_1) + + core.spawnService.addMobileTemplate('hutt_expeditionary_force_member', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/yavin4/hutt_expeditionary_force_surveyor.py b/scripts/mobiles/yavin4/hutt_expeditionary_force_surveyor.py new file mode 100644 index 00000000..27a5ce1b --- /dev/null +++ b/scripts/mobiles/yavin4/hutt_expeditionary_force_surveyor.py @@ -0,0 +1,43 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('hutt_expedition_force_surveyor') + mobileTemplate.setLevel(77) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(15) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(1) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(True) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("hutt") + mobileTemplate.setAssistRange(6) + mobileTemplate.setStalker(True) + mobileTemplate.setOptionsBitmask(192) + + templates = Vector() + templates.add('object/mobile/shared_dressed_hutt_medic1_zabrak_female_01..iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/carbine/shared_carbine_e11.iff', 1, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedshot') + mobileTemplate.setAttacks(attacks) + + lootPoolNames_1 = ['Junk'] + lootPoolChances_1 = [100] + lootGroupChance_1 = 100 + mobileTemplate.addToLootGroups(lootPoolNames_1,lootPoolChances_1,lootGroupChance_1) + + core.spawnService.addMobileTemplate('hutt_expeditionary_force_sureyor', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/yavin4/kai_tok_bloodreaver.py b/scripts/mobiles/yavin4/kai_tok_bloodreaver.py new file mode 100644 index 00000000..4d849b6d --- /dev/null +++ b/scripts/mobiles/yavin4/kai_tok_bloodreaver.py @@ -0,0 +1,42 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('kai_tok_bloodreaver') + mobileTemplate.setLevel(64) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setHideType("Leathery Hide") + mobileTemplate.setHideAmount(41) + mobileTemplate.setBoneType("Avian Bones") + mobileTemplate.setBoneAmount(46) + mobileTemplate.setSocialGroup("kai tok") + mobileTemplate.setAssistRange(12) + mobileTemplate.setStalker(True) + mobileTemplate.setOptionsBitmask(192) + + templates = Vector() + templates.add('object/mobile/shared_kai_tok.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('kai_tok_bloodreaver', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/yavin4/kai_tok_prowler.py b/scripts/mobiles/yavin4/kai_tok_prowler.py new file mode 100644 index 00000000..c6b42cc1 --- /dev/null +++ b/scripts/mobiles/yavin4/kai_tok_prowler.py @@ -0,0 +1,42 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('kai_tok_prowler') + mobileTemplate.setLevel(65) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setHideType("Leathery Hide") + mobileTemplate.setHideAmount(41) + mobileTemplate.setBoneType("Avian Bones") + mobileTemplate.setBoneAmount(46) + mobileTemplate.setSocialGroup("kai tok") + mobileTemplate.setAssistRange(12) + mobileTemplate.setStalker(True) + mobileTemplate.setOptionsBitmask(192) + + templates = Vector() + templates.add('object/mobile/shared_kai_tok.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('kai_tok_prowler', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/yavin4/kai_tok_scavenger.py b/scripts/mobiles/yavin4/kai_tok_scavenger.py new file mode 100644 index 00000000..f434d75c --- /dev/null +++ b/scripts/mobiles/yavin4/kai_tok_scavenger.py @@ -0,0 +1,42 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('kai_tok_scavenger') + mobileTemplate.setLevel(65) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setHideType("Leathery Hide") + mobileTemplate.setHideAmount(41) + mobileTemplate.setBoneType("Avian Bones") + mobileTemplate.setBoneAmount(46) + mobileTemplate.setSocialGroup("kai tok") + mobileTemplate.setAssistRange(12) + mobileTemplate.setStalker(True) + mobileTemplate.setOptionsBitmask(192) + + templates = Vector() + templates.add('object/mobile/shared_kai_tok.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('kai_tok_scavenger', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/yavin4/kai_tok_slayer.py b/scripts/mobiles/yavin4/kai_tok_slayer.py new file mode 100644 index 00000000..3453be75 --- /dev/null +++ b/scripts/mobiles/yavin4/kai_tok_slayer.py @@ -0,0 +1,42 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('kai_tok_slayer') + mobileTemplate.setLevel(65) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(True) + mobileTemplate.setScale(1) + mobileTemplate.setHideType("Leathery Hide") + mobileTemplate.setHideAmount(41) + mobileTemplate.setBoneType("Avian Bones") + mobileTemplate.setBoneAmount(46) + mobileTemplate.setSocialGroup("kai tok") + mobileTemplate.setAssistRange(12) + mobileTemplate.setStalker(True) + mobileTemplate.setOptionsBitmask(192) + + templates = Vector() + templates.add('object/mobile/shared_kai_tok.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('kai_tok_slayer', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/yavin4/kliknik.py b/scripts/mobiles/yavin4/kliknik.py new file mode 100644 index 00000000..2e377321 --- /dev/null +++ b/scripts/mobiles/yavin4/kliknik.py @@ -0,0 +1,42 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('kliknik') + mobileTemplate.setLevel(78) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(12) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setMeatType("Carnivore Meat") + mobileTemplate.setMeatAmount(5) + mobileTemplate.setHideType("Scaley Hide") + mobileTemplate.setHideAmount(4) + mobileTemplate.setSocialGroup("kliknik") + mobileTemplate.setAssistRange(12) + mobileTemplate.setStalker(False) + mobileTemplate.setOptionsBitmask(192) + + templates = Vector() + templates.add('object/mobile/shared_kliknik.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureRangedAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('kliknik', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/yavin4/kliknik_dark_defender.py b/scripts/mobiles/yavin4/kliknik_dark_defender.py new file mode 100644 index 00000000..cb9101f7 --- /dev/null +++ b/scripts/mobiles/yavin4/kliknik_dark_defender.py @@ -0,0 +1,42 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('kliknik_dark_defender') + mobileTemplate.setLevel(74) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(12) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setMeatType("Carnivore Meat") + mobileTemplate.setMeatAmount(5) + mobileTemplate.setHideType("Scaley Hide") + mobileTemplate.setHideAmount(4) + mobileTemplate.setSocialGroup("kliknik") + mobileTemplate.setAssistRange(12) + mobileTemplate.setStalker(False) + mobileTemplate.setOptionsBitmask(192) + + templates = Vector() + templates.add('object/mobile/shared_kliknik.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureRangedAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('kliknik_dark_defender', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/yavin4/kliknik_dark_hunter.py b/scripts/mobiles/yavin4/kliknik_dark_hunter.py new file mode 100644 index 00000000..106e16fe --- /dev/null +++ b/scripts/mobiles/yavin4/kliknik_dark_hunter.py @@ -0,0 +1,42 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('kliknik_dark_hunter') + mobileTemplate.setLevel(74) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(12) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setMeatType("Carnivore Meat") + mobileTemplate.setMeatAmount(6) + mobileTemplate.setHideType("Scaley Hide") + mobileTemplate.setHideAmount(4) + mobileTemplate.setSocialGroup("kliknik") + mobileTemplate.setAssistRange(12) + mobileTemplate.setStalker(False) + mobileTemplate.setOptionsBitmask(192) + + templates = Vector() + templates.add('object/mobile/shared_kliknik.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureRangedAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('kliknik_dark_hunter', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/yavin4/kliknik_dark_queen.py b/scripts/mobiles/yavin4/kliknik_dark_queen.py new file mode 100644 index 00000000..03178fca --- /dev/null +++ b/scripts/mobiles/yavin4/kliknik_dark_queen.py @@ -0,0 +1,42 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('kliknik_dark_queen') + mobileTemplate.setLevel(75) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(12) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setMeatType("Carnivore Meat") + mobileTemplate.setMeatAmount(7) + mobileTemplate.setHideType("Scaley Hide") + mobileTemplate.setHideAmount(4) + mobileTemplate.setSocialGroup("kliknik") + mobileTemplate.setAssistRange(12) + mobileTemplate.setStalker(False) + mobileTemplate.setOptionsBitmask(192) + + templates = Vector() + templates.add('object/mobile/shared_kliknik_queen.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureRangedAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('kliknik_dark_queen', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/yavin4/kliknik_dark_warrior.py b/scripts/mobiles/yavin4/kliknik_dark_warrior.py new file mode 100644 index 00000000..5611a22f --- /dev/null +++ b/scripts/mobiles/yavin4/kliknik_dark_warrior.py @@ -0,0 +1,42 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('kliknik_dark_warrior') + mobileTemplate.setLevel(74) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(12) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(True) + mobileTemplate.setScale(1) + mobileTemplate.setMeatType("Carnivore Meat") + mobileTemplate.setMeatAmount(6) + mobileTemplate.setHideType("Scaley Hide") + mobileTemplate.setHideAmount(4) + mobileTemplate.setSocialGroup("kliknik") + mobileTemplate.setAssistRange(12) + mobileTemplate.setStalker(False) + mobileTemplate.setOptionsBitmask(192) + + templates = Vector() + templates.add('object/mobile/shared_kliknik.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureRangedAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('kliknik_dark_warrior', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/yavin4/kliknik_hatchling.py b/scripts/mobiles/yavin4/kliknik_hatchling.py new file mode 100644 index 00000000..769bfd71 --- /dev/null +++ b/scripts/mobiles/yavin4/kliknik_hatchling.py @@ -0,0 +1,42 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('kliknik_hatchling') + mobileTemplate.setLevel(73) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setMeatType("Carnivore Meat") + mobileTemplate.setMeatAmount(1) + mobileTemplate.setHideType("Scaley Hide") + mobileTemplate.setHideAmount(4) + mobileTemplate.setSocialGroup("kliknik") + mobileTemplate.setAssistRange(12) + mobileTemplate.setStalker(False) + mobileTemplate.setOptionsBitmask(128) + + templates = Vector() + templates.add('object/mobile/shared_kliknik_hatchling.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('kliknik_hatchling', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/yavin4/kliknik_hunter.py b/scripts/mobiles/yavin4/kliknik_hunter.py new file mode 100644 index 00000000..1a67f5da --- /dev/null +++ b/scripts/mobiles/yavin4/kliknik_hunter.py @@ -0,0 +1,42 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('kliknik_hunter') + mobileTemplate.setLevel(77) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(12) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(True) + mobileTemplate.setScale(1) + mobileTemplate.setMeatType("Carnivore Meat") + mobileTemplate.setMeatAmount(6) + mobileTemplate.setHideType("Scaley Hide") + mobileTemplate.setHideAmount(4) + mobileTemplate.setSocialGroup("kliknik") + mobileTemplate.setAssistRange(12) + mobileTemplate.setStalker(False) + mobileTemplate.setOptionsBitmask(192) + + templates = Vector() + templates.add('object/mobile/shared_kliknik.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureRangedAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('kliknik_hunter', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/yavin4/kliknik_mantis.py b/scripts/mobiles/yavin4/kliknik_mantis.py new file mode 100644 index 00000000..80057620 --- /dev/null +++ b/scripts/mobiles/yavin4/kliknik_mantis.py @@ -0,0 +1,42 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('kliknik_mantis') + mobileTemplate.setLevel(74) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(12) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setMeatType("Carnivore Meat") + mobileTemplate.setMeatAmount(5) + mobileTemplate.setHideType("Scaley Hide") + mobileTemplate.setHideAmount(4) + mobileTemplate.setSocialGroup("kliknik") + mobileTemplate.setAssistRange(12) + mobileTemplate.setStalker(False) + mobileTemplate.setOptionsBitmask(192) + + templates = Vector() + templates.add('object/mobile/shared_kliknik.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureRangedAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('kliknik_mantis', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/yavin4/kliknik_queen.py b/scripts/mobiles/yavin4/kliknik_queen.py new file mode 100644 index 00000000..7d716284 --- /dev/null +++ b/scripts/mobiles/yavin4/kliknik_queen.py @@ -0,0 +1,42 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('kliknik_queen') + mobileTemplate.setLevel(80) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(12) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setMeatType("Carnivore Meat") + mobileTemplate.setMeatAmount(7) + mobileTemplate.setHideType("Scaley Hide") + mobileTemplate.setHideAmount(4) + mobileTemplate.setSocialGroup("kliknik") + mobileTemplate.setAssistRange(12) + mobileTemplate.setStalker(False) + mobileTemplate.setOptionsBitmask(192) + + templates = Vector() + templates.add('object/mobile/shared_kliknik_queen.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureRangedAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('kliknik_queen', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/yavin4/kliknik_queen_harvester.py b/scripts/mobiles/yavin4/kliknik_queen_harvester.py new file mode 100644 index 00000000..69b61823 --- /dev/null +++ b/scripts/mobiles/yavin4/kliknik_queen_harvester.py @@ -0,0 +1,42 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('kliknik_queen_harvester') + mobileTemplate.setLevel(78) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(12) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setMeatType("Carnivore Meat") + mobileTemplate.setMeatAmount(15) + mobileTemplate.setHideType("Scaley Hide") + mobileTemplate.setHideAmount(4) + mobileTemplate.setSocialGroup("kliknik") + mobileTemplate.setAssistRange(12) + mobileTemplate.setStalker(False) + mobileTemplate.setOptionsBitmask(192) + + templates = Vector() + templates.add('object/mobile/shared_kliknik.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureRangedAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('kliknik_queen_harvester', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/yavin4/kliknik_scout.py b/scripts/mobiles/yavin4/kliknik_scout.py new file mode 100644 index 00000000..1b473e00 --- /dev/null +++ b/scripts/mobiles/yavin4/kliknik_scout.py @@ -0,0 +1,42 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('kliknik_scout') + mobileTemplate.setLevel(77) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(12) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setMeatType("Carnivore Meat") + mobileTemplate.setMeatAmount(6) + mobileTemplate.setHideType("Scaley Hide") + mobileTemplate.setHideAmount(4) + mobileTemplate.setSocialGroup("kliknik") + mobileTemplate.setAssistRange(12) + mobileTemplate.setStalker(False) + mobileTemplate.setOptionsBitmask(192) + + templates = Vector() + templates.add('object/mobile/shared_kliknik_hue.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureRangedAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('kliknik_scout', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/yavin4/kliknik_shredder_guardian.py b/scripts/mobiles/yavin4/kliknik_shredder_guardian.py new file mode 100644 index 00000000..9b2ee777 --- /dev/null +++ b/scripts/mobiles/yavin4/kliknik_shredder_guardian.py @@ -0,0 +1,42 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('kliknik_shredder_guardian') + mobileTemplate.setLevel(73) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(12) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(True) + mobileTemplate.setScale(1) + mobileTemplate.setMeatType("Carnivore Meat") + mobileTemplate.setMeatAmount(15) + mobileTemplate.setHideType("Scaley Hide") + mobileTemplate.setHideAmount(4) + mobileTemplate.setSocialGroup("kliknik") + mobileTemplate.setAssistRange(12) + mobileTemplate.setStalker(False) + mobileTemplate.setOptionsBitmask(192) + + templates = Vector() + templates.add('object/mobile/shared_kliknik_hue.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureRangedAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('kliknik_shredder_guardian', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/yavin4/kliknik_warrior.py b/scripts/mobiles/yavin4/kliknik_warrior.py new file mode 100644 index 00000000..76065513 --- /dev/null +++ b/scripts/mobiles/yavin4/kliknik_warrior.py @@ -0,0 +1,42 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('kliknik_warrior') + mobileTemplate.setLevel(77) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(12) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setMeatType("Carnivore Meat") + mobileTemplate.setMeatAmount(6) + mobileTemplate.setHideType("Scaley Hide") + mobileTemplate.setHideAmount(4) + mobileTemplate.setSocialGroup("kliknik") + mobileTemplate.setAssistRange(12) + mobileTemplate.setStalker(False) + mobileTemplate.setOptionsBitmask(192) + + templates = Vector() + templates.add('object/mobile/shared_kliknik.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureRangedAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('kliknik_warrior', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/yavin4/kliknik_worker.py b/scripts/mobiles/yavin4/kliknik_worker.py new file mode 100644 index 00000000..f8539994 --- /dev/null +++ b/scripts/mobiles/yavin4/kliknik_worker.py @@ -0,0 +1,42 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('kliknik_worker') + mobileTemplate.setLevel(78) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(12) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setMeatType("Carnivore Meat") + mobileTemplate.setMeatAmount(6) + mobileTemplate.setHideType("Scaley Hide") + mobileTemplate.setHideAmount(4) + mobileTemplate.setSocialGroup("kliknik") + mobileTemplate.setAssistRange(12) + mobileTemplate.setStalker(False) + mobileTemplate.setOptionsBitmask(192) + + templates = Vector() + templates.add('object/mobile/shared_kliknik_hue.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureRangedAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('kliknik_worker', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/yavin4/lurking_angler.py b/scripts/mobiles/yavin4/lurking_angler.py new file mode 100644 index 00000000..2f35e65b --- /dev/null +++ b/scripts/mobiles/yavin4/lurking_angler.py @@ -0,0 +1,40 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('lurking_angler') + mobileTemplate.setLevel(67) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(12) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setMeatType("Insect Meat") + mobileTemplate.setMeatAmount(4) + mobileTemplate.setSocialGroup("angler") + mobileTemplate.setAssistRange(12) + mobileTemplate.setStalker(True) + mobileTemplate.setOptionsBitmask(192) + + templates = Vector() + templates.add('object/mobile/shared_angler_hue.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureRangedAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('lurking_angler', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/yavin4/mad_angler.py b/scripts/mobiles/yavin4/mad_angler.py new file mode 100644 index 00000000..0e2517a1 --- /dev/null +++ b/scripts/mobiles/yavin4/mad_angler.py @@ -0,0 +1,40 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('mad_angler') + mobileTemplate.setLevel(70) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(12) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(True) + mobileTemplate.setScale(1) + mobileTemplate.setMeatType("Insect Meat") + mobileTemplate.setMeatAmount(3) + mobileTemplate.setSocialGroup("angler") + mobileTemplate.setAssistRange(12) + mobileTemplate.setStalker(True) + mobileTemplate.setOptionsBitmask(192) + + templates = Vector() + templates.add('object/mobile/shared_angler_hue.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureRangedAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('mad_angler', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/yavin4/majestic_whisper_bird.py b/scripts/mobiles/yavin4/majestic_whisper_bird.py new file mode 100644 index 00000000..caf2f682 --- /dev/null +++ b/scripts/mobiles/yavin4/majestic_whisper_bird.py @@ -0,0 +1,42 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('whisper_bird_majestic') + mobileTemplate.setLevel(56) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setMeatType("Avian Meat") + mobileTemplate.setMeatAmount(65) + mobileTemplate.setBoneType("Avian Bones") + mobileTemplate.setBoneAmount(40) + mobileTemplate.setSocialGroup("whisperbird") + mobileTemplate.setAssistRange(12) + mobileTemplate.setStalker(False) + mobileTemplate.setOptionsBitmask(128) + + templates = Vector() + templates.add('object/mobile/shared_whisper_bird.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('majestic_whisper_bird', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/yavin4/male_mamien.py b/scripts/mobiles/yavin4/male_mamien.py new file mode 100644 index 00000000..dbe95a91 --- /dev/null +++ b/scripts/mobiles/yavin4/male_mamien.py @@ -0,0 +1,44 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('mamien_male') + mobileTemplate.setLevel(68) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setMeatType("Wild Meat") + mobileTemplate.setMeatAmount(45) + mobileTemplate.setHideType("Wooly Hide") + mobileTemplate.setHideAmount(20) + mobileTemplate.setBoneType("Mammal Bones") + mobileTemplate.setBoneAmount(20) + mobileTemplate.setSocialGroup("mamien") + mobileTemplate.setAssistRange(12) + mobileTemplate.setStalker(False) + mobileTemplate.setOptionsBitmask(128) + + templates = Vector() + templates.add('object/mobile/shared_mamien.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('male_mamien', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/yavin4/male_mawgax.py b/scripts/mobiles/yavin4/male_mawgax.py new file mode 100644 index 00000000..89608fec --- /dev/null +++ b/scripts/mobiles/yavin4/male_mawgax.py @@ -0,0 +1,44 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('mawgax_male') + mobileTemplate.setLevel(60) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setMeatType("Domesticated Meat") + mobileTemplate.setMeatAmount(100) + mobileTemplate.setHideType("Leathery Hide") + mobileTemplate.setHideAmount(70) + mobileTemplate.setBoneType("Avian Bones") + mobileTemplate.setBoneAmount(55) + mobileTemplate.setSocialGroup("mawgax") + mobileTemplate.setAssistRange(12) + mobileTemplate.setStalker(False) + mobileTemplate.setOptionsBitmask(128) + + templates = Vector() + templates.add('object/mobile/shared_mawgax.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('male_mawgax', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/yavin4/male_tybis.py b/scripts/mobiles/yavin4/male_tybis.py new file mode 100644 index 00000000..5b82b3ce --- /dev/null +++ b/scripts/mobiles/yavin4/male_tybis.py @@ -0,0 +1,44 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('tybis_male') + mobileTemplate.setLevel(78) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setMeatType("Herbivore Meat") + mobileTemplate.setMeatAmount(275) + mobileTemplate.setHideType("Bristley Hide") + mobileTemplate.setHideAmount(200) + mobileTemplate.setBoneType("Mammal Bones") + mobileTemplate.setBoneAmount(125) + mobileTemplate.setSocialGroup("tybis") + mobileTemplate.setAssistRange(12) + mobileTemplate.setStalker(False) + mobileTemplate.setOptionsBitmask(128) + + templates = Vector() + templates.add('object/mobile/shared_tybis.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('male_tybis', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/yavin4/mamien_junglelord.py b/scripts/mobiles/yavin4/mamien_junglelord.py new file mode 100644 index 00000000..ad610222 --- /dev/null +++ b/scripts/mobiles/yavin4/mamien_junglelord.py @@ -0,0 +1,44 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('mamien_junglelord') + mobileTemplate.setLevel(66) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(True) + mobileTemplate.setScale(1) + mobileTemplate.setMeatType("Wild Meat") + mobileTemplate.setMeatAmount(18) + mobileTemplate.setHideType("Wooly Hide") + mobileTemplate.setHideAmount(18) + mobileTemplate.setBoneType("Mammal Bones") + mobileTemplate.setBoneAmount(18) + mobileTemplate.setSocialGroup("mamien") + mobileTemplate.setAssistRange(12) + mobileTemplate.setStalker(False) + mobileTemplate.setOptionsBitmask(128) + + templates = Vector() + templates.add('object/mobile/shared_mamien.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('mamien_junglelord', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/yavin4/mamien_matriarch.py b/scripts/mobiles/yavin4/mamien_matriarch.py new file mode 100644 index 00000000..d76a707c --- /dev/null +++ b/scripts/mobiles/yavin4/mamien_matriarch.py @@ -0,0 +1,44 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('mamien_matriarch') + mobileTemplate.setLevel(62) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(True) + mobileTemplate.setScale(1) + mobileTemplate.setMeatType("Wild Meat") + mobileTemplate.setMeatAmount(17) + mobileTemplate.setHideType("Wooly Hide") + mobileTemplate.setHideAmount(20) + mobileTemplate.setBoneType("Mammal Bones") + mobileTemplate.setBoneAmount(20) + mobileTemplate.setSocialGroup("mamien") + mobileTemplate.setAssistRange(12) + mobileTemplate.setStalker(False) + mobileTemplate.setOptionsBitmask(128) + + templates = Vector() + templates.add('object/mobile/shared_mamien.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('mamien_matriarch', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/yavin4/mamien_youth.py b/scripts/mobiles/yavin4/mamien_youth.py new file mode 100644 index 00000000..c503262c --- /dev/null +++ b/scripts/mobiles/yavin4/mamien_youth.py @@ -0,0 +1,44 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('mamien_youth') + mobileTemplate.setLevel(66) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(.7) + mobileTemplate.setMeatType("Wild Meat") + mobileTemplate.setMeatAmount(35) + mobileTemplate.setHideType("Wooly Hide") + mobileTemplate.setHideAmount(20) + mobileTemplate.setBoneType("Mammal Bones") + mobileTemplate.setBoneAmount(20) + mobileTemplate.setSocialGroup("mamien") + mobileTemplate.setAssistRange(12) + mobileTemplate.setStalker(False) + mobileTemplate.setOptionsBitmask(128) + + templates = Vector() + templates.add('object/mobile/shared_mamien.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('mamien_youth', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/yavin4/mawgax.py b/scripts/mobiles/yavin4/mawgax.py new file mode 100644 index 00000000..9f4b948c --- /dev/null +++ b/scripts/mobiles/yavin4/mawgax.py @@ -0,0 +1,44 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('bio_engineered_mawgax') + mobileTemplate.setLevel(60) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setMeatType("Domesticated Meat") + mobileTemplate.setMeatAmount(100) + mobileTemplate.setHideType("Leathery Hide") + mobileTemplate.setHideAmount(70) + mobileTemplate.setBoneType("Avian Bones") + mobileTemplate.setBoneAmount(55) + mobileTemplate.setSocialGroup("mawgax") + mobileTemplate.setAssistRange(12) + mobileTemplate.setStalker(False) + mobileTemplate.setOptionsBitmask(128) + + templates = Vector() + templates.add('object/mobile/shared_mawgax.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('mawgax', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/yavin4/mawgax_raptor.py b/scripts/mobiles/yavin4/mawgax_raptor.py new file mode 100644 index 00000000..7aebbcfe --- /dev/null +++ b/scripts/mobiles/yavin4/mawgax_raptor.py @@ -0,0 +1,44 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('mawgax_raptor') + mobileTemplate.setLevel(50) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setMeatType("Domesticated Meat") + mobileTemplate.setMeatAmount(100) + mobileTemplate.setHideType("Leathery Hide") + mobileTemplate.setHideAmount(70) + mobileTemplate.setBoneType("Avian Bones") + mobileTemplate.setBoneAmount(55) + mobileTemplate.setSocialGroup("mawgax") + mobileTemplate.setAssistRange(12) + mobileTemplate.setStalker(False) + mobileTemplate.setOptionsBitmask(128) + + templates = Vector() + templates.add('object/mobile/shared_mawgax.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('mawgax_raptor', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/yavin4/mawgax_youth.py b/scripts/mobiles/yavin4/mawgax_youth.py new file mode 100644 index 00000000..f4443690 --- /dev/null +++ b/scripts/mobiles/yavin4/mawgax_youth.py @@ -0,0 +1,44 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('mawgax_youth') + mobileTemplate.setLevel(60) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setMeatType("Domesticated Meat") + mobileTemplate.setMeatAmount(90) + mobileTemplate.setHideType("Leathery Hide") + mobileTemplate.setHideAmount(60) + mobileTemplate.setBoneType("Avian Bones") + mobileTemplate.setBoneAmount(45) + mobileTemplate.setSocialGroup("mawgax") + mobileTemplate.setAssistRange(12) + mobileTemplate.setStalker(False) + mobileTemplate.setOptionsBitmask(128) + + templates = Vector() + templates.add('object/mobile/shared_mawgax_youth.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('mawgax_youth', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/yavin4/ominous_skreeg.py b/scripts/mobiles/yavin4/ominous_skreeg.py new file mode 100644 index 00000000..78d9ce73 --- /dev/null +++ b/scripts/mobiles/yavin4/ominous_skreeg.py @@ -0,0 +1,44 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('skreeg_ominous') + mobileTemplate.setLevel(62) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setMeatType("Herbivore Meat") + mobileTemplate.setMeatAmount(5) + mobileTemplate.setHideType("Bristley Hide") + mobileTemplate.setHideAmount(9) + mobileTemplate.setBoneType("Mammal Bones") + mobileTemplate.setBoneAmount(7) + mobileTemplate.setSocialGroup("skreeg") + mobileTemplate.setAssistRange(12) + mobileTemplate.setStalker(False) + mobileTemplate.setOptionsBitmask(128) + + templates = Vector() + templates.add('object/mobile/shared_skreeg.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('ominous_skreeg', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/yavin4/poisinous_spined_puc.py b/scripts/mobiles/yavin4/poisinous_spined_puc.py new file mode 100644 index 00000000..d5388f03 --- /dev/null +++ b/scripts/mobiles/yavin4/poisinous_spined_puc.py @@ -0,0 +1,42 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('spined_puc_poison') + mobileTemplate.setLevel(65) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setMeatType("Reptile Meat") + mobileTemplate.setMeatAmount(7) + mobileTemplate.setHideType("Leathery Hide") + mobileTemplate.setHideAmount(7) + mobileTemplate.setSocialGroup("spined puc") + mobileTemplate.setAssistRange(12) + mobileTemplate.setStalker(False) + mobileTemplate.setOptionsBitmask(128) + + templates = Vector() + templates.add('object/mobile/shared_spined_puc.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('poisinous_spined_puc', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/yavin4/puny_gackle_bat.py b/scripts/mobiles/yavin4/puny_gackle_bat.py new file mode 100644 index 00000000..f4198003 --- /dev/null +++ b/scripts/mobiles/yavin4/puny_gackle_bat.py @@ -0,0 +1,44 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('puny_gackle_bat') + mobileTemplate.setLevel(64) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setMeatType("Carnivore Meat") + mobileTemplate.setMeatAmount(2) + mobileTemplate.setHideType("Bristley Hide") + mobileTemplate.setHideAmount(1) + mobileTemplate.setBoneType("Mammal Bones") + mobileTemplate.setBoneAmount(1) + mobileTemplate.setSocialGroup("gacklebat") + mobileTemplate.setAssistRange(12) + mobileTemplate.setStalker(False) + mobileTemplate.setOptionsBitmask(192) + + templates = Vector() + templates.add('object/mobile/shared_puny_gackle_bat.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('puny_gackle_bat', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/yavin4/puny_stintaril.py b/scripts/mobiles/yavin4/puny_stintaril.py new file mode 100644 index 00000000..583b4d50 --- /dev/null +++ b/scripts/mobiles/yavin4/puny_stintaril.py @@ -0,0 +1,44 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('puny_stintaril') + mobileTemplate.setLevel(61) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setMeatType("Carnivore Meat") + mobileTemplate.setMeatAmount(2) + mobileTemplate.setHideType("Bristley Hide") + mobileTemplate.setHideAmount(1) + mobileTemplate.setBoneType("Mammal Bones") + mobileTemplate.setBoneAmount(1) + mobileTemplate.setSocialGroup("stintaril") + mobileTemplate.setAssistRange(12) + mobileTemplate.setStalker(False) + mobileTemplate.setOptionsBitmask(128) + + templates = Vector() + templates.add('object/mobile/shared_puny_stintaril.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('puny_stintaril', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/yavin4/puny_tanc_mite.py b/scripts/mobiles/yavin4/puny_tanc_mite.py new file mode 100644 index 00000000..f080440f --- /dev/null +++ b/scripts/mobiles/yavin4/puny_tanc_mite.py @@ -0,0 +1,40 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('puny_tanc_mite') + mobileTemplate.setLevel(66) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setMeatType("Insect Meat") + mobileTemplate.setMeatAmount(2) + mobileTemplate.setSocialGroup("tancmite") + mobileTemplate.setAssistRange(12) + mobileTemplate.setStalker(False) + mobileTemplate.setOptionsBitmask(128) + + templates = Vector() + templates.add('object/mobile/shared_puny_tanc_mite.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('puny_tanc_mite', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/yavin4/ravaging_gackle_bat.py b/scripts/mobiles/yavin4/ravaging_gackle_bat.py new file mode 100644 index 00000000..d8f3f6e6 --- /dev/null +++ b/scripts/mobiles/yavin4/ravaging_gackle_bat.py @@ -0,0 +1,44 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('ravaging_gackle_bat') + mobileTemplate.setLevel(68) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setMeatType("Carnivore Meat") + mobileTemplate.setMeatAmount(5) + mobileTemplate.setHideType("Bristley Hide") + mobileTemplate.setHideAmount(3) + mobileTemplate.setBoneType("Mammal Bones") + mobileTemplate.setBoneAmount(4) + mobileTemplate.setSocialGroup("gacklebat") + mobileTemplate.setAssistRange(12) + mobileTemplate.setStalker(False) + mobileTemplate.setOptionsBitmask(192) + + templates = Vector() + templates.add('object/mobile/shared_gackle_bat.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('ravaging_gackle_bat', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/yavin4/skreeg_adolescent.py b/scripts/mobiles/yavin4/skreeg_adolescent.py new file mode 100644 index 00000000..f35bbd7b --- /dev/null +++ b/scripts/mobiles/yavin4/skreeg_adolescent.py @@ -0,0 +1,44 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('skreeg_adolescent') + mobileTemplate.setLevel(59) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setMeatType("Herbivore Meat") + mobileTemplate.setMeatAmount(12) + mobileTemplate.setHideType("Bristley Hide") + mobileTemplate.setHideAmount(9) + mobileTemplate.setBoneType("Mammal Bones") + mobileTemplate.setBoneAmount(7) + mobileTemplate.setSocialGroup("skreeg") + mobileTemplate.setAssistRange(12) + mobileTemplate.setStalker(False) + mobileTemplate.setOptionsBitmask(192) + + templates = Vector() + templates.add('object/mobile/shared_skreeg_adolescent.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('skreeg_adolescent', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/yavin4/skreeg_female.py b/scripts/mobiles/yavin4/skreeg_female.py new file mode 100644 index 00000000..e66eeb3b --- /dev/null +++ b/scripts/mobiles/yavin4/skreeg_female.py @@ -0,0 +1,44 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('skreeg_female') + mobileTemplate.setLevel(65) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setMeatType("Herbivore Meat") + mobileTemplate.setMeatAmount(5) + mobileTemplate.setHideType("Bristley Hide") + mobileTemplate.setHideAmount(9) + mobileTemplate.setBoneType("Mammal Bones") + mobileTemplate.setBoneAmount(7) + mobileTemplate.setSocialGroup("skreeg") + mobileTemplate.setAssistRange(12) + mobileTemplate.setStalker(False) + mobileTemplate.setOptionsBitmask(192) + + templates = Vector() + templates.add('object/mobile/shared_skreeg.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('skreeg_female', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/yavin4/skreeg_gatherer.py b/scripts/mobiles/yavin4/skreeg_gatherer.py new file mode 100644 index 00000000..e5490848 --- /dev/null +++ b/scripts/mobiles/yavin4/skreeg_gatherer.py @@ -0,0 +1,44 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('skreeg_gatherer') + mobileTemplate.setLevel(66) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setMeatType("Herbivore Meat") + mobileTemplate.setMeatAmount(18) + mobileTemplate.setHideType("Bristley Hide") + mobileTemplate.setHideAmount(9) + mobileTemplate.setBoneType("Mammal Bones") + mobileTemplate.setBoneAmount(7) + mobileTemplate.setSocialGroup("skreeg") + mobileTemplate.setAssistRange(12) + mobileTemplate.setStalker(False) + mobileTemplate.setOptionsBitmask(128) + + templates = Vector() + templates.add('object/mobile/shared_skreeg.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('skreeg_gatherer', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/yavin4/skreeg_hunter.py b/scripts/mobiles/yavin4/skreeg_hunter.py new file mode 100644 index 00000000..347c7f8b --- /dev/null +++ b/scripts/mobiles/yavin4/skreeg_hunter.py @@ -0,0 +1,44 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('skreeg_hunter') + mobileTemplate.setLevel(66) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(True) + mobileTemplate.setScale(1) + mobileTemplate.setMeatType("Herbivore Meat") + mobileTemplate.setMeatAmount(5) + mobileTemplate.setHideType("Bristley Hide") + mobileTemplate.setHideAmount(9) + mobileTemplate.setBoneType("Mammal Bones") + mobileTemplate.setBoneAmount(7) + mobileTemplate.setSocialGroup("skreeg") + mobileTemplate.setAssistRange(12) + mobileTemplate.setStalker(False) + mobileTemplate.setOptionsBitmask(192) + + templates = Vector() + templates.add('object/mobile/shared_skreeg.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('skreeg_hunter', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/yavin4/skreeg_infant.py b/scripts/mobiles/yavin4/skreeg_infant.py new file mode 100644 index 00000000..2d2097e3 --- /dev/null +++ b/scripts/mobiles/yavin4/skreeg_infant.py @@ -0,0 +1,44 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('skreeg_infant') + mobileTemplate.setLevel(59) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setMeatType("Herbivore Meat") + mobileTemplate.setMeatAmount(15) + mobileTemplate.setHideType("Bristley Hide") + mobileTemplate.setHideAmount(9) + mobileTemplate.setBoneType("Mammal Bones") + mobileTemplate.setBoneAmount(7) + mobileTemplate.setSocialGroup("skreeg") + mobileTemplate.setAssistRange(12) + mobileTemplate.setStalker(False) + mobileTemplate.setOptionsBitmask(128) + + templates = Vector() + templates.add('object/mobile/shared_skreeg_infant.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('skreeg_infant', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/yavin4/skreeg_male.py b/scripts/mobiles/yavin4/skreeg_male.py new file mode 100644 index 00000000..00e62267 --- /dev/null +++ b/scripts/mobiles/yavin4/skreeg_male.py @@ -0,0 +1,44 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('skreeg_male') + mobileTemplate.setLevel(66) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setMeatType("Herbivore Meat") + mobileTemplate.setMeatAmount(5) + mobileTemplate.setHideType("Bristley Hide") + mobileTemplate.setHideAmount(9) + mobileTemplate.setBoneType("Mammal Bones") + mobileTemplate.setBoneAmount(7) + mobileTemplate.setSocialGroup("skreeg") + mobileTemplate.setAssistRange(12) + mobileTemplate.setStalker(False) + mobileTemplate.setOptionsBitmask(192) + + templates = Vector() + templates.add('object/mobile/shared_skreeg.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('skreeg_male', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/yavin4/skreeg_scout.py b/scripts/mobiles/yavin4/skreeg_scout.py new file mode 100644 index 00000000..c25350c3 --- /dev/null +++ b/scripts/mobiles/yavin4/skreeg_scout.py @@ -0,0 +1,44 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('skreeg_scout') + mobileTemplate.setLevel(66) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setMeatType("Herbivore Meat") + mobileTemplate.setMeatAmount(5) + mobileTemplate.setHideType("Bristley Hide") + mobileTemplate.setHideAmount(9) + mobileTemplate.setBoneType("Mammal Bones") + mobileTemplate.setBoneAmount(7) + mobileTemplate.setSocialGroup("skreeg") + mobileTemplate.setAssistRange(12) + mobileTemplate.setStalker(False) + mobileTemplate.setOptionsBitmask(192) + + templates = Vector() + templates.add('object/mobile/shared_skreeg.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('skreeg_scout', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/yavin4/skreeg_warrior.py b/scripts/mobiles/yavin4/skreeg_warrior.py new file mode 100644 index 00000000..52eecddd --- /dev/null +++ b/scripts/mobiles/yavin4/skreeg_warrior.py @@ -0,0 +1,44 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('skreeg_warrior') + mobileTemplate.setLevel(66) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setMeatType("Herbivore Meat") + mobileTemplate.setMeatAmount(5) + mobileTemplate.setHideType("Bristley Hide") + mobileTemplate.setHideAmount(9) + mobileTemplate.setBoneType("Mammal Bones") + mobileTemplate.setBoneAmount(7) + mobileTemplate.setSocialGroup("skreeg") + mobileTemplate.setAssistRange(12) + mobileTemplate.setStalker(False) + mobileTemplate.setOptionsBitmask(192) + + templates = Vector() + templates.add('object/mobile/shared_skreeg_hue.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('skreeg_warrior', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/yavin4/skreeg_warrior_elite.py b/scripts/mobiles/yavin4/skreeg_warrior_elite.py new file mode 100644 index 00000000..20e92498 --- /dev/null +++ b/scripts/mobiles/yavin4/skreeg_warrior_elite.py @@ -0,0 +1,44 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('skreeg_warrior_elite') + mobileTemplate.setLevel(67) + mobileTemplate.setDifficulty(1) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setMeatType("Herbivore Meat") + mobileTemplate.setMeatAmount(5) + mobileTemplate.setHideType("Bristley Hide") + mobileTemplate.setHideAmount(9) + mobileTemplate.setBoneType("Mammal Bones") + mobileTemplate.setBoneAmount(7) + mobileTemplate.setSocialGroup("skreeg") + mobileTemplate.setAssistRange(12) + mobileTemplate.setStalker(False) + mobileTemplate.setOptionsBitmask(128) + + templates = Vector() + templates.add('object/mobile/shared_skreeg_hue.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('skreeg_warrior_elite', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/yavin4/smuggler_member.py b/scripts/mobiles/yavin4/smuggler_member.py new file mode 100644 index 00000000..56b8e91a --- /dev/null +++ b/scripts/mobiles/yavin4/smuggler_member.py @@ -0,0 +1,45 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('yavin_smuggler_member') + mobileTemplate.setLevel(70) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(15) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(1) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("smuggler") + mobileTemplate.setAssistRange(12) + mobileTemplate.setStalker(True) + mobileTemplate.setOptionsBitmask(128) + + + templates = Vector() + templates.add('object/mobile/shared_dressed_smuggler_trainer_01.iff') + + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/carbine/shared_carbine_e11.iff', 1, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedshot') + mobileTemplate.setAttacks(attacks) + + lootPoolNames_1 = ['Junk'] + lootPoolChances_1 = [100] + lootGroupChance_1 = 100 + mobileTemplate.addToLootGroups(lootPoolNames_1,lootPoolChances_1,lootGroupChance_1) + + core.spawnService.addMobileTemplate('smuggler_member', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/yavin4/spined_puc.py b/scripts/mobiles/yavin4/spined_puc.py new file mode 100644 index 00000000..5d8c617e --- /dev/null +++ b/scripts/mobiles/yavin4/spined_puc.py @@ -0,0 +1,42 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('spined_puc') + mobileTemplate.setLevel(69) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setMeatType("Reptile Meat") + mobileTemplate.setMeatAmount(6) + mobileTemplate.setHideType("Leathery Hide") + mobileTemplate.setHideAmount(6) + mobileTemplate.setSocialGroup("spined puc") + mobileTemplate.setAssistRange(12) + mobileTemplate.setStalker(False) + mobileTemplate.setOptionsBitmask(128) + + templates = Vector() + templates.add('object/mobile/shared_spined_puc.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('spined_puc', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/yavin4/stintaril.py b/scripts/mobiles/yavin4/stintaril.py new file mode 100644 index 00000000..08ba8a30 --- /dev/null +++ b/scripts/mobiles/yavin4/stintaril.py @@ -0,0 +1,44 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('stintaril') + mobileTemplate.setLevel(60) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setMeatType("Carnivore Meat") + mobileTemplate.setMeatAmount(5) + mobileTemplate.setHideType("Bristley Hide") + mobileTemplate.setHideAmount(3) + mobileTemplate.setBoneType("Mammal Bones") + mobileTemplate.setBoneAmount(2) + mobileTemplate.setSocialGroup("stintaril") + mobileTemplate.setAssistRange(12) + mobileTemplate.setStalker(False) + mobileTemplate.setOptionsBitmask(128) + + templates = Vector() + templates.add('object/mobile/shared_stintaril.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('stintaril', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/yavin4/stintaril_fleshripper.py b/scripts/mobiles/yavin4/stintaril_fleshripper.py new file mode 100644 index 00000000..b11e6f4f --- /dev/null +++ b/scripts/mobiles/yavin4/stintaril_fleshripper.py @@ -0,0 +1,44 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('stintaril_fleshripper') + mobileTemplate.setLevel(58) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setMeatType("Carnivore Meat") + mobileTemplate.setMeatAmount(5) + mobileTemplate.setHideType("Bristley Hide") + mobileTemplate.setHideAmount(3) + mobileTemplate.setBoneType("Mammal Bones") + mobileTemplate.setBoneAmount(2) + mobileTemplate.setSocialGroup("stintaril") + mobileTemplate.setAssistRange(12) + mobileTemplate.setStalker(False) + mobileTemplate.setOptionsBitmask(192) + + templates = Vector() + templates.add('object/mobile/shared_stintaril.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('stintaril_fleshripper', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/yavin4/stintaril_prowler.py b/scripts/mobiles/yavin4/stintaril_prowler.py new file mode 100644 index 00000000..9e8e4045 --- /dev/null +++ b/scripts/mobiles/yavin4/stintaril_prowler.py @@ -0,0 +1,44 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('stintaril_prowler') + mobileTemplate.setLevel(60) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(True) + mobileTemplate.setScale(1) + mobileTemplate.setMeatType("Carnivore Meat") + mobileTemplate.setMeatAmount(5) + mobileTemplate.setHideType("Bristley Hide") + mobileTemplate.setHideAmount(3) + mobileTemplate.setBoneType("Mammal Bones") + mobileTemplate.setBoneAmount(2) + mobileTemplate.setSocialGroup("stintaril") + mobileTemplate.setAssistRange(12) + mobileTemplate.setStalker(False) + mobileTemplate.setOptionsBitmask(192) + + templates = Vector() + templates.add('object/mobile/shared_stintaril_hue.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('stintaril_prowler', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/yavin4/stintaril_ravager.py b/scripts/mobiles/yavin4/stintaril_ravager.py new file mode 100644 index 00000000..7e12fcd9 --- /dev/null +++ b/scripts/mobiles/yavin4/stintaril_ravager.py @@ -0,0 +1,44 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('stintaril_ravager') + mobileTemplate.setLevel(62) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setMeatType("Carnivore Meat") + mobileTemplate.setMeatAmount(5) + mobileTemplate.setHideType("Bristley Hide") + mobileTemplate.setHideAmount(3) + mobileTemplate.setBoneType("Mammal Bones") + mobileTemplate.setBoneAmount(2) + mobileTemplate.setSocialGroup("stintaril") + mobileTemplate.setAssistRange(12) + mobileTemplate.setStalker(False) + mobileTemplate.setOptionsBitmask(128) + + templates = Vector() + templates.add('object/mobile/shared_stintaril.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('stintaril_ravager', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/yavin4/stintaril_scavenger.py b/scripts/mobiles/yavin4/stintaril_scavenger.py new file mode 100644 index 00000000..eefd318e --- /dev/null +++ b/scripts/mobiles/yavin4/stintaril_scavenger.py @@ -0,0 +1,44 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('stintaril_scavenger') + mobileTemplate.setLevel(64) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setMeatType("Carnivore Meat") + mobileTemplate.setMeatAmount(5) + mobileTemplate.setHideType("Bristley Hide") + mobileTemplate.setHideAmount(3) + mobileTemplate.setBoneType("Mammal Bones") + mobileTemplate.setBoneAmount(2) + mobileTemplate.setSocialGroup("stintaril") + mobileTemplate.setAssistRange(12) + mobileTemplate.setStalker(False) + mobileTemplate.setOptionsBitmask(128) + + templates = Vector() + templates.add('object/mobile/shared_stintaril.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('stintaril_scavenger', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/yavin4/stranded_imperial_officer.py b/scripts/mobiles/yavin4/stranded_imperial_officer.py new file mode 100644 index 00000000..2da0fdc9 --- /dev/null +++ b/scripts/mobiles/yavin4/stranded_imperial_officer.py @@ -0,0 +1,39 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('stranded_imperial_officer') + mobileTemplate.setLevel(76) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(15) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(1) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(True) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("imperial") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(True) + mobileTemplate.setFaction("imperial") + mobileTemplate.setFactionStatus(1) + + templates = Vector() + templates.add('object/mobile/shared_dressed_stranded_imperial_officer.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/carbine/shared_carbine_e11.iff', 1, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedshot') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('stranded_imperial_officer', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/yavin4/stranded_imperial_pilot.py b/scripts/mobiles/yavin4/stranded_imperial_pilot.py new file mode 100644 index 00000000..6553b678 --- /dev/null +++ b/scripts/mobiles/yavin4/stranded_imperial_pilot.py @@ -0,0 +1,39 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('stranded_imperial_pilot') + mobileTemplate.setLevel(77) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(15) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(1) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(True) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("imperial") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(True) + mobileTemplate.setFaction("imperial") + mobileTemplate.setFactionStatus(1) + + templates = Vector() + templates.add('object/mobile/shared_dressed_stranded_imperial_pilot.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/carbine/shared_carbine_e11.iff', 1, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedshot') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('stranded_imperial_pilot', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/yavin4/stranded_imperial_soldier.py b/scripts/mobiles/yavin4/stranded_imperial_soldier.py new file mode 100644 index 00000000..0b5d0275 --- /dev/null +++ b/scripts/mobiles/yavin4/stranded_imperial_soldier.py @@ -0,0 +1,39 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('stranded_imperial_soldier') + mobileTemplate.setLevel(77) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(15) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(1) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(True) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("imperial") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(True) + mobileTemplate.setFaction("imperial") + mobileTemplate.setFactionStatus(1) + + templates = Vector() + templates.add('object/mobile/shared_dressed_stranded_imperial_soldier.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/carbine/shared_carbine_e11.iff', 1, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedshot') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('stranded_imperial_soldier', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/yavin4/stranded_rebel_officer.py b/scripts/mobiles/yavin4/stranded_rebel_officer.py new file mode 100644 index 00000000..b918421d --- /dev/null +++ b/scripts/mobiles/yavin4/stranded_rebel_officer.py @@ -0,0 +1,39 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('stranded_rebel_officer') + mobileTemplate.setLevel(77) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(15) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(1) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(True) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("rebel") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(True) + mobileTemplate.setFaction("rebel") + mobileTemplate.setFactionStatus(1) + + templates = Vector() + templates.add('object/mobile/shared_dressed_stranded_rebel_officer.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/carbine/shared_carbine_e11.iff', 1, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedshot') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('stranded_rebel_officer', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/yavin4/stranded_rebel_pilot.py b/scripts/mobiles/yavin4/stranded_rebel_pilot.py new file mode 100644 index 00000000..19875d3b --- /dev/null +++ b/scripts/mobiles/yavin4/stranded_rebel_pilot.py @@ -0,0 +1,39 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('stranded_rebel_pilot') + mobileTemplate.setLevel(71) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(15) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(1) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(True) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("rebel") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(True) + mobileTemplate.setFaction("rebel") + mobileTemplate.setFactionStatus(1) + + templates = Vector() + templates.add('object/mobile/shared_dressed_stranded_rebel_pilot.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/carbine/shared_carbine_e11.iff', 1, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedshot') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('stranded_rebel_pilot', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/yavin4/stranded_rebel_soldier.py b/scripts/mobiles/yavin4/stranded_rebel_soldier.py new file mode 100644 index 00000000..1f1931ba --- /dev/null +++ b/scripts/mobiles/yavin4/stranded_rebel_soldier.py @@ -0,0 +1,39 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('stranded_rebel_soldier') + mobileTemplate.setLevel(71) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(15) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(1) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(True) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("rebel") + mobileTemplate.setAssistRange(0) + mobileTemplate.setStalker(True) + mobileTemplate.setFaction("rebel") + mobileTemplate.setFactionStatus(1) + + templates = Vector() + templates.add('object/mobile/shared_dressed_stranded_rebel_soldier.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/carbine/shared_carbine_e11.iff', 1, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedshot') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('stranded_rebel_soldier', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/yavin4/stunted_woolamander.py b/scripts/mobiles/yavin4/stunted_woolamander.py new file mode 100644 index 00000000..abb89023 --- /dev/null +++ b/scripts/mobiles/yavin4/stunted_woolamander.py @@ -0,0 +1,42 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('stunted_woolamander') + mobileTemplate.setLevel(74) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setHideType("Wooly Hide") + mobileTemplate.setHideAmount(20) + mobileTemplate.setBoneType("Mammal Bones") + mobileTemplate.setBoneAmount(20) + mobileTemplate.setSocialGroup("woolamander") + mobileTemplate.setAssistRange(12) + mobileTemplate.setStalker(False) + mobileTemplate.setOptionsBitmask(192) + + templates = Vector() + templates.add('object/mobile/shared_woolamander.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('stunted_woolamander', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/yavin4/swarming_kliknik.py b/scripts/mobiles/yavin4/swarming_kliknik.py new file mode 100644 index 00000000..23a4a257 --- /dev/null +++ b/scripts/mobiles/yavin4/swarming_kliknik.py @@ -0,0 +1,42 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('kliknik_swarming') + mobileTemplate.setLevel(73) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(12) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setMeatType("Carnivore Meat") + mobileTemplate.setMeatAmount(5) + mobileTemplate.setHideType("Scaley Hide") + mobileTemplate.setHideAmount(4) + mobileTemplate.setSocialGroup("kliknik") + mobileTemplate.setAssistRange(12) + mobileTemplate.setStalker(False) + mobileTemplate.setOptionsBitmask(128) + + templates = Vector() + templates.add('object/mobile/shared_kliknik_hue.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureRangedAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('swarming_kliknik', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/yavin4/tanc_mite.py b/scripts/mobiles/yavin4/tanc_mite.py new file mode 100644 index 00000000..b425ff64 --- /dev/null +++ b/scripts/mobiles/yavin4/tanc_mite.py @@ -0,0 +1,40 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('tanc_mite') + mobileTemplate.setLevel(67) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setMeatType("Insect Meat") + mobileTemplate.setMeatAmount(4) + mobileTemplate.setSocialGroup("tancmite") + mobileTemplate.setAssistRange(12) + mobileTemplate.setStalker(False) + mobileTemplate.setOptionsBitmask(128) + + templates = Vector() + templates.add('object/mobile/shared_tanc_mite.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('tanc_mite', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/yavin4/tanc_mite_warrior.py b/scripts/mobiles/yavin4/tanc_mite_warrior.py new file mode 100644 index 00000000..d3467c00 --- /dev/null +++ b/scripts/mobiles/yavin4/tanc_mite_warrior.py @@ -0,0 +1,40 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('tanc_mite_warrior') + mobileTemplate.setLevel(71) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setMeatType("Insect Meat") + mobileTemplate.setMeatAmount(6) + mobileTemplate.setSocialGroup("tancmite") + mobileTemplate.setAssistRange(12) + mobileTemplate.setStalker(False) + mobileTemplate.setOptionsBitmask(192) + + templates = Vector() + templates.add('object/mobile/shared_tanc_mite.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('tanc_mite_warrior', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/yavin4/tybis.py b/scripts/mobiles/yavin4/tybis.py new file mode 100644 index 00000000..fe8e087d --- /dev/null +++ b/scripts/mobiles/yavin4/tybis.py @@ -0,0 +1,44 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('tybis') + mobileTemplate.setLevel(73) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setMeatType("Herbivore Meat") + mobileTemplate.setMeatAmount(275) + mobileTemplate.setHideType("Bristley Hide") + mobileTemplate.setHideAmount(200) + mobileTemplate.setBoneType("Mammal Bones") + mobileTemplate.setBoneAmount(125) + mobileTemplate.setSocialGroup("tybis") + mobileTemplate.setAssistRange(12) + mobileTemplate.setStalker(False) + mobileTemplate.setOptionsBitmask(128) + + templates = Vector() + templates.add('object/mobile/shared_tybis.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('tybis', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/yavin4/whisper_bird_female.py b/scripts/mobiles/yavin4/whisper_bird_female.py new file mode 100644 index 00000000..68a4b863 --- /dev/null +++ b/scripts/mobiles/yavin4/whisper_bird_female.py @@ -0,0 +1,42 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('whisper_bird_female') + mobileTemplate.setLevel(60) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setMeatType("Avian Meat") + mobileTemplate.setMeatAmount(65) + mobileTemplate.setBoneType("Avian Bones") + mobileTemplate.setBoneAmount(40) + mobileTemplate.setSocialGroup("whisperbird") + mobileTemplate.setAssistRange(12) + mobileTemplate.setStalker(False) + mobileTemplate.setOptionsBitmask(128) + + templates = Vector() + templates.add('object/mobile/shared_whisper_bird.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('whisper_bird_female', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/yavin4/whisper_bird_hatchling.py b/scripts/mobiles/yavin4/whisper_bird_hatchling.py new file mode 100644 index 00000000..1b225cfd --- /dev/null +++ b/scripts/mobiles/yavin4/whisper_bird_hatchling.py @@ -0,0 +1,42 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('whisper_bird_hatchling') + mobileTemplate.setLevel(60) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setMeatType("Avian Meat") + mobileTemplate.setMeatAmount(55) + mobileTemplate.setBoneType("Avian Bones") + mobileTemplate.setBoneAmount(30) + mobileTemplate.setSocialGroup("whisperbird") + mobileTemplate.setAssistRange(12) + mobileTemplate.setStalker(False) + mobileTemplate.setOptionsBitmask(128) + + templates = Vector() + templates.add('object/mobile/shared_whisper_bird_hatchling.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('whisper_bird_hatchling', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/yavin4/whisper_bird_male.py b/scripts/mobiles/yavin4/whisper_bird_male.py new file mode 100644 index 00000000..79c59ee9 --- /dev/null +++ b/scripts/mobiles/yavin4/whisper_bird_male.py @@ -0,0 +1,42 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('whisper_bird_male') + mobileTemplate.setLevel(60) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setMeatType("Avian Meat") + mobileTemplate.setMeatAmount(65) + mobileTemplate.setBoneType("Avian Bones") + mobileTemplate.setBoneAmount(40) + mobileTemplate.setSocialGroup("whisperbird") + mobileTemplate.setAssistRange(12) + mobileTemplate.setStalker(False) + mobileTemplate.setOptionsBitmask(128) + + templates = Vector() + templates.add('object/mobile/shared_whisper_bird.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('whisper_bird_male', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/yavin4/woolamander.py b/scripts/mobiles/yavin4/woolamander.py new file mode 100644 index 00000000..68495a12 --- /dev/null +++ b/scripts/mobiles/yavin4/woolamander.py @@ -0,0 +1,42 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('woolamander') + mobileTemplate.setLevel(76) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setHideType("Wooly Hide") + mobileTemplate.setHideAmount(20) + mobileTemplate.setBoneType("Mammal Bones") + mobileTemplate.setBoneAmount(20) + mobileTemplate.setSocialGroup("woolamander") + mobileTemplate.setAssistRange(12) + mobileTemplate.setStalker(False) + mobileTemplate.setOptionsBitmask(192) + + templates = Vector() + templates.add('object/mobile/shared_woolamander.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('woolamander', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/yavin4/woolamander_gatherer.py b/scripts/mobiles/yavin4/woolamander_gatherer.py new file mode 100644 index 00000000..15add95a --- /dev/null +++ b/scripts/mobiles/yavin4/woolamander_gatherer.py @@ -0,0 +1,42 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('woolamander_gatherer') + mobileTemplate.setLevel(76) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setHideType("Wooly Hide") + mobileTemplate.setHideAmount(20) + mobileTemplate.setBoneType("Mammal Bones") + mobileTemplate.setBoneAmount(20) + mobileTemplate.setSocialGroup("woolamander") + mobileTemplate.setAssistRange(12) + mobileTemplate.setStalker(False) + mobileTemplate.setOptionsBitmask(128) + + templates = Vector() + templates.add('object/mobile/shared_woolamander.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('woolamander_gatherer', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/yavin4/woolamander_harrower.py b/scripts/mobiles/yavin4/woolamander_harrower.py new file mode 100644 index 00000000..55268859 --- /dev/null +++ b/scripts/mobiles/yavin4/woolamander_harrower.py @@ -0,0 +1,42 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('woolamander_harrower') + mobileTemplate.setLevel(78) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(True) + mobileTemplate.setScale(1) + mobileTemplate.setHideType("Wooly Hide") + mobileTemplate.setHideAmount(40) + mobileTemplate.setBoneType("Mammal Bones") + mobileTemplate.setBoneAmount(40) + mobileTemplate.setSocialGroup("woolamander") + mobileTemplate.setAssistRange(40) + mobileTemplate.setStalker(False) + mobileTemplate.setOptionsBitmask(192) + + templates = Vector() + templates.add('object/mobile/shared_woolamander_hue.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('woolamander_harrower', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/yavin4/woolamander_harvester.py b/scripts/mobiles/yavin4/woolamander_harvester.py new file mode 100644 index 00000000..d2f50f61 --- /dev/null +++ b/scripts/mobiles/yavin4/woolamander_harvester.py @@ -0,0 +1,42 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('woolamander_harvester') + mobileTemplate.setLevel(77) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(False) + mobileTemplate.setScale(1) + mobileTemplate.setHideType("Wooly Hide") + mobileTemplate.setHideAmount(20) + mobileTemplate.setBoneType("Mammal Bones") + mobileTemplate.setBoneAmount(20) + mobileTemplate.setSocialGroup("woolamander") + mobileTemplate.setAssistRange(12) + mobileTemplate.setStalker(False) + mobileTemplate.setOptionsBitmask(192) + + templates = Vector() + templates.add('object/mobile/shared_woolamander.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('woolamander_harvester', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/yavin4/woolamander_reaper.py b/scripts/mobiles/yavin4/woolamander_reaper.py new file mode 100644 index 00000000..1fa77bcb --- /dev/null +++ b/scripts/mobiles/yavin4/woolamander_reaper.py @@ -0,0 +1,42 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('woolamander_reaper') + mobileTemplate.setLevel(78) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(True) + mobileTemplate.setScale(1) + mobileTemplate.setHideType("Wooly Hide") + mobileTemplate.setHideAmount(35) + mobileTemplate.setBoneType("Mammal Bones") + mobileTemplate.setBoneAmount(20) + mobileTemplate.setSocialGroup("woolamander") + mobileTemplate.setAssistRange(12) + mobileTemplate.setStalker(False) + mobileTemplate.setOptionsBitmask(192) + + templates = Vector() + templates.add('object/mobile/shared_woolamander_hue.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('woolamander_reaper', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/mobiles/yavin4/yakasoba.py b/scripts/mobiles/yavin4/yakasoba.py new file mode 100644 index 00000000..1afffb75 --- /dev/null +++ b/scripts/mobiles/yavin4/yakasoba.py @@ -0,0 +1,43 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('yavin_yakasoba') + mobileTemplate.setLevel(68) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(15) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(1) + mobileTemplate.setMinSpawnDistance(4) + mobileTemplate.setMaxSpawnDistance(8) + mobileTemplate.setDeathblow(True) + mobileTemplate.setScale(1) + mobileTemplate.setSocialGroup("gracerobber") + mobileTemplate.setAssistRange(12) + mobileTemplate.setStalker(True) + mobileTemplate.setOptionsBitmask(192) + + templates = Vector() + templates.add('object/mobile/shared_dressed_yavin_yakasoba.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/sword/shared_sword_01.iff', 1, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('meleeHit') + mobileTemplate.setAttacks(attacks) + + lootPoolNames_1 = ['Junk'] + lootPoolChances_1 = [100] + lootGroupChance_1 = 100 + mobileTemplate.addToLootGroups(lootPoolNames_1,lootPoolChances_1,lootGroupChance_1) + + core.spawnService.addMobileTemplate('yakasoba', mobileTemplate) + return \ No newline at end of file diff --git a/scripts/object/building/corellia/bank_corellia.py b/scripts/object/building/corellia/bank_corellia.py index ccad8904..8a96a6ad 100644 --- a/scripts/object/building/corellia/bank_corellia.py +++ b/scripts/object/building/corellia/bank_corellia.py @@ -1,4 +1,12 @@ import sys def setup(core, object): + + objSvc = core.objectService + + objSvc.createChildObject(object, 'object/tangible/terminal/shared_terminal_bank.iff', 0, 0.5, 4.2, 0, 1) + objSvc.createChildObject(object, 'object/tangible/terminal/shared_terminal_bank.iff', 0, 0.5, -4.2, 1, 0) + objSvc.createChildObject(object, 'object/tangible/terminal/shared_terminal_bank.iff', 4.2, 0.5, 0.707107, 0.707107, 1) + objSvc.createChildObject(object, 'object/tangible/terminal/shared_terminal_bank.iff', -4.2, 0.5, 0, -0.707107, 0.707107) + return \ No newline at end of file diff --git a/scripts/object/building/corellia/cloning_corellia.py b/scripts/object/building/corellia/cloning_corellia.py index 487b8163..76288df2 100644 --- a/scripts/object/building/corellia/cloning_corellia.py +++ b/scripts/object/building/corellia/cloning_corellia.py @@ -3,12 +3,9 @@ from java.util import Vector from resources.common import SpawnPoint def setup(core, object): - stcSvc = core.staticService - cell = object.getCellByCellNumber(2) - - if cell: - stcSvc.spawnObject('object/tangible/terminal/shared_terminal_cloning.iff', object.getPlanet().getName(), cell.getObjectID(), float(1), float(-0.05), float(2.5), float(0), float(1)) - stcSvc.spawnObject('object/tangible/terminal/shared_terminal_cloning.iff', object.getPlanet().getName(), cell.getObjectID(), float(1), float(-0.05), float(-1.35), float(1), float(0)) + objSvc = core.objectService + objSvc.createChildObject(object, 'object/tangible/terminal/shared_terminal_cloning.iff', float(1), float(-0.05), float(2.5), float(0), float(1), 2) + objSvc.createChildObject(object, 'object/tangible/terminal/shared_terminal_cloning.iff', float(1), float(-0.05), float(-1.35), float(1), float(0), 2) spawnPoints = Vector() spawnPoints.add(SpawnPoint(-16.6514, -4.29167, -10.4976, 0.709453, 0.704753, 4)) diff --git a/scripts/object/building/corellia/shuttleport_corellia.py b/scripts/object/building/corellia/shuttleport_corellia.py index ccad8904..5cdd5f87 100644 --- a/scripts/object/building/corellia/shuttleport_corellia.py +++ b/scripts/object/building/corellia/shuttleport_corellia.py @@ -1,4 +1,10 @@ import sys def setup(core, object): + + objSvc = core.objectService + objSvc.createChildObject(object, 'object/tangible/terminal/shared_terminal_travel.iff', -13, 0.6, -10, -0.707107, 0.707107) + objSvc.createChildObject(object, 'object/creature/npc/theme_park/shared_player_shuttle.iff', 0, 0.6, 0, 1, 0) + objSvc.createChildObject(object, 'object/tangible/travel/ticket_collector/shared_ticket_collector.iff', -13, 0.6, 10, -0.707107, 0.707107) + return \ No newline at end of file diff --git a/scripts/object/building/corellia/starport_corellia.py b/scripts/object/building/corellia/starport_corellia.py index e71c9121..bfb384c6 100644 --- a/scripts/object/building/corellia/starport_corellia.py +++ b/scripts/object/building/corellia/starport_corellia.py @@ -1,15 +1,13 @@ import sys def setup(core, object): - stcSvc = core.staticService - cell = object.getCellByCellNumber(4) - - if cell: - stcSvc.spawnObject('object/tangible/terminal/shared_terminal_travel.iff', object.getPlanet().getName(), cell.getObjectID(), float(11.5), float(0.6), float(51.3), float(0.195405), float(-0.980722)) - stcSvc.spawnObject('object/tangible/terminal/shared_terminal_travel.iff', object.getPlanet().getName(), cell.getObjectID(), float(3.1), float(0.6), float(49), float(0), float(1)) - stcSvc.spawnObject('object/tangible/terminal/shared_terminal_travel.iff', object.getPlanet().getName(), cell.getObjectID(), float(-2.7), float(0.6), float(49), float(0), float(1)) - stcSvc.spawnObject('object/tangible/terminal/shared_terminal_travel.iff', object.getPlanet().getName(), cell.getObjectID(), float(-13.2), float(0.6), float(51.3), float(-0.195405), float(-0.980722)) - + objSvc = core.objectService + objSvc.createChildObject(object, 'object/tangible/terminal/shared_terminal_travel.iff', float(11.5), float(0.6), float(51.3), float(0.195405), float(-0.980722), 4) + objSvc.createChildObject(object, 'object/tangible/terminal/shared_terminal_travel.iff', float(3.1), float(0.6), float(49), float(0), float(1), 4) + objSvc.createChildObject(object, 'object/tangible/terminal/shared_terminal_travel.iff', float(-2.7), float(0.6), float(49), float(0), float(1), 4) + objSvc.createChildObject(object, 'object/tangible/terminal/shared_terminal_travel.iff', float(-13.2), float(0.6), float(51.3), float(-0.195405), float(-0.980722), 4) + objSvc.createChildObject(object, 'object/creature/npc/theme_park/shared_player_transport.iff', 0, 0, 0, 1, 0) + objSvc.createChildObject(object, 'object/tangible/travel/ticket_collector/shared_ticket_collector.iff', 10, 0, -10, 0.707107, 0.707107) core.mapService.addLocation(object.getPlanet(), 'Starport', object.getPosition().x, object.getPosition().z, 15, 0, 0) return \ No newline at end of file diff --git a/scripts/object/building/general/shuttleport_general.py b/scripts/object/building/general/shuttleport_general.py index ccad8904..9d1219e5 100644 --- a/scripts/object/building/general/shuttleport_general.py +++ b/scripts/object/building/general/shuttleport_general.py @@ -1,4 +1,8 @@ import sys def setup(core, object): + objSvc = core.objectService + objSvc.createChildObject(object, 'object/tangible/terminal/shared_terminal_travel.iff', -13, 0.6, -10, -0.707107, 0.707107) + objSvc.createChildObject(object, 'object/creature/npc/theme_park/shared_player_shuttle.iff', 0, 0.6, 0, 1, 0) + objSvc.createChildObject(object, 'object/tangible/travel/ticket_collector/shared_ticket_collector.iff', -13, 0.6, 10, -0.707107, 0.707107) return \ No newline at end of file diff --git a/scripts/object/building/military/outpost_cloning_facility.py b/scripts/object/building/military/outpost_cloning_facility.py index 781c25a2..e9fd684a 100644 --- a/scripts/object/building/military/outpost_cloning_facility.py +++ b/scripts/object/building/military/outpost_cloning_facility.py @@ -3,14 +3,11 @@ from java.util import Vector from resources.common import SpawnPoint def setup(core, object): - stcSvc = core.staticService - cell = object.getCellByCellNumber(3) - - if cell: - stcSvc.spawnObject('object/tangible/terminal/shared_terminal_cloning.iff', object.getPlanet().getName(), cell.getObjectID(), float(0.0387871), float(0.125265), float(-6), float(-0.0595427), float(0.998226)) - + objSvc = core.objectService + objSvc.createChildObject(object, 'object/tangible/terminal/shared_terminal_cloning.iff', float(0.04), float(0.16), float(-6), float(-0.06), float(0.99), 3) + spawnPoints = Vector() - spawnPoints.add(SpawnPoint(3.2408, 0.125266, -3.59732, 0.707641, -0.706572, 5)) + spawnPoints.add(SpawnPoint(3.24, 0.16, -3.60, 0.71, -0.71, 5)) object.setAttachment('spawnPoints', spawnPoints) diff --git a/scripts/object/building/military/outpost_cloning_facility_s02.py b/scripts/object/building/military/outpost_cloning_facility_s02.py index 8d5a2475..bcea9348 100644 --- a/scripts/object/building/military/outpost_cloning_facility_s02.py +++ b/scripts/object/building/military/outpost_cloning_facility_s02.py @@ -3,16 +3,13 @@ from java.util import Vector from resources.common import SpawnPoint def setup(core, object): - stcSvc = core.staticService - cell = object.getCellByCellNumber(6) + objSvc = core.objectService + objSvc.createChildObject(object, 'object/tangible/terminal/shared_terminal_cloning.iff', float(-5.5), float(0.13), float(-3.44), float(0.70), float(0.71), 6) - if cell: - stcSvc.spawnObject('object/tangible/terminal/shared_terminal_cloning.iff', object.getPlanet().getName(), cell.getObjectID(), float(-5.5), float(0.125265), float(-3.43841), float(0.699512), float(0.714621)) - spawnPoints = Vector() - spawnPoints.add(SpawnPoint(4.44727, 0.125266, -3.80136, -0.706468, 0.707745, 5)) - spawnPoints.add(SpawnPoint(4.65395, 0.125266, 1.49466, 0.714548, -0.699587, 4)) - spawnPoints.add(SpawnPoint(-3.99569, 0.125266, -3.51553, 0.70407, 0.710131, 6)) + spawnPoints.add(SpawnPoint(4.45, 0.13, -3.80, -0.71, 0.71, 5)) + spawnPoints.add(SpawnPoint(4.65, 0.13, 1.50, 0.71, -0.70, 4)) + spawnPoints.add(SpawnPoint(-3.99, 0.13, -3.52, 0.70, 0.71, 6)) object.setAttachment('spawnPoints', spawnPoints) diff --git a/scripts/object/building/military/outpost_cloning_facility_s03.py b/scripts/object/building/military/outpost_cloning_facility_s03.py index 48330e4c..9e7b7d6f 100644 --- a/scripts/object/building/military/outpost_cloning_facility_s03.py +++ b/scripts/object/building/military/outpost_cloning_facility_s03.py @@ -3,11 +3,8 @@ from java.util import Vector from resources.common import SpawnPoint def setup(core, object): - stcSvc = core.staticService - cell = object.getCellByCellNumber(3) - - if cell: - stcSvc.spawnObject('object/tangible/terminal/shared_terminal_cloning.iff', object.getPlanet().getName(), cell.getObjectID(), float(-0.134662), float(0.125265), float(-5.80915), float(-0.0238176), float(0.998716)) + objSvc = core.objectService + objSvc.createChildObject(object, 'object/tangible/terminal/shared_terminal_cloning.iff', float(-0.134662), float(0.125265), float(-5.80915), float(-0.0238176), float(0.998716), 3) spawnPoints = Vector() spawnPoints.add(SpawnPoint(4.42891, 0.125266, -3.717, 0.712528, -0.701643, 5)) diff --git a/scripts/object/building/military/outpost_starport.py b/scripts/object/building/military/outpost_starport.py index ccad8904..b0e8b915 100644 --- a/scripts/object/building/military/outpost_starport.py +++ b/scripts/object/building/military/outpost_starport.py @@ -1,4 +1,10 @@ import sys def setup(core, object): - return \ No newline at end of file + objSvc = core.objectService + objSvc.createChildObject(object, 'object/creature/npc/theme_park/shared_player_transport.iff', 0, 7, 0, 0.71, 0.71) + objSvc.createChildObject(object, 'object/tangible/travel/ticket_collector/shared_ticket_collector.iff', 1, 0, -10, 0, 1) + objSvc.createChildObject(object, 'object/tangible/terminal/shared_terminal_travel.iff', float(-3.12), float(0.15), float(-17.57), float(0.71), float(-0.71), 1) + core.mapService.addLocation(object.getPlanet(), 'Starport', object.getPosition().x, object.getPosition().z, 15, 0, 0) + return + \ No newline at end of file diff --git a/scripts/object/building/naboo/bank_naboo.py b/scripts/object/building/naboo/bank_naboo.py index ccad8904..8a96a6ad 100644 --- a/scripts/object/building/naboo/bank_naboo.py +++ b/scripts/object/building/naboo/bank_naboo.py @@ -1,4 +1,12 @@ import sys def setup(core, object): + + objSvc = core.objectService + + objSvc.createChildObject(object, 'object/tangible/terminal/shared_terminal_bank.iff', 0, 0.5, 4.2, 0, 1) + objSvc.createChildObject(object, 'object/tangible/terminal/shared_terminal_bank.iff', 0, 0.5, -4.2, 1, 0) + objSvc.createChildObject(object, 'object/tangible/terminal/shared_terminal_bank.iff', 4.2, 0.5, 0.707107, 0.707107, 1) + objSvc.createChildObject(object, 'object/tangible/terminal/shared_terminal_bank.iff', -4.2, 0.5, 0, -0.707107, 0.707107) + return \ No newline at end of file diff --git a/scripts/object/building/naboo/cloning_facility_naboo.py b/scripts/object/building/naboo/cloning_facility_naboo.py index 487b8163..91cb87d3 100644 --- a/scripts/object/building/naboo/cloning_facility_naboo.py +++ b/scripts/object/building/naboo/cloning_facility_naboo.py @@ -3,21 +3,18 @@ from java.util import Vector from resources.common import SpawnPoint def setup(core, object): - stcSvc = core.staticService - cell = object.getCellByCellNumber(2) - - if cell: - stcSvc.spawnObject('object/tangible/terminal/shared_terminal_cloning.iff', object.getPlanet().getName(), cell.getObjectID(), float(1), float(-0.05), float(2.5), float(0), float(1)) - stcSvc.spawnObject('object/tangible/terminal/shared_terminal_cloning.iff', object.getPlanet().getName(), cell.getObjectID(), float(1), float(-0.05), float(-1.35), float(1), float(0)) + objSvc = core.objectService + objSvc.createChildObject(object, 'object/tangible/terminal/shared_terminal_cloning.iff', float(1), float(-0.05), float(2.5), float(0), float(1), 2) + objSvc.createChildObject(object, 'object/tangible/terminal/shared_terminal_cloning.iff', float(1), float(-0.05), float(-1.35), float(1), float(0), 2) spawnPoints = Vector() - spawnPoints.add(SpawnPoint(-16.6514, -4.29167, -10.4976, 0.709453, 0.704753, 4)) - spawnPoints.add(SpawnPoint(-16.5965, -4.29167, -14.1652, 0.721346, 0.692575, 4)) - spawnPoints.add(SpawnPoint(16.5771, -4.29167, -14.2091, 0.71195, -0.702231, 4)) - spawnPoints.add(SpawnPoint(16.6876, -4.29167, -10.5391, -0.6972, 0.716877, 4)) - spawnPoints.add(SpawnPoint(6.32992, -4.79167, 0.613332, 0.999992, 0.00405023, 4)) - spawnPoints.add(SpawnPoint(1.58067, -4.79167, 0.582775, 0.989691, 0.0143216, 4)) - spawnPoints.add(SpawnPoint(-2.84125, -4.79167, 0.657588, -0.0356012, 0.999366, 4)) + spawnPoints.add(SpawnPoint(-16.66, -4.29, -10.50, 0.71, 0.70, 4)) + spawnPoints.add(SpawnPoint(-16.60, -4.29, -14.17, 0.72, 0.69, 4)) + spawnPoints.add(SpawnPoint(16.58, -4.29, -14.21, 0.71, -0.70, 4)) + spawnPoints.add(SpawnPoint(16.69, -4.29, -10.54, -0.70, 0.72, 4)) + spawnPoints.add(SpawnPoint(6.33, -4.79, 0.61, 0.99, 0.01, 4)) + spawnPoints.add(SpawnPoint(1.58, -4.79, 0.58, 0.99, 0.01, 4)) + spawnPoints.add(SpawnPoint(-2.84, -4.79, 0.66, -0.04, 0.99, 4)) object.setAttachment('spawnPoints', spawnPoints) diff --git a/scripts/object/building/naboo/hangar_naboo_theed.py b/scripts/object/building/naboo/hangar_naboo_theed.py index ccad8904..79a247e9 100644 --- a/scripts/object/building/naboo/hangar_naboo_theed.py +++ b/scripts/object/building/naboo/hangar_naboo_theed.py @@ -1,4 +1,15 @@ import sys def setup(core, object): + objSvc = core.objectService + + objSvc.createChildObject(object, 'object/tangible/terminal/shared_terminal_travel.iff', float(-26.94), float(0.75), float(-67.14), float(1), float(0), 3) + objSvc.createChildObject(object, 'object/tangible/terminal/shared_terminal_travel.iff', float(26.94), float(0.75), float(-67.14), float(1), float(0), 4) + objSvc.createChildObject(object, 'object/tangible/terminal/shared_terminal_travel.iff', float(-9.49), float(7.98), float(-45.24), float(0), float(1), 5) + objSvc.createChildObject(object, 'object/tangible/terminal/shared_terminal_travel.iff', float(9.49), float(7.98), float(-45.24), float(0), float(1), 5) + objSvc.createChildObject(object, 'object/tangible/travel/ticket_collector/shared_ticket_collector.iff', float(-10), float(7.98), float(10), float(-0.71), float(0.71), 5) + objSvc.createChildObject(object, 'object/creature/npc/theme_park/shared_player_transport_theed_hangar.iff', float(0), float(7.98), float(0), float(1), float(1), 5) + + core.mapService.addLocation(object.getPlanet(), 'Starport', object.getPosition().x, object.getPosition().z, 15, 0, 0) + return \ No newline at end of file diff --git a/scripts/object/building/naboo/rori_restuss_shuttleport.py b/scripts/object/building/naboo/rori_restuss_shuttleport.py index ccad8904..9d1219e5 100644 --- a/scripts/object/building/naboo/rori_restuss_shuttleport.py +++ b/scripts/object/building/naboo/rori_restuss_shuttleport.py @@ -1,4 +1,8 @@ import sys def setup(core, object): + objSvc = core.objectService + objSvc.createChildObject(object, 'object/tangible/terminal/shared_terminal_travel.iff', -13, 0.6, -10, -0.707107, 0.707107) + objSvc.createChildObject(object, 'object/creature/npc/theme_park/shared_player_shuttle.iff', 0, 0.6, 0, 1, 0) + objSvc.createChildObject(object, 'object/tangible/travel/ticket_collector/shared_ticket_collector.iff', -13, 0.6, 10, -0.707107, 0.707107) return \ No newline at end of file diff --git a/scripts/object/building/naboo/rori_restuss_starport.py b/scripts/object/building/naboo/rori_restuss_starport.py index ccad8904..1130afc6 100644 --- a/scripts/object/building/naboo/rori_restuss_starport.py +++ b/scripts/object/building/naboo/rori_restuss_starport.py @@ -1,4 +1,8 @@ import sys def setup(core, object): + objSvc = core.objectService + objSvc.createChildObject(object, 'object/creature/npc/theme_park/shared_player_transport.iff', 0, 7, 0, 0.707107, 0.707107) + objSvc.createChildObject(object, 'object/tangible/travel/ticket_collector/shared_ticket_collector.iff', 1, 0, -10, 0, 1) + objSvc.createChildObject(object, 'object/tangible/terminal/shared_terminal_travel.iff', float(-3.12), float(0.14659503), float(-17.57), float(0.707107), float(-0.707107), 1) return \ No newline at end of file diff --git a/scripts/object/building/naboo/shuttleport_naboo.py b/scripts/object/building/naboo/shuttleport_naboo.py index ccad8904..5cdd5f87 100644 --- a/scripts/object/building/naboo/shuttleport_naboo.py +++ b/scripts/object/building/naboo/shuttleport_naboo.py @@ -1,4 +1,10 @@ import sys def setup(core, object): + + objSvc = core.objectService + objSvc.createChildObject(object, 'object/tangible/terminal/shared_terminal_travel.iff', -13, 0.6, -10, -0.707107, 0.707107) + objSvc.createChildObject(object, 'object/creature/npc/theme_park/shared_player_shuttle.iff', 0, 0.6, 0, 1, 0) + objSvc.createChildObject(object, 'object/tangible/travel/ticket_collector/shared_ticket_collector.iff', -13, 0.6, 10, -0.707107, 0.707107) + return \ No newline at end of file diff --git a/scripts/object/building/naboo/starport_naboo.py b/scripts/object/building/naboo/starport_naboo.py index e71c9121..e66e8bf2 100644 --- a/scripts/object/building/naboo/starport_naboo.py +++ b/scripts/object/building/naboo/starport_naboo.py @@ -1,15 +1,13 @@ import sys def setup(core, object): - stcSvc = core.staticService - cell = object.getCellByCellNumber(4) - - if cell: - stcSvc.spawnObject('object/tangible/terminal/shared_terminal_travel.iff', object.getPlanet().getName(), cell.getObjectID(), float(11.5), float(0.6), float(51.3), float(0.195405), float(-0.980722)) - stcSvc.spawnObject('object/tangible/terminal/shared_terminal_travel.iff', object.getPlanet().getName(), cell.getObjectID(), float(3.1), float(0.6), float(49), float(0), float(1)) - stcSvc.spawnObject('object/tangible/terminal/shared_terminal_travel.iff', object.getPlanet().getName(), cell.getObjectID(), float(-2.7), float(0.6), float(49), float(0), float(1)) - stcSvc.spawnObject('object/tangible/terminal/shared_terminal_travel.iff', object.getPlanet().getName(), cell.getObjectID(), float(-13.2), float(0.6), float(51.3), float(-0.195405), float(-0.980722)) - + objSvc = core.objectService + objSvc.createChildObject(object, 'object/tangible/terminal/shared_terminal_travel.iff', float(11.5), float(0.6), float(51.3), float(0.20), float(-0.98), 4) + objSvc.createChildObject(object, 'object/tangible/terminal/shared_terminal_travel.iff', float(3.1), float(0.6), float(49), float(0), float(1), 4) + objSvc.createChildObject(object, 'object/tangible/terminal/shared_terminal_travel.iff', float(-2.7), float(0.6), float(49), float(0), float(1), 4) + objSvc.createChildObject(object, 'object/tangible/terminal/shared_terminal_travel.iff', float(-13.2), float(0.6), float(51.3), float(-0.20), float(-0.98), 4) + objSvc.createChildObject(object, 'object/creature/npc/theme_park/shared_player_transport.iff', 0, 0, 0, 1, 0) + objSvc.createChildObject(object, 'object/tangible/travel/ticket_collector/shared_ticket_collector.iff', 10, 0, -10, 0.71, 0.71) core.mapService.addLocation(object.getPlanet(), 'Starport', object.getPosition().x, object.getPosition().z, 15, 0, 0) return \ No newline at end of file diff --git a/scripts/object/building/player/city/cityhall_corellia.py b/scripts/object/building/player/city/cityhall_corellia.py index ccad8904..6b2cbced 100644 --- a/scripts/object/building/player/city/cityhall_corellia.py +++ b/scripts/object/building/player/city/cityhall_corellia.py @@ -1,4 +1,20 @@ import sys +from engine.resources.scene import Point3D +from engine.resources.scene import Quaternion def setup(core, object): + sign = core.objectService.createChildObject(object, 'object/tangible/sign/player/shared_house_address.iff', -13.7, 3, 9.1, -1, 0, -1) + print(sign) + object.setAttachment("structureSign", sign) + + structureterminal = core.objectService.createChildObject(object, 'object/tangible/terminal/shared_terminal_player_structure.iff', -17.2, 1.5 , 8, 1, 0 ,4) + #structureterminal.setAttachment('radial_filename', 'structure_management_terminal') + structureterminal.setAttachment('housing_parentstruct', object) + + cityterminal = core.objectService.createChildObject(object, 'object/tangible/terminal/shared_terminal_city.iff', Point3D(float(16), float(2), float(-9)), Quaternion(float(1), float(1), float(1), float(0)),5) + #cityterminal.setAttachment('housing_parentstruct', object) + + city_vote_terminal = core.objectService.createChildObject(object, 'object/tangible/terminal/shared_terminal_city_vote.iff', Point3D(float(0), float(1.85), float(-8.5)), Quaternion(float(1), float(1), float(1), float(0)),3) + #cityterminal.setAttachment('housing_parentstruct', object) + return \ No newline at end of file diff --git a/scripts/object/building/player/city/cityhall_naboo.py b/scripts/object/building/player/city/cityhall_naboo.py index ccad8904..4e456185 100644 --- a/scripts/object/building/player/city/cityhall_naboo.py +++ b/scripts/object/building/player/city/cityhall_naboo.py @@ -1,4 +1,19 @@ import sys +from engine.resources.scene import Point3D +from engine.resources.scene import Quaternion def setup(core, object): + sign = core.objectService.createChildObject(object, 'object/tangible/sign/player/shared_house_address.iff', -13.7, 3, 9.1, -1, 0, -1) + print(sign) + object.setAttachment("structureSign", sign) + + structureterminal = core.objectService.createChildObject(object, 'object/tangible/terminal/shared_terminal_player_structure.iff', -17.2, 1.5 , 8, 1, 0 ,4) + #structureterminal.setAttachment('radial_filename', 'structure_management_terminal') + structureterminal.setAttachment('housing_parentstruct', object) + cityterminal = core.objectService.createChildObject(object, 'object/tangible/terminal/shared_terminal_city.iff', Point3D(float(16), float(2), float(-9)), Quaternion(float(1), float(1), float(1), float(0)),5) + #cityterminal.setAttachment('housing_parentstruct', object) + + city_vote_terminal = core.objectService.createChildObject(object, 'object/tangible/terminal/shared_terminal_city_vote.iff', Point3D(float(0), float(1.85), float(-8.5)), Quaternion(float(1), float(1), float(1), float(0)),3) + #cityterminal.setAttachment('housing_parentstruct', object) + return \ No newline at end of file diff --git a/scripts/object/building/player/city/cityhall_tatooine.py b/scripts/object/building/player/city/cityhall_tatooine.py index ccad8904..6b2cbced 100644 --- a/scripts/object/building/player/city/cityhall_tatooine.py +++ b/scripts/object/building/player/city/cityhall_tatooine.py @@ -1,4 +1,20 @@ import sys +from engine.resources.scene import Point3D +from engine.resources.scene import Quaternion def setup(core, object): + sign = core.objectService.createChildObject(object, 'object/tangible/sign/player/shared_house_address.iff', -13.7, 3, 9.1, -1, 0, -1) + print(sign) + object.setAttachment("structureSign", sign) + + structureterminal = core.objectService.createChildObject(object, 'object/tangible/terminal/shared_terminal_player_structure.iff', -17.2, 1.5 , 8, 1, 0 ,4) + #structureterminal.setAttachment('radial_filename', 'structure_management_terminal') + structureterminal.setAttachment('housing_parentstruct', object) + + cityterminal = core.objectService.createChildObject(object, 'object/tangible/terminal/shared_terminal_city.iff', Point3D(float(16), float(2), float(-9)), Quaternion(float(1), float(1), float(1), float(0)),5) + #cityterminal.setAttachment('housing_parentstruct', object) + + city_vote_terminal = core.objectService.createChildObject(object, 'object/tangible/terminal/shared_terminal_city_vote.iff', Point3D(float(0), float(1.85), float(-8.5)), Quaternion(float(1), float(1), float(1), float(0)),3) + #cityterminal.setAttachment('housing_parentstruct', object) + return \ No newline at end of file diff --git a/scripts/object/building/player/city/garden_tatooine_sml_01.py b/scripts/object/building/player/city/garden_tatooine_sml_01.py index ccad8904..287ca8f0 100644 --- a/scripts/object/building/player/city/garden_tatooine_sml_01.py +++ b/scripts/object/building/player/city/garden_tatooine_sml_01.py @@ -1,4 +1,14 @@ import sys +from engine.resources.scene import Point3D +from engine.resources.scene import Quaternion def setup(core, object): + sign = core.objectService.createChildObject(object, 'object/tangible/sign/player/shared_house_address.iff', -13.7, 3, 9.1, -1, 0, -1) + print(sign) + object.setAttachment("structureSign", sign) + + structureterminal = core.objectService.createChildObject(object, 'object/tangible/terminal/shared_terminal_player_structure.iff', -17.2, 1.5 , 8, 1, 0 ,4) + #structureterminal.setAttachment('radial_filename', 'structure_management_terminal') + structureterminal.setAttachment('housing_parentstruct', object) + return \ No newline at end of file diff --git a/scripts/object/building/player/player_guildhall_corellia_style_01.py b/scripts/object/building/player/player_guildhall_corellia_style_01.py index ccad8904..8e623ae0 100644 --- a/scripts/object/building/player/player_guildhall_corellia_style_01.py +++ b/scripts/object/building/player/player_guildhall_corellia_style_01.py @@ -1,4 +1,13 @@ import sys +from engine.resources.scene import Point3D +from engine.resources.scene import Quaternion def setup(core, object): + sign = core.objectService.createChildObject(object, 'object/tangible/sign/player/shared_house_address.iff', 6,3, 18.4, -1, 0, -1) + print(sign) + object.setAttachment("structureSign", sign) + + structureterminal = core.objectService.createChildObject(object, 'object/tangible/terminal/shared_terminal_player_structure.iff', Point3D(float(18.9), float(2.5), float(10)), Quaternion(float(1), float(1), float(1), float(0)),7) + #structureterminal.setAttachment('radial_filename', 'structure_management_terminal') + structureterminal.setAttachment('housing_parentstruct', object) return \ No newline at end of file diff --git a/scripts/object/building/player/player_guildhall_generic_style_01.py b/scripts/object/building/player/player_guildhall_generic_style_01.py index ccad8904..8e623ae0 100644 --- a/scripts/object/building/player/player_guildhall_generic_style_01.py +++ b/scripts/object/building/player/player_guildhall_generic_style_01.py @@ -1,4 +1,13 @@ import sys +from engine.resources.scene import Point3D +from engine.resources.scene import Quaternion def setup(core, object): + sign = core.objectService.createChildObject(object, 'object/tangible/sign/player/shared_house_address.iff', 6,3, 18.4, -1, 0, -1) + print(sign) + object.setAttachment("structureSign", sign) + + structureterminal = core.objectService.createChildObject(object, 'object/tangible/terminal/shared_terminal_player_structure.iff', Point3D(float(18.9), float(2.5), float(10)), Quaternion(float(1), float(1), float(1), float(0)),7) + #structureterminal.setAttachment('radial_filename', 'structure_management_terminal') + structureterminal.setAttachment('housing_parentstruct', object) return \ No newline at end of file diff --git a/scripts/object/building/player/player_guildhall_naboo_style_01.py b/scripts/object/building/player/player_guildhall_naboo_style_01.py index ccad8904..8e623ae0 100644 --- a/scripts/object/building/player/player_guildhall_naboo_style_01.py +++ b/scripts/object/building/player/player_guildhall_naboo_style_01.py @@ -1,4 +1,13 @@ import sys +from engine.resources.scene import Point3D +from engine.resources.scene import Quaternion def setup(core, object): + sign = core.objectService.createChildObject(object, 'object/tangible/sign/player/shared_house_address.iff', 6,3, 18.4, -1, 0, -1) + print(sign) + object.setAttachment("structureSign", sign) + + structureterminal = core.objectService.createChildObject(object, 'object/tangible/terminal/shared_terminal_player_structure.iff', Point3D(float(18.9), float(2.5), float(10)), Quaternion(float(1), float(1), float(1), float(0)),7) + #structureterminal.setAttachment('radial_filename', 'structure_management_terminal') + structureterminal.setAttachment('housing_parentstruct', object) return \ No newline at end of file diff --git a/scripts/object/building/player/player_guildhall_tatooine_style_01.py b/scripts/object/building/player/player_guildhall_tatooine_style_01.py index ccad8904..8e623ae0 100644 --- a/scripts/object/building/player/player_guildhall_tatooine_style_01.py +++ b/scripts/object/building/player/player_guildhall_tatooine_style_01.py @@ -1,4 +1,13 @@ import sys +from engine.resources.scene import Point3D +from engine.resources.scene import Quaternion def setup(core, object): + sign = core.objectService.createChildObject(object, 'object/tangible/sign/player/shared_house_address.iff', 6,3, 18.4, -1, 0, -1) + print(sign) + object.setAttachment("structureSign", sign) + + structureterminal = core.objectService.createChildObject(object, 'object/tangible/terminal/shared_terminal_player_structure.iff', Point3D(float(18.9), float(2.5), float(10)), Quaternion(float(1), float(1), float(1), float(0)),7) + #structureterminal.setAttachment('radial_filename', 'structure_management_terminal') + structureterminal.setAttachment('housing_parentstruct', object) return \ No newline at end of file diff --git a/scripts/object/building/player/player_guildhall_tatooine_style_02.py b/scripts/object/building/player/player_guildhall_tatooine_style_02.py index ccad8904..53903ad4 100644 --- a/scripts/object/building/player/player_guildhall_tatooine_style_02.py +++ b/scripts/object/building/player/player_guildhall_tatooine_style_02.py @@ -1,4 +1,13 @@ import sys +from engine.resources.scene import Point3D +from engine.resources.scene import Quaternion def setup(core, object): + sign = core.objectService.createChildObject(object, 'object/tangible/sign/player/shared_house_address.iff', 5.5,4, 12.7, -1, 0, -1) + print(sign) + object.setAttachment("structureSign", sign) + + structureterminal = core.objectService.createChildObject(object, 'object/tangible/terminal/shared_terminal_player_structure.iff', Point3D(float(4.0), float(2.2), float(9)), Quaternion(float(0), float(0), float(0), float(0)),1) + #structureterminal.setAttachment('radial_filename', 'structure/structure_management_terminal') + structureterminal.setAttachment('housing_parentstruct', object) return \ No newline at end of file diff --git a/scripts/object/building/player/player_house_atat.py b/scripts/object/building/player/player_house_atat.py index ccad8904..030485f9 100644 --- a/scripts/object/building/player/player_house_atat.py +++ b/scripts/object/building/player/player_house_atat.py @@ -1,4 +1,12 @@ import sys +from engine.resources.scene import Quaternion def setup(core, object): + sign = core.objectService.createChildObject(object, 'object/tangible/sign/player/shared_house_address.iff', -3.8, 5.86, 15.1, 0, 1, -1) + print(sign) + object.setAttachment("structureSign", sign) + + structureterminal = core.objectService.createChildObject(object, 'object/tangible/terminal/shared_terminal_player_structure.iff', 4.4, 18.5, 4.5, 0.707108, -0.707108, 1) + #structureterminal.setAttachment('radial_filename', 'structure_management_terminal') + structureterminal.setAttachment('housing_parentstruct', object) return \ No newline at end of file diff --git a/scripts/object/building/player/player_house_corellia_large_style_01.py b/scripts/object/building/player/player_house_corellia_large_style_01.py index ccad8904..128a3e4b 100644 --- a/scripts/object/building/player/player_house_corellia_large_style_01.py +++ b/scripts/object/building/player/player_house_corellia_large_style_01.py @@ -1,4 +1,11 @@ import sys def setup(core, object): + sign = core.objectService.createChildObject(object, 'object/tangible/sign/player/shared_house_address.iff', 6, 3, 13.4, -1, 0, -1) + print(sign) + object.setAttachment("structureSign", sign) + + structureterminal = core.objectService.createChildObject(object, 'object/tangible/terminal/shared_terminal_player_structure.iff', 14.9, 4.5, 3.5, 0.707108, -0.707108, 3) + #structureterminal.setAttachment('radial_filename', 'structure_management_terminal') + structureterminal.setAttachment('housing_parentstruct', object) return \ No newline at end of file diff --git a/scripts/object/building/player/player_house_corellia_large_style_02.py b/scripts/object/building/player/player_house_corellia_large_style_02.py index ccad8904..257e2444 100644 --- a/scripts/object/building/player/player_house_corellia_large_style_02.py +++ b/scripts/object/building/player/player_house_corellia_large_style_02.py @@ -1,4 +1,12 @@ import sys + def setup(core, object): + sign = core.objectService.createChildObject(object, 'object/tangible/sign/player/shared_house_address.iff', -13.7, 3, 9.1, -1, 0, -1) + print(sign) + object.setAttachment("structureSign", sign) + + structureterminal = core.objectService.createChildObject(object, 'object/tangible/terminal/shared_terminal_player_structure.iff', -10.5, 0.7, 4.5, 0.707108, -0.707108, 1) + #structureterminal.setAttachment('radial_filename', 'structure_management_terminal') + structureterminal.setAttachment('housing_parentstruct', object) return \ No newline at end of file diff --git a/scripts/object/building/player/player_house_corellia_medium_style_01.py b/scripts/object/building/player/player_house_corellia_medium_style_01.py index ccad8904..26bf70af 100644 --- a/scripts/object/building/player/player_house_corellia_medium_style_01.py +++ b/scripts/object/building/player/player_house_corellia_medium_style_01.py @@ -1,4 +1,11 @@ import sys def setup(core, object): + sign = core.objectService.createChildObject(object, 'object/tangible/sign/player/shared_house_address.iff', 5.3, 2.26, 7.7, -1, 0, -1) + print(sign) + object.setAttachment("structureSign", sign) + + structureterminal = core.objectService.createChildObject(object, 'object/tangible/terminal/shared_terminal_player_structure.iff', 10.6, 0.5, 3.5, 0.707108, -0.707108, 1) + #structureterminal.setAttachment('radial_filename', 'structure_management_terminal') + structureterminal.setAttachment('housing_parentstruct', object) return \ No newline at end of file diff --git a/scripts/object/building/player/player_house_corellia_medium_style_02.py b/scripts/object/building/player/player_house_corellia_medium_style_02.py index ccad8904..26bf70af 100644 --- a/scripts/object/building/player/player_house_corellia_medium_style_02.py +++ b/scripts/object/building/player/player_house_corellia_medium_style_02.py @@ -1,4 +1,11 @@ import sys def setup(core, object): + sign = core.objectService.createChildObject(object, 'object/tangible/sign/player/shared_house_address.iff', 5.3, 2.26, 7.7, -1, 0, -1) + print(sign) + object.setAttachment("structureSign", sign) + + structureterminal = core.objectService.createChildObject(object, 'object/tangible/terminal/shared_terminal_player_structure.iff', 10.6, 0.5, 3.5, 0.707108, -0.707108, 1) + #structureterminal.setAttachment('radial_filename', 'structure_management_terminal') + structureterminal.setAttachment('housing_parentstruct', object) return \ No newline at end of file diff --git a/scripts/object/building/player/player_house_corellia_small_style_01.py b/scripts/object/building/player/player_house_corellia_small_style_01.py index ccad8904..6e0ae61d 100644 --- a/scripts/object/building/player/player_house_corellia_small_style_01.py +++ b/scripts/object/building/player/player_house_corellia_small_style_01.py @@ -1,4 +1,11 @@ import sys def setup(core, object): + sign = core.objectService.createChildObject(object, 'object/tangible/sign/player/shared_house_address.iff', -7.39, 2.36, 2, -1, 0, -1) + print(sign) + object.setAttachment("structureSign", sign) + + structureterminal = core.objectService.createChildObject(object, 'object/tangible/terminal/shared_terminal_player_structure.iff', -5, 0.74, -1.81, 0.707107, -0.707107, 1) + #structureterminal.setAttachment('radial_filename', 'structure_management_terminal') + structureterminal.setAttachment('housing_parentstruct', object) return \ No newline at end of file diff --git a/scripts/object/building/player/player_house_corellia_small_style_01_floorplan_02.py b/scripts/object/building/player/player_house_corellia_small_style_01_floorplan_02.py index ccad8904..6e0ae61d 100644 --- a/scripts/object/building/player/player_house_corellia_small_style_01_floorplan_02.py +++ b/scripts/object/building/player/player_house_corellia_small_style_01_floorplan_02.py @@ -1,4 +1,11 @@ import sys def setup(core, object): + sign = core.objectService.createChildObject(object, 'object/tangible/sign/player/shared_house_address.iff', -7.39, 2.36, 2, -1, 0, -1) + print(sign) + object.setAttachment("structureSign", sign) + + structureterminal = core.objectService.createChildObject(object, 'object/tangible/terminal/shared_terminal_player_structure.iff', -5, 0.74, -1.81, 0.707107, -0.707107, 1) + #structureterminal.setAttachment('radial_filename', 'structure_management_terminal') + structureterminal.setAttachment('housing_parentstruct', object) return \ No newline at end of file diff --git a/scripts/object/building/player/player_house_corellia_small_style_02.py b/scripts/object/building/player/player_house_corellia_small_style_02.py index ccad8904..d301f713 100644 --- a/scripts/object/building/player/player_house_corellia_small_style_02.py +++ b/scripts/object/building/player/player_house_corellia_small_style_02.py @@ -1,4 +1,11 @@ import sys def setup(core, object): + sign = core.objectService.createChildObject(object, 'object/tangible/sign/player/shared_house_address.iff', -1.9, 2.86, 8.35, -1, 0, -1) + print(sign) + object.setAttachment("structureSign", sign) + + structureterminal = core.objectService.createChildObject(object, 'object/tangible/terminal/shared_terminal_player_structure.iff', 6.5, 0.5, -3.8, 0.707108, -0.707108, 3) + #structureterminal.setAttachment('radial_filename', 'structure_management_terminal') + structureterminal.setAttachment('housing_parentstruct', object) return \ No newline at end of file diff --git a/scripts/object/building/player/player_house_corellia_small_style_02_floorplan_02.py b/scripts/object/building/player/player_house_corellia_small_style_02_floorplan_02.py index ccad8904..faba7813 100644 --- a/scripts/object/building/player/player_house_corellia_small_style_02_floorplan_02.py +++ b/scripts/object/building/player/player_house_corellia_small_style_02_floorplan_02.py @@ -1,4 +1,11 @@ import sys def setup(core, object): + sign = core.objectService.createChildObject(object, 'object/tangible/sign/player/shared_house_address.iff', -1.9, 2.86, 8.35, -1, 0, -1) + print(sign) + object.setAttachment("structureSign", sign) + + structureterminal = core.objectService.createChildObject(object, 'object/tangible/terminal/shared_terminal_player_structure.iff', 6.5, 0.5, -3.8, 0.707108, -0.707108, 2) + #structureterminal.setAttachment('radial_filename', 'structure_management_terminal') + structureterminal.setAttachment('housing_parentstruct', object) return \ No newline at end of file diff --git a/scripts/object/building/player/player_house_generic_large_style_01.py b/scripts/object/building/player/player_house_generic_large_style_01.py index ccad8904..128a3e4b 100644 --- a/scripts/object/building/player/player_house_generic_large_style_01.py +++ b/scripts/object/building/player/player_house_generic_large_style_01.py @@ -1,4 +1,11 @@ import sys def setup(core, object): + sign = core.objectService.createChildObject(object, 'object/tangible/sign/player/shared_house_address.iff', 6, 3, 13.4, -1, 0, -1) + print(sign) + object.setAttachment("structureSign", sign) + + structureterminal = core.objectService.createChildObject(object, 'object/tangible/terminal/shared_terminal_player_structure.iff', 14.9, 4.5, 3.5, 0.707108, -0.707108, 3) + #structureterminal.setAttachment('radial_filename', 'structure_management_terminal') + structureterminal.setAttachment('housing_parentstruct', object) return \ No newline at end of file diff --git a/scripts/object/building/player/player_house_generic_large_style_02.py b/scripts/object/building/player/player_house_generic_large_style_02.py index ccad8904..257e2444 100644 --- a/scripts/object/building/player/player_house_generic_large_style_02.py +++ b/scripts/object/building/player/player_house_generic_large_style_02.py @@ -1,4 +1,12 @@ import sys + def setup(core, object): + sign = core.objectService.createChildObject(object, 'object/tangible/sign/player/shared_house_address.iff', -13.7, 3, 9.1, -1, 0, -1) + print(sign) + object.setAttachment("structureSign", sign) + + structureterminal = core.objectService.createChildObject(object, 'object/tangible/terminal/shared_terminal_player_structure.iff', -10.5, 0.7, 4.5, 0.707108, -0.707108, 1) + #structureterminal.setAttachment('radial_filename', 'structure_management_terminal') + structureterminal.setAttachment('housing_parentstruct', object) return \ No newline at end of file diff --git a/scripts/object/building/player/player_house_generic_large_window_s01.py b/scripts/object/building/player/player_house_generic_large_window_s01.py index ccad8904..cda43b48 100644 --- a/scripts/object/building/player/player_house_generic_large_window_s01.py +++ b/scripts/object/building/player/player_house_generic_large_window_s01.py @@ -1,4 +1,11 @@ import sys def setup(core, object): + sign = core.objectService.createChildObject(object, 'object/tangible/sign/player/shared_house_address.iff', -13.7, 3, 9.1, -1, 0, -1) + print(sign) + object.setAttachment("structureSign", sign) + + structureterminal = core.objectService.createChildObject(object, 'object/tangible/terminal/shared_terminal_player_structure.iff', -10.5, 0.7, 4.5, 0.707108, -0.707108, 1) + #structureterminal.setAttachment('radial_filename', 'structure_management_terminal') + structureterminal.setAttachment('housing_parentstruct', object) return \ No newline at end of file diff --git a/scripts/object/building/player/player_house_generic_large_window_s02.py b/scripts/object/building/player/player_house_generic_large_window_s02.py index ccad8904..fb7db369 100644 --- a/scripts/object/building/player/player_house_generic_large_window_s02.py +++ b/scripts/object/building/player/player_house_generic_large_window_s02.py @@ -1,4 +1,14 @@ import sys +from engine.resources.scene import Point3D +from engine.resources.scene import Quaternion def setup(core, object): + sign = core.objectService.createChildObject(object, 'object/tangible/sign/player/shared_house_address.iff', Point3D(float(10.4), float(3), float(-11)), Quaternion(float(0), float(0), float(0), float(0)), -1) + print(sign) + object.setAttachment("structureSign", sign) + + #structureterminal = core.objectService.createChildObject(object, 'object/tangible/terminal/shared_terminal_player_structure.iff', -8.5, 0.7, 8.5, 0.707108, -0.707108, 1) + structureterminal = core.objectService.createChildObject(object, 'object/tangible/terminal/shared_terminal_player_structure.iff', Point3D(float(8.6), float(0.5), float(2.5)), Quaternion(float(0), float(0), float(1), float(0)),1) + #structureterminal.setAttachment('radial_filename', 'structure_management_terminal'). + structureterminal.setAttachment('housing_parentstruct', object) return \ No newline at end of file diff --git a/scripts/object/building/player/player_house_generic_medium_style_01.py b/scripts/object/building/player/player_house_generic_medium_style_01.py index ccad8904..26bf70af 100644 --- a/scripts/object/building/player/player_house_generic_medium_style_01.py +++ b/scripts/object/building/player/player_house_generic_medium_style_01.py @@ -1,4 +1,11 @@ import sys def setup(core, object): + sign = core.objectService.createChildObject(object, 'object/tangible/sign/player/shared_house_address.iff', 5.3, 2.26, 7.7, -1, 0, -1) + print(sign) + object.setAttachment("structureSign", sign) + + structureterminal = core.objectService.createChildObject(object, 'object/tangible/terminal/shared_terminal_player_structure.iff', 10.6, 0.5, 3.5, 0.707108, -0.707108, 1) + #structureterminal.setAttachment('radial_filename', 'structure_management_terminal') + structureterminal.setAttachment('housing_parentstruct', object) return \ No newline at end of file diff --git a/scripts/object/building/player/player_house_generic_medium_style_02.py b/scripts/object/building/player/player_house_generic_medium_style_02.py index ccad8904..26bf70af 100644 --- a/scripts/object/building/player/player_house_generic_medium_style_02.py +++ b/scripts/object/building/player/player_house_generic_medium_style_02.py @@ -1,4 +1,11 @@ import sys def setup(core, object): + sign = core.objectService.createChildObject(object, 'object/tangible/sign/player/shared_house_address.iff', 5.3, 2.26, 7.7, -1, 0, -1) + print(sign) + object.setAttachment("structureSign", sign) + + structureterminal = core.objectService.createChildObject(object, 'object/tangible/terminal/shared_terminal_player_structure.iff', 10.6, 0.5, 3.5, 0.707108, -0.707108, 1) + #structureterminal.setAttachment('radial_filename', 'structure_management_terminal') + structureterminal.setAttachment('housing_parentstruct', object) return \ No newline at end of file diff --git a/scripts/object/building/player/player_house_generic_medium_windowed.py b/scripts/object/building/player/player_house_generic_medium_windowed.py index ccad8904..175f5b8e 100644 --- a/scripts/object/building/player/player_house_generic_medium_windowed.py +++ b/scripts/object/building/player/player_house_generic_medium_windowed.py @@ -1,4 +1,11 @@ import sys def setup(core, object): + sign = core.objectService.createChildObject(object, 'object/tangible/sign/player/shared_house_address.iff', 5.5, 2.26, 7.8, -1, 0, -1) + print(sign) + object.setAttachment("structureSign", sign) + + structureterminal = core.objectService.createChildObject(object, 'object/tangible/terminal/shared_terminal_player_structure.iff', 10.7, 0.5, 3.5, 0.707108, -0.707108, 1) + #structureterminal.setAttachment('radial_filename', 'structure_management_terminal') + structureterminal.setAttachment('housing_parentstruct', object) return \ No newline at end of file diff --git a/scripts/object/building/player/player_house_generic_medium_windowed_s02.py b/scripts/object/building/player/player_house_generic_medium_windowed_s02.py index ccad8904..35ddb590 100644 --- a/scripts/object/building/player/player_house_generic_medium_windowed_s02.py +++ b/scripts/object/building/player/player_house_generic_medium_windowed_s02.py @@ -1,4 +1,11 @@ import sys def setup(core, object): + sign = core.objectService.createChildObject(object, 'object/tangible/sign/player/shared_house_address.iff', 5.5, 2.26, 7.8, -1, 0, -1) + print(sign) + object.setAttachment("structureSign", sign) + + structureterminal = core.objectService.createChildObject(object, 'object/tangible/terminal/shared_terminal_player_structure.iff', 10.7, 0.5, 2.8, 0.707108, -0.707108, 1) + #structureterminal.setAttachment('radial_filename', 'structure_management_terminal') + structureterminal.setAttachment('housing_parentstruct', object) return \ No newline at end of file diff --git a/scripts/object/building/player/player_house_generic_small_style_01.py b/scripts/object/building/player/player_house_generic_small_style_01.py index ccad8904..6e0ae61d 100644 --- a/scripts/object/building/player/player_house_generic_small_style_01.py +++ b/scripts/object/building/player/player_house_generic_small_style_01.py @@ -1,4 +1,11 @@ import sys def setup(core, object): + sign = core.objectService.createChildObject(object, 'object/tangible/sign/player/shared_house_address.iff', -7.39, 2.36, 2, -1, 0, -1) + print(sign) + object.setAttachment("structureSign", sign) + + structureterminal = core.objectService.createChildObject(object, 'object/tangible/terminal/shared_terminal_player_structure.iff', -5, 0.74, -1.81, 0.707107, -0.707107, 1) + #structureterminal.setAttachment('radial_filename', 'structure_management_terminal') + structureterminal.setAttachment('housing_parentstruct', object) return \ No newline at end of file diff --git a/scripts/object/building/player/player_house_generic_small_style_01_floorplan_02.py b/scripts/object/building/player/player_house_generic_small_style_01_floorplan_02.py index ccad8904..6e0ae61d 100644 --- a/scripts/object/building/player/player_house_generic_small_style_01_floorplan_02.py +++ b/scripts/object/building/player/player_house_generic_small_style_01_floorplan_02.py @@ -1,4 +1,11 @@ import sys def setup(core, object): + sign = core.objectService.createChildObject(object, 'object/tangible/sign/player/shared_house_address.iff', -7.39, 2.36, 2, -1, 0, -1) + print(sign) + object.setAttachment("structureSign", sign) + + structureterminal = core.objectService.createChildObject(object, 'object/tangible/terminal/shared_terminal_player_structure.iff', -5, 0.74, -1.81, 0.707107, -0.707107, 1) + #structureterminal.setAttachment('radial_filename', 'structure_management_terminal') + structureterminal.setAttachment('housing_parentstruct', object) return \ No newline at end of file diff --git a/scripts/object/building/player/player_house_generic_small_style_02.py b/scripts/object/building/player/player_house_generic_small_style_02.py index ccad8904..d301f713 100644 --- a/scripts/object/building/player/player_house_generic_small_style_02.py +++ b/scripts/object/building/player/player_house_generic_small_style_02.py @@ -1,4 +1,11 @@ import sys def setup(core, object): + sign = core.objectService.createChildObject(object, 'object/tangible/sign/player/shared_house_address.iff', -1.9, 2.86, 8.35, -1, 0, -1) + print(sign) + object.setAttachment("structureSign", sign) + + structureterminal = core.objectService.createChildObject(object, 'object/tangible/terminal/shared_terminal_player_structure.iff', 6.5, 0.5, -3.8, 0.707108, -0.707108, 3) + #structureterminal.setAttachment('radial_filename', 'structure_management_terminal') + structureterminal.setAttachment('housing_parentstruct', object) return \ No newline at end of file diff --git a/scripts/object/building/player/player_house_generic_small_style_02_floorplan_02.py b/scripts/object/building/player/player_house_generic_small_style_02_floorplan_02.py index ccad8904..faba7813 100644 --- a/scripts/object/building/player/player_house_generic_small_style_02_floorplan_02.py +++ b/scripts/object/building/player/player_house_generic_small_style_02_floorplan_02.py @@ -1,4 +1,11 @@ import sys def setup(core, object): + sign = core.objectService.createChildObject(object, 'object/tangible/sign/player/shared_house_address.iff', -1.9, 2.86, 8.35, -1, 0, -1) + print(sign) + object.setAttachment("structureSign", sign) + + structureterminal = core.objectService.createChildObject(object, 'object/tangible/terminal/shared_terminal_player_structure.iff', 6.5, 0.5, -3.8, 0.707108, -0.707108, 2) + #structureterminal.setAttachment('radial_filename', 'structure_management_terminal') + structureterminal.setAttachment('housing_parentstruct', object) return \ No newline at end of file diff --git a/scripts/object/building/player/player_house_generic_small_window_style_03.py b/scripts/object/building/player/player_house_generic_small_window_style_03.py index ccad8904..06b43e10 100644 --- a/scripts/object/building/player/player_house_generic_small_window_style_03.py +++ b/scripts/object/building/player/player_house_generic_small_window_style_03.py @@ -1,4 +1,12 @@ import sys + def setup(core, object): + sign = core.objectService.createChildObject(object, 'object/tangible/sign/player/shared_house_address.iff', -6.6, 2.36, 6.3, -1, 0, -1) + print(sign) + object.setAttachment("structureSign", sign) + + structureterminal = core.objectService.createChildObject(object, 'object/tangible/terminal/shared_terminal_player_structure.iff', 7, 0.74, -1.81, 0.707107, -0.707107, 1) + #structureterminal.setAttachment('radial_filename', 'structure_management_terminal') + structureterminal.setAttachment('housing_parentstruct', object) return \ No newline at end of file diff --git a/scripts/object/building/player/player_house_generic_small_windowed.py b/scripts/object/building/player/player_house_generic_small_windowed.py index ccad8904..6e0ae61d 100644 --- a/scripts/object/building/player/player_house_generic_small_windowed.py +++ b/scripts/object/building/player/player_house_generic_small_windowed.py @@ -1,4 +1,11 @@ import sys def setup(core, object): + sign = core.objectService.createChildObject(object, 'object/tangible/sign/player/shared_house_address.iff', -7.39, 2.36, 2, -1, 0, -1) + print(sign) + object.setAttachment("structureSign", sign) + + structureterminal = core.objectService.createChildObject(object, 'object/tangible/terminal/shared_terminal_player_structure.iff', -5, 0.74, -1.81, 0.707107, -0.707107, 1) + #structureterminal.setAttachment('radial_filename', 'structure_management_terminal') + structureterminal.setAttachment('housing_parentstruct', object) return \ No newline at end of file diff --git a/scripts/object/building/player/player_house_hangar.py b/scripts/object/building/player/player_house_hangar.py index ccad8904..a3c2e750 100644 --- a/scripts/object/building/player/player_house_hangar.py +++ b/scripts/object/building/player/player_house_hangar.py @@ -1,4 +1,12 @@ import sys +from engine.resources.scene import Quaternion def setup(core, object): + sign = core.objectService.createChildObject(object, 'object/tangible/sign/player/shared_house_address.iff', -9.2, 2.86, 0.8, 1, 0, -1) + print(sign) + object.setAttachment("structureSign", sign) + + structureterminal = core.objectService.createChildObject(object, 'object/tangible/terminal/shared_terminal_player_structure.iff', 9.0, 0.7, -2, 0.707108, -0.707108, 1) + #structureterminal.setAttachment('radial_filename', 'structure_management_terminal') + structureterminal.setAttachment('housing_parentstruct', object) return \ No newline at end of file diff --git a/scripts/object/building/player/player_house_jabbas_sail_barge.py b/scripts/object/building/player/player_house_jabbas_sail_barge.py index ccad8904..354beadc 100644 --- a/scripts/object/building/player/player_house_jabbas_sail_barge.py +++ b/scripts/object/building/player/player_house_jabbas_sail_barge.py @@ -1,4 +1,12 @@ import sys +from engine.resources.scene import Quaternion def setup(core, object): + sign = core.objectService.createChildObject(object, 'object/tangible/sign/player/shared_house_address.iff', 0, 2.86, -3.5, 0, 1, -1) + print(sign) + object.setAttachment("structureSign", sign) + + structureterminal = core.objectService.createChildObject(object, 'object/tangible/terminal/shared_terminal_player_structure.iff', 9.0, 0.7, -2, 0.707108, -0.707108, 1) + #structureterminal.setAttachment('radial_filename', 'structure_management_terminal') + structureterminal.setAttachment('housing_parentstruct', object) return \ No newline at end of file diff --git a/scripts/object/building/player/player_house_jedi_meditation_room.py b/scripts/object/building/player/player_house_jedi_meditation_room.py index ccad8904..b15dd1a4 100644 --- a/scripts/object/building/player/player_house_jedi_meditation_room.py +++ b/scripts/object/building/player/player_house_jedi_meditation_room.py @@ -1,4 +1,12 @@ import sys +from engine.resources.scene import Quaternion def setup(core, object): + sign = core.objectService.createChildObject(object, 'object/tangible/sign/player/shared_house_address.iff', 3, 2.86, 5.7, 1, 0, -1) + print(sign) + object.setAttachment("structureSign", sign) + + structureterminal = core.objectService.createChildObject(object, 'object/tangible/terminal/shared_terminal_player_structure.iff', 8.2, 0.7, -1.0, 0.707108, -0.707108, 1) + #structureterminal.setAttachment('radial_filename', 'structure_management_terminal') + structureterminal.setAttachment('housing_parentstruct', object) return \ No newline at end of file diff --git a/scripts/object/building/player/player_house_mustafar_lg.py b/scripts/object/building/player/player_house_mustafar_lg.py index ccad8904..c768c102 100644 --- a/scripts/object/building/player/player_house_mustafar_lg.py +++ b/scripts/object/building/player/player_house_mustafar_lg.py @@ -1,4 +1,11 @@ import sys def setup(core, object): + sign = core.objectService.createChildObject(object, 'object/tangible/sign/player/shared_house_address.iff', 1.5, 2.86, 13.0, -1, 0, -1) + print(sign) + object.setAttachment("structureSign", sign) + + structureterminal = core.objectService.createChildObject(object, 'object/tangible/terminal/shared_terminal_player_structure.iff', -4.1, 0.55, 6.6, 0.714 ,0.714, 1) + #structureterminal.setAttachment('radial_filename', 'structure_management_terminal') + structureterminal.setAttachment('housing_parentstruct', object) return \ No newline at end of file diff --git a/scripts/object/building/player/player_house_naboo_large_style_01.py b/scripts/object/building/player/player_house_naboo_large_style_01.py index ccad8904..7a05615e 100644 --- a/scripts/object/building/player/player_house_naboo_large_style_01.py +++ b/scripts/object/building/player/player_house_naboo_large_style_01.py @@ -1,4 +1,11 @@ import sys def setup(core, object): + sign = core.objectService.createChildObject(object, 'object/tangible/sign/player/shared_house_address.iff', -7, 3, -15.5, 0, 1, -1) + print(sign) + object.setAttachment("structureSign", sign) + + structureterminal = core.objectService.createChildObject(object, 'object/tangible/terminal/shared_terminal_player_structure.iff', 14.8, 4.5, -1.8, 0.707108, -0.707108, 2) + #structureterminal.setAttachment('radial_filename', 'structure_management_terminal') + structureterminal.setAttachment('housing_parentstruct', object) return \ No newline at end of file diff --git a/scripts/object/building/player/player_house_naboo_medium_style_01.py b/scripts/object/building/player/player_house_naboo_medium_style_01.py index ccad8904..fd60d18b 100644 --- a/scripts/object/building/player/player_house_naboo_medium_style_01.py +++ b/scripts/object/building/player/player_house_naboo_medium_style_01.py @@ -1,4 +1,11 @@ import sys def setup(core, object): + sign = core.objectService.createChildObject(object, 'object/tangible/sign/player/shared_house_address.iff', -2.2, 3, -11.5, 1, 1, -1) + print(sign) + object.setAttachment("structureSign", sign) + + structureterminal = core.objectService.createChildObject(object, 'object/tangible/terminal/shared_terminal_player_structure.iff', 9.8, 0.7, -10.4, 0, 1, 1) + #structureterminal.setAttachment('radial_filename', 'structure_management_terminal') + structureterminal.setAttachment('housing_parentstruct', object) return \ No newline at end of file diff --git a/scripts/object/building/player/player_house_naboo_small_style_01.py b/scripts/object/building/player/player_house_naboo_small_style_01.py index ccad8904..cacc9a2a 100644 --- a/scripts/object/building/player/player_house_naboo_small_style_01.py +++ b/scripts/object/building/player/player_house_naboo_small_style_01.py @@ -1,4 +1,11 @@ import sys def setup(core, object): + sign = core.objectService.createChildObject(object, 'object/tangible/sign/player/shared_house_address.iff', -1.7, 3, -8.2, 0, 1, -1) + print(sign) + object.setAttachment("structureSign", sign) + + structureterminal = core.objectService.createChildObject(object, 'object/tangible/terminal/shared_terminal_player_structure.iff', 0, 0.7, 6.2, 1, 0, 1) + #structureterminal.setAttachment('radial_filename', 'structure_management_terminal') + structureterminal.setAttachment('housing_parentstruct', object) return \ No newline at end of file diff --git a/scripts/object/building/player/player_house_naboo_small_style_02.py b/scripts/object/building/player/player_house_naboo_small_style_02.py index ccad8904..90382dc1 100644 --- a/scripts/object/building/player/player_house_naboo_small_style_02.py +++ b/scripts/object/building/player/player_house_naboo_small_style_02.py @@ -1,4 +1,11 @@ import sys def setup(core, object): + sign = core.objectService.createChildObject(object, 'object/tangible/sign/player/shared_house_address.iff', 8.4, 3, 7.2, 0.2, 0, -1) + print(sign) + object.setAttachment("structureSign", sign) + + structureterminal = core.objectService.createChildObject(object, 'object/tangible/terminal/shared_terminal_player_structure.iff', 0.4, 0.5, 6.2, 1, 0, 2) + #structureterminal.setAttachment('radial_filename', 'structure_management_terminal') + structureterminal.setAttachment('housing_parentstruct', object) return \ No newline at end of file diff --git a/scripts/object/building/player/player_house_naboo_small_window_style_01.py b/scripts/object/building/player/player_house_naboo_small_window_style_01.py index ccad8904..cacc9a2a 100644 --- a/scripts/object/building/player/player_house_naboo_small_window_style_01.py +++ b/scripts/object/building/player/player_house_naboo_small_window_style_01.py @@ -1,4 +1,11 @@ import sys def setup(core, object): + sign = core.objectService.createChildObject(object, 'object/tangible/sign/player/shared_house_address.iff', -1.7, 3, -8.2, 0, 1, -1) + print(sign) + object.setAttachment("structureSign", sign) + + structureterminal = core.objectService.createChildObject(object, 'object/tangible/terminal/shared_terminal_player_structure.iff', 0, 0.7, 6.2, 1, 0, 1) + #structureterminal.setAttachment('radial_filename', 'structure_management_terminal') + structureterminal.setAttachment('housing_parentstruct', object) return \ No newline at end of file diff --git a/scripts/object/building/player/player_house_sandcrawler.py b/scripts/object/building/player/player_house_sandcrawler.py index ccad8904..3d2f2529 100644 --- a/scripts/object/building/player/player_house_sandcrawler.py +++ b/scripts/object/building/player/player_house_sandcrawler.py @@ -1,4 +1,12 @@ import sys +from engine.resources.scene import Quaternion def setup(core, object): + sign = core.objectService.createChildObject(object, 'object/tangible/sign/player/shared_house_address.iff', -8.75, 3.86, 1, 0.5, 0.5, -1) + print(sign) + object.setAttachment("structureSign", sign) + + structureterminal = core.objectService.createChildObject(object, 'object/tangible/terminal/shared_terminal_player_structure.iff', 6, 3.5, 0.7, 0.707108, -0.707108, 1) + #structureterminal.setAttachment('radial_filename', 'structure_management_terminal') + structureterminal.setAttachment('housing_parentstruct', object) return \ No newline at end of file diff --git a/scripts/object/building/player/player_house_sith_meditation_room.py b/scripts/object/building/player/player_house_sith_meditation_room.py index ccad8904..fc3b32ac 100644 --- a/scripts/object/building/player/player_house_sith_meditation_room.py +++ b/scripts/object/building/player/player_house_sith_meditation_room.py @@ -1,4 +1,12 @@ import sys +from engine.resources.scene import Quaternion def setup(core, object): + sign = core.objectService.createChildObject(object, 'object/tangible/sign/player/shared_house_address.iff', 3, 2.86, 5.7, 1, 0, -1) + print(sign) + object.setAttachment("structureSign", sign) + + structureterminal = core.objectService.createChildObject(object, 'object/tangible/terminal/shared_terminal_player_structure.iff', 4.2, 0.7, 2, 0.707108, -0.707108, 1) + #structureterminal.setAttachment('radial_filename', 'structure_management_terminal') + structureterminal.setAttachment('housing_parentstruct', object) return \ No newline at end of file diff --git a/scripts/object/building/player/player_house_tatooine_large_style_01.py b/scripts/object/building/player/player_house_tatooine_large_style_01.py index ccad8904..89f9d082 100644 --- a/scripts/object/building/player/player_house_tatooine_large_style_01.py +++ b/scripts/object/building/player/player_house_tatooine_large_style_01.py @@ -1,4 +1,11 @@ import sys def setup(core, object): + sign = core.objectService.createChildObject(object, 'object/tangible/sign/player/shared_house_address.iff', -3, 3, 15.8, -1, 0, -1) + print(sign) + object.setAttachment("structureSign", sign) + + structureterminal = core.objectService.createChildObject(object, 'object/tangible/terminal/shared_terminal_player_structure.iff', 9, 0.5, 12, 1, 0, 2) + #structureterminal.setAttachment('radial_filename', 'structure_management_terminal') + structureterminal.setAttachment('housing_parentstruct', object) return \ No newline at end of file diff --git a/scripts/object/building/player/player_house_tatooine_medium_style_01.py b/scripts/object/building/player/player_house_tatooine_medium_style_01.py index ccad8904..3b5cb8e9 100644 --- a/scripts/object/building/player/player_house_tatooine_medium_style_01.py +++ b/scripts/object/building/player/player_house_tatooine_medium_style_01.py @@ -1,4 +1,11 @@ import sys def setup(core, object): + sign = core.objectService.createChildObject(object, 'object/tangible/sign/player/shared_house_address.iff', 4.3, 2.26, 12.5, -1, 0, -1) + print(sign) + object.setAttachment("structureSign", sign) + + structureterminal = core.objectService.createChildObject(object, 'object/tangible/terminal/shared_terminal_player_structure.iff', 4, 0.5, 6.5, 1, 0, 2) + #structureterminal.setAttachment('radial_filename', 'structure_management_terminal') + structureterminal.setAttachment('housing_parentstruct', object) return \ No newline at end of file diff --git a/scripts/object/building/player/player_house_tatooine_small_style_01.py b/scripts/object/building/player/player_house_tatooine_small_style_01.py index ccad8904..2c07f46e 100644 --- a/scripts/object/building/player/player_house_tatooine_small_style_01.py +++ b/scripts/object/building/player/player_house_tatooine_small_style_01.py @@ -1,4 +1,11 @@ import sys def setup(core, object): + sign = core.objectService.createChildObject(object, 'object/tangible/sign/player/shared_house_address.iff', -1.7, 3, 7.9, 1, 0, -1) + print(sign) + object.setAttachment("structureSign", sign) + + structureterminal = core.objectService.createChildObject(object, 'object/tangible/terminal/shared_terminal_player_structure.iff', -6, 0.7, 6.2, 1, 0, 2) + #structureterminal.setAttachment('radial_filename', 'structure_management_terminal') + structureterminal.setAttachment('housing_parentstruct', object) return \ No newline at end of file diff --git a/scripts/object/building/player/player_house_tatooine_small_style_02.py b/scripts/object/building/player/player_house_tatooine_small_style_02.py index ccad8904..f4846b69 100644 --- a/scripts/object/building/player/player_house_tatooine_small_style_02.py +++ b/scripts/object/building/player/player_house_tatooine_small_style_02.py @@ -1,4 +1,11 @@ import sys def setup(core, object): + sign = core.objectService.createChildObject(object, 'object/tangible/sign/player/shared_house_address.iff', 4, 3, 7.6, 1, 0, -1) + print(sign) + object.setAttachment("structureSign", sign) + + structureterminal = core.objectService.createChildObject(object, 'object/tangible/terminal/shared_terminal_player_structure.iff', -6, 0.7, 6.2, 1, 0, 2) + #structureterminal.setAttachment('radial_filename', 'structure_management_terminal') + structureterminal.setAttachment('housing_parentstruct', object) return \ No newline at end of file diff --git a/scripts/object/building/player/player_house_tatooine_small_window_style_01.py b/scripts/object/building/player/player_house_tatooine_small_window_style_01.py index ccad8904..2c07f46e 100644 --- a/scripts/object/building/player/player_house_tatooine_small_window_style_01.py +++ b/scripts/object/building/player/player_house_tatooine_small_window_style_01.py @@ -1,4 +1,11 @@ import sys def setup(core, object): + sign = core.objectService.createChildObject(object, 'object/tangible/sign/player/shared_house_address.iff', -1.7, 3, 7.9, 1, 0, -1) + print(sign) + object.setAttachment("structureSign", sign) + + structureterminal = core.objectService.createChildObject(object, 'object/tangible/terminal/shared_terminal_player_structure.iff', -6, 0.7, 6.2, 1, 0, 2) + #structureterminal.setAttachment('radial_filename', 'structure_management_terminal') + structureterminal.setAttachment('housing_parentstruct', object) return \ No newline at end of file diff --git a/scripts/object/building/player/player_house_tcg_8_bespin_house.py b/scripts/object/building/player/player_house_tcg_8_bespin_house.py index ccad8904..2c07f46e 100644 --- a/scripts/object/building/player/player_house_tcg_8_bespin_house.py +++ b/scripts/object/building/player/player_house_tcg_8_bespin_house.py @@ -1,4 +1,11 @@ import sys def setup(core, object): + sign = core.objectService.createChildObject(object, 'object/tangible/sign/player/shared_house_address.iff', -1.7, 3, 7.9, 1, 0, -1) + print(sign) + object.setAttachment("structureSign", sign) + + structureterminal = core.objectService.createChildObject(object, 'object/tangible/terminal/shared_terminal_player_structure.iff', -6, 0.7, 6.2, 1, 0, 2) + #structureterminal.setAttachment('radial_filename', 'structure_management_terminal') + structureterminal.setAttachment('housing_parentstruct', object) return \ No newline at end of file diff --git a/scripts/object/building/player/player_merchant_tent_style_01.py b/scripts/object/building/player/player_merchant_tent_style_01.py index ccad8904..4f29b4f2 100644 --- a/scripts/object/building/player/player_merchant_tent_style_01.py +++ b/scripts/object/building/player/player_merchant_tent_style_01.py @@ -1,4 +1,11 @@ import sys def setup(core, object): + sign = core.objectService.createChildObject(object, 'object/tangible/sign/shared_streetsign_upright_style_01.iff', 3.5, -0.3, 3.5, -1, 0, -1) + print(sign) + object.setAttachment("structureSign", sign) + + structureterminal = core.objectService.createChildObject(object, 'object/tangible/terminal/shared_terminal_player_structure.iff', -3.4, 0.5, 0, 0.7, 0.7, 1) + #structureterminal.setAttachment('radial_filename', 'structure_management_terminal') + structureterminal.setAttachment('housing_parentstruct', object) return \ No newline at end of file diff --git a/scripts/object/building/player/player_merchant_tent_style_02.py b/scripts/object/building/player/player_merchant_tent_style_02.py index ccad8904..4f29b4f2 100644 --- a/scripts/object/building/player/player_merchant_tent_style_02.py +++ b/scripts/object/building/player/player_merchant_tent_style_02.py @@ -1,4 +1,11 @@ import sys def setup(core, object): + sign = core.objectService.createChildObject(object, 'object/tangible/sign/shared_streetsign_upright_style_01.iff', 3.5, -0.3, 3.5, -1, 0, -1) + print(sign) + object.setAttachment("structureSign", sign) + + structureterminal = core.objectService.createChildObject(object, 'object/tangible/terminal/shared_terminal_player_structure.iff', -3.4, 0.5, 0, 0.7, 0.7, 1) + #structureterminal.setAttachment('radial_filename', 'structure_management_terminal') + structureterminal.setAttachment('housing_parentstruct', object) return \ No newline at end of file diff --git a/scripts/object/building/player/player_merchant_tent_style_03.py b/scripts/object/building/player/player_merchant_tent_style_03.py index ccad8904..4f29b4f2 100644 --- a/scripts/object/building/player/player_merchant_tent_style_03.py +++ b/scripts/object/building/player/player_merchant_tent_style_03.py @@ -1,4 +1,11 @@ import sys def setup(core, object): + sign = core.objectService.createChildObject(object, 'object/tangible/sign/shared_streetsign_upright_style_01.iff', 3.5, -0.3, 3.5, -1, 0, -1) + print(sign) + object.setAttachment("structureSign", sign) + + structureterminal = core.objectService.createChildObject(object, 'object/tangible/terminal/shared_terminal_player_structure.iff', -3.4, 0.5, 0, 0.7, 0.7, 1) + #structureterminal.setAttachment('radial_filename', 'structure_management_terminal') + structureterminal.setAttachment('housing_parentstruct', object) return \ No newline at end of file diff --git a/scripts/object/building/restuss/restuss_shuttleport.py b/scripts/object/building/restuss/restuss_shuttleport.py index ccad8904..a3ddedaa 100644 --- a/scripts/object/building/restuss/restuss_shuttleport.py +++ b/scripts/object/building/restuss/restuss_shuttleport.py @@ -1,4 +1,5 @@ import sys def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/building/restuss/restuss_starport.py b/scripts/object/building/restuss/restuss_starport.py index ccad8904..b686025c 100644 --- a/scripts/object/building/restuss/restuss_starport.py +++ b/scripts/object/building/restuss/restuss_starport.py @@ -1,4 +1,16 @@ import sys def setup(core, object): + + stcSvc = core.staticService + objSvc = core.objectService + objSvc.createChildObject(object, 'object/creature/npc/theme_park/shared_player_transport.iff', 0, 7, 0, 0.707107, 0.707107) + objSvc.createChildObject(object, 'object/tangible/travel/ticket_collector/shared_ticket_collector.iff', 1, 0, -10, 0, 1) + + cell = object.getCellByCellNumber(1) + + if cell: + stcSvc.spawnObject('object/tangible/terminal/shared_terminal_travel.iff', object.getPlanet().getName(), cell.getObjectID(), float(-3.12), float(0.14659503), float(-17.57), float(0.707107), float(-0.707107)) + + return \ No newline at end of file diff --git a/scripts/object/building/tatooine/bank_tatooine.py b/scripts/object/building/tatooine/bank_tatooine.py index ccad8904..8a96a6ad 100644 --- a/scripts/object/building/tatooine/bank_tatooine.py +++ b/scripts/object/building/tatooine/bank_tatooine.py @@ -1,4 +1,12 @@ import sys def setup(core, object): + + objSvc = core.objectService + + objSvc.createChildObject(object, 'object/tangible/terminal/shared_terminal_bank.iff', 0, 0.5, 4.2, 0, 1) + objSvc.createChildObject(object, 'object/tangible/terminal/shared_terminal_bank.iff', 0, 0.5, -4.2, 1, 0) + objSvc.createChildObject(object, 'object/tangible/terminal/shared_terminal_bank.iff', 4.2, 0.5, 0.707107, 0.707107, 1) + objSvc.createChildObject(object, 'object/tangible/terminal/shared_terminal_bank.iff', -4.2, 0.5, 0, -0.707107, 0.707107) + return \ No newline at end of file diff --git a/scripts/object/building/tatooine/cloning_facility_tatooine.py b/scripts/object/building/tatooine/cloning_facility_tatooine.py index 7673e657..bc7b58d6 100644 --- a/scripts/object/building/tatooine/cloning_facility_tatooine.py +++ b/scripts/object/building/tatooine/cloning_facility_tatooine.py @@ -3,12 +3,9 @@ from java.util import Vector from resources.common import SpawnPoint def setup(core, object): - stcSvc = core.staticService - cell = object.getCellByCellNumber(2) - - if cell: - stcSvc.spawnObject('object/tangible/terminal/shared_terminal_cloning.iff', object.getPlanet().getName(), cell.getObjectID(), float(1), float(-0.05), float(2.5), float(0), float(1)) - stcSvc.spawnObject('object/tangible/terminal/shared_terminal_cloning.iff', object.getPlanet().getName(), cell.getObjectID(), float(1), float(-0.05), float(-1.35), float(1), float(0)) + objSvc = core.objectService + objSvc.createChildObject(object, 'object/tangible/terminal/shared_terminal_cloning.iff', float(1), float(-0.05), float(2.5), float(0), float(1), 2) + objSvc.createChildObject(object, 'object/tangible/terminal/shared_terminal_cloning.iff', float(1), float(-0.05), float(-1.35), float(1), float(0), 2) spawnPoints = Vector() spawnPoints.add(SpawnPoint(-16.6514, -4.29167, -10.4976, 0.709453, 0.704753, 4)) diff --git a/scripts/object/building/tatooine/cloning_facility_tatooine_small.py b/scripts/object/building/tatooine/cloning_facility_tatooine_small.py index 2994a68a..73dc07de 100644 --- a/scripts/object/building/tatooine/cloning_facility_tatooine_small.py +++ b/scripts/object/building/tatooine/cloning_facility_tatooine_small.py @@ -3,12 +3,9 @@ from java.util import Vector from resources.common import SpawnPoint def setup(core, object): - stcSvc = core.staticService - cell = object.getCellByCellNumber(10) - - if cell: - stcSvc.spawnObject('object/tangible/terminal/shared_terminal_cloning.iff', object.getPlanet().getName(), cell.getObjectID(), float(-0.42), float(-0.38), float(-0.4), float(1), float(0)) - + objSvc = core.objectService + objSvc.createChildObject(object, 'object/tangible/terminal/shared_terminal_cloning.iff', float(-0.42), float(-0.38), float(-0.4), float(1), float(0), 10) + spawnPoints = Vector() spawnPoints.add(SpawnPoint(0.445015, 0.271775, 1.39199, 0.707038, 0.707176, 9)) diff --git a/scripts/object/building/tatooine/shuttleport_tatooine.py b/scripts/object/building/tatooine/shuttleport_tatooine.py index c5cf71c2..5a651a1c 100644 --- a/scripts/object/building/tatooine/shuttleport_tatooine.py +++ b/scripts/object/building/tatooine/shuttleport_tatooine.py @@ -2,6 +2,11 @@ import sys def setup(core, object): + objSvc = core.objectService + objSvc.createChildObject(object, 'object/tangible/terminal/shared_terminal_travel.iff', -13, 0.6, -9, -0.707107, 0.707107) + objSvc.createChildObject(object, 'object/creature/npc/theme_park/shared_player_shuttle.iff', 0, 0.6, 0, 1, 0) + objSvc.createChildObject(object, 'object/tangible/travel/ticket_collector/shared_ticket_collector.iff', -13, 0.6, 10, -0.707107, 0.707107) + core.mapService.addLocation(object.getPlanet(), 'Shuttleport', object.getPosition().x, object.getPosition().z, 14, 0, 0) return \ No newline at end of file diff --git a/scripts/object/building/tatooine/starport_tatooine.py b/scripts/object/building/tatooine/starport_tatooine.py index 34468ac1..2194e3a2 100644 --- a/scripts/object/building/tatooine/starport_tatooine.py +++ b/scripts/object/building/tatooine/starport_tatooine.py @@ -1,14 +1,13 @@ import sys def setup(core, object): - stcSvc = core.staticService - cell = object.getCellByCellNumber(4) - - if cell: - stcSvc.spawnObject('object/tangible/terminal/shared_terminal_travel.iff', object.getPlanet().getName(), cell.getObjectID(), float(11.5), float(0.6), float(51.3), float(0.195405), float(-0.980722)) - stcSvc.spawnObject('object/tangible/terminal/shared_terminal_travel.iff', object.getPlanet().getName(), cell.getObjectID(), float(3.1), float(0.6), float(49), float(0), float(1)) - stcSvc.spawnObject('object/tangible/terminal/shared_terminal_travel.iff', object.getPlanet().getName(), cell.getObjectID(), float(-2.7), float(0.6), float(49), float(0), float(1)) - stcSvc.spawnObject('object/tangible/terminal/shared_terminal_travel.iff', object.getPlanet().getName(), cell.getObjectID(), float(-13.2), float(0.6), float(51.3), float(-0.195405), float(-0.980722)) + objSvc = core.objectService + objSvc.createChildObject(object, 'object/tangible/terminal/shared_terminal_travel.iff', float(11.5), float(0.6), float(51.3), float(0.195405), float(-0.980722), 4) + objSvc.createChildObject(object, 'object/tangible/terminal/shared_terminal_travel.iff', float(3.1), float(0.6), float(49), float(0), float(1), 4) + objSvc.createChildObject(object, 'object/tangible/terminal/shared_terminal_travel.iff', float(-2.7), float(0.6), float(49), float(0), float(1), 4) + objSvc.createChildObject(object, 'object/tangible/terminal/shared_terminal_travel.iff', float(-13.2), float(0.6), float(51.3), float(-0.195405), float(-0.980722), 4) + objSvc.createChildObject(object, 'object/creature/npc/theme_park/shared_player_transport.iff', 0, 0, 0, 1, 0) + objSvc.createChildObject(object, 'object/tangible/travel/ticket_collector/shared_ticket_collector.iff', 10, 0, -10, 0.707107, 0.707107) core.mapService.addLocation(object.getPlanet(), 'Starport', object.getPosition().x, object.getPosition().z, 15, 0, 0) return \ No newline at end of file diff --git a/scripts/object/creature/npc/droid/imperial_probot_bounty.py b/scripts/object/creature/npc/droid/imperial_probot_bounty.py index ccad8904..de71643c 100644 --- a/scripts/object/creature/npc/droid/imperial_probot_bounty.py +++ b/scripts/object/creature/npc/droid/imperial_probot_bounty.py @@ -1,4 +1,8 @@ +from resources.datatables import Options import sys def setup(core, object): + object.setAttachment('radial_filename', 'object/conversation'); + object.setAttachment('conversationFile','missions/bounty_droid_probot') + object.setOptionsBitmask(Options.CONVERSABLE | Options.INVULNERABLE) return \ No newline at end of file diff --git a/scripts/object/creature/npc/theme_park/lambda_shuttle.py b/scripts/object/creature/npc/theme_park/lambda_shuttle.py index ccad8904..3e8a7cbb 100644 --- a/scripts/object/creature/npc/theme_park/lambda_shuttle.py +++ b/scripts/object/creature/npc/theme_park/lambda_shuttle.py @@ -1,4 +1,5 @@ import sys def setup(core, object): + #object.setPosture(2) return \ No newline at end of file diff --git a/scripts/object/creature/npc/theme_park/player_shuttle.py b/scripts/object/creature/npc/theme_park/player_shuttle.py index ccad8904..2fc11f63 100644 --- a/scripts/object/creature/npc/theme_park/player_shuttle.py +++ b/scripts/object/creature/npc/theme_park/player_shuttle.py @@ -1,4 +1,14 @@ import sys def setup(core, object): + object.setPosture(0) # land = 0 : away = 2 + object.setOptionsBitmask(256) + + tp = core.travelService.getNearestTravelPoint(object, 300) + + if tp and tp is not None: + tp.setShuttle(object) + tp.setShuttleAvailable(True) + tp.setShuttleLanding(False) + return return \ No newline at end of file diff --git a/scripts/object/creature/npc/theme_park/player_transport.py b/scripts/object/creature/npc/theme_park/player_transport.py index 3e7b455f..42849403 100644 --- a/scripts/object/creature/npc/theme_park/player_transport.py +++ b/scripts/object/creature/npc/theme_park/player_transport.py @@ -2,6 +2,13 @@ import sys def setup(core, object): object.setPosture(0) # land = 0 : away = 2 - tp = core.travelService.getNearestTravelPoint(object) - tp.setShuttle(object) + object.setOptionsBitmask(256) + + tp = core.travelService.getNearestTravelPoint(object, 300) + + if tp and tp is not None: + tp.setShuttle(object) + tp.setShuttleAvailable(True) + tp.setShuttleLanding(False) + return return \ No newline at end of file diff --git a/scripts/object/creature/npc/theme_park/player_transport_theed_hangar.py b/scripts/object/creature/npc/theme_park/player_transport_theed_hangar.py index ccad8904..277d62b1 100644 --- a/scripts/object/creature/npc/theme_park/player_transport_theed_hangar.py +++ b/scripts/object/creature/npc/theme_park/player_transport_theed_hangar.py @@ -1,4 +1,14 @@ import sys def setup(core, object): + object.setPosture(0) # land = 0 : away = 2 + object.setOptionsBitmask(256) + + tp = core.travelService.getNearestTravelPoint(object, 500) + + if tp and tp is not None: + tp.setShuttle(object) + tp.setShuttleAvailable(True) + tp.setShuttleLanding(False) + return return \ No newline at end of file diff --git a/scripts/object/creature/player/bothan_female.py b/scripts/object/creature/player/bothan_female.py index ccad8904..a77a99e7 100644 --- a/scripts/object/creature/player/bothan_female.py +++ b/scripts/object/creature/player/bothan_female.py @@ -1,4 +1,5 @@ import sys def setup(core, object): + object.setAttachment('radial_filename', 'creature/player') return \ No newline at end of file diff --git a/scripts/object/creature/player/bothan_male.py b/scripts/object/creature/player/bothan_male.py index ccad8904..a77a99e7 100644 --- a/scripts/object/creature/player/bothan_male.py +++ b/scripts/object/creature/player/bothan_male.py @@ -1,4 +1,5 @@ import sys def setup(core, object): + object.setAttachment('radial_filename', 'creature/player') return \ No newline at end of file diff --git a/scripts/object/creature/player/human_female.py b/scripts/object/creature/player/human_female.py index ccad8904..a77a99e7 100644 --- a/scripts/object/creature/player/human_female.py +++ b/scripts/object/creature/player/human_female.py @@ -1,4 +1,5 @@ import sys def setup(core, object): + object.setAttachment('radial_filename', 'creature/player') return \ No newline at end of file diff --git a/scripts/object/creature/player/human_male.py b/scripts/object/creature/player/human_male.py index ccad8904..a77a99e7 100644 --- a/scripts/object/creature/player/human_male.py +++ b/scripts/object/creature/player/human_male.py @@ -1,4 +1,5 @@ import sys def setup(core, object): + object.setAttachment('radial_filename', 'creature/player') return \ No newline at end of file diff --git a/scripts/object/creature/player/ithorian_female.py b/scripts/object/creature/player/ithorian_female.py index ccad8904..a77a99e7 100644 --- a/scripts/object/creature/player/ithorian_female.py +++ b/scripts/object/creature/player/ithorian_female.py @@ -1,4 +1,5 @@ import sys def setup(core, object): + object.setAttachment('radial_filename', 'creature/player') return \ No newline at end of file diff --git a/scripts/object/creature/player/ithorian_male.py b/scripts/object/creature/player/ithorian_male.py index ccad8904..a77a99e7 100644 --- a/scripts/object/creature/player/ithorian_male.py +++ b/scripts/object/creature/player/ithorian_male.py @@ -1,4 +1,5 @@ import sys def setup(core, object): + object.setAttachment('radial_filename', 'creature/player') return \ No newline at end of file diff --git a/scripts/object/creature/player/moncal_female.py b/scripts/object/creature/player/moncal_female.py index ccad8904..a77a99e7 100644 --- a/scripts/object/creature/player/moncal_female.py +++ b/scripts/object/creature/player/moncal_female.py @@ -1,4 +1,5 @@ import sys def setup(core, object): + object.setAttachment('radial_filename', 'creature/player') return \ No newline at end of file diff --git a/scripts/object/creature/player/moncal_male.py b/scripts/object/creature/player/moncal_male.py index ccad8904..a77a99e7 100644 --- a/scripts/object/creature/player/moncal_male.py +++ b/scripts/object/creature/player/moncal_male.py @@ -1,4 +1,5 @@ import sys def setup(core, object): + object.setAttachment('radial_filename', 'creature/player') return \ No newline at end of file diff --git a/scripts/object/creature/player/rodian_female.py b/scripts/object/creature/player/rodian_female.py index ccad8904..a77a99e7 100644 --- a/scripts/object/creature/player/rodian_female.py +++ b/scripts/object/creature/player/rodian_female.py @@ -1,4 +1,5 @@ import sys def setup(core, object): + object.setAttachment('radial_filename', 'creature/player') return \ No newline at end of file diff --git a/scripts/object/creature/player/rodian_male.py b/scripts/object/creature/player/rodian_male.py index ccad8904..a77a99e7 100644 --- a/scripts/object/creature/player/rodian_male.py +++ b/scripts/object/creature/player/rodian_male.py @@ -1,4 +1,5 @@ import sys def setup(core, object): + object.setAttachment('radial_filename', 'creature/player') return \ No newline at end of file diff --git a/scripts/object/creature/player/sullustan_female.py b/scripts/object/creature/player/sullustan_female.py index ccad8904..a77a99e7 100644 --- a/scripts/object/creature/player/sullustan_female.py +++ b/scripts/object/creature/player/sullustan_female.py @@ -1,4 +1,5 @@ import sys def setup(core, object): + object.setAttachment('radial_filename', 'creature/player') return \ No newline at end of file diff --git a/scripts/object/creature/player/sullustan_male.py b/scripts/object/creature/player/sullustan_male.py index ccad8904..a77a99e7 100644 --- a/scripts/object/creature/player/sullustan_male.py +++ b/scripts/object/creature/player/sullustan_male.py @@ -1,4 +1,5 @@ import sys def setup(core, object): + object.setAttachment('radial_filename', 'creature/player') return \ No newline at end of file diff --git a/scripts/object/creature/player/trandoshan_female.py b/scripts/object/creature/player/trandoshan_female.py index ccad8904..a77a99e7 100644 --- a/scripts/object/creature/player/trandoshan_female.py +++ b/scripts/object/creature/player/trandoshan_female.py @@ -1,4 +1,5 @@ import sys def setup(core, object): + object.setAttachment('radial_filename', 'creature/player') return \ No newline at end of file diff --git a/scripts/object/creature/player/trandoshan_male.py b/scripts/object/creature/player/trandoshan_male.py index ccad8904..a77a99e7 100644 --- a/scripts/object/creature/player/trandoshan_male.py +++ b/scripts/object/creature/player/trandoshan_male.py @@ -1,4 +1,5 @@ import sys def setup(core, object): + object.setAttachment('radial_filename', 'creature/player') return \ No newline at end of file diff --git a/scripts/object/creature/player/twilek_female.py b/scripts/object/creature/player/twilek_female.py index ccad8904..a77a99e7 100644 --- a/scripts/object/creature/player/twilek_female.py +++ b/scripts/object/creature/player/twilek_female.py @@ -1,4 +1,5 @@ import sys def setup(core, object): + object.setAttachment('radial_filename', 'creature/player') return \ No newline at end of file diff --git a/scripts/object/creature/player/twilek_male.py b/scripts/object/creature/player/twilek_male.py index ccad8904..a77a99e7 100644 --- a/scripts/object/creature/player/twilek_male.py +++ b/scripts/object/creature/player/twilek_male.py @@ -1,4 +1,5 @@ import sys def setup(core, object): + object.setAttachment('radial_filename', 'creature/player') return \ No newline at end of file diff --git a/scripts/object/creature/player/wookiee_female.py b/scripts/object/creature/player/wookiee_female.py index ccad8904..a77a99e7 100644 --- a/scripts/object/creature/player/wookiee_female.py +++ b/scripts/object/creature/player/wookiee_female.py @@ -1,4 +1,5 @@ import sys def setup(core, object): + object.setAttachment('radial_filename', 'creature/player') return \ No newline at end of file diff --git a/scripts/object/creature/player/wookiee_male.py b/scripts/object/creature/player/wookiee_male.py index ccad8904..a77a99e7 100644 --- a/scripts/object/creature/player/wookiee_male.py +++ b/scripts/object/creature/player/wookiee_male.py @@ -1,4 +1,5 @@ import sys def setup(core, object): + object.setAttachment('radial_filename', 'creature/player') return \ No newline at end of file diff --git a/scripts/object/creature/player/zabrak_female.py b/scripts/object/creature/player/zabrak_female.py index ccad8904..a77a99e7 100644 --- a/scripts/object/creature/player/zabrak_female.py +++ b/scripts/object/creature/player/zabrak_female.py @@ -1,4 +1,5 @@ import sys def setup(core, object): + object.setAttachment('radial_filename', 'creature/player') return \ No newline at end of file diff --git a/scripts/object/creature/player/zabrak_male.py b/scripts/object/creature/player/zabrak_male.py index ccad8904..a77a99e7 100644 --- a/scripts/object/creature/player/zabrak_male.py +++ b/scripts/object/creature/player/zabrak_male.py @@ -1,4 +1,5 @@ import sys def setup(core, object): + object.setAttachment('radial_filename', 'creature/player') return \ No newline at end of file diff --git a/scripts/object/installation/generators/power_generator_fusion_style_1.py b/scripts/object/installation/generators/power_generator_fusion_style_1.py index ccad8904..3b0b69aa 100644 --- a/scripts/object/installation/generators/power_generator_fusion_style_1.py +++ b/scripts/object/installation/generators/power_generator_fusion_style_1.py @@ -1,4 +1,8 @@ import sys def setup(core, object): + object.setAttachment('radial_filename', 'structure/generator') + object.setHarvester_type(5) + object.setMaintenanceCost(30) + object.setGenerator(1) return \ No newline at end of file diff --git a/scripts/object/installation/generators/power_generator_geothermal_style_1.py b/scripts/object/installation/generators/power_generator_geothermal_style_1.py index ccad8904..3b0b69aa 100644 --- a/scripts/object/installation/generators/power_generator_geothermal_style_1.py +++ b/scripts/object/installation/generators/power_generator_geothermal_style_1.py @@ -1,4 +1,8 @@ import sys def setup(core, object): + object.setAttachment('radial_filename', 'structure/generator') + object.setHarvester_type(5) + object.setMaintenanceCost(30) + object.setGenerator(1) return \ No newline at end of file diff --git a/scripts/object/installation/generators/power_generator_photo_bio_style_1.py b/scripts/object/installation/generators/power_generator_photo_bio_style_1.py index ccad8904..3b0b69aa 100644 --- a/scripts/object/installation/generators/power_generator_photo_bio_style_1.py +++ b/scripts/object/installation/generators/power_generator_photo_bio_style_1.py @@ -1,4 +1,8 @@ import sys def setup(core, object): + object.setAttachment('radial_filename', 'structure/generator') + object.setHarvester_type(5) + object.setMaintenanceCost(30) + object.setGenerator(1) return \ No newline at end of file diff --git a/scripts/object/installation/generators/power_generator_solar_style_1.py b/scripts/object/installation/generators/power_generator_solar_style_1.py index ccad8904..3b0b69aa 100644 --- a/scripts/object/installation/generators/power_generator_solar_style_1.py +++ b/scripts/object/installation/generators/power_generator_solar_style_1.py @@ -1,4 +1,8 @@ import sys def setup(core, object): + object.setAttachment('radial_filename', 'structure/generator') + object.setHarvester_type(5) + object.setMaintenanceCost(30) + object.setGenerator(1) return \ No newline at end of file diff --git a/scripts/object/installation/generators/power_generator_wind_style_1.py b/scripts/object/installation/generators/power_generator_wind_style_1.py index ccad8904..0c7bc05c 100644 --- a/scripts/object/installation/generators/power_generator_wind_style_1.py +++ b/scripts/object/installation/generators/power_generator_wind_style_1.py @@ -1,4 +1,8 @@ import sys def setup(core, object): + object.setAttachment('radial_filename', 'structure/generator') + object.setHarvester_type(5) + object.setMaintenanceCost(20) + object.setGenerator(1) return \ No newline at end of file diff --git a/scripts/object/installation/mining_gas/mining_gas_harvester_style_1.py b/scripts/object/installation/mining_gas/mining_gas_harvester_style_1.py index ccad8904..6b49d930 100644 --- a/scripts/object/installation/mining_gas/mining_gas_harvester_style_1.py +++ b/scripts/object/installation/mining_gas/mining_gas_harvester_style_1.py @@ -1,4 +1,8 @@ import sys def setup(core, object): + object.setAttachment('radial_filename', 'structure/harvester') + object.setHarvester_type(3) + object.setPowerCost(25); + object.setMaintenanceCost(16); return \ No newline at end of file diff --git a/scripts/object/installation/mining_gas/mining_gas_harvester_style_2.py b/scripts/object/installation/mining_gas/mining_gas_harvester_style_2.py index ccad8904..7a6f2b77 100644 --- a/scripts/object/installation/mining_gas/mining_gas_harvester_style_2.py +++ b/scripts/object/installation/mining_gas/mining_gas_harvester_style_2.py @@ -1,4 +1,8 @@ import sys def setup(core, object): + object.setAttachment('radial_filename', 'structure/harvester') + object.setHarvester_type(3) + object.setPowerCost(60); + object.setMaintenanceCost(60); return \ No newline at end of file diff --git a/scripts/object/installation/mining_gas/mining_gas_harvester_style_3.py b/scripts/object/installation/mining_gas/mining_gas_harvester_style_3.py index ccad8904..36a2c41e 100644 --- a/scripts/object/installation/mining_gas/mining_gas_harvester_style_3.py +++ b/scripts/object/installation/mining_gas/mining_gas_harvester_style_3.py @@ -1,4 +1,8 @@ import sys def setup(core, object): + object.setAttachment('radial_filename', 'structure/harvester') + object.setHarvester_type(3) + object.setPowerCost(75); + object.setMaintenanceCost(90); return \ No newline at end of file diff --git a/scripts/object/installation/mining_gas/mining_gas_harvester_style_4.py b/scripts/object/installation/mining_gas/mining_gas_harvester_style_4.py index ccad8904..93f4bfec 100644 --- a/scripts/object/installation/mining_gas/mining_gas_harvester_style_4.py +++ b/scripts/object/installation/mining_gas/mining_gas_harvester_style_4.py @@ -1,4 +1,8 @@ import sys def setup(core, object): + object.setAttachment('radial_filename', 'structure/harvester') + object.setHarvester_type(3) + object.setPowerCost(100); + object.setMaintenanceCost(120); return \ No newline at end of file diff --git a/scripts/object/installation/mining_liquid/mining_liquid_harvester_style_1.py b/scripts/object/installation/mining_liquid/mining_liquid_harvester_style_1.py index ccad8904..f8ad23ca 100644 --- a/scripts/object/installation/mining_liquid/mining_liquid_harvester_style_1.py +++ b/scripts/object/installation/mining_liquid/mining_liquid_harvester_style_1.py @@ -1,4 +1,8 @@ import sys def setup(core, object): + object.setAttachment('radial_filename', 'structure/harvester') + object.setHarvester_type(1) + object.setPowerCost(25); + object.setMaintenanceCost(16); return \ No newline at end of file diff --git a/scripts/object/installation/mining_liquid/mining_liquid_harvester_style_2.py b/scripts/object/installation/mining_liquid/mining_liquid_harvester_style_2.py index ccad8904..346183c1 100644 --- a/scripts/object/installation/mining_liquid/mining_liquid_harvester_style_2.py +++ b/scripts/object/installation/mining_liquid/mining_liquid_harvester_style_2.py @@ -1,4 +1,8 @@ import sys def setup(core, object): + object.setAttachment('radial_filename', 'structure/harvester') + object.setHarvester_type(1) + object.setPowerCost(60); + object.setMaintenanceCost(60); return \ No newline at end of file diff --git a/scripts/object/installation/mining_liquid/mining_liquid_harvester_style_3.py b/scripts/object/installation/mining_liquid/mining_liquid_harvester_style_3.py index ccad8904..c1ad33db 100644 --- a/scripts/object/installation/mining_liquid/mining_liquid_harvester_style_3.py +++ b/scripts/object/installation/mining_liquid/mining_liquid_harvester_style_3.py @@ -1,4 +1,8 @@ import sys def setup(core, object): + object.setAttachment('radial_filename', 'structure/harvester') + object.setHarvester_type(1) + object.setPowerCost(75); + object.setMaintenanceCost(90); return \ No newline at end of file diff --git a/scripts/object/installation/mining_liquid/mining_liquid_harvester_style_4.py b/scripts/object/installation/mining_liquid/mining_liquid_harvester_style_4.py index ccad8904..a394e5ce 100644 --- a/scripts/object/installation/mining_liquid/mining_liquid_harvester_style_4.py +++ b/scripts/object/installation/mining_liquid/mining_liquid_harvester_style_4.py @@ -1,4 +1,8 @@ import sys def setup(core, object): + object.setAttachment('radial_filename', 'structure/harvester') + object.setHarvester_type(1) + object.setPowerCost(100); + object.setMaintenanceCost(120); return \ No newline at end of file diff --git a/scripts/object/installation/mining_liquid/mining_liquid_moisture_harvester.py b/scripts/object/installation/mining_liquid/mining_liquid_moisture_harvester.py index ccad8904..3905b4c0 100644 --- a/scripts/object/installation/mining_liquid/mining_liquid_moisture_harvester.py +++ b/scripts/object/installation/mining_liquid/mining_liquid_moisture_harvester.py @@ -1,4 +1,8 @@ import sys def setup(core, object): + object.setAttachment('radial_filename', 'structure/harvester') + object.setHarvester_type(4) + object.setPowerCost(25); + object.setMaintenanceCost(16); return \ No newline at end of file diff --git a/scripts/object/installation/mining_liquid/mining_liquid_moisture_harvester_elite.py b/scripts/object/installation/mining_liquid/mining_liquid_moisture_harvester_elite.py index ccad8904..ae69d03d 100644 --- a/scripts/object/installation/mining_liquid/mining_liquid_moisture_harvester_elite.py +++ b/scripts/object/installation/mining_liquid/mining_liquid_moisture_harvester_elite.py @@ -1,4 +1,8 @@ import sys def setup(core, object): + object.setAttachment('radial_filename', 'structure/harvester') + object.setHarvester_type(4) + object.setPowerCost(100); + object.setMaintenanceCost(120); return \ No newline at end of file diff --git a/scripts/object/installation/mining_liquid/mining_liquid_moisture_harvester_heavy.py b/scripts/object/installation/mining_liquid/mining_liquid_moisture_harvester_heavy.py index ccad8904..499bd036 100644 --- a/scripts/object/installation/mining_liquid/mining_liquid_moisture_harvester_heavy.py +++ b/scripts/object/installation/mining_liquid/mining_liquid_moisture_harvester_heavy.py @@ -1,4 +1,8 @@ import sys def setup(core, object): + object.setAttachment('radial_filename', 'structure/harvester') + object.setHarvester_type(4) + object.setPowerCost(75); + object.setMaintenanceCost(90); return \ No newline at end of file diff --git a/scripts/object/installation/mining_liquid/mining_liquid_moisture_harvester_medium.py b/scripts/object/installation/mining_liquid/mining_liquid_moisture_harvester_medium.py index ccad8904..4962e477 100644 --- a/scripts/object/installation/mining_liquid/mining_liquid_moisture_harvester_medium.py +++ b/scripts/object/installation/mining_liquid/mining_liquid_moisture_harvester_medium.py @@ -1,4 +1,8 @@ import sys def setup(core, object): + object.setAttachment('radial_filename', 'structure/harvester') + object.setHarvester_type(4) + object.setPowerCost(60); + object.setMaintenanceCost(60); return \ No newline at end of file diff --git a/scripts/object/installation/mining_ore/mining_ore_harvester_elite.py b/scripts/object/installation/mining_ore/mining_ore_harvester_elite.py index ccad8904..daafe847 100644 --- a/scripts/object/installation/mining_ore/mining_ore_harvester_elite.py +++ b/scripts/object/installation/mining_ore/mining_ore_harvester_elite.py @@ -1,4 +1,8 @@ import sys def setup(core, object): + object.setAttachment('radial_filename', 'structure/harvester') + object.setHarvester_type(0) + object.setPowerCost(100); + object.setMaintenanceCost(120); return \ No newline at end of file diff --git a/scripts/object/installation/mining_ore/mining_ore_harvester_heavy.py b/scripts/object/installation/mining_ore/mining_ore_harvester_heavy.py index ccad8904..02cad7c2 100644 --- a/scripts/object/installation/mining_ore/mining_ore_harvester_heavy.py +++ b/scripts/object/installation/mining_ore/mining_ore_harvester_heavy.py @@ -1,4 +1,8 @@ import sys def setup(core, object): + object.setAttachment('radial_filename', 'structure/harvester') + object.setHarvester_type(0) + object.setPowerCost(75); + object.setMaintenanceCost(90); return \ No newline at end of file diff --git a/scripts/object/installation/mining_ore/mining_ore_harvester_style_1.py b/scripts/object/installation/mining_ore/mining_ore_harvester_style_1.py index ccad8904..7a6fdae5 100644 --- a/scripts/object/installation/mining_ore/mining_ore_harvester_style_1.py +++ b/scripts/object/installation/mining_ore/mining_ore_harvester_style_1.py @@ -1,4 +1,8 @@ import sys def setup(core, object): + object.setAttachment('radial_filename', 'structure/harvester') + object.setHarvester_type(0) + object.setPowerCost(25); + object.setMaintenanceCost(16); return \ No newline at end of file diff --git a/scripts/object/installation/mining_ore/mining_ore_harvester_style_2.py b/scripts/object/installation/mining_ore/mining_ore_harvester_style_2.py index ccad8904..76358940 100644 --- a/scripts/object/installation/mining_ore/mining_ore_harvester_style_2.py +++ b/scripts/object/installation/mining_ore/mining_ore_harvester_style_2.py @@ -1,4 +1,8 @@ import sys def setup(core, object): + object.setAttachment('radial_filename', 'structure/harvester') + object.setHarvester_type(0) + object.setPowerCost(60); + object.setMaintenanceCost(60); return \ No newline at end of file diff --git a/scripts/object/installation/mining_organic/mining_organic_flora_farm.py b/scripts/object/installation/mining_organic/mining_organic_flora_farm.py index ccad8904..714ccd97 100644 --- a/scripts/object/installation/mining_organic/mining_organic_flora_farm.py +++ b/scripts/object/installation/mining_organic/mining_organic_flora_farm.py @@ -1,4 +1,8 @@ import sys def setup(core, object): + object.setAttachment('radial_filename', 'structure/harvester') + object.setHarvester_type(2) + object.setPowerCost(25); + object.setMaintenanceCost(16); return \ No newline at end of file diff --git a/scripts/object/installation/mining_organic/mining_organic_flora_farm_elite.py b/scripts/object/installation/mining_organic/mining_organic_flora_farm_elite.py index ccad8904..71580f57 100644 --- a/scripts/object/installation/mining_organic/mining_organic_flora_farm_elite.py +++ b/scripts/object/installation/mining_organic/mining_organic_flora_farm_elite.py @@ -1,4 +1,8 @@ import sys def setup(core, object): + object.setAttachment('radial_filename', 'structure/harvester') + object.setHarvester_type(2) + object.setPowerCost(100); + object.setMaintenanceCost(120); return \ No newline at end of file diff --git a/scripts/object/installation/mining_organic/mining_organic_flora_farm_heavy.py b/scripts/object/installation/mining_organic/mining_organic_flora_farm_heavy.py index ccad8904..dbd32ee3 100644 --- a/scripts/object/installation/mining_organic/mining_organic_flora_farm_heavy.py +++ b/scripts/object/installation/mining_organic/mining_organic_flora_farm_heavy.py @@ -1,4 +1,8 @@ import sys def setup(core, object): + object.setAttachment('radial_filename', 'structure/harvester') + object.setHarvester_type(2) + object.setPowerCost(60); + object.setMaintenanceCost(60); return \ No newline at end of file diff --git a/scripts/object/installation/mining_organic/mining_organic_flora_farm_medium.py b/scripts/object/installation/mining_organic/mining_organic_flora_farm_medium.py index ccad8904..dbd32ee3 100644 --- a/scripts/object/installation/mining_organic/mining_organic_flora_farm_medium.py +++ b/scripts/object/installation/mining_organic/mining_organic_flora_farm_medium.py @@ -1,4 +1,8 @@ import sys def setup(core, object): + object.setAttachment('radial_filename', 'structure/harvester') + object.setHarvester_type(2) + object.setPowerCost(60); + object.setMaintenanceCost(60); return \ No newline at end of file diff --git a/scripts/object/intangible/data_item/guild_stone.py b/scripts/object/intangible/data_item/guild_stone.py index ccad8904..7cf0dd3a 100644 --- a/scripts/object/intangible/data_item/guild_stone.py +++ b/scripts/object/intangible/data_item/guild_stone.py @@ -1,4 +1,5 @@ import sys def setup(core, object): + object.setAttachment('radial_filename', 'object/guild_access_device') return \ No newline at end of file diff --git a/scripts/object/intangible/vehicle/barc_speeder_pcd.py b/scripts/object/intangible/vehicle/barc_speeder_pcd.py index ccad8904..e9fa1234 100644 --- a/scripts/object/intangible/vehicle/barc_speeder_pcd.py +++ b/scripts/object/intangible/vehicle/barc_speeder_pcd.py @@ -1,4 +1,15 @@ import sys def setup(core, object): + object.setAttachment('radial_filename', 'vehicle_pcd') + return + +def use(core, actor, object): + if object and actor.getAttachment('activeVehicleID') == None: + barc = core.objectService.createObject('object/mobile/vehicle/shared_barc_speeder.iff', 0, actor.getPlanet(), actor.getPosition(), actor.getOrientation()) + + barc.setOwnerId(actor.getObjectID()) + actor.setAttachment('activeVehicleID', barc.getObjectID()) + + core.simulationService.add(barc, barc.getPosition().x, barc.getPosition().z, True) return \ No newline at end of file diff --git a/scripts/object/intangible/vehicle/landspeeder_av21_pcd.py b/scripts/object/intangible/vehicle/landspeeder_av21_pcd.py index ccad8904..d7c3f4a1 100644 --- a/scripts/object/intangible/vehicle/landspeeder_av21_pcd.py +++ b/scripts/object/intangible/vehicle/landspeeder_av21_pcd.py @@ -1,4 +1,5 @@ import sys def setup(core, object): + object.setAttachment('radial_filename', 'datapad/vehicle_pcd') return \ No newline at end of file diff --git a/scripts/object/intangible/vehicle/landspeeder_tantive4_pcd.py b/scripts/object/intangible/vehicle/landspeeder_tantive4_pcd.py index ccad8904..ff8849f4 100644 --- a/scripts/object/intangible/vehicle/landspeeder_tantive4_pcd.py +++ b/scripts/object/intangible/vehicle/landspeeder_tantive4_pcd.py @@ -1,4 +1,15 @@ import sys def setup(core, object): + object.setAttachment('radial_filename', 'vehicle_pcd') + return + +def use(core, actor, object): + if object and actor.getAttachment('activeVehicleID') == None: + tantive4 = core.objectService.createObject('object/mobile/vehicle/shared_landspeeder_tantive4.iff', 0, actor.getPlanet(), actor.getPosition(), actor.getOrientation()) + + tantive4.setOwnerId(actor.getObjectID()) + actor.setAttachment('activeVehicleID', tantive4.getObjectID()) + + core.simulationService.add(tantive4, tantive4.getPosition().x, tantive4.getPosition().z, True) return \ No newline at end of file diff --git a/scripts/object/intangible/vehicle/speederbike_swoop_pcd.py b/scripts/object/intangible/vehicle/speederbike_swoop_pcd.py index ccad8904..d7c3f4a1 100644 --- a/scripts/object/intangible/vehicle/speederbike_swoop_pcd.py +++ b/scripts/object/intangible/vehicle/speederbike_swoop_pcd.py @@ -1,4 +1,5 @@ import sys def setup(core, object): + object.setAttachment('radial_filename', 'datapad/vehicle_pcd') return \ No newline at end of file diff --git a/scripts/object/mobile/21b_surgical_droid.py b/scripts/object/mobile/21b_surgical_droid.py index ccad8904..bdc8a620 100644 --- a/scripts/object/mobile/21b_surgical_droid.py +++ b/scripts/object/mobile/21b_surgical_droid.py @@ -1,4 +1,11 @@ import sys +from resources.datatables import Options def setup(core, object): - return \ No newline at end of file + object.setAttachment('radial_filename', 'object/conversation'); + object.setAttachment('conversationFile','medical_cloning_droid') + object.setOptionsBitmask(Options.CONVERSABLE | Options.INVULNERABLE) + object.setStfFilename('mob/creature_names') + object.setStfName('surgical_droid') + return + diff --git a/scripts/object/mobile/3po_protocol_droid_red.py b/scripts/object/mobile/3po_protocol_droid_red.py index ccad8904..29961558 100644 --- a/scripts/object/mobile/3po_protocol_droid_red.py +++ b/scripts/object/mobile/3po_protocol_droid_red.py @@ -1,4 +1,10 @@ import sys +from resources.datatables import Options def setup(core, object): + #object.setAttachment('radial_filename', 'object/conversation'); + #object.setAttachment('conversationFile','junk_dealer') + object.setOptionsBitmask(Options.CONVERSABLE | Options.INVULNERABLE) + object.setStfFilename('mob/creature_names') + object.setStfName('protocol_droid_3po_red') return \ No newline at end of file diff --git a/scripts/object/mobile/barada.py b/scripts/object/mobile/barada.py index ccad8904..b5250e70 100644 --- a/scripts/object/mobile/barada.py +++ b/scripts/object/mobile/barada.py @@ -1,4 +1,10 @@ import sys +from resources.datatables import Options def setup(core, object): + #object.setAttachment('radial_filename', 'object/conversation'); + #object.setAttachment('conversationFile','junk_dealer') + object.setOptionsBitmask(Options.CONVERSABLE | Options.INVULNERABLE) + object.setStfFilename('mob/creature_names') + object.setStfName('barada') return \ No newline at end of file diff --git a/scripts/object/mobile/berok_skoff.py b/scripts/object/mobile/berok_skoff.py index ccad8904..20bf2a45 100644 --- a/scripts/object/mobile/berok_skoff.py +++ b/scripts/object/mobile/berok_skoff.py @@ -1,4 +1,10 @@ import sys +from resources.datatables import Options def setup(core, object): + #object.setAttachment('radial_filename', 'object/conversation'); + #object.setAttachment('conversationFile','junk_dealer') + object.setOptionsBitmask(Options.CONVERSABLE | Options.INVULNERABLE) + object.setStfFilename('mob/creature_names') + object.setStfName('heroic_tusken_major_berok_skoff') return \ No newline at end of file diff --git a/scripts/object/mobile/bib_fortuna.py b/scripts/object/mobile/bib_fortuna.py index ccad8904..1507ccc4 100644 --- a/scripts/object/mobile/bib_fortuna.py +++ b/scripts/object/mobile/bib_fortuna.py @@ -1,4 +1,10 @@ import sys +from resources.datatables import Options def setup(core, object): + #object.setAttachment('radial_filename', 'object/conversation'); + #object.setAttachment('conversationFile','junk_dealer') + object.setOptionsBitmask(Options.CONVERSABLE | Options.INVULNERABLE) + object.setStfFilename('mob/creature_names') + object.setStfName('bib_fortuna') return \ No newline at end of file diff --git a/scripts/object/mobile/boba_fett.py b/scripts/object/mobile/boba_fett.py index ccad8904..26c5be1e 100644 --- a/scripts/object/mobile/boba_fett.py +++ b/scripts/object/mobile/boba_fett.py @@ -1,4 +1,10 @@ import sys +from resources.datatables import Options def setup(core, object): + #object.setAttachment('radial_filename', 'object/conversation'); + #object.setAttachment('conversationFile','junk_dealer') + object.setOptionsBitmask(Options.CONVERSABLE | Options.INVULNERABLE) + object.setStfFilename('mob/creature_names') + object.setStfName('boba_fett') return \ No newline at end of file diff --git a/scripts/object/mobile/dressed_dark_force_crystal_hunter.py b/scripts/object/mobile/dressed_dark_force_crystal_hunter.py index ccad8904..c7237ff3 100644 --- a/scripts/object/mobile/dressed_dark_force_crystal_hunter.py +++ b/scripts/object/mobile/dressed_dark_force_crystal_hunter.py @@ -1,4 +1,32 @@ import sys def setup(core, object): - return \ No newline at end of file + + lootPoolNames_1 = ['Junk'] + lootPoolChances_1 = [100] + lootGroupChance_1 = 65 + object.addToLootGroups(lootPoolNames_1,lootPoolChances_1,lootGroupChance_1) + + lootPoolNames_2 = ['jedi_relic_1'] + lootPoolChances_2 = [100] + lootGroupChance_2 = 85 + object.addToLootGroups(lootPoolNames_2,lootPoolChances_2,lootGroupChance_2) + + lootPoolNames_3 = ['colorcrystals'] + lootPoolChances_3 = [100] + lootGroupChance_3 = 12 + object.addToLootGroups(lootPoolNames_3,lootPoolChances_3,lootGroupChance_3) + + lootPoolNames_4 = ['armor_various','random_loot_rifles'] + lootPoolChances_4 = [80,20] + lootGroupChance_4 = 35 + object.addToLootGroups(lootPoolNames_4,lootPoolChances_4,lootGroupChance_4) + + lootPoolNames_5 = ['sithholocrons'] + lootPoolChances_5 = [100] + lootGroupChance_5 = 1 + object.addToLootGroups(lootPoolNames_5,lootPoolChances_5,lootGroupChance_5) + + + + return \ No newline at end of file diff --git a/scripts/object/mobile/dressed_dark_jedi_elder_male_human_01.py b/scripts/object/mobile/dressed_dark_jedi_elder_male_human_01.py index ccad8904..be97678c 100644 --- a/scripts/object/mobile/dressed_dark_jedi_elder_male_human_01.py +++ b/scripts/object/mobile/dressed_dark_jedi_elder_male_human_01.py @@ -1,4 +1,31 @@ import sys def setup(core, object): - return \ No newline at end of file + + lootPoolNames_1 = ['Junk'] + lootPoolChances_1 = [100] + lootGroupChance_1 = 65 + object.addToLootGroups(lootPoolNames_1,lootPoolChances_1,lootGroupChance_1) + + lootPoolNames_2 = ['jedi_relic_1'] + lootPoolChances_2 = [100] + lootGroupChance_2 = 85 + object.addToLootGroups(lootPoolNames_2,lootPoolChances_2,lootGroupChance_2) + + lootPoolNames_3 = ['powercrystals_hiq'] + lootPoolChances_3 = [100] + lootGroupChance_3 = 12 + object.addToLootGroups(lootPoolNames_3,lootPoolChances_3,lootGroupChance_3) + + lootPoolNames_4 = ['random_stat_jewelry'] + lootPoolChances_4 = [100] + lootGroupChance_4 = 8 + object.addToLootGroups(lootPoolNames_4,lootPoolChances_4,lootGroupChance_4) + + lootPoolNames_5 = ['sithholocrons'] + lootPoolChances_5 = [100] + lootGroupChance_5 = 1 + object.addToLootGroups(lootPoolNames_5,lootPoolChances_5,lootGroupChance_5) + + + return \ No newline at end of file diff --git a/scripts/object/mobile/dressed_dark_jedi_female_human_01.py b/scripts/object/mobile/dressed_dark_jedi_female_human_01.py index ccad8904..be97678c 100644 --- a/scripts/object/mobile/dressed_dark_jedi_female_human_01.py +++ b/scripts/object/mobile/dressed_dark_jedi_female_human_01.py @@ -1,4 +1,31 @@ import sys def setup(core, object): - return \ No newline at end of file + + lootPoolNames_1 = ['Junk'] + lootPoolChances_1 = [100] + lootGroupChance_1 = 65 + object.addToLootGroups(lootPoolNames_1,lootPoolChances_1,lootGroupChance_1) + + lootPoolNames_2 = ['jedi_relic_1'] + lootPoolChances_2 = [100] + lootGroupChance_2 = 85 + object.addToLootGroups(lootPoolNames_2,lootPoolChances_2,lootGroupChance_2) + + lootPoolNames_3 = ['powercrystals_hiq'] + lootPoolChances_3 = [100] + lootGroupChance_3 = 12 + object.addToLootGroups(lootPoolNames_3,lootPoolChances_3,lootGroupChance_3) + + lootPoolNames_4 = ['random_stat_jewelry'] + lootPoolChances_4 = [100] + lootGroupChance_4 = 8 + object.addToLootGroups(lootPoolNames_4,lootPoolChances_4,lootGroupChance_4) + + lootPoolNames_5 = ['sithholocrons'] + lootPoolChances_5 = [100] + lootGroupChance_5 = 1 + object.addToLootGroups(lootPoolNames_5,lootPoolChances_5,lootGroupChance_5) + + + return \ No newline at end of file diff --git a/scripts/object/mobile/dressed_dark_jedi_female_human_02.py b/scripts/object/mobile/dressed_dark_jedi_female_human_02.py index ccad8904..be97678c 100644 --- a/scripts/object/mobile/dressed_dark_jedi_female_human_02.py +++ b/scripts/object/mobile/dressed_dark_jedi_female_human_02.py @@ -1,4 +1,31 @@ import sys def setup(core, object): - return \ No newline at end of file + + lootPoolNames_1 = ['Junk'] + lootPoolChances_1 = [100] + lootGroupChance_1 = 65 + object.addToLootGroups(lootPoolNames_1,lootPoolChances_1,lootGroupChance_1) + + lootPoolNames_2 = ['jedi_relic_1'] + lootPoolChances_2 = [100] + lootGroupChance_2 = 85 + object.addToLootGroups(lootPoolNames_2,lootPoolChances_2,lootGroupChance_2) + + lootPoolNames_3 = ['powercrystals_hiq'] + lootPoolChances_3 = [100] + lootGroupChance_3 = 12 + object.addToLootGroups(lootPoolNames_3,lootPoolChances_3,lootGroupChance_3) + + lootPoolNames_4 = ['random_stat_jewelry'] + lootPoolChances_4 = [100] + lootGroupChance_4 = 8 + object.addToLootGroups(lootPoolNames_4,lootPoolChances_4,lootGroupChance_4) + + lootPoolNames_5 = ['sithholocrons'] + lootPoolChances_5 = [100] + lootGroupChance_5 = 1 + object.addToLootGroups(lootPoolNames_5,lootPoolChances_5,lootGroupChance_5) + + + return \ No newline at end of file diff --git a/scripts/object/mobile/dressed_dark_jedi_female_human_03.py b/scripts/object/mobile/dressed_dark_jedi_female_human_03.py index ccad8904..be97678c 100644 --- a/scripts/object/mobile/dressed_dark_jedi_female_human_03.py +++ b/scripts/object/mobile/dressed_dark_jedi_female_human_03.py @@ -1,4 +1,31 @@ import sys def setup(core, object): - return \ No newline at end of file + + lootPoolNames_1 = ['Junk'] + lootPoolChances_1 = [100] + lootGroupChance_1 = 65 + object.addToLootGroups(lootPoolNames_1,lootPoolChances_1,lootGroupChance_1) + + lootPoolNames_2 = ['jedi_relic_1'] + lootPoolChances_2 = [100] + lootGroupChance_2 = 85 + object.addToLootGroups(lootPoolNames_2,lootPoolChances_2,lootGroupChance_2) + + lootPoolNames_3 = ['powercrystals_hiq'] + lootPoolChances_3 = [100] + lootGroupChance_3 = 12 + object.addToLootGroups(lootPoolNames_3,lootPoolChances_3,lootGroupChance_3) + + lootPoolNames_4 = ['random_stat_jewelry'] + lootPoolChances_4 = [100] + lootGroupChance_4 = 8 + object.addToLootGroups(lootPoolNames_4,lootPoolChances_4,lootGroupChance_4) + + lootPoolNames_5 = ['sithholocrons'] + lootPoolChances_5 = [100] + lootGroupChance_5 = 1 + object.addToLootGroups(lootPoolNames_5,lootPoolChances_5,lootGroupChance_5) + + + return \ No newline at end of file diff --git a/scripts/object/mobile/dressed_dark_jedi_female_human_04.py b/scripts/object/mobile/dressed_dark_jedi_female_human_04.py index ccad8904..be97678c 100644 --- a/scripts/object/mobile/dressed_dark_jedi_female_human_04.py +++ b/scripts/object/mobile/dressed_dark_jedi_female_human_04.py @@ -1,4 +1,31 @@ import sys def setup(core, object): - return \ No newline at end of file + + lootPoolNames_1 = ['Junk'] + lootPoolChances_1 = [100] + lootGroupChance_1 = 65 + object.addToLootGroups(lootPoolNames_1,lootPoolChances_1,lootGroupChance_1) + + lootPoolNames_2 = ['jedi_relic_1'] + lootPoolChances_2 = [100] + lootGroupChance_2 = 85 + object.addToLootGroups(lootPoolNames_2,lootPoolChances_2,lootGroupChance_2) + + lootPoolNames_3 = ['powercrystals_hiq'] + lootPoolChances_3 = [100] + lootGroupChance_3 = 12 + object.addToLootGroups(lootPoolNames_3,lootPoolChances_3,lootGroupChance_3) + + lootPoolNames_4 = ['random_stat_jewelry'] + lootPoolChances_4 = [100] + lootGroupChance_4 = 8 + object.addToLootGroups(lootPoolNames_4,lootPoolChances_4,lootGroupChance_4) + + lootPoolNames_5 = ['sithholocrons'] + lootPoolChances_5 = [100] + lootGroupChance_5 = 1 + object.addToLootGroups(lootPoolNames_5,lootPoolChances_5,lootGroupChance_5) + + + return \ No newline at end of file diff --git a/scripts/object/mobile/dressed_dark_jedi_female_marauder_01.py b/scripts/object/mobile/dressed_dark_jedi_female_marauder_01.py index ccad8904..be97678c 100644 --- a/scripts/object/mobile/dressed_dark_jedi_female_marauder_01.py +++ b/scripts/object/mobile/dressed_dark_jedi_female_marauder_01.py @@ -1,4 +1,31 @@ import sys def setup(core, object): - return \ No newline at end of file + + lootPoolNames_1 = ['Junk'] + lootPoolChances_1 = [100] + lootGroupChance_1 = 65 + object.addToLootGroups(lootPoolNames_1,lootPoolChances_1,lootGroupChance_1) + + lootPoolNames_2 = ['jedi_relic_1'] + lootPoolChances_2 = [100] + lootGroupChance_2 = 85 + object.addToLootGroups(lootPoolNames_2,lootPoolChances_2,lootGroupChance_2) + + lootPoolNames_3 = ['powercrystals_hiq'] + lootPoolChances_3 = [100] + lootGroupChance_3 = 12 + object.addToLootGroups(lootPoolNames_3,lootPoolChances_3,lootGroupChance_3) + + lootPoolNames_4 = ['random_stat_jewelry'] + lootPoolChances_4 = [100] + lootGroupChance_4 = 8 + object.addToLootGroups(lootPoolNames_4,lootPoolChances_4,lootGroupChance_4) + + lootPoolNames_5 = ['sithholocrons'] + lootPoolChances_5 = [100] + lootGroupChance_5 = 1 + object.addToLootGroups(lootPoolNames_5,lootPoolChances_5,lootGroupChance_5) + + + return \ No newline at end of file diff --git a/scripts/object/mobile/dressed_dark_jedi_female_twk_01.py b/scripts/object/mobile/dressed_dark_jedi_female_twk_01.py index ccad8904..be97678c 100644 --- a/scripts/object/mobile/dressed_dark_jedi_female_twk_01.py +++ b/scripts/object/mobile/dressed_dark_jedi_female_twk_01.py @@ -1,4 +1,31 @@ import sys def setup(core, object): - return \ No newline at end of file + + lootPoolNames_1 = ['Junk'] + lootPoolChances_1 = [100] + lootGroupChance_1 = 65 + object.addToLootGroups(lootPoolNames_1,lootPoolChances_1,lootGroupChance_1) + + lootPoolNames_2 = ['jedi_relic_1'] + lootPoolChances_2 = [100] + lootGroupChance_2 = 85 + object.addToLootGroups(lootPoolNames_2,lootPoolChances_2,lootGroupChance_2) + + lootPoolNames_3 = ['powercrystals_hiq'] + lootPoolChances_3 = [100] + lootGroupChance_3 = 12 + object.addToLootGroups(lootPoolNames_3,lootPoolChances_3,lootGroupChance_3) + + lootPoolNames_4 = ['random_stat_jewelry'] + lootPoolChances_4 = [100] + lootGroupChance_4 = 8 + object.addToLootGroups(lootPoolNames_4,lootPoolChances_4,lootGroupChance_4) + + lootPoolNames_5 = ['sithholocrons'] + lootPoolChances_5 = [100] + lootGroupChance_5 = 1 + object.addToLootGroups(lootPoolNames_5,lootPoolChances_5,lootGroupChance_5) + + + return \ No newline at end of file diff --git a/scripts/object/mobile/dressed_dark_jedi_female_twk_02.py b/scripts/object/mobile/dressed_dark_jedi_female_twk_02.py index ccad8904..be97678c 100644 --- a/scripts/object/mobile/dressed_dark_jedi_female_twk_02.py +++ b/scripts/object/mobile/dressed_dark_jedi_female_twk_02.py @@ -1,4 +1,31 @@ import sys def setup(core, object): - return \ No newline at end of file + + lootPoolNames_1 = ['Junk'] + lootPoolChances_1 = [100] + lootGroupChance_1 = 65 + object.addToLootGroups(lootPoolNames_1,lootPoolChances_1,lootGroupChance_1) + + lootPoolNames_2 = ['jedi_relic_1'] + lootPoolChances_2 = [100] + lootGroupChance_2 = 85 + object.addToLootGroups(lootPoolNames_2,lootPoolChances_2,lootGroupChance_2) + + lootPoolNames_3 = ['powercrystals_hiq'] + lootPoolChances_3 = [100] + lootGroupChance_3 = 12 + object.addToLootGroups(lootPoolNames_3,lootPoolChances_3,lootGroupChance_3) + + lootPoolNames_4 = ['random_stat_jewelry'] + lootPoolChances_4 = [100] + lootGroupChance_4 = 8 + object.addToLootGroups(lootPoolNames_4,lootPoolChances_4,lootGroupChance_4) + + lootPoolNames_5 = ['sithholocrons'] + lootPoolChances_5 = [100] + lootGroupChance_5 = 1 + object.addToLootGroups(lootPoolNames_5,lootPoolChances_5,lootGroupChance_5) + + + return \ No newline at end of file diff --git a/scripts/object/mobile/dressed_dark_jedi_female_twk_03.py b/scripts/object/mobile/dressed_dark_jedi_female_twk_03.py index ccad8904..be97678c 100644 --- a/scripts/object/mobile/dressed_dark_jedi_female_twk_03.py +++ b/scripts/object/mobile/dressed_dark_jedi_female_twk_03.py @@ -1,4 +1,31 @@ import sys def setup(core, object): - return \ No newline at end of file + + lootPoolNames_1 = ['Junk'] + lootPoolChances_1 = [100] + lootGroupChance_1 = 65 + object.addToLootGroups(lootPoolNames_1,lootPoolChances_1,lootGroupChance_1) + + lootPoolNames_2 = ['jedi_relic_1'] + lootPoolChances_2 = [100] + lootGroupChance_2 = 85 + object.addToLootGroups(lootPoolNames_2,lootPoolChances_2,lootGroupChance_2) + + lootPoolNames_3 = ['powercrystals_hiq'] + lootPoolChances_3 = [100] + lootGroupChance_3 = 12 + object.addToLootGroups(lootPoolNames_3,lootPoolChances_3,lootGroupChance_3) + + lootPoolNames_4 = ['random_stat_jewelry'] + lootPoolChances_4 = [100] + lootGroupChance_4 = 8 + object.addToLootGroups(lootPoolNames_4,lootPoolChances_4,lootGroupChance_4) + + lootPoolNames_5 = ['sithholocrons'] + lootPoolChances_5 = [100] + lootGroupChance_5 = 1 + object.addToLootGroups(lootPoolNames_5,lootPoolChances_5,lootGroupChance_5) + + + return \ No newline at end of file diff --git a/scripts/object/mobile/dressed_dark_jedi_female_zab_01.py b/scripts/object/mobile/dressed_dark_jedi_female_zab_01.py index ccad8904..be97678c 100644 --- a/scripts/object/mobile/dressed_dark_jedi_female_zab_01.py +++ b/scripts/object/mobile/dressed_dark_jedi_female_zab_01.py @@ -1,4 +1,31 @@ import sys def setup(core, object): - return \ No newline at end of file + + lootPoolNames_1 = ['Junk'] + lootPoolChances_1 = [100] + lootGroupChance_1 = 65 + object.addToLootGroups(lootPoolNames_1,lootPoolChances_1,lootGroupChance_1) + + lootPoolNames_2 = ['jedi_relic_1'] + lootPoolChances_2 = [100] + lootGroupChance_2 = 85 + object.addToLootGroups(lootPoolNames_2,lootPoolChances_2,lootGroupChance_2) + + lootPoolNames_3 = ['powercrystals_hiq'] + lootPoolChances_3 = [100] + lootGroupChance_3 = 12 + object.addToLootGroups(lootPoolNames_3,lootPoolChances_3,lootGroupChance_3) + + lootPoolNames_4 = ['random_stat_jewelry'] + lootPoolChances_4 = [100] + lootGroupChance_4 = 8 + object.addToLootGroups(lootPoolNames_4,lootPoolChances_4,lootGroupChance_4) + + lootPoolNames_5 = ['sithholocrons'] + lootPoolChances_5 = [100] + lootGroupChance_5 = 1 + object.addToLootGroups(lootPoolNames_5,lootPoolChances_5,lootGroupChance_5) + + + return \ No newline at end of file diff --git a/scripts/object/mobile/dressed_dark_jedi_female_zab_02.py b/scripts/object/mobile/dressed_dark_jedi_female_zab_02.py index ccad8904..be97678c 100644 --- a/scripts/object/mobile/dressed_dark_jedi_female_zab_02.py +++ b/scripts/object/mobile/dressed_dark_jedi_female_zab_02.py @@ -1,4 +1,31 @@ import sys def setup(core, object): - return \ No newline at end of file + + lootPoolNames_1 = ['Junk'] + lootPoolChances_1 = [100] + lootGroupChance_1 = 65 + object.addToLootGroups(lootPoolNames_1,lootPoolChances_1,lootGroupChance_1) + + lootPoolNames_2 = ['jedi_relic_1'] + lootPoolChances_2 = [100] + lootGroupChance_2 = 85 + object.addToLootGroups(lootPoolNames_2,lootPoolChances_2,lootGroupChance_2) + + lootPoolNames_3 = ['powercrystals_hiq'] + lootPoolChances_3 = [100] + lootGroupChance_3 = 12 + object.addToLootGroups(lootPoolNames_3,lootPoolChances_3,lootGroupChance_3) + + lootPoolNames_4 = ['random_stat_jewelry'] + lootPoolChances_4 = [100] + lootGroupChance_4 = 8 + object.addToLootGroups(lootPoolNames_4,lootPoolChances_4,lootGroupChance_4) + + lootPoolNames_5 = ['sithholocrons'] + lootPoolChances_5 = [100] + lootGroupChance_5 = 1 + object.addToLootGroups(lootPoolNames_5,lootPoolChances_5,lootGroupChance_5) + + + return \ No newline at end of file diff --git a/scripts/object/mobile/dressed_dark_jedi_female_zab_03.py b/scripts/object/mobile/dressed_dark_jedi_female_zab_03.py index ccad8904..be97678c 100644 --- a/scripts/object/mobile/dressed_dark_jedi_female_zab_03.py +++ b/scripts/object/mobile/dressed_dark_jedi_female_zab_03.py @@ -1,4 +1,31 @@ import sys def setup(core, object): - return \ No newline at end of file + + lootPoolNames_1 = ['Junk'] + lootPoolChances_1 = [100] + lootGroupChance_1 = 65 + object.addToLootGroups(lootPoolNames_1,lootPoolChances_1,lootGroupChance_1) + + lootPoolNames_2 = ['jedi_relic_1'] + lootPoolChances_2 = [100] + lootGroupChance_2 = 85 + object.addToLootGroups(lootPoolNames_2,lootPoolChances_2,lootGroupChance_2) + + lootPoolNames_3 = ['powercrystals_hiq'] + lootPoolChances_3 = [100] + lootGroupChance_3 = 12 + object.addToLootGroups(lootPoolNames_3,lootPoolChances_3,lootGroupChance_3) + + lootPoolNames_4 = ['random_stat_jewelry'] + lootPoolChances_4 = [100] + lootGroupChance_4 = 8 + object.addToLootGroups(lootPoolNames_4,lootPoolChances_4,lootGroupChance_4) + + lootPoolNames_5 = ['sithholocrons'] + lootPoolChances_5 = [100] + lootGroupChance_5 = 1 + object.addToLootGroups(lootPoolNames_5,lootPoolChances_5,lootGroupChance_5) + + + return \ No newline at end of file diff --git a/scripts/object/mobile/dressed_dark_jedi_human_female_01.py b/scripts/object/mobile/dressed_dark_jedi_human_female_01.py index ccad8904..be97678c 100644 --- a/scripts/object/mobile/dressed_dark_jedi_human_female_01.py +++ b/scripts/object/mobile/dressed_dark_jedi_human_female_01.py @@ -1,4 +1,31 @@ import sys def setup(core, object): - return \ No newline at end of file + + lootPoolNames_1 = ['Junk'] + lootPoolChances_1 = [100] + lootGroupChance_1 = 65 + object.addToLootGroups(lootPoolNames_1,lootPoolChances_1,lootGroupChance_1) + + lootPoolNames_2 = ['jedi_relic_1'] + lootPoolChances_2 = [100] + lootGroupChance_2 = 85 + object.addToLootGroups(lootPoolNames_2,lootPoolChances_2,lootGroupChance_2) + + lootPoolNames_3 = ['powercrystals_hiq'] + lootPoolChances_3 = [100] + lootGroupChance_3 = 12 + object.addToLootGroups(lootPoolNames_3,lootPoolChances_3,lootGroupChance_3) + + lootPoolNames_4 = ['random_stat_jewelry'] + lootPoolChances_4 = [100] + lootGroupChance_4 = 8 + object.addToLootGroups(lootPoolNames_4,lootPoolChances_4,lootGroupChance_4) + + lootPoolNames_5 = ['sithholocrons'] + lootPoolChances_5 = [100] + lootGroupChance_5 = 1 + object.addToLootGroups(lootPoolNames_5,lootPoolChances_5,lootGroupChance_5) + + + return \ No newline at end of file diff --git a/scripts/object/mobile/dressed_dark_jedi_human_male_01.py b/scripts/object/mobile/dressed_dark_jedi_human_male_01.py index ccad8904..be97678c 100644 --- a/scripts/object/mobile/dressed_dark_jedi_human_male_01.py +++ b/scripts/object/mobile/dressed_dark_jedi_human_male_01.py @@ -1,4 +1,31 @@ import sys def setup(core, object): - return \ No newline at end of file + + lootPoolNames_1 = ['Junk'] + lootPoolChances_1 = [100] + lootGroupChance_1 = 65 + object.addToLootGroups(lootPoolNames_1,lootPoolChances_1,lootGroupChance_1) + + lootPoolNames_2 = ['jedi_relic_1'] + lootPoolChances_2 = [100] + lootGroupChance_2 = 85 + object.addToLootGroups(lootPoolNames_2,lootPoolChances_2,lootGroupChance_2) + + lootPoolNames_3 = ['powercrystals_hiq'] + lootPoolChances_3 = [100] + lootGroupChance_3 = 12 + object.addToLootGroups(lootPoolNames_3,lootPoolChances_3,lootGroupChance_3) + + lootPoolNames_4 = ['random_stat_jewelry'] + lootPoolChances_4 = [100] + lootGroupChance_4 = 8 + object.addToLootGroups(lootPoolNames_4,lootPoolChances_4,lootGroupChance_4) + + lootPoolNames_5 = ['sithholocrons'] + lootPoolChances_5 = [100] + lootGroupChance_5 = 1 + object.addToLootGroups(lootPoolNames_5,lootPoolChances_5,lootGroupChance_5) + + + return \ No newline at end of file diff --git a/scripts/object/mobile/dressed_dark_jedi_male_human_01.py b/scripts/object/mobile/dressed_dark_jedi_male_human_01.py index ccad8904..be97678c 100644 --- a/scripts/object/mobile/dressed_dark_jedi_male_human_01.py +++ b/scripts/object/mobile/dressed_dark_jedi_male_human_01.py @@ -1,4 +1,31 @@ import sys def setup(core, object): - return \ No newline at end of file + + lootPoolNames_1 = ['Junk'] + lootPoolChances_1 = [100] + lootGroupChance_1 = 65 + object.addToLootGroups(lootPoolNames_1,lootPoolChances_1,lootGroupChance_1) + + lootPoolNames_2 = ['jedi_relic_1'] + lootPoolChances_2 = [100] + lootGroupChance_2 = 85 + object.addToLootGroups(lootPoolNames_2,lootPoolChances_2,lootGroupChance_2) + + lootPoolNames_3 = ['powercrystals_hiq'] + lootPoolChances_3 = [100] + lootGroupChance_3 = 12 + object.addToLootGroups(lootPoolNames_3,lootPoolChances_3,lootGroupChance_3) + + lootPoolNames_4 = ['random_stat_jewelry'] + lootPoolChances_4 = [100] + lootGroupChance_4 = 8 + object.addToLootGroups(lootPoolNames_4,lootPoolChances_4,lootGroupChance_4) + + lootPoolNames_5 = ['sithholocrons'] + lootPoolChances_5 = [100] + lootGroupChance_5 = 1 + object.addToLootGroups(lootPoolNames_5,lootPoolChances_5,lootGroupChance_5) + + + return \ No newline at end of file diff --git a/scripts/object/mobile/dressed_dark_jedi_male_human_02.py b/scripts/object/mobile/dressed_dark_jedi_male_human_02.py index ccad8904..be97678c 100644 --- a/scripts/object/mobile/dressed_dark_jedi_male_human_02.py +++ b/scripts/object/mobile/dressed_dark_jedi_male_human_02.py @@ -1,4 +1,31 @@ import sys def setup(core, object): - return \ No newline at end of file + + lootPoolNames_1 = ['Junk'] + lootPoolChances_1 = [100] + lootGroupChance_1 = 65 + object.addToLootGroups(lootPoolNames_1,lootPoolChances_1,lootGroupChance_1) + + lootPoolNames_2 = ['jedi_relic_1'] + lootPoolChances_2 = [100] + lootGroupChance_2 = 85 + object.addToLootGroups(lootPoolNames_2,lootPoolChances_2,lootGroupChance_2) + + lootPoolNames_3 = ['powercrystals_hiq'] + lootPoolChances_3 = [100] + lootGroupChance_3 = 12 + object.addToLootGroups(lootPoolNames_3,lootPoolChances_3,lootGroupChance_3) + + lootPoolNames_4 = ['random_stat_jewelry'] + lootPoolChances_4 = [100] + lootGroupChance_4 = 8 + object.addToLootGroups(lootPoolNames_4,lootPoolChances_4,lootGroupChance_4) + + lootPoolNames_5 = ['sithholocrons'] + lootPoolChances_5 = [100] + lootGroupChance_5 = 1 + object.addToLootGroups(lootPoolNames_5,lootPoolChances_5,lootGroupChance_5) + + + return \ No newline at end of file diff --git a/scripts/object/mobile/dressed_dark_jedi_male_human_03.py b/scripts/object/mobile/dressed_dark_jedi_male_human_03.py index ccad8904..be97678c 100644 --- a/scripts/object/mobile/dressed_dark_jedi_male_human_03.py +++ b/scripts/object/mobile/dressed_dark_jedi_male_human_03.py @@ -1,4 +1,31 @@ import sys def setup(core, object): - return \ No newline at end of file + + lootPoolNames_1 = ['Junk'] + lootPoolChances_1 = [100] + lootGroupChance_1 = 65 + object.addToLootGroups(lootPoolNames_1,lootPoolChances_1,lootGroupChance_1) + + lootPoolNames_2 = ['jedi_relic_1'] + lootPoolChances_2 = [100] + lootGroupChance_2 = 85 + object.addToLootGroups(lootPoolNames_2,lootPoolChances_2,lootGroupChance_2) + + lootPoolNames_3 = ['powercrystals_hiq'] + lootPoolChances_3 = [100] + lootGroupChance_3 = 12 + object.addToLootGroups(lootPoolNames_3,lootPoolChances_3,lootGroupChance_3) + + lootPoolNames_4 = ['random_stat_jewelry'] + lootPoolChances_4 = [100] + lootGroupChance_4 = 8 + object.addToLootGroups(lootPoolNames_4,lootPoolChances_4,lootGroupChance_4) + + lootPoolNames_5 = ['sithholocrons'] + lootPoolChances_5 = [100] + lootGroupChance_5 = 1 + object.addToLootGroups(lootPoolNames_5,lootPoolChances_5,lootGroupChance_5) + + + return \ No newline at end of file diff --git a/scripts/object/mobile/dressed_dark_jedi_male_human_04.py b/scripts/object/mobile/dressed_dark_jedi_male_human_04.py index ccad8904..be97678c 100644 --- a/scripts/object/mobile/dressed_dark_jedi_male_human_04.py +++ b/scripts/object/mobile/dressed_dark_jedi_male_human_04.py @@ -1,4 +1,31 @@ import sys def setup(core, object): - return \ No newline at end of file + + lootPoolNames_1 = ['Junk'] + lootPoolChances_1 = [100] + lootGroupChance_1 = 65 + object.addToLootGroups(lootPoolNames_1,lootPoolChances_1,lootGroupChance_1) + + lootPoolNames_2 = ['jedi_relic_1'] + lootPoolChances_2 = [100] + lootGroupChance_2 = 85 + object.addToLootGroups(lootPoolNames_2,lootPoolChances_2,lootGroupChance_2) + + lootPoolNames_3 = ['powercrystals_hiq'] + lootPoolChances_3 = [100] + lootGroupChance_3 = 12 + object.addToLootGroups(lootPoolNames_3,lootPoolChances_3,lootGroupChance_3) + + lootPoolNames_4 = ['random_stat_jewelry'] + lootPoolChances_4 = [100] + lootGroupChance_4 = 8 + object.addToLootGroups(lootPoolNames_4,lootPoolChances_4,lootGroupChance_4) + + lootPoolNames_5 = ['sithholocrons'] + lootPoolChances_5 = [100] + lootGroupChance_5 = 1 + object.addToLootGroups(lootPoolNames_5,lootPoolChances_5,lootGroupChance_5) + + + return \ No newline at end of file diff --git a/scripts/object/mobile/dressed_dark_jedi_male_human_05.py b/scripts/object/mobile/dressed_dark_jedi_male_human_05.py index ccad8904..be97678c 100644 --- a/scripts/object/mobile/dressed_dark_jedi_male_human_05.py +++ b/scripts/object/mobile/dressed_dark_jedi_male_human_05.py @@ -1,4 +1,31 @@ import sys def setup(core, object): - return \ No newline at end of file + + lootPoolNames_1 = ['Junk'] + lootPoolChances_1 = [100] + lootGroupChance_1 = 65 + object.addToLootGroups(lootPoolNames_1,lootPoolChances_1,lootGroupChance_1) + + lootPoolNames_2 = ['jedi_relic_1'] + lootPoolChances_2 = [100] + lootGroupChance_2 = 85 + object.addToLootGroups(lootPoolNames_2,lootPoolChances_2,lootGroupChance_2) + + lootPoolNames_3 = ['powercrystals_hiq'] + lootPoolChances_3 = [100] + lootGroupChance_3 = 12 + object.addToLootGroups(lootPoolNames_3,lootPoolChances_3,lootGroupChance_3) + + lootPoolNames_4 = ['random_stat_jewelry'] + lootPoolChances_4 = [100] + lootGroupChance_4 = 8 + object.addToLootGroups(lootPoolNames_4,lootPoolChances_4,lootGroupChance_4) + + lootPoolNames_5 = ['sithholocrons'] + lootPoolChances_5 = [100] + lootGroupChance_5 = 1 + object.addToLootGroups(lootPoolNames_5,lootPoolChances_5,lootGroupChance_5) + + + return \ No newline at end of file diff --git a/scripts/object/mobile/dressed_dark_jedi_male_human_06.py b/scripts/object/mobile/dressed_dark_jedi_male_human_06.py index ccad8904..be97678c 100644 --- a/scripts/object/mobile/dressed_dark_jedi_male_human_06.py +++ b/scripts/object/mobile/dressed_dark_jedi_male_human_06.py @@ -1,4 +1,31 @@ import sys def setup(core, object): - return \ No newline at end of file + + lootPoolNames_1 = ['Junk'] + lootPoolChances_1 = [100] + lootGroupChance_1 = 65 + object.addToLootGroups(lootPoolNames_1,lootPoolChances_1,lootGroupChance_1) + + lootPoolNames_2 = ['jedi_relic_1'] + lootPoolChances_2 = [100] + lootGroupChance_2 = 85 + object.addToLootGroups(lootPoolNames_2,lootPoolChances_2,lootGroupChance_2) + + lootPoolNames_3 = ['powercrystals_hiq'] + lootPoolChances_3 = [100] + lootGroupChance_3 = 12 + object.addToLootGroups(lootPoolNames_3,lootPoolChances_3,lootGroupChance_3) + + lootPoolNames_4 = ['random_stat_jewelry'] + lootPoolChances_4 = [100] + lootGroupChance_4 = 8 + object.addToLootGroups(lootPoolNames_4,lootPoolChances_4,lootGroupChance_4) + + lootPoolNames_5 = ['sithholocrons'] + lootPoolChances_5 = [100] + lootGroupChance_5 = 1 + object.addToLootGroups(lootPoolNames_5,lootPoolChances_5,lootGroupChance_5) + + + return \ No newline at end of file diff --git a/scripts/object/mobile/dressed_dark_jedi_male_marauder_01.py b/scripts/object/mobile/dressed_dark_jedi_male_marauder_01.py index ccad8904..be97678c 100644 --- a/scripts/object/mobile/dressed_dark_jedi_male_marauder_01.py +++ b/scripts/object/mobile/dressed_dark_jedi_male_marauder_01.py @@ -1,4 +1,31 @@ import sys def setup(core, object): - return \ No newline at end of file + + lootPoolNames_1 = ['Junk'] + lootPoolChances_1 = [100] + lootGroupChance_1 = 65 + object.addToLootGroups(lootPoolNames_1,lootPoolChances_1,lootGroupChance_1) + + lootPoolNames_2 = ['jedi_relic_1'] + lootPoolChances_2 = [100] + lootGroupChance_2 = 85 + object.addToLootGroups(lootPoolNames_2,lootPoolChances_2,lootGroupChance_2) + + lootPoolNames_3 = ['powercrystals_hiq'] + lootPoolChances_3 = [100] + lootGroupChance_3 = 12 + object.addToLootGroups(lootPoolNames_3,lootPoolChances_3,lootGroupChance_3) + + lootPoolNames_4 = ['random_stat_jewelry'] + lootPoolChances_4 = [100] + lootGroupChance_4 = 8 + object.addToLootGroups(lootPoolNames_4,lootPoolChances_4,lootGroupChance_4) + + lootPoolNames_5 = ['sithholocrons'] + lootPoolChances_5 = [100] + lootGroupChance_5 = 1 + object.addToLootGroups(lootPoolNames_5,lootPoolChances_5,lootGroupChance_5) + + + return \ No newline at end of file diff --git a/scripts/object/mobile/dressed_dark_jedi_male_twk_01.py b/scripts/object/mobile/dressed_dark_jedi_male_twk_01.py index ccad8904..be97678c 100644 --- a/scripts/object/mobile/dressed_dark_jedi_male_twk_01.py +++ b/scripts/object/mobile/dressed_dark_jedi_male_twk_01.py @@ -1,4 +1,31 @@ import sys def setup(core, object): - return \ No newline at end of file + + lootPoolNames_1 = ['Junk'] + lootPoolChances_1 = [100] + lootGroupChance_1 = 65 + object.addToLootGroups(lootPoolNames_1,lootPoolChances_1,lootGroupChance_1) + + lootPoolNames_2 = ['jedi_relic_1'] + lootPoolChances_2 = [100] + lootGroupChance_2 = 85 + object.addToLootGroups(lootPoolNames_2,lootPoolChances_2,lootGroupChance_2) + + lootPoolNames_3 = ['powercrystals_hiq'] + lootPoolChances_3 = [100] + lootGroupChance_3 = 12 + object.addToLootGroups(lootPoolNames_3,lootPoolChances_3,lootGroupChance_3) + + lootPoolNames_4 = ['random_stat_jewelry'] + lootPoolChances_4 = [100] + lootGroupChance_4 = 8 + object.addToLootGroups(lootPoolNames_4,lootPoolChances_4,lootGroupChance_4) + + lootPoolNames_5 = ['sithholocrons'] + lootPoolChances_5 = [100] + lootGroupChance_5 = 1 + object.addToLootGroups(lootPoolNames_5,lootPoolChances_5,lootGroupChance_5) + + + return \ No newline at end of file diff --git a/scripts/object/mobile/dressed_dark_jedi_male_twk_02.py b/scripts/object/mobile/dressed_dark_jedi_male_twk_02.py index ccad8904..be97678c 100644 --- a/scripts/object/mobile/dressed_dark_jedi_male_twk_02.py +++ b/scripts/object/mobile/dressed_dark_jedi_male_twk_02.py @@ -1,4 +1,31 @@ import sys def setup(core, object): - return \ No newline at end of file + + lootPoolNames_1 = ['Junk'] + lootPoolChances_1 = [100] + lootGroupChance_1 = 65 + object.addToLootGroups(lootPoolNames_1,lootPoolChances_1,lootGroupChance_1) + + lootPoolNames_2 = ['jedi_relic_1'] + lootPoolChances_2 = [100] + lootGroupChance_2 = 85 + object.addToLootGroups(lootPoolNames_2,lootPoolChances_2,lootGroupChance_2) + + lootPoolNames_3 = ['powercrystals_hiq'] + lootPoolChances_3 = [100] + lootGroupChance_3 = 12 + object.addToLootGroups(lootPoolNames_3,lootPoolChances_3,lootGroupChance_3) + + lootPoolNames_4 = ['random_stat_jewelry'] + lootPoolChances_4 = [100] + lootGroupChance_4 = 8 + object.addToLootGroups(lootPoolNames_4,lootPoolChances_4,lootGroupChance_4) + + lootPoolNames_5 = ['sithholocrons'] + lootPoolChances_5 = [100] + lootGroupChance_5 = 1 + object.addToLootGroups(lootPoolNames_5,lootPoolChances_5,lootGroupChance_5) + + + return \ No newline at end of file diff --git a/scripts/object/mobile/dressed_dark_jedi_male_twk_03.py b/scripts/object/mobile/dressed_dark_jedi_male_twk_03.py index ccad8904..be97678c 100644 --- a/scripts/object/mobile/dressed_dark_jedi_male_twk_03.py +++ b/scripts/object/mobile/dressed_dark_jedi_male_twk_03.py @@ -1,4 +1,31 @@ import sys def setup(core, object): - return \ No newline at end of file + + lootPoolNames_1 = ['Junk'] + lootPoolChances_1 = [100] + lootGroupChance_1 = 65 + object.addToLootGroups(lootPoolNames_1,lootPoolChances_1,lootGroupChance_1) + + lootPoolNames_2 = ['jedi_relic_1'] + lootPoolChances_2 = [100] + lootGroupChance_2 = 85 + object.addToLootGroups(lootPoolNames_2,lootPoolChances_2,lootGroupChance_2) + + lootPoolNames_3 = ['powercrystals_hiq'] + lootPoolChances_3 = [100] + lootGroupChance_3 = 12 + object.addToLootGroups(lootPoolNames_3,lootPoolChances_3,lootGroupChance_3) + + lootPoolNames_4 = ['random_stat_jewelry'] + lootPoolChances_4 = [100] + lootGroupChance_4 = 8 + object.addToLootGroups(lootPoolNames_4,lootPoolChances_4,lootGroupChance_4) + + lootPoolNames_5 = ['sithholocrons'] + lootPoolChances_5 = [100] + lootGroupChance_5 = 1 + object.addToLootGroups(lootPoolNames_5,lootPoolChances_5,lootGroupChance_5) + + + return \ No newline at end of file diff --git a/scripts/object/mobile/dressed_dark_jedi_male_zab_01.py b/scripts/object/mobile/dressed_dark_jedi_male_zab_01.py index ccad8904..be97678c 100644 --- a/scripts/object/mobile/dressed_dark_jedi_male_zab_01.py +++ b/scripts/object/mobile/dressed_dark_jedi_male_zab_01.py @@ -1,4 +1,31 @@ import sys def setup(core, object): - return \ No newline at end of file + + lootPoolNames_1 = ['Junk'] + lootPoolChances_1 = [100] + lootGroupChance_1 = 65 + object.addToLootGroups(lootPoolNames_1,lootPoolChances_1,lootGroupChance_1) + + lootPoolNames_2 = ['jedi_relic_1'] + lootPoolChances_2 = [100] + lootGroupChance_2 = 85 + object.addToLootGroups(lootPoolNames_2,lootPoolChances_2,lootGroupChance_2) + + lootPoolNames_3 = ['powercrystals_hiq'] + lootPoolChances_3 = [100] + lootGroupChance_3 = 12 + object.addToLootGroups(lootPoolNames_3,lootPoolChances_3,lootGroupChance_3) + + lootPoolNames_4 = ['random_stat_jewelry'] + lootPoolChances_4 = [100] + lootGroupChance_4 = 8 + object.addToLootGroups(lootPoolNames_4,lootPoolChances_4,lootGroupChance_4) + + lootPoolNames_5 = ['sithholocrons'] + lootPoolChances_5 = [100] + lootGroupChance_5 = 1 + object.addToLootGroups(lootPoolNames_5,lootPoolChances_5,lootGroupChance_5) + + + return \ No newline at end of file diff --git a/scripts/object/mobile/dressed_dark_jedi_male_zab_02.py b/scripts/object/mobile/dressed_dark_jedi_male_zab_02.py index ccad8904..be97678c 100644 --- a/scripts/object/mobile/dressed_dark_jedi_male_zab_02.py +++ b/scripts/object/mobile/dressed_dark_jedi_male_zab_02.py @@ -1,4 +1,31 @@ import sys def setup(core, object): - return \ No newline at end of file + + lootPoolNames_1 = ['Junk'] + lootPoolChances_1 = [100] + lootGroupChance_1 = 65 + object.addToLootGroups(lootPoolNames_1,lootPoolChances_1,lootGroupChance_1) + + lootPoolNames_2 = ['jedi_relic_1'] + lootPoolChances_2 = [100] + lootGroupChance_2 = 85 + object.addToLootGroups(lootPoolNames_2,lootPoolChances_2,lootGroupChance_2) + + lootPoolNames_3 = ['powercrystals_hiq'] + lootPoolChances_3 = [100] + lootGroupChance_3 = 12 + object.addToLootGroups(lootPoolNames_3,lootPoolChances_3,lootGroupChance_3) + + lootPoolNames_4 = ['random_stat_jewelry'] + lootPoolChances_4 = [100] + lootGroupChance_4 = 8 + object.addToLootGroups(lootPoolNames_4,lootPoolChances_4,lootGroupChance_4) + + lootPoolNames_5 = ['sithholocrons'] + lootPoolChances_5 = [100] + lootGroupChance_5 = 1 + object.addToLootGroups(lootPoolNames_5,lootPoolChances_5,lootGroupChance_5) + + + return \ No newline at end of file diff --git a/scripts/object/mobile/dressed_dark_jedi_male_zab_03.py b/scripts/object/mobile/dressed_dark_jedi_male_zab_03.py index ccad8904..be97678c 100644 --- a/scripts/object/mobile/dressed_dark_jedi_male_zab_03.py +++ b/scripts/object/mobile/dressed_dark_jedi_male_zab_03.py @@ -1,4 +1,31 @@ import sys def setup(core, object): - return \ No newline at end of file + + lootPoolNames_1 = ['Junk'] + lootPoolChances_1 = [100] + lootGroupChance_1 = 65 + object.addToLootGroups(lootPoolNames_1,lootPoolChances_1,lootGroupChance_1) + + lootPoolNames_2 = ['jedi_relic_1'] + lootPoolChances_2 = [100] + lootGroupChance_2 = 85 + object.addToLootGroups(lootPoolNames_2,lootPoolChances_2,lootGroupChance_2) + + lootPoolNames_3 = ['powercrystals_hiq'] + lootPoolChances_3 = [100] + lootGroupChance_3 = 12 + object.addToLootGroups(lootPoolNames_3,lootPoolChances_3,lootGroupChance_3) + + lootPoolNames_4 = ['random_stat_jewelry'] + lootPoolChances_4 = [100] + lootGroupChance_4 = 8 + object.addToLootGroups(lootPoolNames_4,lootPoolChances_4,lootGroupChance_4) + + lootPoolNames_5 = ['sithholocrons'] + lootPoolChances_5 = [100] + lootGroupChance_5 = 1 + object.addToLootGroups(lootPoolNames_5,lootPoolChances_5,lootGroupChance_5) + + + return \ No newline at end of file diff --git a/scripts/object/mobile/dressed_dark_jedi_master_female_bith_01.py b/scripts/object/mobile/dressed_dark_jedi_master_female_bith_01.py index ccad8904..dba8fbeb 100644 --- a/scripts/object/mobile/dressed_dark_jedi_master_female_bith_01.py +++ b/scripts/object/mobile/dressed_dark_jedi_master_female_bith_01.py @@ -1,4 +1,26 @@ import sys def setup(core, object): - return \ No newline at end of file + + lootPoolNames_1 = ['Junk'] + lootPoolChances_1 = [100] + lootGroupChance_1 = 65 + object.addToLootGroups(lootPoolNames_1,lootPoolChances_1,lootGroupChance_1) + + lootPoolNames_2 = ['jedi_relic_1'] + lootPoolChances_2 = [100] + lootGroupChance_2 = 85 + object.addToLootGroups(lootPoolNames_2,lootPoolChances_2,lootGroupChance_2) + + lootPoolNames_3 = ['powercrystals_hiq'] + lootPoolChances_3 = [100] + lootGroupChance_3 = 12 + object.addToLootGroups(lootPoolNames_3,lootPoolChances_3,lootGroupChance_3) + + lootPoolNames_4 = ['random_stat_jewelry'] + lootPoolChances_4 = [100] + lootGroupChance_4 = 8 + object.addToLootGroups(lootPoolNames_4,lootPoolChances_4,lootGroupChance_4) + + + return \ No newline at end of file diff --git a/scripts/object/mobile/dressed_dark_jedi_master_female_bothan_01.py b/scripts/object/mobile/dressed_dark_jedi_master_female_bothan_01.py index ccad8904..dba8fbeb 100644 --- a/scripts/object/mobile/dressed_dark_jedi_master_female_bothan_01.py +++ b/scripts/object/mobile/dressed_dark_jedi_master_female_bothan_01.py @@ -1,4 +1,26 @@ import sys def setup(core, object): - return \ No newline at end of file + + lootPoolNames_1 = ['Junk'] + lootPoolChances_1 = [100] + lootGroupChance_1 = 65 + object.addToLootGroups(lootPoolNames_1,lootPoolChances_1,lootGroupChance_1) + + lootPoolNames_2 = ['jedi_relic_1'] + lootPoolChances_2 = [100] + lootGroupChance_2 = 85 + object.addToLootGroups(lootPoolNames_2,lootPoolChances_2,lootGroupChance_2) + + lootPoolNames_3 = ['powercrystals_hiq'] + lootPoolChances_3 = [100] + lootGroupChance_3 = 12 + object.addToLootGroups(lootPoolNames_3,lootPoolChances_3,lootGroupChance_3) + + lootPoolNames_4 = ['random_stat_jewelry'] + lootPoolChances_4 = [100] + lootGroupChance_4 = 8 + object.addToLootGroups(lootPoolNames_4,lootPoolChances_4,lootGroupChance_4) + + + return \ No newline at end of file diff --git a/scripts/object/mobile/dressed_dark_jedi_master_female_chiss_01.py b/scripts/object/mobile/dressed_dark_jedi_master_female_chiss_01.py index ccad8904..dba8fbeb 100644 --- a/scripts/object/mobile/dressed_dark_jedi_master_female_chiss_01.py +++ b/scripts/object/mobile/dressed_dark_jedi_master_female_chiss_01.py @@ -1,4 +1,26 @@ import sys def setup(core, object): - return \ No newline at end of file + + lootPoolNames_1 = ['Junk'] + lootPoolChances_1 = [100] + lootGroupChance_1 = 65 + object.addToLootGroups(lootPoolNames_1,lootPoolChances_1,lootGroupChance_1) + + lootPoolNames_2 = ['jedi_relic_1'] + lootPoolChances_2 = [100] + lootGroupChance_2 = 85 + object.addToLootGroups(lootPoolNames_2,lootPoolChances_2,lootGroupChance_2) + + lootPoolNames_3 = ['powercrystals_hiq'] + lootPoolChances_3 = [100] + lootGroupChance_3 = 12 + object.addToLootGroups(lootPoolNames_3,lootPoolChances_3,lootGroupChance_3) + + lootPoolNames_4 = ['random_stat_jewelry'] + lootPoolChances_4 = [100] + lootGroupChance_4 = 8 + object.addToLootGroups(lootPoolNames_4,lootPoolChances_4,lootGroupChance_4) + + + return \ No newline at end of file diff --git a/scripts/object/mobile/dressed_dark_jedi_master_female_chiss_02.py b/scripts/object/mobile/dressed_dark_jedi_master_female_chiss_02.py index ccad8904..dba8fbeb 100644 --- a/scripts/object/mobile/dressed_dark_jedi_master_female_chiss_02.py +++ b/scripts/object/mobile/dressed_dark_jedi_master_female_chiss_02.py @@ -1,4 +1,26 @@ import sys def setup(core, object): - return \ No newline at end of file + + lootPoolNames_1 = ['Junk'] + lootPoolChances_1 = [100] + lootGroupChance_1 = 65 + object.addToLootGroups(lootPoolNames_1,lootPoolChances_1,lootGroupChance_1) + + lootPoolNames_2 = ['jedi_relic_1'] + lootPoolChances_2 = [100] + lootGroupChance_2 = 85 + object.addToLootGroups(lootPoolNames_2,lootPoolChances_2,lootGroupChance_2) + + lootPoolNames_3 = ['powercrystals_hiq'] + lootPoolChances_3 = [100] + lootGroupChance_3 = 12 + object.addToLootGroups(lootPoolNames_3,lootPoolChances_3,lootGroupChance_3) + + lootPoolNames_4 = ['random_stat_jewelry'] + lootPoolChances_4 = [100] + lootGroupChance_4 = 8 + object.addToLootGroups(lootPoolNames_4,lootPoolChances_4,lootGroupChance_4) + + + return \ No newline at end of file diff --git a/scripts/object/mobile/dressed_dark_jedi_master_female_twk_01.py b/scripts/object/mobile/dressed_dark_jedi_master_female_twk_01.py index ccad8904..dba8fbeb 100644 --- a/scripts/object/mobile/dressed_dark_jedi_master_female_twk_01.py +++ b/scripts/object/mobile/dressed_dark_jedi_master_female_twk_01.py @@ -1,4 +1,26 @@ import sys def setup(core, object): - return \ No newline at end of file + + lootPoolNames_1 = ['Junk'] + lootPoolChances_1 = [100] + lootGroupChance_1 = 65 + object.addToLootGroups(lootPoolNames_1,lootPoolChances_1,lootGroupChance_1) + + lootPoolNames_2 = ['jedi_relic_1'] + lootPoolChances_2 = [100] + lootGroupChance_2 = 85 + object.addToLootGroups(lootPoolNames_2,lootPoolChances_2,lootGroupChance_2) + + lootPoolNames_3 = ['powercrystals_hiq'] + lootPoolChances_3 = [100] + lootGroupChance_3 = 12 + object.addToLootGroups(lootPoolNames_3,lootPoolChances_3,lootGroupChance_3) + + lootPoolNames_4 = ['random_stat_jewelry'] + lootPoolChances_4 = [100] + lootGroupChance_4 = 8 + object.addToLootGroups(lootPoolNames_4,lootPoolChances_4,lootGroupChance_4) + + + return \ No newline at end of file diff --git a/scripts/object/mobile/dressed_dark_jedi_master_female_twk_02.py b/scripts/object/mobile/dressed_dark_jedi_master_female_twk_02.py index ccad8904..dba8fbeb 100644 --- a/scripts/object/mobile/dressed_dark_jedi_master_female_twk_02.py +++ b/scripts/object/mobile/dressed_dark_jedi_master_female_twk_02.py @@ -1,4 +1,26 @@ import sys def setup(core, object): - return \ No newline at end of file + + lootPoolNames_1 = ['Junk'] + lootPoolChances_1 = [100] + lootGroupChance_1 = 65 + object.addToLootGroups(lootPoolNames_1,lootPoolChances_1,lootGroupChance_1) + + lootPoolNames_2 = ['jedi_relic_1'] + lootPoolChances_2 = [100] + lootGroupChance_2 = 85 + object.addToLootGroups(lootPoolNames_2,lootPoolChances_2,lootGroupChance_2) + + lootPoolNames_3 = ['powercrystals_hiq'] + lootPoolChances_3 = [100] + lootGroupChance_3 = 12 + object.addToLootGroups(lootPoolNames_3,lootPoolChances_3,lootGroupChance_3) + + lootPoolNames_4 = ['random_stat_jewelry'] + lootPoolChances_4 = [100] + lootGroupChance_4 = 8 + object.addToLootGroups(lootPoolNames_4,lootPoolChances_4,lootGroupChance_4) + + + return \ No newline at end of file diff --git a/scripts/object/mobile/dressed_dark_jedi_master_female_zab_01.py b/scripts/object/mobile/dressed_dark_jedi_master_female_zab_01.py index ccad8904..dba8fbeb 100644 --- a/scripts/object/mobile/dressed_dark_jedi_master_female_zab_01.py +++ b/scripts/object/mobile/dressed_dark_jedi_master_female_zab_01.py @@ -1,4 +1,26 @@ import sys def setup(core, object): - return \ No newline at end of file + + lootPoolNames_1 = ['Junk'] + lootPoolChances_1 = [100] + lootGroupChance_1 = 65 + object.addToLootGroups(lootPoolNames_1,lootPoolChances_1,lootGroupChance_1) + + lootPoolNames_2 = ['jedi_relic_1'] + lootPoolChances_2 = [100] + lootGroupChance_2 = 85 + object.addToLootGroups(lootPoolNames_2,lootPoolChances_2,lootGroupChance_2) + + lootPoolNames_3 = ['powercrystals_hiq'] + lootPoolChances_3 = [100] + lootGroupChance_3 = 12 + object.addToLootGroups(lootPoolNames_3,lootPoolChances_3,lootGroupChance_3) + + lootPoolNames_4 = ['random_stat_jewelry'] + lootPoolChances_4 = [100] + lootGroupChance_4 = 8 + object.addToLootGroups(lootPoolNames_4,lootPoolChances_4,lootGroupChance_4) + + + return \ No newline at end of file diff --git a/scripts/object/mobile/dressed_dark_jedi_master_female_zab_02.py b/scripts/object/mobile/dressed_dark_jedi_master_female_zab_02.py index ccad8904..dba8fbeb 100644 --- a/scripts/object/mobile/dressed_dark_jedi_master_female_zab_02.py +++ b/scripts/object/mobile/dressed_dark_jedi_master_female_zab_02.py @@ -1,4 +1,26 @@ import sys def setup(core, object): - return \ No newline at end of file + + lootPoolNames_1 = ['Junk'] + lootPoolChances_1 = [100] + lootGroupChance_1 = 65 + object.addToLootGroups(lootPoolNames_1,lootPoolChances_1,lootGroupChance_1) + + lootPoolNames_2 = ['jedi_relic_1'] + lootPoolChances_2 = [100] + lootGroupChance_2 = 85 + object.addToLootGroups(lootPoolNames_2,lootPoolChances_2,lootGroupChance_2) + + lootPoolNames_3 = ['powercrystals_hiq'] + lootPoolChances_3 = [100] + lootGroupChance_3 = 12 + object.addToLootGroups(lootPoolNames_3,lootPoolChances_3,lootGroupChance_3) + + lootPoolNames_4 = ['random_stat_jewelry'] + lootPoolChances_4 = [100] + lootGroupChance_4 = 8 + object.addToLootGroups(lootPoolNames_4,lootPoolChances_4,lootGroupChance_4) + + + return \ No newline at end of file diff --git a/scripts/object/mobile/dressed_dark_jedi_master_male_arcona_01.py b/scripts/object/mobile/dressed_dark_jedi_master_male_arcona_01.py index ccad8904..dba8fbeb 100644 --- a/scripts/object/mobile/dressed_dark_jedi_master_male_arcona_01.py +++ b/scripts/object/mobile/dressed_dark_jedi_master_male_arcona_01.py @@ -1,4 +1,26 @@ import sys def setup(core, object): - return \ No newline at end of file + + lootPoolNames_1 = ['Junk'] + lootPoolChances_1 = [100] + lootGroupChance_1 = 65 + object.addToLootGroups(lootPoolNames_1,lootPoolChances_1,lootGroupChance_1) + + lootPoolNames_2 = ['jedi_relic_1'] + lootPoolChances_2 = [100] + lootGroupChance_2 = 85 + object.addToLootGroups(lootPoolNames_2,lootPoolChances_2,lootGroupChance_2) + + lootPoolNames_3 = ['powercrystals_hiq'] + lootPoolChances_3 = [100] + lootGroupChance_3 = 12 + object.addToLootGroups(lootPoolNames_3,lootPoolChances_3,lootGroupChance_3) + + lootPoolNames_4 = ['random_stat_jewelry'] + lootPoolChances_4 = [100] + lootGroupChance_4 = 8 + object.addToLootGroups(lootPoolNames_4,lootPoolChances_4,lootGroupChance_4) + + + return \ No newline at end of file diff --git a/scripts/object/mobile/dressed_dark_jedi_master_male_barada_01.py b/scripts/object/mobile/dressed_dark_jedi_master_male_barada_01.py index ccad8904..dba8fbeb 100644 --- a/scripts/object/mobile/dressed_dark_jedi_master_male_barada_01.py +++ b/scripts/object/mobile/dressed_dark_jedi_master_male_barada_01.py @@ -1,4 +1,26 @@ import sys def setup(core, object): - return \ No newline at end of file + + lootPoolNames_1 = ['Junk'] + lootPoolChances_1 = [100] + lootGroupChance_1 = 65 + object.addToLootGroups(lootPoolNames_1,lootPoolChances_1,lootGroupChance_1) + + lootPoolNames_2 = ['jedi_relic_1'] + lootPoolChances_2 = [100] + lootGroupChance_2 = 85 + object.addToLootGroups(lootPoolNames_2,lootPoolChances_2,lootGroupChance_2) + + lootPoolNames_3 = ['powercrystals_hiq'] + lootPoolChances_3 = [100] + lootGroupChance_3 = 12 + object.addToLootGroups(lootPoolNames_3,lootPoolChances_3,lootGroupChance_3) + + lootPoolNames_4 = ['random_stat_jewelry'] + lootPoolChances_4 = [100] + lootGroupChance_4 = 8 + object.addToLootGroups(lootPoolNames_4,lootPoolChances_4,lootGroupChance_4) + + + return \ No newline at end of file diff --git a/scripts/object/mobile/dressed_dark_jedi_master_male_gotal_01.py b/scripts/object/mobile/dressed_dark_jedi_master_male_gotal_01.py index ccad8904..dba8fbeb 100644 --- a/scripts/object/mobile/dressed_dark_jedi_master_male_gotal_01.py +++ b/scripts/object/mobile/dressed_dark_jedi_master_male_gotal_01.py @@ -1,4 +1,26 @@ import sys def setup(core, object): - return \ No newline at end of file + + lootPoolNames_1 = ['Junk'] + lootPoolChances_1 = [100] + lootGroupChance_1 = 65 + object.addToLootGroups(lootPoolNames_1,lootPoolChances_1,lootGroupChance_1) + + lootPoolNames_2 = ['jedi_relic_1'] + lootPoolChances_2 = [100] + lootGroupChance_2 = 85 + object.addToLootGroups(lootPoolNames_2,lootPoolChances_2,lootGroupChance_2) + + lootPoolNames_3 = ['powercrystals_hiq'] + lootPoolChances_3 = [100] + lootGroupChance_3 = 12 + object.addToLootGroups(lootPoolNames_3,lootPoolChances_3,lootGroupChance_3) + + lootPoolNames_4 = ['random_stat_jewelry'] + lootPoolChances_4 = [100] + lootGroupChance_4 = 8 + object.addToLootGroups(lootPoolNames_4,lootPoolChances_4,lootGroupChance_4) + + + return \ No newline at end of file diff --git a/scripts/object/mobile/dressed_dark_jedi_master_male_human_01.py b/scripts/object/mobile/dressed_dark_jedi_master_male_human_01.py index ccad8904..dba8fbeb 100644 --- a/scripts/object/mobile/dressed_dark_jedi_master_male_human_01.py +++ b/scripts/object/mobile/dressed_dark_jedi_master_male_human_01.py @@ -1,4 +1,26 @@ import sys def setup(core, object): - return \ No newline at end of file + + lootPoolNames_1 = ['Junk'] + lootPoolChances_1 = [100] + lootGroupChance_1 = 65 + object.addToLootGroups(lootPoolNames_1,lootPoolChances_1,lootGroupChance_1) + + lootPoolNames_2 = ['jedi_relic_1'] + lootPoolChances_2 = [100] + lootGroupChance_2 = 85 + object.addToLootGroups(lootPoolNames_2,lootPoolChances_2,lootGroupChance_2) + + lootPoolNames_3 = ['powercrystals_hiq'] + lootPoolChances_3 = [100] + lootGroupChance_3 = 12 + object.addToLootGroups(lootPoolNames_3,lootPoolChances_3,lootGroupChance_3) + + lootPoolNames_4 = ['random_stat_jewelry'] + lootPoolChances_4 = [100] + lootGroupChance_4 = 8 + object.addToLootGroups(lootPoolNames_4,lootPoolChances_4,lootGroupChance_4) + + + return \ No newline at end of file diff --git a/scripts/object/mobile/dressed_dark_jedi_master_male_human_02.py b/scripts/object/mobile/dressed_dark_jedi_master_male_human_02.py index ccad8904..dba8fbeb 100644 --- a/scripts/object/mobile/dressed_dark_jedi_master_male_human_02.py +++ b/scripts/object/mobile/dressed_dark_jedi_master_male_human_02.py @@ -1,4 +1,26 @@ import sys def setup(core, object): - return \ No newline at end of file + + lootPoolNames_1 = ['Junk'] + lootPoolChances_1 = [100] + lootGroupChance_1 = 65 + object.addToLootGroups(lootPoolNames_1,lootPoolChances_1,lootGroupChance_1) + + lootPoolNames_2 = ['jedi_relic_1'] + lootPoolChances_2 = [100] + lootGroupChance_2 = 85 + object.addToLootGroups(lootPoolNames_2,lootPoolChances_2,lootGroupChance_2) + + lootPoolNames_3 = ['powercrystals_hiq'] + lootPoolChances_3 = [100] + lootGroupChance_3 = 12 + object.addToLootGroups(lootPoolNames_3,lootPoolChances_3,lootGroupChance_3) + + lootPoolNames_4 = ['random_stat_jewelry'] + lootPoolChances_4 = [100] + lootGroupChance_4 = 8 + object.addToLootGroups(lootPoolNames_4,lootPoolChances_4,lootGroupChance_4) + + + return \ No newline at end of file diff --git a/scripts/object/mobile/dressed_dark_jedi_master_male_human_03.py b/scripts/object/mobile/dressed_dark_jedi_master_male_human_03.py index ccad8904..dba8fbeb 100644 --- a/scripts/object/mobile/dressed_dark_jedi_master_male_human_03.py +++ b/scripts/object/mobile/dressed_dark_jedi_master_male_human_03.py @@ -1,4 +1,26 @@ import sys def setup(core, object): - return \ No newline at end of file + + lootPoolNames_1 = ['Junk'] + lootPoolChances_1 = [100] + lootGroupChance_1 = 65 + object.addToLootGroups(lootPoolNames_1,lootPoolChances_1,lootGroupChance_1) + + lootPoolNames_2 = ['jedi_relic_1'] + lootPoolChances_2 = [100] + lootGroupChance_2 = 85 + object.addToLootGroups(lootPoolNames_2,lootPoolChances_2,lootGroupChance_2) + + lootPoolNames_3 = ['powercrystals_hiq'] + lootPoolChances_3 = [100] + lootGroupChance_3 = 12 + object.addToLootGroups(lootPoolNames_3,lootPoolChances_3,lootGroupChance_3) + + lootPoolNames_4 = ['random_stat_jewelry'] + lootPoolChances_4 = [100] + lootGroupChance_4 = 8 + object.addToLootGroups(lootPoolNames_4,lootPoolChances_4,lootGroupChance_4) + + + return \ No newline at end of file diff --git a/scripts/object/mobile/dressed_dark_jedi_master_male_human_04.py b/scripts/object/mobile/dressed_dark_jedi_master_male_human_04.py index ccad8904..dba8fbeb 100644 --- a/scripts/object/mobile/dressed_dark_jedi_master_male_human_04.py +++ b/scripts/object/mobile/dressed_dark_jedi_master_male_human_04.py @@ -1,4 +1,26 @@ import sys def setup(core, object): - return \ No newline at end of file + + lootPoolNames_1 = ['Junk'] + lootPoolChances_1 = [100] + lootGroupChance_1 = 65 + object.addToLootGroups(lootPoolNames_1,lootPoolChances_1,lootGroupChance_1) + + lootPoolNames_2 = ['jedi_relic_1'] + lootPoolChances_2 = [100] + lootGroupChance_2 = 85 + object.addToLootGroups(lootPoolNames_2,lootPoolChances_2,lootGroupChance_2) + + lootPoolNames_3 = ['powercrystals_hiq'] + lootPoolChances_3 = [100] + lootGroupChance_3 = 12 + object.addToLootGroups(lootPoolNames_3,lootPoolChances_3,lootGroupChance_3) + + lootPoolNames_4 = ['random_stat_jewelry'] + lootPoolChances_4 = [100] + lootGroupChance_4 = 8 + object.addToLootGroups(lootPoolNames_4,lootPoolChances_4,lootGroupChance_4) + + + return \ No newline at end of file diff --git a/scripts/object/mobile/dressed_dark_jedi_master_male_human_05.py b/scripts/object/mobile/dressed_dark_jedi_master_male_human_05.py index ccad8904..dba8fbeb 100644 --- a/scripts/object/mobile/dressed_dark_jedi_master_male_human_05.py +++ b/scripts/object/mobile/dressed_dark_jedi_master_male_human_05.py @@ -1,4 +1,26 @@ import sys def setup(core, object): - return \ No newline at end of file + + lootPoolNames_1 = ['Junk'] + lootPoolChances_1 = [100] + lootGroupChance_1 = 65 + object.addToLootGroups(lootPoolNames_1,lootPoolChances_1,lootGroupChance_1) + + lootPoolNames_2 = ['jedi_relic_1'] + lootPoolChances_2 = [100] + lootGroupChance_2 = 85 + object.addToLootGroups(lootPoolNames_2,lootPoolChances_2,lootGroupChance_2) + + lootPoolNames_3 = ['powercrystals_hiq'] + lootPoolChances_3 = [100] + lootGroupChance_3 = 12 + object.addToLootGroups(lootPoolNames_3,lootPoolChances_3,lootGroupChance_3) + + lootPoolNames_4 = ['random_stat_jewelry'] + lootPoolChances_4 = [100] + lootGroupChance_4 = 8 + object.addToLootGroups(lootPoolNames_4,lootPoolChances_4,lootGroupChance_4) + + + return \ No newline at end of file diff --git a/scripts/object/mobile/dressed_dark_jedi_master_male_human_06.py b/scripts/object/mobile/dressed_dark_jedi_master_male_human_06.py index ccad8904..dba8fbeb 100644 --- a/scripts/object/mobile/dressed_dark_jedi_master_male_human_06.py +++ b/scripts/object/mobile/dressed_dark_jedi_master_male_human_06.py @@ -1,4 +1,26 @@ import sys def setup(core, object): - return \ No newline at end of file + + lootPoolNames_1 = ['Junk'] + lootPoolChances_1 = [100] + lootGroupChance_1 = 65 + object.addToLootGroups(lootPoolNames_1,lootPoolChances_1,lootGroupChance_1) + + lootPoolNames_2 = ['jedi_relic_1'] + lootPoolChances_2 = [100] + lootGroupChance_2 = 85 + object.addToLootGroups(lootPoolNames_2,lootPoolChances_2,lootGroupChance_2) + + lootPoolNames_3 = ['powercrystals_hiq'] + lootPoolChances_3 = [100] + lootGroupChance_3 = 12 + object.addToLootGroups(lootPoolNames_3,lootPoolChances_3,lootGroupChance_3) + + lootPoolNames_4 = ['random_stat_jewelry'] + lootPoolChances_4 = [100] + lootGroupChance_4 = 8 + object.addToLootGroups(lootPoolNames_4,lootPoolChances_4,lootGroupChance_4) + + + return \ No newline at end of file diff --git a/scripts/object/mobile/dressed_dark_jedi_master_male_sul_01.py b/scripts/object/mobile/dressed_dark_jedi_master_male_sul_01.py index ccad8904..dba8fbeb 100644 --- a/scripts/object/mobile/dressed_dark_jedi_master_male_sul_01.py +++ b/scripts/object/mobile/dressed_dark_jedi_master_male_sul_01.py @@ -1,4 +1,26 @@ import sys def setup(core, object): - return \ No newline at end of file + + lootPoolNames_1 = ['Junk'] + lootPoolChances_1 = [100] + lootGroupChance_1 = 65 + object.addToLootGroups(lootPoolNames_1,lootPoolChances_1,lootGroupChance_1) + + lootPoolNames_2 = ['jedi_relic_1'] + lootPoolChances_2 = [100] + lootGroupChance_2 = 85 + object.addToLootGroups(lootPoolNames_2,lootPoolChances_2,lootGroupChance_2) + + lootPoolNames_3 = ['powercrystals_hiq'] + lootPoolChances_3 = [100] + lootGroupChance_3 = 12 + object.addToLootGroups(lootPoolNames_3,lootPoolChances_3,lootGroupChance_3) + + lootPoolNames_4 = ['random_stat_jewelry'] + lootPoolChances_4 = [100] + lootGroupChance_4 = 8 + object.addToLootGroups(lootPoolNames_4,lootPoolChances_4,lootGroupChance_4) + + + return \ No newline at end of file diff --git a/scripts/object/mobile/dressed_dark_jedi_master_male_twk_01.py b/scripts/object/mobile/dressed_dark_jedi_master_male_twk_01.py index ccad8904..dba8fbeb 100644 --- a/scripts/object/mobile/dressed_dark_jedi_master_male_twk_01.py +++ b/scripts/object/mobile/dressed_dark_jedi_master_male_twk_01.py @@ -1,4 +1,26 @@ import sys def setup(core, object): - return \ No newline at end of file + + lootPoolNames_1 = ['Junk'] + lootPoolChances_1 = [100] + lootGroupChance_1 = 65 + object.addToLootGroups(lootPoolNames_1,lootPoolChances_1,lootGroupChance_1) + + lootPoolNames_2 = ['jedi_relic_1'] + lootPoolChances_2 = [100] + lootGroupChance_2 = 85 + object.addToLootGroups(lootPoolNames_2,lootPoolChances_2,lootGroupChance_2) + + lootPoolNames_3 = ['powercrystals_hiq'] + lootPoolChances_3 = [100] + lootGroupChance_3 = 12 + object.addToLootGroups(lootPoolNames_3,lootPoolChances_3,lootGroupChance_3) + + lootPoolNames_4 = ['random_stat_jewelry'] + lootPoolChances_4 = [100] + lootGroupChance_4 = 8 + object.addToLootGroups(lootPoolNames_4,lootPoolChances_4,lootGroupChance_4) + + + return \ No newline at end of file diff --git a/scripts/object/mobile/dressed_dark_jedi_master_male_twk_02.py b/scripts/object/mobile/dressed_dark_jedi_master_male_twk_02.py index ccad8904..dba8fbeb 100644 --- a/scripts/object/mobile/dressed_dark_jedi_master_male_twk_02.py +++ b/scripts/object/mobile/dressed_dark_jedi_master_male_twk_02.py @@ -1,4 +1,26 @@ import sys def setup(core, object): - return \ No newline at end of file + + lootPoolNames_1 = ['Junk'] + lootPoolChances_1 = [100] + lootGroupChance_1 = 65 + object.addToLootGroups(lootPoolNames_1,lootPoolChances_1,lootGroupChance_1) + + lootPoolNames_2 = ['jedi_relic_1'] + lootPoolChances_2 = [100] + lootGroupChance_2 = 85 + object.addToLootGroups(lootPoolNames_2,lootPoolChances_2,lootGroupChance_2) + + lootPoolNames_3 = ['powercrystals_hiq'] + lootPoolChances_3 = [100] + lootGroupChance_3 = 12 + object.addToLootGroups(lootPoolNames_3,lootPoolChances_3,lootGroupChance_3) + + lootPoolNames_4 = ['random_stat_jewelry'] + lootPoolChances_4 = [100] + lootGroupChance_4 = 8 + object.addToLootGroups(lootPoolNames_4,lootPoolChances_4,lootGroupChance_4) + + + return \ No newline at end of file diff --git a/scripts/object/mobile/dressed_dark_jedi_master_male_twk_03.py b/scripts/object/mobile/dressed_dark_jedi_master_male_twk_03.py index ccad8904..dba8fbeb 100644 --- a/scripts/object/mobile/dressed_dark_jedi_master_male_twk_03.py +++ b/scripts/object/mobile/dressed_dark_jedi_master_male_twk_03.py @@ -1,4 +1,26 @@ import sys def setup(core, object): - return \ No newline at end of file + + lootPoolNames_1 = ['Junk'] + lootPoolChances_1 = [100] + lootGroupChance_1 = 65 + object.addToLootGroups(lootPoolNames_1,lootPoolChances_1,lootGroupChance_1) + + lootPoolNames_2 = ['jedi_relic_1'] + lootPoolChances_2 = [100] + lootGroupChance_2 = 85 + object.addToLootGroups(lootPoolNames_2,lootPoolChances_2,lootGroupChance_2) + + lootPoolNames_3 = ['powercrystals_hiq'] + lootPoolChances_3 = [100] + lootGroupChance_3 = 12 + object.addToLootGroups(lootPoolNames_3,lootPoolChances_3,lootGroupChance_3) + + lootPoolNames_4 = ['random_stat_jewelry'] + lootPoolChances_4 = [100] + lootGroupChance_4 = 8 + object.addToLootGroups(lootPoolNames_4,lootPoolChances_4,lootGroupChance_4) + + + return \ No newline at end of file diff --git a/scripts/object/mobile/dressed_dark_jedi_master_male_twk_04.py b/scripts/object/mobile/dressed_dark_jedi_master_male_twk_04.py index ccad8904..dba8fbeb 100644 --- a/scripts/object/mobile/dressed_dark_jedi_master_male_twk_04.py +++ b/scripts/object/mobile/dressed_dark_jedi_master_male_twk_04.py @@ -1,4 +1,26 @@ import sys def setup(core, object): - return \ No newline at end of file + + lootPoolNames_1 = ['Junk'] + lootPoolChances_1 = [100] + lootGroupChance_1 = 65 + object.addToLootGroups(lootPoolNames_1,lootPoolChances_1,lootGroupChance_1) + + lootPoolNames_2 = ['jedi_relic_1'] + lootPoolChances_2 = [100] + lootGroupChance_2 = 85 + object.addToLootGroups(lootPoolNames_2,lootPoolChances_2,lootGroupChance_2) + + lootPoolNames_3 = ['powercrystals_hiq'] + lootPoolChances_3 = [100] + lootGroupChance_3 = 12 + object.addToLootGroups(lootPoolNames_3,lootPoolChances_3,lootGroupChance_3) + + lootPoolNames_4 = ['random_stat_jewelry'] + lootPoolChances_4 = [100] + lootGroupChance_4 = 8 + object.addToLootGroups(lootPoolNames_4,lootPoolChances_4,lootGroupChance_4) + + + return \ No newline at end of file diff --git a/scripts/object/mobile/dressed_dark_jedi_master_male_weequay_01.py b/scripts/object/mobile/dressed_dark_jedi_master_male_weequay_01.py index ccad8904..dba8fbeb 100644 --- a/scripts/object/mobile/dressed_dark_jedi_master_male_weequay_01.py +++ b/scripts/object/mobile/dressed_dark_jedi_master_male_weequay_01.py @@ -1,4 +1,26 @@ import sys def setup(core, object): - return \ No newline at end of file + + lootPoolNames_1 = ['Junk'] + lootPoolChances_1 = [100] + lootGroupChance_1 = 65 + object.addToLootGroups(lootPoolNames_1,lootPoolChances_1,lootGroupChance_1) + + lootPoolNames_2 = ['jedi_relic_1'] + lootPoolChances_2 = [100] + lootGroupChance_2 = 85 + object.addToLootGroups(lootPoolNames_2,lootPoolChances_2,lootGroupChance_2) + + lootPoolNames_3 = ['powercrystals_hiq'] + lootPoolChances_3 = [100] + lootGroupChance_3 = 12 + object.addToLootGroups(lootPoolNames_3,lootPoolChances_3,lootGroupChance_3) + + lootPoolNames_4 = ['random_stat_jewelry'] + lootPoolChances_4 = [100] + lootGroupChance_4 = 8 + object.addToLootGroups(lootPoolNames_4,lootPoolChances_4,lootGroupChance_4) + + + return \ No newline at end of file diff --git a/scripts/object/mobile/dressed_dark_jedi_master_male_zab_01.py b/scripts/object/mobile/dressed_dark_jedi_master_male_zab_01.py index ccad8904..dba8fbeb 100644 --- a/scripts/object/mobile/dressed_dark_jedi_master_male_zab_01.py +++ b/scripts/object/mobile/dressed_dark_jedi_master_male_zab_01.py @@ -1,4 +1,26 @@ import sys def setup(core, object): - return \ No newline at end of file + + lootPoolNames_1 = ['Junk'] + lootPoolChances_1 = [100] + lootGroupChance_1 = 65 + object.addToLootGroups(lootPoolNames_1,lootPoolChances_1,lootGroupChance_1) + + lootPoolNames_2 = ['jedi_relic_1'] + lootPoolChances_2 = [100] + lootGroupChance_2 = 85 + object.addToLootGroups(lootPoolNames_2,lootPoolChances_2,lootGroupChance_2) + + lootPoolNames_3 = ['powercrystals_hiq'] + lootPoolChances_3 = [100] + lootGroupChance_3 = 12 + object.addToLootGroups(lootPoolNames_3,lootPoolChances_3,lootGroupChance_3) + + lootPoolNames_4 = ['random_stat_jewelry'] + lootPoolChances_4 = [100] + lootGroupChance_4 = 8 + object.addToLootGroups(lootPoolNames_4,lootPoolChances_4,lootGroupChance_4) + + + return \ No newline at end of file diff --git a/scripts/object/mobile/dressed_dark_jedi_master_male_zab_02.py b/scripts/object/mobile/dressed_dark_jedi_master_male_zab_02.py index ccad8904..dba8fbeb 100644 --- a/scripts/object/mobile/dressed_dark_jedi_master_male_zab_02.py +++ b/scripts/object/mobile/dressed_dark_jedi_master_male_zab_02.py @@ -1,4 +1,26 @@ import sys def setup(core, object): - return \ No newline at end of file + + lootPoolNames_1 = ['Junk'] + lootPoolChances_1 = [100] + lootGroupChance_1 = 65 + object.addToLootGroups(lootPoolNames_1,lootPoolChances_1,lootGroupChance_1) + + lootPoolNames_2 = ['jedi_relic_1'] + lootPoolChances_2 = [100] + lootGroupChance_2 = 85 + object.addToLootGroups(lootPoolNames_2,lootPoolChances_2,lootGroupChance_2) + + lootPoolNames_3 = ['powercrystals_hiq'] + lootPoolChances_3 = [100] + lootGroupChance_3 = 12 + object.addToLootGroups(lootPoolNames_3,lootPoolChances_3,lootGroupChance_3) + + lootPoolNames_4 = ['random_stat_jewelry'] + lootPoolChances_4 = [100] + lootGroupChance_4 = 8 + object.addToLootGroups(lootPoolNames_4,lootPoolChances_4,lootGroupChance_4) + + + return \ No newline at end of file diff --git a/scripts/object/mobile/dressed_dark_side_savage.py b/scripts/object/mobile/dressed_dark_side_savage.py index ccad8904..70052ae4 100644 --- a/scripts/object/mobile/dressed_dark_side_savage.py +++ b/scripts/object/mobile/dressed_dark_side_savage.py @@ -1,4 +1,21 @@ import sys def setup(core, object): - return \ No newline at end of file + + lootPoolNames_1 = ['Junk'] + lootPoolChances_1 = [100] + lootGroupChance_1 = 65 + object.addToLootGroups(lootPoolNames_1,lootPoolChances_1,lootGroupChance_1) + + lootPoolNames_2 = ['jedi_relic_1'] + lootPoolChances_2 = [100] + lootGroupChance_2 = 85 + object.addToLootGroups(lootPoolNames_2,lootPoolChances_2,lootGroupChance_2) + + lootPoolNames_3 = ['colorcrystals'] + lootPoolChances_3 = [100] + lootGroupChance_3 = 12 + object.addToLootGroups(lootPoolNames_3,lootPoolChances_3,lootGroupChance_3) + + + return \ No newline at end of file diff --git a/scripts/object/mobile/dressed_dathomir_nightsister_slave.py b/scripts/object/mobile/dressed_dathomir_nightsister_slave.py index ccad8904..32ec3471 100644 --- a/scripts/object/mobile/dressed_dathomir_nightsister_slave.py +++ b/scripts/object/mobile/dressed_dathomir_nightsister_slave.py @@ -1,4 +1,10 @@ import sys def setup(core, object): + + lootPoolNames_1 = ['rareloot'] + lootPoolChances_1 = [100] + lootGroupChance_1 = 5 + object.addToLootGroups(lootPoolNames_1,lootPoolChances_1,lootGroupChance_1) + return \ No newline at end of file diff --git a/scripts/object/mobile/dressed_force_sensitive_crypt_crawler.py b/scripts/object/mobile/dressed_force_sensitive_crypt_crawler.py index ccad8904..a96bd6e6 100644 --- a/scripts/object/mobile/dressed_force_sensitive_crypt_crawler.py +++ b/scripts/object/mobile/dressed_force_sensitive_crypt_crawler.py @@ -1,4 +1,32 @@ import sys def setup(core, object): - return \ No newline at end of file + + lootPoolNames_1 = ['Junk'] + lootPoolChances_1 = [100] + lootGroupChance_1 = 65 + object.addToLootGroups(lootPoolNames_1,lootPoolChances_1,lootGroupChance_1) + + lootPoolNames_2 = ['jedi_relic_1'] + lootPoolChances_2 = [100] + lootGroupChance_2 = 85 + object.addToLootGroups(lootPoolNames_2,lootPoolChances_2,lootGroupChance_2) + + lootPoolNames_3 = ['colorcrystals'] + lootPoolChances_3 = [100] + lootGroupChance_3 = 12 + object.addToLootGroups(lootPoolNames_3,lootPoolChances_3,lootGroupChance_3) + + lootPoolNames_4 = ['armor_various','random_loot_rifles'] + lootPoolChances_4 = [80,20] + lootGroupChance_4 = 35 + object.addToLootGroups(lootPoolNames_4,lootPoolChances_4,lootGroupChance_4) + + lootPoolNames_5 = ['jediholocrons'] + lootPoolChances_5 = [100] + lootGroupChance_5 = 1 + object.addToLootGroups(lootPoolNames_5,lootPoolChances_5,lootGroupChance_5) + + + + return \ No newline at end of file diff --git a/scripts/object/mobile/dressed_force_sensitive_renegade.py b/scripts/object/mobile/dressed_force_sensitive_renegade.py index ccad8904..a96bd6e6 100644 --- a/scripts/object/mobile/dressed_force_sensitive_renegade.py +++ b/scripts/object/mobile/dressed_force_sensitive_renegade.py @@ -1,4 +1,32 @@ import sys def setup(core, object): - return \ No newline at end of file + + lootPoolNames_1 = ['Junk'] + lootPoolChances_1 = [100] + lootGroupChance_1 = 65 + object.addToLootGroups(lootPoolNames_1,lootPoolChances_1,lootGroupChance_1) + + lootPoolNames_2 = ['jedi_relic_1'] + lootPoolChances_2 = [100] + lootGroupChance_2 = 85 + object.addToLootGroups(lootPoolNames_2,lootPoolChances_2,lootGroupChance_2) + + lootPoolNames_3 = ['colorcrystals'] + lootPoolChances_3 = [100] + lootGroupChance_3 = 12 + object.addToLootGroups(lootPoolNames_3,lootPoolChances_3,lootGroupChance_3) + + lootPoolNames_4 = ['armor_various','random_loot_rifles'] + lootPoolChances_4 = [80,20] + lootGroupChance_4 = 35 + object.addToLootGroups(lootPoolNames_4,lootPoolChances_4,lootGroupChance_4) + + lootPoolNames_5 = ['jediholocrons'] + lootPoolChances_5 = [100] + lootGroupChance_5 = 1 + object.addToLootGroups(lootPoolNames_5,lootPoolChances_5,lootGroupChance_5) + + + + return \ No newline at end of file diff --git a/scripts/object/mobile/dressed_forsaken_force_drifter.py b/scripts/object/mobile/dressed_forsaken_force_drifter.py index ccad8904..2c42c975 100644 --- a/scripts/object/mobile/dressed_forsaken_force_drifter.py +++ b/scripts/object/mobile/dressed_forsaken_force_drifter.py @@ -1,4 +1,27 @@ import sys def setup(core, object): - return \ No newline at end of file + + lootPoolNames_1 = ['Junk'] + lootPoolChances_1 = [100] + lootGroupChance_1 = 65 + object.addToLootGroups(lootPoolNames_1,lootPoolChances_1,lootGroupChance_1) + + lootPoolNames_2 = ['jedi_relic_1'] + lootPoolChances_2 = [100] + lootGroupChance_2 = 85 + object.addToLootGroups(lootPoolNames_2,lootPoolChances_2,lootGroupChance_2) + + lootPoolNames_3 = ['colorcrystals'] + lootPoolChances_3 = [100] + lootGroupChance_3 = 12 + object.addToLootGroups(lootPoolNames_3,lootPoolChances_3,lootGroupChance_3) + + lootPoolNames_4 = ['jediholocrons'] + lootPoolChances_4 = [100] + lootGroupChance_4 = 1 + object.addToLootGroups(lootPoolNames_4,lootPoolChances_4,lootGroupChance_4) + + + + return \ No newline at end of file diff --git a/scripts/object/mobile/dressed_fs_junk_dealer.py b/scripts/object/mobile/dressed_fs_junk_dealer.py index ccad8904..6fed84e5 100644 --- a/scripts/object/mobile/dressed_fs_junk_dealer.py +++ b/scripts/object/mobile/dressed_fs_junk_dealer.py @@ -1,4 +1,10 @@ import sys +from resources.datatables import Options def setup(core, object): + object.setAttachment('radial_filename', 'object/conversation'); + object.setAttachment('conversationFile','junk_dealer') + object.setOptionsBitmask(Options.CONVERSABLE | Options.INVULNERABLE) + object.setStfFilename('mob/creature_names') + object.setStfName('junk_dealer') return \ No newline at end of file diff --git a/scripts/object/mobile/dressed_gendra.py b/scripts/object/mobile/dressed_gendra.py index ccad8904..ceee905c 100644 --- a/scripts/object/mobile/dressed_gendra.py +++ b/scripts/object/mobile/dressed_gendra.py @@ -1,4 +1,10 @@ import sys +from resources.datatables import Options def setup(core, object): - return \ No newline at end of file + object.setAttachment('radial_filename', 'object/conversation'); + object.setAttachment('conversationFile','gendra') + object.setOptionsBitmask(Options.CONVERSABLE | Options.INVULNERABLE) + object.setStfFilename('mob/creature_names') + object.setStfName('newbie_gendra') + return diff --git a/scripts/object/mobile/dressed_gran_thug_male_01.py b/scripts/object/mobile/dressed_gran_thug_male_01.py index ccad8904..6dcda077 100644 --- a/scripts/object/mobile/dressed_gran_thug_male_01.py +++ b/scripts/object/mobile/dressed_gran_thug_male_01.py @@ -1,4 +1,11 @@ import sys +from resources.datatables import Options def setup(core, object): - return \ No newline at end of file + #object.setAttachment('radial_filename', 'object/conversation'); + #object.setAttachment('conversationFile','junk_dealer') + object.setOptionsBitmask(Options.CONVERSABLE | Options.INVULNERABLE) + object.setStfFilename('mob/creature_names') + object.setStfName('ree_yees') + return + \ No newline at end of file diff --git a/scripts/object/mobile/dressed_imperial_officer_f.py b/scripts/object/mobile/dressed_imperial_officer_f.py index ccad8904..52476091 100644 --- a/scripts/object/mobile/dressed_imperial_officer_f.py +++ b/scripts/object/mobile/dressed_imperial_officer_f.py @@ -1,4 +1,12 @@ import sys +from resources.datatables import Options def setup(core, object): - return \ No newline at end of file + object.setAttachment('radial_filename', 'object/conversation'); + object.setAttachment('conversationFile','imp_recruiter') + object.setOptionsBitmask(Options.CONVERSABLE | Options.INVULNERABLE) + object.setStfFilename('mob/creature_names') + object.setStfName('imperial_recruiter') + + core.mapService.addLocation(object.getPlanet(), '@map_loc_cat_n:imperial', object.getPosition().x, object.getPosition().z, 46, 48, 0) + return diff --git a/scripts/object/mobile/dressed_imperial_officer_m_2.py b/scripts/object/mobile/dressed_imperial_officer_m_2.py index ccad8904..52476091 100644 --- a/scripts/object/mobile/dressed_imperial_officer_m_2.py +++ b/scripts/object/mobile/dressed_imperial_officer_m_2.py @@ -1,4 +1,12 @@ import sys +from resources.datatables import Options def setup(core, object): - return \ No newline at end of file + object.setAttachment('radial_filename', 'object/conversation'); + object.setAttachment('conversationFile','imp_recruiter') + object.setOptionsBitmask(Options.CONVERSABLE | Options.INVULNERABLE) + object.setStfFilename('mob/creature_names') + object.setStfName('imperial_recruiter') + + core.mapService.addLocation(object.getPlanet(), '@map_loc_cat_n:imperial', object.getPosition().x, object.getPosition().z, 46, 48, 0) + return diff --git a/scripts/object/mobile/dressed_imperial_officer_m_3.py b/scripts/object/mobile/dressed_imperial_officer_m_3.py index ccad8904..52476091 100644 --- a/scripts/object/mobile/dressed_imperial_officer_m_3.py +++ b/scripts/object/mobile/dressed_imperial_officer_m_3.py @@ -1,4 +1,12 @@ import sys +from resources.datatables import Options def setup(core, object): - return \ No newline at end of file + object.setAttachment('radial_filename', 'object/conversation'); + object.setAttachment('conversationFile','imp_recruiter') + object.setOptionsBitmask(Options.CONVERSABLE | Options.INVULNERABLE) + object.setStfFilename('mob/creature_names') + object.setStfName('imperial_recruiter') + + core.mapService.addLocation(object.getPlanet(), '@map_loc_cat_n:imperial', object.getPosition().x, object.getPosition().z, 46, 48, 0) + return diff --git a/scripts/object/mobile/dressed_imperial_officer_m_4.py b/scripts/object/mobile/dressed_imperial_officer_m_4.py index ccad8904..52476091 100644 --- a/scripts/object/mobile/dressed_imperial_officer_m_4.py +++ b/scripts/object/mobile/dressed_imperial_officer_m_4.py @@ -1,4 +1,12 @@ import sys +from resources.datatables import Options def setup(core, object): - return \ No newline at end of file + object.setAttachment('radial_filename', 'object/conversation'); + object.setAttachment('conversationFile','imp_recruiter') + object.setOptionsBitmask(Options.CONVERSABLE | Options.INVULNERABLE) + object.setStfFilename('mob/creature_names') + object.setStfName('imperial_recruiter') + + core.mapService.addLocation(object.getPlanet(), '@map_loc_cat_n:imperial', object.getPosition().x, object.getPosition().z, 46, 48, 0) + return diff --git a/scripts/object/mobile/dressed_imperial_officer_m_5.py b/scripts/object/mobile/dressed_imperial_officer_m_5.py index ccad8904..52476091 100644 --- a/scripts/object/mobile/dressed_imperial_officer_m_5.py +++ b/scripts/object/mobile/dressed_imperial_officer_m_5.py @@ -1,4 +1,12 @@ import sys +from resources.datatables import Options def setup(core, object): - return \ No newline at end of file + object.setAttachment('radial_filename', 'object/conversation'); + object.setAttachment('conversationFile','imp_recruiter') + object.setOptionsBitmask(Options.CONVERSABLE | Options.INVULNERABLE) + object.setStfFilename('mob/creature_names') + object.setStfName('imperial_recruiter') + + core.mapService.addLocation(object.getPlanet(), '@map_loc_cat_n:imperial', object.getPosition().x, object.getPosition().z, 46, 48, 0) + return diff --git a/scripts/object/mobile/dressed_imperial_officer_m_6.py b/scripts/object/mobile/dressed_imperial_officer_m_6.py index ccad8904..220d9fd8 100644 --- a/scripts/object/mobile/dressed_imperial_officer_m_6.py +++ b/scripts/object/mobile/dressed_imperial_officer_m_6.py @@ -1,4 +1,12 @@ import sys +from resources.datatables import Options def setup(core, object): - return \ No newline at end of file + object.setAttachment('radial_filename', 'object/conversation'); + object.setAttachment('conversationFile','imp_recruiter') + object.setOptionsBitmask(Options.CONVERSABLE | Options.INVULNERABLE) + object.setStfFilename('mob/creature_names') + object.setStfName('imperial_recruiter') + + core.mapService.addLocation(object.getPlanet(), '@map_loc_cat_n:imperial', object.getPosition().x, object.getPosition().z, 46, 48, 0) + return diff --git a/scripts/object/mobile/dressed_mayor_mikdanyell_guhrantt.py b/scripts/object/mobile/dressed_mayor_mikdanyell_guhrantt.py index ccad8904..e8e3da38 100644 --- a/scripts/object/mobile/dressed_mayor_mikdanyell_guhrantt.py +++ b/scripts/object/mobile/dressed_mayor_mikdanyell_guhrantt.py @@ -1,4 +1,10 @@ import sys +from resources.datatables import Options def setup(core, object): - return \ No newline at end of file + object.setAttachment('radial_filename', 'object/conversation'); + object.setAttachment('conversationFile','mayor_mikdanyel_guhrantt') + object.setOptionsBitmask(Options.CONVERSABLE | Options.INVULNERABLE) + object.setStfFilename('mob/creature_names') + object.setStfName('mos_eisley_mayor') + return diff --git a/scripts/object/mobile/dressed_novice_force_mystic.py b/scripts/object/mobile/dressed_novice_force_mystic.py index ccad8904..a96bd6e6 100644 --- a/scripts/object/mobile/dressed_novice_force_mystic.py +++ b/scripts/object/mobile/dressed_novice_force_mystic.py @@ -1,4 +1,32 @@ import sys def setup(core, object): - return \ No newline at end of file + + lootPoolNames_1 = ['Junk'] + lootPoolChances_1 = [100] + lootGroupChance_1 = 65 + object.addToLootGroups(lootPoolNames_1,lootPoolChances_1,lootGroupChance_1) + + lootPoolNames_2 = ['jedi_relic_1'] + lootPoolChances_2 = [100] + lootGroupChance_2 = 85 + object.addToLootGroups(lootPoolNames_2,lootPoolChances_2,lootGroupChance_2) + + lootPoolNames_3 = ['colorcrystals'] + lootPoolChances_3 = [100] + lootGroupChance_3 = 12 + object.addToLootGroups(lootPoolNames_3,lootPoolChances_3,lootGroupChance_3) + + lootPoolNames_4 = ['armor_various','random_loot_rifles'] + lootPoolChances_4 = [80,20] + lootGroupChance_4 = 35 + object.addToLootGroups(lootPoolNames_4,lootPoolChances_4,lootGroupChance_4) + + lootPoolNames_5 = ['jediholocrons'] + lootPoolChances_5 = [100] + lootGroupChance_5 = 1 + object.addToLootGroups(lootPoolNames_5,lootPoolChances_5,lootGroupChance_5) + + + + return \ No newline at end of file diff --git a/scripts/object/mobile/dressed_porcellus.py b/scripts/object/mobile/dressed_porcellus.py index ccad8904..b2884b2c 100644 --- a/scripts/object/mobile/dressed_porcellus.py +++ b/scripts/object/mobile/dressed_porcellus.py @@ -1,4 +1,10 @@ import sys +from resources.datatables import Options def setup(core, object): + #object.setAttachment('radial_filename', 'object/conversation'); + #object.setAttachment('conversationFile','junk_dealer') + object.setOptionsBitmask(Options.CONVERSABLE | Options.INVULNERABLE) + object.setStfFilename('mob/creature_names') + object.setStfName('porcellus') return \ No newline at end of file diff --git a/scripts/object/mobile/dressed_rebel_recruiter_human_female_01.py b/scripts/object/mobile/dressed_rebel_recruiter_human_female_01.py index ccad8904..d4d1de24 100644 --- a/scripts/object/mobile/dressed_rebel_recruiter_human_female_01.py +++ b/scripts/object/mobile/dressed_rebel_recruiter_human_female_01.py @@ -1,4 +1,12 @@ import sys +from resources.datatables import Options def setup(core, object): - return \ No newline at end of file + object.setAttachment('radial_filename', 'object/conversation'); + object.setAttachment('conversationFile','reb_recruiter') + object.setOptionsBitmask(Options.CONVERSABLE | Options.INVULNERABLE) + object.setStfFilename('mob/creature_names') + object.setStfName('rebel_recruiter') + + core.mapService.addLocation(object.getPlanet(), '@map_loc_cat_n:rebel', object.getPosition().x, object.getPosition().z, 45, 47, 0) + return diff --git a/scripts/object/mobile/dressed_rebel_recruiter_human_female_02.py b/scripts/object/mobile/dressed_rebel_recruiter_human_female_02.py index ccad8904..4f948254 100644 --- a/scripts/object/mobile/dressed_rebel_recruiter_human_female_02.py +++ b/scripts/object/mobile/dressed_rebel_recruiter_human_female_02.py @@ -1,4 +1,13 @@ import sys +from resources.datatables import Options def setup(core, object): - return \ No newline at end of file + object.setAttachment('radial_filename', 'object/conversation'); + object.setAttachment('conversationFile','reb_recruiter') + object.setOptionsBitmask(Options.CONVERSABLE | Options.INVULNERABLE) + object.setStfFilename('mob/creature_names') + object.setStfName('rebel_recruiter') + + core.mapService.addLocation(object.getPlanet(), '@map_loc_cat_n:rebel', object.getPosition().x, object.getPosition().z, 45, 47, 0) + + return diff --git a/scripts/object/mobile/dressed_rebel_recruiter_moncal_male_01.py b/scripts/object/mobile/dressed_rebel_recruiter_moncal_male_01.py index ccad8904..efad85db 100644 --- a/scripts/object/mobile/dressed_rebel_recruiter_moncal_male_01.py +++ b/scripts/object/mobile/dressed_rebel_recruiter_moncal_male_01.py @@ -1,4 +1,13 @@ import sys +from resources.datatables import Options def setup(core, object): - return \ No newline at end of file + object.setAttachment('radial_filename', 'object/conversation'); + object.setAttachment('conversationFile','reb_recruiter') + object.setOptionsBitmask(Options.CONVERSABLE | Options.INVULNERABLE) + object.setStfFilename('mob/creature_names') + object.setStfName('rebel_recruiter') + + core.mapService.addLocation(object.getPlanet(), '@map_loc_cat_n:rebel', object.getPosition().x, object.getPosition().z, 45, 47, 0) + + return diff --git a/scripts/object/mobile/dressed_rebel_recruiter_twilek_female_01.py b/scripts/object/mobile/dressed_rebel_recruiter_twilek_female_01.py index ccad8904..25c143c9 100644 --- a/scripts/object/mobile/dressed_rebel_recruiter_twilek_female_01.py +++ b/scripts/object/mobile/dressed_rebel_recruiter_twilek_female_01.py @@ -1,4 +1,13 @@ import sys +from resources.datatables import Options def setup(core, object): - return \ No newline at end of file + object.setAttachment('radial_filename', 'object/conversation'); + object.setAttachment('conversationFile','reb_recruiter') + object.setOptionsBitmask(Options.CONVERSABLE | Options.INVULNERABLE) + object.setStfFilename('mob/creature_names') + object.setStfName('rebel_recruiter') + + core.mapService.addLocation(object.getPlanet(), '@map_loc_cat_n:rebel', object.getPosition().x, object.getPosition().z, 45, 47, 0) + + return diff --git a/scripts/object/mobile/dressed_scout_trooper_black_black.py b/scripts/object/mobile/dressed_scout_trooper_black_black.py index ccad8904..7334127c 100644 --- a/scripts/object/mobile/dressed_scout_trooper_black_black.py +++ b/scripts/object/mobile/dressed_scout_trooper_black_black.py @@ -1,4 +1,10 @@ import sys def setup(core, object): - return \ No newline at end of file + + lootPoolNames_1 = ['Junk'] + lootPoolChances_1 = [100] + lootGroupChance_1 = 90 + object.addToLootGroups(lootPoolNames_1,lootPoolChances_1,lootGroupChance_1) + + return diff --git a/scripts/object/mobile/dressed_stormtrooper_m.py b/scripts/object/mobile/dressed_stormtrooper_m.py index ccad8904..e972026a 100644 --- a/scripts/object/mobile/dressed_stormtrooper_m.py +++ b/scripts/object/mobile/dressed_stormtrooper_m.py @@ -1,4 +1,26 @@ import sys def setup(core, object): - return \ No newline at end of file + + lootPoolNames_1 = ['Junk'] + lootPoolChances_1 = [100] + lootGroupChance_1 = 90 + object.addToLootGroups(lootPoolNames_1,lootPoolChances_1,lootGroupChance_1) + + lootPoolNames_2 = ['armor_various','random_loot_rifles'] + lootPoolChances_2 = [99,1] + lootGroupChance_2 = 100 + object.addToLootGroups(lootPoolNames_2,lootPoolChances_2,lootGroupChance_2) + + lootPoolNames_3 = ['Colorcrystals'] + lootPoolChances_3 = [100] + lootGroupChance_3 = 6 + object.addToLootGroups(lootPoolNames_3,lootPoolChances_3,lootGroupChance_3) + + # just to test + lootPoolNames_4 = ['random_stat_jewelry'] + lootPoolChances_4 = [100] + lootGroupChance_4 = 10 + object.addToLootGroups(lootPoolNames_4,lootPoolChances_4,lootGroupChance_4) + + return \ No newline at end of file diff --git a/scripts/object/mobile/dressed_tatooine_opening_byxle.py b/scripts/object/mobile/dressed_tatooine_opening_byxle.py index ccad8904..a9115a52 100644 --- a/scripts/object/mobile/dressed_tatooine_opening_byxle.py +++ b/scripts/object/mobile/dressed_tatooine_opening_byxle.py @@ -1,4 +1,10 @@ import sys +from resources.datatables import Options def setup(core, object): - return \ No newline at end of file + object.setAttachment('radial_filename', 'object/conversation'); + object.setAttachment('conversationFile','byxle') + object.setOptionsBitmask(Options.CONVERSABLE | Options.INVULNERABLE) + object.setStfFilename('mob/creature_names') + object.setStfName('tatooine_opening_byxle') + return diff --git a/scripts/object/mobile/dressed_tatooine_opening_dunir.py b/scripts/object/mobile/dressed_tatooine_opening_dunir.py index ccad8904..f9d28082 100644 --- a/scripts/object/mobile/dressed_tatooine_opening_dunir.py +++ b/scripts/object/mobile/dressed_tatooine_opening_dunir.py @@ -1,4 +1,10 @@ import sys +from resources.datatables import Options def setup(core, object): - return \ No newline at end of file + object.setAttachment('radial_filename', 'object/conversation'); + object.setAttachment('conversationFile','durni') + object.setOptionsBitmask(Options.CONVERSABLE | Options.INVULNERABLE) + object.setStfFilename('mob/creature_names') + object.setStfName('tatooine_opening_dunir') + return diff --git a/scripts/object/mobile/dressed_tatooine_opening_niko.py b/scripts/object/mobile/dressed_tatooine_opening_niko.py index ccad8904..bb8c0ab4 100644 --- a/scripts/object/mobile/dressed_tatooine_opening_niko.py +++ b/scripts/object/mobile/dressed_tatooine_opening_niko.py @@ -1,4 +1,10 @@ import sys +from resources.datatables import Options def setup(core, object): - return \ No newline at end of file + object.setAttachment('radial_filename', 'object/conversation'); + object.setAttachment('conversationFile','niko') + object.setOptionsBitmask(Options.CONVERSABLE | Options.INVULNERABLE) + object.setStfFilename('mob/creature_names') + object.setStfName('tatooine_opening_niko') + return diff --git a/scripts/object/mobile/dressed_tatooine_opening_reimos.py b/scripts/object/mobile/dressed_tatooine_opening_reimos.py index ccad8904..2b2075d4 100644 --- a/scripts/object/mobile/dressed_tatooine_opening_reimos.py +++ b/scripts/object/mobile/dressed_tatooine_opening_reimos.py @@ -1,4 +1,10 @@ import sys +from resources.datatables import Options def setup(core, object): - return \ No newline at end of file + object.setAttachment('radial_filename', 'object/conversation'); + object.setAttachment('conversationFile','reimos') + object.setOptionsBitmask(Options.CONVERSABLE | Options.INVULNERABLE) + object.setStfFilename('mob/creature_names') + object.setStfName('tatooine_opening_reimos') + return diff --git a/scripts/object/mobile/dressed_tatooine_opening_toggi.py b/scripts/object/mobile/dressed_tatooine_opening_toggi.py index ccad8904..ee3d1ccf 100644 --- a/scripts/object/mobile/dressed_tatooine_opening_toggi.py +++ b/scripts/object/mobile/dressed_tatooine_opening_toggi.py @@ -1,4 +1,10 @@ import sys +from resources.datatables import Options def setup(core, object): - return \ No newline at end of file + object.setAttachment('radial_filename', 'object/conversation'); + object.setAttachment('conversationFile','toggi') + object.setOptionsBitmask(Options.CONVERSABLE | Options.INVULNERABLE) + object.setStfFilename('mob/creature_names') + object.setStfName('tatooine_opening_toggi') + return diff --git a/scripts/object/mobile/dressed_untrained_wielder_of_the_darkside.py b/scripts/object/mobile/dressed_untrained_wielder_of_the_darkside.py index ccad8904..c7237ff3 100644 --- a/scripts/object/mobile/dressed_untrained_wielder_of_the_darkside.py +++ b/scripts/object/mobile/dressed_untrained_wielder_of_the_darkside.py @@ -1,4 +1,32 @@ import sys def setup(core, object): - return \ No newline at end of file + + lootPoolNames_1 = ['Junk'] + lootPoolChances_1 = [100] + lootGroupChance_1 = 65 + object.addToLootGroups(lootPoolNames_1,lootPoolChances_1,lootGroupChance_1) + + lootPoolNames_2 = ['jedi_relic_1'] + lootPoolChances_2 = [100] + lootGroupChance_2 = 85 + object.addToLootGroups(lootPoolNames_2,lootPoolChances_2,lootGroupChance_2) + + lootPoolNames_3 = ['colorcrystals'] + lootPoolChances_3 = [100] + lootGroupChance_3 = 12 + object.addToLootGroups(lootPoolNames_3,lootPoolChances_3,lootGroupChance_3) + + lootPoolNames_4 = ['armor_various','random_loot_rifles'] + lootPoolChances_4 = [80,20] + lootGroupChance_4 = 35 + object.addToLootGroups(lootPoolNames_4,lootPoolChances_4,lootGroupChance_4) + + lootPoolNames_5 = ['sithholocrons'] + lootPoolChances_5 = [100] + lootGroupChance_5 = 1 + object.addToLootGroups(lootPoolNames_5,lootPoolChances_5,lootGroupChance_5) + + + + return \ No newline at end of file diff --git a/scripts/object/mobile/droopy_mccool.py b/scripts/object/mobile/droopy_mccool.py index ccad8904..2574a1f6 100644 --- a/scripts/object/mobile/droopy_mccool.py +++ b/scripts/object/mobile/droopy_mccool.py @@ -1,4 +1,10 @@ import sys +from resources.datatables import Options def setup(core, object): + #object.setAttachment('radial_filename', 'object/conversation'); + #object.setAttachment('conversationFile','junk_dealer') + object.setOptionsBitmask(Options.CONVERSABLE | Options.INVULNERABLE) + object.setStfFilename('mob/creature_names') + object.setStfName('droopy_mccool') return \ No newline at end of file diff --git a/scripts/object/mobile/ephant_mon.py b/scripts/object/mobile/ephant_mon.py index ccad8904..99f49296 100644 --- a/scripts/object/mobile/ephant_mon.py +++ b/scripts/object/mobile/ephant_mon.py @@ -1,4 +1,11 @@ import sys +from resources.datatables import Options def setup(core, object): - return \ No newline at end of file + #object.setAttachment('radial_filename', 'object/conversation'); + #object.setAttachment('conversationFile','junk_dealer') + object.setOptionsBitmask(Options.CONVERSABLE | Options.INVULNERABLE | Options.QUEST) + object.setStfFilename('mob/creature_names') + object.setStfName('ephant_mon') + return + \ No newline at end of file diff --git a/scripts/object/mobile/ev_9d9.py b/scripts/object/mobile/ev_9d9.py index ccad8904..28c1c020 100644 --- a/scripts/object/mobile/ev_9d9.py +++ b/scripts/object/mobile/ev_9d9.py @@ -1,4 +1,10 @@ import sys +from resources.datatables import Options def setup(core, object): + #object.setAttachment('radial_filename', 'object/conversation'); + #object.setAttachment('conversationFile','junk_dealer') + object.setOptionsBitmask(Options.CONVERSABLE | Options.INVULNERABLE) + object.setStfFilename('mob/creature_names') + object.setStfName('ev_9d9') return \ No newline at end of file diff --git a/scripts/object/mobile/han_solo.py b/scripts/object/mobile/han_solo.py index ccad8904..8608e0f6 100644 --- a/scripts/object/mobile/han_solo.py +++ b/scripts/object/mobile/han_solo.py @@ -1,4 +1,10 @@ import sys +from resources.datatables import Options def setup(core, object): + #object.setAttachment('radial_filename', 'object/conversation'); + #object.setAttachment('conversationFile','junk_dealer') + object.setOptionsBitmask(Options.CONVERSABLE | Options.INVULNERABLE) + object.setStfFilename('mob/creature_names') + object.setStfName('han_solo') return \ No newline at end of file diff --git a/scripts/object/mobile/heroic_tusken_kav_golder.py b/scripts/object/mobile/heroic_tusken_kav_golder.py index ccad8904..9fad2d18 100644 --- a/scripts/object/mobile/heroic_tusken_kav_golder.py +++ b/scripts/object/mobile/heroic_tusken_kav_golder.py @@ -1,4 +1,10 @@ import sys +from resources.datatables import Options def setup(core, object): + #object.setAttachment('radial_filename', 'object/conversation'); + #object.setAttachment('conversationFile','junk_dealer') + object.setOptionsBitmask(Options.CONVERSABLE | Options.INVULNERABLE) + object.setStfFilename('mob/creature_names') + object.setStfName('heroic_tusken_kav_goldor') return \ No newline at end of file diff --git a/scripts/object/mobile/hirce_tharnam.py b/scripts/object/mobile/hirce_tharnam.py index ccad8904..952e7294 100644 --- a/scripts/object/mobile/hirce_tharnam.py +++ b/scripts/object/mobile/hirce_tharnam.py @@ -1,4 +1,10 @@ import sys +from resources.datatables import Options def setup(core, object): + #object.setAttachment('radial_filename', 'object/conversation'); + #object.setAttachment('conversationFile','junk_dealer') + object.setOptionsBitmask(Options.CONVERSABLE | Options.INVULNERABLE) + object.setStfFilename('mob/creature_names') + object.setStfName('heroic_tusken_hirce_tharnam') return \ No newline at end of file diff --git a/scripts/object/mobile/jabba_the_hutt.py b/scripts/object/mobile/jabba_the_hutt.py index ccad8904..bc2e1050 100644 --- a/scripts/object/mobile/jabba_the_hutt.py +++ b/scripts/object/mobile/jabba_the_hutt.py @@ -1,4 +1,10 @@ import sys +from resources.datatables import Options def setup(core, object): + #object.setAttachment('radial_filename', 'object/conversation'); + #object.setAttachment('conversationFile','junk_dealer') + object.setOptionsBitmask(Options.CONVERSABLE | Options.INVULNERABLE) + object.setStfFilename('mob/creature_names') + object.setStfName('jabba_the_hutt') return \ No newline at end of file diff --git a/scripts/object/mobile/javran_mu.py b/scripts/object/mobile/javran_mu.py index ccad8904..d2f6080d 100644 --- a/scripts/object/mobile/javran_mu.py +++ b/scripts/object/mobile/javran_mu.py @@ -1,4 +1,10 @@ import sys +from resources.datatables import Options def setup(core, object): + #object.setAttachment('radial_filename', 'object/conversation'); + #object.setAttachment('conversationFile','junk_dealer') + object.setOptionsBitmask(Options.CONVERSABLE | Options.INVULNERABLE) + object.setStfFilename('mob/creature_names') + object.setStfName('heroic_tusken_javran_mu') return \ No newline at end of file diff --git a/scripts/object/mobile/junk_dealer_f_01.py b/scripts/object/mobile/junk_dealer_f_01.py index ccad8904..0864b43c 100644 --- a/scripts/object/mobile/junk_dealer_f_01.py +++ b/scripts/object/mobile/junk_dealer_f_01.py @@ -1,4 +1,12 @@ import sys +from resources.datatables import Options def setup(core, object): + object.setAttachment('radial_filename', 'object/conversation'); + object.setAttachment('conversationFile','junk_dealer') + object.setOptionsBitmask(Options.CONVERSABLE | Options.INVULNERABLE) + object.setStfFilename('mob/creature_names') + object.setStfName('junk_dealer') + + core.mapService.addLocation(object.getPlanet(), '@map_loc_cat_n:junkshop', object.getPosition().x, object.getPosition().z, 26, 81, 0) return \ No newline at end of file diff --git a/scripts/object/mobile/junk_dealer_f_02.py b/scripts/object/mobile/junk_dealer_f_02.py index ccad8904..f366e0a9 100644 --- a/scripts/object/mobile/junk_dealer_f_02.py +++ b/scripts/object/mobile/junk_dealer_f_02.py @@ -1,4 +1,12 @@ import sys +from resources.datatables import Options def setup(core, object): + object.setAttachment('radial_filename', 'object/conversation'); + object.setAttachment('conversationFile','junk_dealer') + object.setOptionsBitmask(Options.CONVERSABLE | Options.INVULNERABLE) + object.setStfFilename('mob/creature_names') + object.setStfName('junk_dealer_smuggler') + + core.mapService.addLocation(object.getPlanet(), '@map_loc_cat_n:junkshop', object.getPosition().x, object.getPosition().z, 26, 81, 0) return \ No newline at end of file diff --git a/scripts/object/mobile/junk_dealer_f_03.py b/scripts/object/mobile/junk_dealer_f_03.py index ccad8904..8de1dd20 100644 --- a/scripts/object/mobile/junk_dealer_f_03.py +++ b/scripts/object/mobile/junk_dealer_f_03.py @@ -1,4 +1,12 @@ import sys +from resources.datatables import Options def setup(core, object): + object.setAttachment('radial_filename', 'object/conversation'); + object.setAttachment('conversationFile','junk_dealer') + object.setOptionsBitmask(Options.CONVERSABLE | Options.INVULNERABLE) + object.setStfFilename('mob/creature_names') + object.setStfName('junk_dealer_special') + + core.mapService.addLocation(object.getPlanet(), '@map_loc_cat_n:junkshop', object.getPosition().x, object.getPosition().z, 26, 81, 0) return \ No newline at end of file diff --git a/scripts/object/mobile/junk_dealer_m_01.py b/scripts/object/mobile/junk_dealer_m_01.py index ccad8904..0864b43c 100644 --- a/scripts/object/mobile/junk_dealer_m_01.py +++ b/scripts/object/mobile/junk_dealer_m_01.py @@ -1,4 +1,12 @@ import sys +from resources.datatables import Options def setup(core, object): + object.setAttachment('radial_filename', 'object/conversation'); + object.setAttachment('conversationFile','junk_dealer') + object.setOptionsBitmask(Options.CONVERSABLE | Options.INVULNERABLE) + object.setStfFilename('mob/creature_names') + object.setStfName('junk_dealer') + + core.mapService.addLocation(object.getPlanet(), '@map_loc_cat_n:junkshop', object.getPosition().x, object.getPosition().z, 26, 81, 0) return \ No newline at end of file diff --git a/scripts/object/mobile/junk_dealer_m_02.py b/scripts/object/mobile/junk_dealer_m_02.py index ccad8904..f366e0a9 100644 --- a/scripts/object/mobile/junk_dealer_m_02.py +++ b/scripts/object/mobile/junk_dealer_m_02.py @@ -1,4 +1,12 @@ import sys +from resources.datatables import Options def setup(core, object): + object.setAttachment('radial_filename', 'object/conversation'); + object.setAttachment('conversationFile','junk_dealer') + object.setOptionsBitmask(Options.CONVERSABLE | Options.INVULNERABLE) + object.setStfFilename('mob/creature_names') + object.setStfName('junk_dealer_smuggler') + + core.mapService.addLocation(object.getPlanet(), '@map_loc_cat_n:junkshop', object.getPosition().x, object.getPosition().z, 26, 81, 0) return \ No newline at end of file diff --git a/scripts/object/mobile/junk_dealer_m_03.py b/scripts/object/mobile/junk_dealer_m_03.py index ccad8904..8de1dd20 100644 --- a/scripts/object/mobile/junk_dealer_m_03.py +++ b/scripts/object/mobile/junk_dealer_m_03.py @@ -1,4 +1,12 @@ import sys +from resources.datatables import Options def setup(core, object): + object.setAttachment('radial_filename', 'object/conversation'); + object.setAttachment('conversationFile','junk_dealer') + object.setOptionsBitmask(Options.CONVERSABLE | Options.INVULNERABLE) + object.setStfFilename('mob/creature_names') + object.setStfName('junk_dealer_special') + + core.mapService.addLocation(object.getPlanet(), '@map_loc_cat_n:junkshop', object.getPosition().x, object.getPosition().z, 26, 81, 0) return \ No newline at end of file diff --git a/scripts/object/mobile/junk_dender.py b/scripts/object/mobile/junk_dender.py index ccad8904..9ed1eded 100644 --- a/scripts/object/mobile/junk_dender.py +++ b/scripts/object/mobile/junk_dender.py @@ -1,4 +1,10 @@ import sys +from resources.datatables import Options def setup(core, object): + object.setAttachment('radial_filename', 'object/conversation'); + object.setAttachment('conversationFile','junk_dealer') + object.setOptionsBitmask(Options.CONVERSABLE | Options.INVULNERABLE) + object.setStfFilename('mob/creature_names') + object.setStfName('junk_dealer_special') return \ No newline at end of file diff --git a/scripts/object/mobile/junk_lila.py b/scripts/object/mobile/junk_lila.py index ccad8904..9ed1eded 100644 --- a/scripts/object/mobile/junk_lila.py +++ b/scripts/object/mobile/junk_lila.py @@ -1,4 +1,10 @@ import sys +from resources.datatables import Options def setup(core, object): + object.setAttachment('radial_filename', 'object/conversation'); + object.setAttachment('conversationFile','junk_dealer') + object.setOptionsBitmask(Options.CONVERSABLE | Options.INVULNERABLE) + object.setStfFilename('mob/creature_names') + object.setStfName('junk_dealer_special') return \ No newline at end of file diff --git a/scripts/object/mobile/junk_malik.py b/scripts/object/mobile/junk_malik.py index ccad8904..9ed1eded 100644 --- a/scripts/object/mobile/junk_malik.py +++ b/scripts/object/mobile/junk_malik.py @@ -1,4 +1,10 @@ import sys +from resources.datatables import Options def setup(core, object): + object.setAttachment('radial_filename', 'object/conversation'); + object.setAttachment('conversationFile','junk_dealer') + object.setOptionsBitmask(Options.CONVERSABLE | Options.INVULNERABLE) + object.setStfFilename('mob/creature_names') + object.setStfName('junk_dealer_special') return \ No newline at end of file diff --git a/scripts/object/mobile/junk_nado.py b/scripts/object/mobile/junk_nado.py index ccad8904..9ed1eded 100644 --- a/scripts/object/mobile/junk_nado.py +++ b/scripts/object/mobile/junk_nado.py @@ -1,4 +1,10 @@ import sys +from resources.datatables import Options def setup(core, object): + object.setAttachment('radial_filename', 'object/conversation'); + object.setAttachment('conversationFile','junk_dealer') + object.setOptionsBitmask(Options.CONVERSABLE | Options.INVULNERABLE) + object.setStfFilename('mob/creature_names') + object.setStfName('junk_dealer_special') return \ No newline at end of file diff --git a/scripts/object/mobile/junk_nathan.py b/scripts/object/mobile/junk_nathan.py index ccad8904..9ed1eded 100644 --- a/scripts/object/mobile/junk_nathan.py +++ b/scripts/object/mobile/junk_nathan.py @@ -1,4 +1,10 @@ import sys +from resources.datatables import Options def setup(core, object): + object.setAttachment('radial_filename', 'object/conversation'); + object.setAttachment('conversationFile','junk_dealer') + object.setOptionsBitmask(Options.CONVERSABLE | Options.INVULNERABLE) + object.setStfFilename('mob/creature_names') + object.setStfName('junk_dealer_special') return \ No newline at end of file diff --git a/scripts/object/mobile/junk_ollobo.py b/scripts/object/mobile/junk_ollobo.py index ccad8904..9ed1eded 100644 --- a/scripts/object/mobile/junk_ollobo.py +++ b/scripts/object/mobile/junk_ollobo.py @@ -1,4 +1,10 @@ import sys +from resources.datatables import Options def setup(core, object): + object.setAttachment('radial_filename', 'object/conversation'); + object.setAttachment('conversationFile','junk_dealer') + object.setOptionsBitmask(Options.CONVERSABLE | Options.INVULNERABLE) + object.setStfFilename('mob/creature_names') + object.setStfName('junk_dealer_special') return \ No newline at end of file diff --git a/scripts/object/mobile/junk_quich.py b/scripts/object/mobile/junk_quich.py index ccad8904..9ed1eded 100644 --- a/scripts/object/mobile/junk_quich.py +++ b/scripts/object/mobile/junk_quich.py @@ -1,4 +1,10 @@ import sys +from resources.datatables import Options def setup(core, object): + object.setAttachment('radial_filename', 'object/conversation'); + object.setAttachment('conversationFile','junk_dealer') + object.setOptionsBitmask(Options.CONVERSABLE | Options.INVULNERABLE) + object.setStfFilename('mob/creature_names') + object.setStfName('junk_dealer_special') return \ No newline at end of file diff --git a/scripts/object/mobile/junk_reggi.py b/scripts/object/mobile/junk_reggi.py index ccad8904..9ed1eded 100644 --- a/scripts/object/mobile/junk_reggi.py +++ b/scripts/object/mobile/junk_reggi.py @@ -1,4 +1,10 @@ import sys +from resources.datatables import Options def setup(core, object): + object.setAttachment('radial_filename', 'object/conversation'); + object.setAttachment('conversationFile','junk_dealer') + object.setOptionsBitmask(Options.CONVERSABLE | Options.INVULNERABLE) + object.setStfFilename('mob/creature_names') + object.setStfName('junk_dealer_special') return \ No newline at end of file diff --git a/scripts/object/mobile/junk_sheani.py b/scripts/object/mobile/junk_sheani.py index ccad8904..9ed1eded 100644 --- a/scripts/object/mobile/junk_sheani.py +++ b/scripts/object/mobile/junk_sheani.py @@ -1,4 +1,10 @@ import sys +from resources.datatables import Options def setup(core, object): + object.setAttachment('radial_filename', 'object/conversation'); + object.setAttachment('conversationFile','junk_dealer') + object.setOptionsBitmask(Options.CONVERSABLE | Options.INVULNERABLE) + object.setStfFilename('mob/creature_names') + object.setStfName('junk_dealer_special') return \ No newline at end of file diff --git a/scripts/object/mobile/junk_sneg.py b/scripts/object/mobile/junk_sneg.py index ccad8904..9ed1eded 100644 --- a/scripts/object/mobile/junk_sneg.py +++ b/scripts/object/mobile/junk_sneg.py @@ -1,4 +1,10 @@ import sys +from resources.datatables import Options def setup(core, object): + object.setAttachment('radial_filename', 'object/conversation'); + object.setAttachment('conversationFile','junk_dealer') + object.setOptionsBitmask(Options.CONVERSABLE | Options.INVULNERABLE) + object.setStfFilename('mob/creature_names') + object.setStfName('junk_dealer_special') return \ No newline at end of file diff --git a/scripts/object/mobile/krayt_dragon.py b/scripts/object/mobile/krayt_dragon.py index ccad8904..e023f206 100644 --- a/scripts/object/mobile/krayt_dragon.py +++ b/scripts/object/mobile/krayt_dragon.py @@ -1,4 +1,15 @@ import sys def setup(core, object): - return \ No newline at end of file + + lootPoolNames_1 = ['Junk'] + lootPoolChances_1 = [100] + lootGroupChance_1 = 65 + object.addToLootGroups(lootPoolNames_1,lootPoolChances_1,lootGroupChance_1) + + lootPoolNames_2 = ['kraytpearl_lowq'] + lootPoolChances_2 = [100] + lootGroupChance_2 = 85 + object.addToLootGroups(lootPoolNames_2,lootPoolChances_2,lootGroupChance_2) + + return \ No newline at end of file diff --git a/scripts/object/mobile/lifeday_saun_dann.py b/scripts/object/mobile/lifeday_saun_dann.py index ccad8904..1b75a652 100644 --- a/scripts/object/mobile/lifeday_saun_dann.py +++ b/scripts/object/mobile/lifeday_saun_dann.py @@ -1,4 +1,6 @@ import sys def setup(core, object): + object.setCustomName('Suan Dann') + #object.setCurrentAnimation('appearance/animation/all_b_dnc_bowie_loop.ans') return \ No newline at end of file diff --git a/scripts/object/mobile/macy_malo.py b/scripts/object/mobile/macy_malo.py index ccad8904..a59ed409 100644 --- a/scripts/object/mobile/macy_malo.py +++ b/scripts/object/mobile/macy_malo.py @@ -1,4 +1,10 @@ import sys +from resources.datatables import Options def setup(core, object): + #object.setAttachment('radial_filename', 'object/conversation'); + #object.setAttachment('conversationFile','junk_dealer') + object.setOptionsBitmask(Options.CONVERSABLE | Options.INVULNERABLE) + object.setStfFilename('mob/creature_names') + object.setStfName('heroic_tusken_macy_malo') return \ No newline at end of file diff --git a/scripts/object/mobile/malakili.py b/scripts/object/mobile/malakili.py index ccad8904..8a73a9fe 100644 --- a/scripts/object/mobile/malakili.py +++ b/scripts/object/mobile/malakili.py @@ -1,4 +1,10 @@ import sys +from resources.datatables import Options def setup(core, object): + #object.setAttachment('radial_filename', 'object/conversation'); + #object.setAttachment('conversationFile','junk_dealer') + object.setOptionsBitmask(Options.CONVERSABLE | Options.INVULNERABLE) + object.setStfFilename('mob/creature_names') + object.setStfName('malakili') return \ No newline at end of file diff --git a/scripts/object/mobile/max_rebo.py b/scripts/object/mobile/max_rebo.py index ccad8904..697ffb20 100644 --- a/scripts/object/mobile/max_rebo.py +++ b/scripts/object/mobile/max_rebo.py @@ -1,4 +1,10 @@ import sys +from resources.datatables import Options def setup(core, object): + #object.setAttachment('radial_filename', 'object/conversation'); + #object.setAttachment('conversationFile','junk_dealer') + object.setOptionsBitmask(Options.CONVERSABLE | Options.INVULNERABLE) + object.setStfFilename('mob/creature_names') + object.setStfName('max_rebo') return \ No newline at end of file diff --git a/scripts/object/mobile/oola.py b/scripts/object/mobile/oola.py index ccad8904..6e18f435 100644 --- a/scripts/object/mobile/oola.py +++ b/scripts/object/mobile/oola.py @@ -1,4 +1,10 @@ import sys +from resources.datatables import Options def setup(core, object): + #object.setAttachment('radial_filename', 'object/conversation'); + #object.setAttachment('conversationFile','junk_dealer') + object.setOptionsBitmask(Options.CONVERSABLE | Options.INVULNERABLE) + object.setStfFilename('mob/creature_names') + object.setStfName('oola') return \ No newline at end of file diff --git a/scripts/object/mobile/outbreak_junk_dealer_f_01.py b/scripts/object/mobile/outbreak_junk_dealer_f_01.py index ccad8904..8d5252a1 100644 --- a/scripts/object/mobile/outbreak_junk_dealer_f_01.py +++ b/scripts/object/mobile/outbreak_junk_dealer_f_01.py @@ -1,4 +1,10 @@ import sys +from resources.datatables import Options def setup(core, object): + object.setAttachment('radial_filename', 'object/conversation'); + object.setAttachment('conversationFile','junk_dealer') + object.setOptionsBitmask(Options.CONVERSABLE | Options.INVULNERABLE) + object.setStfFilename('mob/creature_names') + object.setStfName('outbreak_junk_dealer') return \ No newline at end of file diff --git a/scripts/object/mobile/outbreak_junk_dealer_f_02.py b/scripts/object/mobile/outbreak_junk_dealer_f_02.py index ccad8904..8d5252a1 100644 --- a/scripts/object/mobile/outbreak_junk_dealer_f_02.py +++ b/scripts/object/mobile/outbreak_junk_dealer_f_02.py @@ -1,4 +1,10 @@ import sys +from resources.datatables import Options def setup(core, object): + object.setAttachment('radial_filename', 'object/conversation'); + object.setAttachment('conversationFile','junk_dealer') + object.setOptionsBitmask(Options.CONVERSABLE | Options.INVULNERABLE) + object.setStfFilename('mob/creature_names') + object.setStfName('outbreak_junk_dealer') return \ No newline at end of file diff --git a/scripts/object/mobile/outbreak_junk_dealer_m_01.py b/scripts/object/mobile/outbreak_junk_dealer_m_01.py index ccad8904..8d5252a1 100644 --- a/scripts/object/mobile/outbreak_junk_dealer_m_01.py +++ b/scripts/object/mobile/outbreak_junk_dealer_m_01.py @@ -1,4 +1,10 @@ import sys +from resources.datatables import Options def setup(core, object): + object.setAttachment('radial_filename', 'object/conversation'); + object.setAttachment('conversationFile','junk_dealer') + object.setOptionsBitmask(Options.CONVERSABLE | Options.INVULNERABLE) + object.setStfFilename('mob/creature_names') + object.setStfName('outbreak_junk_dealer') return \ No newline at end of file diff --git a/scripts/object/mobile/outbreak_junk_dealer_m_02.py b/scripts/object/mobile/outbreak_junk_dealer_m_02.py index ccad8904..8d5252a1 100644 --- a/scripts/object/mobile/outbreak_junk_dealer_m_02.py +++ b/scripts/object/mobile/outbreak_junk_dealer_m_02.py @@ -1,4 +1,10 @@ import sys +from resources.datatables import Options def setup(core, object): + object.setAttachment('radial_filename', 'object/conversation'); + object.setAttachment('conversationFile','junk_dealer') + object.setOptionsBitmask(Options.CONVERSABLE | Options.INVULNERABLE) + object.setStfFilename('mob/creature_names') + object.setStfName('outbreak_junk_dealer') return \ No newline at end of file diff --git a/scripts/object/mobile/outbreak_junk_dealer_m_03.py b/scripts/object/mobile/outbreak_junk_dealer_m_03.py index ccad8904..8d5252a1 100644 --- a/scripts/object/mobile/outbreak_junk_dealer_m_03.py +++ b/scripts/object/mobile/outbreak_junk_dealer_m_03.py @@ -1,4 +1,10 @@ import sys +from resources.datatables import Options def setup(core, object): + object.setAttachment('radial_filename', 'object/conversation'); + object.setAttachment('conversationFile','junk_dealer') + object.setOptionsBitmask(Options.CONVERSABLE | Options.INVULNERABLE) + object.setStfFilename('mob/creature_names') + object.setStfName('outbreak_junk_dealer') return \ No newline at end of file diff --git a/scripts/object/mobile/porcellus.py b/scripts/object/mobile/porcellus.py index ccad8904..b2884b2c 100644 --- a/scripts/object/mobile/porcellus.py +++ b/scripts/object/mobile/porcellus.py @@ -1,4 +1,10 @@ import sys +from resources.datatables import Options def setup(core, object): + #object.setAttachment('radial_filename', 'object/conversation'); + #object.setAttachment('conversationFile','junk_dealer') + object.setOptionsBitmask(Options.CONVERSABLE | Options.INVULNERABLE) + object.setStfFilename('mob/creature_names') + object.setStfName('porcellus') return \ No newline at end of file diff --git a/scripts/object/mobile/rancor.py b/scripts/object/mobile/rancor.py index ccad8904..8d5d1819 100644 --- a/scripts/object/mobile/rancor.py +++ b/scripts/object/mobile/rancor.py @@ -1,4 +1,10 @@ import sys def setup(core, object): + + lootPoolNames_1 = ['Junk'] + lootPoolChances_1 = [100] + lootGroupChance_1 = 90 + object.addToLootGroups(lootPoolNames_1,lootPoolChances_1,lootGroupChance_1) + return \ No newline at end of file diff --git a/scripts/object/mobile/rancor_static.py b/scripts/object/mobile/rancor_static.py index ccad8904..37df700c 100644 --- a/scripts/object/mobile/rancor_static.py +++ b/scripts/object/mobile/rancor_static.py @@ -1,4 +1,10 @@ import sys +from resources.datatables import Options def setup(core, object): + #object.setAttachment('radial_filename', 'object/conversation'); + #object.setAttachment('conversationFile','junk_dealer') + object.setOptionsBitmask(Options.INVULNERABLE) + object.setStfFilename('mob/creature_names') + object.setStfName('jabbas_palace_rancor') return \ No newline at end of file diff --git a/scripts/object/mobile/reelo_baruk.py b/scripts/object/mobile/reelo_baruk.py index ccad8904..b4a616d8 100644 --- a/scripts/object/mobile/reelo_baruk.py +++ b/scripts/object/mobile/reelo_baruk.py @@ -1,4 +1,10 @@ import sys +from resources.datatables import Options def setup(core, object): + #object.setAttachment('radial_filename', 'object/conversation'); + #object.setAttachment('conversationFile','junk_dealer') + object.setOptionsBitmask(Options.CONVERSABLE | Options.INVULNERABLE) + object.setStfFilename('mob/creature_names') + object.setStfName('reelo_baruk') return \ No newline at end of file diff --git a/scripts/object/mobile/respec_seller_f_1.py b/scripts/object/mobile/respec_seller_f_1.py index ccad8904..1af596e0 100644 --- a/scripts/object/mobile/respec_seller_f_1.py +++ b/scripts/object/mobile/respec_seller_f_1.py @@ -1,4 +1,10 @@ import sys +from resources.datatables import Options def setup(core, object): + object.setAttachment('radial_filename', 'object/conversation') + object.setAttachment('conversationFile', 'respec') + object.setOptionsBitmask(Options.CONVERSABLE | Options.INVULNERABLE) + object.setStfFilename('mob/creature_names') + object.setStfName('respec_seller') return \ No newline at end of file diff --git a/scripts/object/mobile/som/must_junk.py b/scripts/object/mobile/som/must_junk.py index ccad8904..d33eab84 100644 --- a/scripts/object/mobile/som/must_junk.py +++ b/scripts/object/mobile/som/must_junk.py @@ -1,4 +1,10 @@ import sys +from resources.datatables import Options def setup(core, object): + object.setAttachment('radial_filename', 'object/conversation'); + object.setAttachment('conversationFile','junk_dealer') + object.setOptionsBitmask(Options.CONVERSABLE | Options.INVULNERABLE) + object.setStfFilename('mob/creature_names') + junkdealer.setStfName('som_mustafarian_junk') return \ No newline at end of file diff --git a/scripts/object/mobile/space_privateer_tier1_tatooine.py b/scripts/object/mobile/space_privateer_tier1_tatooine.py index ccad8904..b0f81354 100644 --- a/scripts/object/mobile/space_privateer_tier1_tatooine.py +++ b/scripts/object/mobile/space_privateer_tier1_tatooine.py @@ -1,4 +1,9 @@ import sys +from resources.datatables import Options def setup(core, object): - return \ No newline at end of file + #object.setAttachment('radial_filename', 'object/conversation'); + #object.setAttachment('conversationFile','imp_recruiter') + object.setOptionsBitmask(Options.INVULNERABLE) + object.setCustomName('Dravis') + return diff --git a/scripts/object/mobile/space_privateer_tier2_shamdon.py b/scripts/object/mobile/space_privateer_tier2_shamdon.py index ccad8904..f30504b0 100644 --- a/scripts/object/mobile/space_privateer_tier2_shamdon.py +++ b/scripts/object/mobile/space_privateer_tier2_shamdon.py @@ -1,4 +1,9 @@ import sys +from resources.datatables import Options def setup(core, object): - return \ No newline at end of file + #object.setAttachment('radial_filename', 'object/conversation'); + #object.setAttachment('conversationFile','imp_recruiter') + object.setOptionsBitmask(Options.INVULNERABLE) + object.setCustomName('Shamdon Kree ') + return diff --git a/scripts/object/mobile/space_rebel_tier1_tatooine_socuna.py b/scripts/object/mobile/space_rebel_tier1_tatooine_socuna.py index ccad8904..b2c0f1e5 100644 --- a/scripts/object/mobile/space_rebel_tier1_tatooine_socuna.py +++ b/scripts/object/mobile/space_rebel_tier1_tatooine_socuna.py @@ -1,4 +1,10 @@ import sys +from resources.datatables import Options def setup(core, object): + #object.setAttachment('radial_filename', 'object/conversation'); + #object.setAttachment('conversationFile','junk_dealer') + object.setOptionsBitmask(Options.CONVERSABLE | Options.INVULNERABLE) + object.setStfFilename('mob/creature_names') + object.setStfName('heroic_tusken_da_la_socuna') return \ No newline at end of file diff --git a/scripts/object/mobile/sy_snootles.py b/scripts/object/mobile/sy_snootles.py index ccad8904..000eafed 100644 --- a/scripts/object/mobile/sy_snootles.py +++ b/scripts/object/mobile/sy_snootles.py @@ -1,4 +1,10 @@ import sys +from resources.datatables import Options def setup(core, object): + #object.setAttachment('radial_filename', 'object/conversation'); + #object.setAttachment('conversationFile','junk_dealer') + object.setOptionsBitmask(Options.CONVERSABLE | Options.INVULNERABLE) + object.setStfFilename('mob/creature_names') + object.setStfName('sy_snootles') return \ No newline at end of file diff --git a/scripts/object/mobile/tusken_raider.py b/scripts/object/mobile/tusken_raider.py index ccad8904..0fcd5010 100644 --- a/scripts/object/mobile/tusken_raider.py +++ b/scripts/object/mobile/tusken_raider.py @@ -1,4 +1,25 @@ import sys def setup(core, object): - return \ No newline at end of file + + lootPoolNames_1 = ['Junk'] + lootPoolChances_1 = [100] + lootGroupChance_1 = 90 + object.addToLootGroups(lootPoolNames_1,lootPoolChances_1,lootGroupChance_1) + + lootPoolNames_2 = ['batons','random_loot_rifles'] + lootPoolChances_2 = [60,40] + lootGroupChance_2 = 20 + object.addToLootGroups(lootPoolNames_2,lootPoolChances_2,lootGroupChance_2) + + lootPoolNames_3 = ['tusken_raider_clothing'] + lootPoolChances_3 = [100] + lootGroupChance_3 = 10 + object.addToLootGroups(lootPoolNames_3,lootPoolChances_3,lootGroupChance_3) + + lootPoolNames_4 = ['Colorcrystals'] + lootPoolChances_4 = [100] + lootGroupChance_4 = 6 + object.addToLootGroups(lootPoolNames_4,lootPoolChances_4,lootGroupChance_4) + + return \ No newline at end of file diff --git a/scripts/object/mobile/vehicle/barc_speeder.py b/scripts/object/mobile/vehicle/barc_speeder.py index ccad8904..4626c764 100644 --- a/scripts/object/mobile/vehicle/barc_speeder.py +++ b/scripts/object/mobile/vehicle/barc_speeder.py @@ -1,4 +1,16 @@ import sys def setup(core, object): + object.setAttachment('radial_filename', 'vehicle') + return + +def use(core, actor, object): + vehicle = actor.getContainer() + + if vehicle: + if vehicle.getObjectID() == object.getObjectID(): + vehicle.remove(actor) + else: + vehicle.add(actor) + return \ No newline at end of file diff --git a/scripts/object/mobile/vehicle/barc_speeder_imperial.py b/scripts/object/mobile/vehicle/barc_speeder_imperial.py index ccad8904..6093148c 100644 --- a/scripts/object/mobile/vehicle/barc_speeder_imperial.py +++ b/scripts/object/mobile/vehicle/barc_speeder_imperial.py @@ -1,4 +1,9 @@ import sys def setup(core, object): + core.buffService.addBuffToCreature(object, 'vehicle_pvp_barc_imperial', object) + return + +def use(core, actor, object): + core.buffService.addBuffToCreature(object, 'vehicle_pvp_barc_imperial', object) return \ No newline at end of file diff --git a/scripts/object/mobile/vehicle/barc_speeder_rebel.py b/scripts/object/mobile/vehicle/barc_speeder_rebel.py index ccad8904..402fab24 100644 --- a/scripts/object/mobile/vehicle/barc_speeder_rebel.py +++ b/scripts/object/mobile/vehicle/barc_speeder_rebel.py @@ -1,4 +1,8 @@ import sys def setup(core, object): + return + +def use(core, actor, object): + core.buffService.addBuffToCreature(object, 'vehicle_pvp_barc_rebel', object) return \ No newline at end of file diff --git a/scripts/object/mobile/vehicle/landspeeder_av21.py b/scripts/object/mobile/vehicle/landspeeder_av21.py index ccad8904..0f6896cd 100644 --- a/scripts/object/mobile/vehicle/landspeeder_av21.py +++ b/scripts/object/mobile/vehicle/landspeeder_av21.py @@ -1,4 +1,6 @@ import sys def setup(core, object): + object.setAttachment('radial_filename', 'creature/vehicle') + object.setAttachment('passengers', 0) return \ No newline at end of file diff --git a/scripts/object/mobile/vehicle/landspeeder_tantive4.py b/scripts/object/mobile/vehicle/landspeeder_tantive4.py index ccad8904..1e2994c6 100644 --- a/scripts/object/mobile/vehicle/landspeeder_tantive4.py +++ b/scripts/object/mobile/vehicle/landspeeder_tantive4.py @@ -1,4 +1,20 @@ import sys +def setup(core, object): + object.setAttachment('radial_filename', 'vehicle') + return + +def use(core, actor, object): + vehicle = actor.getContainer() + + if vehicle: + if vehicle.getObjectID() == object.getObjectID(): + vehicle.remove(actor) + else: + vehicle.add(actor) + + return +import sys + def setup(core, object): return \ No newline at end of file diff --git a/scripts/object/mobile/vehicle/speederbike_swoop.py b/scripts/object/mobile/vehicle/speederbike_swoop.py index ccad8904..0f6896cd 100644 --- a/scripts/object/mobile/vehicle/speederbike_swoop.py +++ b/scripts/object/mobile/vehicle/speederbike_swoop.py @@ -1,4 +1,6 @@ import sys def setup(core, object): + object.setAttachment('radial_filename', 'creature/vehicle') + object.setAttachment('passengers', 0) return \ No newline at end of file diff --git a/scripts/object/mobile/vehicle/walker_at_rt_camo.py b/scripts/object/mobile/vehicle/walker_at_rt_camo.py index ccad8904..38038e73 100644 --- a/scripts/object/mobile/vehicle/walker_at_rt_camo.py +++ b/scripts/object/mobile/vehicle/walker_at_rt_camo.py @@ -1,4 +1,8 @@ import sys def setup(core, object): + return + +def use(core, actor, object): + core.buffService.addBuffToCreature(object, 'vehicle_at_rt', object) return \ No newline at end of file diff --git a/scripts/object/mobile/vehicle/walker_at_rt_reg.py b/scripts/object/mobile/vehicle/walker_at_rt_reg.py index ccad8904..38038e73 100644 --- a/scripts/object/mobile/vehicle/walker_at_rt_reg.py +++ b/scripts/object/mobile/vehicle/walker_at_rt_reg.py @@ -1,4 +1,8 @@ import sys def setup(core, object): + return + +def use(core, actor, object): + core.buffService.addBuffToCreature(object, 'vehicle_at_rt', object) return \ No newline at end of file diff --git a/scripts/object/mobile/watto.py b/scripts/object/mobile/watto.py index ccad8904..5541ebd8 100644 --- a/scripts/object/mobile/watto.py +++ b/scripts/object/mobile/watto.py @@ -1,4 +1,10 @@ import sys +from resources.datatables import Options def setup(core, object): + #object.setAttachment('radial_filename', 'object/conversation'); + #object.setAttachment('conversationFile','junk_dealer') + object.setOptionsBitmask(Options.CONVERSABLE | Options.INVULNERABLE) + object.setStfFilename('mob/creature_names') + object.setStfName('heroic_tusken_watto') return \ No newline at end of file diff --git a/scripts/object/tangible/component/weapon/lightsaber/item_krayt_pearl_04_01.py b/scripts/object/tangible/component/weapon/lightsaber/item_krayt_pearl_04_01.py new file mode 100644 index 00000000..49c8246d --- /dev/null +++ b/scripts/object/tangible/component/weapon/lightsaber/item_krayt_pearl_04_01.py @@ -0,0 +1,6 @@ +import sys + +def setup(core, object): + object.setStringAttribute('crystal_owner', '\#FFFF00UNTUNED') + object.setStringAttribute('quality', 'Poor') + return \ No newline at end of file diff --git a/scripts/object/tangible/component/weapon/quest/blaster_power_handler_faux_bowcaster.py b/scripts/object/tangible/component/weapon/quest/blaster_power_handler_faux_bowcaster.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/component/weapon/quest/blaster_power_handler_faux_bowcaster.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/component/weapon/quest/projectile_feed_mechanism_faux_bowcaster.py b/scripts/object/tangible/component/weapon/quest/projectile_feed_mechanism_faux_bowcaster.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/component/weapon/quest/projectile_feed_mechanism_faux_bowcaster.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/component/weapon/quest/projectile_rifle_barrel_faux_bowcaster.py b/scripts/object/tangible/component/weapon/quest/projectile_rifle_barrel_faux_bowcaster.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/component/weapon/quest/projectile_rifle_barrel_faux_bowcaster.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/container/quest/crafting_contract/armor_crate.py b/scripts/object/tangible/container/quest/crafting_contract/armor_crate.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/container/quest/crafting_contract/armor_crate.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/container/quest/crafting_contract/clothing_crate.py b/scripts/object/tangible/container/quest/crafting_contract/clothing_crate.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/container/quest/crafting_contract/clothing_crate.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/container/quest/crafting_contract/droid_crate.py b/scripts/object/tangible/container/quest/crafting_contract/droid_crate.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/container/quest/crafting_contract/droid_crate.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/container/quest/crafting_contract/food_crate.py b/scripts/object/tangible/container/quest/crafting_contract/food_crate.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/container/quest/crafting_contract/food_crate.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/container/quest/crafting_contract/furniture_crate.py b/scripts/object/tangible/container/quest/crafting_contract/furniture_crate.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/container/quest/crafting_contract/furniture_crate.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/container/quest/crafting_contract/generic_crate.py b/scripts/object/tangible/container/quest/crafting_contract/generic_crate.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/container/quest/crafting_contract/generic_crate.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/container/quest/crafting_contract/weapon_crate.py b/scripts/object/tangible/container/quest/crafting_contract/weapon_crate.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/container/quest/crafting_contract/weapon_crate.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/container/quest/hero_of_tatooine/rock_crevice.py b/scripts/object/tangible/container/quest/hero_of_tatooine/rock_crevice.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/container/quest/hero_of_tatooine/rock_crevice.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/deed/city_deed/cityhall_corellia_deed.py b/scripts/object/tangible/deed/city_deed/cityhall_corellia_deed.py index ccad8904..07ab9319 100644 --- a/scripts/object/tangible/deed/city_deed/cityhall_corellia_deed.py +++ b/scripts/object/tangible/deed/city_deed/cityhall_corellia_deed.py @@ -1,4 +1,8 @@ import sys def setup(core, object): + object.setAttachment('radial_filename', 'deeds/structureDeed') + return + +def use(core, actor, object): return \ No newline at end of file diff --git a/scripts/object/tangible/deed/city_deed/cityhall_naboo_deed.py b/scripts/object/tangible/deed/city_deed/cityhall_naboo_deed.py index ccad8904..07ab9319 100644 --- a/scripts/object/tangible/deed/city_deed/cityhall_naboo_deed.py +++ b/scripts/object/tangible/deed/city_deed/cityhall_naboo_deed.py @@ -1,4 +1,8 @@ import sys def setup(core, object): + object.setAttachment('radial_filename', 'deeds/structureDeed') + return + +def use(core, actor, object): return \ No newline at end of file diff --git a/scripts/object/tangible/deed/city_deed/cityhall_tatooine_deed.py b/scripts/object/tangible/deed/city_deed/cityhall_tatooine_deed.py index ccad8904..07ab9319 100644 --- a/scripts/object/tangible/deed/city_deed/cityhall_tatooine_deed.py +++ b/scripts/object/tangible/deed/city_deed/cityhall_tatooine_deed.py @@ -1,4 +1,8 @@ import sys def setup(core, object): + object.setAttachment('radial_filename', 'deeds/structureDeed') + return + +def use(core, actor, object): return \ No newline at end of file diff --git a/scripts/object/tangible/deed/city_deed/garden_tatooine_sml_01_deed.py b/scripts/object/tangible/deed/city_deed/garden_tatooine_sml_01_deed.py index ccad8904..07ab9319 100644 --- a/scripts/object/tangible/deed/city_deed/garden_tatooine_sml_01_deed.py +++ b/scripts/object/tangible/deed/city_deed/garden_tatooine_sml_01_deed.py @@ -1,4 +1,8 @@ import sys def setup(core, object): + object.setAttachment('radial_filename', 'deeds/structureDeed') + return + +def use(core, actor, object): return \ No newline at end of file diff --git a/scripts/object/tangible/deed/city_deed/shuttleport_tatooine_deed.py b/scripts/object/tangible/deed/city_deed/shuttleport_tatooine_deed.py index ccad8904..07ab9319 100644 --- a/scripts/object/tangible/deed/city_deed/shuttleport_tatooine_deed.py +++ b/scripts/object/tangible/deed/city_deed/shuttleport_tatooine_deed.py @@ -1,4 +1,8 @@ import sys def setup(core, object): + object.setAttachment('radial_filename', 'deeds/structureDeed') + return + +def use(core, actor, object): return \ No newline at end of file diff --git a/scripts/object/tangible/deed/guild_deed/corellia_guild_deed.py b/scripts/object/tangible/deed/guild_deed/corellia_guild_deed.py index ccad8904..07ab9319 100644 --- a/scripts/object/tangible/deed/guild_deed/corellia_guild_deed.py +++ b/scripts/object/tangible/deed/guild_deed/corellia_guild_deed.py @@ -1,4 +1,8 @@ import sys def setup(core, object): + object.setAttachment('radial_filename', 'deeds/structureDeed') + return + +def use(core, actor, object): return \ No newline at end of file diff --git a/scripts/object/tangible/deed/guild_deed/generic_guild_deed.py b/scripts/object/tangible/deed/guild_deed/generic_guild_deed.py index ccad8904..07ab9319 100644 --- a/scripts/object/tangible/deed/guild_deed/generic_guild_deed.py +++ b/scripts/object/tangible/deed/guild_deed/generic_guild_deed.py @@ -1,4 +1,8 @@ import sys def setup(core, object): + object.setAttachment('radial_filename', 'deeds/structureDeed') + return + +def use(core, actor, object): return \ No newline at end of file diff --git a/scripts/object/tangible/deed/guild_deed/naboo_guild_deed.py b/scripts/object/tangible/deed/guild_deed/naboo_guild_deed.py index ccad8904..07ab9319 100644 --- a/scripts/object/tangible/deed/guild_deed/naboo_guild_deed.py +++ b/scripts/object/tangible/deed/guild_deed/naboo_guild_deed.py @@ -1,4 +1,8 @@ import sys def setup(core, object): + object.setAttachment('radial_filename', 'deeds/structureDeed') + return + +def use(core, actor, object): return \ No newline at end of file diff --git a/scripts/object/tangible/deed/guild_deed/tatooine_guild_deed.py b/scripts/object/tangible/deed/guild_deed/tatooine_guild_deed.py index ccad8904..07ab9319 100644 --- a/scripts/object/tangible/deed/guild_deed/tatooine_guild_deed.py +++ b/scripts/object/tangible/deed/guild_deed/tatooine_guild_deed.py @@ -1,4 +1,8 @@ import sys def setup(core, object): + object.setAttachment('radial_filename', 'deeds/structureDeed') + return + +def use(core, actor, object): return \ No newline at end of file diff --git a/scripts/object/tangible/deed/guild_deed/tatooine_guild_style_02_deed.py b/scripts/object/tangible/deed/guild_deed/tatooine_guild_style_02_deed.py index ccad8904..07ab9319 100644 --- a/scripts/object/tangible/deed/guild_deed/tatooine_guild_style_02_deed.py +++ b/scripts/object/tangible/deed/guild_deed/tatooine_guild_style_02_deed.py @@ -1,4 +1,8 @@ import sys def setup(core, object): + object.setAttachment('radial_filename', 'deeds/structureDeed') + return + +def use(core, actor, object): return \ No newline at end of file diff --git a/scripts/object/tangible/deed/harvester_deed/harvester_flora_deed.py b/scripts/object/tangible/deed/harvester_deed/harvester_flora_deed.py index ccad8904..10d24ebd 100644 --- a/scripts/object/tangible/deed/harvester_deed/harvester_flora_deed.py +++ b/scripts/object/tangible/deed/harvester_deed/harvester_flora_deed.py @@ -1,4 +1,9 @@ import sys def setup(core, object): + object.setAttachment('radial_filename', 'deeds/harvesterDeed') + object.setAttachment('ConstructorTemplate', 'object/installation/mining_ore/construction/shared_construction_mining_ore_harvester_style_1.iff') + object.setAttachment('StructureTemplate', 'object/installation/mining_organic/shared_mining_organic_flora_farm.iff') + object.setAttachment('LotRequirement', 1) + object.setIntAttribute('examine_maintenance_rate', 16) return \ No newline at end of file diff --git a/scripts/object/tangible/deed/harvester_deed/harvester_flora_deed_elite.py b/scripts/object/tangible/deed/harvester_deed/harvester_flora_deed_elite.py index ccad8904..8a14fe9a 100644 --- a/scripts/object/tangible/deed/harvester_deed/harvester_flora_deed_elite.py +++ b/scripts/object/tangible/deed/harvester_deed/harvester_flora_deed_elite.py @@ -1,4 +1,9 @@ import sys def setup(core, object): + object.setAttachment('radial_filename', 'deeds/harvesterDeed') + object.setAttachment('ConstructorTemplate', 'object/installation/mining_ore/construction/shared_construction_mining_ore_harvester_style_heavy.iff') + object.setAttachment('StructureTemplate', 'object/installation/mining_organic/shared_mining_organic_flora_farm_elite.iff') + object.setAttachment('LotRequirement', 3) + object.setIntAttribute('examine_maintenance_rate', 120) return \ No newline at end of file diff --git a/scripts/object/tangible/deed/harvester_deed/harvester_flora_deed_heavy.py b/scripts/object/tangible/deed/harvester_deed/harvester_flora_deed_heavy.py index ccad8904..1006c18b 100644 --- a/scripts/object/tangible/deed/harvester_deed/harvester_flora_deed_heavy.py +++ b/scripts/object/tangible/deed/harvester_deed/harvester_flora_deed_heavy.py @@ -1,4 +1,9 @@ import sys def setup(core, object): + object.setAttachment('radial_filename', 'deeds/harvesterDeed') + object.setAttachment('ConstructorTemplate', 'object/installation/mining_ore/construction/shared_construction_mining_ore_harvester_style_heavy.iff') + object.setAttachment('StructureTemplate', 'object/installation/mining_organic/shared_mining_organic_flora_farm_heavy.iff') + object.setAttachment('LotRequirement', 1) + object.setIntAttribute('examine_maintenance_rate', 90) return \ No newline at end of file diff --git a/scripts/object/tangible/deed/harvester_deed/harvester_flora_deed_medium.py b/scripts/object/tangible/deed/harvester_deed/harvester_flora_deed_medium.py index ccad8904..41c49098 100644 --- a/scripts/object/tangible/deed/harvester_deed/harvester_flora_deed_medium.py +++ b/scripts/object/tangible/deed/harvester_deed/harvester_flora_deed_medium.py @@ -1,4 +1,9 @@ import sys def setup(core, object): + object.setAttachment('radial_filename', 'deeds/harvesterDeed') + object.setAttachment('ConstructorTemplate', 'object/installation/mining_ore/construction/shared_construction_mining_ore_harvester_style_2.iff') + object.setAttachment('StructureTemplate', 'object/installation/mining_organic/shared_mining_organic_flora_farm_medium.iff') + object.setAttachment('LotRequirement', 1) + object.setIntAttribute('examine_maintenance_rate', 60) return \ No newline at end of file diff --git a/scripts/object/tangible/deed/harvester_deed/harvester_gas_deed.py b/scripts/object/tangible/deed/harvester_deed/harvester_gas_deed.py index ccad8904..d11eb62d 100644 --- a/scripts/object/tangible/deed/harvester_deed/harvester_gas_deed.py +++ b/scripts/object/tangible/deed/harvester_deed/harvester_gas_deed.py @@ -1,4 +1,9 @@ import sys def setup(core, object): + object.setAttachment('radial_filename', 'deeds/harvesterDeed') + object.setAttachment('ConstructorTemplate', 'object/installation/mining_ore/construction/shared_construction_mining_ore_harvester_style_1.iff') + object.setAttachment('StructureTemplate', 'object/installation/mining_gas/shared_mining_gas_harvester_style_1.iff') + object.setAttachment('LotRequirement', 1) + object.setIntAttribute('examine_maintenance_rate', 16) return \ No newline at end of file diff --git a/scripts/object/tangible/deed/harvester_deed/harvester_gas_deed_elite.py b/scripts/object/tangible/deed/harvester_deed/harvester_gas_deed_elite.py index ccad8904..0ea574be 100644 --- a/scripts/object/tangible/deed/harvester_deed/harvester_gas_deed_elite.py +++ b/scripts/object/tangible/deed/harvester_deed/harvester_gas_deed_elite.py @@ -1,4 +1,9 @@ import sys def setup(core, object): + object.setAttachment('radial_filename', 'deeds/harvesterDeed') + object.setAttachment('ConstructorTemplate', 'object/installation/mining_ore/construction/shared_construction_mining_ore_harvester_style_heavy.iff') + object.setAttachment('StructureTemplate', 'object/installation/mining_gas/shared_mining_gas_harvester_style_4.iff') + object.setAttachment('LotRequirement', 3) + object.setIntAttribute('examine_maintenance_rate', 120) return \ No newline at end of file diff --git a/scripts/object/tangible/deed/harvester_deed/harvester_gas_deed_heavy.py b/scripts/object/tangible/deed/harvester_deed/harvester_gas_deed_heavy.py index ccad8904..d77581cf 100644 --- a/scripts/object/tangible/deed/harvester_deed/harvester_gas_deed_heavy.py +++ b/scripts/object/tangible/deed/harvester_deed/harvester_gas_deed_heavy.py @@ -1,4 +1,9 @@ import sys def setup(core, object): + object.setAttachment('radial_filename', 'deeds/harvesterDeed') + object.setAttachment('ConstructorTemplate', 'object/installation/mining_ore/construction/shared_construction_mining_ore_harvester_style_heavy.iff') + object.setAttachment('StructureTemplate', 'object/installation/mining_gas/shared_mining_gas_harvester_style_3.iff') + object.setAttachment('LotRequirement', 1) + object.setIntAttribute('examine_maintenance_rate', 90) return \ No newline at end of file diff --git a/scripts/object/tangible/deed/harvester_deed/harvester_gas_deed_medium.py b/scripts/object/tangible/deed/harvester_deed/harvester_gas_deed_medium.py index ccad8904..4e999ccb 100644 --- a/scripts/object/tangible/deed/harvester_deed/harvester_gas_deed_medium.py +++ b/scripts/object/tangible/deed/harvester_deed/harvester_gas_deed_medium.py @@ -1,4 +1,9 @@ import sys def setup(core, object): + object.setAttachment('radial_filename', 'deeds/harvesterDeed') + object.setAttachment('ConstructorTemplate', 'object/installation/mining_ore/construction/shared_construction_mining_ore_harvester_style_2.iff') + object.setAttachment('StructureTemplate', 'object/installation/mining_gas/shared_mining_gas_harvester_style_2.iff') + object.setAttachment('LotRequirement', 1) + object.setIntAttribute('examine_maintenance_rate', 60) return \ No newline at end of file diff --git a/scripts/object/tangible/deed/harvester_deed/harvester_liquid_deed.py b/scripts/object/tangible/deed/harvester_deed/harvester_liquid_deed.py index ccad8904..39590829 100644 --- a/scripts/object/tangible/deed/harvester_deed/harvester_liquid_deed.py +++ b/scripts/object/tangible/deed/harvester_deed/harvester_liquid_deed.py @@ -1,4 +1,9 @@ import sys def setup(core, object): + object.setAttachment('radial_filename', 'deeds/harvesterDeed') + object.setAttachment('ConstructorTemplate', 'object/installation/mining_ore/construction/shared_construction_mining_ore_harvester_style_1.iff') + object.setAttachment('StructureTemplate', 'object/installation/mining_liquid/shared_mining_liquid_harvester_style_1.iff') + object.setAttachment('LotRequirement', 1) + object.setIntAttribute('examine_maintenance_rate', 16) return \ No newline at end of file diff --git a/scripts/object/tangible/deed/harvester_deed/harvester_liquid_deed_elite.py b/scripts/object/tangible/deed/harvester_deed/harvester_liquid_deed_elite.py index ccad8904..b3eaba78 100644 --- a/scripts/object/tangible/deed/harvester_deed/harvester_liquid_deed_elite.py +++ b/scripts/object/tangible/deed/harvester_deed/harvester_liquid_deed_elite.py @@ -1,4 +1,9 @@ import sys def setup(core, object): + object.setAttachment('radial_filename', 'deeds/harvesterDeed') + object.setAttachment('ConstructorTemplate', 'object/installation/mining_ore/construction/shared_construction_mining_ore_harvester_style_heavy.iff') + object.setAttachment('StructureTemplate', 'object/installation/mining_liquid/shared_mining_liquid_harvester_style_4.iff') + object.setAttachment('LotRequirement', 3) + object.setIntAttribute('examine_maintenance_rate', 120) return \ No newline at end of file diff --git a/scripts/object/tangible/deed/harvester_deed/harvester_liquid_deed_heavy.py b/scripts/object/tangible/deed/harvester_deed/harvester_liquid_deed_heavy.py index ccad8904..48a97f35 100644 --- a/scripts/object/tangible/deed/harvester_deed/harvester_liquid_deed_heavy.py +++ b/scripts/object/tangible/deed/harvester_deed/harvester_liquid_deed_heavy.py @@ -1,4 +1,9 @@ import sys def setup(core, object): + object.setAttachment('radial_filename', 'deeds/harvesterDeed') + object.setAttachment('ConstructorTemplate', 'object/installation/mining_ore/construction/shared_construction_mining_ore_harvester_style_heavy.iff') + object.setAttachment('StructureTemplate', 'object/installation/mining_liquid/shared_mining_liquid_harvester_style_3.iff') + object.setAttachment('LotRequirement', 1) + object.setIntAttribute('examine_maintenance_rate', 90) return \ No newline at end of file diff --git a/scripts/object/tangible/deed/harvester_deed/harvester_liquid_deed_medium.py b/scripts/object/tangible/deed/harvester_deed/harvester_liquid_deed_medium.py index ccad8904..3ece7d28 100644 --- a/scripts/object/tangible/deed/harvester_deed/harvester_liquid_deed_medium.py +++ b/scripts/object/tangible/deed/harvester_deed/harvester_liquid_deed_medium.py @@ -1,4 +1,9 @@ import sys def setup(core, object): + object.setAttachment('radial_filename', 'deeds/harvesterDeed') + object.setAttachment('ConstructorTemplate', 'object/installation/mining_ore/construction/shared_construction_mining_ore_harvester_style_2.iff') + object.setAttachment('StructureTemplate', 'object/installation/mining_liquid/shared_mining_liquid_harvester_style_2.iff') + object.setAttachment('LotRequirement', 1) + object.setIntAttribute('examine_maintenance_rate', 60) return \ No newline at end of file diff --git a/scripts/object/tangible/deed/harvester_deed/harvester_moisture_deed.py b/scripts/object/tangible/deed/harvester_deed/harvester_moisture_deed.py index ccad8904..213a8d53 100644 --- a/scripts/object/tangible/deed/harvester_deed/harvester_moisture_deed.py +++ b/scripts/object/tangible/deed/harvester_deed/harvester_moisture_deed.py @@ -1,4 +1,9 @@ import sys def setup(core, object): + object.setAttachment('radial_filename', 'deeds/harvesterDeed') + object.setAttachment('ConstructorTemplate', 'object/installation/mining_ore/construction/shared_construction_mining_ore_harvester_style_1.iff') + object.setAttachment('StructureTemplate', 'object/installation/mining_liquid/shared_mining_liquid_moisture_harvester.iff') + object.setAttachment('LotRequirement', 1) + object.setIntAttribute('examine_maintenance_rate', 16) return \ No newline at end of file diff --git a/scripts/object/tangible/deed/harvester_deed/harvester_moisture_deed_elite.py b/scripts/object/tangible/deed/harvester_deed/harvester_moisture_deed_elite.py index ccad8904..ba7cf3f9 100644 --- a/scripts/object/tangible/deed/harvester_deed/harvester_moisture_deed_elite.py +++ b/scripts/object/tangible/deed/harvester_deed/harvester_moisture_deed_elite.py @@ -1,4 +1,9 @@ import sys def setup(core, object): + object.setAttachment('radial_filename', 'deeds/harvesterDeed') + object.setAttachment('ConstructorTemplate', 'object/installation/mining_ore/construction/shared_construction_mining_ore_harvester_style_heavy.iff') + object.setAttachment('StructureTemplate', 'object/installation/mining_liquid/shared_mining_liquid_moisture_harvester_elite.iff') + object.setAttachment('LotRequirement', 3) + object.setIntAttribute('examine_maintenance_rate', 120) return \ No newline at end of file diff --git a/scripts/object/tangible/deed/harvester_deed/harvester_moisture_deed_heavy.py b/scripts/object/tangible/deed/harvester_deed/harvester_moisture_deed_heavy.py index ccad8904..5ca18dc4 100644 --- a/scripts/object/tangible/deed/harvester_deed/harvester_moisture_deed_heavy.py +++ b/scripts/object/tangible/deed/harvester_deed/harvester_moisture_deed_heavy.py @@ -1,4 +1,9 @@ import sys def setup(core, object): + object.setAttachment('radial_filename', 'deeds/harvesterDeed') + object.setAttachment('ConstructorTemplate', 'object/installation/mining_ore/construction/shared_construction_mining_ore_harvester_style_heavy.iff') + object.setAttachment('StructureTemplate', 'object/installation/mining_liquid/shared_mining_liquid_moisture_harvester_heavy.iff') + object.setAttachment('LotRequirement', 1) + object.setIntAttribute('examine_maintenance_rate', 90) return \ No newline at end of file diff --git a/scripts/object/tangible/deed/harvester_deed/harvester_moisture_deed_medium.py b/scripts/object/tangible/deed/harvester_deed/harvester_moisture_deed_medium.py index ccad8904..e14043d2 100644 --- a/scripts/object/tangible/deed/harvester_deed/harvester_moisture_deed_medium.py +++ b/scripts/object/tangible/deed/harvester_deed/harvester_moisture_deed_medium.py @@ -1,4 +1,9 @@ import sys def setup(core, object): + object.setAttachment('radial_filename', 'deeds/harvesterDeed') + object.setAttachment('ConstructorTemplate', 'object/installation/mining_ore/construction/shared_construction_mining_ore_harvester_style_2.iff') + object.setAttachment('StructureTemplate', 'object/installation/mining_liquid/shared_mining_liquid_moisture_harvester_medium.iff') + object.setAttachment('LotRequirement', 1) + object.setIntAttribute('examine_maintenance_rate', 60) return \ No newline at end of file diff --git a/scripts/object/tangible/deed/harvester_deed/harvester_ore_deed_elite.py b/scripts/object/tangible/deed/harvester_deed/harvester_ore_deed_elite.py index ccad8904..6c3db03a 100644 --- a/scripts/object/tangible/deed/harvester_deed/harvester_ore_deed_elite.py +++ b/scripts/object/tangible/deed/harvester_deed/harvester_ore_deed_elite.py @@ -1,4 +1,9 @@ import sys def setup(core, object): + object.setAttachment('radial_filename', 'deeds/harvesterDeed') + object.setAttachment('ConstructorTemplate', 'object/installation/mining_ore/construction/shared_construction_mining_ore_harvester_style_heavy.iff') + object.setAttachment('StructureTemplate', 'object/installation/mining_ore/shared_mining_ore_harvester_elite.iff') + object.setAttachment('LotRequirement', 3) + object.setIntAttribute('examine_maintenance_rate', 120) return \ No newline at end of file diff --git a/scripts/object/tangible/deed/harvester_deed/harvester_ore_heavy_deed.py b/scripts/object/tangible/deed/harvester_deed/harvester_ore_heavy_deed.py index ccad8904..e15fd8b4 100644 --- a/scripts/object/tangible/deed/harvester_deed/harvester_ore_heavy_deed.py +++ b/scripts/object/tangible/deed/harvester_deed/harvester_ore_heavy_deed.py @@ -1,4 +1,9 @@ import sys def setup(core, object): + object.setAttachment('radial_filename', 'deeds/harvesterDeed') + object.setAttachment('ConstructorTemplate', 'object/installation/mining_ore/construction/shared_construction_mining_ore_harvester_style_heavy.iff') + object.setAttachment('StructureTemplate', 'object/installation/mining_ore/shared_mining_ore_harvester_heavy.iff') + object.setAttachment('LotRequirement', 1) + object.setIntAttribute('examine_maintenance_rate', 90) return \ No newline at end of file diff --git a/scripts/object/tangible/deed/harvester_deed/harvester_ore_s1_deed.py b/scripts/object/tangible/deed/harvester_deed/harvester_ore_s1_deed.py index ccad8904..42fbafc3 100644 --- a/scripts/object/tangible/deed/harvester_deed/harvester_ore_s1_deed.py +++ b/scripts/object/tangible/deed/harvester_deed/harvester_ore_s1_deed.py @@ -1,4 +1,9 @@ import sys def setup(core, object): + object.setAttachment('radial_filename', 'deeds/harvesterDeed') + object.setAttachment('ConstructorTemplate', 'object/installation/mining_ore/construction/shared_construction_mining_ore_harvester_style_1.iff') + object.setAttachment('StructureTemplate', 'object/installation/mining_ore/shared_mining_ore_harvester_style_1.iff') + object.setAttachment('LotRequirement', 1) + object.setIntAttribute('examine_maintenance_rate', 16) return \ No newline at end of file diff --git a/scripts/object/tangible/deed/harvester_deed/harvester_ore_s2_deed.py b/scripts/object/tangible/deed/harvester_deed/harvester_ore_s2_deed.py index ccad8904..e619c2ee 100644 --- a/scripts/object/tangible/deed/harvester_deed/harvester_ore_s2_deed.py +++ b/scripts/object/tangible/deed/harvester_deed/harvester_ore_s2_deed.py @@ -1,4 +1,9 @@ import sys def setup(core, object): + object.setAttachment('radial_filename', 'deeds/harvesterDeed') + object.setAttachment('ConstructorTemplate', 'object/installation/mining_ore/construction/shared_construction_mining_ore_harvester_style_2.iff') + object.setAttachment('StructureTemplate', 'object/installation/mining_ore/shared_mining_ore_harvester_style_2.iff') + object.setAttachment('LotRequirement', 1) + object.setIntAttribute('examine_maintenance_rate', 60) return \ No newline at end of file diff --git a/scripts/object/tangible/deed/player_house_deed/corellia_house_large_deed.py b/scripts/object/tangible/deed/player_house_deed/corellia_house_large_deed.py index ccad8904..07ab9319 100644 --- a/scripts/object/tangible/deed/player_house_deed/corellia_house_large_deed.py +++ b/scripts/object/tangible/deed/player_house_deed/corellia_house_large_deed.py @@ -1,4 +1,8 @@ import sys def setup(core, object): + object.setAttachment('radial_filename', 'deeds/structureDeed') + return + +def use(core, actor, object): return \ No newline at end of file diff --git a/scripts/object/tangible/deed/player_house_deed/corellia_house_large_style_02_deed.py b/scripts/object/tangible/deed/player_house_deed/corellia_house_large_style_02_deed.py index ccad8904..07ab9319 100644 --- a/scripts/object/tangible/deed/player_house_deed/corellia_house_large_style_02_deed.py +++ b/scripts/object/tangible/deed/player_house_deed/corellia_house_large_style_02_deed.py @@ -1,4 +1,8 @@ import sys def setup(core, object): + object.setAttachment('radial_filename', 'deeds/structureDeed') + return + +def use(core, actor, object): return \ No newline at end of file diff --git a/scripts/object/tangible/deed/player_house_deed/corellia_house_medium_deed.py b/scripts/object/tangible/deed/player_house_deed/corellia_house_medium_deed.py index ccad8904..07ab9319 100644 --- a/scripts/object/tangible/deed/player_house_deed/corellia_house_medium_deed.py +++ b/scripts/object/tangible/deed/player_house_deed/corellia_house_medium_deed.py @@ -1,4 +1,8 @@ import sys def setup(core, object): + object.setAttachment('radial_filename', 'deeds/structureDeed') + return + +def use(core, actor, object): return \ No newline at end of file diff --git a/scripts/object/tangible/deed/player_house_deed/corellia_house_medium_style_02_deed.py b/scripts/object/tangible/deed/player_house_deed/corellia_house_medium_style_02_deed.py index ccad8904..07ab9319 100644 --- a/scripts/object/tangible/deed/player_house_deed/corellia_house_medium_style_02_deed.py +++ b/scripts/object/tangible/deed/player_house_deed/corellia_house_medium_style_02_deed.py @@ -1,4 +1,8 @@ import sys def setup(core, object): + object.setAttachment('radial_filename', 'deeds/structureDeed') + return + +def use(core, actor, object): return \ No newline at end of file diff --git a/scripts/object/tangible/deed/player_house_deed/corellia_house_small_deed.py b/scripts/object/tangible/deed/player_house_deed/corellia_house_small_deed.py index ccad8904..07ab9319 100644 --- a/scripts/object/tangible/deed/player_house_deed/corellia_house_small_deed.py +++ b/scripts/object/tangible/deed/player_house_deed/corellia_house_small_deed.py @@ -1,4 +1,8 @@ import sys def setup(core, object): + object.setAttachment('radial_filename', 'deeds/structureDeed') + return + +def use(core, actor, object): return \ No newline at end of file diff --git a/scripts/object/tangible/deed/player_house_deed/corellia_house_small_floor_02_deed.py b/scripts/object/tangible/deed/player_house_deed/corellia_house_small_floor_02_deed.py index ccad8904..07ab9319 100644 --- a/scripts/object/tangible/deed/player_house_deed/corellia_house_small_floor_02_deed.py +++ b/scripts/object/tangible/deed/player_house_deed/corellia_house_small_floor_02_deed.py @@ -1,4 +1,8 @@ import sys def setup(core, object): + object.setAttachment('radial_filename', 'deeds/structureDeed') + return + +def use(core, actor, object): return \ No newline at end of file diff --git a/scripts/object/tangible/deed/player_house_deed/corellia_house_small_style_02_deed.py b/scripts/object/tangible/deed/player_house_deed/corellia_house_small_style_02_deed.py index ccad8904..07ab9319 100644 --- a/scripts/object/tangible/deed/player_house_deed/corellia_house_small_style_02_deed.py +++ b/scripts/object/tangible/deed/player_house_deed/corellia_house_small_style_02_deed.py @@ -1,4 +1,8 @@ import sys def setup(core, object): + object.setAttachment('radial_filename', 'deeds/structureDeed') + return + +def use(core, actor, object): return \ No newline at end of file diff --git a/scripts/object/tangible/deed/player_house_deed/corellia_house_small_style_02_floor_02_deed.py b/scripts/object/tangible/deed/player_house_deed/corellia_house_small_style_02_floor_02_deed.py index ccad8904..07ab9319 100644 --- a/scripts/object/tangible/deed/player_house_deed/corellia_house_small_style_02_floor_02_deed.py +++ b/scripts/object/tangible/deed/player_house_deed/corellia_house_small_style_02_floor_02_deed.py @@ -1,4 +1,8 @@ import sys def setup(core, object): + object.setAttachment('radial_filename', 'deeds/structureDeed') + return + +def use(core, actor, object): return \ No newline at end of file diff --git a/scripts/object/tangible/deed/player_house_deed/generic_house_large_deed.py b/scripts/object/tangible/deed/player_house_deed/generic_house_large_deed.py index ccad8904..07ab9319 100644 --- a/scripts/object/tangible/deed/player_house_deed/generic_house_large_deed.py +++ b/scripts/object/tangible/deed/player_house_deed/generic_house_large_deed.py @@ -1,4 +1,8 @@ import sys def setup(core, object): + object.setAttachment('radial_filename', 'deeds/structureDeed') + return + +def use(core, actor, object): return \ No newline at end of file diff --git a/scripts/object/tangible/deed/player_house_deed/generic_house_large_style_02_deed.py b/scripts/object/tangible/deed/player_house_deed/generic_house_large_style_02_deed.py index ccad8904..07ab9319 100644 --- a/scripts/object/tangible/deed/player_house_deed/generic_house_large_style_02_deed.py +++ b/scripts/object/tangible/deed/player_house_deed/generic_house_large_style_02_deed.py @@ -1,4 +1,8 @@ import sys def setup(core, object): + object.setAttachment('radial_filename', 'deeds/structureDeed') + return + +def use(core, actor, object): return \ No newline at end of file diff --git a/scripts/object/tangible/deed/player_house_deed/generic_house_large_window_s01_deed.py b/scripts/object/tangible/deed/player_house_deed/generic_house_large_window_s01_deed.py index ccad8904..07ab9319 100644 --- a/scripts/object/tangible/deed/player_house_deed/generic_house_large_window_s01_deed.py +++ b/scripts/object/tangible/deed/player_house_deed/generic_house_large_window_s01_deed.py @@ -1,4 +1,8 @@ import sys def setup(core, object): + object.setAttachment('radial_filename', 'deeds/structureDeed') + return + +def use(core, actor, object): return \ No newline at end of file diff --git a/scripts/object/tangible/deed/player_house_deed/generic_house_large_window_s02_deed.py b/scripts/object/tangible/deed/player_house_deed/generic_house_large_window_s02_deed.py index ccad8904..07ab9319 100644 --- a/scripts/object/tangible/deed/player_house_deed/generic_house_large_window_s02_deed.py +++ b/scripts/object/tangible/deed/player_house_deed/generic_house_large_window_s02_deed.py @@ -1,4 +1,8 @@ import sys def setup(core, object): + object.setAttachment('radial_filename', 'deeds/structureDeed') + return + +def use(core, actor, object): return \ No newline at end of file diff --git a/scripts/object/tangible/deed/player_house_deed/generic_house_medium_deed.py b/scripts/object/tangible/deed/player_house_deed/generic_house_medium_deed.py index ccad8904..07ab9319 100644 --- a/scripts/object/tangible/deed/player_house_deed/generic_house_medium_deed.py +++ b/scripts/object/tangible/deed/player_house_deed/generic_house_medium_deed.py @@ -1,4 +1,8 @@ import sys def setup(core, object): + object.setAttachment('radial_filename', 'deeds/structureDeed') + return + +def use(core, actor, object): return \ No newline at end of file diff --git a/scripts/object/tangible/deed/player_house_deed/generic_house_medium_style_02_deed.py b/scripts/object/tangible/deed/player_house_deed/generic_house_medium_style_02_deed.py index ccad8904..07ab9319 100644 --- a/scripts/object/tangible/deed/player_house_deed/generic_house_medium_style_02_deed.py +++ b/scripts/object/tangible/deed/player_house_deed/generic_house_medium_style_02_deed.py @@ -1,4 +1,8 @@ import sys def setup(core, object): + object.setAttachment('radial_filename', 'deeds/structureDeed') + return + +def use(core, actor, object): return \ No newline at end of file diff --git a/scripts/object/tangible/deed/player_house_deed/generic_house_medium_windowed_deed.py b/scripts/object/tangible/deed/player_house_deed/generic_house_medium_windowed_deed.py index ccad8904..07ab9319 100644 --- a/scripts/object/tangible/deed/player_house_deed/generic_house_medium_windowed_deed.py +++ b/scripts/object/tangible/deed/player_house_deed/generic_house_medium_windowed_deed.py @@ -1,4 +1,8 @@ import sys def setup(core, object): + object.setAttachment('radial_filename', 'deeds/structureDeed') + return + +def use(core, actor, object): return \ No newline at end of file diff --git a/scripts/object/tangible/deed/player_house_deed/generic_house_medium_windowed_s02_deed.py b/scripts/object/tangible/deed/player_house_deed/generic_house_medium_windowed_s02_deed.py index ccad8904..07ab9319 100644 --- a/scripts/object/tangible/deed/player_house_deed/generic_house_medium_windowed_s02_deed.py +++ b/scripts/object/tangible/deed/player_house_deed/generic_house_medium_windowed_s02_deed.py @@ -1,4 +1,8 @@ import sys def setup(core, object): + object.setAttachment('radial_filename', 'deeds/structureDeed') + return + +def use(core, actor, object): return \ No newline at end of file diff --git a/scripts/object/tangible/deed/player_house_deed/generic_house_small_deed.py b/scripts/object/tangible/deed/player_house_deed/generic_house_small_deed.py index ccad8904..07ab9319 100644 --- a/scripts/object/tangible/deed/player_house_deed/generic_house_small_deed.py +++ b/scripts/object/tangible/deed/player_house_deed/generic_house_small_deed.py @@ -1,4 +1,8 @@ import sys def setup(core, object): + object.setAttachment('radial_filename', 'deeds/structureDeed') + return + +def use(core, actor, object): return \ No newline at end of file diff --git a/scripts/object/tangible/deed/player_house_deed/generic_house_small_floor_02_deed.py b/scripts/object/tangible/deed/player_house_deed/generic_house_small_floor_02_deed.py index ccad8904..5483eb6d 100644 --- a/scripts/object/tangible/deed/player_house_deed/generic_house_small_floor_02_deed.py +++ b/scripts/object/tangible/deed/player_house_deed/generic_house_small_floor_02_deed.py @@ -1,4 +1,5 @@ import sys def setup(core, object): + object.setAttachment('radial_filename', 'deeds/structureDeed') return \ No newline at end of file diff --git a/scripts/object/tangible/deed/player_house_deed/generic_house_small_style_02_deed.py b/scripts/object/tangible/deed/player_house_deed/generic_house_small_style_02_deed.py index ccad8904..29729ab1 100644 --- a/scripts/object/tangible/deed/player_house_deed/generic_house_small_style_02_deed.py +++ b/scripts/object/tangible/deed/player_house_deed/generic_house_small_style_02_deed.py @@ -1,4 +1,5 @@ import sys def setup(core, object): - return \ No newline at end of file + object.setAttachment('radial_filename', 'deeds/structureDeed') + return diff --git a/scripts/object/tangible/deed/player_house_deed/generic_house_small_style_02_floor_02_deed.py b/scripts/object/tangible/deed/player_house_deed/generic_house_small_style_02_floor_02_deed.py index ccad8904..29729ab1 100644 --- a/scripts/object/tangible/deed/player_house_deed/generic_house_small_style_02_floor_02_deed.py +++ b/scripts/object/tangible/deed/player_house_deed/generic_house_small_style_02_floor_02_deed.py @@ -1,4 +1,5 @@ import sys def setup(core, object): - return \ No newline at end of file + object.setAttachment('radial_filename', 'deeds/structureDeed') + return diff --git a/scripts/object/tangible/deed/player_house_deed/generic_house_small_window_deed.py b/scripts/object/tangible/deed/player_house_deed/generic_house_small_window_deed.py index ccad8904..07ab9319 100644 --- a/scripts/object/tangible/deed/player_house_deed/generic_house_small_window_deed.py +++ b/scripts/object/tangible/deed/player_house_deed/generic_house_small_window_deed.py @@ -1,4 +1,8 @@ import sys def setup(core, object): + object.setAttachment('radial_filename', 'deeds/structureDeed') + return + +def use(core, actor, object): return \ No newline at end of file diff --git a/scripts/object/tangible/deed/player_house_deed/generic_house_small_window_style_03_deed.py b/scripts/object/tangible/deed/player_house_deed/generic_house_small_window_style_03_deed.py index ccad8904..07ab9319 100644 --- a/scripts/object/tangible/deed/player_house_deed/generic_house_small_window_style_03_deed.py +++ b/scripts/object/tangible/deed/player_house_deed/generic_house_small_window_style_03_deed.py @@ -1,4 +1,8 @@ import sys def setup(core, object): + object.setAttachment('radial_filename', 'deeds/structureDeed') + return + +def use(core, actor, object): return \ No newline at end of file diff --git a/scripts/object/tangible/deed/player_house_deed/jabbas_sail_barge_deed.py b/scripts/object/tangible/deed/player_house_deed/jabbas_sail_barge_deed.py index ccad8904..07ab9319 100644 --- a/scripts/object/tangible/deed/player_house_deed/jabbas_sail_barge_deed.py +++ b/scripts/object/tangible/deed/player_house_deed/jabbas_sail_barge_deed.py @@ -1,4 +1,8 @@ import sys def setup(core, object): + object.setAttachment('radial_filename', 'deeds/structureDeed') + return + +def use(core, actor, object): return \ No newline at end of file diff --git a/scripts/object/tangible/deed/player_house_deed/merchant_tent_style_01_deed.py b/scripts/object/tangible/deed/player_house_deed/merchant_tent_style_01_deed.py index ccad8904..07ab9319 100644 --- a/scripts/object/tangible/deed/player_house_deed/merchant_tent_style_01_deed.py +++ b/scripts/object/tangible/deed/player_house_deed/merchant_tent_style_01_deed.py @@ -1,4 +1,8 @@ import sys def setup(core, object): + object.setAttachment('radial_filename', 'deeds/structureDeed') + return + +def use(core, actor, object): return \ No newline at end of file diff --git a/scripts/object/tangible/deed/player_house_deed/merchant_tent_style_02_deed.py b/scripts/object/tangible/deed/player_house_deed/merchant_tent_style_02_deed.py index ccad8904..07ab9319 100644 --- a/scripts/object/tangible/deed/player_house_deed/merchant_tent_style_02_deed.py +++ b/scripts/object/tangible/deed/player_house_deed/merchant_tent_style_02_deed.py @@ -1,4 +1,8 @@ import sys def setup(core, object): + object.setAttachment('radial_filename', 'deeds/structureDeed') + return + +def use(core, actor, object): return \ No newline at end of file diff --git a/scripts/object/tangible/deed/player_house_deed/merchant_tent_style_03_deed.py b/scripts/object/tangible/deed/player_house_deed/merchant_tent_style_03_deed.py index ccad8904..07ab9319 100644 --- a/scripts/object/tangible/deed/player_house_deed/merchant_tent_style_03_deed.py +++ b/scripts/object/tangible/deed/player_house_deed/merchant_tent_style_03_deed.py @@ -1,4 +1,8 @@ import sys def setup(core, object): + object.setAttachment('radial_filename', 'deeds/structureDeed') + return + +def use(core, actor, object): return \ No newline at end of file diff --git a/scripts/object/tangible/deed/player_house_deed/mustafar_house_lg.py b/scripts/object/tangible/deed/player_house_deed/mustafar_house_lg.py index ccad8904..07ab9319 100644 --- a/scripts/object/tangible/deed/player_house_deed/mustafar_house_lg.py +++ b/scripts/object/tangible/deed/player_house_deed/mustafar_house_lg.py @@ -1,4 +1,8 @@ import sys def setup(core, object): + object.setAttachment('radial_filename', 'deeds/structureDeed') + return + +def use(core, actor, object): return \ No newline at end of file diff --git a/scripts/object/tangible/deed/player_house_deed/naboo_house_large_deed.py b/scripts/object/tangible/deed/player_house_deed/naboo_house_large_deed.py index ccad8904..5483eb6d 100644 --- a/scripts/object/tangible/deed/player_house_deed/naboo_house_large_deed.py +++ b/scripts/object/tangible/deed/player_house_deed/naboo_house_large_deed.py @@ -1,4 +1,5 @@ import sys def setup(core, object): + object.setAttachment('radial_filename', 'deeds/structureDeed') return \ No newline at end of file diff --git a/scripts/object/tangible/deed/player_house_deed/naboo_house_medium_deed.py b/scripts/object/tangible/deed/player_house_deed/naboo_house_medium_deed.py index ccad8904..07ab9319 100644 --- a/scripts/object/tangible/deed/player_house_deed/naboo_house_medium_deed.py +++ b/scripts/object/tangible/deed/player_house_deed/naboo_house_medium_deed.py @@ -1,4 +1,8 @@ import sys def setup(core, object): + object.setAttachment('radial_filename', 'deeds/structureDeed') + return + +def use(core, actor, object): return \ No newline at end of file diff --git a/scripts/object/tangible/deed/player_house_deed/naboo_house_small_deed.py b/scripts/object/tangible/deed/player_house_deed/naboo_house_small_deed.py index ccad8904..07ab9319 100644 --- a/scripts/object/tangible/deed/player_house_deed/naboo_house_small_deed.py +++ b/scripts/object/tangible/deed/player_house_deed/naboo_house_small_deed.py @@ -1,4 +1,8 @@ import sys def setup(core, object): + object.setAttachment('radial_filename', 'deeds/structureDeed') + return + +def use(core, actor, object): return \ No newline at end of file diff --git a/scripts/object/tangible/deed/player_house_deed/naboo_house_small_style_02_deed.py b/scripts/object/tangible/deed/player_house_deed/naboo_house_small_style_02_deed.py index ccad8904..07ab9319 100644 --- a/scripts/object/tangible/deed/player_house_deed/naboo_house_small_style_02_deed.py +++ b/scripts/object/tangible/deed/player_house_deed/naboo_house_small_style_02_deed.py @@ -1,4 +1,8 @@ import sys def setup(core, object): + object.setAttachment('radial_filename', 'deeds/structureDeed') + return + +def use(core, actor, object): return \ No newline at end of file diff --git a/scripts/object/tangible/deed/player_house_deed/naboo_house_small_window_deed.py b/scripts/object/tangible/deed/player_house_deed/naboo_house_small_window_deed.py index ccad8904..07ab9319 100644 --- a/scripts/object/tangible/deed/player_house_deed/naboo_house_small_window_deed.py +++ b/scripts/object/tangible/deed/player_house_deed/naboo_house_small_window_deed.py @@ -1,4 +1,8 @@ import sys def setup(core, object): + object.setAttachment('radial_filename', 'deeds/structureDeed') + return + +def use(core, actor, object): return \ No newline at end of file diff --git a/scripts/object/tangible/deed/player_house_deed/player_house_tcg_8_bespin_house_deed.py b/scripts/object/tangible/deed/player_house_deed/player_house_tcg_8_bespin_house_deed.py index ccad8904..07ab9319 100644 --- a/scripts/object/tangible/deed/player_house_deed/player_house_tcg_8_bespin_house_deed.py +++ b/scripts/object/tangible/deed/player_house_deed/player_house_tcg_8_bespin_house_deed.py @@ -1,4 +1,8 @@ import sys def setup(core, object): + object.setAttachment('radial_filename', 'deeds/structureDeed') + return + +def use(core, actor, object): return \ No newline at end of file diff --git a/scripts/object/tangible/deed/player_house_deed/tatooine_house_large_deed.py b/scripts/object/tangible/deed/player_house_deed/tatooine_house_large_deed.py index ccad8904..07ab9319 100644 --- a/scripts/object/tangible/deed/player_house_deed/tatooine_house_large_deed.py +++ b/scripts/object/tangible/deed/player_house_deed/tatooine_house_large_deed.py @@ -1,4 +1,8 @@ import sys def setup(core, object): + object.setAttachment('radial_filename', 'deeds/structureDeed') + return + +def use(core, actor, object): return \ No newline at end of file diff --git a/scripts/object/tangible/deed/player_house_deed/tatooine_house_medium_deed.py b/scripts/object/tangible/deed/player_house_deed/tatooine_house_medium_deed.py index ccad8904..07ab9319 100644 --- a/scripts/object/tangible/deed/player_house_deed/tatooine_house_medium_deed.py +++ b/scripts/object/tangible/deed/player_house_deed/tatooine_house_medium_deed.py @@ -1,4 +1,8 @@ import sys def setup(core, object): + object.setAttachment('radial_filename', 'deeds/structureDeed') + return + +def use(core, actor, object): return \ No newline at end of file diff --git a/scripts/object/tangible/deed/player_house_deed/tatooine_house_small_deed.py b/scripts/object/tangible/deed/player_house_deed/tatooine_house_small_deed.py index ccad8904..07ab9319 100644 --- a/scripts/object/tangible/deed/player_house_deed/tatooine_house_small_deed.py +++ b/scripts/object/tangible/deed/player_house_deed/tatooine_house_small_deed.py @@ -1,4 +1,8 @@ import sys def setup(core, object): + object.setAttachment('radial_filename', 'deeds/structureDeed') + return + +def use(core, actor, object): return \ No newline at end of file diff --git a/scripts/object/tangible/deed/player_house_deed/tatooine_house_small_style_02_deed.py b/scripts/object/tangible/deed/player_house_deed/tatooine_house_small_style_02_deed.py index ccad8904..07ab9319 100644 --- a/scripts/object/tangible/deed/player_house_deed/tatooine_house_small_style_02_deed.py +++ b/scripts/object/tangible/deed/player_house_deed/tatooine_house_small_style_02_deed.py @@ -1,4 +1,8 @@ import sys def setup(core, object): + object.setAttachment('radial_filename', 'deeds/structureDeed') + return + +def use(core, actor, object): return \ No newline at end of file diff --git a/scripts/object/tangible/deed/player_house_deed/tatooine_house_window_small_deed.py b/scripts/object/tangible/deed/player_house_deed/tatooine_house_window_small_deed.py index ccad8904..8f52a919 100644 --- a/scripts/object/tangible/deed/player_house_deed/tatooine_house_window_small_deed.py +++ b/scripts/object/tangible/deed/player_house_deed/tatooine_house_window_small_deed.py @@ -1,4 +1,12 @@ import sys def setup(core, object): + object.setAttachment('radial_filename', 'deeds/structureDeed') + object.setConstructorTemplate('object/building/player/construction/shared_construction_player_house_tatooine_small_style_01.iff') + object.setStructureTemplate('object/tangible/deed/player_house_deed/shared_tatooine_house_window_small_deed.iff') + object.setLotRequirement(2) + object.setBMR(8) + return + +def use(core, actor, object): return \ No newline at end of file diff --git a/scripts/object/tangible/deed/vehicle_deed/barc_speeder_deed.py b/scripts/object/tangible/deed/vehicle_deed/barc_speeder_deed.py index ccad8904..af21fb67 100644 --- a/scripts/object/tangible/deed/vehicle_deed/barc_speeder_deed.py +++ b/scripts/object/tangible/deed/vehicle_deed/barc_speeder_deed.py @@ -1,4 +1,24 @@ import sys def setup(core, object): + object.setAttachment('radial_filename', 'vehicleDeed') + return + +def use(core, actor, object): + datapad = actor.getSlottedObject('datapad') + pcd = core.objectService.createObject('object/intangible/vehicle/shared_barc_speeder_pcd.iff', actor.getPlanet(), actor.getPosition().x, actor.getPosition().z,actor.getPosition().y) + + if datapad and pcd: + + datapad.add(pcd) + core.objectService.destroyObject(object) + + vehicleId = actor.getAttachment('activeVehicleID') + + if vehicleId == None: + vehicle = core.objectService.createObject('object/mobile/vehicle/shared_barc_speeder.iff', actor.getPlanet(), actor.getPosition().x, actor.getPosition().z,actor.getPosition().y) + vehicle.setOwnerId(actor.getObjectID()) + core.simulationService.add(vehicle, vehicle.getPosition().x, vehicle.getPosition().z, True) + actor.setAttachment('activeVehicleID', vehicle.getObjectID()) + return \ No newline at end of file diff --git a/scripts/object/tangible/deed/vehicle_deed/landspeeder_av21_deed.py b/scripts/object/tangible/deed/vehicle_deed/landspeeder_av21_deed.py index ccad8904..a5677b55 100644 --- a/scripts/object/tangible/deed/vehicle_deed/landspeeder_av21_deed.py +++ b/scripts/object/tangible/deed/vehicle_deed/landspeeder_av21_deed.py @@ -1,4 +1,9 @@ import sys def setup(core, object): + object.setAttachment('radial_filename', 'deeds/vehicleDeed') + return + +def use(core, actor, object): + core.mountService.generateVehicle(actor, object, 'object/mobile/vehicle/shared_landspeeder_av21.iff', 'object/intangible/vehicle/shared_landspeeder_av21_pcd.iff') return \ No newline at end of file diff --git a/scripts/object/tangible/deed/vehicle_deed/landspeeder_tantive4_deed.py b/scripts/object/tangible/deed/vehicle_deed/landspeeder_tantive4_deed.py index ccad8904..f031d37f 100644 --- a/scripts/object/tangible/deed/vehicle_deed/landspeeder_tantive4_deed.py +++ b/scripts/object/tangible/deed/vehicle_deed/landspeeder_tantive4_deed.py @@ -1,4 +1,24 @@ import sys def setup(core, object): - return \ No newline at end of file + object.setAttachment('radial_filename', 'deeds/vehicleDeed') + return + +def use(core, actor, object): + datapad = actor.getSlottedObject('datapad') + pcd = core.objectService.createObject('object/intangible/vehicle/shared_landspeeder_tantive4_pcd.iff', actor.getPlanet(), actor.getPosition().x, actor.getPosition().z,actor.getPosition().y) + + if datapad and pcd: + + datapad.add(pcd) + core.objectService.destroyObject(object) + + vehicleId = actor.getAttachment('activeVehicleID') + + if vehicleId == None: + vehicle = core.objectService.createObject('object/mobile/vehicle/shared_landspeeder_tantive4.iff', actor.getPlanet(), actor.getPosition().x, actor.getPosition().z,actor.getPosition().y) + vehicle.setOwnerId(actor.getObjectID()) + core.simulationService.add(vehicle, vehicle.getPosition().x, vehicle.getPosition().z, True) + actor.setAttachment('activeVehicleID', vehicle.getObjectID()) + + return diff --git a/scripts/object/tangible/deed/vehicle_deed/speeder_stap_deed.py b/scripts/object/tangible/deed/vehicle_deed/speeder_stap_deed.py index ccad8904..382ae19c 100644 --- a/scripts/object/tangible/deed/vehicle_deed/speeder_stap_deed.py +++ b/scripts/object/tangible/deed/vehicle_deed/speeder_stap_deed.py @@ -1,4 +1,9 @@ import sys def setup(core, object): + object.setAttachment('radial_filename', 'deeds/vehicleDeed') + return + +def use(core, actor, object): + core.mountService.generateVehicle(actor, object, 'object/mobile/vehicle/shared_stap_speeder.iff', 'object/intangible/vehicle/shared_stap_speeder_pcd.iff') return \ No newline at end of file diff --git a/scripts/object/tangible/deed/vehicle_deed/speederbike_swoop_deed.py b/scripts/object/tangible/deed/vehicle_deed/speederbike_swoop_deed.py index ccad8904..48f0518e 100644 --- a/scripts/object/tangible/deed/vehicle_deed/speederbike_swoop_deed.py +++ b/scripts/object/tangible/deed/vehicle_deed/speederbike_swoop_deed.py @@ -1,4 +1,9 @@ import sys def setup(core, object): + object.setAttachment('radial_filename', 'deeds/vehicleDeed') + return + +def use(core, actor, object): + core.mountService.generateVehicle(actor, object, 'object/mobile/vehicle/shared_speederbike_swoop.iff', 'object/intangible/vehicle/shared_speederbike_swoop_pcd.iff') return \ No newline at end of file diff --git a/scripts/object/tangible/door/shared_thm_kash_zonegate_door_simple.py b/scripts/object/tangible/door/shared_thm_kash_zonegate_door_simple.py new file mode 100644 index 00000000..4bd7f23d --- /dev/null +++ b/scripts/object/tangible/door/shared_thm_kash_zonegate_door_simple.py @@ -0,0 +1,19 @@ +import sys + +from engine.resources.scene import Point3D +from engine.resources.scene import Quaternion + +def setup(core, object): + object.setAttachment('radial_filename', 'a_gate_door') + return + +#TODO: Solve problem with displayed ObjectID from buildout not being proper unsigned int. +#-56576470324869753 rryatt +#-56576470324869754 blackscale +#-56576470324869755 ettyy +#kkowir exit coord -746 18 256 + +def use(core, actor, object): + if object.getObjectID() == long(-56576470324869752): + core.simulationService.transferToPlanet(actor, core.terrainService.getPlanetByName('kashyyyk_dead_forest'), Point3D(float(86.9), float(29.4), float(-473)), Quaternion(float(0), float(0), float(0), float(1)), None) + return \ No newline at end of file diff --git a/scripts/object/tangible/event_perk/lifeday_painting.py b/scripts/object/tangible/event_perk/lifeday_painting.py index ccad8904..5f0dee13 100644 --- a/scripts/object/tangible/event_perk/lifeday_painting.py +++ b/scripts/object/tangible/event_perk/lifeday_painting.py @@ -1,4 +1,6 @@ import sys def setup(core, object): - return \ No newline at end of file + return + + #Family Bonds \ No newline at end of file diff --git a/scripts/object/tangible/food/crafted/drink_breath_of_heaven.py b/scripts/object/tangible/food/crafted/drink_breath_of_heaven.py index ccad8904..eec73983 100644 --- a/scripts/object/tangible/food/crafted/drink_breath_of_heaven.py +++ b/scripts/object/tangible/food/crafted/drink_breath_of_heaven.py @@ -1,4 +1,5 @@ import sys def setup(core, object): - return \ No newline at end of file + object.setAttachment('radial_filename', 'shared_drink_breath_of_heaven') + return diff --git a/scripts/object/tangible/food/quest/dessert_luilris_mushroom_pie.py b/scripts/object/tangible/food/quest/dessert_luilris_mushroom_pie.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/food/quest/dessert_luilris_mushroom_pie.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/food/quest/drink_warrl_surprise.py b/scripts/object/tangible/food/quest/drink_warrl_surprise.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/food/quest/drink_warrl_surprise.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/furniture/decorative/30th_anniversary_painting_01.py b/scripts/object/tangible/furniture/decorative/30th_anniversary_painting_01.py index ccad8904..e125d99d 100644 --- a/scripts/object/tangible/furniture/decorative/30th_anniversary_painting_01.py +++ b/scripts/object/tangible/furniture/decorative/30th_anniversary_painting_01.py @@ -1,4 +1,6 @@ import sys def setup(core, object): - return \ No newline at end of file + return + + #30th Anniversary Bash \ No newline at end of file diff --git a/scripts/object/tangible/furniture/decorative/event_lifeday05_painting_01.py b/scripts/object/tangible/furniture/decorative/event_lifeday05_painting_01.py index ccad8904..c424cded 100644 --- a/scripts/object/tangible/furniture/decorative/event_lifeday05_painting_01.py +++ b/scripts/object/tangible/furniture/decorative/event_lifeday05_painting_01.py @@ -1,4 +1,6 @@ import sys def setup(core, object): - return \ No newline at end of file + return + + #Pilgramige \ No newline at end of file diff --git a/scripts/object/tangible/furniture/decorative/event_lifeday05_painting_02.py b/scripts/object/tangible/furniture/decorative/event_lifeday05_painting_02.py index ccad8904..201a21dc 100644 --- a/scripts/object/tangible/furniture/decorative/event_lifeday05_painting_02.py +++ b/scripts/object/tangible/furniture/decorative/event_lifeday05_painting_02.py @@ -1,4 +1,6 @@ import sys def setup(core, object): - return \ No newline at end of file + return + + #Memories Past \ No newline at end of file diff --git a/scripts/object/tangible/furniture/decorative/event_lifeday05_painting_03.py b/scripts/object/tangible/furniture/decorative/event_lifeday05_painting_03.py index ccad8904..ba95aa3f 100644 --- a/scripts/object/tangible/furniture/decorative/event_lifeday05_painting_03.py +++ b/scripts/object/tangible/furniture/decorative/event_lifeday05_painting_03.py @@ -1,4 +1,6 @@ import sys def setup(core, object): - return \ No newline at end of file + return + + #Triumph \ No newline at end of file diff --git a/scripts/object/tangible/furniture/decorative/event_lifeday07_painting_01.py b/scripts/object/tangible/furniture/decorative/event_lifeday07_painting_01.py index ccad8904..9bdba6fa 100644 --- a/scripts/object/tangible/furniture/decorative/event_lifeday07_painting_01.py +++ b/scripts/object/tangible/furniture/decorative/event_lifeday07_painting_01.py @@ -1,4 +1,6 @@ import sys def setup(core, object): - return \ No newline at end of file + return + + #No name, Yoda Wookiee \ No newline at end of file diff --git a/scripts/object/tangible/furniture/decorative/imperial_community_painting_2008.py b/scripts/object/tangible/furniture/decorative/imperial_community_painting_2008.py index ccad8904..527db59b 100644 --- a/scripts/object/tangible/furniture/decorative/imperial_community_painting_2008.py +++ b/scripts/object/tangible/furniture/decorative/imperial_community_painting_2008.py @@ -1,4 +1,6 @@ import sys def setup(core, object): - return \ No newline at end of file + return + + #United in our Cause \ No newline at end of file diff --git a/scripts/object/tangible/furniture/decorative/pub29_corellia_painting.py b/scripts/object/tangible/furniture/decorative/pub29_corellia_painting.py index ccad8904..2a16ecb0 100644 --- a/scripts/object/tangible/furniture/decorative/pub29_corellia_painting.py +++ b/scripts/object/tangible/furniture/decorative/pub29_corellia_painting.py @@ -1,4 +1,6 @@ import sys def setup(core, object): - return \ No newline at end of file + return + + #Mystic Corellia \ No newline at end of file diff --git a/scripts/object/tangible/furniture/decorative/pub29_mustafar_painting.py b/scripts/object/tangible/furniture/decorative/pub29_mustafar_painting.py index ccad8904..873bc07e 100644 --- a/scripts/object/tangible/furniture/decorative/pub29_mustafar_painting.py +++ b/scripts/object/tangible/furniture/decorative/pub29_mustafar_painting.py @@ -1,4 +1,6 @@ import sys def setup(core, object): - return \ No newline at end of file + return + + #It Came From Mustafar \ No newline at end of file diff --git a/scripts/object/tangible/furniture/decorative/pub29_ryatt_painting.py b/scripts/object/tangible/furniture/decorative/pub29_ryatt_painting.py index ccad8904..ad20ddcc 100644 --- a/scripts/object/tangible/furniture/decorative/pub29_ryatt_painting.py +++ b/scripts/object/tangible/furniture/decorative/pub29_ryatt_painting.py @@ -1,4 +1,6 @@ import sys def setup(core, object): - return \ No newline at end of file + return + + #Survive the Ryatt Trail \ No newline at end of file diff --git a/scripts/object/tangible/furniture/decorative/rebel_community_painting_2008.py b/scripts/object/tangible/furniture/decorative/rebel_community_painting_2008.py index ccad8904..104d57f1 100644 --- a/scripts/object/tangible/furniture/decorative/rebel_community_painting_2008.py +++ b/scripts/object/tangible/furniture/decorative/rebel_community_painting_2008.py @@ -1,4 +1,6 @@ import sys def setup(core, object): - return \ No newline at end of file + return + + #The March to Restuss \ No newline at end of file diff --git a/scripts/object/tangible/furniture/lifeday/lifeday_painting_2010_s01.py b/scripts/object/tangible/furniture/lifeday/lifeday_painting_2010_s01.py index ccad8904..343b1b69 100644 --- a/scripts/object/tangible/furniture/lifeday/lifeday_painting_2010_s01.py +++ b/scripts/object/tangible/furniture/lifeday/lifeday_painting_2010_s01.py @@ -1,4 +1,6 @@ import sys def setup(core, object): - return \ No newline at end of file + return + + #courage \ No newline at end of file diff --git a/scripts/object/tangible/furniture/lifeday/lifeday_painting_2010_s02.py b/scripts/object/tangible/furniture/lifeday/lifeday_painting_2010_s02.py index ccad8904..dac3bf8f 100644 --- a/scripts/object/tangible/furniture/lifeday/lifeday_painting_2010_s02.py +++ b/scripts/object/tangible/furniture/lifeday/lifeday_painting_2010_s02.py @@ -1,4 +1,6 @@ import sys def setup(core, object): - return \ No newline at end of file + return + + #Morality \ No newline at end of file diff --git a/scripts/object/tangible/furniture/lifeday/lifeday_painting_2010_s03.py b/scripts/object/tangible/furniture/lifeday/lifeday_painting_2010_s03.py index ccad8904..b3542866 100644 --- a/scripts/object/tangible/furniture/lifeday/lifeday_painting_2010_s03.py +++ b/scripts/object/tangible/furniture/lifeday/lifeday_painting_2010_s03.py @@ -1,4 +1,6 @@ import sys def setup(core, object): - return \ No newline at end of file + return + + #Loyalty \ No newline at end of file diff --git a/scripts/object/tangible/furniture/lifeday/lifeday_painting_2010_s04.py b/scripts/object/tangible/furniture/lifeday/lifeday_painting_2010_s04.py index ccad8904..1319171d 100644 --- a/scripts/object/tangible/furniture/lifeday/lifeday_painting_2010_s04.py +++ b/scripts/object/tangible/furniture/lifeday/lifeday_painting_2010_s04.py @@ -1,4 +1,6 @@ import sys def setup(core, object): - return \ No newline at end of file + return + + #Compassion \ No newline at end of file diff --git a/scripts/object/tangible/furniture/lifeday/lifeday_painting_s01.py b/scripts/object/tangible/furniture/lifeday/lifeday_painting_s01.py index ccad8904..c089819f 100644 --- a/scripts/object/tangible/furniture/lifeday/lifeday_painting_s01.py +++ b/scripts/object/tangible/furniture/lifeday/lifeday_painting_s01.py @@ -1,4 +1,6 @@ import sys def setup(core, object): - return \ No newline at end of file + return + + #Lifeday Painting (Red Robe) \ No newline at end of file diff --git a/scripts/object/tangible/furniture/lifeday/lifeday_painting_s02.py b/scripts/object/tangible/furniture/lifeday/lifeday_painting_s02.py index ccad8904..72a1a7ef 100644 --- a/scripts/object/tangible/furniture/lifeday/lifeday_painting_s02.py +++ b/scripts/object/tangible/furniture/lifeday/lifeday_painting_s02.py @@ -1,4 +1,6 @@ import sys def setup(core, object): - return \ No newline at end of file + return + + #Red Robe Family \ No newline at end of file diff --git a/scripts/object/tangible/furniture/technical/guild_registry_initial.py b/scripts/object/tangible/furniture/technical/guild_registry_initial.py index ccad8904..25ce3c98 100644 --- a/scripts/object/tangible/furniture/technical/guild_registry_initial.py +++ b/scripts/object/tangible/furniture/technical/guild_registry_initial.py @@ -1,4 +1,5 @@ import sys def setup(core, object): + object.setAttachment('radial_filename', 'object/guild_registry') return \ No newline at end of file diff --git a/scripts/object/tangible/holiday/life_day/main_lifeday_tree.py b/scripts/object/tangible/holiday/life_day/main_lifeday_tree.py index ccad8904..f98db1aa 100644 --- a/scripts/object/tangible/holiday/life_day/main_lifeday_tree.py +++ b/scripts/object/tangible/holiday/life_day/main_lifeday_tree.py @@ -1,4 +1,5 @@ import sys def setup(core, object): - return \ No newline at end of file + object.setAttachment('radial_filename', 'holidays/lifeday/main_lifeday_tree') + return diff --git a/scripts/object/tangible/item/quest/crowd_pleaser/dance_reward.py b/scripts/object/tangible/item/quest/crowd_pleaser/dance_reward.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/item/quest/crowd_pleaser/dance_reward.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/item/quest/crowd_pleaser/music_reward.py b/scripts/object/tangible/item/quest/crowd_pleaser/music_reward.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/item/quest/crowd_pleaser/music_reward.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/item/quest/force_sensitive/bacta_tank.py b/scripts/object/tangible/item/quest/force_sensitive/bacta_tank.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/item/quest/force_sensitive/bacta_tank.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/item/quest/force_sensitive/fs_buff_item.py b/scripts/object/tangible/item/quest/force_sensitive/fs_buff_item.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/item/quest/force_sensitive/fs_buff_item.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/item/quest/force_sensitive/fs_craft_puzzle_analyzer.py b/scripts/object/tangible/item/quest/force_sensitive/fs_craft_puzzle_analyzer.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/item/quest/force_sensitive/fs_craft_puzzle_analyzer.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/item/quest/force_sensitive/fs_craft_puzzle_calibrator.py b/scripts/object/tangible/item/quest/force_sensitive/fs_craft_puzzle_calibrator.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/item/quest/force_sensitive/fs_craft_puzzle_calibrator.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/item/quest/force_sensitive/fs_craft_puzzle_config_processor.py b/scripts/object/tangible/item/quest/force_sensitive/fs_craft_puzzle_config_processor.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/item/quest/force_sensitive/fs_craft_puzzle_config_processor.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/item/quest/force_sensitive/fs_craft_puzzle_decryption_chip.py b/scripts/object/tangible/item/quest/force_sensitive/fs_craft_puzzle_decryption_chip.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/item/quest/force_sensitive/fs_craft_puzzle_decryption_chip.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/item/quest/force_sensitive/fs_craft_puzzle_gyro_receiver.py b/scripts/object/tangible/item/quest/force_sensitive/fs_craft_puzzle_gyro_receiver.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/item/quest/force_sensitive/fs_craft_puzzle_gyro_receiver.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/item/quest/force_sensitive/fs_craft_puzzle_signal_amp.py b/scripts/object/tangible/item/quest/force_sensitive/fs_craft_puzzle_signal_amp.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/item/quest/force_sensitive/fs_craft_puzzle_signal_amp.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/item/quest/force_sensitive/fs_craft_puzzle_solid_state_array.py b/scripts/object/tangible/item/quest/force_sensitive/fs_craft_puzzle_solid_state_array.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/item/quest/force_sensitive/fs_craft_puzzle_solid_state_array.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/item/quest/force_sensitive/fs_craft_puzzle_terminal.py b/scripts/object/tangible/item/quest/force_sensitive/fs_craft_puzzle_terminal.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/item/quest/force_sensitive/fs_craft_puzzle_terminal.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/item/quest/force_sensitive/fs_crafting4_computer_core.py b/scripts/object/tangible/item/quest/force_sensitive/fs_crafting4_computer_core.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/item/quest/force_sensitive/fs_crafting4_computer_core.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/item/quest/force_sensitive/fs_crafting4_downed_satellite.py b/scripts/object/tangible/item/quest/force_sensitive/fs_crafting4_downed_satellite.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/item/quest/force_sensitive/fs_crafting4_downed_satellite.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/item/quest/force_sensitive/fs_crystal_force.py b/scripts/object/tangible/item/quest/force_sensitive/fs_crystal_force.py new file mode 100644 index 00000000..0e442157 --- /dev/null +++ b/scripts/object/tangible/item/quest/force_sensitive/fs_crystal_force.py @@ -0,0 +1,9 @@ +import sys + +def setup(core, object): + object.setStfFilename('static_item_n') + object.setStfName('item_force_crystal_04_02') + object.setDetailFilename('static_item_d') + object.setDetailName('item_force_crystal_04_02') + object.setAttachment('radial_filename', 'item/item') + return diff --git a/scripts/object/tangible/item/quest/force_sensitive/fs_crystal_health.py b/scripts/object/tangible/item/quest/force_sensitive/fs_crystal_health.py new file mode 100644 index 00000000..fd74930e --- /dev/null +++ b/scripts/object/tangible/item/quest/force_sensitive/fs_crystal_health.py @@ -0,0 +1,9 @@ +import sys + +def setup(core, object): + object.setStfFilename('static_item_n') + object.setStfName('item_force_crystal_04_01') + object.setDetailFilename('static_item_d') + object.setDetailName('item_force_crystal_04_01') + object.setAttachment('radial_filename', 'item/item') + return diff --git a/scripts/object/tangible/item/quest/force_sensitive/fs_medic_puzzle_heal_pack.py b/scripts/object/tangible/item/quest/force_sensitive/fs_medic_puzzle_heal_pack.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/item/quest/force_sensitive/fs_medic_puzzle_heal_pack.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/item/quest/force_sensitive/fs_mellichae_cyborg_arm.py b/scripts/object/tangible/item/quest/force_sensitive/fs_mellichae_cyborg_arm.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/item/quest/force_sensitive/fs_mellichae_cyborg_arm.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/item/quest/force_sensitive/fs_reflex_supply_crate.py b/scripts/object/tangible/item/quest/force_sensitive/fs_reflex_supply_crate.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/item/quest/force_sensitive/fs_reflex_supply_crate.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/item/quest/force_sensitive/fs_sculpture_1.py b/scripts/object/tangible/item/quest/force_sensitive/fs_sculpture_1.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/item/quest/force_sensitive/fs_sculpture_1.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/item/quest/force_sensitive/fs_sculpture_2.py b/scripts/object/tangible/item/quest/force_sensitive/fs_sculpture_2.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/item/quest/force_sensitive/fs_sculpture_2.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/item/quest/force_sensitive/fs_sculpture_3.py b/scripts/object/tangible/item/quest/force_sensitive/fs_sculpture_3.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/item/quest/force_sensitive/fs_sculpture_3.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/item/quest/force_sensitive/fs_sculpture_4.py b/scripts/object/tangible/item/quest/force_sensitive/fs_sculpture_4.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/item/quest/force_sensitive/fs_sculpture_4.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/item/quest/force_sensitive/fs_village_bannerpole_s01.py b/scripts/object/tangible/item/quest/force_sensitive/fs_village_bannerpole_s01.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/item/quest/force_sensitive/fs_village_bannerpole_s01.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/item/quest/hero_of_tatooine/explosives.py b/scripts/object/tangible/item/quest/hero_of_tatooine/explosives.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/item/quest/hero_of_tatooine/explosives.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/item/quest/hero_of_tatooine/explosives_crate.py b/scripts/object/tangible/item/quest/hero_of_tatooine/explosives_crate.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/item/quest/hero_of_tatooine/explosives_crate.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/item/rare_loot_chest_1.py b/scripts/object/tangible/item/rare_loot_chest_1.py index ccad8904..4b7795de 100644 --- a/scripts/object/tangible/item/rare_loot_chest_1.py +++ b/scripts/object/tangible/item/rare_loot_chest_1.py @@ -1,4 +1,5 @@ import sys def setup(core, object): + object.setAttachment('radial_filename', 'item/lootchest') return \ No newline at end of file diff --git a/scripts/object/tangible/item/rare_loot_chest_2.py b/scripts/object/tangible/item/rare_loot_chest_2.py index ccad8904..4b7795de 100644 --- a/scripts/object/tangible/item/rare_loot_chest_2.py +++ b/scripts/object/tangible/item/rare_loot_chest_2.py @@ -1,4 +1,5 @@ import sys def setup(core, object): + object.setAttachment('radial_filename', 'item/lootchest') return \ No newline at end of file diff --git a/scripts/object/tangible/item/rare_loot_chest_3.py b/scripts/object/tangible/item/rare_loot_chest_3.py index ccad8904..4b7795de 100644 --- a/scripts/object/tangible/item/rare_loot_chest_3.py +++ b/scripts/object/tangible/item/rare_loot_chest_3.py @@ -1,4 +1,5 @@ import sys def setup(core, object): + object.setAttachment('radial_filename', 'item/lootchest') return \ No newline at end of file diff --git a/scripts/object/tangible/loot/creature_loot/collections/item_lifeday_gift_other_01_01.py b/scripts/object/tangible/loot/creature_loot/collections/item_lifeday_gift_other_01_01.py new file mode 100644 index 00000000..6f7c8887 --- /dev/null +++ b/scripts/object/tangible/loot/creature_loot/collections/item_lifeday_gift_other_01_01.py @@ -0,0 +1,10 @@ +import sys + +def setup(core, object): + object.setStfName('item_lifeday_gift_other_01_01') + object.setDetailName('item_lifeday_gift_other_01_01') + object.setCustomName('Life Day Gift Box For A Friend') + object.setIntAttribute('volume', 1) + object.setIntAttribute('tier', 2) + object.setAttachment('radial_filename', 'holidays/lifeday/lifeday_gift') + return \ No newline at end of file diff --git a/scripts/object/tangible/loot/creature_loot/collections/item_lifeday_gift_self_01_01.py b/scripts/object/tangible/loot/creature_loot/collections/item_lifeday_gift_self_01_01.py new file mode 100644 index 00000000..273b89dc --- /dev/null +++ b/scripts/object/tangible/loot/creature_loot/collections/item_lifeday_gift_self_01_01.py @@ -0,0 +1,11 @@ +import sys + +def setup(core, object): + object.setStfName('item_lifeday_gift_self_01_01') + object.setDetailName('item_lifeday_gift_self_01_01') + object.setCustomName('Life Day Gift Box') + object.setIntAttribute('volume', 1) + object.setIntAttribute('no_trade', 1) + object.setIntAttribute('tier', 2) + object.setAttachment('radial_filename', 'holidays/lifeday/lifeday_gift') + return \ No newline at end of file diff --git a/scripts/object/tangible/loot/generic_usable/item_bounty_hunter_clicky_01_02.py b/scripts/object/tangible/loot/generic_usable/item_bounty_hunter_clicky_01_02.py new file mode 100644 index 00000000..22d032c5 --- /dev/null +++ b/scripts/object/tangible/loot/generic_usable/item_bounty_hunter_clicky_01_02.py @@ -0,0 +1,9 @@ +import sys + +def setup(core, object): + object.setStfFilename('static_item_n') + object.setStfName('item_bounty_hunter_clicky_01_02') + object.setDetailFilename('static_item_d') + object.setDetailName('item_bounty_hunter_clicky_01_02') + object.setStringAttribute('class_required', 'Bounty Hunter') + return diff --git a/scripts/object/tangible/loot/generic_usable/item_commando_clicky_01_02.py b/scripts/object/tangible/loot/generic_usable/item_commando_clicky_01_02.py new file mode 100644 index 00000000..5041ee3b --- /dev/null +++ b/scripts/object/tangible/loot/generic_usable/item_commando_clicky_01_02.py @@ -0,0 +1,9 @@ +import sys + +def setup(core, object): + object.setStfFilename('static_item_n') + object.setStfName('item_commando_clicky_01_02') + object.setDetailFilename('static_item_d') + object.setDetailName('item_commando_clicky_01_02') + object.setStringAttribute('class_required', 'Commando') + return diff --git a/scripts/object/tangible/loot/generic_usable/item_force_sensitive_clicky_01_02.py b/scripts/object/tangible/loot/generic_usable/item_force_sensitive_clicky_01_02.py new file mode 100644 index 00000000..e6745838 --- /dev/null +++ b/scripts/object/tangible/loot/generic_usable/item_force_sensitive_clicky_01_02.py @@ -0,0 +1,9 @@ +import sys + +def setup(core, object): + object.setStfFilename('static_item_n') + object.setStfName('item_force_sensitive_clicky_01_02') + object.setDetailFilename('static_item_d') + object.setDetailName('item_force_sensitive_clicky_01_02') + object.setStringAttribute('class_required', 'Jedi') + return diff --git a/scripts/object/tangible/loot/generic_usable/item_medic_clicky_01_02.py b/scripts/object/tangible/loot/generic_usable/item_medic_clicky_01_02.py new file mode 100644 index 00000000..a9a7e24b --- /dev/null +++ b/scripts/object/tangible/loot/generic_usable/item_medic_clicky_01_02.py @@ -0,0 +1,9 @@ +import sys + +def setup(core, object): + object.setStfFilename('static_item_n') + object.setStfName('item_medic_clicky_01_02') + object.setDetailFilename('static_item_d') + object.setDetailName('item_medic_clicky_01_02') + object.setStringAttribute('class_required', 'Medic') + return diff --git a/scripts/object/tangible/loot/generic_usable/item_officer_clicky_01_02.py b/scripts/object/tangible/loot/generic_usable/item_officer_clicky_01_02.py new file mode 100644 index 00000000..b5797a7d --- /dev/null +++ b/scripts/object/tangible/loot/generic_usable/item_officer_clicky_01_02.py @@ -0,0 +1,9 @@ +import sys + +def setup(core, object): + object.setStfFilename('static_item_n') + object.setStfName('item_officer_clicky_01_02') + object.setDetailFilename('static_item_d') + object.setDetailName('item_officer_clicky_01_02') + object.setStringAttribute('class_required', 'Officer') + return diff --git a/scripts/object/tangible/loot/generic_usable/item_smuggler_clicky_01_02.py b/scripts/object/tangible/loot/generic_usable/item_smuggler_clicky_01_02.py new file mode 100644 index 00000000..65b88834 --- /dev/null +++ b/scripts/object/tangible/loot/generic_usable/item_smuggler_clicky_01_02.py @@ -0,0 +1,9 @@ +import sys + +def setup(core, object): + object.setStfFilename('static_item_n') + object.setStfName('item_smuggler_clicky_01_02') + object.setDetailFilename('static_item_d') + object.setDetailName('item_smuggler_clicky_01_02') + object.setStringAttribute('class_required', 'Smuggler') + return diff --git a/scripts/object/tangible/loot/generic_usable/item_spy_clicky_01_02.p b/scripts/object/tangible/loot/generic_usable/item_spy_clicky_01_02.p new file mode 100644 index 00000000..dd1385a7 --- /dev/null +++ b/scripts/object/tangible/loot/generic_usable/item_spy_clicky_01_02.p @@ -0,0 +1,9 @@ +import sys + +def setup(core, object): + object.setStfFilename('static_item_n') + object.setStfName('item_spy_clicky_01_02') + object.setDetailFilename('static_item_d') + object.setDetailName('item_spy_clicky_01_02') + object.setStringAttribute('class_required', 'Spy') + return diff --git a/scripts/object/tangible/loot/generic_usable/stim_syringe_generic.py b/scripts/object/tangible/loot/generic_usable/stim_syringe_generic.py index ccad8904..786a488c 100644 --- a/scripts/object/tangible/loot/generic_usable/stim_syringe_generic.py +++ b/scripts/object/tangible/loot/generic_usable/stim_syringe_generic.py @@ -1,4 +1,5 @@ import sys def setup(core, object): + object.setAttachment('radial_filename', 'object/usable') return \ No newline at end of file diff --git a/scripts/object/tangible/loot/mustafar/must_painting_04.py b/scripts/object/tangible/loot/mustafar/must_painting_04.py index ccad8904..cefff8bc 100644 --- a/scripts/object/tangible/loot/mustafar/must_painting_04.py +++ b/scripts/object/tangible/loot/mustafar/must_painting_04.py @@ -1,4 +1,6 @@ import sys def setup(core, object): - return \ No newline at end of file + return + +#Resource, RLS name Living Canals \ No newline at end of file diff --git a/scripts/object/tangible/loot/mustafar/old_republic_tech_02.py b/scripts/object/tangible/loot/mustafar/old_republic_tech_02.py index ccad8904..753fa78b 100644 --- a/scripts/object/tangible/loot/mustafar/old_republic_tech_02.py +++ b/scripts/object/tangible/loot/mustafar/old_republic_tech_02.py @@ -1,4 +1,13 @@ import sys def setup(core, object): + object.setAttachment('radial_filename', 'object/usable') + object.setStfFilename('static_item_n') + object.setStfName('item_tow_proc_generic_03_01') + object.setDetailFilename('static_item_d') + object.setDetailName('item_tow_proc_generic_03_01') + return + +def use(core, actor, object): + core.buffService.addBuffToCreature(actor, 'towPoisonResistAbsorb_3', actor) return \ No newline at end of file diff --git a/scripts/object/tangible/loot/quest/2h_sword_scythe_schematic.py b/scripts/object/tangible/loot/quest/2h_sword_scythe_schematic.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/loot/quest/2h_sword_scythe_schematic.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/loot/quest/anakin_helmet.py b/scripts/object/tangible/loot/quest/anakin_helmet.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/loot/quest/anakin_helmet.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/loot/quest/ardanium_ii.py b/scripts/object/tangible/loot/quest/ardanium_ii.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/loot/quest/ardanium_ii.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/loot/quest/bantha_doll.py b/scripts/object/tangible/loot/quest/bantha_doll.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/loot/quest/bantha_doll.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/loot/quest/broken_bottle.py b/scripts/object/tangible/loot/quest/broken_bottle.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/loot/quest/broken_bottle.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/loot/quest/carved_stone.py b/scripts/object/tangible/loot/quest/carved_stone.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/loot/quest/carved_stone.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/loot/quest/corellia_meatlumps_act1_story.py b/scripts/object/tangible/loot/quest/corellia_meatlumps_act1_story.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/loot/quest/corellia_meatlumps_act1_story.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/loot/quest/crude_stone.py b/scripts/object/tangible/loot/quest/crude_stone.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/loot/quest/crude_stone.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/loot/quest/decomposed_foot.py b/scripts/object/tangible/loot/quest/decomposed_foot.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/loot/quest/decomposed_foot.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/loot/quest/decomposed_hand.py b/scripts/object/tangible/loot/quest/decomposed_hand.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/loot/quest/decomposed_hand.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/loot/quest/decomposed_skull.py b/scripts/object/tangible/loot/quest/decomposed_skull.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/loot/quest/decomposed_skull.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/loot/quest/droid_brain_anakin.py b/scripts/object/tangible/loot/quest/droid_brain_anakin.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/loot/quest/droid_brain_anakin.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/loot/quest/edb_quest_heirloom_bowl.py b/scripts/object/tangible/loot/quest/edb_quest_heirloom_bowl.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/loot/quest/edb_quest_heirloom_bowl.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/loot/quest/endrine.py b/scripts/object/tangible/loot/quest/endrine.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/loot/quest/endrine.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/loot/quest/ep3/varactyl_egg.py b/scripts/object/tangible/loot/quest/ep3/varactyl_egg.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/loot/quest/ep3/varactyl_egg.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/loot/quest/ep3_forest_cure.py b/scripts/object/tangible/loot/quest/ep3_forest_cure.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/loot/quest/ep3_forest_cure.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/loot/quest/ep3_healing_resin.py b/scripts/object/tangible/loot/quest/ep3_healing_resin.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/loot/quest/ep3_healing_resin.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/loot/quest/force_sensitive/camp_frequency_datapad.py b/scripts/object/tangible/loot/quest/force_sensitive/camp_frequency_datapad.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/loot/quest/force_sensitive/camp_frequency_datapad.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/loot/quest/force_sensitive/camp_remote.py b/scripts/object/tangible/loot/quest/force_sensitive/camp_remote.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/loot/quest/force_sensitive/camp_remote.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/loot/quest/force_sensitive/camp_waypoint_datapad.py b/scripts/object/tangible/loot/quest/force_sensitive/camp_waypoint_datapad.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/loot/quest/force_sensitive/camp_waypoint_datapad.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/loot/quest/force_sensitive/sharred_force_crystal.py b/scripts/object/tangible/loot/quest/force_sensitive/sharred_force_crystal.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/loot/quest/force_sensitive/sharred_force_crystal.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/loot/quest/force_sensitive/sharred_waypoint_datapad.py b/scripts/object/tangible/loot/quest/force_sensitive/sharred_waypoint_datapad.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/loot/quest/force_sensitive/sharred_waypoint_datapad.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/loot/quest/force_sensitive/theater_datapad.py b/scripts/object/tangible/loot/quest/force_sensitive/theater_datapad.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/loot/quest/force_sensitive/theater_datapad.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/loot/quest/frn_quest_dant_skull_bol_01.py b/scripts/object/tangible/loot/quest/frn_quest_dant_skull_bol_01.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/loot/quest/frn_quest_dant_skull_bol_01.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/loot/quest/frn_quest_krayt_skull_01.py b/scripts/object/tangible/loot/quest/frn_quest_krayt_skull_01.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/loot/quest/frn_quest_krayt_skull_01.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/loot/quest/hero_of_tatooine/mark_altruism.py b/scripts/object/tangible/loot/quest/hero_of_tatooine/mark_altruism.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/loot/quest/hero_of_tatooine/mark_altruism.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/loot/quest/hero_of_tatooine/mark_courage.py b/scripts/object/tangible/loot/quest/hero_of_tatooine/mark_courage.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/loot/quest/hero_of_tatooine/mark_courage.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/loot/quest/hero_of_tatooine/mark_honor.py b/scripts/object/tangible/loot/quest/hero_of_tatooine/mark_honor.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/loot/quest/hero_of_tatooine/mark_honor.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/loot/quest/hero_of_tatooine/mark_intellect.py b/scripts/object/tangible/loot/quest/hero_of_tatooine/mark_intellect.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/loot/quest/hero_of_tatooine/mark_intellect.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/loot/quest/hero_of_tatooine/squill_skull.py b/scripts/object/tangible/loot/quest/hero_of_tatooine/squill_skull.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/loot/quest/hero_of_tatooine/squill_skull.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/loot/quest/hero_of_tatooine/squill_skull_pile.py b/scripts/object/tangible/loot/quest/hero_of_tatooine/squill_skull_pile.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/loot/quest/hero_of_tatooine/squill_skull_pile.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/loot/quest/huff_quest_borvos_money.py b/scripts/object/tangible/loot/quest/huff_quest_borvos_money.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/loot/quest/huff_quest_borvos_money.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/loot/quest/huff_quest_corsec_badge.py b/scripts/object/tangible/loot/quest/huff_quest_corsec_badge.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/loot/quest/huff_quest_corsec_badge.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/loot/quest/huff_quest_top_secret_documents.py b/scripts/object/tangible/loot/quest/huff_quest_top_secret_documents.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/loot/quest/huff_quest_top_secret_documents.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/loot/quest/hvy_disruptor_cannon_broken.py b/scripts/object/tangible/loot/quest/hvy_disruptor_cannon_broken.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/loot/quest/hvy_disruptor_cannon_broken.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/loot/quest/lance_nightsister_schematic.py b/scripts/object/tangible/loot/quest/lance_nightsister_schematic.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/loot/quest/lance_nightsister_schematic.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/loot/quest/levelup_lifeday_orb.py b/scripts/object/tangible/loot/quest/levelup_lifeday_orb.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/loot/quest/levelup_lifeday_orb.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/loot/quest/lifeday_orb.py b/scripts/object/tangible/loot/quest/lifeday_orb.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/loot/quest/lifeday_orb.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/loot/quest/lost_squadron_core_1.py b/scripts/object/tangible/loot/quest/lost_squadron_core_1.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/loot/quest/lost_squadron_core_1.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/loot/quest/lost_squadron_core_2.py b/scripts/object/tangible/loot/quest/lost_squadron_core_2.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/loot/quest/lost_squadron_core_2.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/loot/quest/lost_squadron_core_3.py b/scripts/object/tangible/loot/quest/lost_squadron_core_3.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/loot/quest/lost_squadron_core_3.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/loot/quest/lost_squadron_core_4.py b/scripts/object/tangible/loot/quest/lost_squadron_core_4.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/loot/quest/lost_squadron_core_4.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/loot/quest/lost_squadron_core_5.py b/scripts/object/tangible/loot/quest/lost_squadron_core_5.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/loot/quest/lost_squadron_core_5.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/loot/quest/lost_squadron_core_6.py b/scripts/object/tangible/loot/quest/lost_squadron_core_6.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/loot/quest/lost_squadron_core_6.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/loot/quest/mind_pod_blood.py b/scripts/object/tangible/loot/quest/mind_pod_blood.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/loot/quest/mind_pod_blood.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/loot/quest/mind_pod_brain.py b/scripts/object/tangible/loot/quest/mind_pod_brain.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/loot/quest/mind_pod_brain.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/loot/quest/mind_pod_eye.py b/scripts/object/tangible/loot/quest/mind_pod_eye.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/loot/quest/mind_pod_eye.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/loot/quest/mind_pod_guts.py b/scripts/object/tangible/loot/quest/mind_pod_guts.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/loot/quest/mind_pod_guts.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/loot/quest/mind_pod_parasites.py b/scripts/object/tangible/loot/quest/mind_pod_parasites.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/loot/quest/mind_pod_parasites.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/loot/quest/mind_pod_sac.py b/scripts/object/tangible/loot/quest/mind_pod_sac.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/loot/quest/mind_pod_sac.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/loot/quest/mind_pod_slime.py b/scripts/object/tangible/loot/quest/mind_pod_slime.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/loot/quest/mind_pod_slime.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/loot/quest/mind_pod_stomach.py b/scripts/object/tangible/loot/quest/mind_pod_stomach.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/loot/quest/mind_pod_stomach.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/loot/quest/myyydril_sword_quest_01.py b/scripts/object/tangible/loot/quest/myyydril_sword_quest_01.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/loot/quest/myyydril_sword_quest_01.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/loot/quest/naktra_crystal.py b/scripts/object/tangible/loot/quest/naktra_crystal.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/loot/quest/naktra_crystal.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/loot/quest/nova_orion/stuffed_star_destroyer.py b/scripts/object/tangible/loot/quest/nova_orion/stuffed_star_destroyer.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/loot/quest/nova_orion/stuffed_star_destroyer.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/loot/quest/nova_orion/stuffed_star_destroyer_quest_item.py b/scripts/object/tangible/loot/quest/nova_orion/stuffed_star_destroyer_quest_item.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/loot/quest/nova_orion/stuffed_star_destroyer_quest_item.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/loot/quest/npe/npe_artisan_metal_plate.py b/scripts/object/tangible/loot/quest/npe/npe_artisan_metal_plate.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/loot/quest/npe/npe_artisan_metal_plate.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/loot/quest/npe_journal.py b/scripts/object/tangible/loot/quest/npe_journal.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/loot/quest/npe_journal.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/loot/quest/nym_droid_memory_chip.py b/scripts/object/tangible/loot/quest/nym_droid_memory_chip.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/loot/quest/nym_droid_memory_chip.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/loot/quest/nym_filtered_gas.py b/scripts/object/tangible/loot/quest/nym_filtered_gas.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/loot/quest/nym_filtered_gas.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/loot/quest/nym_hard_drive.py b/scripts/object/tangible/loot/quest/nym_hard_drive.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/loot/quest/nym_hard_drive.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/loot/quest/nym_imggc.py b/scripts/object/tangible/loot/quest/nym_imggc.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/loot/quest/nym_imggc.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/loot/quest/ostrine.py b/scripts/object/tangible/loot/quest/ostrine.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/loot/quest/ostrine.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/loot/quest/poi_tree_spawner.py b/scripts/object/tangible/loot/quest/poi_tree_spawner.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/loot/quest/poi_tree_spawner.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/loot/quest/prolog_content_science_datapad.py b/scripts/object/tangible/loot/quest/prolog_content_science_datapad.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/loot/quest/prolog_content_science_datapad.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/loot/quest/quest_item_goru_calling_card.py b/scripts/object/tangible/loot/quest/quest_item_goru_calling_card.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/loot/quest/quest_item_goru_calling_card.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/loot/quest/quest_item_sarlacc_bile_jar.py b/scripts/object/tangible/loot/quest/quest_item_sarlacc_bile_jar.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/loot/quest/quest_item_sarlacc_bile_jar.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/loot/quest/quest_item_spice_jar.py b/scripts/object/tangible/loot/quest/quest_item_spice_jar.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/loot/quest/quest_item_spice_jar.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/loot/quest/quest_item_zicx_bug_jar.py b/scripts/object/tangible/loot/quest/quest_item_zicx_bug_jar.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/loot/quest/quest_item_zicx_bug_jar.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/loot/quest/quest_satchel_charge.py b/scripts/object/tangible/loot/quest/quest_satchel_charge.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/loot/quest/quest_satchel_charge.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/loot/quest/quest_stimpack_a_schematic.py b/scripts/object/tangible/loot/quest/quest_stimpack_a_schematic.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/loot/quest/quest_stimpack_a_schematic.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/loot/quest/rifle_quest_tusken.py b/scripts/object/tangible/loot/quest/rifle_quest_tusken.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/loot/quest/rifle_quest_tusken.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/loot/quest/rudic.py b/scripts/object/tangible/loot/quest/rudic.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/loot/quest/rudic.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/loot/quest/runestone.py b/scripts/object/tangible/loot/quest/runestone.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/loot/quest/runestone.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/loot/quest/schematic_apron_s01_quest.py b/scripts/object/tangible/loot/quest/schematic_apron_s01_quest.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/loot/quest/schematic_apron_s01_quest.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/loot/quest/schematic_backpack_s03_quest.py b/scripts/object/tangible/loot/quest/schematic_backpack_s03_quest.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/loot/quest/schematic_backpack_s03_quest.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/loot/quest/schematic_backpack_s06_quest.py b/scripts/object/tangible/loot/quest/schematic_backpack_s06_quest.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/loot/quest/schematic_backpack_s06_quest.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/loot/quest/schematic_bandolier_s02_quest.py b/scripts/object/tangible/loot/quest/schematic_bandolier_s02_quest.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/loot/quest/schematic_bandolier_s02_quest.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/loot/quest/schematic_bandolier_s04_quest.py b/scripts/object/tangible/loot/quest/schematic_bandolier_s04_quest.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/loot/quest/schematic_bandolier_s04_quest.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/loot/quest/schematic_belt_s05_quest.py b/scripts/object/tangible/loot/quest/schematic_belt_s05_quest.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/loot/quest/schematic_belt_s05_quest.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/loot/quest/schematic_carbine_e11_quest.py b/scripts/object/tangible/loot/quest/schematic_carbine_e11_quest.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/loot/quest/schematic_carbine_e11_quest.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/loot/quest/schematic_dress_s08_quest.py b/scripts/object/tangible/loot/quest/schematic_dress_s08_quest.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/loot/quest/schematic_dress_s08_quest.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/loot/quest/schematic_pistol_fwg5_quest.py b/scripts/object/tangible/loot/quest/schematic_pistol_fwg5_quest.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/loot/quest/schematic_pistol_fwg5_quest.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/loot/quest/schematic_republic_blaster_quest.py b/scripts/object/tangible/loot/quest/schematic_republic_blaster_quest.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/loot/quest/schematic_republic_blaster_quest.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/loot/quest/sean_campaign_disk.py b/scripts/object/tangible/loot/quest/sean_campaign_disk.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/loot/quest/sean_campaign_disk.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/loot/quest/sean_history_disk.py b/scripts/object/tangible/loot/quest/sean_history_disk.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/loot/quest/sean_history_disk.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/loot/quest/sean_questn_alog.py b/scripts/object/tangible/loot/quest/sean_questn_alog.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/loot/quest/sean_questn_alog.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/loot/quest/sean_questn_gpapers.py b/scripts/object/tangible/loot/quest/sean_questn_gpapers.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/loot/quest/sean_questn_gpapers.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/loot/quest/sean_questn_tdisk.py b/scripts/object/tangible/loot/quest/sean_questn_tdisk.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/loot/quest/sean_questn_tdisk.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/loot/quest/sean_questp_ctestimony.py b/scripts/object/tangible/loot/quest/sean_questp_ctestimony.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/loot/quest/sean_questp_ctestimony.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/loot/quest/sean_questp_htestimony.py b/scripts/object/tangible/loot/quest/sean_questp_htestimony.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/loot/quest/sean_questp_htestimony.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/loot/quest/sean_questp_mdisk.py b/scripts/object/tangible/loot/quest/sean_questp_mdisk.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/loot/quest/sean_questp_mdisk.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/loot/quest/shellfish_harvester_schematic.py b/scripts/object/tangible/loot/quest/shellfish_harvester_schematic.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/loot/quest/shellfish_harvester_schematic.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/loot/quest/shield_generator_personal_imperial_test_schematic.py b/scripts/object/tangible/loot/quest/shield_generator_personal_imperial_test_schematic.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/loot/quest/shield_generator_personal_imperial_test_schematic.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/loot/quest/smooth_stone.py b/scripts/object/tangible/loot/quest/smooth_stone.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/loot/quest/smooth_stone.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/loot/quest/treasure_map_hedon.py b/scripts/object/tangible/loot/quest/treasure_map_hedon.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/loot/quest/treasure_map_hedon.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/loot/quest/tusken_head.py b/scripts/object/tangible/loot/quest/tusken_head.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/loot/quest/tusken_head.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/loot/quest/valarian_dagger.py b/scripts/object/tangible/loot/quest/valarian_dagger.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/loot/quest/valarian_dagger.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/loot/quest/victor_campaign_disk.py b/scripts/object/tangible/loot/quest/victor_campaign_disk.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/loot/quest/victor_campaign_disk.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/loot/quest/victor_questn_dseal.py b/scripts/object/tangible/loot/quest/victor_questn_dseal.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/loot/quest/victor_questn_dseal.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/loot/quest/victor_questn_hlist.py b/scripts/object/tangible/loot/quest/victor_questn_hlist.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/loot/quest/victor_questn_hlist.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/loot/quest/victor_questn_journal.py b/scripts/object/tangible/loot/quest/victor_questn_journal.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/loot/quest/victor_questn_journal.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/loot/quest/victor_questp_jregistry.py b/scripts/object/tangible/loot/quest/victor_questp_jregistry.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/loot/quest/victor_questp_jregistry.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/loot/quest/victor_questp_receipt.py b/scripts/object/tangible/loot/quest/victor_questp_receipt.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/loot/quest/victor_questp_receipt.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/loot/quest/victor_questp_testimony.py b/scripts/object/tangible/loot/quest/victor_questp_testimony.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/loot/quest/victor_questp_testimony.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/loot/quest/wind_crystal.py b/scripts/object/tangible/loot/quest/wind_crystal.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/loot/quest/wind_crystal.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/mission/mission_bounty_droid_probot.py b/scripts/object/tangible/mission/mission_bounty_droid_probot.py index ccad8904..4b30916a 100644 --- a/scripts/object/tangible/mission/mission_bounty_droid_probot.py +++ b/scripts/object/tangible/mission/mission_bounty_droid_probot.py @@ -1,4 +1,5 @@ import sys def setup(core, object): + object.setAttachment('radial_filename', 'npc/bounty_probot') return \ No newline at end of file diff --git a/scripts/object/tangible/mission/mission_bounty_droid_seeker.py b/scripts/object/tangible/mission/mission_bounty_droid_seeker.py index ccad8904..516734c3 100644 --- a/scripts/object/tangible/mission/mission_bounty_droid_seeker.py +++ b/scripts/object/tangible/mission/mission_bounty_droid_seeker.py @@ -1,4 +1,5 @@ import sys def setup(core, object): + object.setAttachment('radial_filename', 'npc/bounty_seeker') return \ No newline at end of file diff --git a/scripts/object/tangible/painting/bestine_quest_painting.py b/scripts/object/tangible/painting/bestine_quest_painting.py index ccad8904..0cc5dde7 100644 --- a/scripts/object/tangible/painting/bestine_quest_painting.py +++ b/scripts/object/tangible/painting/bestine_quest_painting.py @@ -1,4 +1,6 @@ import sys def setup(core, object): - return \ No newline at end of file + return + + #rare painting (Dath Prison) \ No newline at end of file diff --git a/scripts/object/tangible/painting/painting_agrilat_s01.py b/scripts/object/tangible/painting/painting_agrilat_s01.py index ccad8904..15216761 100644 --- a/scripts/object/tangible/painting/painting_agrilat_s01.py +++ b/scripts/object/tangible/painting/painting_agrilat_s01.py @@ -1,4 +1,6 @@ import sys def setup(core, object): - return \ No newline at end of file + return + + #Landscape of the Agrilat Swamp \ No newline at end of file diff --git a/scripts/object/tangible/painting/painting_armor_blueprint.py b/scripts/object/tangible/painting/painting_armor_blueprint.py index ccad8904..3a03b8f4 100644 --- a/scripts/object/tangible/painting/painting_armor_blueprint.py +++ b/scripts/object/tangible/painting/painting_armor_blueprint.py @@ -1,4 +1,6 @@ import sys def setup(core, object): - return \ No newline at end of file + return + + #RIS-one Sheet \ No newline at end of file diff --git a/scripts/object/tangible/painting/painting_bestine_blueleaf_temple.py b/scripts/object/tangible/painting/painting_bestine_blueleaf_temple.py index ccad8904..2656a516 100644 --- a/scripts/object/tangible/painting/painting_bestine_blueleaf_temple.py +++ b/scripts/object/tangible/painting/painting_bestine_blueleaf_temple.py @@ -1,4 +1,6 @@ import sys def setup(core, object): - return \ No newline at end of file + return + + #Painting of the Blue Leaf Temple \ No newline at end of file diff --git a/scripts/object/tangible/painting/painting_bestine_blumbush.py b/scripts/object/tangible/painting/painting_bestine_blumbush.py index ccad8904..07b60db5 100644 --- a/scripts/object/tangible/painting/painting_bestine_blumbush.py +++ b/scripts/object/tangible/painting/painting_bestine_blumbush.py @@ -1,4 +1,6 @@ import sys def setup(core, object): - return \ No newline at end of file + return + + #Painting of a Blumbush \ No newline at end of file diff --git a/scripts/object/tangible/painting/painting_bestine_boffa.py b/scripts/object/tangible/painting/painting_bestine_boffa.py index ccad8904..f7c9da0d 100644 --- a/scripts/object/tangible/painting/painting_bestine_boffa.py +++ b/scripts/object/tangible/painting/painting_bestine_boffa.py @@ -1,4 +1,6 @@ import sys def setup(core, object): - return \ No newline at end of file + return + + #Painting of a Boffa Plant \ No newline at end of file diff --git a/scripts/object/tangible/painting/painting_bestine_golden_flower_01.py b/scripts/object/tangible/painting/painting_bestine_golden_flower_01.py index ccad8904..d434b0cc 100644 --- a/scripts/object/tangible/painting/painting_bestine_golden_flower_01.py +++ b/scripts/object/tangible/painting/painting_bestine_golden_flower_01.py @@ -1,4 +1,6 @@ import sys def setup(core, object): - return \ No newline at end of file + return + + #Abstract Painting of Golden Petals 1 \ No newline at end of file diff --git a/scripts/object/tangible/painting/painting_bestine_golden_flower_02.py b/scripts/object/tangible/painting/painting_bestine_golden_flower_02.py index ccad8904..4e6014c1 100644 --- a/scripts/object/tangible/painting/painting_bestine_golden_flower_02.py +++ b/scripts/object/tangible/painting/painting_bestine_golden_flower_02.py @@ -1,4 +1,6 @@ import sys def setup(core, object): - return \ No newline at end of file + return + + #Abstract Painting of Golden Petals 2 \ No newline at end of file diff --git a/scripts/object/tangible/painting/painting_bestine_golden_flower_03.py b/scripts/object/tangible/painting/painting_bestine_golden_flower_03.py index ccad8904..3cfb6fb7 100644 --- a/scripts/object/tangible/painting/painting_bestine_golden_flower_03.py +++ b/scripts/object/tangible/painting/painting_bestine_golden_flower_03.py @@ -1,4 +1,6 @@ import sys def setup(core, object): - return \ No newline at end of file + return + + #Abstract Painting of Golden Petals 3 \ No newline at end of file diff --git a/scripts/object/tangible/painting/painting_bestine_house.py b/scripts/object/tangible/painting/painting_bestine_house.py index ccad8904..78d4a484 100644 --- a/scripts/object/tangible/painting/painting_bestine_house.py +++ b/scripts/object/tangible/painting/painting_bestine_house.py @@ -1,4 +1,6 @@ import sys def setup(core, object): - return \ No newline at end of file + return + + #Painting of a Residential House \ No newline at end of file diff --git a/scripts/object/tangible/painting/painting_bestine_krayt_skeleton.py b/scripts/object/tangible/painting/painting_bestine_krayt_skeleton.py index ccad8904..a766be30 100644 --- a/scripts/object/tangible/painting/painting_bestine_krayt_skeleton.py +++ b/scripts/object/tangible/painting/painting_bestine_krayt_skeleton.py @@ -1,4 +1,6 @@ import sys def setup(core, object): - return \ No newline at end of file + return + + #Painting of a Krayt Dragon Skeleton \ No newline at end of file diff --git a/scripts/object/tangible/painting/painting_bestine_lucky_despot.py b/scripts/object/tangible/painting/painting_bestine_lucky_despot.py index ccad8904..826cf6ba 100644 --- a/scripts/object/tangible/painting/painting_bestine_lucky_despot.py +++ b/scripts/object/tangible/painting/painting_bestine_lucky_despot.py @@ -1,4 +1,6 @@ import sys def setup(core, object): - return \ No newline at end of file + return + + #Painting of the Lucky Despot Wreckage \ No newline at end of file diff --git a/scripts/object/tangible/painting/painting_bestine_mattberry.py b/scripts/object/tangible/painting/painting_bestine_mattberry.py index ccad8904..3263118d 100644 --- a/scripts/object/tangible/painting/painting_bestine_mattberry.py +++ b/scripts/object/tangible/painting/painting_bestine_mattberry.py @@ -1,4 +1,6 @@ import sys def setup(core, object): - return \ No newline at end of file + return + + #Painting of a Mattberry Plant \ No newline at end of file diff --git a/scripts/object/tangible/painting/painting_bestine_moncal_eye_01.py b/scripts/object/tangible/painting/painting_bestine_moncal_eye_01.py index ccad8904..57e13209 100644 --- a/scripts/object/tangible/painting/painting_bestine_moncal_eye_01.py +++ b/scripts/object/tangible/painting/painting_bestine_moncal_eye_01.py @@ -1,4 +1,6 @@ import sys def setup(core, object): - return \ No newline at end of file + return + + #Painting of a Moncal eye 1 \ No newline at end of file diff --git a/scripts/object/tangible/painting/painting_bestine_moncal_eye_02.py b/scripts/object/tangible/painting/painting_bestine_moncal_eye_02.py index ccad8904..bfff1499 100644 --- a/scripts/object/tangible/painting/painting_bestine_moncal_eye_02.py +++ b/scripts/object/tangible/painting/painting_bestine_moncal_eye_02.py @@ -1,4 +1,6 @@ import sys def setup(core, object): - return \ No newline at end of file + return + + #Painting of a moncal eye 2 \ No newline at end of file diff --git a/scripts/object/tangible/painting/painting_bestine_rainbow_berry_bush.py b/scripts/object/tangible/painting/painting_bestine_rainbow_berry_bush.py index ccad8904..d832a864 100644 --- a/scripts/object/tangible/painting/painting_bestine_rainbow_berry_bush.py +++ b/scripts/object/tangible/painting/painting_bestine_rainbow_berry_bush.py @@ -1,4 +1,6 @@ import sys def setup(core, object): - return \ No newline at end of file + return + + #Painting of a Ranbow Berry Bush \ No newline at end of file diff --git a/scripts/object/tangible/painting/painting_bestine_raventhorn.py b/scripts/object/tangible/painting/painting_bestine_raventhorn.py index ccad8904..f9cd757f 100644 --- a/scripts/object/tangible/painting/painting_bestine_raventhorn.py +++ b/scripts/object/tangible/painting/painting_bestine_raventhorn.py @@ -1,4 +1,6 @@ import sys def setup(core, object): - return \ No newline at end of file + return + + #Painting of a Raventhorn Plant \ No newline at end of file diff --git a/scripts/object/tangible/painting/painting_bestine_ronka.py b/scripts/object/tangible/painting/painting_bestine_ronka.py index ccad8904..45c9bf5e 100644 --- a/scripts/object/tangible/painting/painting_bestine_ronka.py +++ b/scripts/object/tangible/painting/painting_bestine_ronka.py @@ -1,4 +1,6 @@ import sys def setup(core, object): - return \ No newline at end of file + return + + #Painting of a Ronka Plant \ No newline at end of file diff --git a/scripts/object/tangible/painting/painting_bioengineer_orange.py b/scripts/object/tangible/painting/painting_bioengineer_orange.py index ccad8904..2835c34b 100644 --- a/scripts/object/tangible/painting/painting_bioengineer_orange.py +++ b/scripts/object/tangible/painting/painting_bioengineer_orange.py @@ -1,4 +1,6 @@ import sys def setup(core, object): - return \ No newline at end of file + return + + #Bio-Engineer Poster \ No newline at end of file diff --git a/scripts/object/tangible/painting/painting_bothan_f.py b/scripts/object/tangible/painting/painting_bothan_f.py index ccad8904..da748f3c 100644 --- a/scripts/object/tangible/painting/painting_bothan_f.py +++ b/scripts/object/tangible/painting/painting_bothan_f.py @@ -1,4 +1,6 @@ import sys def setup(core, object): - return \ No newline at end of file + return + + #Bothan Beauty \ No newline at end of file diff --git a/scripts/object/tangible/painting/painting_bothan_m.py b/scripts/object/tangible/painting/painting_bothan_m.py index ccad8904..f73400e8 100644 --- a/scripts/object/tangible/painting/painting_bothan_m.py +++ b/scripts/object/tangible/painting/painting_bothan_m.py @@ -1,4 +1,6 @@ import sys def setup(core, object): - return \ No newline at end of file + return + + #Bothan Buff \ No newline at end of file diff --git a/scripts/object/tangible/painting/painting_bw_stormtrooper.py b/scripts/object/tangible/painting/painting_bw_stormtrooper.py index ccad8904..66324644 100644 --- a/scripts/object/tangible/painting/painting_bw_stormtrooper.py +++ b/scripts/object/tangible/painting/painting_bw_stormtrooper.py @@ -1,4 +1,6 @@ import sys def setup(core, object): - return \ No newline at end of file + return + + #No Division \ No newline at end of file diff --git a/scripts/object/tangible/painting/painting_cargoport.py b/scripts/object/tangible/painting/painting_cargoport.py index ccad8904..29430a79 100644 --- a/scripts/object/tangible/painting/painting_cargoport.py +++ b/scripts/object/tangible/painting/painting_cargoport.py @@ -1,4 +1,6 @@ import sys def setup(core, object): - return \ No newline at end of file + return + + #Cargoport Blueprint \ No newline at end of file diff --git a/scripts/object/tangible/painting/painting_chp5.py b/scripts/object/tangible/painting/painting_chp5.py index ccad8904..25ca8ace 100644 --- a/scripts/object/tangible/painting/painting_chp5.py +++ b/scripts/object/tangible/painting/painting_chp5.py @@ -1,4 +1,6 @@ import sys def setup(core, object): - return \ No newline at end of file + return + + # A painting (Around the Campfire) \ No newline at end of file diff --git a/scripts/object/tangible/painting/painting_clone_trooper_01.py b/scripts/object/tangible/painting/painting_clone_trooper_01.py index ccad8904..53b8f5e5 100644 --- a/scripts/object/tangible/painting/painting_clone_trooper_01.py +++ b/scripts/object/tangible/painting/painting_clone_trooper_01.py @@ -1,4 +1,6 @@ import sys def setup(core, object): - return \ No newline at end of file + return + + #Clone Wars Painting \ No newline at end of file diff --git a/scripts/object/tangible/painting/painting_corl_01.py b/scripts/object/tangible/painting/painting_corl_01.py index ccad8904..c6bad819 100644 --- a/scripts/object/tangible/painting/painting_corl_01.py +++ b/scripts/object/tangible/painting/painting_corl_01.py @@ -1,4 +1,6 @@ import sys def setup(core, object): - return \ No newline at end of file + return + + #No name Corellia Fields \ No newline at end of file diff --git a/scripts/object/tangible/painting/painting_corl_02.py b/scripts/object/tangible/painting/painting_corl_02.py index ccad8904..26bddda6 100644 --- a/scripts/object/tangible/painting/painting_corl_02.py +++ b/scripts/object/tangible/painting/painting_corl_02.py @@ -1,4 +1,6 @@ import sys def setup(core, object): - return \ No newline at end of file + return + + #No name Corellia Beach \ No newline at end of file diff --git a/scripts/object/tangible/painting/painting_dance_party.py b/scripts/object/tangible/painting/painting_dance_party.py index ccad8904..12016a86 100644 --- a/scripts/object/tangible/painting/painting_dance_party.py +++ b/scripts/object/tangible/painting/painting_dance_party.py @@ -1,4 +1,6 @@ import sys def setup(core, object): - return \ No newline at end of file + return + + #Party Poster / Dance Party \ No newline at end of file diff --git a/scripts/object/tangible/painting/painting_double_helix.py b/scripts/object/tangible/painting/painting_double_helix.py index ccad8904..cca6b071 100644 --- a/scripts/object/tangible/painting/painting_double_helix.py +++ b/scripts/object/tangible/painting/painting_double_helix.py @@ -1,4 +1,6 @@ import sys def setup(core, object): - return \ No newline at end of file + return + + #Double Helix \ No newline at end of file diff --git a/scripts/object/tangible/painting/painting_droid_bright.py b/scripts/object/tangible/painting/painting_droid_bright.py index ccad8904..04e8bc64 100644 --- a/scripts/object/tangible/painting/painting_droid_bright.py +++ b/scripts/object/tangible/painting/painting_droid_bright.py @@ -1,4 +1,6 @@ import sys def setup(core, object): - return \ No newline at end of file + return + + #Droid in Contrast \ No newline at end of file diff --git a/scripts/object/tangible/painting/painting_endor_style_01.py b/scripts/object/tangible/painting/painting_endor_style_01.py index ccad8904..038c4d3f 100644 --- a/scripts/object/tangible/painting/painting_endor_style_01.py +++ b/scripts/object/tangible/painting/painting_endor_style_01.py @@ -1,4 +1,6 @@ import sys def setup(core, object): - return \ No newline at end of file + return + + #Painting (Endor Landscape) \ No newline at end of file diff --git a/scripts/object/tangible/painting/painting_fighter_pilot_human_01.py b/scripts/object/tangible/painting/painting_fighter_pilot_human_01.py index ccad8904..f2ddba2c 100644 --- a/scripts/object/tangible/painting/painting_fighter_pilot_human_01.py +++ b/scripts/object/tangible/painting/painting_fighter_pilot_human_01.py @@ -1,4 +1,6 @@ import sys def setup(core, object): - return \ No newline at end of file + return + + #Star Pilot \ No newline at end of file diff --git a/scripts/object/tangible/painting/painting_food_baking_s01.py b/scripts/object/tangible/painting/painting_food_baking_s01.py index ccad8904..704b3a4f 100644 --- a/scripts/object/tangible/painting/painting_food_baking_s01.py +++ b/scripts/object/tangible/painting/painting_food_baking_s01.py @@ -1,4 +1,6 @@ import sys def setup(core, object): - return \ No newline at end of file + return + + #Poster of Food Preperation \ No newline at end of file diff --git a/scripts/object/tangible/painting/painting_food_baking_s02.py b/scripts/object/tangible/painting/painting_food_baking_s02.py index ccad8904..704b3a4f 100644 --- a/scripts/object/tangible/painting/painting_food_baking_s02.py +++ b/scripts/object/tangible/painting/painting_food_baking_s02.py @@ -1,4 +1,6 @@ import sys def setup(core, object): - return \ No newline at end of file + return + + #Poster of Food Preperation \ No newline at end of file diff --git a/scripts/object/tangible/painting/painting_freedom.py b/scripts/object/tangible/painting/painting_freedom.py index ccad8904..2bcfc31c 100644 --- a/scripts/object/tangible/painting/painting_freedom.py +++ b/scripts/object/tangible/painting/painting_freedom.py @@ -1,4 +1,6 @@ import sys def setup(core, object): - return \ No newline at end of file + return + + # Freedom (Glorious Scrifice) \ No newline at end of file diff --git a/scripts/object/tangible/painting/painting_grievous_01.py b/scripts/object/tangible/painting/painting_grievous_01.py index ccad8904..53b8f5e5 100644 --- a/scripts/object/tangible/painting/painting_grievous_01.py +++ b/scripts/object/tangible/painting/painting_grievous_01.py @@ -1,4 +1,6 @@ import sys def setup(core, object): - return \ No newline at end of file + return + + #Clone Wars Painting \ No newline at end of file diff --git a/scripts/object/tangible/painting/painting_han_wanted.py b/scripts/object/tangible/painting/painting_han_wanted.py index ccad8904..fbee5cde 100644 --- a/scripts/object/tangible/painting/painting_han_wanted.py +++ b/scripts/object/tangible/painting/painting_han_wanted.py @@ -1,4 +1,6 @@ import sys def setup(core, object): - return \ No newline at end of file + return + + #Han Solo Wanted Poster \ No newline at end of file diff --git a/scripts/object/tangible/painting/painting_heroic_exar_kun_ultra_rare.py b/scripts/object/tangible/painting/painting_heroic_exar_kun_ultra_rare.py index ccad8904..c1b12e4a 100644 --- a/scripts/object/tangible/painting/painting_heroic_exar_kun_ultra_rare.py +++ b/scripts/object/tangible/painting/painting_heroic_exar_kun_ultra_rare.py @@ -1,4 +1,6 @@ import sys def setup(core, object): - return \ No newline at end of file + return + + #Exar Kun Mural \ No newline at end of file diff --git a/scripts/object/tangible/painting/painting_house_cleanup_imperial.py b/scripts/object/tangible/painting/painting_house_cleanup_imperial.py index ccad8904..9b068b30 100644 --- a/scripts/object/tangible/painting/painting_house_cleanup_imperial.py +++ b/scripts/object/tangible/painting/painting_house_cleanup_imperial.py @@ -1,4 +1,6 @@ import sys def setup(core, object): - return \ No newline at end of file + return + + #Birth of a Death Star \ No newline at end of file diff --git a/scripts/object/tangible/painting/painting_house_cleanup_rebel.py b/scripts/object/tangible/painting/painting_house_cleanup_rebel.py index ccad8904..0662a93a 100644 --- a/scripts/object/tangible/painting/painting_house_cleanup_rebel.py +++ b/scripts/object/tangible/painting/painting_house_cleanup_rebel.py @@ -1,4 +1,6 @@ import sys def setup(core, object): - return \ No newline at end of file + return + + #The War Pheonix \ No newline at end of file diff --git a/scripts/object/tangible/painting/painting_human_f.py b/scripts/object/tangible/painting/painting_human_f.py index ccad8904..b4e398ba 100644 --- a/scripts/object/tangible/painting/painting_human_f.py +++ b/scripts/object/tangible/painting/painting_human_f.py @@ -1,4 +1,6 @@ import sys def setup(core, object): - return \ No newline at end of file + return + + #Despair's Lady \ No newline at end of file diff --git a/scripts/object/tangible/painting/painting_kite_plant.py b/scripts/object/tangible/painting/painting_kite_plant.py index ccad8904..292481ec 100644 --- a/scripts/object/tangible/painting/painting_kite_plant.py +++ b/scripts/object/tangible/painting/painting_kite_plant.py @@ -1,4 +1,6 @@ import sys def setup(core, object): - return \ No newline at end of file + return + + #Still-Life Kite Plant \ No newline at end of file diff --git a/scripts/object/tangible/painting/painting_leia_wanted.py b/scripts/object/tangible/painting/painting_leia_wanted.py index ccad8904..2999ebc9 100644 --- a/scripts/object/tangible/painting/painting_leia_wanted.py +++ b/scripts/object/tangible/painting/painting_leia_wanted.py @@ -1,4 +1,6 @@ import sys def setup(core, object): - return \ No newline at end of file + return + + #Leia Wanted Poster \ No newline at end of file diff --git a/scripts/object/tangible/painting/painting_loot_heroic_exar_kun.py b/scripts/object/tangible/painting/painting_loot_heroic_exar_kun.py index ccad8904..75ee42fb 100644 --- a/scripts/object/tangible/painting/painting_loot_heroic_exar_kun.py +++ b/scripts/object/tangible/painting/painting_loot_heroic_exar_kun.py @@ -1,4 +1,6 @@ import sys def setup(core, object): - return \ No newline at end of file + return + + #An Exar Kun Fresco \ No newline at end of file diff --git a/scripts/object/tangible/painting/painting_luke_wanted.py b/scripts/object/tangible/painting/painting_luke_wanted.py index ccad8904..b08d64c1 100644 --- a/scripts/object/tangible/painting/painting_luke_wanted.py +++ b/scripts/object/tangible/painting/painting_luke_wanted.py @@ -1,4 +1,6 @@ import sys def setup(core, object): - return \ No newline at end of file + return + + #Luke Wanted Poster \ No newline at end of file diff --git a/scripts/object/tangible/painting/painting_nebula_flower.py b/scripts/object/tangible/painting/painting_nebula_flower.py index ccad8904..25efc1c1 100644 --- a/scripts/object/tangible/painting/painting_nebula_flower.py +++ b/scripts/object/tangible/painting/painting_nebula_flower.py @@ -1,4 +1,6 @@ import sys def setup(core, object): - return \ No newline at end of file + return + + #painting of the Blue Leaf Temple (Flower) \ No newline at end of file diff --git a/scripts/object/tangible/painting/painting_outbreak_biohazard_01.py b/scripts/object/tangible/painting/painting_outbreak_biohazard_01.py index ccad8904..0221f0d4 100644 --- a/scripts/object/tangible/painting/painting_outbreak_biohazard_01.py +++ b/scripts/object/tangible/painting/painting_outbreak_biohazard_01.py @@ -1,4 +1,6 @@ import sys def setup(core, object): - return \ No newline at end of file + return + + #Caution \ No newline at end of file diff --git a/scripts/object/tangible/painting/painting_outbreak_biohazard_02.py b/scripts/object/tangible/painting/painting_outbreak_biohazard_02.py index ccad8904..88b386ce 100644 --- a/scripts/object/tangible/painting/painting_outbreak_biohazard_02.py +++ b/scripts/object/tangible/painting/painting_outbreak_biohazard_02.py @@ -1,4 +1,6 @@ import sys def setup(core, object): - return \ No newline at end of file + return + + #No name Biohazard Sign \ No newline at end of file diff --git a/scripts/object/tangible/painting/painting_outbreak_biohazard_03.py b/scripts/object/tangible/painting/painting_outbreak_biohazard_03.py index ccad8904..d883ae49 100644 --- a/scripts/object/tangible/painting/painting_outbreak_biohazard_03.py +++ b/scripts/object/tangible/painting/painting_outbreak_biohazard_03.py @@ -1,4 +1,6 @@ import sys def setup(core, object): - return \ No newline at end of file + return + + #Biohazard \ No newline at end of file diff --git a/scripts/object/tangible/painting/painting_palowick_ad_s01.py b/scripts/object/tangible/painting/painting_palowick_ad_s01.py index ccad8904..2e3f2658 100644 --- a/scripts/object/tangible/painting/painting_palowick_ad_s01.py +++ b/scripts/object/tangible/painting/painting_palowick_ad_s01.py @@ -1,4 +1,6 @@ import sys def setup(core, object): - return \ No newline at end of file + return + + #Advertisement (laying down in the sun) \ No newline at end of file diff --git a/scripts/object/tangible/painting/painting_palowick_ad_s02.py b/scripts/object/tangible/painting/painting_palowick_ad_s02.py index ccad8904..822108e5 100644 --- a/scripts/object/tangible/painting/painting_palowick_ad_s02.py +++ b/scripts/object/tangible/painting/painting_palowick_ad_s02.py @@ -1,4 +1,6 @@ import sys def setup(core, object): - return \ No newline at end of file + return + + #Advertisement (laying down in the sun) \ No newline at end of file diff --git a/scripts/object/tangible/painting/painting_palowick_ad_s03.py b/scripts/object/tangible/painting/painting_palowick_ad_s03.py index ccad8904..822108e5 100644 --- a/scripts/object/tangible/painting/painting_palowick_ad_s03.py +++ b/scripts/object/tangible/painting/painting_palowick_ad_s03.py @@ -1,4 +1,6 @@ import sys def setup(core, object): - return \ No newline at end of file + return + + #Advertisement (laying down in the sun) \ No newline at end of file diff --git a/scripts/object/tangible/painting/painting_palowick_ad_s04.py b/scripts/object/tangible/painting/painting_palowick_ad_s04.py index ccad8904..822108e5 100644 --- a/scripts/object/tangible/painting/painting_palowick_ad_s04.py +++ b/scripts/object/tangible/painting/painting_palowick_ad_s04.py @@ -1,4 +1,6 @@ import sys def setup(core, object): - return \ No newline at end of file + return + + #Advertisement (laying down in the sun) \ No newline at end of file diff --git a/scripts/object/tangible/painting/painting_planet_s01.py b/scripts/object/tangible/painting/painting_planet_s01.py index ccad8904..e894505e 100644 --- a/scripts/object/tangible/painting/painting_planet_s01.py +++ b/scripts/object/tangible/painting/painting_planet_s01.py @@ -1,4 +1,6 @@ import sys def setup(core, object): - return \ No newline at end of file + return + + #Space Painting Sunrise \ No newline at end of file diff --git a/scripts/object/tangible/painting/painting_pvp_reward_imperial.py b/scripts/object/tangible/painting/painting_pvp_reward_imperial.py index ccad8904..1914d9c0 100644 --- a/scripts/object/tangible/painting/painting_pvp_reward_imperial.py +++ b/scripts/object/tangible/painting/painting_pvp_reward_imperial.py @@ -1,4 +1,6 @@ import sys def setup(core, object): - return \ No newline at end of file + return + + #No name (Palpatine and Star Destroyers) \ No newline at end of file diff --git a/scripts/object/tangible/painting/painting_pvp_reward_rebel.py b/scripts/object/tangible/painting/painting_pvp_reward_rebel.py index ccad8904..2113f9c2 100644 --- a/scripts/object/tangible/painting/painting_pvp_reward_rebel.py +++ b/scripts/object/tangible/painting/painting_pvp_reward_rebel.py @@ -1,4 +1,6 @@ import sys def setup(core, object): - return \ No newline at end of file + return + + #No name (Cruiser Escort) \ No newline at end of file diff --git a/scripts/object/tangible/painting/painting_rodian_f.py b/scripts/object/tangible/painting/painting_rodian_f.py index ccad8904..ca3f0dab 100644 --- a/scripts/object/tangible/painting/painting_rodian_f.py +++ b/scripts/object/tangible/painting/painting_rodian_f.py @@ -1,4 +1,6 @@ import sys def setup(core, object): - return \ No newline at end of file + return + + #Feared \ No newline at end of file diff --git a/scripts/object/tangible/painting/painting_rodian_f_ad_01.py b/scripts/object/tangible/painting/painting_rodian_f_ad_01.py index ccad8904..e09fa82d 100644 --- a/scripts/object/tangible/painting/painting_rodian_f_ad_01.py +++ b/scripts/object/tangible/painting/painting_rodian_f_ad_01.py @@ -1,4 +1,6 @@ import sys def setup(core, object): - return \ No newline at end of file + return + + #Advertisement (Where the Fun's at.) \ No newline at end of file diff --git a/scripts/object/tangible/painting/painting_rodian_m.py b/scripts/object/tangible/painting/painting_rodian_m.py index ccad8904..c178074f 100644 --- a/scripts/object/tangible/painting/painting_rodian_m.py +++ b/scripts/object/tangible/painting/painting_rodian_m.py @@ -1,4 +1,6 @@ import sys def setup(core, object): - return \ No newline at end of file + return + + #Fighter \ No newline at end of file diff --git a/scripts/object/tangible/painting/painting_schematic_droid.py b/scripts/object/tangible/painting/painting_schematic_droid.py index ccad8904..d1368619 100644 --- a/scripts/object/tangible/painting/painting_schematic_droid.py +++ b/scripts/object/tangible/painting/painting_schematic_droid.py @@ -1,4 +1,6 @@ import sys def setup(core, object): - return \ No newline at end of file + return + + #Poster of a Mouse Droid Schematic \ No newline at end of file diff --git a/scripts/object/tangible/painting/painting_schematic_transport_ship.py b/scripts/object/tangible/painting/painting_schematic_transport_ship.py index ccad8904..9d3cb116 100644 --- a/scripts/object/tangible/painting/painting_schematic_transport_ship.py +++ b/scripts/object/tangible/painting/painting_schematic_transport_ship.py @@ -1,4 +1,6 @@ import sys def setup(core, object): - return \ No newline at end of file + return + + #Poster of a Ship Schematic \ No newline at end of file diff --git a/scripts/object/tangible/painting/painting_schematic_weapon.py b/scripts/object/tangible/painting/painting_schematic_weapon.py index ccad8904..3993679b 100644 --- a/scripts/object/tangible/painting/painting_schematic_weapon.py +++ b/scripts/object/tangible/painting/painting_schematic_weapon.py @@ -1,4 +1,6 @@ import sys def setup(core, object): - return \ No newline at end of file + return + + #Poster of a Turret Schematic \ No newline at end of file diff --git a/scripts/object/tangible/painting/painting_schematic_weapon_s03.py b/scripts/object/tangible/painting/painting_schematic_weapon_s03.py index ccad8904..397737fc 100644 --- a/scripts/object/tangible/painting/painting_schematic_weapon_s03.py +++ b/scripts/object/tangible/painting/painting_schematic_weapon_s03.py @@ -1,4 +1,6 @@ import sys def setup(core, object): - return \ No newline at end of file + return + + #Poster of a Block Turret Schematic \ No newline at end of file diff --git a/scripts/object/tangible/painting/painting_skyscraper.py b/scripts/object/tangible/painting/painting_skyscraper.py index ccad8904..fdc4b355 100644 --- a/scripts/object/tangible/painting/painting_skyscraper.py +++ b/scripts/object/tangible/painting/painting_skyscraper.py @@ -1,4 +1,6 @@ import sys def setup(core, object): - return \ No newline at end of file + return + + #Coronet Skyscraper Blueprint \ No newline at end of file diff --git a/scripts/object/tangible/painting/painting_smoking_ad.py b/scripts/object/tangible/painting/painting_smoking_ad.py index ccad8904..76edcdc9 100644 --- a/scripts/object/tangible/painting/painting_smoking_ad.py +++ b/scripts/object/tangible/painting/painting_smoking_ad.py @@ -1,4 +1,6 @@ import sys def setup(core, object): - return \ No newline at end of file + return + + #Advertisement (appears to be unfinished) \ No newline at end of file diff --git a/scripts/object/tangible/painting/painting_starmap.py b/scripts/object/tangible/painting/painting_starmap.py index ccad8904..c92f09d9 100644 --- a/scripts/object/tangible/painting/painting_starmap.py +++ b/scripts/object/tangible/painting/painting_starmap.py @@ -1,4 +1,6 @@ import sys def setup(core, object): - return \ No newline at end of file + return + + #Starmap Painting \ No newline at end of file diff --git a/scripts/object/tangible/painting/painting_tato_s03.py b/scripts/object/tangible/painting/painting_tato_s03.py index ccad8904..00d94519 100644 --- a/scripts/object/tangible/painting/painting_tato_s03.py +++ b/scripts/object/tangible/painting/painting_tato_s03.py @@ -1,4 +1,6 @@ import sys def setup(core, object): - return \ No newline at end of file + return + + #Landscape-Tree \ No newline at end of file diff --git a/scripts/object/tangible/painting/painting_tato_s04.py b/scripts/object/tangible/painting/painting_tato_s04.py index ccad8904..c8279d5b 100644 --- a/scripts/object/tangible/painting/painting_tato_s04.py +++ b/scripts/object/tangible/painting/painting_tato_s04.py @@ -1,4 +1,6 @@ import sys def setup(core, object): - return \ No newline at end of file + return + + #Travel Advertisement \ No newline at end of file diff --git a/scripts/object/tangible/painting/painting_teras_kasi.py b/scripts/object/tangible/painting/painting_teras_kasi.py index ccad8904..f2824afd 100644 --- a/scripts/object/tangible/painting/painting_teras_kasi.py +++ b/scripts/object/tangible/painting/painting_teras_kasi.py @@ -1,4 +1,6 @@ import sys def setup(core, object): - return \ No newline at end of file + return + + #Spitting Rawl \ No newline at end of file diff --git a/scripts/object/tangible/painting/painting_teras_kasi_2.py b/scripts/object/tangible/painting/painting_teras_kasi_2.py index ccad8904..b7fa7986 100644 --- a/scripts/object/tangible/painting/painting_teras_kasi_2.py +++ b/scripts/object/tangible/painting/painting_teras_kasi_2.py @@ -1,4 +1,6 @@ import sys def setup(core, object): - return \ No newline at end of file + return + + #Defensive Stance \ No newline at end of file diff --git a/scripts/object/tangible/painting/painting_trandoshan_m.py b/scripts/object/tangible/painting/painting_trandoshan_m.py index ccad8904..6463ff4a 100644 --- a/scripts/object/tangible/painting/painting_trandoshan_m.py +++ b/scripts/object/tangible/painting/painting_trandoshan_m.py @@ -1,4 +1,6 @@ import sys def setup(core, object): - return \ No newline at end of file + return + + #Warriors Honor \ No newline at end of file diff --git a/scripts/object/tangible/painting/painting_trandoshan_m_01.py b/scripts/object/tangible/painting/painting_trandoshan_m_01.py index ccad8904..69ecf5ec 100644 --- a/scripts/object/tangible/painting/painting_trandoshan_m_01.py +++ b/scripts/object/tangible/painting/painting_trandoshan_m_01.py @@ -1,4 +1,6 @@ import sys def setup(core, object): - return \ No newline at end of file + return + + #Fighters Courage \ No newline at end of file diff --git a/scripts/object/tangible/painting/painting_tree.py b/scripts/object/tangible/painting/painting_tree.py index ccad8904..c79e437f 100644 --- a/scripts/object/tangible/painting/painting_tree.py +++ b/scripts/object/tangible/painting/painting_tree.py @@ -1,4 +1,6 @@ import sys def setup(core, object): - return \ No newline at end of file + return + + #painting of the Blueleaf Temple (Big Tree) \ No newline at end of file diff --git a/scripts/object/tangible/painting/painting_trees_s01.py b/scripts/object/tangible/painting/painting_trees_s01.py index ccad8904..3490135b 100644 --- a/scripts/object/tangible/painting/painting_trees_s01.py +++ b/scripts/object/tangible/painting/painting_trees_s01.py @@ -1,4 +1,6 @@ import sys def setup(core, object): - return \ No newline at end of file + return + + #Life Day Kashyyyk Painting \ No newline at end of file diff --git a/scripts/object/tangible/painting/painting_vader_victory.py b/scripts/object/tangible/painting/painting_vader_victory.py index ccad8904..d485eaa9 100644 --- a/scripts/object/tangible/painting/painting_vader_victory.py +++ b/scripts/object/tangible/painting/painting_vader_victory.py @@ -1,4 +1,6 @@ import sys def setup(core, object): - return \ No newline at end of file + return + + #VICTORY \ No newline at end of file diff --git a/scripts/object/tangible/painting/painting_valley_view.py b/scripts/object/tangible/painting/painting_valley_view.py index ccad8904..74f26426 100644 --- a/scripts/object/tangible/painting/painting_valley_view.py +++ b/scripts/object/tangible/painting/painting_valley_view.py @@ -1,4 +1,6 @@ import sys def setup(core, object): - return \ No newline at end of file + return + + #Valley View \ No newline at end of file diff --git a/scripts/object/tangible/painting/painting_victorious_reign.py b/scripts/object/tangible/painting/painting_victorious_reign.py index ccad8904..52bc6525 100644 --- a/scripts/object/tangible/painting/painting_victorious_reign.py +++ b/scripts/object/tangible/painting/painting_victorious_reign.py @@ -1,4 +1,6 @@ import sys def setup(core, object): - return \ No newline at end of file + return + + #Victorious Reign \ No newline at end of file diff --git a/scripts/object/tangible/painting/painting_waterfall.py b/scripts/object/tangible/painting/painting_waterfall.py index ccad8904..06913aff 100644 --- a/scripts/object/tangible/painting/painting_waterfall.py +++ b/scripts/object/tangible/painting/painting_waterfall.py @@ -1,4 +1,6 @@ import sys def setup(core, object): - return \ No newline at end of file + return + + #Waterfall \ No newline at end of file diff --git a/scripts/object/tangible/painting/painting_wod_ns_01.py b/scripts/object/tangible/painting/painting_wod_ns_01.py index ccad8904..229cd9f7 100644 --- a/scripts/object/tangible/painting/painting_wod_ns_01.py +++ b/scripts/object/tangible/painting/painting_wod_ns_01.py @@ -1,4 +1,6 @@ import sys def setup(core, object): - return \ No newline at end of file + return + + #No name, Fire Pit \ No newline at end of file diff --git a/scripts/object/tangible/painting/painting_wod_ns_02.py b/scripts/object/tangible/painting/painting_wod_ns_02.py index ccad8904..888768e2 100644 --- a/scripts/object/tangible/painting/painting_wod_ns_02.py +++ b/scripts/object/tangible/painting/painting_wod_ns_02.py @@ -1,4 +1,6 @@ import sys def setup(core, object): - return \ No newline at end of file + return + + #No name, NS Close-Up \ No newline at end of file diff --git a/scripts/object/tangible/painting/painting_wod_outcast.py b/scripts/object/tangible/painting/painting_wod_outcast.py index ccad8904..e550f02c 100644 --- a/scripts/object/tangible/painting/painting_wod_outcast.py +++ b/scripts/object/tangible/painting/painting_wod_outcast.py @@ -1,4 +1,6 @@ import sys def setup(core, object): - return \ No newline at end of file + return + + #Outcast \ No newline at end of file diff --git a/scripts/object/tangible/painting/painting_wod_scene_01.py b/scripts/object/tangible/painting/painting_wod_scene_01.py index ccad8904..f412873a 100644 --- a/scripts/object/tangible/painting/painting_wod_scene_01.py +++ b/scripts/object/tangible/painting/painting_wod_scene_01.py @@ -1,4 +1,6 @@ import sys def setup(core, object): - return \ No newline at end of file + return + + #no name, Swamp \ No newline at end of file diff --git a/scripts/object/tangible/painting/painting_wod_scene_02.py b/scripts/object/tangible/painting/painting_wod_scene_02.py index ccad8904..c0665552 100644 --- a/scripts/object/tangible/painting/painting_wod_scene_02.py +++ b/scripts/object/tangible/painting/painting_wod_scene_02.py @@ -1,4 +1,6 @@ import sys def setup(core, object): - return \ No newline at end of file + return + + #no name, Trees \ No newline at end of file diff --git a/scripts/object/tangible/painting/painting_wod_scene_03.py b/scripts/object/tangible/painting/painting_wod_scene_03.py index ccad8904..013a0b4b 100644 --- a/scripts/object/tangible/painting/painting_wod_scene_03.py +++ b/scripts/object/tangible/painting/painting_wod_scene_03.py @@ -1,4 +1,6 @@ import sys def setup(core, object): - return \ No newline at end of file + return + + #no name, House Entrance \ No newline at end of file diff --git a/scripts/object/tangible/painting/painting_wod_scene_04.py b/scripts/object/tangible/painting/painting_wod_scene_04.py index ccad8904..b7d37c0d 100644 --- a/scripts/object/tangible/painting/painting_wod_scene_04.py +++ b/scripts/object/tangible/painting/painting_wod_scene_04.py @@ -1,4 +1,6 @@ import sys def setup(core, object): - return \ No newline at end of file + return + + #no name, Rock Formation \ No newline at end of file diff --git a/scripts/object/tangible/painting/painting_wod_sm_01.py b/scripts/object/tangible/painting/painting_wod_sm_01.py index ccad8904..8efd8df2 100644 --- a/scripts/object/tangible/painting/painting_wod_sm_01.py +++ b/scripts/object/tangible/painting/painting_wod_sm_01.py @@ -1,4 +1,6 @@ import sys def setup(core, object): - return \ No newline at end of file + return + + #Singing Mountain Clan Tapestry \ No newline at end of file diff --git a/scripts/object/tangible/painting/painting_wod_sm_02.py b/scripts/object/tangible/painting/painting_wod_sm_02.py index ccad8904..c3c749e8 100644 --- a/scripts/object/tangible/painting/painting_wod_sm_02.py +++ b/scripts/object/tangible/painting/painting_wod_sm_02.py @@ -1,4 +1,6 @@ import sys def setup(core, object): - return \ No newline at end of file + return + + #Singing Mountain Clan Tapestry (closeup_ \ No newline at end of file diff --git a/scripts/object/tangible/painting/painting_wookiee_f.py b/scripts/object/tangible/painting/painting_wookiee_f.py index ccad8904..b63f1322 100644 --- a/scripts/object/tangible/painting/painting_wookiee_f.py +++ b/scripts/object/tangible/painting/painting_wookiee_f.py @@ -1,4 +1,6 @@ import sys def setup(core, object): - return \ No newline at end of file + return + + #Life Day Matriarch \ No newline at end of file diff --git a/scripts/object/tangible/painting/painting_wookiee_m.py b/scripts/object/tangible/painting/painting_wookiee_m.py index ccad8904..8d24228a 100644 --- a/scripts/object/tangible/painting/painting_wookiee_m.py +++ b/scripts/object/tangible/painting/painting_wookiee_m.py @@ -1,4 +1,6 @@ import sys def setup(core, object): - return \ No newline at end of file + return + + #Life Day Patriarch \ No newline at end of file diff --git a/scripts/object/tangible/painting/painting_zabrak_f.py b/scripts/object/tangible/painting/painting_zabrak_f.py index ccad8904..4ce9f757 100644 --- a/scripts/object/tangible/painting/painting_zabrak_f.py +++ b/scripts/object/tangible/painting/painting_zabrak_f.py @@ -1,4 +1,6 @@ import sys def setup(core, object): - return \ No newline at end of file + return + + #Painting of Lady T'Iani \ No newline at end of file diff --git a/scripts/object/tangible/painting/painting_zabrak_m.py b/scripts/object/tangible/painting/painting_zabrak_m.py index ccad8904..f991f709 100644 --- a/scripts/object/tangible/painting/painting_zabrak_m.py +++ b/scripts/object/tangible/painting/painting_zabrak_m.py @@ -1,4 +1,6 @@ import sys def setup(core, object): - return \ No newline at end of file + return + + #painting of High Commander T'Inia \ No newline at end of file diff --git a/scripts/object/tangible/quest/ac_quest_loc3_bacta_tank.py b/scripts/object/tangible/quest/ac_quest_loc3_bacta_tank.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/ac_quest_loc3_bacta_tank.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/ac_quest_loc4_supervisors_desk.py b/scripts/object/tangible/quest/ac_quest_loc4_supervisors_desk.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/ac_quest_loc4_supervisors_desk.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/ac_quest_loc5_memorial.py b/scripts/object/tangible/quest/ac_quest_loc5_memorial.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/ac_quest_loc5_memorial.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/ac_quest_loc6_emberlene_essence.py b/scripts/object/tangible/quest/ac_quest_loc6_emberlene_essence.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/ac_quest_loc6_emberlene_essence.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/ac_rotting_dune_bramble.py b/scripts/object/tangible/quest/ac_rotting_dune_bramble.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/ac_rotting_dune_bramble.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/ac_terminal_loc1_01.py b/scripts/object/tangible/quest/ac_terminal_loc1_01.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/ac_terminal_loc1_01.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/ac_terminal_loc1_02.py b/scripts/object/tangible/quest/ac_terminal_loc1_02.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/ac_terminal_loc1_02.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/ac_terminal_loc2_01.py b/scripts/object/tangible/quest/ac_terminal_loc2_01.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/ac_terminal_loc2_01.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/ac_terminal_loc2_02.py b/scripts/object/tangible/quest/ac_terminal_loc2_02.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/ac_terminal_loc2_02.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/ac_terminal_loc3_03.py b/scripts/object/tangible/quest/ac_terminal_loc3_03.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/ac_terminal_loc3_03.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/ac_terminal_loc4_04.py b/scripts/object/tangible/quest/ac_terminal_loc4_04.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/ac_terminal_loc4_04.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/ac_terminal_loc5_05.py b/scripts/object/tangible/quest/ac_terminal_loc5_05.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/ac_terminal_loc5_05.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/ac_terminal_loc6_01.py b/scripts/object/tangible/quest/ac_terminal_loc6_01.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/ac_terminal_loc6_01.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/avatar_cold_storage.py b/scripts/object/tangible/quest/avatar_cold_storage.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/avatar_cold_storage.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/avatar_foot_locker.py b/scripts/object/tangible/quest/avatar_foot_locker.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/avatar_foot_locker.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/avatar_locker_sr71.py b/scripts/object/tangible/quest/avatar_locker_sr71.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/avatar_locker_sr71.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/avatar_medical_records.py b/scripts/object/tangible/quest/avatar_medical_records.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/avatar_medical_records.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/avatar_safety_01.py b/scripts/object/tangible/quest/avatar_safety_01.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/avatar_safety_01.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/avatar_safety_02.py b/scripts/object/tangible/quest/avatar_safety_02.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/avatar_safety_02.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/avatar_storage_case.py b/scripts/object/tangible/quest/avatar_storage_case.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/avatar_storage_case.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/avatar_warm_storage.py b/scripts/object/tangible/quest/avatar_warm_storage.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/avatar_warm_storage.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/azure_cabal_proptis_necklace.py b/scripts/object/tangible/quest/azure_cabal_proptis_necklace.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/azure_cabal_proptis_necklace.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/azure_cabal_proptis_purse.py b/scripts/object/tangible/quest/azure_cabal_proptis_purse.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/azure_cabal_proptis_purse.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/blooming_sapflower.py b/scripts/object/tangible/quest/blooming_sapflower.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/blooming_sapflower.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/bounty_hunter_1_death.py b/scripts/object/tangible/quest/bounty_hunter_1_death.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/bounty_hunter_1_death.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/bounty_hunter_1_drugs.py b/scripts/object/tangible/quest/bounty_hunter_1_drugs.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/bounty_hunter_1_drugs.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/bounty_hunter_1_flower.py b/scripts/object/tangible/quest/bounty_hunter_1_flower.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/bounty_hunter_1_flower.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/bounty_hunter_2_datapad.py b/scripts/object/tangible/quest/bounty_hunter_2_datapad.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/bounty_hunter_2_datapad.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/bounty_hunter_2_death.py b/scripts/object/tangible/quest/bounty_hunter_2_death.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/bounty_hunter_2_death.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/box_large.py b/scripts/object/tangible/quest/box_large.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/box_large.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/box_magseal.py b/scripts/object/tangible/quest/box_magseal.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/box_magseal.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/camp_crate.py b/scripts/object/tangible/quest/camp_crate.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/camp_crate.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/cb_1_deflarian_communication_terminal.py b/scripts/object/tangible/quest/cb_1_deflarian_communication_terminal.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/cb_1_deflarian_communication_terminal.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/cb_1_medical_equipment.py b/scripts/object/tangible/quest/cb_1_medical_equipment.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/cb_1_medical_equipment.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/cb_3_weapon_container.py b/scripts/object/tangible/quest/cb_3_weapon_container.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/cb_3_weapon_container.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/clone_relics_box_large.py b/scripts/object/tangible/quest/clone_relics_box_large.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/clone_relics_box_large.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/clone_relics_box_magseal.py b/scripts/object/tangible/quest/clone_relics_box_magseal.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/clone_relics_box_magseal.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/clone_relics_computer_terminal.py b/scripts/object/tangible/quest/clone_relics_computer_terminal.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/clone_relics_computer_terminal.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/clone_relics_skeleton_human.py b/scripts/object/tangible/quest/clone_relics_skeleton_human.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/clone_relics_skeleton_human.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/clone_relics_starmap_box.py b/scripts/object/tangible/quest/clone_relics_starmap_box.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/clone_relics_starmap_box.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/col_jedi_robi_dark_jedi_controller.py b/scripts/object/tangible/quest/col_jedi_robi_dark_jedi_controller.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/col_jedi_robi_dark_jedi_controller.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/col_jedi_robi_light_jedi_controller.py b/scripts/object/tangible/quest/col_jedi_robi_light_jedi_controller.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/col_jedi_robi_light_jedi_controller.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/computer_console.py b/scripts/object/tangible/quest/computer_console.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/computer_console.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/computer_databank.py b/scripts/object/tangible/quest/computer_databank.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/computer_databank.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/computer_terminal.py b/scripts/object/tangible/quest/computer_terminal.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/computer_terminal.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/content/holiday_loveday_barrel.py b/scripts/object/tangible/quest/content/holiday_loveday_barrel.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/content/holiday_loveday_barrel.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/content/holiday_loveday_disillusion_crossbow.py b/scripts/object/tangible/quest/content/holiday_loveday_disillusion_crossbow.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/content/holiday_loveday_disillusion_crossbow.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/coreliian_slaver_narlissas_datapad.py b/scripts/object/tangible/quest/coreliian_slaver_narlissas_datapad.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/coreliian_slaver_narlissas_datapad.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/corellia/corellia_38_braggan_corpse.py b/scripts/object/tangible/quest/corellia/corellia_38_braggan_corpse.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/corellia/corellia_38_braggan_corpse.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/corellia/corellia_38_braggan_datapad.py b/scripts/object/tangible/quest/corellia/corellia_38_braggan_datapad.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/corellia/corellia_38_braggan_datapad.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/corellia/corellia_38_braggan_journal.py b/scripts/object/tangible/quest/corellia/corellia_38_braggan_journal.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/corellia/corellia_38_braggan_journal.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/corellia/corellia_38_crate_ryll.py b/scripts/object/tangible/quest/corellia/corellia_38_crate_ryll.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/corellia/corellia_38_crate_ryll.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/corellia/corellia_38_crate_unrefined_ryll.py b/scripts/object/tangible/quest/corellia/corellia_38_crate_unrefined_ryll.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/corellia/corellia_38_crate_unrefined_ryll.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/corellia/corellia_38_hershel_blaster.py b/scripts/object/tangible/quest/corellia/corellia_38_hershel_blaster.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/corellia/corellia_38_hershel_blaster.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/corellia/corellia_38_hershel_corpse.py b/scripts/object/tangible/quest/corellia/corellia_38_hershel_corpse.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/corellia/corellia_38_hershel_corpse.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/corellia/corellia_38_mayor_package.py b/scripts/object/tangible/quest/corellia/corellia_38_mayor_package.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/corellia/corellia_38_mayor_package.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/corellia/corellia_38_mayor_terminal.py b/scripts/object/tangible/quest/corellia/corellia_38_mayor_terminal.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/corellia/corellia_38_mayor_terminal.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/corellia/corellia_38_meatlump_armor.py b/scripts/object/tangible/quest/corellia/corellia_38_meatlump_armor.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/corellia/corellia_38_meatlump_armor.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/corellia/corellia_38_meatlump_food.py b/scripts/object/tangible/quest/corellia/corellia_38_meatlump_food.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/corellia/corellia_38_meatlump_food.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/corellia/corellia_38_meatlump_weapons.py b/scripts/object/tangible/quest/corellia/corellia_38_meatlump_weapons.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/corellia/corellia_38_meatlump_weapons.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/corellia/corellia_38_paper_scrap.py b/scripts/object/tangible/quest/corellia/corellia_38_paper_scrap.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/corellia/corellia_38_paper_scrap.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/corellia/corellia_38_pech_seki_bag.py b/scripts/object/tangible/quest/corellia/corellia_38_pech_seki_bag.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/corellia/corellia_38_pech_seki_bag.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/corellia/corellia_38_pech_seki_strongbox.py b/scripts/object/tangible/quest/corellia/corellia_38_pech_seki_strongbox.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/corellia/corellia_38_pech_seki_strongbox.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/corellia/corellia_38_red_circle_mainframe.py b/scripts/object/tangible/quest/corellia/corellia_38_red_circle_mainframe.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/corellia/corellia_38_red_circle_mainframe.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/corellia/corellia_38_ryll_seller_database.py b/scripts/object/tangible/quest/corellia/corellia_38_ryll_seller_database.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/corellia/corellia_38_ryll_seller_database.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/corellia/corellia_38_ryll_smuggler_mainframe.py b/scripts/object/tangible/quest/corellia/corellia_38_ryll_smuggler_mainframe.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/corellia/corellia_38_ryll_smuggler_mainframe.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/corellia/corellia_38_stolen_goods.py b/scripts/object/tangible/quest/corellia/corellia_38_stolen_goods.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/corellia/corellia_38_stolen_goods.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/corellia/corellia_38_transmitter.py b/scripts/object/tangible/quest/corellia/corellia_38_transmitter.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/corellia/corellia_38_transmitter.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/corellia/corellia_38_wilfred_medal.py b/scripts/object/tangible/quest/corellia/corellia_38_wilfred_medal.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/corellia/corellia_38_wilfred_medal.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/corellia/corellia_39_bio_weapons_database.py b/scripts/object/tangible/quest/corellia/corellia_39_bio_weapons_database.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/corellia/corellia_39_bio_weapons_database.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/corellia/corellia_39_camera.py b/scripts/object/tangible/quest/corellia/corellia_39_camera.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/corellia/corellia_39_camera.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/corellia/corellia_39_corsec_termimal.py b/scripts/object/tangible/quest/corellia/corellia_39_corsec_termimal.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/corellia/corellia_39_corsec_termimal.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/corellia/corellia_39_crate_spice.py b/scripts/object/tangible/quest/corellia/corellia_39_crate_spice.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/corellia/corellia_39_crate_spice.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/corellia/corellia_39_drall_patriot_terminal.py b/scripts/object/tangible/quest/corellia/corellia_39_drall_patriot_terminal.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/corellia/corellia_39_drall_patriot_terminal.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/corellia/corellia_39_durni_cage.py b/scripts/object/tangible/quest/corellia/corellia_39_durni_cage.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/corellia/corellia_39_durni_cage.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/corellia/corellia_39_experimental_weapon_01.py b/scripts/object/tangible/quest/corellia/corellia_39_experimental_weapon_01.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/corellia/corellia_39_experimental_weapon_01.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/corellia/corellia_39_experimental_weapon_02.py b/scripts/object/tangible/quest/corellia/corellia_39_experimental_weapon_02.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/corellia/corellia_39_experimental_weapon_02.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/corellia/corellia_39_experimental_weapon_03.py b/scripts/object/tangible/quest/corellia/corellia_39_experimental_weapon_03.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/corellia/corellia_39_experimental_weapon_03.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/corellia/corellia_39_genovin_seyda_mainframe.py b/scripts/object/tangible/quest/corellia/corellia_39_genovin_seyda_mainframe.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/corellia/corellia_39_genovin_seyda_mainframe.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/corellia/corellia_39_jzoro_mainframe.py b/scripts/object/tangible/quest/corellia/corellia_39_jzoro_mainframe.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/corellia/corellia_39_jzoro_mainframe.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/corellia/corellia_39_kazic_datapad.py b/scripts/object/tangible/quest/corellia/corellia_39_kazic_datapad.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/corellia/corellia_39_kazic_datapad.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/corellia/corellia_39_shobbo_terminal.py b/scripts/object/tangible/quest/corellia/corellia_39_shobbo_terminal.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/corellia/corellia_39_shobbo_terminal.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/corellia/corellia_39_trins_evnar_answering.py b/scripts/object/tangible/quest/corellia/corellia_39_trins_evnar_answering.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/corellia/corellia_39_trins_evnar_answering.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/corellia/corellia_39_trins_evnar_datapad.py b/scripts/object/tangible/quest/corellia/corellia_39_trins_evnar_datapad.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/corellia/corellia_39_trins_evnar_datapad.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/corellia/corellia_39_trins_evnar_terminal.py b/scripts/object/tangible/quest/corellia/corellia_39_trins_evnar_terminal.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/corellia/corellia_39_trins_evnar_terminal.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/corellia/corellia_39_vryim_raeth_corpse.py b/scripts/object/tangible/quest/corellia/corellia_39_vryim_raeth_corpse.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/corellia/corellia_39_vryim_raeth_corpse.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/corellia/corellia_droid_factory_antenna_control.py b/scripts/object/tangible/quest/corellia/corellia_droid_factory_antenna_control.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/corellia/corellia_droid_factory_antenna_control.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/corellia/corellia_droid_factory_control_1.py b/scripts/object/tangible/quest/corellia/corellia_droid_factory_control_1.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/corellia/corellia_droid_factory_control_1.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/corellia/corellia_droid_factory_power_terminal.py b/scripts/object/tangible/quest/corellia/corellia_droid_factory_power_terminal.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/corellia/corellia_droid_factory_power_terminal.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/corellia/corellia_droid_factory_terminal_1.py b/scripts/object/tangible/quest/corellia/corellia_droid_factory_terminal_1.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/corellia/corellia_droid_factory_terminal_1.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/corellia/corellia_droid_factory_terminal_2.py b/scripts/object/tangible/quest/corellia/corellia_droid_factory_terminal_2.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/corellia/corellia_droid_factory_terminal_2.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/corellia/corellia_droid_factory_terminal_3.py b/scripts/object/tangible/quest/corellia/corellia_droid_factory_terminal_3.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/corellia/corellia_droid_factory_terminal_3.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/corellia/corellia_droid_factory_terminal_4.py b/scripts/object/tangible/quest/corellia/corellia_droid_factory_terminal_4.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/corellia/corellia_droid_factory_terminal_4.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/corellia_coronet_diktat_search_desk.py b/scripts/object/tangible/quest/corellia_coronet_diktat_search_desk.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/corellia_coronet_diktat_search_desk.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/corellia_coronet_diktat_search_terminal.py b/scripts/object/tangible/quest/corellia_coronet_diktat_search_terminal.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/corellia_coronet_diktat_search_terminal.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/corellia_coronet_farm_aid_stolen_grain.py b/scripts/object/tangible/quest/corellia_coronet_farm_aid_stolen_grain.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/corellia_coronet_farm_aid_stolen_grain.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/corellia_coronet_government_work_courier.py b/scripts/object/tangible/quest/corellia_coronet_government_work_courier.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/corellia_coronet_government_work_courier.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/corellia_coronet_government_work_dropbox.py b/scripts/object/tangible/quest/corellia_coronet_government_work_dropbox.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/corellia_coronet_government_work_dropbox.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/corellia_coronet_lt_jasper_datapad.py b/scripts/object/tangible/quest/corellia_coronet_lt_jasper_datapad.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/corellia_coronet_lt_jasper_datapad.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/corellia_coronet_meatlump_act1_radio.py b/scripts/object/tangible/quest/corellia_coronet_meatlump_act1_radio.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/corellia_coronet_meatlump_act1_radio.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/corellia_coronet_meatlump_act1_shipment.py b/scripts/object/tangible/quest/corellia_coronet_meatlump_act1_shipment.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/corellia_coronet_meatlump_act1_shipment.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/corellia_coronet_rogue_corsec_base_computer.py b/scripts/object/tangible/quest/corellia_coronet_rogue_corsec_base_computer.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/corellia_coronet_rogue_corsec_base_computer.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/corellia_coronet_rogue_corsec_base_computer_fake.py b/scripts/object/tangible/quest/corellia_coronet_rogue_corsec_base_computer_fake.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/corellia_coronet_rogue_corsec_base_computer_fake.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/corellia_coronet_the_informant_hidden_stash.py b/scripts/object/tangible/quest/corellia_coronet_the_informant_hidden_stash.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/corellia_coronet_the_informant_hidden_stash.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/corellia_coronet_the_meeting_data_terminal.py b/scripts/object/tangible/quest/corellia_coronet_the_meeting_data_terminal.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/corellia_coronet_the_meeting_data_terminal.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/corellia_dark_spirit_device.py b/scripts/object/tangible/quest/corellia_dark_spirit_device.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/corellia_dark_spirit_device.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/corellia_disappearances_1_first_stop.py b/scripts/object/tangible/quest/corellia_disappearances_1_first_stop.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/corellia_disappearances_1_first_stop.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/corellia_disappearances_1_second_stop.py b/scripts/object/tangible/quest/corellia_disappearances_1_second_stop.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/corellia_disappearances_1_second_stop.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/corellia_disappearances_1_third_stop.py b/scripts/object/tangible/quest/corellia_disappearances_1_third_stop.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/corellia_disappearances_1_third_stop.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/corellia_disappearances_2_object_1.py b/scripts/object/tangible/quest/corellia_disappearances_2_object_1.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/corellia_disappearances_2_object_1.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/corellia_disappearances_2_object_2.py b/scripts/object/tangible/quest/corellia_disappearances_2_object_2.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/corellia_disappearances_2_object_2.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/corellia_disappearances_2_object_3.py b/scripts/object/tangible/quest/corellia_disappearances_2_object_3.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/corellia_disappearances_2_object_3.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/corellia_disappearances_2_object_4.py b/scripts/object/tangible/quest/corellia_disappearances_2_object_4.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/corellia_disappearances_2_object_4.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/corellia_disappearances_4_first_antenna.py b/scripts/object/tangible/quest/corellia_disappearances_4_first_antenna.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/corellia_disappearances_4_first_antenna.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/corellia_disappearances_4_second_antenna.py b/scripts/object/tangible/quest/corellia_disappearances_4_second_antenna.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/corellia_disappearances_4_second_antenna.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/corellia_disappearances_4_third_antenna.py b/scripts/object/tangible/quest/corellia_disappearances_4_third_antenna.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/corellia_disappearances_4_third_antenna.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/corellia_disappearances_5_cage_1.py b/scripts/object/tangible/quest/corellia_disappearances_5_cage_1.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/corellia_disappearances_5_cage_1.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/corellia_disappearances_5_cage_2.py b/scripts/object/tangible/quest/corellia_disappearances_5_cage_2.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/corellia_disappearances_5_cage_2.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/corellia_disappearances_5_cage_3.py b/scripts/object/tangible/quest/corellia_disappearances_5_cage_3.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/corellia_disappearances_5_cage_3.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/corellia_disappearances_6_journal.py b/scripts/object/tangible/quest/corellia_disappearances_6_journal.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/corellia_disappearances_6_journal.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/corellia_greck_bomb.py b/scripts/object/tangible/quest/corellia_greck_bomb.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/corellia_greck_bomb.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/corellia_greck_dossier.py b/scripts/object/tangible/quest/corellia_greck_dossier.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/corellia_greck_dossier.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/corellia_meatlump_hideout_detonator.py b/scripts/object/tangible/quest/corellia_meatlump_hideout_detonator.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/corellia_meatlump_hideout_detonator.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/corellia_meatlump_hideout_explosives.py b/scripts/object/tangible/quest/corellia_meatlump_hideout_explosives.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/corellia_meatlump_hideout_explosives.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/corellia_meatlump_hideout_wire_spool.py b/scripts/object/tangible/quest/corellia_meatlump_hideout_wire_spool.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/corellia_meatlump_hideout_wire_spool.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/corellia_murmur_chemicals.py b/scripts/object/tangible/quest/corellia_murmur_chemicals.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/corellia_murmur_chemicals.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/corellia_murmur_elevator_down_1.py b/scripts/object/tangible/quest/corellia_murmur_elevator_down_1.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/corellia_murmur_elevator_down_1.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/corellia_murmur_elevator_down_2.py b/scripts/object/tangible/quest/corellia_murmur_elevator_down_2.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/corellia_murmur_elevator_down_2.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/corellia_murmur_feed.py b/scripts/object/tangible/quest/corellia_murmur_feed.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/corellia_murmur_feed.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/corellia_murmur_mainframe.py b/scripts/object/tangible/quest/corellia_murmur_mainframe.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/corellia_murmur_mainframe.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/corellia_murmur_medical_cabinet.py b/scripts/object/tangible/quest/corellia_murmur_medical_cabinet.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/corellia_murmur_medical_cabinet.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/corellia_murmur_shipment_datapad.py b/scripts/object/tangible/quest/corellia_murmur_shipment_datapad.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/corellia_murmur_shipment_datapad.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/corellia_murmur_side_missing_brother.py b/scripts/object/tangible/quest/corellia_murmur_side_missing_brother.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/corellia_murmur_side_missing_brother.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/corellia_murmur_tranquilizer.py b/scripts/object/tangible/quest/corellia_murmur_tranquilizer.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/corellia_murmur_tranquilizer.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/corellia_slaver_elevator_down_1.py b/scripts/object/tangible/quest/corellia_slaver_elevator_down_1.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/corellia_slaver_elevator_down_1.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/corellia_slaver_elevator_down_2.py b/scripts/object/tangible/quest/corellia_slaver_elevator_down_2.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/corellia_slaver_elevator_down_2.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/corellia_slaver_elevator_down_3.py b/scripts/object/tangible/quest/corellia_slaver_elevator_down_3.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/corellia_slaver_elevator_down_3.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/corellia_slaver_elevator_down_4.py b/scripts/object/tangible/quest/corellia_slaver_elevator_down_4.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/corellia_slaver_elevator_down_4.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/corellia_slaver_narlissa_datapad.py b/scripts/object/tangible/quest/corellia_slaver_narlissa_datapad.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/corellia_slaver_narlissa_datapad.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/corellia_tyrena_faye_datapad.py b/scripts/object/tangible/quest/corellia_tyrena_faye_datapad.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/corellia_tyrena_faye_datapad.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/corellian_slaver_access_terminal_01.py b/scripts/object/tangible/quest/corellian_slaver_access_terminal_01.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/corellian_slaver_access_terminal_01.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/corellian_slaver_access_terminal_02.py b/scripts/object/tangible/quest/corellian_slaver_access_terminal_02.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/corellian_slaver_access_terminal_02.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/corellian_slaver_access_terminal_03.py b/scripts/object/tangible/quest/corellian_slaver_access_terminal_03.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/corellian_slaver_access_terminal_03.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/corellian_slaver_access_terminal_04.py b/scripts/object/tangible/quest/corellian_slaver_access_terminal_04.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/corellian_slaver_access_terminal_04.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/corellian_slaver_access_terminal_05.py b/scripts/object/tangible/quest/corellian_slaver_access_terminal_05.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/corellian_slaver_access_terminal_05.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/corellian_slaver_access_terminal_06.py b/scripts/object/tangible/quest/corellian_slaver_access_terminal_06.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/corellian_slaver_access_terminal_06.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/corellian_slaver_access_terminal_07.py b/scripts/object/tangible/quest/corellian_slaver_access_terminal_07.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/corellian_slaver_access_terminal_07.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/corellian_slaver_clerk_datapad.py b/scripts/object/tangible/quest/corellian_slaver_clerk_datapad.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/corellian_slaver_clerk_datapad.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/corellian_slaver_medical_computer.py b/scripts/object/tangible/quest/corellian_slaver_medical_computer.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/corellian_slaver_medical_computer.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/crate_large.py b/scripts/object/tangible/quest/crate_large.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/crate_large.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/crate_magseal.py b/scripts/object/tangible/quest/crate_magseal.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/crate_magseal.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/database_terminal.py b/scripts/object/tangible/quest/database_terminal.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/database_terminal.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/dead_forest_stump.py b/scripts/object/tangible/quest/dead_forest_stump.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/dead_forest_stump.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/elder_robe_ex_relic_dantooine.py b/scripts/object/tangible/quest/elder_robe_ex_relic_dantooine.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/elder_robe_ex_relic_dantooine.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/elder_robe_ex_relic_endor.py b/scripts/object/tangible/quest/elder_robe_ex_relic_endor.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/elder_robe_ex_relic_endor.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/elder_robe_ex_relic_lok.py b/scripts/object/tangible/quest/elder_robe_ex_relic_lok.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/elder_robe_ex_relic_lok.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/elder_robe_ex_relic_talus.py b/scripts/object/tangible/quest/elder_robe_ex_relic_talus.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/elder_robe_ex_relic_talus.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/elder_robe_ex_relic_tatooine.py b/scripts/object/tangible/quest/elder_robe_ex_relic_tatooine.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/elder_robe_ex_relic_tatooine.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/elder_robe_ex_relic_yavin4.py b/scripts/object/tangible/quest/elder_robe_ex_relic_yavin4.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/elder_robe_ex_relic_yavin4.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/empire_day/crash_site_02_crate_01_container.py b/scripts/object/tangible/quest/empire_day/crash_site_02_crate_01_container.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/empire_day/crash_site_02_crate_01_container.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/empire_day/crash_site_02_crate_02_container.py b/scripts/object/tangible/quest/empire_day/crash_site_02_crate_02_container.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/empire_day/crash_site_02_crate_02_container.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/empire_day/crash_site_02_crate_03_container.py b/scripts/object/tangible/quest/empire_day/crash_site_02_crate_03_container.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/empire_day/crash_site_02_crate_03_container.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/empire_day/crash_site_02_crate_04_container.py b/scripts/object/tangible/quest/empire_day/crash_site_02_crate_04_container.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/empire_day/crash_site_02_crate_04_container.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/empire_day/crash_site_02_requisition_container.py b/scripts/object/tangible/quest/empire_day/crash_site_02_requisition_container.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/empire_day/crash_site_02_requisition_container.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/empire_day/crash_site_03_crate_01_container.py b/scripts/object/tangible/quest/empire_day/crash_site_03_crate_01_container.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/empire_day/crash_site_03_crate_01_container.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/empire_day/crash_site_03_crate_02_container.py b/scripts/object/tangible/quest/empire_day/crash_site_03_crate_02_container.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/empire_day/crash_site_03_crate_02_container.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/empire_day/crash_site_03_crate_03_container.py b/scripts/object/tangible/quest/empire_day/crash_site_03_crate_03_container.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/empire_day/crash_site_03_crate_03_container.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/empire_day/crash_site_03_crate_04_container.py b/scripts/object/tangible/quest/empire_day/crash_site_03_crate_04_container.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/empire_day/crash_site_03_crate_04_container.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/empire_day/crash_site_03_requisition_container.py b/scripts/object/tangible/quest/empire_day/crash_site_03_requisition_container.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/empire_day/crash_site_03_requisition_container.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/empire_day/crash_site_04_crate_01_container.py b/scripts/object/tangible/quest/empire_day/crash_site_04_crate_01_container.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/empire_day/crash_site_04_crate_01_container.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/empire_day/crash_site_04_crate_02_container.py b/scripts/object/tangible/quest/empire_day/crash_site_04_crate_02_container.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/empire_day/crash_site_04_crate_02_container.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/empire_day/crash_site_04_crate_03_container.py b/scripts/object/tangible/quest/empire_day/crash_site_04_crate_03_container.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/empire_day/crash_site_04_crate_03_container.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/empire_day/crash_site_04_crate_04_container.py b/scripts/object/tangible/quest/empire_day/crash_site_04_crate_04_container.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/empire_day/crash_site_04_crate_04_container.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/empire_day/crash_site_04_requisition_container.py b/scripts/object/tangible/quest/empire_day/crash_site_04_requisition_container.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/empire_day/crash_site_04_requisition_container.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/empire_day/crash_site_05_crate_01_container.py b/scripts/object/tangible/quest/empire_day/crash_site_05_crate_01_container.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/empire_day/crash_site_05_crate_01_container.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/empire_day/crash_site_05_crate_02_container.py b/scripts/object/tangible/quest/empire_day/crash_site_05_crate_02_container.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/empire_day/crash_site_05_crate_02_container.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/empire_day/crash_site_05_crate_03_container.py b/scripts/object/tangible/quest/empire_day/crash_site_05_crate_03_container.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/empire_day/crash_site_05_crate_03_container.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/empire_day/crash_site_05_crate_04_container.py b/scripts/object/tangible/quest/empire_day/crash_site_05_crate_04_container.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/empire_day/crash_site_05_crate_04_container.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/empire_day/crash_site_05_requisition_container.py b/scripts/object/tangible/quest/empire_day/crash_site_05_requisition_container.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/empire_day/crash_site_05_requisition_container.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/empire_day/crash_site_06_crate_01_container.py b/scripts/object/tangible/quest/empire_day/crash_site_06_crate_01_container.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/empire_day/crash_site_06_crate_01_container.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/empire_day/crash_site_06_crate_02_container.py b/scripts/object/tangible/quest/empire_day/crash_site_06_crate_02_container.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/empire_day/crash_site_06_crate_02_container.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/empire_day/crash_site_06_crate_03_container.py b/scripts/object/tangible/quest/empire_day/crash_site_06_crate_03_container.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/empire_day/crash_site_06_crate_03_container.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/empire_day/crash_site_06_crate_04_container.py b/scripts/object/tangible/quest/empire_day/crash_site_06_crate_04_container.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/empire_day/crash_site_06_crate_04_container.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/empire_day/crash_site_06_requisition_container.py b/scripts/object/tangible/quest/empire_day/crash_site_06_requisition_container.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/empire_day/crash_site_06_requisition_container.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/empire_day/crash_site_crate_01_container.py b/scripts/object/tangible/quest/empire_day/crash_site_crate_01_container.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/empire_day/crash_site_crate_01_container.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/empire_day/crash_site_crate_02_container.py b/scripts/object/tangible/quest/empire_day/crash_site_crate_02_container.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/empire_day/crash_site_crate_02_container.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/empire_day/crash_site_crate_03_container.py b/scripts/object/tangible/quest/empire_day/crash_site_crate_03_container.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/empire_day/crash_site_crate_03_container.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/empire_day/crash_site_crate_04_container.py b/scripts/object/tangible/quest/empire_day/crash_site_crate_04_container.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/empire_day/crash_site_crate_04_container.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/empire_day/crash_site_requisition_container.py b/scripts/object/tangible/quest/empire_day/crash_site_requisition_container.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/empire_day/crash_site_requisition_container.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/etyyy_brody_campsite_corpse.py b/scripts/object/tangible/quest/etyyy_brody_campsite_corpse.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/etyyy_brody_campsite_corpse.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/etyyy_chiss_poached_goods.py b/scripts/object/tangible/quest/etyyy_chiss_poached_goods.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/etyyy_chiss_poached_goods.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/etyyy_ryoos_salt.py b/scripts/object/tangible/quest/etyyy_ryoos_salt.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/etyyy_ryoos_salt.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/flora_plant_jawa_juice.py b/scripts/object/tangible/quest/flora_plant_jawa_juice.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/flora_plant_jawa_juice.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/forest_smooth_rocks.py b/scripts/object/tangible/quest/forest_smooth_rocks.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/forest_smooth_rocks.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/frn_all_security_terminal_wall_01.py b/scripts/object/tangible/quest/frn_all_security_terminal_wall_01.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/frn_all_security_terminal_wall_01.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/frn_all_security_terminal_wall_02.py b/scripts/object/tangible/quest/frn_all_security_terminal_wall_02.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/frn_all_security_terminal_wall_02.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/frn_all_security_terminal_wall_03.py b/scripts/object/tangible/quest/frn_all_security_terminal_wall_03.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/frn_all_security_terminal_wall_03.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/frn_all_security_terminal_wall_04.py b/scripts/object/tangible/quest/frn_all_security_terminal_wall_04.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/frn_all_security_terminal_wall_04.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/gravestone.py b/scripts/object/tangible/quest/gravestone.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/gravestone.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/gravestone_shmi.py b/scripts/object/tangible/quest/gravestone_shmi.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/gravestone_shmi.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/heroic/heroic_echo_base_tower_hatch.py b/scripts/object/tangible/quest/heroic/heroic_echo_base_tower_hatch.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/heroic/heroic_echo_base_tower_hatch.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/heroic/heroic_echo_base_wampa_fun_entrance.py b/scripts/object/tangible/quest/heroic/heroic_echo_base_wampa_fun_entrance.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/heroic/heroic_echo_base_wampa_fun_entrance.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/heroic/heroic_echo_base_wampa_fun_exit.py b/scripts/object/tangible/quest/heroic/heroic_echo_base_wampa_fun_exit.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/heroic/heroic_echo_base_wampa_fun_exit.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/heroic/heroic_exar_kun_entrance.py b/scripts/object/tangible/quest/heroic/heroic_exar_kun_entrance.py new file mode 100644 index 00000000..7ca08004 --- /dev/null +++ b/scripts/object/tangible/quest/heroic/heroic_exar_kun_entrance.py @@ -0,0 +1,9 @@ +import sys + +def setup(core, object): + object.setAttachment('radial_filename', 'instances/exar_kun/exar_kun_brazier') + return + +def use(core, actor, object): + if actor: + core.instanceService.queue('heroic_exar_kun', actor) \ No newline at end of file diff --git a/scripts/object/tangible/quest/imperial/itp_emperor_altered_datadisk.py b/scripts/object/tangible/quest/imperial/itp_emperor_altered_datadisk.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/imperial/itp_emperor_altered_datadisk.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/imperial/itp_emperor_datadisk.py b/scripts/object/tangible/quest/imperial/itp_emperor_datadisk.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/imperial/itp_emperor_datadisk.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/imperial/itp_emperor_security_terminal.py b/scripts/object/tangible/quest/imperial/itp_emperor_security_terminal.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/imperial/itp_emperor_security_terminal.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/imperial/itp_kaja_communication_array.py b/scripts/object/tangible/quest/imperial/itp_kaja_communication_array.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/imperial/itp_kaja_communication_array.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/imperial/itp_kaja_rebel_intel_disk.py b/scripts/object/tangible/quest/imperial/itp_kaja_rebel_intel_disk.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/imperial/itp_kaja_rebel_intel_disk.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/imperial/itp_kaja_requisition_terminal.py b/scripts/object/tangible/quest/imperial/itp_kaja_requisition_terminal.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/imperial/itp_kaja_requisition_terminal.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/imperial/itp_kaja_spy_data_terminal.py b/scripts/object/tangible/quest/imperial/itp_kaja_spy_data_terminal.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/imperial/itp_kaja_spy_data_terminal.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/imperial/itp_kaja_tower_access_terminal.py b/scripts/object/tangible/quest/imperial/itp_kaja_tower_access_terminal.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/imperial/itp_kaja_tower_access_terminal.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/imperial/itp_loam_datapad.py b/scripts/object/tangible/quest/imperial/itp_loam_datapad.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/imperial/itp_loam_datapad.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/imperial/itp_loam_rebel_supply.py b/scripts/object/tangible/quest/imperial/itp_loam_rebel_supply.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/imperial/itp_loam_rebel_supply.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/imperial/itp_thrawn_database.py b/scripts/object/tangible/quest/imperial/itp_thrawn_database.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/imperial/itp_thrawn_database.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/imperial/itp_thrawn_datapad.py b/scripts/object/tangible/quest/imperial/itp_thrawn_datapad.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/imperial/itp_thrawn_datapad.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/imperial/itp_thrawn_starship.py b/scripts/object/tangible/quest/imperial/itp_thrawn_starship.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/imperial/itp_thrawn_starship.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/imperial/itp_thrawn_transponder.py b/scripts/object/tangible/quest/imperial/itp_thrawn_transponder.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/imperial/itp_thrawn_transponder.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/imperial/itp_vader_debris.py b/scripts/object/tangible/quest/imperial/itp_vader_debris.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/imperial/itp_vader_debris.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/imperial/itp_vader_force_crystal.py b/scripts/object/tangible/quest/imperial/itp_vader_force_crystal.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/imperial/itp_vader_force_crystal.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/imperial/itp_veers_rebel_server.py b/scripts/object/tangible/quest/imperial/itp_veers_rebel_server.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/imperial/itp_veers_rebel_server.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/item_qst_bantha_gland.py b/scripts/object/tangible/quest/item_qst_bantha_gland.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/item_qst_bantha_gland.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/item_qst_bauble_bag_sm_hal.py b/scripts/object/tangible/quest/item_qst_bauble_bag_sm_hal.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/item_qst_bauble_bag_sm_hal.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/item_qst_dominant_bantha_heart.py b/scripts/object/tangible/quest/item_qst_dominant_bantha_heart.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/item_qst_dominant_bantha_heart.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/jawa_droid_r4_powerdown.py b/scripts/object/tangible/quest/jawa_droid_r4_powerdown.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/jawa_droid_r4_powerdown.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/jedi_gifts_1_wardrobe.py b/scripts/object/tangible/quest/jedi_gifts_1_wardrobe.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/jedi_gifts_1_wardrobe.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/jedi_gifts_2_chest.py b/scripts/object/tangible/quest/jedi_gifts_2_chest.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/jedi_gifts_2_chest.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/kachirho_destroyed_camp.py b/scripts/object/tangible/quest/kachirho_destroyed_camp.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/kachirho_destroyed_camp.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/kachirho_qst_bag.py b/scripts/object/tangible/quest/kachirho_qst_bag.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/kachirho_qst_bag.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/kachirho_varactyl_egg.py b/scripts/object/tangible/quest/kachirho_varactyl_egg.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/kachirho_varactyl_egg.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/kines_equipment.py b/scripts/object/tangible/quest/kines_equipment.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/kines_equipment.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/knives_thrust_datapad.py b/scripts/object/tangible/quest/knives_thrust_datapad.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/knives_thrust_datapad.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/legacy_darklighter_pallet1_datapad.py b/scripts/object/tangible/quest/legacy_darklighter_pallet1_datapad.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/legacy_darklighter_pallet1_datapad.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/legacy_darklighter_pallet2_datapad.py b/scripts/object/tangible/quest/legacy_darklighter_pallet2_datapad.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/legacy_darklighter_pallet2_datapad.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/legacy_darklighter_pallet3_datapad.py b/scripts/object/tangible/quest/legacy_darklighter_pallet3_datapad.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/legacy_darklighter_pallet3_datapad.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/legacy_darklighter_pallet4_datapad.py b/scripts/object/tangible/quest/legacy_darklighter_pallet4_datapad.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/legacy_darklighter_pallet4_datapad.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/legacy_darklighter_pallet5_datapad.py b/scripts/object/tangible/quest/legacy_darklighter_pallet5_datapad.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/legacy_darklighter_pallet5_datapad.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/legacy_droid_leg.py b/scripts/object/tangible/quest/legacy_droid_leg.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/legacy_droid_leg.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/legacy_droid_motivator.py b/scripts/object/tangible/quest/legacy_droid_motivator.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/legacy_droid_motivator.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/legacy_droid_torso.py b/scripts/object/tangible/quest/legacy_droid_torso.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/legacy_droid_torso.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/legacy_droid_utility.py b/scripts/object/tangible/quest/legacy_droid_utility.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/legacy_droid_utility.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/legacy_head_bag.py b/scripts/object/tangible/quest/legacy_head_bag.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/legacy_head_bag.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/legacy_head_cargo.py b/scripts/object/tangible/quest/legacy_head_cargo.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/legacy_head_cargo.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/legacy_head_chip.py b/scripts/object/tangible/quest/legacy_head_chip.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/legacy_head_chip.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/legacy_head_dragon.py b/scripts/object/tangible/quest/legacy_head_dragon.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/legacy_head_dragon.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/legacy_head_pain1.py b/scripts/object/tangible/quest/legacy_head_pain1.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/legacy_head_pain1.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/legacy_head_pain2.py b/scripts/object/tangible/quest/legacy_head_pain2.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/legacy_head_pain2.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/legacy_head_pain3.py b/scripts/object/tangible/quest/legacy_head_pain3.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/legacy_head_pain3.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/legacy_head_shuttle.py b/scripts/object/tangible/quest/legacy_head_shuttle.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/legacy_head_shuttle.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/legacy_jawatracks_harvester.py b/scripts/object/tangible/quest/legacy_jawatracks_harvester.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/legacy_jawatracks_harvester.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/legacy_speeder.py b/scripts/object/tangible/quest/legacy_speeder.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/legacy_speeder.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/legacy_speeder_plans.py b/scripts/object/tangible/quest/legacy_speeder_plans.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/legacy_speeder_plans.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/legacy_tracks_cuan_datapad.py b/scripts/object/tangible/quest/legacy_tracks_cuan_datapad.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/legacy_tracks_cuan_datapad.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/legacy_tracks_jawa_datapad.py b/scripts/object/tangible/quest/legacy_tracks_jawa_datapad.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/legacy_tracks_jawa_datapad.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/legacy_tracks_zef_datapad.py b/scripts/object/tangible/quest/legacy_tracks_zef_datapad.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/legacy_tracks_zef_datapad.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/legacy_valarian_pallet1_datapad.py b/scripts/object/tangible/quest/legacy_valarian_pallet1_datapad.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/legacy_valarian_pallet1_datapad.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/legacy_valarian_pallet2_datapad.py b/scripts/object/tangible/quest/legacy_valarian_pallet2_datapad.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/legacy_valarian_pallet2_datapad.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/legacy_valarian_pallet3_datapad.py b/scripts/object/tangible/quest/legacy_valarian_pallet3_datapad.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/legacy_valarian_pallet3_datapad.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/legacy_valarian_pallet4_datapad.py b/scripts/object/tangible/quest/legacy_valarian_pallet4_datapad.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/legacy_valarian_pallet4_datapad.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/legacy_valarian_pallet5_datapad.py b/scripts/object/tangible/quest/legacy_valarian_pallet5_datapad.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/legacy_valarian_pallet5_datapad.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/lost_squadron_tie_bomber.py b/scripts/object/tangible/quest/lost_squadron_tie_bomber.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/lost_squadron_tie_bomber.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/lost_squadron_xwing.py b/scripts/object/tangible/quest/lost_squadron_xwing.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/lost_squadron_xwing.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/luilris_mushrooms.py b/scripts/object/tangible/quest/luilris_mushrooms.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/luilris_mushrooms.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/mauler_stronghold_terminal.py b/scripts/object/tangible/quest/mauler_stronghold_terminal.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/mauler_stronghold_terminal.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/meatlump/mtp_hideout_quest01_crated_bomb.py b/scripts/object/tangible/quest/meatlump/mtp_hideout_quest01_crated_bomb.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/meatlump/mtp_hideout_quest01_crated_bomb.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/meatlump/mtp_hideout_quest01_datapad.py b/scripts/object/tangible/quest/meatlump/mtp_hideout_quest01_datapad.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/meatlump/mtp_hideout_quest01_datapad.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/meatlump/mtp_hideout_quest02_droid01.py b/scripts/object/tangible/quest/meatlump/mtp_hideout_quest02_droid01.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/meatlump/mtp_hideout_quest02_droid01.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/meatlump/mtp_hideout_quest02_droid02.py b/scripts/object/tangible/quest/meatlump/mtp_hideout_quest02_droid02.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/meatlump/mtp_hideout_quest02_droid02.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/meatlump/mtp_hideout_quest02_droid03.py b/scripts/object/tangible/quest/meatlump/mtp_hideout_quest02_droid03.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/meatlump/mtp_hideout_quest02_droid03.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/meatlump/mtp_hideout_quest02_droid04.py b/scripts/object/tangible/quest/meatlump/mtp_hideout_quest02_droid04.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/meatlump/mtp_hideout_quest02_droid04.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/meatlump/mtp_hideout_quest03_radio.py b/scripts/object/tangible/quest/meatlump/mtp_hideout_quest03_radio.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/meatlump/mtp_hideout_quest03_radio.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/meatlump/mtp_hideout_quest04_stash.py b/scripts/object/tangible/quest/meatlump/mtp_hideout_quest04_stash.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/meatlump/mtp_hideout_quest04_stash.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/meatlump/mtp_hideout_quest07_databank.py b/scripts/object/tangible/quest/meatlump/mtp_hideout_quest07_databank.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/meatlump/mtp_hideout_quest07_databank.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/meatlump/mtp_hideout_quest07_plans.py b/scripts/object/tangible/quest/meatlump/mtp_hideout_quest07_plans.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/meatlump/mtp_hideout_quest07_plans.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/medical_boxes.py b/scripts/object/tangible/quest/medical_boxes.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/medical_boxes.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/medical_desk.py b/scripts/object/tangible/quest/medical_desk.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/medical_desk.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/menagerie_terminal_01.py b/scripts/object/tangible/quest/menagerie_terminal_01.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/menagerie_terminal_01.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/menagerie_terminal_02.py b/scripts/object/tangible/quest/menagerie_terminal_02.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/menagerie_terminal_02.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/menagerie_terminal_03.py b/scripts/object/tangible/quest/menagerie_terminal_03.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/menagerie_terminal_03.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/menagerie_terminal_04.py b/scripts/object/tangible/quest/menagerie_terminal_04.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/menagerie_terminal_04.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/menagerie_terminal_05.py b/scripts/object/tangible/quest/menagerie_terminal_05.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/menagerie_terminal_05.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/menagerie_terminal_06.py b/scripts/object/tangible/quest/menagerie_terminal_06.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/menagerie_terminal_06.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/menagerie_terminal_07.py b/scripts/object/tangible/quest/menagerie_terminal_07.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/menagerie_terminal_07.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/menagerie_terminal_08.py b/scripts/object/tangible/quest/menagerie_terminal_08.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/menagerie_terminal_08.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/menagerie_terminal_09.py b/scripts/object/tangible/quest/menagerie_terminal_09.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/menagerie_terminal_09.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/menagerie_terminal_10.py b/scripts/object/tangible/quest/menagerie_terminal_10.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/menagerie_terminal_10.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/menagerie_terminal_11.py b/scripts/object/tangible/quest/menagerie_terminal_11.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/menagerie_terminal_11.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/menagerie_terminal_12.py b/scripts/object/tangible/quest/menagerie_terminal_12.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/menagerie_terminal_12.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/menagerie_terminal_13.py b/scripts/object/tangible/quest/menagerie_terminal_13.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/menagerie_terminal_13.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/menagerie_terminal_14.py b/scripts/object/tangible/quest/menagerie_terminal_14.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/menagerie_terminal_14.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/menagerie_terminal_15.py b/scripts/object/tangible/quest/menagerie_terminal_15.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/menagerie_terminal_15.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/menagerie_terminal_16.py b/scripts/object/tangible/quest/menagerie_terminal_16.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/menagerie_terminal_16.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/menagerie_terminal_17.py b/scripts/object/tangible/quest/menagerie_terminal_17.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/menagerie_terminal_17.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/menagerie_terminal_18.py b/scripts/object/tangible/quest/menagerie_terminal_18.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/menagerie_terminal_18.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/menagerie_terminal_19.py b/scripts/object/tangible/quest/menagerie_terminal_19.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/menagerie_terminal_19.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/menagerie_terminal_20.py b/scripts/object/tangible/quest/menagerie_terminal_20.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/menagerie_terminal_20.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/menagerie_terminal_21.py b/scripts/object/tangible/quest/menagerie_terminal_21.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/menagerie_terminal_21.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/menagerie_terminal_22.py b/scripts/object/tangible/quest/menagerie_terminal_22.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/menagerie_terminal_22.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/menagerie_terminal_23.py b/scripts/object/tangible/quest/menagerie_terminal_23.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/menagerie_terminal_23.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/menagerie_terminal_24.py b/scripts/object/tangible/quest/menagerie_terminal_24.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/menagerie_terminal_24.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/menagerie_terminal_25.py b/scripts/object/tangible/quest/menagerie_terminal_25.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/menagerie_terminal_25.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/menagerie_terminal_26.py b/scripts/object/tangible/quest/menagerie_terminal_26.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/menagerie_terminal_26.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/menagerie_terminal_27.py b/scripts/object/tangible/quest/menagerie_terminal_27.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/menagerie_terminal_27.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/menagerie_terminal_28.py b/scripts/object/tangible/quest/menagerie_terminal_28.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/menagerie_terminal_28.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/menagerie_terminal_29.py b/scripts/object/tangible/quest/menagerie_terminal_29.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/menagerie_terminal_29.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/menagerie_terminal_30.py b/scripts/object/tangible/quest/menagerie_terminal_30.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/menagerie_terminal_30.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/menagerie_terminal_31.py b/scripts/object/tangible/quest/menagerie_terminal_31.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/menagerie_terminal_31.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/menagerie_terminal_32.py b/scripts/object/tangible/quest/menagerie_terminal_32.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/menagerie_terminal_32.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/menagerie_terminal_33.py b/scripts/object/tangible/quest/menagerie_terminal_33.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/menagerie_terminal_33.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/menagerie_terminal_34.py b/scripts/object/tangible/quest/menagerie_terminal_34.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/menagerie_terminal_34.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/menagerie_terminal_35.py b/scripts/object/tangible/quest/menagerie_terminal_35.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/menagerie_terminal_35.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/menagerie_terminal_36.py b/scripts/object/tangible/quest/menagerie_terminal_36.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/menagerie_terminal_36.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/menagerie_terminal_37.py b/scripts/object/tangible/quest/menagerie_terminal_37.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/menagerie_terminal_37.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/menagerie_terminal_38.py b/scripts/object/tangible/quest/menagerie_terminal_38.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/menagerie_terminal_38.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/menagerie_terminal_39.py b/scripts/object/tangible/quest/menagerie_terminal_39.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/menagerie_terminal_39.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/menagerie_terminal_40.py b/scripts/object/tangible/quest/menagerie_terminal_40.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/menagerie_terminal_40.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/menagerie_terminal_41.py b/scripts/object/tangible/quest/menagerie_terminal_41.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/menagerie_terminal_41.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/menagerie_terminal_42.py b/scripts/object/tangible/quest/menagerie_terminal_42.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/menagerie_terminal_42.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/menagerie_terminal_43.py b/scripts/object/tangible/quest/menagerie_terminal_43.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/menagerie_terminal_43.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/menagerie_terminal_44.py b/scripts/object/tangible/quest/menagerie_terminal_44.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/menagerie_terminal_44.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/menagerie_terminal_45.py b/scripts/object/tangible/quest/menagerie_terminal_45.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/menagerie_terminal_45.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/menagerie_terminal_46.py b/scripts/object/tangible/quest/menagerie_terminal_46.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/menagerie_terminal_46.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/menagerie_terminal_47.py b/scripts/object/tangible/quest/menagerie_terminal_47.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/menagerie_terminal_47.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/menagerie_terminal_48.py b/scripts/object/tangible/quest/menagerie_terminal_48.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/menagerie_terminal_48.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/menagerie_terminal_49.py b/scripts/object/tangible/quest/menagerie_terminal_49.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/menagerie_terminal_49.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/menagerie_terminal_50.py b/scripts/object/tangible/quest/menagerie_terminal_50.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/menagerie_terminal_50.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/menagerie_terminal_51.py b/scripts/object/tangible/quest/menagerie_terminal_51.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/menagerie_terminal_51.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/menagerie_terminal_52.py b/scripts/object/tangible/quest/menagerie_terminal_52.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/menagerie_terminal_52.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/menagerie_terminal_53.py b/scripts/object/tangible/quest/menagerie_terminal_53.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/menagerie_terminal_53.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/menagerie_terminal_54.py b/scripts/object/tangible/quest/menagerie_terminal_54.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/menagerie_terminal_54.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/menagerie_terminal_55.py b/scripts/object/tangible/quest/menagerie_terminal_55.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/menagerie_terminal_55.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/menagerie_terminal_56.py b/scripts/object/tangible/quest/menagerie_terminal_56.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/menagerie_terminal_56.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/menagerie_terminal_test.py b/scripts/object/tangible/quest/menagerie_terminal_test.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/menagerie_terminal_test.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/murmur_1_exec1_personal_console.py b/scripts/object/tangible/quest/murmur_1_exec1_personal_console.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/murmur_1_exec1_personal_console.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/murmur_1_exec2_personal_console.py b/scripts/object/tangible/quest/murmur_1_exec2_personal_console.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/murmur_1_exec2_personal_console.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/murmur_1_exec3_personal_console.py b/scripts/object/tangible/quest/murmur_1_exec3_personal_console.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/murmur_1_exec3_personal_console.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/murmur_2_admin_personal_console.py b/scripts/object/tangible/quest/murmur_2_admin_personal_console.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/murmur_2_admin_personal_console.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/murmur_4_gas_console.py b/scripts/object/tangible/quest/murmur_4_gas_console.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/murmur_4_gas_console.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/murmur_4_security_console.py b/scripts/object/tangible/quest/murmur_4_security_console.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/murmur_4_security_console.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/murmur_5_doc_personal_console.py b/scripts/object/tangible/quest/murmur_5_doc_personal_console.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/murmur_5_doc_personal_console.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/murmur_5_research_console.py b/scripts/object/tangible/quest/murmur_5_research_console.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/murmur_5_research_console.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/must_chem_locker.py b/scripts/object/tangible/quest/must_chem_locker.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/must_chem_locker.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/must_control_computer.py b/scripts/object/tangible/quest/must_control_computer.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/must_control_computer.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/must_coolant_system.py b/scripts/object/tangible/quest/must_coolant_system.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/must_coolant_system.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/must_crash_site_destroyed_terminal.py b/scripts/object/tangible/quest/must_crash_site_destroyed_terminal.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/must_crash_site_destroyed_terminal.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/must_debris_door.py b/scripts/object/tangible/quest/must_debris_door.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/must_debris_door.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/must_main_reactor.py b/scripts/object/tangible/quest/must_main_reactor.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/must_main_reactor.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/must_motor_harness.py b/scripts/object/tangible/quest/must_motor_harness.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/must_motor_harness.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/must_orc_computer.py b/scripts/object/tangible/quest/must_orc_computer.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/must_orc_computer.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/must_power_rod.py b/scripts/object/tangible/quest/must_power_rod.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/must_power_rod.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/must_supply_locker.py b/scripts/object/tangible/quest/must_supply_locker.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/must_supply_locker.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/must_ventilation_station.py b/scripts/object/tangible/quest/must_ventilation_station.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/must_ventilation_station.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/mysess_blossom.py b/scripts/object/tangible/quest/mysess_blossom.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/mysess_blossom.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/naboo_boss_nass_droidtech_tools.py b/scripts/object/tangible/quest/naboo_boss_nass_droidtech_tools.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/naboo_boss_nass_droidtech_tools.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/naboo_boss_nass_gungan_artifact_hidden.py b/scripts/object/tangible/quest/naboo_boss_nass_gungan_artifact_hidden.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/naboo_boss_nass_gungan_artifact_hidden.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/naboo_boss_nass_gungan_artifact_mauler.py b/scripts/object/tangible/quest/naboo_boss_nass_gungan_artifact_mauler.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/naboo_boss_nass_gungan_artifact_mauler.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/naboo_boss_nass_gungan_artifact_piece.py b/scripts/object/tangible/quest/naboo_boss_nass_gungan_artifact_piece.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/naboo_boss_nass_gungan_artifact_piece.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/naboo_boss_nass_gungan_artifact_piece_2.py b/scripts/object/tangible/quest/naboo_boss_nass_gungan_artifact_piece_2.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/naboo_boss_nass_gungan_artifact_piece_2.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/naboo_boss_nass_gungan_artifact_piece_3.py b/scripts/object/tangible/quest/naboo_boss_nass_gungan_artifact_piece_3.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/naboo_boss_nass_gungan_artifact_piece_3.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/naboo_boss_nass_gungan_artifact_piece_4.py b/scripts/object/tangible/quest/naboo_boss_nass_gungan_artifact_piece_4.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/naboo_boss_nass_gungan_artifact_piece_4.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/naboo_boss_nass_gungan_artifact_piece_5.py b/scripts/object/tangible/quest/naboo_boss_nass_gungan_artifact_piece_5.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/naboo_boss_nass_gungan_artifact_piece_5.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/naboo_boss_nass_gungan_artifact_piece_6.py b/scripts/object/tangible/quest/naboo_boss_nass_gungan_artifact_piece_6.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/naboo_boss_nass_gungan_artifact_piece_6.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/naboo_boss_nass_ultragungan_battle_droid.py b/scripts/object/tangible/quest/naboo_boss_nass_ultragungan_battle_droid.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/naboo_boss_nass_ultragungan_battle_droid.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/naboo_deeja_peak_junked_terminal.py b/scripts/object/tangible/quest/naboo_deeja_peak_junked_terminal.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/naboo_deeja_peak_junked_terminal.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/naboo_deeja_peak_research_equipment.py b/scripts/object/tangible/quest/naboo_deeja_peak_research_equipment.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/naboo_deeja_peak_research_equipment.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/naboo_deeja_peak_security_beacon.py b/scripts/object/tangible/quest/naboo_deeja_peak_security_beacon.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/naboo_deeja_peak_security_beacon.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/naboo_deeja_peak_shipping_terminal.py b/scripts/object/tangible/quest/naboo_deeja_peak_shipping_terminal.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/naboo_deeja_peak_shipping_terminal.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/naboo_gungan_courier_pouch.py b/scripts/object/tangible/quest/naboo_gungan_courier_pouch.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/naboo_gungan_courier_pouch.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/naboo_kadaara_jonni_gravestone.py b/scripts/object/tangible/quest/naboo_kadaara_jonni_gravestone.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/naboo_kadaara_jonni_gravestone.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/naboo_kadaara_jonni_smuggled_goods.py b/scripts/object/tangible/quest/naboo_kadaara_jonni_smuggled_goods.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/naboo_kadaara_jonni_smuggled_goods.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/naboo_kadaara_tipping_rsf_comm_array.py b/scripts/object/tangible/quest/naboo_kadaara_tipping_rsf_comm_array.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/naboo_kadaara_tipping_rsf_comm_array.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/naboo_kadaara_tipping_skaak_radio.py b/scripts/object/tangible/quest/naboo_kadaara_tipping_skaak_radio.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/naboo_kadaara_tipping_skaak_radio.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/naboo_theed_bio_chemical_bomb.py b/scripts/object/tangible/quest/naboo_theed_bio_chemical_bomb.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/naboo_theed_bio_chemical_bomb.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/naboo_theed_borvo_antenna.py b/scripts/object/tangible/quest/naboo_theed_borvo_antenna.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/naboo_theed_borvo_antenna.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/naboo_theed_borvo_database.py b/scripts/object/tangible/quest/naboo_theed_borvo_database.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/naboo_theed_borvo_database.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/naboo_theed_case_corellian_ale.py b/scripts/object/tangible/quest/naboo_theed_case_corellian_ale.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/naboo_theed_case_corellian_ale.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/naboo_theed_crate_droid_parts.py b/scripts/object/tangible/quest/naboo_theed_crate_droid_parts.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/naboo_theed_crate_droid_parts.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/naboo_theed_darkwalker_antenna.py b/scripts/object/tangible/quest/naboo_theed_darkwalker_antenna.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/naboo_theed_darkwalker_antenna.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/naboo_theed_darkwalker_network_terminal.py b/scripts/object/tangible/quest/naboo_theed_darkwalker_network_terminal.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/naboo_theed_darkwalker_network_terminal.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/naboo_theed_fenrol_ledger.py b/scripts/object/tangible/quest/naboo_theed_fenrol_ledger.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/naboo_theed_fenrol_ledger.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/naboo_theed_foul_earthen_mound.py b/scripts/object/tangible/quest/naboo_theed_foul_earthen_mound.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/naboo_theed_foul_earthen_mound.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/naboo_theed_mummer_antenna.py b/scripts/object/tangible/quest/naboo_theed_mummer_antenna.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/naboo_theed_mummer_antenna.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/naboo_theed_prisoner_control_panel.py b/scripts/object/tangible/quest/naboo_theed_prisoner_control_panel.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/naboo_theed_prisoner_control_panel.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/naboo_theed_refining_station.py b/scripts/object/tangible/quest/naboo_theed_refining_station.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/naboo_theed_refining_station.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/naboo_theed_skaak_antenna.py b/scripts/object/tangible/quest/naboo_theed_skaak_antenna.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/naboo_theed_skaak_antenna.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/naboo_theed_skaak_database.py b/scripts/object/tangible/quest/naboo_theed_skaak_database.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/naboo_theed_skaak_database.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/naboo_theed_stash_peddler_goods.py b/scripts/object/tangible/quest/naboo_theed_stash_peddler_goods.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/naboo_theed_stash_peddler_goods.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/naboo_theed_terrorist_bomb.py b/scripts/object/tangible/quest/naboo_theed_terrorist_bomb.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/naboo_theed_terrorist_bomb.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/naboo_theed_terrorist_medical_droid.py b/scripts/object/tangible/quest/naboo_theed_terrorist_medical_droid.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/naboo_theed_terrorist_medical_droid.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/naboo_theed_terrorist_medical_supplies.py b/scripts/object/tangible/quest/naboo_theed_terrorist_medical_supplies.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/naboo_theed_terrorist_medical_supplies.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/naboo_theed_xharnoh_plant.py b/scripts/object/tangible/quest/naboo_theed_xharnoh_plant.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/naboo_theed_xharnoh_plant.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/naktra_crystals.py b/scripts/object/tangible/quest/naktra_crystals.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/naktra_crystals.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/naktra_weapons.py b/scripts/object/tangible/quest/naktra_weapons.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/naktra_weapons.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/nawika_jewel_box.py b/scripts/object/tangible/quest/nawika_jewel_box.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/nawika_jewel_box.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/nova_orion/nova_orion_katiara_grave_node.py b/scripts/object/tangible/quest/nova_orion/nova_orion_katiara_grave_node.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/nova_orion/nova_orion_katiara_grave_node.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/nova_orion/nova_orion_katiara_gravestone.py b/scripts/object/tangible/quest/nova_orion/nova_orion_katiara_gravestone.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/nova_orion/nova_orion_katiara_gravestone.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/nova_orion/nova_orion_katiara_gravestone_display.py b/scripts/object/tangible/quest/nova_orion/nova_orion_katiara_gravestone_display.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/nova_orion/nova_orion_katiara_gravestone_display.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/npe_medic_cabinet.py b/scripts/object/tangible/quest/npe_medic_cabinet.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/npe_medic_cabinet.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/npe_officer_computer.py b/scripts/object/tangible/quest/npe_officer_computer.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/npe_officer_computer.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/npe_receptacle.py b/scripts/object/tangible/quest/npe_receptacle.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/npe_receptacle.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/npe_rune.py b/scripts/object/tangible/quest/npe_rune.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/npe_rune.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/npe_skeleton.py b/scripts/object/tangible/quest/npe_skeleton.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/npe_skeleton.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/npe_spice_plant.py b/scripts/object/tangible/quest/npe_spice_plant.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/npe_spice_plant.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/nym_grenade_container.py b/scripts/object/tangible/quest/nym_grenade_container.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/nym_grenade_container.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/outbreak/blackwing_canister_01.py b/scripts/object/tangible/quest/outbreak/blackwing_canister_01.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/outbreak/blackwing_canister_01.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/outbreak/camp_epsilon_shuttle.py b/scripts/object/tangible/quest/outbreak/camp_epsilon_shuttle.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/outbreak/camp_epsilon_shuttle.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/outbreak/communications_control_computer.py b/scripts/object/tangible/quest/outbreak/communications_control_computer.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/outbreak/communications_control_computer.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/outbreak/crashed_shuttle_core_memory.py b/scripts/object/tangible/quest/outbreak/crashed_shuttle_core_memory.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/outbreak/crashed_shuttle_core_memory.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/outbreak/crashed_shuttle_fuel_cells.py b/scripts/object/tangible/quest/outbreak/crashed_shuttle_fuel_cells.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/outbreak/crashed_shuttle_fuel_cells.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/outbreak/crashed_shuttle_power_converters.py b/scripts/object/tangible/quest/outbreak/crashed_shuttle_power_converters.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/outbreak/crashed_shuttle_power_converters.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/outbreak/crashed_shuttle_spinal_trunk.py b/scripts/object/tangible/quest/outbreak/crashed_shuttle_spinal_trunk.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/outbreak/crashed_shuttle_spinal_trunk.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/outbreak/cryogenics_storage_unit.py b/scripts/object/tangible/quest/outbreak/cryogenics_storage_unit.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/outbreak/cryogenics_storage_unit.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/outbreak/damage_control_computer.py b/scripts/object/tangible/quest/outbreak/damage_control_computer.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/outbreak/damage_control_computer.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/outbreak/damage_control_module.py b/scripts/object/tangible/quest/outbreak/damage_control_module.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/outbreak/damage_control_module.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/outbreak/doctors_office_command_console.py b/scripts/object/tangible/quest/outbreak/doctors_office_command_console.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/outbreak/doctors_office_command_console.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/outbreak/doctors_office_console.py b/scripts/object/tangible/quest/outbreak/doctors_office_console.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/outbreak/doctors_office_console.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/outbreak/facility_damage_report_console.py b/scripts/object/tangible/quest/outbreak/facility_damage_report_console.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/outbreak/facility_damage_report_console.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/outbreak/facility_ladder.py b/scripts/object/tangible/quest/outbreak/facility_ladder.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/outbreak/facility_ladder.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/outbreak/group_boss_fight_terminal.py b/scripts/object/tangible/quest/outbreak/group_boss_fight_terminal.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/outbreak/group_boss_fight_terminal.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/outbreak/lower_level_command_console.py b/scripts/object/tangible/quest/outbreak/lower_level_command_console.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/outbreak/lower_level_command_console.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/outbreak/outbreak_facility_vent.py b/scripts/object/tangible/quest/outbreak/outbreak_facility_vent.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/outbreak/outbreak_facility_vent.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/outbreak/outbreak_facility_vent_02.py b/scripts/object/tangible/quest/outbreak/outbreak_facility_vent_02.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/outbreak/outbreak_facility_vent_02.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/outbreak/outbreak_facility_vent_03.py b/scripts/object/tangible/quest/outbreak/outbreak_facility_vent_03.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/outbreak/outbreak_facility_vent_03.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/outbreak/outbreak_facility_vent_04.py b/scripts/object/tangible/quest/outbreak/outbreak_facility_vent_04.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/outbreak/outbreak_facility_vent_04.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/outbreak/outbreak_facility_vent_05.py b/scripts/object/tangible/quest/outbreak/outbreak_facility_vent_05.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/outbreak/outbreak_facility_vent_05.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/outbreak/outbreak_facility_vent_06.py b/scripts/object/tangible/quest/outbreak/outbreak_facility_vent_06.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/outbreak/outbreak_facility_vent_06.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/pile_trash.py b/scripts/object/tangible/quest/pile_trash.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/pile_trash.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/pod_egg_sacs.py b/scripts/object/tangible/quest/pod_egg_sacs.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/pod_egg_sacs.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/poison_miner_tracking_computer.py b/scripts/object/tangible/quest/poison_miner_tracking_computer.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/poison_miner_tracking_computer.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/prof_commando_11_reactor.py b/scripts/object/tangible/quest/prof_commando_11_reactor.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/prof_commando_11_reactor.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/prof_commando_21_terminal.py b/scripts/object/tangible/quest/prof_commando_21_terminal.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/prof_commando_21_terminal.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/prof_force_sensitive_crystal.py b/scripts/object/tangible/quest/prof_force_sensitive_crystal.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/prof_force_sensitive_crystal.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/prof_spy_21_incom_plans.py b/scripts/object/tangible/quest/prof_spy_21_incom_plans.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/prof_spy_21_incom_plans.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/prolog_content_science_datapad.py b/scripts/object/tangible/quest/prolog_content_science_datapad.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/prolog_content_science_datapad.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/quest_start/borvo_acklay_armor.py b/scripts/object/tangible/quest/quest_start/borvo_acklay_armor.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/quest_start/borvo_acklay_armor.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/quest_start/chapter7_publish_gift_collection_token.py b/scripts/object/tangible/quest/quest_start/chapter7_publish_gift_collection_token.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/quest_start/chapter7_publish_gift_collection_token.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/quest_start/chapter8_publish_gift_collection_token.py b/scripts/object/tangible/quest/quest_start/chapter8_publish_gift_collection_token.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/quest_start/chapter8_publish_gift_collection_token.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/quest_start/corellia_coronet_meatlump_act1_viewscreen.py b/scripts/object/tangible/quest/quest_start/corellia_coronet_meatlump_act1_viewscreen.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/quest_start/corellia_coronet_meatlump_act1_viewscreen.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/quest_start/ep3_clone_relics_jedi_starfighter.py b/scripts/object/tangible/quest/quest_start/ep3_clone_relics_jedi_starfighter.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/quest_start/ep3_clone_relics_jedi_starfighter.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/quest_start/ep3_clone_relics_jedi_starfighter_container.py b/scripts/object/tangible/quest/quest_start/ep3_clone_relics_jedi_starfighter_container.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/quest_start/ep3_clone_relics_jedi_starfighter_container.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/quest_start/ep3_clone_relics_nym_starmap.py b/scripts/object/tangible/quest/quest_start/ep3_clone_relics_nym_starmap.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/quest_start/ep3_clone_relics_nym_starmap.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/quest_start/ep3_clone_relics_nym_starmap_container.py b/scripts/object/tangible/quest/quest_start/ep3_clone_relics_nym_starmap_container.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/quest_start/ep3_clone_relics_nym_starmap_container.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/quest_start/ep3_hunt_loot_brightclaw_jaw.py b/scripts/object/tangible/quest/quest_start/ep3_hunt_loot_brightclaw_jaw.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/quest_start/ep3_hunt_loot_brightclaw_jaw.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/quest_start/ep3_hunt_loot_greyclimber_eye.py b/scripts/object/tangible/quest/quest_start/ep3_hunt_loot_greyclimber_eye.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/quest_start/ep3_hunt_loot_greyclimber_eye.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/quest_start/ep3_hunt_loot_paleclaw_jaw.py b/scripts/object/tangible/quest/quest_start/ep3_hunt_loot_paleclaw_jaw.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/quest_start/ep3_hunt_loot_paleclaw_jaw.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/quest_start/ep3_hunt_loot_silkthrower_fang.py b/scripts/object/tangible/quest/quest_start/ep3_hunt_loot_silkthrower_fang.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/quest_start/ep3_hunt_loot_silkthrower_fang.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/quest_start/ep3_hunt_loot_spiketop_horn.py b/scripts/object/tangible/quest/quest_start/ep3_hunt_loot_spiketop_horn.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/quest_start/ep3_hunt_loot_spiketop_horn.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/quest_start/ep3_hunt_loot_stoneleg_heart.py b/scripts/object/tangible/quest/quest_start/ep3_hunt_loot_stoneleg_heart.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/quest_start/ep3_hunt_loot_stoneleg_heart.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/quest_start/naboo_kadaara_jonni_skaak_journal.py b/scripts/object/tangible/quest/quest_start/naboo_kadaara_jonni_skaak_journal.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/quest_start/naboo_kadaara_jonni_skaak_journal.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/quest_start/profession_bounty_hunter_10.py b/scripts/object/tangible/quest/quest_start/profession_bounty_hunter_10.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/quest_start/profession_bounty_hunter_10.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/quest_start/profession_bounty_hunter_20.py b/scripts/object/tangible/quest/quest_start/profession_bounty_hunter_20.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/quest_start/profession_bounty_hunter_20.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/quest_start/profession_bounty_hunter_30.py b/scripts/object/tangible/quest/quest_start/profession_bounty_hunter_30.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/quest_start/profession_bounty_hunter_30.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/quest_start/profession_commando_10.py b/scripts/object/tangible/quest/quest_start/profession_commando_10.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/quest_start/profession_commando_10.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/quest_start/profession_commando_20.py b/scripts/object/tangible/quest/quest_start/profession_commando_20.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/quest_start/profession_commando_20.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/quest_start/profession_commando_30.py b/scripts/object/tangible/quest/quest_start/profession_commando_30.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/quest_start/profession_commando_30.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/quest_start/profession_entertainer_10.py b/scripts/object/tangible/quest/quest_start/profession_entertainer_10.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/quest_start/profession_entertainer_10.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/quest_start/profession_entertainer_20.py b/scripts/object/tangible/quest/quest_start/profession_entertainer_20.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/quest_start/profession_entertainer_20.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/quest_start/profession_entertainer_30.py b/scripts/object/tangible/quest/quest_start/profession_entertainer_30.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/quest_start/profession_entertainer_30.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/quest_start/profession_force_sensitive_10.py b/scripts/object/tangible/quest/quest_start/profession_force_sensitive_10.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/quest_start/profession_force_sensitive_10.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/quest_start/profession_force_sensitive_20.py b/scripts/object/tangible/quest/quest_start/profession_force_sensitive_20.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/quest_start/profession_force_sensitive_20.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/quest_start/profession_force_sensitive_30.py b/scripts/object/tangible/quest/quest_start/profession_force_sensitive_30.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/quest_start/profession_force_sensitive_30.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/quest_start/profession_medic_10.py b/scripts/object/tangible/quest/quest_start/profession_medic_10.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/quest_start/profession_medic_10.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/quest_start/profession_medic_20.py b/scripts/object/tangible/quest/quest_start/profession_medic_20.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/quest_start/profession_medic_20.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/quest_start/profession_medic_30.py b/scripts/object/tangible/quest/quest_start/profession_medic_30.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/quest_start/profession_medic_30.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/quest_start/profession_officer_10.py b/scripts/object/tangible/quest/quest_start/profession_officer_10.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/quest_start/profession_officer_10.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/quest_start/profession_officer_20.py b/scripts/object/tangible/quest/quest_start/profession_officer_20.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/quest_start/profession_officer_20.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/quest_start/profession_officer_30.py b/scripts/object/tangible/quest/quest_start/profession_officer_30.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/quest_start/profession_officer_30.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/quest_start/profession_smuggler_10.py b/scripts/object/tangible/quest/quest_start/profession_smuggler_10.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/quest_start/profession_smuggler_10.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/quest_start/profession_smuggler_20.py b/scripts/object/tangible/quest/quest_start/profession_smuggler_20.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/quest_start/profession_smuggler_20.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/quest_start/profession_smuggler_30.py b/scripts/object/tangible/quest/quest_start/profession_smuggler_30.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/quest_start/profession_smuggler_30.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/quest_start/profession_spy_10.py b/scripts/object/tangible/quest/quest_start/profession_spy_10.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/quest_start/profession_spy_10.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/quest_start/profession_spy_20.py b/scripts/object/tangible/quest/quest_start/profession_spy_20.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/quest_start/profession_spy_20.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/quest_start/profession_spy_30.py b/scripts/object/tangible/quest/quest_start/profession_spy_30.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/quest_start/profession_spy_30.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/quest_start/profession_trader_10.py b/scripts/object/tangible/quest/quest_start/profession_trader_10.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/quest_start/profession_trader_10.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/quest_start/profession_trader_20.py b/scripts/object/tangible/quest/quest_start/profession_trader_20.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/quest_start/profession_trader_20.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/quest_start/profession_trader_30.py b/scripts/object/tangible/quest/quest_start/profession_trader_30.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/quest_start/profession_trader_30.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/quest_start/som_kenobi_hidden_treasure_plaque.py b/scripts/object/tangible/quest/quest_start/som_kenobi_hidden_treasure_plaque.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/quest_start/som_kenobi_hidden_treasure_plaque.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/quest_start/som_kenobi_reunite_shard.py b/scripts/object/tangible/quest/quest_start/som_kenobi_reunite_shard.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/quest_start/som_kenobi_reunite_shard.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/quest_start/som_kenobi_symbiosis_fluid_container.py b/scripts/object/tangible/quest/quest_start/som_kenobi_symbiosis_fluid_container.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/quest_start/som_kenobi_symbiosis_fluid_container.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/quest_start/update_14_quest_comlink.py b/scripts/object/tangible/quest/quest_start/update_14_quest_comlink.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/quest_start/update_14_quest_comlink.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/quest_u10_helper_droid_parts.py b/scripts/object/tangible/quest/quest_u10_helper_droid_parts.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/quest_u10_helper_droid_parts.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/r_naktra_crystals.py b/scripts/object/tangible/quest/r_naktra_crystals.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/r_naktra_crystals.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/radio_s1.py b/scripts/object/tangible/quest/radio_s1.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/radio_s1.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/rebel/rtp_ackbar_wave_communication_array.py b/scripts/object/tangible/quest/rebel/rtp_ackbar_wave_communication_array.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/rebel/rtp_ackbar_wave_communication_array.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/rebel/rtp_ackbar_wave_sympathizer_signal.py b/scripts/object/tangible/quest/rebel/rtp_ackbar_wave_sympathizer_signal.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/rebel/rtp_ackbar_wave_sympathizer_signal.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/rebel/rtp_c3po_contact_list.py b/scripts/object/tangible/quest/rebel/rtp_c3po_contact_list.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/rebel/rtp_c3po_contact_list.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/rebel/rtp_c3po_medical_supply_chest.py b/scripts/object/tangible/quest/rebel/rtp_c3po_medical_supply_chest.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/rebel/rtp_c3po_medical_supply_chest.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/rebel/rtp_c3po_medical_supply_chest_02.py b/scripts/object/tangible/quest/rebel/rtp_c3po_medical_supply_chest_02.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/rebel/rtp_c3po_medical_supply_chest_02.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/rebel/rtp_c3po_medical_supply_chest_03.py b/scripts/object/tangible/quest/rebel/rtp_c3po_medical_supply_chest_03.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/rebel/rtp_c3po_medical_supply_chest_03.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/rebel/rtp_c3po_medical_supply_source.py b/scripts/object/tangible/quest/rebel/rtp_c3po_medical_supply_source.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/rebel/rtp_c3po_medical_supply_source.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/rebel/rtp_dodonna_wave_atst.py b/scripts/object/tangible/quest/rebel/rtp_dodonna_wave_atst.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/rebel/rtp_dodonna_wave_atst.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/rebel/rtp_dodonna_wave_xwing.py b/scripts/object/tangible/quest/rebel/rtp_dodonna_wave_xwing.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/rebel/rtp_dodonna_wave_xwing.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/rebel/rtp_hansolo_imperial_banner.py b/scripts/object/tangible/quest/rebel/rtp_hansolo_imperial_banner.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/rebel/rtp_hansolo_imperial_banner.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/rebel/rtp_hansolo_imperial_generator.py b/scripts/object/tangible/quest/rebel/rtp_hansolo_imperial_generator.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/rebel/rtp_hansolo_imperial_generator.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/rebel/rtp_hansolo_rebel_banner.py b/scripts/object/tangible/quest/rebel/rtp_hansolo_rebel_banner.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/rebel/rtp_hansolo_rebel_banner.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/rebel/rtp_hansolo_stolen_munitions.py b/scripts/object/tangible/quest/rebel/rtp_hansolo_stolen_munitions.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/rebel/rtp_hansolo_stolen_munitions.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/rebel/rtp_hansolo_wave_henchman_signal.py b/scripts/object/tangible/quest/rebel/rtp_hansolo_wave_henchman_signal.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/rebel/rtp_hansolo_wave_henchman_signal.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/rebel/rtp_leia_communication_array.py b/scripts/object/tangible/quest/rebel/rtp_leia_communication_array.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/rebel/rtp_leia_communication_array.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/rebel/rtp_leia_e11_rifle.py b/scripts/object/tangible/quest/rebel/rtp_leia_e11_rifle.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/rebel/rtp_leia_e11_rifle.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/rebel/rtp_leia_imperial_database.py b/scripts/object/tangible/quest/rebel/rtp_leia_imperial_database.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/rebel/rtp_leia_imperial_database.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/rebel/rtp_leia_lambda_shuttle.py b/scripts/object/tangible/quest/rebel/rtp_leia_lambda_shuttle.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/rebel/rtp_leia_lambda_shuttle.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/rebel/rtp_leia_rebel_helmet.py b/scripts/object/tangible/quest/rebel/rtp_leia_rebel_helmet.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/rebel/rtp_leia_rebel_helmet.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/rebel/rtp_leia_stormtrooper_helmet.py b/scripts/object/tangible/quest/rebel/rtp_leia_stormtrooper_helmet.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/rebel/rtp_leia_stormtrooper_helmet.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/rebel/rtp_leia_wave_summon_leia.py b/scripts/object/tangible/quest/rebel/rtp_leia_wave_summon_leia.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/rebel/rtp_leia_wave_summon_leia.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/rebel/rtp_luke_altar_force_crystal.py b/scripts/object/tangible/quest/rebel/rtp_luke_altar_force_crystal.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/rebel/rtp_luke_altar_force_crystal.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/rebel/rtp_luke_dying_plant.py b/scripts/object/tangible/quest/rebel/rtp_luke_dying_plant.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/rebel/rtp_luke_dying_plant.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/rebel/rtp_luke_healed_plant.py b/scripts/object/tangible/quest/rebel/rtp_luke_healed_plant.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/rebel/rtp_luke_healed_plant.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/rebel/rtp_luke_wave_altar.py b/scripts/object/tangible/quest/rebel/rtp_luke_wave_altar.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/rebel/rtp_luke_wave_altar.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/rebel/rtp_luke_wave_force_crystal.py b/scripts/object/tangible/quest/rebel/rtp_luke_wave_force_crystal.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/rebel/rtp_luke_wave_force_crystal.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/rebel/rtp_mon_mothma_droid.py b/scripts/object/tangible/quest/rebel/rtp_mon_mothma_droid.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/rebel/rtp_mon_mothma_droid.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/rebel/rtp_qualdo_compound_sample.py b/scripts/object/tangible/quest/rebel/rtp_qualdo_compound_sample.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/rebel/rtp_qualdo_compound_sample.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/rebel/rtp_qualdo_design_overview.py b/scripts/object/tangible/quest/rebel/rtp_qualdo_design_overview.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/rebel/rtp_qualdo_design_overview.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/rebel/rtp_qualdo_dev_notes.py b/scripts/object/tangible/quest/rebel/rtp_qualdo_dev_notes.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/rebel/rtp_qualdo_dev_notes.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/rebel/rtp_wedge_security_terminal.py b/scripts/object/tangible/quest/rebel/rtp_wedge_security_terminal.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/rebel/rtp_wedge_security_terminal.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/restuss_comm_array.py b/scripts/object/tangible/quest/restuss_comm_array.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/restuss_comm_array.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/restuss_imperial_token.py b/scripts/object/tangible/quest/restuss_imperial_token.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/restuss_imperial_token.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/restuss_rebel_token.py b/scripts/object/tangible/quest/restuss_rebel_token.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/restuss_rebel_token.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/rodian_body_bag.py b/scripts/object/tangible/quest/rodian_body_bag.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/rodian_body_bag.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/rotting_sapflower.py b/scripts/object/tangible/quest/rotting_sapflower.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/rotting_sapflower.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/rrwii_root.py b/scripts/object/tangible/quest/rrwii_root.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/rrwii_root.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/rsf_computer.py b/scripts/object/tangible/quest/rsf_computer.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/rsf_computer.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/seismic_charge_stations.py b/scripts/object/tangible/quest/seismic_charge_stations.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/seismic_charge_stations.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/sennex_hq_computer_terminal.py b/scripts/object/tangible/quest/sennex_hq_computer_terminal.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/sennex_hq_computer_terminal.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/sennex_hq_databank.py b/scripts/object/tangible/quest/sennex_hq_databank.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/sennex_hq_databank.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/skeleton_bith.py b/scripts/object/tangible/quest/skeleton_bith.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/skeleton_bith.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/skeleton_human.py b/scripts/object/tangible/quest/skeleton_human.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/skeleton_human.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/skeleton_ithorian.py b/scripts/object/tangible/quest/skeleton_ithorian.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/skeleton_ithorian.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/sliced_weapons.py b/scripts/object/tangible/quest/sliced_weapons.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/sliced_weapons.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/smuggler_11_profession_recipe.py b/scripts/object/tangible/quest/smuggler_11_profession_recipe.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/smuggler_11_profession_recipe.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/smuggler_11_profession_sample.py b/scripts/object/tangible/quest/smuggler_11_profession_sample.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/smuggler_11_profession_sample.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/som_berken_marker_01.py b/scripts/object/tangible/quest/som_berken_marker_01.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/som_berken_marker_01.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/som_berken_marker_02.py b/scripts/object/tangible/quest/som_berken_marker_02.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/som_berken_marker_02.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/som_berken_marker_03.py b/scripts/object/tangible/quest/som_berken_marker_03.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/som_berken_marker_03.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/som_berken_marker_04.py b/scripts/object/tangible/quest/som_berken_marker_04.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/som_berken_marker_04.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/som_berken_marker_05.py b/scripts/object/tangible/quest/som_berken_marker_05.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/som_berken_marker_05.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/som_burning_marker_01.py b/scripts/object/tangible/quest/som_burning_marker_01.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/som_burning_marker_01.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/som_burning_marker_02.py b/scripts/object/tangible/quest/som_burning_marker_02.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/som_burning_marker_02.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/som_burning_marker_03.py b/scripts/object/tangible/quest/som_burning_marker_03.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/som_burning_marker_03.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/som_burning_marker_04.py b/scripts/object/tangible/quest/som_burning_marker_04.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/som_burning_marker_04.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/som_burning_marker_05.py b/scripts/object/tangible/quest/som_burning_marker_05.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/som_burning_marker_05.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/som_crystal_marker_01.py b/scripts/object/tangible/quest/som_crystal_marker_01.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/som_crystal_marker_01.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/som_crystal_marker_02.py b/scripts/object/tangible/quest/som_crystal_marker_02.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/som_crystal_marker_02.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/som_crystal_marker_03.py b/scripts/object/tangible/quest/som_crystal_marker_03.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/som_crystal_marker_03.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/som_crystal_marker_04.py b/scripts/object/tangible/quest/som_crystal_marker_04.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/som_crystal_marker_04.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/som_crystal_marker_05.py b/scripts/object/tangible/quest/som_crystal_marker_05.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/som_crystal_marker_05.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/som_cube_rune_tablet.py b/scripts/object/tangible/quest/som_cube_rune_tablet.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/som_cube_rune_tablet.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/som_jedi_two_glyph_01.py b/scripts/object/tangible/quest/som_jedi_two_glyph_01.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/som_jedi_two_glyph_01.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/som_jedi_two_glyph_02.py b/scripts/object/tangible/quest/som_jedi_two_glyph_02.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/som_jedi_two_glyph_02.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/som_jedi_two_glyph_03.py b/scripts/object/tangible/quest/som_jedi_two_glyph_03.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/som_jedi_two_glyph_03.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/som_kenobi_broken_droid_1.py b/scripts/object/tangible/quest/som_kenobi_broken_droid_1.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/som_kenobi_broken_droid_1.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/som_kenobi_final_chamber_entrance_item.py b/scripts/object/tangible/quest/som_kenobi_final_chamber_entrance_item.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/som_kenobi_final_chamber_entrance_item.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/som_kenobi_final_crystal_pedestal.py b/scripts/object/tangible/quest/som_kenobi_final_crystal_pedestal.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/som_kenobi_final_crystal_pedestal.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/som_kenobi_final_force_crystal.py b/scripts/object/tangible/quest/som_kenobi_final_force_crystal.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/som_kenobi_final_force_crystal.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/som_kenobi_fusion_machine.py b/scripts/object/tangible/quest/som_kenobi_fusion_machine.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/som_kenobi_fusion_machine.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/som_kenobi_historian_corpse.py b/scripts/object/tangible/quest/som_kenobi_historian_corpse.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/som_kenobi_historian_corpse.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/som_kenobi_historian_rubble.py b/scripts/object/tangible/quest/som_kenobi_historian_rubble.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/som_kenobi_historian_rubble.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/som_kenobi_jedi_conduit_e.py b/scripts/object/tangible/quest/som_kenobi_jedi_conduit_e.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/som_kenobi_jedi_conduit_e.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/som_kenobi_jedi_conduit_nw.py b/scripts/object/tangible/quest/som_kenobi_jedi_conduit_nw.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/som_kenobi_jedi_conduit_nw.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/som_kenobi_jedi_conduit_w.py b/scripts/object/tangible/quest/som_kenobi_jedi_conduit_w.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/som_kenobi_jedi_conduit_w.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/som_kenobi_mining_computer.py b/scripts/object/tangible/quest/som_kenobi_mining_computer.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/som_kenobi_mining_computer.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/som_kenobi_network_computer.py b/scripts/object/tangible/quest/som_kenobi_network_computer.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/som_kenobi_network_computer.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/som_kenobi_orf_computer.py b/scripts/object/tangible/quest/som_kenobi_orf_computer.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/som_kenobi_orf_computer.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/som_kenobi_power_generator.py b/scripts/object/tangible/quest/som_kenobi_power_generator.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/som_kenobi_power_generator.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/som_kenobi_recall_holocron.py b/scripts/object/tangible/quest/som_kenobi_recall_holocron.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/som_kenobi_recall_holocron.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/som_kenobi_reunite_shard_splinters_1.py b/scripts/object/tangible/quest/som_kenobi_reunite_shard_splinters_1.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/som_kenobi_reunite_shard_splinters_1.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/som_kenobi_reunite_shard_splinters_2.py b/scripts/object/tangible/quest/som_kenobi_reunite_shard_splinters_2.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/som_kenobi_reunite_shard_splinters_2.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/som_kenobi_rubble_1.py b/scripts/object/tangible/quest/som_kenobi_rubble_1.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/som_kenobi_rubble_1.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/som_kenobi_rubble_2.py b/scripts/object/tangible/quest/som_kenobi_rubble_2.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/som_kenobi_rubble_2.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/som_kenobi_sith_altar.py b/scripts/object/tangible/quest/som_kenobi_sith_altar.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/som_kenobi_sith_altar.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/som_mining_marker_01.py b/scripts/object/tangible/quest/som_mining_marker_01.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/som_mining_marker_01.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/som_mining_marker_02.py b/scripts/object/tangible/quest/som_mining_marker_02.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/som_mining_marker_02.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/som_mining_marker_03.py b/scripts/object/tangible/quest/som_mining_marker_03.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/som_mining_marker_03.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/som_mining_marker_04.py b/scripts/object/tangible/quest/som_mining_marker_04.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/som_mining_marker_04.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/som_mining_marker_05.py b/scripts/object/tangible/quest/som_mining_marker_05.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/som_mining_marker_05.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/som_smoking_marker_01.py b/scripts/object/tangible/quest/som_smoking_marker_01.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/som_smoking_marker_01.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/som_smoking_marker_02.py b/scripts/object/tangible/quest/som_smoking_marker_02.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/som_smoking_marker_02.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/som_smoking_marker_03.py b/scripts/object/tangible/quest/som_smoking_marker_03.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/som_smoking_marker_03.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/som_smoking_marker_04.py b/scripts/object/tangible/quest/som_smoking_marker_04.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/som_smoking_marker_04.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/som_smoking_marker_05.py b/scripts/object/tangible/quest/som_smoking_marker_05.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/som_smoking_marker_05.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/som_tulrus_marker_01.py b/scripts/object/tangible/quest/som_tulrus_marker_01.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/som_tulrus_marker_01.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/som_tulrus_marker_02.py b/scripts/object/tangible/quest/som_tulrus_marker_02.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/som_tulrus_marker_02.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/som_tulrus_marker_03.py b/scripts/object/tangible/quest/som_tulrus_marker_03.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/som_tulrus_marker_03.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/som_vault_dial.py b/scripts/object/tangible/quest/som_vault_dial.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/som_vault_dial.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/som_vault_holocron.py b/scripts/object/tangible/quest/som_vault_holocron.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/som_vault_holocron.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/som_vault_lever.py b/scripts/object/tangible/quest/som_vault_lever.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/som_vault_lever.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/som_vault_lever_2.py b/scripts/object/tangible/quest/som_vault_lever_2.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/som_vault_lever_2.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/som_volcano_marker_01.py b/scripts/object/tangible/quest/som_volcano_marker_01.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/som_volcano_marker_01.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/som_volcano_marker_02.py b/scripts/object/tangible/quest/som_volcano_marker_02.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/som_volcano_marker_02.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/som_volcano_marker_03.py b/scripts/object/tangible/quest/som_volcano_marker_03.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/som_volcano_marker_03.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/speeder_debris_wiring.py b/scripts/object/tangible/quest/speeder_debris_wiring.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/speeder_debris_wiring.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/speeder_junk_engine.py b/scripts/object/tangible/quest/speeder_junk_engine.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/speeder_junk_engine.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/speeder_junk_power.py b/scripts/object/tangible/quest/speeder_junk_power.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/speeder_junk_power.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/speeder_junk_steering.py b/scripts/object/tangible/quest/speeder_junk_steering.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/speeder_junk_steering.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/spice_crate.py b/scripts/object/tangible/quest/spice_crate.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/spice_crate.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/story_loot/som_kenobi_historian_data_disk.py b/scripts/object/tangible/quest/story_loot/som_kenobi_historian_data_disk.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/story_loot/som_kenobi_historian_data_disk.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/story_loot/som_kenobi_historian_data_disk_2.py b/scripts/object/tangible/quest/story_loot/som_kenobi_historian_data_disk_2.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/story_loot/som_kenobi_historian_data_disk_2.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/supply_box.py b/scripts/object/tangible/quest/supply_box.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/supply_box.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/survey_data.py b/scripts/object/tangible/quest/survey_data.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/survey_data.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/survey_data_02.py b/scripts/object/tangible/quest/survey_data_02.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/survey_data_02.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/survey_data_03.py b/scripts/object/tangible/quest/survey_data_03.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/survey_data_03.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/survey_data_04.py b/scripts/object/tangible/quest/survey_data_04.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/survey_data_04.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/survey_data_05.py b/scripts/object/tangible/quest/survey_data_05.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/survey_data_05.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/syren_3_computer_terminal.py b/scripts/object/tangible/quest/syren_3_computer_terminal.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/syren_3_computer_terminal.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/talus_brood_egg_single.py b/scripts/object/tangible/quest/talus_brood_egg_single.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/talus_brood_egg_single.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/talus_brood_egg_single_01.py b/scripts/object/tangible/quest/talus_brood_egg_single_01.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/talus_brood_egg_single_01.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/talus_brood_egg_single_02.py b/scripts/object/tangible/quest/talus_brood_egg_single_02.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/talus_brood_egg_single_02.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/talus_brood_egg_single_03.py b/scripts/object/tangible/quest/talus_brood_egg_single_03.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/talus_brood_egg_single_03.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/talus_brood_egg_single_04.py b/scripts/object/tangible/quest/talus_brood_egg_single_04.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/talus_brood_egg_single_04.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/talus_brood_egg_single_05.py b/scripts/object/tangible/quest/talus_brood_egg_single_05.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/talus_brood_egg_single_05.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/talus_dearic_aclo_equipment_manifest_comp.py b/scripts/object/tangible/quest/talus_dearic_aclo_equipment_manifest_comp.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/talus_dearic_aclo_equipment_manifest_comp.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/talus_dearic_aclo_medical_comp.py b/scripts/object/tangible/quest/talus_dearic_aclo_medical_comp.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/talus_dearic_aclo_medical_comp.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/talus_dearic_aclo_operations_comp.py b/scripts/object/tangible/quest/talus_dearic_aclo_operations_comp.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/talus_dearic_aclo_operations_comp.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/talus_dearic_aclo_personnel_comp.py b/scripts/object/tangible/quest/talus_dearic_aclo_personnel_comp.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/talus_dearic_aclo_personnel_comp.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/talus_dearic_biochemists_terminal.py b/scripts/object/tangible/quest/talus_dearic_biochemists_terminal.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/talus_dearic_biochemists_terminal.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/talus_dearic_electronic_toolkit.py b/scripts/object/tangible/quest/talus_dearic_electronic_toolkit.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/talus_dearic_electronic_toolkit.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/talus_dearic_engineers_terminal.py b/scripts/object/tangible/quest/talus_dearic_engineers_terminal.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/talus_dearic_engineers_terminal.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/talus_dearic_lag_mainframe.py b/scripts/object/tangible/quest/talus_dearic_lag_mainframe.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/talus_dearic_lag_mainframe.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/talus_dearic_lag_medical_droid.py b/scripts/object/tangible/quest/talus_dearic_lag_medical_droid.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/talus_dearic_lag_medical_droid.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/talus_dearic_lag_storage_crate.py b/scripts/object/tangible/quest/talus_dearic_lag_storage_crate.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/talus_dearic_lag_storage_crate.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/talus_dearic_managers_terminal.py b/scripts/object/tangible/quest/talus_dearic_managers_terminal.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/talus_dearic_managers_terminal.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/talus_dearic_researchers_terminal.py b/scripts/object/tangible/quest/talus_dearic_researchers_terminal.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/talus_dearic_researchers_terminal.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/talus_dearic_scientists_terminal.py b/scripts/object/tangible/quest/talus_dearic_scientists_terminal.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/talus_dearic_scientists_terminal.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/talus_dearic_supply_cabinet.py b/scripts/object/tangible/quest/talus_dearic_supply_cabinet.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/talus_dearic_supply_cabinet.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/talus_genetic_potential_datapad_01.py b/scripts/object/tangible/quest/talus_genetic_potential_datapad_01.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/talus_genetic_potential_datapad_01.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/talus_genetic_potential_datapad_02.py b/scripts/object/tangible/quest/talus_genetic_potential_datapad_02.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/talus_genetic_potential_datapad_02.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/talus_genetic_potential_datapad_03.py b/scripts/object/tangible/quest/talus_genetic_potential_datapad_03.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/talus_genetic_potential_datapad_03.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/talus_genetic_potential_datapad_05.py b/scripts/object/tangible/quest/talus_genetic_potential_datapad_05.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/talus_genetic_potential_datapad_05.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/talus_genetic_potential_datapad_06.py b/scripts/object/tangible/quest/talus_genetic_potential_datapad_06.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/talus_genetic_potential_datapad_06.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/talus_genetic_potential_datapad_07.py b/scripts/object/tangible/quest/talus_genetic_potential_datapad_07.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/talus_genetic_potential_datapad_07.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/talus_genetic_potential_datapad_08.py b/scripts/object/tangible/quest/talus_genetic_potential_datapad_08.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/talus_genetic_potential_datapad_08.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/talus_genetic_potential_datapad_09.py b/scripts/object/tangible/quest/talus_genetic_potential_datapad_09.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/talus_genetic_potential_datapad_09.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/talus_genetic_potential_tracking_device_04.py b/scripts/object/tangible/quest/talus_genetic_potential_tracking_device_04.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/talus_genetic_potential_tracking_device_04.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/talus_grave_robbers_box_large.py b/scripts/object/tangible/quest/talus_grave_robbers_box_large.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/talus_grave_robbers_box_large.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/talus_grave_robbers_box_magseal.py b/scripts/object/tangible/quest/talus_grave_robbers_box_magseal.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/talus_grave_robbers_box_magseal.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/talus_nashal_directory_terminal.py b/scripts/object/tangible/quest/talus_nashal_directory_terminal.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/talus_nashal_directory_terminal.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/talus_nashal_droid_head.py b/scripts/object/tangible/quest/talus_nashal_droid_head.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/talus_nashal_droid_head.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/talus_quest_reward_egg_hang.py b/scripts/object/tangible/quest/talus_quest_reward_egg_hang.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/talus_quest_reward_egg_hang.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/talus_quest_reward_egg_single.py b/scripts/object/tangible/quest/talus_quest_reward_egg_single.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/talus_quest_reward_egg_single.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/talus_selonian_electronics_01.py b/scripts/object/tangible/quest/talus_selonian_electronics_01.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/talus_selonian_electronics_01.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/talus_selonian_electronics_02.py b/scripts/object/tangible/quest/talus_selonian_electronics_02.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/talus_selonian_electronics_02.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/talus_selonian_food_container_01.py b/scripts/object/tangible/quest/talus_selonian_food_container_01.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/talus_selonian_food_container_01.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/talus_selonian_food_container_02.py b/scripts/object/tangible/quest/talus_selonian_food_container_02.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/talus_selonian_food_container_02.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/talus_selonian_food_container_03.py b/scripts/object/tangible/quest/talus_selonian_food_container_03.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/talus_selonian_food_container_03.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/talus_selonian_food_container_04.py b/scripts/object/tangible/quest/talus_selonian_food_container_04.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/talus_selonian_food_container_04.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/talus_selonian_hide_container_01.py b/scripts/object/tangible/quest/talus_selonian_hide_container_01.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/talus_selonian_hide_container_01.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/talus_selonian_hide_container_02.py b/scripts/object/tangible/quest/talus_selonian_hide_container_02.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/talus_selonian_hide_container_02.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/talus_selonian_hide_container_03.py b/scripts/object/tangible/quest/talus_selonian_hide_container_03.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/talus_selonian_hide_container_03.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/talus_selonian_smuggler_cargo_computer.py b/scripts/object/tangible/quest/talus_selonian_smuggler_cargo_computer.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/talus_selonian_smuggler_cargo_computer.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/talus_selonian_smuggler_flight_terminal.py b/scripts/object/tangible/quest/talus_selonian_smuggler_flight_terminal.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/talus_selonian_smuggler_flight_terminal.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/talus_selonian_smuggler_main_computer.py b/scripts/object/tangible/quest/talus_selonian_smuggler_main_computer.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/talus_selonian_smuggler_main_computer.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/talus_selonian_weapons_01.py b/scripts/object/tangible/quest/talus_selonian_weapons_01.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/talus_selonian_weapons_01.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/tatooine_ac_antenna_01.py b/scripts/object/tangible/quest/tatooine_ac_antenna_01.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/tatooine_ac_antenna_01.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/tatooine_ac_antenna_02.py b/scripts/object/tangible/quest/tatooine_ac_antenna_02.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/tatooine_ac_antenna_02.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/tatooine_ac_antenna_03.py b/scripts/object/tangible/quest/tatooine_ac_antenna_03.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/tatooine_ac_antenna_03.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/tatooine_anchorjobs_leg.py b/scripts/object/tangible/quest/tatooine_anchorjobs_leg.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/tatooine_anchorjobs_leg.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/tatooine_bestinejobs_xwing.py b/scripts/object/tangible/quest/tatooine_bestinejobs_xwing.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/tatooine_bestinejobs_xwing.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/tatooine_bib_fortuna_hacker_terminal.py b/scripts/object/tangible/quest/tatooine_bib_fortuna_hacker_terminal.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/tatooine_bib_fortuna_hacker_terminal.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/tatooine_eisley_durr_datapad.py b/scripts/object/tangible/quest/tatooine_eisley_durr_datapad.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/tatooine_eisley_durr_datapad.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/tatooine_reeyees_jabbas_ledger.py b/scripts/object/tangible/quest/tatooine_reeyees_jabbas_ledger.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/tatooine_reeyees_jabbas_ledger.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/tatooine_reeyees_warhead.py b/scripts/object/tangible/quest/tatooine_reeyees_warhead.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/tatooine_reeyees_warhead.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/township/axkva_dark_jedi_statue.py b/scripts/object/tangible/quest/township/axkva_dark_jedi_statue.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/township/axkva_dark_jedi_statue.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/township/axkva_min_key.py b/scripts/object/tangible/quest/township/axkva_min_key.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/township/axkva_min_key.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/township/axkva_nightsister_headdress.py b/scripts/object/tangible/quest/township/axkva_nightsister_headdress.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/township/axkva_nightsister_headdress.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/township/axkva_nightsister_scroll.py b/scripts/object/tangible/quest/township/axkva_nightsister_scroll.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/township/axkva_nightsister_scroll.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/township/axkva_nightsister_scroll_post.py b/scripts/object/tangible/quest/township/axkva_nightsister_scroll_post.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/township/axkva_nightsister_scroll_post.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/township/axkva_nightsister_shards.py b/scripts/object/tangible/quest/township/axkva_nightsister_shards.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/township/axkva_nightsister_shards.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/township/axkva_nightsister_skull.py b/scripts/object/tangible/quest/township/axkva_nightsister_skull.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/township/axkva_nightsister_skull.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/township/axkva_pedastal.py b/scripts/object/tangible/quest/township/axkva_pedastal.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/township/axkva_pedastal.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/township/axkva_shadow_torch.py b/scripts/object/tangible/quest/township/axkva_shadow_torch.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/township/axkva_shadow_torch.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/township/axkva_singing_mtn_gong.py b/scripts/object/tangible/quest/township/axkva_singing_mtn_gong.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/township/axkva_singing_mtn_gong.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/township/exar_kun_intro_communication_terminal.py b/scripts/object/tangible/quest/township/exar_kun_intro_communication_terminal.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/township/exar_kun_intro_communication_terminal.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/township/exar_kun_intro_corpse_datapad.py b/scripts/object/tangible/quest/township/exar_kun_intro_corpse_datapad.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/township/exar_kun_intro_corpse_datapad.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/township/exar_kun_intro_grenz_terminal.py b/scripts/object/tangible/quest/township/exar_kun_intro_grenz_terminal.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/township/exar_kun_intro_grenz_terminal.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/township/ig88_feeder_component_01.py b/scripts/object/tangible/quest/township/ig88_feeder_component_01.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/township/ig88_feeder_component_01.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/township/ig88_feeder_component_02.py b/scripts/object/tangible/quest/township/ig88_feeder_component_02.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/township/ig88_feeder_component_02.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/township/ig88_feeder_component_03.py b/scripts/object/tangible/quest/township/ig88_feeder_component_03.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/township/ig88_feeder_component_03.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/township/ig88_feeder_component_04.py b/scripts/object/tangible/quest/township/ig88_feeder_component_04.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/township/ig88_feeder_component_04.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/township/ig88_feeder_component_05.py b/scripts/object/tangible/quest/township/ig88_feeder_component_05.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/township/ig88_feeder_component_05.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/township/ig88_feeder_component_06.py b/scripts/object/tangible/quest/township/ig88_feeder_component_06.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/township/ig88_feeder_component_06.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/township/ig88_instance_exit.py b/scripts/object/tangible/quest/township/ig88_instance_exit.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/township/ig88_instance_exit.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/township/rohak_figurine.py b/scripts/object/tangible/quest/township/rohak_figurine.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/township/rohak_figurine.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/township/rohak_figurine_spawner.py b/scripts/object/tangible/quest/township/rohak_figurine_spawner.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/township/rohak_figurine_spawner.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/township/star_destroyer_intro_security_console.py b/scripts/object/tangible/quest/township/star_destroyer_intro_security_console.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/township/star_destroyer_intro_security_console.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/township/tusken_feeder_01.py b/scripts/object/tangible/quest/township/tusken_feeder_01.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/township/tusken_feeder_01.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/township/tusken_feeder_02.py b/scripts/object/tangible/quest/township/tusken_feeder_02.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/township/tusken_feeder_02.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/township/tusken_feeder_wave.py b/scripts/object/tangible/quest/township/tusken_feeder_wave.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/township/tusken_feeder_wave.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/tulrus_egg.py b/scripts/object/tangible/quest/tulrus_egg.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/tulrus_egg.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/typho_gravemarker.py b/scripts/object/tangible/quest/typho_gravemarker.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/typho_gravemarker.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/typho_mauler_weapons_cache.py b/scripts/object/tangible/quest/typho_mauler_weapons_cache.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/typho_mauler_weapons_cache.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/u13_gungan_statue.py b/scripts/object/tangible/quest/u13_gungan_statue.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/u13_gungan_statue.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/u13_ponda_lab_terminal.py b/scripts/object/tangible/quest/u13_ponda_lab_terminal.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/u13_ponda_lab_terminal.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/u13_vengeance_archive_terminal.py b/scripts/object/tangible/quest/u13_vengeance_archive_terminal.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/u13_vengeance_archive_terminal.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/u13_vengeance_datapad.py b/scripts/object/tangible/quest/u13_vengeance_datapad.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/u13_vengeance_datapad.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/u13_vengeance_security_terminal.py b/scripts/object/tangible/quest/u13_vengeance_security_terminal.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/u13_vengeance_security_terminal.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/warl_cave_plant.py b/scripts/object/tangible/quest/warl_cave_plant.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/warl_cave_plant.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/wave_event/aaa_wave_event_test_object.py b/scripts/object/tangible/quest/wave_event/aaa_wave_event_test_object.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/wave_event/aaa_wave_event_test_object.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/wod/wod_rancor_cage.py b/scripts/object/tangible/quest/wod/wod_rancor_cage.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/wod/wod_rancor_cage.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/quest/wod/wod_spider_eggs.py b/scripts/object/tangible/quest/wod/wod_spider_eggs.py new file mode 100644 index 00000000..ccad8904 --- /dev/null +++ b/scripts/object/tangible/quest/wod/wod_spider_eggs.py @@ -0,0 +1,4 @@ +import sys + +def setup(core, object): + return \ No newline at end of file diff --git a/scripts/object/tangible/saga_system/rewards/structure_deed_player_house_sandcrawler.py b/scripts/object/tangible/saga_system/rewards/structure_deed_player_house_sandcrawler.py index ccad8904..07ab9319 100644 --- a/scripts/object/tangible/saga_system/rewards/structure_deed_player_house_sandcrawler.py +++ b/scripts/object/tangible/saga_system/rewards/structure_deed_player_house_sandcrawler.py @@ -1,4 +1,8 @@ import sys def setup(core, object): + object.setAttachment('radial_filename', 'deeds/structureDeed') + return + +def use(core, actor, object): return \ No newline at end of file diff --git a/scripts/object/tangible/survey_tool/survey_tool_all.py b/scripts/object/tangible/survey_tool/survey_tool_all.py index ccad8904..fa89b86c 100644 --- a/scripts/object/tangible/survey_tool/survey_tool_all.py +++ b/scripts/object/tangible/survey_tool/survey_tool_all.py @@ -1,4 +1,5 @@ import sys def setup(core, object): + object.setAttachment('radial_filename', 'item/survey_tool') return \ No newline at end of file diff --git a/scripts/object/tangible/survey_tool/survey_tool_gas.py b/scripts/object/tangible/survey_tool/survey_tool_gas.py index ccad8904..fa89b86c 100644 --- a/scripts/object/tangible/survey_tool/survey_tool_gas.py +++ b/scripts/object/tangible/survey_tool/survey_tool_gas.py @@ -1,4 +1,5 @@ import sys def setup(core, object): + object.setAttachment('radial_filename', 'item/survey_tool') return \ No newline at end of file diff --git a/scripts/object/tangible/survey_tool/survey_tool_geo_thermal.py b/scripts/object/tangible/survey_tool/survey_tool_geo_thermal.py index ccad8904..fa89b86c 100644 --- a/scripts/object/tangible/survey_tool/survey_tool_geo_thermal.py +++ b/scripts/object/tangible/survey_tool/survey_tool_geo_thermal.py @@ -1,4 +1,5 @@ import sys def setup(core, object): + object.setAttachment('radial_filename', 'item/survey_tool') return \ No newline at end of file diff --git a/scripts/object/tangible/survey_tool/survey_tool_inorganic.py b/scripts/object/tangible/survey_tool/survey_tool_inorganic.py index ccad8904..fa89b86c 100644 --- a/scripts/object/tangible/survey_tool/survey_tool_inorganic.py +++ b/scripts/object/tangible/survey_tool/survey_tool_inorganic.py @@ -1,4 +1,5 @@ import sys def setup(core, object): + object.setAttachment('radial_filename', 'item/survey_tool') return \ No newline at end of file diff --git a/scripts/object/tangible/survey_tool/survey_tool_liquid.py b/scripts/object/tangible/survey_tool/survey_tool_liquid.py index ccad8904..fa89b86c 100644 --- a/scripts/object/tangible/survey_tool/survey_tool_liquid.py +++ b/scripts/object/tangible/survey_tool/survey_tool_liquid.py @@ -1,4 +1,5 @@ import sys def setup(core, object): + object.setAttachment('radial_filename', 'item/survey_tool') return \ No newline at end of file diff --git a/scripts/object/tangible/survey_tool/survey_tool_lumber.py b/scripts/object/tangible/survey_tool/survey_tool_lumber.py index ccad8904..fa89b86c 100644 --- a/scripts/object/tangible/survey_tool/survey_tool_lumber.py +++ b/scripts/object/tangible/survey_tool/survey_tool_lumber.py @@ -1,4 +1,5 @@ import sys def setup(core, object): + object.setAttachment('radial_filename', 'item/survey_tool') return \ No newline at end of file diff --git a/scripts/object/tangible/survey_tool/survey_tool_mineral.py b/scripts/object/tangible/survey_tool/survey_tool_mineral.py index ccad8904..fa89b86c 100644 --- a/scripts/object/tangible/survey_tool/survey_tool_mineral.py +++ b/scripts/object/tangible/survey_tool/survey_tool_mineral.py @@ -1,4 +1,5 @@ import sys def setup(core, object): + object.setAttachment('radial_filename', 'item/survey_tool') return \ No newline at end of file diff --git a/scripts/object/tangible/survey_tool/survey_tool_moisture.py b/scripts/object/tangible/survey_tool/survey_tool_moisture.py index ccad8904..fa89b86c 100644 --- a/scripts/object/tangible/survey_tool/survey_tool_moisture.py +++ b/scripts/object/tangible/survey_tool/survey_tool_moisture.py @@ -1,4 +1,5 @@ import sys def setup(core, object): + object.setAttachment('radial_filename', 'item/survey_tool') return \ No newline at end of file diff --git a/scripts/object/tangible/survey_tool/survey_tool_organic.py b/scripts/object/tangible/survey_tool/survey_tool_organic.py index ccad8904..fa89b86c 100644 --- a/scripts/object/tangible/survey_tool/survey_tool_organic.py +++ b/scripts/object/tangible/survey_tool/survey_tool_organic.py @@ -1,4 +1,5 @@ import sys def setup(core, object): + object.setAttachment('radial_filename', 'item/survey_tool') return \ No newline at end of file diff --git a/scripts/object/tangible/survey_tool/survey_tool_solar.py b/scripts/object/tangible/survey_tool/survey_tool_solar.py index ccad8904..fa89b86c 100644 --- a/scripts/object/tangible/survey_tool/survey_tool_solar.py +++ b/scripts/object/tangible/survey_tool/survey_tool_solar.py @@ -1,4 +1,5 @@ import sys def setup(core, object): + object.setAttachment('radial_filename', 'item/survey_tool') return \ No newline at end of file diff --git a/scripts/object/tangible/survey_tool/survey_tool_wind.py b/scripts/object/tangible/survey_tool/survey_tool_wind.py index ccad8904..fa89b86c 100644 --- a/scripts/object/tangible/survey_tool/survey_tool_wind.py +++ b/scripts/object/tangible/survey_tool/survey_tool_wind.py @@ -1,4 +1,5 @@ import sys def setup(core, object): + object.setAttachment('radial_filename', 'item/survey_tool') return \ No newline at end of file diff --git a/scripts/object/tangible/tcg/series3/structure_deed_jedi_meditation_room_deed.py b/scripts/object/tangible/tcg/series3/structure_deed_jedi_meditation_room_deed.py index ccad8904..01e3b335 100644 --- a/scripts/object/tangible/tcg/series3/structure_deed_jedi_meditation_room_deed.py +++ b/scripts/object/tangible/tcg/series3/structure_deed_jedi_meditation_room_deed.py @@ -1,4 +1,10 @@ import sys def setup(core, object): - return \ No newline at end of file + object.setAttachment('radial_filename', 'deeds/structureDeed') + return + +def use(core, actor, object): + return + + \ No newline at end of file diff --git a/scripts/object/tangible/tcg/series3/structure_deed_sith_meditation_room_deed.py b/scripts/object/tangible/tcg/series3/structure_deed_sith_meditation_room_deed.py index ccad8904..01e3b335 100644 --- a/scripts/object/tangible/tcg/series3/structure_deed_sith_meditation_room_deed.py +++ b/scripts/object/tangible/tcg/series3/structure_deed_sith_meditation_room_deed.py @@ -1,4 +1,10 @@ import sys def setup(core, object): - return \ No newline at end of file + object.setAttachment('radial_filename', 'deeds/structureDeed') + return + +def use(core, actor, object): + return + + \ No newline at end of file diff --git a/scripts/object/tangible/tcg/series5/structure_deed_player_house_atat.py b/scripts/object/tangible/tcg/series5/structure_deed_player_house_atat.py index ccad8904..af249f3e 100644 --- a/scripts/object/tangible/tcg/series5/structure_deed_player_house_atat.py +++ b/scripts/object/tangible/tcg/series5/structure_deed_player_house_atat.py @@ -1,4 +1,14 @@ import sys def setup(core, object): - return \ No newline at end of file + object.setAttachment('radial_filename', 'deeds/structureDeed') + object.setConstructorTemplate('object/building/player/construction/shared_construction_player_house_atat.iff') + object.setStructureTemplate('object/tangible/tcg/series5/shared_structure_deed_player_house_atat.iff') + object.setLotRequirement(3) + object.setBMR(8) + return + +def use(core, actor, object): + return + + \ No newline at end of file diff --git a/scripts/object/tangible/tcg/series5/structure_deed_player_house_hangar.py b/scripts/object/tangible/tcg/series5/structure_deed_player_house_hangar.py index ccad8904..01e3b335 100644 --- a/scripts/object/tangible/tcg/series5/structure_deed_player_house_hangar.py +++ b/scripts/object/tangible/tcg/series5/structure_deed_player_house_hangar.py @@ -1,4 +1,10 @@ import sys def setup(core, object): - return \ No newline at end of file + object.setAttachment('radial_filename', 'deeds/structureDeed') + return + +def use(core, actor, object): + return + + \ No newline at end of file diff --git a/scripts/object/tangible/terminal/terminal_bank.py b/scripts/object/tangible/terminal/terminal_bank.py index 4f068472..0a27868e 100644 --- a/scripts/object/tangible/terminal/terminal_bank.py +++ b/scripts/object/tangible/terminal/terminal_bank.py @@ -1,7 +1,7 @@ import sys def setup(core, object): - object.setAttachment('radial_filename', 'bank') - core.mapService.addLocation(object.getPlanet(), 'Bank Terminal', object.getPosition().x, object.getPosition().z, 41, 42, 0) + object.setAttachment('radial_filename', 'terminal/bank') + core.mapService.addLocation(object.getPlanet(), '@map_loc_cat_n:terminal_bank', object.getPosition().x, object.getPosition().z, 2, 42, 0) return \ No newline at end of file diff --git a/scripts/object/tangible/terminal/terminal_bazaar.py b/scripts/object/tangible/terminal/terminal_bazaar.py index e94866f0..967ff912 100644 --- a/scripts/object/tangible/terminal/terminal_bazaar.py +++ b/scripts/object/tangible/terminal/terminal_bazaar.py @@ -1,7 +1,6 @@ import sys def setup(core, object): - - core.mapService.addLocation(object.getPlanet(), 'Bazaar Terminal', object.getPosition().x, object.getPosition().z, 41, 43, 0) + core.mapService.addLocation(object.getPlanet(), '@map_loc_cat_n:terminal_bazaar', object.getPosition().x, object.getPosition().z, 41, 43, 0) return \ No newline at end of file diff --git a/scripts/object/tangible/terminal/terminal_character_builder.py b/scripts/object/tangible/terminal/terminal_character_builder.py index ccad8904..306a13df 100644 --- a/scripts/object/tangible/terminal/terminal_character_builder.py +++ b/scripts/object/tangible/terminal/terminal_character_builder.py @@ -1,4 +1,9 @@ import sys def setup(core, object): + object.setAttachment('radial_filename', 'object/usable') + return + +def use(core, owner, target): + core.devService.sendCharacterBuilderSUI(owner, 0); return \ No newline at end of file diff --git a/scripts/object/tangible/terminal/terminal_city.py b/scripts/object/tangible/terminal/terminal_city.py index ccad8904..f7302163 100644 --- a/scripts/object/tangible/terminal/terminal_city.py +++ b/scripts/object/tangible/terminal/terminal_city.py @@ -1,4 +1,5 @@ import sys def setup(core, object): + object.setAttachment('radial_filename', 'terminal/city_maintenance_terminal') return \ No newline at end of file diff --git a/scripts/object/tangible/terminal/terminal_city_junk_dealer.py b/scripts/object/tangible/terminal/terminal_city_junk_dealer.py index ccad8904..f09f88cc 100644 --- a/scripts/object/tangible/terminal/terminal_city_junk_dealer.py +++ b/scripts/object/tangible/terminal/terminal_city_junk_dealer.py @@ -1,4 +1,5 @@ import sys def setup(core, object): + core.mapService.addLocation(object.getPlanet(), '@map_loc_cat_n:junk_dealer', object.getPosition().x, object.getPosition().z, 26, 81, 0) return \ No newline at end of file diff --git a/scripts/object/tangible/terminal/terminal_cloning.py b/scripts/object/tangible/terminal/terminal_cloning.py index 91f80095..46138012 100644 --- a/scripts/object/tangible/terminal/terminal_cloning.py +++ b/scripts/object/tangible/terminal/terminal_cloning.py @@ -1,6 +1,7 @@ import sys def setup(core, object): - object.setAttachment('radial_filename', 'cloning_terminal') + object.setAttachment('radial_filename', 'terminal/cloning_terminal') + return \ No newline at end of file diff --git a/scripts/object/tangible/terminal/terminal_mission.py b/scripts/object/tangible/terminal/terminal_mission.py index 4884aa67..10fe46c8 100644 --- a/scripts/object/tangible/terminal/terminal_mission.py +++ b/scripts/object/tangible/terminal/terminal_mission.py @@ -1,7 +1,7 @@ import sys def setup(core, object): - - core.mapService.addLocation(object.getPlanet(), 'Mission Terminal', object.getPosition().x, object.getPosition().z, 41, 44, 0) + core.mapService.addLocation(object.getPlanet(), '@map_loc_cat_n:terminal_mission', object.getPosition().x, object.getPosition().z, 41, 44, 0) + object.setAttachment("terminalType", 1) return \ No newline at end of file diff --git a/scripts/object/tangible/terminal/terminal_mission_artisan.py b/scripts/object/tangible/terminal/terminal_mission_artisan.py index 911010d8..7bbd42dd 100644 --- a/scripts/object/tangible/terminal/terminal_mission_artisan.py +++ b/scripts/object/tangible/terminal/terminal_mission_artisan.py @@ -1,7 +1,7 @@ import sys def setup(core, object): - - core.mapService.addLocation(object.getPlanet(), 'Artisan Mission Terminal', object.getPosition().x, object.getPosition().z, 41, 21, 0) + object.setAttachment("terminalType", 4) + core.mapService.addLocation(object.getPlanet(), '@map_loc_cat_n:terminal_mission_artisan', object.getPosition().x, object.getPosition().z, 41, 76, 0) return \ No newline at end of file diff --git a/scripts/object/tangible/terminal/terminal_mission_bounty.py b/scripts/object/tangible/terminal/terminal_mission_bounty.py index ccad8904..f97abb2a 100644 --- a/scripts/object/tangible/terminal/terminal_mission_bounty.py +++ b/scripts/object/tangible/terminal/terminal_mission_bounty.py @@ -1,4 +1,6 @@ import sys def setup(core, object): + object.setAttachment("terminalType", 2) + core.mapService.addLocation(object.getPlanet(), '@map_loc_cat_n:terminal_mission_bounty', object.getPosition().x, object.getPosition().z, 41, 78, 0) return \ No newline at end of file diff --git a/scripts/object/tangible/terminal/terminal_mission_entertainer.py b/scripts/object/tangible/terminal/terminal_mission_entertainer.py index 433b5f91..31bc4a90 100644 --- a/scripts/object/tangible/terminal/terminal_mission_entertainer.py +++ b/scripts/object/tangible/terminal/terminal_mission_entertainer.py @@ -1,7 +1,6 @@ import sys def setup(core, object): - - core.mapService.addLocation(object.getPlanet(), 'Entertainer Mission Terminal', object.getPosition().x, object.getPosition().z, 41, 24, 0) - return - \ No newline at end of file + object.setAttachment("terminalType", 2) + core.mapService.addLocation(object.getPlanet(), '@map_loc_cat_n:terminal_mission_entertainer', object.getPosition().x, object.getPosition().z, 41, 75, 0) + return \ No newline at end of file diff --git a/scripts/object/tangible/terminal/terminal_mission_imperial.py b/scripts/object/tangible/terminal/terminal_mission_imperial.py index 8e4773b5..216f3bfc 100644 --- a/scripts/object/tangible/terminal/terminal_mission_imperial.py +++ b/scripts/object/tangible/terminal/terminal_mission_imperial.py @@ -1,7 +1,6 @@ import sys def setup(core, object): - - core.mapService.addLocation(object.getPlanet(), 'Imperial Mission Terminal', object.getPosition().x, object.getPosition().z, 41, 46, 0) + core.mapService.addLocation(object.getPlanet(), '@map_loc_cat_n:terminal_mission_imperial', object.getPosition().x, object.getPosition().z, 41, 80, 0) return \ No newline at end of file diff --git a/scripts/object/tangible/terminal/terminal_mission_rebel.py b/scripts/object/tangible/terminal/terminal_mission_rebel.py index 0bb50bbe..f435f149 100644 --- a/scripts/object/tangible/terminal/terminal_mission_rebel.py +++ b/scripts/object/tangible/terminal/terminal_mission_rebel.py @@ -1,7 +1,6 @@ import sys def setup(core, object): - - core.mapService.addLocation(object.getPlanet(), 'Rebel Mission Terminal', object.getPosition().x, object.getPosition().z, 41, 45, 0) + core.mapService.addLocation(object.getPlanet(), '@map_loc_cat_n:terminal_mission_rebel', object.getPosition().x, object.getPosition().z, 41, 79, 0) return \ No newline at end of file diff --git a/scripts/object/tangible/terminal/terminal_mission_scout.py b/scripts/object/tangible/terminal/terminal_mission_scout.py index ccad8904..eb7c1e2a 100644 --- a/scripts/object/tangible/terminal/terminal_mission_scout.py +++ b/scripts/object/tangible/terminal/terminal_mission_scout.py @@ -1,4 +1,5 @@ import sys def setup(core, object): + core.mapService.addLocation(object.getPlanet(), '@map_loc_cat_n:terminal_mission_scout', object.getPosition().x, object.getPosition().z, 41, 77, 0) return \ No newline at end of file diff --git a/scripts/object/tangible/terminal/terminal_player_structure.py b/scripts/object/tangible/terminal/terminal_player_structure.py index ccad8904..dd5b18cd 100644 --- a/scripts/object/tangible/terminal/terminal_player_structure.py +++ b/scripts/object/tangible/terminal/terminal_player_structure.py @@ -1,4 +1,5 @@ import sys def setup(core, object): + object.setAttachment('radial_filename', 'structure/structure_management_terminal') return \ No newline at end of file diff --git a/scripts/object/tangible/terminal/terminal_player_structure_new.py b/scripts/object/tangible/terminal/terminal_player_structure_new.py index ccad8904..dd5b18cd 100644 --- a/scripts/object/tangible/terminal/terminal_player_structure_new.py +++ b/scripts/object/tangible/terminal/terminal_player_structure_new.py @@ -1,4 +1,5 @@ import sys def setup(core, object): + object.setAttachment('radial_filename', 'structure/structure_management_terminal') return \ No newline at end of file diff --git a/scripts/object/tangible/terminal/terminal_player_structure_nosnap.py b/scripts/object/tangible/terminal/terminal_player_structure_nosnap.py index ccad8904..dd5b18cd 100644 --- a/scripts/object/tangible/terminal/terminal_player_structure_nosnap.py +++ b/scripts/object/tangible/terminal/terminal_player_structure_nosnap.py @@ -1,4 +1,5 @@ import sys def setup(core, object): + object.setAttachment('radial_filename', 'structure/structure_management_terminal') return \ No newline at end of file diff --git a/scripts/object/tangible/terminal/terminal_player_structure_nosnap_mini.py b/scripts/object/tangible/terminal/terminal_player_structure_nosnap_mini.py index ccad8904..dd5b18cd 100644 --- a/scripts/object/tangible/terminal/terminal_player_structure_nosnap_mini.py +++ b/scripts/object/tangible/terminal/terminal_player_structure_nosnap_mini.py @@ -1,4 +1,5 @@ import sys def setup(core, object): + object.setAttachment('radial_filename', 'structure/structure_management_terminal') return \ No newline at end of file diff --git a/scripts/object/tangible/terminal/terminal_travel.py b/scripts/object/tangible/terminal/terminal_travel.py index 160aac1c..07222fe6 100644 --- a/scripts/object/tangible/terminal/terminal_travel.py +++ b/scripts/object/tangible/terminal/terminal_travel.py @@ -1,5 +1,5 @@ import sys def setup(core, object): - object.setAttachment('radial_filename', 'travel_terminal') + object.setAttachment('radial_filename', 'terminal/travel_terminal') return \ No newline at end of file diff --git a/scripts/object/tangible/travel/ticket_collector/ticket_collector.py b/scripts/object/tangible/travel/ticket_collector/ticket_collector.py index d243308d..a4dcc12f 100644 --- a/scripts/object/tangible/travel/ticket_collector/ticket_collector.py +++ b/scripts/object/tangible/travel/ticket_collector/ticket_collector.py @@ -1,5 +1,5 @@ import sys def setup(core, object): - object.setAttachment('radial_filename', 'npc_ticket_collector') + object.setAttachment('radial_filename', 'npc/npc_ticket_collector') return \ No newline at end of file diff --git a/scripts/object/tangible/travel/travel_ticket/base/base_travel_ticket.py b/scripts/object/tangible/travel/travel_ticket/base/base_travel_ticket.py index ccad8904..446e9f9f 100644 --- a/scripts/object/tangible/travel/travel_ticket/base/base_travel_ticket.py +++ b/scripts/object/tangible/travel/travel_ticket/base/base_travel_ticket.py @@ -1,4 +1,5 @@ import sys def setup(core, object): + object.setAttachment('radial_filename', 'item/travel_ticket') return \ No newline at end of file diff --git a/scripts/object/tangible/veteran_reward/one_year_anniversary/painting_01.py b/scripts/object/tangible/veteran_reward/one_year_anniversary/painting_01.py index ccad8904..341b98ac 100644 --- a/scripts/object/tangible/veteran_reward/one_year_anniversary/painting_01.py +++ b/scripts/object/tangible/veteran_reward/one_year_anniversary/painting_01.py @@ -1,4 +1,6 @@ import sys def setup(core, object): - return \ No newline at end of file + return + + #Cast Wing in Flight \ No newline at end of file diff --git a/scripts/object/tangible/veteran_reward/one_year_anniversary/painting_02.py b/scripts/object/tangible/veteran_reward/one_year_anniversary/painting_02.py index ccad8904..dc88ba68 100644 --- a/scripts/object/tangible/veteran_reward/one_year_anniversary/painting_02.py +++ b/scripts/object/tangible/veteran_reward/one_year_anniversary/painting_02.py @@ -1,4 +1,6 @@ import sys def setup(core, object): - return \ No newline at end of file + return + + #decimator \ No newline at end of file diff --git a/scripts/object/tangible/veteran_reward/one_year_anniversary/painting_03.py b/scripts/object/tangible/veteran_reward/one_year_anniversary/painting_03.py index ccad8904..b37b2640 100644 --- a/scripts/object/tangible/veteran_reward/one_year_anniversary/painting_03.py +++ b/scripts/object/tangible/veteran_reward/one_year_anniversary/painting_03.py @@ -1,4 +1,6 @@ import sys def setup(core, object): - return \ No newline at end of file + return + + #Tatooine Dune Speeder \ No newline at end of file diff --git a/scripts/object/tangible/veteran_reward/one_year_anniversary/painting_04.py b/scripts/object/tangible/veteran_reward/one_year_anniversary/painting_04.py index ccad8904..5cf9ae7d 100644 --- a/scripts/object/tangible/veteran_reward/one_year_anniversary/painting_04.py +++ b/scripts/object/tangible/veteran_reward/one_year_anniversary/painting_04.py @@ -1,4 +1,6 @@ import sys def setup(core, object): - return \ No newline at end of file + return + + #Weapon of War \ No newline at end of file diff --git a/scripts/object/tangible/veteran_reward/one_year_anniversary/painting_05.py b/scripts/object/tangible/veteran_reward/one_year_anniversary/painting_05.py index ccad8904..df328c90 100644 --- a/scripts/object/tangible/veteran_reward/one_year_anniversary/painting_05.py +++ b/scripts/object/tangible/veteran_reward/one_year_anniversary/painting_05.py @@ -1,4 +1,6 @@ import sys def setup(core, object): - return \ No newline at end of file + return + + #Fighter Study \ No newline at end of file diff --git a/scripts/object/tangible/veteran_reward/one_year_anniversary/painting_06.py b/scripts/object/tangible/veteran_reward/one_year_anniversary/painting_06.py index ccad8904..d4569602 100644 --- a/scripts/object/tangible/veteran_reward/one_year_anniversary/painting_06.py +++ b/scripts/object/tangible/veteran_reward/one_year_anniversary/painting_06.py @@ -1,4 +1,6 @@ import sys def setup(core, object): - return \ No newline at end of file + return + + #Hutt Greed \ No newline at end of file diff --git a/scripts/object/tangible/veteran_reward/one_year_anniversary/painting_07.py b/scripts/object/tangible/veteran_reward/one_year_anniversary/painting_07.py index ccad8904..ba27db78 100644 --- a/scripts/object/tangible/veteran_reward/one_year_anniversary/painting_07.py +++ b/scripts/object/tangible/veteran_reward/one_year_anniversary/painting_07.py @@ -1,4 +1,6 @@ import sys def setup(core, object): - return \ No newline at end of file + return + + #Smugglers Run \ No newline at end of file diff --git a/scripts/object/tangible/veteran_reward/one_year_anniversary/painting_08.py b/scripts/object/tangible/veteran_reward/one_year_anniversary/painting_08.py index ccad8904..4c392aef 100644 --- a/scripts/object/tangible/veteran_reward/one_year_anniversary/painting_08.py +++ b/scripts/object/tangible/veteran_reward/one_year_anniversary/painting_08.py @@ -1,4 +1,6 @@ import sys def setup(core, object): - return \ No newline at end of file + return + + #Imperial Oppression \ No newline at end of file diff --git a/scripts/object/tangible/veteran_reward/one_year_anniversary/painting_09.py b/scripts/object/tangible/veteran_reward/one_year_anniversary/painting_09.py index ccad8904..206eadd9 100644 --- a/scripts/object/tangible/veteran_reward/one_year_anniversary/painting_09.py +++ b/scripts/object/tangible/veteran_reward/one_year_anniversary/painting_09.py @@ -1,4 +1,6 @@ import sys def setup(core, object): - return \ No newline at end of file + return + + Emporer's Eyes \ No newline at end of file diff --git a/scripts/object/tangible/veteran_reward/one_year_anniversary/painting_10.py b/scripts/object/tangible/veteran_reward/one_year_anniversary/painting_10.py index ccad8904..4b4ed376 100644 --- a/scripts/object/tangible/veteran_reward/one_year_anniversary/painting_10.py +++ b/scripts/object/tangible/veteran_reward/one_year_anniversary/painting_10.py @@ -1,4 +1,6 @@ import sys def setup(core, object): - return \ No newline at end of file + return + + #Dusk in Kachiro \ No newline at end of file diff --git a/scripts/object/tangible/wearables/armor/appearance_invisible_bicep_l.py b/scripts/object/tangible/wearables/armor/appearance_invisible_bicep_l.py index ccad8904..b89922ca 100644 --- a/scripts/object/tangible/wearables/armor/appearance_invisible_bicep_l.py +++ b/scripts/object/tangible/wearables/armor/appearance_invisible_bicep_l.py @@ -1,4 +1,7 @@ import sys def setup(core, object): + object.setStringAttribute('condition', '100/100') + object.setIntAttribute('volume', 1) + return \ No newline at end of file diff --git a/scripts/object/tangible/wearables/armor/appearance_invisible_bicep_r.py b/scripts/object/tangible/wearables/armor/appearance_invisible_bicep_r.py index ccad8904..b89922ca 100644 --- a/scripts/object/tangible/wearables/armor/appearance_invisible_bicep_r.py +++ b/scripts/object/tangible/wearables/armor/appearance_invisible_bicep_r.py @@ -1,4 +1,7 @@ import sys def setup(core, object): + object.setStringAttribute('condition', '100/100') + object.setIntAttribute('volume', 1) + return \ No newline at end of file diff --git a/scripts/object/tangible/wearables/armor/appearance_invisible_bracer_l.py b/scripts/object/tangible/wearables/armor/appearance_invisible_bracer_l.py index ccad8904..b89922ca 100644 --- a/scripts/object/tangible/wearables/armor/appearance_invisible_bracer_l.py +++ b/scripts/object/tangible/wearables/armor/appearance_invisible_bracer_l.py @@ -1,4 +1,7 @@ import sys def setup(core, object): + object.setStringAttribute('condition', '100/100') + object.setIntAttribute('volume', 1) + return \ No newline at end of file diff --git a/scripts/object/tangible/wearables/armor/appearance_invisible_bracer_r.py b/scripts/object/tangible/wearables/armor/appearance_invisible_bracer_r.py index ccad8904..b89922ca 100644 --- a/scripts/object/tangible/wearables/armor/appearance_invisible_bracer_r.py +++ b/scripts/object/tangible/wearables/armor/appearance_invisible_bracer_r.py @@ -1,4 +1,7 @@ import sys def setup(core, object): + object.setStringAttribute('condition', '100/100') + object.setIntAttribute('volume', 1) + return \ No newline at end of file diff --git a/scripts/object/tangible/wearables/armor/composite/armor_bounty_hunter_roadmap_bicep_l_02_01.py b/scripts/object/tangible/wearables/armor/composite/armor_bounty_hunter_roadmap_bicep_l_02_01.py new file mode 100644 index 00000000..9fa443b7 --- /dev/null +++ b/scripts/object/tangible/wearables/armor/composite/armor_bounty_hunter_roadmap_bicep_l_02_01.py @@ -0,0 +1,17 @@ +import sys + +def setup(core, object): + object.setStfFilename('static_item_n') + object.setStfName('armor_bounty_hunter_roadmap_bicep_l_02_01') + object.setDetailFilename('static_item_d') + object.setDetailName('armor_bounty_hunter_roadmap_bicep_l_02_01') + object.setIntAttribute('cat_stat_mod_bonus.@stat_n:constitution_modified', 3) + object.setStringAttribute('class_required', 'Bounty Hunter') + object.setStringAttribute('armor_category', 'Assault') + object.setIntAttribute('cat_armor_standard_protection.kinetic', 2640) + object.setIntAttribute('cat_armor_standard_protection.energy', 640) + object.setIntAttribute('cat_armor_special_protection.special_protection_type_heat', 1640) + object.setIntAttribute('cat_armor_special_protection.special_protection_type_cold', 1640) + object.setIntAttribute('cat_armor_special_protection.special_protection_type_acid', 1640) + object.setIntAttribute('cat_armor_special_protection.special_protection_type_electricity', 1640) + return diff --git a/scripts/object/tangible/wearables/armor/composite/armor_bounty_hunter_roadmap_bicep_r_02_01.py b/scripts/object/tangible/wearables/armor/composite/armor_bounty_hunter_roadmap_bicep_r_02_01.py new file mode 100644 index 00000000..f8e88597 --- /dev/null +++ b/scripts/object/tangible/wearables/armor/composite/armor_bounty_hunter_roadmap_bicep_r_02_01.py @@ -0,0 +1,17 @@ +import sys + +def setup(core, object): + object.setStfFilename('static_item_n') + object.setStfName('armor_bounty_hunter_roadmap_bicep_r_02_01') + object.setDetailFilename('static_item_d') + object.setDetailName('armor_bounty_hunter_roadmap_bicep_r_02_01') + object.setIntAttribute('cat_stat_mod_bonus.@stat_n:constitution_modified', 3) + object.setStringAttribute('class_required', 'Bounty Hunter') + object.setStringAttribute('armor_category', 'Assault') + object.setIntAttribute('cat_armor_standard_protection.kinetic', 2640) + object.setIntAttribute('cat_armor_standard_protection.energy', 640) + object.setIntAttribute('cat_armor_special_protection.special_protection_type_heat', 1640) + object.setIntAttribute('cat_armor_special_protection.special_protection_type_cold', 1640) + object.setIntAttribute('cat_armor_special_protection.special_protection_type_acid', 1640) + object.setIntAttribute('cat_armor_special_protection.special_protection_type_electricity', 1640) + return diff --git a/scripts/object/tangible/wearables/armor/composite/armor_bounty_hunter_roadmap_boots_02_01.py b/scripts/object/tangible/wearables/armor/composite/armor_bounty_hunter_roadmap_boots_02_01.py new file mode 100644 index 00000000..dcbb349e --- /dev/null +++ b/scripts/object/tangible/wearables/armor/composite/armor_bounty_hunter_roadmap_boots_02_01.py @@ -0,0 +1,10 @@ +import sys + +def setup(core, object): + object.setStfFilename('static_item_n') + object.setStfName('armor_bounty_hunter_roadmap_boots_02_01') + object.setDetailFilename('static_item_d') + object.setDetailName('armor_bounty_hunter_roadmap_boots_02_01') + object.setStringAttribute('class_required', 'Bounty Hunter') + object.setStringAttribute('armor_category', 'Assault') + return diff --git a/scripts/object/tangible/wearables/armor/composite/armor_bounty_hunter_roadmap_bracer_l_02_01.py b/scripts/object/tangible/wearables/armor/composite/armor_bounty_hunter_roadmap_bracer_l_02_01.py new file mode 100644 index 00000000..5ca4b024 --- /dev/null +++ b/scripts/object/tangible/wearables/armor/composite/armor_bounty_hunter_roadmap_bracer_l_02_01.py @@ -0,0 +1,17 @@ +import sys + +def setup(core, object): + object.setStfFilename('static_item_n') + object.setStfName('armor_bounty_hunter_roadmap_bracer_l_02_01') + object.setDetailFilename('static_item_d') + object.setDetailName('armor_bounty_hunter_roadmap_bracer_l_02_01') + object.setIntAttribute('cat_stat_mod_bonus.@stat_n:constitution_modified', 3) + object.setStringAttribute('class_required', 'Bounty Hunter') + object.setStringAttribute('armor_category', 'Assault') + object.setIntAttribute('cat_armor_standard_protection.kinetic', 2640) + object.setIntAttribute('cat_armor_standard_protection.energy', 640) + object.setIntAttribute('cat_armor_special_protection.special_protection_type_heat', 1640) + object.setIntAttribute('cat_armor_special_protection.special_protection_type_cold', 1640) + object.setIntAttribute('cat_armor_special_protection.special_protection_type_acid', 1640) + object.setIntAttribute('cat_armor_special_protection.special_protection_type_electricity', 1640) + return diff --git a/scripts/object/tangible/wearables/armor/composite/armor_bounty_hunter_roadmap_bracer_r_02_01.py b/scripts/object/tangible/wearables/armor/composite/armor_bounty_hunter_roadmap_bracer_r_02_01.py new file mode 100644 index 00000000..83bf330b --- /dev/null +++ b/scripts/object/tangible/wearables/armor/composite/armor_bounty_hunter_roadmap_bracer_r_02_01.py @@ -0,0 +1,17 @@ +import sys + +def setup(core, object): + object.setStfFilename('static_item_n') + object.setStfName('armor_bounty_hunter_roadmap_bracer_r_02_01') + object.setDetailFilename('static_item_d') + object.setDetailName('armor_bounty_hunter_roadmap_bracer_r_02_01') + object.setIntAttribute('cat_stat_mod_bonus.@stat_n:constitution_modified', 3) + object.setStringAttribute('class_required', 'Bounty Hunter') + object.setStringAttribute('armor_category', 'Assault') + object.setIntAttribute('cat_armor_standard_protection.kinetic', 2640) + object.setIntAttribute('cat_armor_standard_protection.energy', 640) + object.setIntAttribute('cat_armor_special_protection.special_protection_type_heat', 1640) + object.setIntAttribute('cat_armor_special_protection.special_protection_type_cold', 1640) + object.setIntAttribute('cat_armor_special_protection.special_protection_type_acid', 1640) + object.setIntAttribute('cat_armor_special_protection.special_protection_type_electricity', 1640) + return diff --git a/scripts/object/tangible/wearables/armor/composite/armor_bounty_hunter_roadmap_chest_02_01.py b/scripts/object/tangible/wearables/armor/composite/armor_bounty_hunter_roadmap_chest_02_01.py new file mode 100644 index 00000000..815a1640 --- /dev/null +++ b/scripts/object/tangible/wearables/armor/composite/armor_bounty_hunter_roadmap_chest_02_01.py @@ -0,0 +1,17 @@ +import sys + +def setup(core, object): + object.setStfFilename('static_item_n') + object.setStfName('armor_bounty_hunter_roadmap_chest_02_01') + object.setDetailFilename('static_item_d') + object.setDetailName('armor_bounty_hunter_roadmap_chest_02_01') + object.setIntAttribute('cat_stat_mod_bonus.@stat_n:constitution_modified', 3) + object.setStringAttribute('class_required', 'Bounty Hunter') + object.setStringAttribute('armor_category', 'Assault') + object.setIntAttribute('cat_armor_standard_protection.kinetic', 2640) + object.setIntAttribute('cat_armor_standard_protection.energy', 640) + object.setIntAttribute('cat_armor_special_protection.special_protection_type_heat', 1640) + object.setIntAttribute('cat_armor_special_protection.special_protection_type_cold', 1640) + object.setIntAttribute('cat_armor_special_protection.special_protection_type_acid', 1640) + object.setIntAttribute('cat_armor_special_protection.special_protection_type_electricity', 1640) + return diff --git a/scripts/object/tangible/wearables/armor/composite/armor_bounty_hunter_roadmap_gloves_02_01.py b/scripts/object/tangible/wearables/armor/composite/armor_bounty_hunter_roadmap_gloves_02_01.py new file mode 100644 index 00000000..0edc69cc --- /dev/null +++ b/scripts/object/tangible/wearables/armor/composite/armor_bounty_hunter_roadmap_gloves_02_01.py @@ -0,0 +1,10 @@ +import sys + +def setup(core, object): + object.setStfFilename('static_item_n') + object.setStfName('armor_bounty_hunter_roadmap_gloves_02_01') + object.setDetailFilename('static_item_d') + object.setDetailName('armor_bounty_hunter_roadmap_gloves_02_01') + object.setStringAttribute('class_required', 'Bounty Hunter') + object.setStringAttribute('armor_category', 'Assault') + return diff --git a/scripts/object/tangible/wearables/armor/composite/armor_bounty_hunter_roadmap_helmet_02_01.py b/scripts/object/tangible/wearables/armor/composite/armor_bounty_hunter_roadmap_helmet_02_01.py new file mode 100644 index 00000000..f798283c --- /dev/null +++ b/scripts/object/tangible/wearables/armor/composite/armor_bounty_hunter_roadmap_helmet_02_01.py @@ -0,0 +1,17 @@ +import sys + +def setup(core, object): + object.setStfFilename('static_item_n') + object.setStfName('armor_bounty_hunter_roadmap_helmet_02_01') + object.setDetailFilename('static_item_d') + object.setDetailName('armor_bounty_hunter_roadmap_helmet_02_01') + object.setIntAttribute('cat_stat_mod_bonus.@stat_n:constitution_modified', 3) + object.setStringAttribute('class_required', 'Bounty Hunter') + object.setStringAttribute('armor_category', 'Assault') + object.setIntAttribute('cat_armor_standard_protection.kinetic', 2640) + object.setIntAttribute('cat_armor_standard_protection.energy', 640) + object.setIntAttribute('cat_armor_special_protection.special_protection_type_heat', 1640) + object.setIntAttribute('cat_armor_special_protection.special_protection_type_cold', 1640) + object.setIntAttribute('cat_armor_special_protection.special_protection_type_acid', 1640) + object.setIntAttribute('cat_armor_special_protection.special_protection_type_electricity', 1640) + return diff --git a/scripts/object/tangible/wearables/armor/composite/armor_bounty_hunter_roadmap_leggings_02_01.py b/scripts/object/tangible/wearables/armor/composite/armor_bounty_hunter_roadmap_leggings_02_01.py new file mode 100644 index 00000000..6ad62c58 --- /dev/null +++ b/scripts/object/tangible/wearables/armor/composite/armor_bounty_hunter_roadmap_leggings_02_01.py @@ -0,0 +1,17 @@ +import sys + +def setup(core, object): + object.setStfFilename('static_item_n') + object.setStfName('armor_bounty_hunter_roadmap_leggings_02_01') + object.setDetailFilename('static_item_d') + object.setDetailName('armor_bounty_hunter_roadmap_leggings_02_01') + object.setIntAttribute('cat_stat_mod_bonus.@stat_n:constitution_modified', 3) + object.setStringAttribute('class_required', 'Bounty Hunter') + object.setStringAttribute('armor_category', 'Assault') + object.setIntAttribute('cat_armor_standard_protection.kinetic', 2640) + object.setIntAttribute('cat_armor_standard_protection.energy', 640) + object.setIntAttribute('cat_armor_special_protection.special_protection_type_heat', 1640) + object.setIntAttribute('cat_armor_special_protection.special_protection_type_cold', 1640) + object.setIntAttribute('cat_armor_special_protection.special_protection_type_acid', 1640) + object.setIntAttribute('cat_armor_special_protection.special_protection_type_electricity', 1640) + return diff --git a/scripts/object/tangible/wearables/armor/composite/armor_commando_roadmap_bicep_l_02_01.py b/scripts/object/tangible/wearables/armor/composite/armor_commando_roadmap_bicep_l_02_01.py new file mode 100644 index 00000000..725b9056 --- /dev/null +++ b/scripts/object/tangible/wearables/armor/composite/armor_commando_roadmap_bicep_l_02_01.py @@ -0,0 +1,17 @@ +import sys + +def setup(core, object): + object.setStfFilename('static_item_n') + object.setStfName('armor_commando_roadmap_bicep_l_02_01') + object.setDetailFilename('static_item_d') + object.setDetailName('armor_commando_roadmap_bicep_l_02_01') + object.setIntAttribute('cat_stat_mod_bonus.@stat_n:constitution_modified', 3) + object.setStringAttribute('class_required', 'Commando') + object.setStringAttribute('armor_category', 'Assault') + object.setIntAttribute('cat_armor_standard_protection.kinetic', 2640) + object.setIntAttribute('cat_armor_standard_protection.energy', 640) + object.setIntAttribute('cat_armor_special_protection.special_protection_type_heat', 1640) + object.setIntAttribute('cat_armor_special_protection.special_protection_type_cold', 1640) + object.setIntAttribute('cat_armor_special_protection.special_protection_type_acid', 1640) + object.setIntAttribute('cat_armor_special_protection.special_protection_type_electricity', 1640) + return diff --git a/scripts/object/tangible/wearables/armor/composite/armor_commando_roadmap_bicep_r_02_01.py b/scripts/object/tangible/wearables/armor/composite/armor_commando_roadmap_bicep_r_02_01.py new file mode 100644 index 00000000..a0c37a28 --- /dev/null +++ b/scripts/object/tangible/wearables/armor/composite/armor_commando_roadmap_bicep_r_02_01.py @@ -0,0 +1,17 @@ +import sys + +def setup(core, object): + object.setStfFilename('static_item_n') + object.setStfName('armor_commando_roadmap_bicep_r_02_01') + object.setDetailFilename('static_item_d') + object.setDetailName('armor_commando_roadmap_bicep_r_02_01') + object.setIntAttribute('cat_stat_mod_bonus.@stat_n:constitution_modified', 3) + object.setStringAttribute('class_required', 'Commando') + object.setStringAttribute('armor_category', 'Assault') + object.setIntAttribute('cat_armor_standard_protection.kinetic', 2640) + object.setIntAttribute('cat_armor_standard_protection.energy', 640) + object.setIntAttribute('cat_armor_special_protection.special_protection_type_heat', 1640) + object.setIntAttribute('cat_armor_special_protection.special_protection_type_cold', 1640) + object.setIntAttribute('cat_armor_special_protection.special_protection_type_acid', 1640) + object.setIntAttribute('cat_armor_special_protection.special_protection_type_electricity', 1640) + return diff --git a/scripts/object/tangible/wearables/armor/composite/armor_commando_roadmap_boots_02_01.py b/scripts/object/tangible/wearables/armor/composite/armor_commando_roadmap_boots_02_01.py new file mode 100644 index 00000000..16df82a0 --- /dev/null +++ b/scripts/object/tangible/wearables/armor/composite/armor_commando_roadmap_boots_02_01.py @@ -0,0 +1,10 @@ +import sys + +def setup(core, object): + object.setStfFilename('static_item_n') + object.setStfName('armor_commando_roadmap_boots_02_01') + object.setDetailFilename('static_item_d') + object.setDetailName('armor_commando_roadmap_boots_02_01') + object.setStringAttribute('class_required', 'Commando') + object.setStringAttribute('armor_category', 'Assault') + return diff --git a/scripts/object/tangible/wearables/armor/composite/armor_commando_roadmap_bracer_l_02_01.py b/scripts/object/tangible/wearables/armor/composite/armor_commando_roadmap_bracer_l_02_01.py new file mode 100644 index 00000000..0cdc5e97 --- /dev/null +++ b/scripts/object/tangible/wearables/armor/composite/armor_commando_roadmap_bracer_l_02_01.py @@ -0,0 +1,17 @@ +import sys + +def setup(core, object): + object.setStfFilename('static_item_n') + object.setStfName('armor_commando_roadmap_bracer_l_02_01') + object.setDetailFilename('static_item_d') + object.setDetailName('armor_commando_roadmap_bracer_l_02_01') + object.setIntAttribute('cat_stat_mod_bonus.@stat_n:constitution_modified', 3) + object.setStringAttribute('class_required', 'Commando') + object.setStringAttribute('armor_category', 'Assault') + object.setIntAttribute('cat_armor_standard_protection.kinetic', 2640) + object.setIntAttribute('cat_armor_standard_protection.energy', 640) + object.setIntAttribute('cat_armor_special_protection.special_protection_type_heat', 1640) + object.setIntAttribute('cat_armor_special_protection.special_protection_type_cold', 1640) + object.setIntAttribute('cat_armor_special_protection.special_protection_type_acid', 1640) + object.setIntAttribute('cat_armor_special_protection.special_protection_type_electricity', 1640) + return diff --git a/scripts/object/tangible/wearables/armor/composite/armor_commando_roadmap_bracer_r_02_01.py b/scripts/object/tangible/wearables/armor/composite/armor_commando_roadmap_bracer_r_02_01.py new file mode 100644 index 00000000..c4e221c2 --- /dev/null +++ b/scripts/object/tangible/wearables/armor/composite/armor_commando_roadmap_bracer_r_02_01.py @@ -0,0 +1,17 @@ +import sys + +def setup(core, object): + object.setStfFilename('static_item_n') + object.setStfName('armor_commando_roadmap_bracer_r_02_01') + object.setDetailFilename('static_item_d') + object.setDetailName('armor_commando_roadmap_bracer_r_02_01') + object.setIntAttribute('cat_stat_mod_bonus.@stat_n:constitution_modified', 3) + object.setStringAttribute('class_required', 'Commando') + object.setStringAttribute('armor_category', 'Assault') + object.setIntAttribute('cat_armor_standard_protection.kinetic', 2640) + object.setIntAttribute('cat_armor_standard_protection.energy', 640) + object.setIntAttribute('cat_armor_special_protection.special_protection_type_heat', 1640) + object.setIntAttribute('cat_armor_special_protection.special_protection_type_cold', 1640) + object.setIntAttribute('cat_armor_special_protection.special_protection_type_acid', 1640) + object.setIntAttribute('cat_armor_special_protection.special_protection_type_electricity', 1640) + return diff --git a/scripts/object/tangible/wearables/armor/composite/armor_commando_roadmap_chest_02_01.py b/scripts/object/tangible/wearables/armor/composite/armor_commando_roadmap_chest_02_01.py new file mode 100644 index 00000000..af0fa26f --- /dev/null +++ b/scripts/object/tangible/wearables/armor/composite/armor_commando_roadmap_chest_02_01.py @@ -0,0 +1,17 @@ +import sys + +def setup(core, object): + object.setStfFilename('static_item_n') + object.setStfName('armor_commando_roadmap_chest_02_01') + object.setDetailFilename('static_item_d') + object.setDetailName('armor_commando_roadmap_chest_02_01') + object.setIntAttribute('cat_stat_mod_bonus.@stat_n:constitution_modified', 3) + object.setStringAttribute('class_required', 'Commando') + object.setStringAttribute('armor_category', 'Assault') + object.setIntAttribute('cat_armor_standard_protection.kinetic', 2640) + object.setIntAttribute('cat_armor_standard_protection.energy', 640) + object.setIntAttribute('cat_armor_special_protection.special_protection_type_heat', 1640) + object.setIntAttribute('cat_armor_special_protection.special_protection_type_cold', 1640) + object.setIntAttribute('cat_armor_special_protection.special_protection_type_acid', 1640) + object.setIntAttribute('cat_armor_special_protection.special_protection_type_electricity', 1640) + return diff --git a/scripts/object/tangible/wearables/armor/composite/armor_commando_roadmap_gloves_02_01.py b/scripts/object/tangible/wearables/armor/composite/armor_commando_roadmap_gloves_02_01.py new file mode 100644 index 00000000..17ee0ecd --- /dev/null +++ b/scripts/object/tangible/wearables/armor/composite/armor_commando_roadmap_gloves_02_01.py @@ -0,0 +1,10 @@ +import sys + +def setup(core, object): + object.setStfFilename('static_item_n') + object.setStfName('armor_commando_roadmap_gloves_02_01') + object.setDetailFilename('static_item_d') + object.setDetailName('armor_commando_roadmap_gloves_02_01') + object.setStringAttribute('class_required', 'Commando') + object.setStringAttribute('armor_category', 'Assault') + return diff --git a/scripts/object/tangible/wearables/armor/composite/armor_commando_roadmap_helmet_02_01.py b/scripts/object/tangible/wearables/armor/composite/armor_commando_roadmap_helmet_02_01.py new file mode 100644 index 00000000..1d8a8c05 --- /dev/null +++ b/scripts/object/tangible/wearables/armor/composite/armor_commando_roadmap_helmet_02_01.py @@ -0,0 +1,17 @@ +import sys + +def setup(core, object): + object.setStfFilename('static_item_n') + object.setStfName('armor_commando_roadmap_helmet_02_01') + object.setDetailFilename('static_item_d') + object.setDetailName('armor_commando_roadmap_helmet_02_01') + object.setIntAttribute('cat_stat_mod_bonus.@stat_n:constitution_modified', 3) + object.setStringAttribute('class_required', 'Commando') + object.setStringAttribute('armor_category', 'Assault') + object.setIntAttribute('cat_armor_standard_protection.kinetic', 2640) + object.setIntAttribute('cat_armor_standard_protection.energy', 640) + object.setIntAttribute('cat_armor_special_protection.special_protection_type_heat', 1640) + object.setIntAttribute('cat_armor_special_protection.special_protection_type_cold', 1640) + object.setIntAttribute('cat_armor_special_protection.special_protection_type_acid', 1640) + object.setIntAttribute('cat_armor_special_protection.special_protection_type_electricity', 1640) + return diff --git a/scripts/object/tangible/wearables/armor/composite/armor_commando_roadmap_leggings_02_01.py b/scripts/object/tangible/wearables/armor/composite/armor_commando_roadmap_leggings_02_01.py new file mode 100644 index 00000000..3ebce0ac --- /dev/null +++ b/scripts/object/tangible/wearables/armor/composite/armor_commando_roadmap_leggings_02_01.py @@ -0,0 +1,17 @@ +import sys + +def setup(core, object): + object.setStfFilename('static_item_n') + object.setStfName('armor_commando_roadmap_leggings_02_01') + object.setDetailFilename('static_item_d') + object.setDetailName('armor_commando_roadmap_leggings_02_01') + object.setIntAttribute('cat_stat_mod_bonus.@stat_n:constitution_modified', 3) + object.setStringAttribute('class_required', 'Commando') + object.setStringAttribute('armor_category', 'Assault') + object.setIntAttribute('cat_armor_standard_protection.kinetic', 2640) + object.setIntAttribute('cat_armor_standard_protection.energy', 640) + object.setIntAttribute('cat_armor_special_protection.special_protection_type_heat', 1640) + object.setIntAttribute('cat_armor_special_protection.special_protection_type_cold', 1640) + object.setIntAttribute('cat_armor_special_protection.special_protection_type_acid', 1640) + object.setIntAttribute('cat_armor_special_protection.special_protection_type_electricity', 1640) + return diff --git a/scripts/object/tangible/wearables/armor/ithorian_sentinel/armor_ithorian_roadmap_bicep_l_02_03.py b/scripts/object/tangible/wearables/armor/ithorian_sentinel/armor_ithorian_roadmap_bicep_l_02_03.py new file mode 100644 index 00000000..67da6ef4 --- /dev/null +++ b/scripts/object/tangible/wearables/armor/ithorian_sentinel/armor_ithorian_roadmap_bicep_l_02_03.py @@ -0,0 +1,17 @@ +import sys + +def setup(core, object): + object.setStfFilename('static_item_n') + object.setStfName('armor_ithorian_roadmap_bicep_l_02_03') + object.setDetailFilename('static_item_d') + object.setDetailName('armor_ithorian_roadmap_bicep_l_02_03') + object.setIntAttribute('cat_stat_mod_bonus.@stat_n:constitution_modified', 3) + object.setStringAttribute('class_required', 'Bounty Hunter') + object.setStringAttribute('armor_category', 'Assault') + object.setIntAttribute('cat_armor_standard_protection.kinetic', 2640) + object.setIntAttribute('cat_armor_standard_protection.energy', 640) + object.setIntAttribute('cat_armor_special_protection.special_protection_type_heat', 1640) + object.setIntAttribute('cat_armor_special_protection.special_protection_type_cold', 1640) + object.setIntAttribute('cat_armor_special_protection.special_protection_type_acid', 1640) + object.setIntAttribute('cat_armor_special_protection.special_protection_type_electricity', 1640) + return diff --git a/scripts/object/tangible/wearables/armor/ithorian_sentinel/armor_ithorian_roadmap_bicep_r_02_03.py b/scripts/object/tangible/wearables/armor/ithorian_sentinel/armor_ithorian_roadmap_bicep_r_02_03.py new file mode 100644 index 00000000..53f0fb21 --- /dev/null +++ b/scripts/object/tangible/wearables/armor/ithorian_sentinel/armor_ithorian_roadmap_bicep_r_02_03.py @@ -0,0 +1,17 @@ +import sys + +def setup(core, object): + object.setStfFilename('static_item_n') + object.setStfName('armor_ithorian_roadmap_bicep_r_02_03') + object.setDetailFilename('static_item_d') + object.setDetailName('armor_ithorian_roadmap_bicep_r_02_03') + object.setIntAttribute('cat_stat_mod_bonus.@stat_n:constitution_modified', 3) + object.setStringAttribute('class_required', 'Bounty Hunter') + object.setStringAttribute('armor_category', 'Assault') + object.setIntAttribute('cat_armor_standard_protection.kinetic', 2640) + object.setIntAttribute('cat_armor_standard_protection.energy', 640) + object.setIntAttribute('cat_armor_special_protection.special_protection_type_heat', 1640) + object.setIntAttribute('cat_armor_special_protection.special_protection_type_cold', 1640) + object.setIntAttribute('cat_armor_special_protection.special_protection_type_acid', 1640) + object.setIntAttribute('cat_armor_special_protection.special_protection_type_electricity', 1640) + return diff --git a/scripts/object/tangible/wearables/armor/ithorian_sentinel/armor_ithorian_roadmap_boots_02_03.py b/scripts/object/tangible/wearables/armor/ithorian_sentinel/armor_ithorian_roadmap_boots_02_03.py new file mode 100644 index 00000000..5822a2dc --- /dev/null +++ b/scripts/object/tangible/wearables/armor/ithorian_sentinel/armor_ithorian_roadmap_boots_02_03.py @@ -0,0 +1,10 @@ +import sys + +def setup(core, object): + object.setStfFilename('static_item_n') + object.setStfName('armor_ithorian_roadmap_boots_02_03') + object.setDetailFilename('static_item_d') + object.setDetailName('armor_ithorian_roadmap_boots_02_03') + object.setStringAttribute('class_required', 'Bounty Hunter') + object.setStringAttribute('armor_category', 'Assault') + return diff --git a/scripts/object/tangible/wearables/armor/ithorian_sentinel/armor_ithorian_roadmap_bracer_l_02_03.py b/scripts/object/tangible/wearables/armor/ithorian_sentinel/armor_ithorian_roadmap_bracer_l_02_03.py new file mode 100644 index 00000000..2c96e2dd --- /dev/null +++ b/scripts/object/tangible/wearables/armor/ithorian_sentinel/armor_ithorian_roadmap_bracer_l_02_03.py @@ -0,0 +1,17 @@ +import sys + +def setup(core, object): + object.setStfFilename('static_item_n') + object.setStfName('armor_ithorian_roadmap_bracer_l_02_03') + object.setDetailFilename('static_item_d') + object.setDetailName('armor_ithorian_roadmap_bracer_l_02_03') + object.setIntAttribute('cat_stat_mod_bonus.@stat_n:constitution_modified', 3) + object.setStringAttribute('class_required', 'Bounty Hunter') + object.setStringAttribute('armor_category', 'Assault') + object.setIntAttribute('cat_armor_standard_protection.kinetic', 2640) + object.setIntAttribute('cat_armor_standard_protection.energy', 640) + object.setIntAttribute('cat_armor_special_protection.special_protection_type_heat', 1640) + object.setIntAttribute('cat_armor_special_protection.special_protection_type_cold', 1640) + object.setIntAttribute('cat_armor_special_protection.special_protection_type_acid', 1640) + object.setIntAttribute('cat_armor_special_protection.special_protection_type_electricity', 1640) + return diff --git a/scripts/object/tangible/wearables/armor/ithorian_sentinel/armor_ithorian_roadmap_bracer_r_02_03.py b/scripts/object/tangible/wearables/armor/ithorian_sentinel/armor_ithorian_roadmap_bracer_r_02_03.py new file mode 100644 index 00000000..1fee94a5 --- /dev/null +++ b/scripts/object/tangible/wearables/armor/ithorian_sentinel/armor_ithorian_roadmap_bracer_r_02_03.py @@ -0,0 +1,17 @@ +import sys + +def setup(core, object): + object.setStfFilename('static_item_n') + object.setStfName('armor_ithorian_roadmap_bracer_r_02_03') + object.setDetailFilename('static_item_d') + object.setDetailName('armor_ithorian_roadmap_bracer_r_02_03') + object.setIntAttribute('cat_stat_mod_bonus.@stat_n:constitution_modified', 3) + object.setStringAttribute('class_required', 'Bounty Hunter') + object.setStringAttribute('armor_category', 'Assault') + object.setIntAttribute('cat_armor_standard_protection.kinetic', 2640) + object.setIntAttribute('cat_armor_standard_protection.energy', 640) + object.setIntAttribute('cat_armor_special_protection.special_protection_type_heat', 1640) + object.setIntAttribute('cat_armor_special_protection.special_protection_type_cold', 1640) + object.setIntAttribute('cat_armor_special_protection.special_protection_type_acid', 1640) + object.setIntAttribute('cat_armor_special_protection.special_protection_type_electricity', 1640) + return diff --git a/scripts/object/tangible/wearables/armor/ithorian_sentinel/armor_ithorian_roadmap_chest_02_03.py b/scripts/object/tangible/wearables/armor/ithorian_sentinel/armor_ithorian_roadmap_chest_02_03.py new file mode 100644 index 00000000..b17b98cc --- /dev/null +++ b/scripts/object/tangible/wearables/armor/ithorian_sentinel/armor_ithorian_roadmap_chest_02_03.py @@ -0,0 +1,17 @@ +import sys + +def setup(core, object): + object.setStfFilename('static_item_n') + object.setStfName('armor_ithorian_roadmap_chest_02_03') + object.setDetailFilename('static_item_d') + object.setDetailName('armor_ithorian_roadmap_chest_02_03') + object.setIntAttribute('cat_stat_mod_bonus.@stat_n:constitution_modified', 3) + object.setStringAttribute('class_required', 'Bounty Hunter') + object.setStringAttribute('armor_category', 'Assault') + object.setIntAttribute('cat_armor_standard_protection.kinetic', 2640) + object.setIntAttribute('cat_armor_standard_protection.energy', 640) + object.setIntAttribute('cat_armor_special_protection.special_protection_type_heat', 1640) + object.setIntAttribute('cat_armor_special_protection.special_protection_type_cold', 1640) + object.setIntAttribute('cat_armor_special_protection.special_protection_type_acid', 1640) + object.setIntAttribute('cat_armor_special_protection.special_protection_type_electricity', 1640) + return diff --git a/scripts/object/tangible/wearables/armor/ithorian_sentinel/armor_ithorian_roadmap_gloves_02_03.py b/scripts/object/tangible/wearables/armor/ithorian_sentinel/armor_ithorian_roadmap_gloves_02_03.py new file mode 100644 index 00000000..54aab0ca --- /dev/null +++ b/scripts/object/tangible/wearables/armor/ithorian_sentinel/armor_ithorian_roadmap_gloves_02_03.py @@ -0,0 +1,10 @@ +import sys + +def setup(core, object): + object.setStfFilename('static_item_n') + object.setStfName('armor_ithorian_roadmap_gloves_02_03') + object.setDetailFilename('static_item_d') + object.setDetailName('armor_ithorian_roadmap_gloves_02_03') + object.setStringAttribute('class_required', 'Bounty Hunter') + object.setStringAttribute('armor_category', 'Assault') + return diff --git a/scripts/object/tangible/wearables/armor/ithorian_sentinel/armor_ithorian_roadmap_helmet_02_03.py b/scripts/object/tangible/wearables/armor/ithorian_sentinel/armor_ithorian_roadmap_helmet_02_03.py new file mode 100644 index 00000000..91f77a60 --- /dev/null +++ b/scripts/object/tangible/wearables/armor/ithorian_sentinel/armor_ithorian_roadmap_helmet_02_03.py @@ -0,0 +1,17 @@ +import sys + +def setup(core, object): + object.setStfFilename('static_item_n') + object.setStfName('armor_ithorian_roadmap_helmet_02_03') + object.setDetailFilename('static_item_d') + object.setDetailName('armor_ithorian_roadmap_helmet_02_03') + object.setIntAttribute('cat_stat_mod_bonus.@stat_n:constitution_modified', 3) + object.setStringAttribute('class_required', 'Bounty Hunter') + object.setStringAttribute('armor_category', 'Assault') + object.setIntAttribute('cat_armor_standard_protection.kinetic', 2640) + object.setIntAttribute('cat_armor_standard_protection.energy', 640) + object.setIntAttribute('cat_armor_special_protection.special_protection_type_heat', 1640) + object.setIntAttribute('cat_armor_special_protection.special_protection_type_cold', 1640) + object.setIntAttribute('cat_armor_special_protection.special_protection_type_acid', 1640) + object.setIntAttribute('cat_armor_special_protection.special_protection_type_electricity', 1640) + return diff --git a/scripts/object/tangible/wearables/armor/ithorian_sentinel/armor_ithorian_roadmap_leggings_02_03.py b/scripts/object/tangible/wearables/armor/ithorian_sentinel/armor_ithorian_roadmap_leggings_02_03.py new file mode 100644 index 00000000..e77eef3a --- /dev/null +++ b/scripts/object/tangible/wearables/armor/ithorian_sentinel/armor_ithorian_roadmap_leggings_02_03.py @@ -0,0 +1,17 @@ +import sys + +def setup(core, object): + object.setStfFilename('static_item_n') + object.setStfName('armor_ithorian_roadmap_leggings_02_03') + object.setDetailFilename('static_item_d') + object.setDetailName('armor_ithorian_roadmap_leggings_02_03') + object.setIntAttribute('cat_stat_mod_bonus.@stat_n:constitution_modified', 3) + object.setStringAttribute('class_required', 'Bounty Hunter') + object.setStringAttribute('armor_category', 'Assault') + object.setIntAttribute('cat_armor_standard_protection.kinetic', 2640) + object.setIntAttribute('cat_armor_standard_protection.energy', 640) + object.setIntAttribute('cat_armor_special_protection.special_protection_type_heat', 1640) + object.setIntAttribute('cat_armor_special_protection.special_protection_type_cold', 1640) + object.setIntAttribute('cat_armor_special_protection.special_protection_type_acid', 1640) + object.setIntAttribute('cat_armor_special_protection.special_protection_type_electricity', 1640) + return diff --git a/scripts/object/tangible/wearables/armor/kashyyykian_hunting/armor_wookiee_roadmap_bicep_l_02_03.py b/scripts/object/tangible/wearables/armor/kashyyykian_hunting/armor_wookiee_roadmap_bicep_l_02_03.py new file mode 100644 index 00000000..765a3379 --- /dev/null +++ b/scripts/object/tangible/wearables/armor/kashyyykian_hunting/armor_wookiee_roadmap_bicep_l_02_03.py @@ -0,0 +1,17 @@ +import sys + +def setup(core, object): + object.setStfFilename('static_item_n') + object.setStfName('armor_wookiee_roadmap_bicep_l_02_03') + object.setDetailFilename('static_item_d') + object.setDetailName('armor_wookiee_roadmap_bicep_l_02_03') + object.setIntAttribute('cat_stat_mod_bonus.@stat_n:constitution_modified', 3) + object.setStringAttribute('class_required', 'Bounty Hunter') + object.setStringAttribute('armor_category', 'Assault') + object.setIntAttribute('cat_armor_standard_protection.kinetic', 2640) + object.setIntAttribute('cat_armor_standard_protection.energy', 640) + object.setIntAttribute('cat_armor_special_protection.special_protection_type_heat', 1640) + object.setIntAttribute('cat_armor_special_protection.special_protection_type_cold', 1640) + object.setIntAttribute('cat_armor_special_protection.special_protection_type_acid', 1640) + object.setIntAttribute('cat_armor_special_protection.special_protection_type_electricity', 1640) + return diff --git a/scripts/object/tangible/wearables/armor/kashyyykian_hunting/armor_wookiee_roadmap_bicep_r_02_03.py b/scripts/object/tangible/wearables/armor/kashyyykian_hunting/armor_wookiee_roadmap_bicep_r_02_03.py new file mode 100644 index 00000000..f25225df --- /dev/null +++ b/scripts/object/tangible/wearables/armor/kashyyykian_hunting/armor_wookiee_roadmap_bicep_r_02_03.py @@ -0,0 +1,17 @@ +import sys + +def setup(core, object): + object.setStfFilename('static_item_n') + object.setStfName('armor_wookiee_roadmap_bicep_r_02_03') + object.setDetailFilename('static_item_d') + object.setDetailName('armor_wookiee_roadmap_bicep_r_02_03') + object.setIntAttribute('cat_stat_mod_bonus.@stat_n:constitution_modified', 3) + object.setStringAttribute('class_required', 'Bounty Hunter') + object.setStringAttribute('armor_category', 'Assault') + object.setIntAttribute('cat_armor_standard_protection.kinetic', 2640) + object.setIntAttribute('cat_armor_standard_protection.energy', 640) + object.setIntAttribute('cat_armor_special_protection.special_protection_type_heat', 1640) + object.setIntAttribute('cat_armor_special_protection.special_protection_type_cold', 1640) + object.setIntAttribute('cat_armor_special_protection.special_protection_type_acid', 1640) + object.setIntAttribute('cat_armor_special_protection.special_protection_type_electricity', 1640) + return diff --git a/scripts/object/tangible/wearables/armor/kashyyykian_hunting/armor_wookiee_roadmap_bracer_l_02_03.py b/scripts/object/tangible/wearables/armor/kashyyykian_hunting/armor_wookiee_roadmap_bracer_l_02_03.py new file mode 100644 index 00000000..808e135d --- /dev/null +++ b/scripts/object/tangible/wearables/armor/kashyyykian_hunting/armor_wookiee_roadmap_bracer_l_02_03.py @@ -0,0 +1,17 @@ +import sys + +def setup(core, object): + object.setStfFilename('static_item_n') + object.setStfName('armor_wookiee_roadmap_bracer_l_02_03') + object.setDetailFilename('static_item_d') + object.setDetailName('armor_wookiee_roadmap_bracer_l_02_03') + object.setIntAttribute('cat_stat_mod_bonus.@stat_n:constitution_modified', 3) + object.setStringAttribute('class_required', 'Bounty Hunter') + object.setStringAttribute('armor_category', 'Assault') + object.setIntAttribute('cat_armor_standard_protection.kinetic', 2640) + object.setIntAttribute('cat_armor_standard_protection.energy', 640) + object.setIntAttribute('cat_armor_special_protection.special_protection_type_heat', 1640) + object.setIntAttribute('cat_armor_special_protection.special_protection_type_cold', 1640) + object.setIntAttribute('cat_armor_special_protection.special_protection_type_acid', 1640) + object.setIntAttribute('cat_armor_special_protection.special_protection_type_electricity', 1640) + return diff --git a/scripts/object/tangible/wearables/armor/kashyyykian_hunting/armor_wookiee_roadmap_bracer_r_02_03.py b/scripts/object/tangible/wearables/armor/kashyyykian_hunting/armor_wookiee_roadmap_bracer_r_02_03.py new file mode 100644 index 00000000..a2b95572 --- /dev/null +++ b/scripts/object/tangible/wearables/armor/kashyyykian_hunting/armor_wookiee_roadmap_bracer_r_02_03.py @@ -0,0 +1,17 @@ +import sys + +def setup(core, object): + object.setStfFilename('static_item_n') + object.setStfName('armor_wookiee_roadmap_bracer_r_02_03') + object.setDetailFilename('static_item_d') + object.setDetailName('armor_wookiee_roadmap_bracer_r_02_03') + object.setIntAttribute('cat_stat_mod_bonus.@stat_n:constitution_modified', 3) + object.setStringAttribute('class_required', 'Bounty Hunter') + object.setStringAttribute('armor_category', 'Assault') + object.setIntAttribute('cat_armor_standard_protection.kinetic', 2640) + object.setIntAttribute('cat_armor_standard_protection.energy', 640) + object.setIntAttribute('cat_armor_special_protection.special_protection_type_heat', 1640) + object.setIntAttribute('cat_armor_special_protection.special_protection_type_cold', 1640) + object.setIntAttribute('cat_armor_special_protection.special_protection_type_acid', 1640) + object.setIntAttribute('cat_armor_special_protection.special_protection_type_electricity', 1640) + return diff --git a/scripts/object/tangible/wearables/armor/kashyyykian_hunting/armor_wookiee_roadmap_chest_02_03.py b/scripts/object/tangible/wearables/armor/kashyyykian_hunting/armor_wookiee_roadmap_chest_02_03.py new file mode 100644 index 00000000..15500015 --- /dev/null +++ b/scripts/object/tangible/wearables/armor/kashyyykian_hunting/armor_wookiee_roadmap_chest_02_03.py @@ -0,0 +1,17 @@ +import sys + +def setup(core, object): + object.setStfFilename('static_item_n') + object.setStfName('armor_wookiee_roadmap_chest_02_03') + object.setDetailFilename('static_item_d') + object.setDetailName('armor_wookiee_roadmap_chest_02_03') + object.setIntAttribute('cat_stat_mod_bonus.@stat_n:constitution_modified', 3) + object.setStringAttribute('class_required', 'Bounty Hunter') + object.setStringAttribute('armor_category', 'Assault') + object.setIntAttribute('cat_armor_standard_protection.kinetic', 2640) + object.setIntAttribute('cat_armor_standard_protection.energy', 640) + object.setIntAttribute('cat_armor_special_protection.special_protection_type_heat', 1640) + object.setIntAttribute('cat_armor_special_protection.special_protection_type_cold', 1640) + object.setIntAttribute('cat_armor_special_protection.special_protection_type_acid', 1640) + object.setIntAttribute('cat_armor_special_protection.special_protection_type_electricity', 1640) + return diff --git a/scripts/object/tangible/wearables/armor/kashyyykian_hunting/armor_wookiee_roadmap_leggings_02_03.py b/scripts/object/tangible/wearables/armor/kashyyykian_hunting/armor_wookiee_roadmap_leggings_02_03.py new file mode 100644 index 00000000..ca4b2cfa --- /dev/null +++ b/scripts/object/tangible/wearables/armor/kashyyykian_hunting/armor_wookiee_roadmap_leggings_02_03.py @@ -0,0 +1,17 @@ +import sys + +def setup(core, object): + object.setStfFilename('static_item_n') + object.setStfName('armor_wookiee_roadmap_leggings_02_03') + object.setDetailFilename('static_item_d') + object.setDetailName('armor_wookiee_roadmap_leggings_02_03') + object.setIntAttribute('cat_stat_mod_bonus.@stat_n:constitution_modified', 3) + object.setStringAttribute('class_required', 'Bounty Hunter') + object.setStringAttribute('armor_category', 'Assault') + object.setIntAttribute('cat_armor_standard_protection.kinetic', 2640) + object.setIntAttribute('cat_armor_standard_protection.energy', 640) + object.setIntAttribute('cat_armor_special_protection.special_protection_type_heat', 1640) + object.setIntAttribute('cat_armor_special_protection.special_protection_type_cold', 1640) + object.setIntAttribute('cat_armor_special_protection.special_protection_type_acid', 1640) + object.setIntAttribute('cat_armor_special_protection.special_protection_type_electricity', 1640) + return diff --git a/scripts/object/tangible/wearables/armor/nightsister/armor_nightsister_bicep_r_s01.py b/scripts/object/tangible/wearables/armor/nightsister/armor_nightsister_bicep_r_s01.py index ccad8904..b89922ca 100644 --- a/scripts/object/tangible/wearables/armor/nightsister/armor_nightsister_bicep_r_s01.py +++ b/scripts/object/tangible/wearables/armor/nightsister/armor_nightsister_bicep_r_s01.py @@ -1,4 +1,7 @@ import sys def setup(core, object): + object.setStringAttribute('condition', '100/100') + object.setIntAttribute('volume', 1) + return \ No newline at end of file diff --git a/scripts/object/tangible/wearables/armor/zam/item_roadmap_belt_bounty_hunter_01_02.py b/scripts/object/tangible/wearables/armor/zam/item_roadmap_belt_bounty_hunter_01_02.py new file mode 100644 index 00000000..c845f9fb --- /dev/null +++ b/scripts/object/tangible/wearables/armor/zam/item_roadmap_belt_bounty_hunter_01_02.py @@ -0,0 +1,13 @@ +import sys + +def setup(core, object): + object.setStfFilename('static_item_n') + object.setStfName('item_roadmap_belt_bounty_hunter_01_02') + object.setDetailFilename('static_item_d') + object.setDetailName('item_roadmap_belt_bounty_hunter_01_02') + object.setIntAttribute('cat_stat_mod_bonus.@stat_n:agility_modified', 15) + object.setIntAttribute('cat_stat_mod_bonus.@stat_n:constitution_modified', 20) + object.setIntAttribute('cat_stat_mod_bonus.@stat_n:precision_modified', 15) + object.setStringAttribute('class_required', 'Bounty Hunter') + object.setIntAttribute('required_combat_level', 90) + return diff --git a/scripts/object/tangible/wearables/armor/zam/item_roadmap_belt_commando_01_02.py b/scripts/object/tangible/wearables/armor/zam/item_roadmap_belt_commando_01_02.py new file mode 100644 index 00000000..03d3b4ae --- /dev/null +++ b/scripts/object/tangible/wearables/armor/zam/item_roadmap_belt_commando_01_02.py @@ -0,0 +1,13 @@ +import sys + +def setup(core, object): + object.setStfFilename('static_item_n') + object.setStfName('item_roadmap_belt_commando_01_02') + object.setDetailFilename('static_item_d') + object.setDetailName('item_roadmap_belt_commando_01_02') + object.setIntAttribute('cat_stat_mod_bonus.@stat_n:agility_modified', 15) + object.setIntAttribute('cat_stat_mod_bonus.@stat_n:constitution_modified', 20) + object.setIntAttribute('cat_stat_mod_bonus.@stat_n:precision_modified', 15) + object.setStringAttribute('class_required', 'Commando') + object.setIntAttribute('required_combat_level', 90) + return diff --git a/scripts/object/tangible/wearables/armor/zam/item_roadmap_belt_force_sensitive_01_02.py b/scripts/object/tangible/wearables/armor/zam/item_roadmap_belt_force_sensitive_01_02.py new file mode 100644 index 00000000..e383382b --- /dev/null +++ b/scripts/object/tangible/wearables/armor/zam/item_roadmap_belt_force_sensitive_01_02.py @@ -0,0 +1,13 @@ +import sys + +def setup(core, object): + object.setStfFilename('static_item_n') + object.setStfName('item_roadmap_belt_force_sensitive_01_02') + object.setDetailFilename('static_item_d') + object.setDetailName('item_roadmap_belt_force_sensitive_01_02') + object.setIntAttribute('cat_stat_mod_bonus.@stat_n:agility_modified', 15) + object.setIntAttribute('cat_stat_mod_bonus.@stat_n:constitution_modified', 20) + object.setIntAttribute('cat_stat_mod_bonus.@stat_n:strength_modified', 15) + object.setStringAttribute('class_required', 'Jedi') + object.setIntAttribute('required_combat_level', 90) + return diff --git a/scripts/object/tangible/wearables/armor/zam/item_roadmap_belt_spy_01_02.py b/scripts/object/tangible/wearables/armor/zam/item_roadmap_belt_spy_01_02.py new file mode 100644 index 00000000..71012ad3 --- /dev/null +++ b/scripts/object/tangible/wearables/armor/zam/item_roadmap_belt_spy_01_02.py @@ -0,0 +1,13 @@ +import sys + +def setup(core, object): + object.setStfFilename('static_item_n') + object.setStfName('item_roadmap_belt_spy_01_02') + object.setDetailFilename('static_item_d') + object.setDetailName('item_roadmap_belt_spy_01_02') + object.setIntAttribute('cat_stat_mod_bonus.@stat_n:agility_modified', 15) + object.setIntAttribute('cat_stat_mod_bonus.@stat_n:constitution_modified', 20) + object.setIntAttribute('cat_stat_mod_bonus.@stat_n:precision_modified', 15) + object.setStringAttribute('class_required', 'Spy') + object.setIntAttribute('required_combat_level', 90) + return diff --git a/scripts/object/tangible/wearables/armor/zam/item_roadmap_belt_trader_01_02.py b/scripts/object/tangible/wearables/armor/zam/item_roadmap_belt_trader_01_02.py new file mode 100644 index 00000000..353407c0 --- /dev/null +++ b/scripts/object/tangible/wearables/armor/zam/item_roadmap_belt_trader_01_02.py @@ -0,0 +1,13 @@ +import sys + +def setup(core, object): + object.setStfFilename('static_item_n') + object.setStfName('item_roadmap_belt_trader_01_02') + object.setDetailFilename('static_item_d') + object.setDetailName('item_roadmap_belt_trader_01_02') + object.setIntAttribute('cat_stat_mod_bonus.@stat_n:agility_modified', 15) + object.setIntAttribute('cat_stat_mod_bonus.@stat_n:constitution_modified', 20) + object.setIntAttribute('cat_stat_mod_bonus.@stat_n:precision_modified', 15) + object.setStringAttribute('class_required', 'Trader') + object.setIntAttribute('required_combat_level', 90) + return \ No newline at end of file diff --git a/scripts/object/tangible/wearables/backpack/back_gmf_wings.py b/scripts/object/tangible/wearables/backpack/back_gmf_wings.py index ccad8904..b89922ca 100644 --- a/scripts/object/tangible/wearables/backpack/back_gmf_wings.py +++ b/scripts/object/tangible/wearables/backpack/back_gmf_wings.py @@ -1,4 +1,7 @@ import sys def setup(core, object): + object.setStringAttribute('condition', '100/100') + object.setIntAttribute('volume', 1) + return \ No newline at end of file diff --git a/scripts/object/tangible/wearables/backpack/back_love_day_10_blue_wings.py b/scripts/object/tangible/wearables/backpack/back_love_day_10_blue_wings.py index ccad8904..b89922ca 100644 --- a/scripts/object/tangible/wearables/backpack/back_love_day_10_blue_wings.py +++ b/scripts/object/tangible/wearables/backpack/back_love_day_10_blue_wings.py @@ -1,4 +1,7 @@ import sys def setup(core, object): + object.setStringAttribute('condition', '100/100') + object.setIntAttribute('volume', 1) + return \ No newline at end of file diff --git a/scripts/object/tangible/wearables/backpack/back_love_day_10_golden_wings.py b/scripts/object/tangible/wearables/backpack/back_love_day_10_golden_wings.py index ccad8904..b89922ca 100644 --- a/scripts/object/tangible/wearables/backpack/back_love_day_10_golden_wings.py +++ b/scripts/object/tangible/wearables/backpack/back_love_day_10_golden_wings.py @@ -1,4 +1,7 @@ import sys def setup(core, object): + object.setStringAttribute('condition', '100/100') + object.setIntAttribute('volume', 1) + return \ No newline at end of file diff --git a/scripts/object/tangible/wearables/backpack/back_love_day_10_pink_wings.py b/scripts/object/tangible/wearables/backpack/back_love_day_10_pink_wings.py index ccad8904..b89922ca 100644 --- a/scripts/object/tangible/wearables/backpack/back_love_day_10_pink_wings.py +++ b/scripts/object/tangible/wearables/backpack/back_love_day_10_pink_wings.py @@ -1,4 +1,7 @@ import sys def setup(core, object): + object.setStringAttribute('condition', '100/100') + object.setIntAttribute('volume', 1) + return \ No newline at end of file diff --git a/scripts/object/tangible/wearables/backpack/back_love_day_11_hue_wings.py b/scripts/object/tangible/wearables/backpack/back_love_day_11_hue_wings.py index ccad8904..b89922ca 100644 --- a/scripts/object/tangible/wearables/backpack/back_love_day_11_hue_wings.py +++ b/scripts/object/tangible/wearables/backpack/back_love_day_11_hue_wings.py @@ -1,4 +1,7 @@ import sys def setup(core, object): + object.setStringAttribute('condition', '100/100') + object.setIntAttribute('volume', 1) + return \ No newline at end of file diff --git a/scripts/object/tangible/wearables/backpack/back_love_day_wings.py b/scripts/object/tangible/wearables/backpack/back_love_day_wings.py index ccad8904..b89922ca 100644 --- a/scripts/object/tangible/wearables/backpack/back_love_day_wings.py +++ b/scripts/object/tangible/wearables/backpack/back_love_day_wings.py @@ -1,4 +1,7 @@ import sys def setup(core, object): + object.setStringAttribute('condition', '100/100') + object.setIntAttribute('volume', 1) + return \ No newline at end of file diff --git a/scripts/object/tangible/wearables/backpack/backpack_gmf_01.py b/scripts/object/tangible/wearables/backpack/backpack_gmf_01.py index ccad8904..b89922ca 100644 --- a/scripts/object/tangible/wearables/backpack/backpack_gmf_01.py +++ b/scripts/object/tangible/wearables/backpack/backpack_gmf_01.py @@ -1,4 +1,7 @@ import sys def setup(core, object): + object.setStringAttribute('condition', '100/100') + object.setIntAttribute('volume', 1) + return \ No newline at end of file diff --git a/scripts/object/tangible/wearables/backpack/empireday_rebel_endor_backpack.py b/scripts/object/tangible/wearables/backpack/empireday_rebel_endor_backpack.py index ccad8904..fa0152e7 100644 --- a/scripts/object/tangible/wearables/backpack/empireday_rebel_endor_backpack.py +++ b/scripts/object/tangible/wearables/backpack/empireday_rebel_endor_backpack.py @@ -1,4 +1,9 @@ import sys def setup(core, object): + object.setStringAttribute('condition', '100/100') + object.setIntAttribute('volume', 1) + object.setStringAttribute('cost', '[15] Remembrance Day Token') + object.setStringAttribute('faction_restriction', 'Rebel Alliance') + return \ No newline at end of file diff --git a/scripts/object/tangible/wearables/backpack/empireday_sandtrooper_backpack.py b/scripts/object/tangible/wearables/backpack/empireday_sandtrooper_backpack.py index ccad8904..c86c4ed5 100644 --- a/scripts/object/tangible/wearables/backpack/empireday_sandtrooper_backpack.py +++ b/scripts/object/tangible/wearables/backpack/empireday_sandtrooper_backpack.py @@ -1,4 +1,9 @@ import sys def setup(core, object): + object.setStringAttribute('condition', '100/100') + object.setIntAttribute('volume', 1) + object.setStringAttribute('cost', '[15] Empire Day Token') + object.setStringAttribute('faction_restriction', 'Imperial') + return \ No newline at end of file diff --git a/scripts/object/tangible/wearables/backpack/fannypack_s01.py b/scripts/object/tangible/wearables/backpack/fannypack_s01.py index ccad8904..b0e3e3ee 100644 --- a/scripts/object/tangible/wearables/backpack/fannypack_s01.py +++ b/scripts/object/tangible/wearables/backpack/fannypack_s01.py @@ -1,4 +1,16 @@ import sys def setup(core, object): + object.setStfFilename('static_item_n') + object.setStfName('item_fannypack_04_01') + object.setDetailFilename('static_item_d') + object.setDetailName('item_fannypack_04_01') + + object.setIntAttribute('cat_stat_mod_bonus.@stat_n:constitution_modified', 50) + object.setIntAttribute('cat_stat_mod_bonus.@stat_n:luck_modified', 50) + object.setIntAttribute('cat_stat_mod_bonus.@stat_n:precision_modified', 50) + object.setIntAttribute('cat_stat_mod_bonus.@stat_n:strength_modified', 50) + + object.setStringAttribute('@set_bonus:piece_bonus_count_2', '@set_bonus:set_bonus_jedi_robe_1') + object.setAttachment('setBonus', 'set_bonus_jedi_robe') return \ No newline at end of file diff --git a/scripts/object/tangible/wearables/backpack/item_bounty_hunter_backpack_01_02.py b/scripts/object/tangible/wearables/backpack/item_bounty_hunter_backpack_01_02.py new file mode 100644 index 00000000..b1bdc206 --- /dev/null +++ b/scripts/object/tangible/wearables/backpack/item_bounty_hunter_backpack_01_02.py @@ -0,0 +1,11 @@ +import sys + +def setup(core, object): + object.setStfFilename('static_item_n') + object.setStfName('item_bounty_hunter_backpack_01_02') + object.setDetailFilename('static_item_d') + object.setDetailName('item_bounty_hunter_backpack_01_02') + object.setIntAttribute('cat_stat_mod_bonus.@stat_n:agility_modified', 5) + object.setIntAttribute('cat_stat_mod_bonus.@stat_n:precision_modified', 5) + object.setStringAttribute('class_required', 'Bounty Hunter') + return diff --git a/scripts/object/tangible/wearables/backpack/item_commando_backpack_01_02.py b/scripts/object/tangible/wearables/backpack/item_commando_backpack_01_02.py new file mode 100644 index 00000000..ffc76111 --- /dev/null +++ b/scripts/object/tangible/wearables/backpack/item_commando_backpack_01_02.py @@ -0,0 +1,11 @@ +import sys + +def setup(core, object): + object.setStfFilename('static_item_n') + object.setStfName('item_commando_backpack_01_02') + object.setDetailFilename('static_item_d') + object.setDetailName('item_commando_backpack_01_02') + object.setIntAttribute('cat_stat_mod_bonus.@stat_n:agility_modified', 5) + object.setIntAttribute('cat_stat_mod_bonus.@stat_n:precision_modified', 5) + object.setStringAttribute('class_required', 'Commando') + return diff --git a/scripts/object/tangible/wearables/backpack/item_spy_backpack_01_02.py b/scripts/object/tangible/wearables/backpack/item_spy_backpack_01_02.py new file mode 100644 index 00000000..f6412dee --- /dev/null +++ b/scripts/object/tangible/wearables/backpack/item_spy_backpack_01_02.py @@ -0,0 +1,11 @@ +import sys + +def setup(core, object): + object.setStfFilename('static_item_n') + object.setStfName('item_spy_backpack_01_02') + object.setDetailFilename('static_item_d') + object.setDetailName('item_spy_backpack_01_02') + object.setIntAttribute('cat_stat_mod_bonus.@stat_n:agility_modified', 5) + object.setIntAttribute('cat_stat_mod_bonus.@stat_n:precision_modified', 5) + object.setStringAttribute('class_required', 'Spy') + return diff --git a/scripts/object/tangible/wearables/backpack/item_trader_backpack_01_02.py b/scripts/object/tangible/wearables/backpack/item_trader_backpack_01_02.py new file mode 100644 index 00000000..9eb23a37 --- /dev/null +++ b/scripts/object/tangible/wearables/backpack/item_trader_backpack_01_02.py @@ -0,0 +1,11 @@ +import sys + +def setup(core, object): + object.setStfFilename('static_item_n') + object.setStfName('item_trader_backpack_01_02') + object.setDetailFilename('static_item_d') + object.setDetailName('item_trader_backpack_01_02') + object.setIntAttribute('cat_stat_mod_bonus.@stat_n:expertise_assembly_increase_artisan', 5) + object.setIntAttribute('cat_stat_mod_bonus.@stat_n:hiring', 3) + object.setStringAttribute('class_required', 'Trader') + return diff --git a/scripts/object/tangible/wearables/bandolier/bandolier_tusken_raider_s01.py b/scripts/object/tangible/wearables/bandolier/bandolier_tusken_raider_s01.py index ccad8904..b89922ca 100644 --- a/scripts/object/tangible/wearables/bandolier/bandolier_tusken_raider_s01.py +++ b/scripts/object/tangible/wearables/bandolier/bandolier_tusken_raider_s01.py @@ -1,4 +1,7 @@ import sys def setup(core, object): + object.setStringAttribute('condition', '100/100') + object.setIntAttribute('volume', 1) + return \ No newline at end of file diff --git a/scripts/object/tangible/wearables/bandolier/bandolier_tusken_raider_s02.py b/scripts/object/tangible/wearables/bandolier/bandolier_tusken_raider_s02.py index ccad8904..b89922ca 100644 --- a/scripts/object/tangible/wearables/bandolier/bandolier_tusken_raider_s02.py +++ b/scripts/object/tangible/wearables/bandolier/bandolier_tusken_raider_s02.py @@ -1,4 +1,7 @@ import sys def setup(core, object): + object.setStringAttribute('condition', '100/100') + object.setIntAttribute('volume', 1) + return \ No newline at end of file diff --git a/scripts/object/tangible/wearables/bandolier/bandolier_tusken_raider_s03.py b/scripts/object/tangible/wearables/bandolier/bandolier_tusken_raider_s03.py index ccad8904..b89922ca 100644 --- a/scripts/object/tangible/wearables/bandolier/bandolier_tusken_raider_s03.py +++ b/scripts/object/tangible/wearables/bandolier/bandolier_tusken_raider_s03.py @@ -1,4 +1,7 @@ import sys def setup(core, object): + object.setStringAttribute('condition', '100/100') + object.setIntAttribute('volume', 1) + return \ No newline at end of file diff --git a/scripts/object/tangible/wearables/belt/appearance_invisible_s01.py b/scripts/object/tangible/wearables/belt/appearance_invisible_s01.py index ccad8904..b89922ca 100644 --- a/scripts/object/tangible/wearables/belt/appearance_invisible_s01.py +++ b/scripts/object/tangible/wearables/belt/appearance_invisible_s01.py @@ -1,4 +1,7 @@ import sys def setup(core, object): + object.setStringAttribute('condition', '100/100') + object.setIntAttribute('volume', 1) + return \ No newline at end of file diff --git a/scripts/object/tangible/wearables/belt/belt_whip_s01.py b/scripts/object/tangible/wearables/belt/belt_whip_s01.py index ccad8904..b89922ca 100644 --- a/scripts/object/tangible/wearables/belt/belt_whip_s01.py +++ b/scripts/object/tangible/wearables/belt/belt_whip_s01.py @@ -1,4 +1,7 @@ import sys def setup(core, object): + object.setStringAttribute('condition', '100/100') + object.setIntAttribute('volume', 1) + return \ No newline at end of file diff --git a/scripts/object/tangible/wearables/bodysuit/bodysuit_atat.py b/scripts/object/tangible/wearables/bodysuit/bodysuit_atat.py index ccad8904..b89922ca 100644 --- a/scripts/object/tangible/wearables/bodysuit/bodysuit_atat.py +++ b/scripts/object/tangible/wearables/bodysuit/bodysuit_atat.py @@ -1,4 +1,7 @@ import sys def setup(core, object): + object.setStringAttribute('condition', '100/100') + object.setIntAttribute('volume', 1) + return \ No newline at end of file diff --git a/scripts/object/tangible/wearables/bodysuit/bodysuit_atat_quest.py b/scripts/object/tangible/wearables/bodysuit/bodysuit_atat_quest.py index ccad8904..b89922ca 100644 --- a/scripts/object/tangible/wearables/bodysuit/bodysuit_atat_quest.py +++ b/scripts/object/tangible/wearables/bodysuit/bodysuit_atat_quest.py @@ -1,4 +1,7 @@ import sys def setup(core, object): + object.setStringAttribute('condition', '100/100') + object.setIntAttribute('volume', 1) + return \ No newline at end of file diff --git a/scripts/object/tangible/wearables/bodysuit/bodysuit_bwing.py b/scripts/object/tangible/wearables/bodysuit/bodysuit_bwing.py index ccad8904..b89922ca 100644 --- a/scripts/object/tangible/wearables/bodysuit/bodysuit_bwing.py +++ b/scripts/object/tangible/wearables/bodysuit/bodysuit_bwing.py @@ -1,4 +1,7 @@ import sys def setup(core, object): + object.setStringAttribute('condition', '100/100') + object.setIntAttribute('volume', 1) + return \ No newline at end of file diff --git a/scripts/object/tangible/wearables/bodysuit/bodysuit_bwing_quest.py b/scripts/object/tangible/wearables/bodysuit/bodysuit_bwing_quest.py index ccad8904..b89922ca 100644 --- a/scripts/object/tangible/wearables/bodysuit/bodysuit_bwing_quest.py +++ b/scripts/object/tangible/wearables/bodysuit/bodysuit_bwing_quest.py @@ -1,4 +1,7 @@ import sys def setup(core, object): + object.setStringAttribute('condition', '100/100') + object.setIntAttribute('volume', 1) + return \ No newline at end of file diff --git a/scripts/object/tangible/wearables/bodysuit/bodysuit_outbreak_prisoner.py b/scripts/object/tangible/wearables/bodysuit/bodysuit_outbreak_prisoner.py index ccad8904..b89922ca 100644 --- a/scripts/object/tangible/wearables/bodysuit/bodysuit_outbreak_prisoner.py +++ b/scripts/object/tangible/wearables/bodysuit/bodysuit_outbreak_prisoner.py @@ -1,4 +1,7 @@ import sys def setup(core, object): + object.setStringAttribute('condition', '100/100') + object.setIntAttribute('volume', 1) + return \ No newline at end of file diff --git a/scripts/object/tangible/wearables/bodysuit/bodysuit_tie_fighter.py b/scripts/object/tangible/wearables/bodysuit/bodysuit_tie_fighter.py index ccad8904..b89922ca 100644 --- a/scripts/object/tangible/wearables/bodysuit/bodysuit_tie_fighter.py +++ b/scripts/object/tangible/wearables/bodysuit/bodysuit_tie_fighter.py @@ -1,4 +1,7 @@ import sys def setup(core, object): + object.setStringAttribute('condition', '100/100') + object.setIntAttribute('volume', 1) + return \ No newline at end of file diff --git a/scripts/object/tangible/wearables/bodysuit/bodysuit_tie_fighter_quest.py b/scripts/object/tangible/wearables/bodysuit/bodysuit_tie_fighter_quest.py index ccad8904..b89922ca 100644 --- a/scripts/object/tangible/wearables/bodysuit/bodysuit_tie_fighter_quest.py +++ b/scripts/object/tangible/wearables/bodysuit/bodysuit_tie_fighter_quest.py @@ -1,4 +1,7 @@ import sys def setup(core, object): + object.setStringAttribute('condition', '100/100') + object.setIntAttribute('volume', 1) + return \ No newline at end of file diff --git a/scripts/object/tangible/wearables/bodysuit/item_trader_roadmap_jumpsuit_02_01.py b/scripts/object/tangible/wearables/bodysuit/item_trader_roadmap_jumpsuit_02_01.py new file mode 100644 index 00000000..7218be6d --- /dev/null +++ b/scripts/object/tangible/wearables/bodysuit/item_trader_roadmap_jumpsuit_02_01.py @@ -0,0 +1,12 @@ +import sys + +def setup(core, object): + object.setStfFilename('static_item_n') + object.setStfName('item_trader_roadmap_jumpsuit_02_01') + object.setDetailFilename('static_item_d') + object.setDetailName('item_trader_roadmap_jumpsuit_02_01') + object.setIntAttribute('cat_stat_mod_bonus.@stat_n:agility_modified', 2) + object.setIntAttribute('cat_stat_mod_bonus.@stat_n:constitution_modified', 1) + object.setStringAttribute('class_required', 'Trader') + object.setIntAttribute('required_combat_level', 30) + return \ No newline at end of file diff --git a/scripts/object/tangible/wearables/bodysuit/item_trader_roadmap_jumpsuit_02_02.py b/scripts/object/tangible/wearables/bodysuit/item_trader_roadmap_jumpsuit_02_02.py new file mode 100644 index 00000000..f10fbe79 --- /dev/null +++ b/scripts/object/tangible/wearables/bodysuit/item_trader_roadmap_jumpsuit_02_02.py @@ -0,0 +1,12 @@ +import sys + +def setup(core, object): + object.setStfFilename('static_item_n') + object.setStfName('item_trader_roadmap_jumpsuit_02_02') + object.setDetailFilename('static_item_d') + object.setDetailName('item_trader_roadmap_jumpsuit_02_02') + object.setIntAttribute('cat_stat_mod_bonus.@stat_n:agility_modified', 2) + object.setIntAttribute('cat_stat_mod_bonus.@stat_n:constitution_modified', 1) + object.setStringAttribute('class_required', 'Trader') + object.setIntAttribute('required_combat_level', 30) + return \ No newline at end of file diff --git a/scripts/object/tangible/wearables/boots/boots_tusken_raider.py b/scripts/object/tangible/wearables/boots/boots_tusken_raider.py index ccad8904..b89922ca 100644 --- a/scripts/object/tangible/wearables/boots/boots_tusken_raider.py +++ b/scripts/object/tangible/wearables/boots/boots_tusken_raider.py @@ -1,4 +1,7 @@ import sys def setup(core, object): + object.setStringAttribute('condition', '100/100') + object.setIntAttribute('volume', 1) + return \ No newline at end of file diff --git a/scripts/object/tangible/wearables/boots/item_smuggler_boots_02_01.py b/scripts/object/tangible/wearables/boots/item_smuggler_boots_02_01.py new file mode 100644 index 00000000..e589fa8e --- /dev/null +++ b/scripts/object/tangible/wearables/boots/item_smuggler_boots_02_01.py @@ -0,0 +1,10 @@ +import sys + +def setup(core, object): + object.setStfFilename('static_item_n') + object.setStfName('item_smuggler_boots_02_01') + object.setDetailFilename('static_item_d') + object.setDetailName('item_smuggler_boots_02_01') + object.setIntAttribute('cat_stat_mod_bonus.@stat_n:agility_modified', 3) + object.setStringAttribute('class_required', 'Smuggler') + return \ No newline at end of file diff --git a/scripts/object/tangible/wearables/boots/item_spy_boots_02_01.py b/scripts/object/tangible/wearables/boots/item_spy_boots_02_01.py new file mode 100644 index 00000000..caa1f917 --- /dev/null +++ b/scripts/object/tangible/wearables/boots/item_spy_boots_02_01.py @@ -0,0 +1,10 @@ +import sys + +def setup(core, object): + object.setStfFilename('static_item_n') + object.setStfName('item_spy_boots_02_01') + object.setDetailFilename('static_item_d') + object.setDetailName('item_spy_boots_02_01') + object.setIntAttribute('cat_stat_mod_bonus.@stat_n:agility_modified', 3) + object.setStringAttribute('class_required', 'Spy') + return \ No newline at end of file diff --git a/scripts/object/tangible/wearables/bracelet/appearance_invisible_l_s01.py b/scripts/object/tangible/wearables/bracelet/appearance_invisible_l_s01.py index ccad8904..b89922ca 100644 --- a/scripts/object/tangible/wearables/bracelet/appearance_invisible_l_s01.py +++ b/scripts/object/tangible/wearables/bracelet/appearance_invisible_l_s01.py @@ -1,4 +1,7 @@ import sys def setup(core, object): + object.setStringAttribute('condition', '100/100') + object.setIntAttribute('volume', 1) + return \ No newline at end of file diff --git a/scripts/object/tangible/wearables/bracelet/appearance_invisible_r_s01.py b/scripts/object/tangible/wearables/bracelet/appearance_invisible_r_s01.py index ccad8904..b89922ca 100644 --- a/scripts/object/tangible/wearables/bracelet/appearance_invisible_r_s01.py +++ b/scripts/object/tangible/wearables/bracelet/appearance_invisible_r_s01.py @@ -1,4 +1,7 @@ import sys def setup(core, object): + object.setStringAttribute('condition', '100/100') + object.setIntAttribute('volume', 1) + return \ No newline at end of file diff --git a/scripts/object/tangible/wearables/bracelet/item_bracelet_l_set_bh_dps_01_01.py b/scripts/object/tangible/wearables/bracelet/item_bracelet_l_set_bh_dps_01_01.py new file mode 100644 index 00000000..343e99a4 --- /dev/null +++ b/scripts/object/tangible/wearables/bracelet/item_bracelet_l_set_bh_dps_01_01.py @@ -0,0 +1,18 @@ +import sys + +def setup(core, object): + object.setStfFilename('static_item_n') + object.setStfName('item_bracelet_l_set_bh_dps_01_01') + object.setDetailFilename('static_item_d') + object.setDetailName('item_bracelet_l_set_bh_dps_01_01') + object.setIntAttribute('required_combat_level', 85) + object.setStringAttribute('class_required', 'Bounty Hunter') + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_action_line_dm', 1) + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_action_line_dm_crit', 1) + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_buff_duration_line_bh_return_fire', 1) + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_cooldown_line_dm', 1) + object.setStringAttribute('@set_bonus:piece_bonus_count_3', '@set_bonus:set_bonus_bh_dps_1') + object.setStringAttribute('@set_bonus:piece_bonus_count_4', '@set_bonus:set_bonus_bh_dps_2') + object.setStringAttribute('@set_bonus:piece_bonus_count_5', '@set_bonus:set_bonus_bh_dps_3) + object.setAttachment('setBonus', 'set_bonus_bh_dps') + return \ No newline at end of file diff --git a/scripts/object/tangible/wearables/bracelet/item_bracelet_l_set_bh_utility_a_01_01.py b/scripts/object/tangible/wearables/bracelet/item_bracelet_l_set_bh_utility_a_01_01.py new file mode 100644 index 00000000..71fae11c --- /dev/null +++ b/scripts/object/tangible/wearables/bracelet/item_bracelet_l_set_bh_utility_a_01_01.py @@ -0,0 +1,16 @@ +import sys + +def setup(core, object): + object.setStfFilename('static_item_n') + object.setStfName('item_bracelet_l_set_bh_utility_a_01_01') + object.setDetailFilename('static_item_d') + object.setDetailName('item_bracelet_l_set_bh_utility_a_01_01') + object.setStringAttribute('class_required', 'Bounty Hunter') + object.setIntAttribute('required_combat_level', 85) + object.setIntAttribute('cat_stat_mod_bonus.@stat_n:precision_modified', 50) + object.setIntAttribute('cat_stat_mod_bonus.@stat_n:luck_modified', 30) + object.setStringAttribute('@set_bonus:piece_bonus_count_3', '@set_bonus:set_bonus_bh_utility_a_1') + object.setStringAttribute('@set_bonus:piece_bonus_count_4', '@set_bonus:set_bonus_bh_utility_a_2') + object.setStringAttribute('@set_bonus:piece_bonus_count_5', '@set_bonus:set_bonus_bh_utility_a_3') + object.setAttachment('setBonus', 'set_bonus_bh_utility_a') + return \ No newline at end of file diff --git a/scripts/object/tangible/wearables/bracelet/item_bracelet_l_set_bh_utility_b_01_01.py b/scripts/object/tangible/wearables/bracelet/item_bracelet_l_set_bh_utility_b_01_01.py new file mode 100644 index 00000000..e8f8a7f1 --- /dev/null +++ b/scripts/object/tangible/wearables/bracelet/item_bracelet_l_set_bh_utility_b_01_01.py @@ -0,0 +1,17 @@ +import sys + +def setup(core, object): + object.setStfFilename('static_item_n') + object.setStfName('item_bracelet_l_set_bh_utility_b_01_01') + object.setDetailFilename('static_item_d') + object.setDetailName('item_bracelet_l_set_bh_utility_b_01_01') + object.setStringAttribute('class_required', 'Bounty Hunter') + object.setIntAttribute('required_combat_level', 85) + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:bh_dire_root', 1) + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:bh_dire_snare', 1) + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:fast_attack_line_dm_cc', 2) + object.setStringAttribute('@set_bonus:piece_bonus_count_3', '@set_bonus:set_bonus_bh_utility_b_1') + object.setStringAttribute('@set_bonus:piece_bonus_count_4', '@set_bonus:set_bonus_bh_utility_b_2') + object.setStringAttribute('@set_bonus:piece_bonus_count_5', '@set_bonus:set_bonus_bh_utility_b_3') + object.setAttachment('setBonus', 'set_bonus_bh_utility_b') + return \ No newline at end of file diff --git a/scripts/object/tangible/wearables/bracelet/item_bracelet_l_set_commando_dps_01_01.py b/scripts/object/tangible/wearables/bracelet/item_bracelet_l_set_commando_dps_01_01.py new file mode 100644 index 00000000..865e7b8c --- /dev/null +++ b/scripts/object/tangible/wearables/bracelet/item_bracelet_l_set_commando_dps_01_01.py @@ -0,0 +1,17 @@ +import sys + +def setup(core, object): + object.setStfFilename('static_item_n') + object.setStfName('item_bracelet_l_set_commando_dps_01_01') + object.setDetailFilename('static_item_d') + object.setDetailName('item_bracelet_l_set_commando_dps_01_01') + object.setIntAttribute('required_combat_level', 85) + object.setStringAttribute('class_required', 'Commando') + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:fast_attack_line_co_grenade', 2) + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_action_line_co_grenade', 3) + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_freeshot_co_grenade', 2) + object.setStringAttribute('@set_bonus:piece_bonus_count_3', '@set_bonus:set_bonus_commando_dps_1') + object.setStringAttribute('@set_bonus:piece_bonus_count_4', '@set_bonus:set_bonus_commando_dps_2') + object.setStringAttribute('@set_bonus:piece_bonus_count_5', '@set_bonus:set_bonus_commando_dps_3) + object.setAttachment('setBonus', 'set_bonus_commando_dps') + return \ No newline at end of file diff --git a/scripts/object/tangible/wearables/bracelet/item_bracelet_l_set_commando_utility_a_01_01.py b/scripts/object/tangible/wearables/bracelet/item_bracelet_l_set_commando_utility_a_01_01.py new file mode 100644 index 00000000..ea92c4c0 --- /dev/null +++ b/scripts/object/tangible/wearables/bracelet/item_bracelet_l_set_commando_utility_a_01_01.py @@ -0,0 +1,17 @@ +import sys + +def setup(core, object): + object.setStfFilename('static_item_n') + object.setStfName('item_bracelet_l_set_commando_utility_a_01_01') + object.setDetailFilename('static_item_d') + object.setDetailName('item_bracelet_l_set_commando_utility_a_01_01') + object.setIntAttribute('required_combat_level', 85) + object.setStringAttribute('class_required', 'Commando') + object.setIntAttribute('cat_stat_mod_bonus.@stat_n:constitution_modified', 20) + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_block_chance', 2) + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:combat_block_value', 50) + object.setStringAttribute('@set_bonus:piece_bonus_count_3', '@set_bonus:set_bonus_commando_utility_a_1') + object.setStringAttribute('@set_bonus:piece_bonus_count_4', '@set_bonus:set_bonus_commando_utility_a_2') + object.setStringAttribute('@set_bonus:piece_bonus_count_5', '@set_bonus:set_bonus_commando_utility_a_3') + object.setAttachment('setBonus', 'set_bonus_commando_utility_a') + return \ No newline at end of file diff --git a/scripts/object/tangible/wearables/bracelet/item_bracelet_l_set_commando_utility_b_01_01.py b/scripts/object/tangible/wearables/bracelet/item_bracelet_l_set_commando_utility_b_01_01.py new file mode 100644 index 00000000..e08558c2 --- /dev/null +++ b/scripts/object/tangible/wearables/bracelet/item_bracelet_l_set_commando_utility_b_01_01.py @@ -0,0 +1,17 @@ +import sys + +def setup(core, object): + object.setStfFilename('static_item_n') + object.setStfName('item_bracelet_l_set_commando_utility_b_01_01') + object.setDetailFilename('static_item_d') + object.setDetailName('item_bracelet_l_set_commando_utility_b_01_01') + object.setIntAttribute('required_combat_level', 85) + object.setStringAttribute('class_required', 'Commando') + object.setIntAttribute('cat_stat_mod_bonus.@stat_n:constitution_modified', 10) + object.setIntAttribute('cat_stat_mod_bonus.@stat_n:strength_modified', 15) + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_devastation_bonus', 5) + object.setStringAttribute('@set_bonus:piece_bonus_count_3', '@set_bonus:set_bonus_commando_utility_b_1') + object.setStringAttribute('@set_bonus:piece_bonus_count_4', '@set_bonus:set_bonus_commando_utility_b_2') + object.setStringAttribute('@set_bonus:piece_bonus_count_5', '@set_bonus:set_bonus_commando_utility_b_3') + object.setAttachment('setBonus', 'set_bonus_commando_utility_b') + return \ No newline at end of file diff --git a/scripts/object/tangible/wearables/bracelet/item_bracelet_l_set_ent_01_01.py b/scripts/object/tangible/wearables/bracelet/item_bracelet_l_set_ent_01_01.py new file mode 100644 index 00000000..e52b43b6 --- /dev/null +++ b/scripts/object/tangible/wearables/bracelet/item_bracelet_l_set_ent_01_01.py @@ -0,0 +1,16 @@ +import sys + +def setup(core, object): + object.setStfFilename('static_item_n') + object.setStfName('item_bracelet_l_set_ent_01_01') + object.setDetailFilename('static_item_d') + object.setDetailName('item_bracelet_l_set_ent_01_01') + object.setIntAttribute('required_combat_level', 85) + object.setStringAttribute('class_required', 'Entertainer') + object.setIntAttribute('cat_stat_mod_bonus.@stat_n:strength_modified', 30) + object.setIntAttribute('cat_stat_mod_bonus.@stat_n:agility_modified', 30) + object.setStringAttribute('@set_bonus:piece_bonus_count_3', '@set_bonus:set_bonus_ent_1') + object.setStringAttribute('@set_bonus:piece_bonus_count_4', '@set_bonus:set_bonus_ent_2') + object.setStringAttribute('@set_bonus:piece_bonus_count_5', '@set_bonus:set_bonus_ent_3') + object.setAttachment('setBonus', 'set_bonus_ent') + return \ No newline at end of file diff --git a/scripts/object/tangible/wearables/bracelet/item_bracelet_l_set_hero_01_01.py b/scripts/object/tangible/wearables/bracelet/item_bracelet_l_set_hero_01_01.py new file mode 100644 index 00000000..1a728832 --- /dev/null +++ b/scripts/object/tangible/wearables/bracelet/item_bracelet_l_set_hero_01_01.py @@ -0,0 +1,16 @@ +import sys + +def setup(core, object): + object.setStfFilename('static_item_n') + object.setStfName('item_bracelet_l_set_hero_01_01') + object.setDetailFilename('static_item_d') + object.setDetailName('item_bracelet_l_set_hero_01_01') + object.setIntAttribute('required_combat_level', 85) + object.setIntAttribute('cat_stat_mod_bonus.@stat_n:strength_modified', 30) + object.setIntAttribute('cat_stat_mod_bonus.@stat_n:precision_modified', 30) + object.setIntAttribute('cat_stat_mod_bonus.@stat_n:luck_modified', 30) + object.setStringAttribute('@set_bonus:piece_bonus_count_3', '@set_bonus:set_bonus_hero_1') + object.setStringAttribute('@set_bonus:piece_bonus_count_4', '@set_bonus:set_bonus_hero_2') + object.setStringAttribute('@set_bonus:piece_bonus_count_5', '@set_bonus:set_bonus_hero_3') + object.setAttachment('setBonus', 'set_bonus_hero') + return \ No newline at end of file diff --git a/scripts/object/tangible/wearables/bracelet/item_bracelet_l_set_jedi_dps_01_01.py b/scripts/object/tangible/wearables/bracelet/item_bracelet_l_set_jedi_dps_01_01.py new file mode 100644 index 00000000..924df8fa --- /dev/null +++ b/scripts/object/tangible/wearables/bracelet/item_bracelet_l_set_jedi_dps_01_01.py @@ -0,0 +1,18 @@ +import sys + +def setup(core, object): + object.setStfFilename('static_item_n') + object.setStfName('item_bracelet_l_set_jedi_dps_01_01') + object.setDetailFilename('static_item_d') + object.setDetailName('item_bracelet_l_set_jedi_dps_01_01') + object.setStringAttribute('class_required', 'Jedi') + object.setIntAttribute('required_combat_level', 85) + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_action_line_fs_dm', 2) + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_action_line_fs_sweep', 2) + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_cooldown_line_fs_dm', 3) + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_cooldown_line_fs_sweep', 3) + object.setStringAttribute('@set_bonus:piece_bonus_count_3', '@set_bonus:set_bonus_jedi_dps_1') + object.setStringAttribute('@set_bonus:piece_bonus_count_4', '@set_bonus:set_bonus_jedi_dps_2') + object.setStringAttribute('@set_bonus:piece_bonus_count_5', '@set_bonus:set_bonus_jedi_dps_3') + object.setAttachment('setBonus', 'set_bonus_jedi_dps') + return \ No newline at end of file diff --git a/scripts/object/tangible/wearables/bracelet/item_bracelet_l_set_jedi_utility_a_01_01.py b/scripts/object/tangible/wearables/bracelet/item_bracelet_l_set_jedi_utility_a_01_01.py new file mode 100644 index 00000000..96000158 --- /dev/null +++ b/scripts/object/tangible/wearables/bracelet/item_bracelet_l_set_jedi_utility_a_01_01.py @@ -0,0 +1,18 @@ +import sys + +def setup(core, object): + object.setStfFilename('static_item_n') + object.setStfName('item_bracelet_l_set_jedi_utility_a_01_01') + object.setDetailFilename('static_item_d') + object.setDetailName('item_bracelet_l_set_jedi_utility_a_01_01') + object.setStringAttribute('class_required', 'Jedi') + object.setIntAttribute('required_combat_level', 85) + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_action_line_fs_cc_crit', 2) + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_action_line_fs_ae_dm_cc', 2) + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_cooldown_line_fs_cc_crit', 3) + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_cooldown_line_fs_ae_dm_cc', 3) + object.setStringAttribute('@set_bonus:piece_bonus_count_3', '@set_bonus:set_jedi_utility_a_1') + object.setStringAttribute('@set_bonus:piece_bonus_count_4', '@set_bonus:set_jedi_utility_a_2') + object.setStringAttribute('@set_bonus:piece_bonus_count_5', '@set_bonus:set_jedi_utility_a_3') + object.setAttachment('setBonus', 'set_jedi_utility_a') + return \ No newline at end of file diff --git a/scripts/object/tangible/wearables/bracelet/item_bracelet_l_set_jedi_utility_b_01_01.py b/scripts/object/tangible/wearables/bracelet/item_bracelet_l_set_jedi_utility_b_01_01.py new file mode 100644 index 00000000..62f71073 --- /dev/null +++ b/scripts/object/tangible/wearables/bracelet/item_bracelet_l_set_jedi_utility_b_01_01.py @@ -0,0 +1,16 @@ +import sys + +def setup(core, object): + object.setStfFilename('static_item_n') + object.setStfName('item_bracelet_l_set_jedi_utility_b_01_01') + object.setDetailFilename('static_item_d') + object.setDetailName('item_bracelet_l_set_jedi_utility_b_01_01') + object.setStringAttribute('class_required', 'Jedi') + object.setIntAttribute('required_combat_level', 85) + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_glancing_blow_all', 1) + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_critical_hit_reduction', 1) + object.setStringAttribute('@set_bonus:piece_bonus_count_3', '@set_bonus:set_jedi_utility_b_1') + object.setStringAttribute('@set_bonus:piece_bonus_count_4', '@set_bonus:set_jedi_utility_b_2') + object.setStringAttribute('@set_bonus:piece_bonus_count_5', '@set_bonus:set_jedi_utility_b_3') + object.setAttachment('setBonus', 'set_jedi_utility_b') + return \ No newline at end of file diff --git a/scripts/object/tangible/wearables/bracelet/item_bracelet_l_set_medic_dps_01_01.py b/scripts/object/tangible/wearables/bracelet/item_bracelet_l_set_medic_dps_01_01.py new file mode 100644 index 00000000..829a3a86 --- /dev/null +++ b/scripts/object/tangible/wearables/bracelet/item_bracelet_l_set_medic_dps_01_01.py @@ -0,0 +1,19 @@ +import sys + +def setup(core, object): + object.setStfFilename('static_item_n') + object.setStfName('item_bracelet_l_set_medic_dps_01_01') + object.setDetailFilename('static_item_d') + object.setDetailName('item_bracelet_l_set_medic_dps_01_01') + object.setStringAttribute('class_required', 'Medic') + object.setIntAttribute('required_combat_level', 85) + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_action_line_me_burst', 2) + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_action_line_me_dm', 1) + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_action_line_me_smash', 2) + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_buff_duration_line_me_enhance', 360) + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:fast_attack_line_me_dm', 1) + object.setStringAttribute('@set_bonus:piece_bonus_count_3', '@set_bonus:set_bonus_medic_dps_1') + object.setStringAttribute('@set_bonus:piece_bonus_count_4', '@set_bonus:set_bonus_medic_dps_2') + object.setStringAttribute('@set_bonus:piece_bonus_count_5', '@set_bonus:set_bonus_medic_dps_3') + object.setAttachment('setBonus', 'set_bonus_medic_dps') + return \ No newline at end of file diff --git a/scripts/object/tangible/wearables/bracelet/item_bracelet_l_set_medic_utility_a_01_01.py b/scripts/object/tangible/wearables/bracelet/item_bracelet_l_set_medic_utility_a_01_01.py new file mode 100644 index 00000000..6407d2b8 --- /dev/null +++ b/scripts/object/tangible/wearables/bracelet/item_bracelet_l_set_medic_utility_a_01_01.py @@ -0,0 +1,18 @@ +import sys + +def setup(core, object): + object.setStfFilename('static_item_n') + object.setStfName('item_bracelet_l_set_medic_utility_a_01_01') + object.setDetailFilename('static_item_d') + object.setDetailName('item_bracelet_l_set_medic_utility_a_01_01') + object.setStringAttribute('class_required', 'Medic') + object.setIntAttribute('required_combat_level', 85) + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_cooldown_line_me_evasion', 6) + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_freeshot_me_heal', 1) + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:fast_attack_line_me_heal', 2) + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:fast_attack_line_me_revive', 1) + object.setStringAttribute('@set_bonus:piece_bonus_count_3', '@set_bonus:set_medic_utility_a_1') + object.setStringAttribute('@set_bonus:piece_bonus_count_4', '@set_bonus:set_medic_utility_a_2') + object.setStringAttribute('@set_bonus:piece_bonus_count_5', '@set_bonus:set_medic_utility_a_3') + object.setAttachment('setBonus', 'set_medic_utility_a') + return \ No newline at end of file diff --git a/scripts/object/tangible/wearables/bracelet/item_bracelet_l_set_medic_utility_b_01_01.py b/scripts/object/tangible/wearables/bracelet/item_bracelet_l_set_medic_utility_b_01_01.py new file mode 100644 index 00000000..6e87fa2f --- /dev/null +++ b/scripts/object/tangible/wearables/bracelet/item_bracelet_l_set_medic_utility_b_01_01.py @@ -0,0 +1,17 @@ +import sys + +def setup(core, object): + object.setStfFilename('static_item_n') + object.setStfName('item_bracelet_l_set_medic_utility_b_01_01') + object.setDetailFilename('static_item_d') + object.setDetailName('item_bracelet_l_set_medic_utility_b_01_01') + object.setStringAttribute('class_required', 'Medic') + object.setIntAttribute('required_combat_level', 85) + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_cooldown_line_me_dot', 2) + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_freeshot_me_debuff', 1) + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:fast_attack_line_me_debuff', 1) + object.setStringAttribute('@set_bonus:piece_bonus_count_3', '@set_bonus:set_medic_utility_b_1') + object.setStringAttribute('@set_bonus:piece_bonus_count_4', '@set_bonus:set_medic_utility_b_2') + object.setStringAttribute('@set_bonus:piece_bonus_count_5', '@set_bonus:set_medic_utility_b_3') + object.setAttachment('setBonus', 'set_medic_utility_b') + return \ No newline at end of file diff --git a/scripts/object/tangible/wearables/bracelet/item_bracelet_l_set_officer_dps_01_01.py b/scripts/object/tangible/wearables/bracelet/item_bracelet_l_set_officer_dps_01_01.py new file mode 100644 index 00000000..aefea5a2 --- /dev/null +++ b/scripts/object/tangible/wearables/bracelet/item_bracelet_l_set_officer_dps_01_01.py @@ -0,0 +1,19 @@ +import sys + +def setup(core, object): + object.setStfFilename('static_item_n') + object.setStfName('item_bracelet_l_set_officer_dps_01_01') + object.setDetailFilename('static_item_d') + object.setDetailName('item_bracelet_l_set_officer_dps_01_01') + object.setStringAttribute('class_required', 'Officer') + object.setIntAttribute('required_combat_level', 85) + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_action_line_of_paint', 1) + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_action_line_of_sure', 1) + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_cooldown_line_of_paint', 2) + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_cooldown_line_of_sure', 1) + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_freeshot_of_sure', 1) + object.setStringAttribute('@set_bonus:piece_bonus_count_3', '@set_bonus:set_bonus_officer_dps_1') + object.setStringAttribute('@set_bonus:piece_bonus_count_4', '@set_bonus:set_bonus_officer_dps_2') + object.setStringAttribute('@set_bonus:piece_bonus_count_5', '@set_bonus:set_bonus_officer_dps_3') + object.setAttachment('setBonus', 'set_bonus_officer_dps') + return \ No newline at end of file diff --git a/scripts/object/tangible/wearables/bracelet/item_bracelet_l_set_officer_utility_a_01_01.py b/scripts/object/tangible/wearables/bracelet/item_bracelet_l_set_officer_utility_a_01_01.py new file mode 100644 index 00000000..9240fd5d --- /dev/null +++ b/scripts/object/tangible/wearables/bracelet/item_bracelet_l_set_officer_utility_a_01_01.py @@ -0,0 +1,19 @@ +import sys + +def setup(core, object): + object.setStfFilename('static_item_n') + object.setStfName('item_bracelet_l_set_officer_utility_a_01_01') + object.setDetailFilename('static_item_d') + object.setDetailName('item_bracelet_l_set_officer_utility_a_01_01') + object.setStringAttribute('class_required', 'Officer') + object.setIntAttribute('required_combat_level', 85) + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:cooldown_percent_of_group_buff', 4) + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:fast_attack_line_of_heal', 1) + # object.setIntAttribute('cat_skill_mod_bonus.@stat_n:XXX', 1) Rallypoint Duration Increase / couldnt find the effect yet + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_action_line_of_group_buff', 2) + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_cooldown_line_of_purge', 3) + object.setStringAttribute('@set_bonus:piece_bonus_count_3', '@set_bonus:set_bonus_officer_utility_a_1') + object.setStringAttribute('@set_bonus:piece_bonus_count_4', '@set_bonus:set_bonus_officer_utility_a_2') + object.setStringAttribute('@set_bonus:piece_bonus_count_5', '@set_bonus:set_bonus_officer_utility_a_3') + object.setAttachment('setBonus', 'set_bonus_officer_utility_a') + return \ No newline at end of file diff --git a/scripts/object/tangible/wearables/bracelet/item_bracelet_l_set_officer_utility_b_01_01.py b/scripts/object/tangible/wearables/bracelet/item_bracelet_l_set_officer_utility_b_01_01.py new file mode 100644 index 00000000..a958daba --- /dev/null +++ b/scripts/object/tangible/wearables/bracelet/item_bracelet_l_set_officer_utility_b_01_01.py @@ -0,0 +1,16 @@ +import sys + +def setup(core, object): + object.setStfFilename('static_item_n') + object.setStfName('item_bracelet_l_set_officer_utility_b_01_01') + object.setDetailFilename('static_item_d') + object.setDetailName('item_bracelet_l_set_officer_utility_b_01_01') + object.setStringAttribute('class_required', 'Officer') + object.setIntAttribute('required_combat_level', 85) + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_action_line_of_aoe', 2) + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_freeshot_of_aoe', 2) + object.setStringAttribute('@set_bonus:piece_bonus_count_3', '@set_bonus:set_bonus_officer_utility_b_1') + object.setStringAttribute('@set_bonus:piece_bonus_count_4', '@set_bonus:set_bonus_officer_utility_b_2') + object.setStringAttribute('@set_bonus:piece_bonus_count_5', '@set_bonus:set_bonus_officer_utility_b_3') + object.setAttachment('setBonus', 'set_bonus_officer_utility_b') + return \ No newline at end of file diff --git a/scripts/object/tangible/wearables/bracelet/item_bracelet_l_set_smuggler_dps_01_01.py b/scripts/object/tangible/wearables/bracelet/item_bracelet_l_set_smuggler_dps_01_01.py new file mode 100644 index 00000000..dec2691f --- /dev/null +++ b/scripts/object/tangible/wearables/bracelet/item_bracelet_l_set_smuggler_dps_01_01.py @@ -0,0 +1,18 @@ +import sys + +def setup(core, object): + object.setStfFilename('static_item_n') + object.setStfName('item_bracelet_l_set_smuggler_dps_01_01') + object.setDetailFilename('static_item_d') + object.setDetailName('item_bracelet_l_set_smuggler_dps_01_01') + object.setStringAttribute('class_required', 'Smuggler') + object.setIntAttribute('required_combat_level', 85) + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_action_line_sm_dm', 2) + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:fast_attack_line_sm_dm', 1) + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_freeshot_sm_dm', 2) + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_cooldown_line_sm_dm', 2) + object.setStringAttribute('@set_bonus:piece_bonus_count_3', '@set_bonus:set_bonus_smuggler_dps_1') + object.setStringAttribute('@set_bonus:piece_bonus_count_4', '@set_bonus:set_bonus_smuggler_dps_2') + object.setStringAttribute('@set_bonus:piece_bonus_count_5', '@set_bonus:set_bonus_smuggler_dps_3') + object.setAttachment('setBonus', 'set_bonus_smuggler_dps') + return \ No newline at end of file diff --git a/scripts/object/tangible/wearables/bracelet/item_bracelet_l_set_smuggler_utility_a_01_01.py b/scripts/object/tangible/wearables/bracelet/item_bracelet_l_set_smuggler_utility_a_01_01.py new file mode 100644 index 00000000..f02cc54d --- /dev/null +++ b/scripts/object/tangible/wearables/bracelet/item_bracelet_l_set_smuggler_utility_a_01_01.py @@ -0,0 +1,18 @@ +import sys + +def setup(core, object): + object.setStfFilename('static_item_n') + object.setStfName('item_bracelet_l_set_smuggler_utility_a_01_01') + object.setDetailFilename('static_item_d') + object.setDetailName('item_bracelet_l_set_smuggler_utility_a_01_01') + object.setStringAttribute('class_required', 'Smuggler') + object.setIntAttribute('required_combat_level', 85) + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:bh_dire_snare', 7) + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_cooldown_line_sm_dm_cc', 1) + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_freeshot_sm_dm_cc', 2) + object.setIntAttribute('cat_stat_mod_bonus.@stat_n:luck_modified', 30) + object.setStringAttribute('@set_bonus:piece_bonus_count_3', '@set_bonus:set_smuggler_utility_a_1') + object.setStringAttribute('@set_bonus:piece_bonus_count_4', '@set_bonus:set_smuggler_utility_a_2') + object.setStringAttribute('@set_bonus:piece_bonus_count_5', '@set_bonus:set_smuggler_utility_a_3') + object.setAttachment('setBonus', 'set_smuggler_utility_a') + return \ No newline at end of file diff --git a/scripts/object/tangible/wearables/bracelet/item_bracelet_l_set_smuggler_utility_b_01_01.py b/scripts/object/tangible/wearables/bracelet/item_bracelet_l_set_smuggler_utility_b_01_01.py new file mode 100644 index 00000000..610fc4df --- /dev/null +++ b/scripts/object/tangible/wearables/bracelet/item_bracelet_l_set_smuggler_utility_b_01_01.py @@ -0,0 +1,16 @@ +import sys + +def setup(core, object): + object.setStfFilename('static_item_n') + object.setStfName('item_bracelet_l_set_smuggler_utility_b_01_01') + object.setDetailFilename('static_item_d') + object.setDetailName('item_bracelet_l_set_smuggler_utility_b_01_01') + object.setStringAttribute('class_required', 'Smuggler') + object.setIntAttribute('required_combat_level', 85) + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_cooldown_line_sm_false_hope', 2) + object.setIntAttribute('cat_stat_mod_bonus.@stat_n:luck_modified', 30) + object.setStringAttribute('@set_bonus:piece_bonus_count_3', '@set_bonus:set_smuggler_utility_b_1') + object.setStringAttribute('@set_bonus:piece_bonus_count_4', '@set_bonus:set_smuggler_utility_b_2') + object.setStringAttribute('@set_bonus:piece_bonus_count_5', '@set_bonus:set_smuggler_utility_b_3') + object.setAttachment('setBonus', 'set_smuggler_utility_b') + return \ No newline at end of file diff --git a/scripts/object/tangible/wearables/bracelet/item_bracelet_l_set_spy_dps_01_01.py b/scripts/object/tangible/wearables/bracelet/item_bracelet_l_set_spy_dps_01_01.py new file mode 100644 index 00000000..3a21b24f --- /dev/null +++ b/scripts/object/tangible/wearables/bracelet/item_bracelet_l_set_spy_dps_01_01.py @@ -0,0 +1,19 @@ +import sys + +def setup(core, object): + object.setStfFilename('static_item_n') + object.setStfName('item_bracelet_l_set_spy_dps_01_01') + object.setDetailFilename('static_item_d') + object.setDetailName('item_bracelet_l_set_spy_dps_01_01') + object.setIntAttribute('required_combat_level', 85) + object.setStringAttribute('class_required', 'Spy') + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_action_line_sp_dm', 2) + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_action_line_sp_dot', 2) + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_cooldown_line_sp_dm', 1) + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_freeshot_sp_dm', 1) + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:fast_attack_line_sp_dm', 2) + object.setStringAttribute('@set_bonus:piece_bonus_count_3', '@set_bonus:set_bonus_spy_dps_1') + object.setStringAttribute('@set_bonus:piece_bonus_count_4', '@set_bonus:set_bonus_spy_dps_2') + object.setStringAttribute('@set_bonus:piece_bonus_count_5', '@set_bonus:set_bonus_spy_dps_3') + object.setAttachment('setBonus', 'set_bonus_spy_dps') + return \ No newline at end of file diff --git a/scripts/object/tangible/wearables/bracelet/item_bracelet_l_set_spy_utility_a_01_01.py b/scripts/object/tangible/wearables/bracelet/item_bracelet_l_set_spy_utility_a_01_01.py new file mode 100644 index 00000000..024129b8 --- /dev/null +++ b/scripts/object/tangible/wearables/bracelet/item_bracelet_l_set_spy_utility_a_01_01.py @@ -0,0 +1,18 @@ +import sys + +def setup(core, object): + object.setStfFilename('static_item_n') + object.setStfName('item_bracelet_l_set_spy_utility_a_01_01') + object.setDetailFilename('static_item_d') + object.setDetailName('item_bracelet_l_set_spy_utility_a_01_01') + object.setIntAttribute('required_combat_level', 85) + object.setStringAttribute('class_required', 'Spy') + object.setIntAttribute('cat_stat_mod_bonus.@stat_n:strength_modified', 25) + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:fast_attack_line_sp_smoke', 1) + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_duration_line_sp_preparation', 1) + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_cooldown_line_sp_preparation', 6) + object.setStringAttribute('@set_bonus:piece_bonus_count_3', '@set_bonus:set_bonus_spy_utility_a_1') + object.setStringAttribute('@set_bonus:piece_bonus_count_4', '@set_bonus:set_bonus_spy_utility_a_2') + object.setStringAttribute('@set_bonus:piece_bonus_count_5', '@set_bonus:set_bonus_spy_utility_a_3') + object.setAttachment('setBonus', 'set_bonus_spy_utility_a') + return diff --git a/scripts/object/tangible/wearables/bracelet/item_bracelet_l_set_spy_utility_b_01_01.py b/scripts/object/tangible/wearables/bracelet/item_bracelet_l_set_spy_utility_b_01_01.py new file mode 100644 index 00000000..145ca895 --- /dev/null +++ b/scripts/object/tangible/wearables/bracelet/item_bracelet_l_set_spy_utility_b_01_01.py @@ -0,0 +1,17 @@ +import sys + +def setup(core, object): + object.setStfFilename('static_item_n') + object.setStfName('item_bracelet_l_set_spy_utility_b_01_01') + object.setDetailFilename('static_item_d') + object.setDetailName('item_bracelet_l_set_spy_utility_b_01_01') + object.setIntAttribute('required_combat_level', 85) + object.setStringAttribute('class_required', 'Spy') + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_strikethrough_chance', 2) + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_action_all', 1) + object.setIntAttribute('cat_stat_mod_bonus.@stat_n:luck_modified', 50) + object.setStringAttribute('@set_bonus:piece_bonus_count_3', '@set_bonus:set_bonus_spy_utility_b_1') + object.setStringAttribute('@set_bonus:piece_bonus_count_4', '@set_bonus:set_bonus_spy_utility_b_2') + object.setStringAttribute('@set_bonus:piece_bonus_count_5', '@set_bonus:set_bonus_spy_utility_b_3') + object.setAttachment('setBonus', 'set_bonus_spy_utility_b') + return \ No newline at end of file diff --git a/scripts/object/tangible/wearables/bracelet/item_bracelet_r_set_bh_dps_01_01.py b/scripts/object/tangible/wearables/bracelet/item_bracelet_r_set_bh_dps_01_01.py new file mode 100644 index 00000000..08a7a2d6 --- /dev/null +++ b/scripts/object/tangible/wearables/bracelet/item_bracelet_r_set_bh_dps_01_01.py @@ -0,0 +1,18 @@ +import sys + +def setup(core, object): + object.setStfFilename('static_item_n') + object.setStfName('item_bracelet_r_set_bh_dps_01_01') + object.setDetailFilename('static_item_d') + object.setDetailName('item_bracelet_r_set_bh_dps_01_01') + object.setIntAttribute('required_combat_level', 85) + object.setStringAttribute('class_required', 'Bounty Hunter') + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_action_line_dm', 1) + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_action_line_dm_crit', 1) + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_buff_duration_line_bh_return_fire', 1) + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_cooldown_line_dm', 1) + object.setStringAttribute('@set_bonus:piece_bonus_count_3', '@set_bonus:set_bonus_bh_dps_1') + object.setStringAttribute('@set_bonus:piece_bonus_count_4', '@set_bonus:set_bonus_bh_dps_2') + object.setStringAttribute('@set_bonus:piece_bonus_count_5', '@set_bonus:set_bonus_bh_dps_3) + object.setAttachment('setBonus', 'set_bonus_bh_dps') + return \ No newline at end of file diff --git a/scripts/object/tangible/wearables/bracelet/item_bracelet_r_set_bh_utility_a_01_01.py b/scripts/object/tangible/wearables/bracelet/item_bracelet_r_set_bh_utility_a_01_01.py new file mode 100644 index 00000000..b44a772a --- /dev/null +++ b/scripts/object/tangible/wearables/bracelet/item_bracelet_r_set_bh_utility_a_01_01.py @@ -0,0 +1,16 @@ +import sys + +def setup(core, object): + object.setStfFilename('static_item_n') + object.setStfName('item_bracelet_r_set_bh_utility_a_01_01') + object.setDetailFilename('static_item_d') + object.setDetailName('item_bracelet_r_set_bh_utility_a_01_01') + object.setStringAttribute('class_required', 'Bounty Hunter') + object.setIntAttribute('required_combat_level', 85) + object.setIntAttribute('cat_stat_mod_bonus.@stat_n:precision_modified', 50) + object.setIntAttribute('cat_stat_mod_bonus.@stat_n:luck_modified', 30) + object.setStringAttribute('@set_bonus:piece_bonus_count_3', '@set_bonus:set_bonus_bh_utility_a_1') + object.setStringAttribute('@set_bonus:piece_bonus_count_4', '@set_bonus:set_bonus_bh_utility_a_2') + object.setStringAttribute('@set_bonus:piece_bonus_count_5', '@set_bonus:set_bonus_bh_utility_a_3') + object.setAttachment('setBonus', 'set_bonus_bh_utility_a') + return \ No newline at end of file diff --git a/scripts/object/tangible/wearables/bracelet/item_bracelet_r_set_bh_utility_b_01_01.py b/scripts/object/tangible/wearables/bracelet/item_bracelet_r_set_bh_utility_b_01_01.py new file mode 100644 index 00000000..9ea3acf4 --- /dev/null +++ b/scripts/object/tangible/wearables/bracelet/item_bracelet_r_set_bh_utility_b_01_01.py @@ -0,0 +1,17 @@ +import sys + +def setup(core, object): + object.setStfFilename('static_item_n') + object.setStfName('item_bracelet_r_set_bh_utility_b_01_01') + object.setDetailFilename('static_item_d') + object.setDetailName('item_bracelet_r_set_bh_utility_b_01_01') + object.setStringAttribute('class_required', 'Bounty Hunter') + object.setIntAttribute('required_combat_level', 85) + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:bh_dire_root', 1) + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:bh_dire_snare', 1) + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:fast_attack_line_dm_cc', 2) + object.setStringAttribute('@set_bonus:piece_bonus_count_3', '@set_bonus:set_bonus_bh_utility_b_1') + object.setStringAttribute('@set_bonus:piece_bonus_count_4', '@set_bonus:set_bonus_bh_utility_b_2') + object.setStringAttribute('@set_bonus:piece_bonus_count_5', '@set_bonus:set_bonus_bh_utility_b_3') + object.setAttachment('setBonus', 'set_bonus_bh_utility_b') + return \ No newline at end of file diff --git a/scripts/object/tangible/wearables/bracelet/item_bracelet_r_set_commando_dps_01_01.py b/scripts/object/tangible/wearables/bracelet/item_bracelet_r_set_commando_dps_01_01.py new file mode 100644 index 00000000..7d8383e4 --- /dev/null +++ b/scripts/object/tangible/wearables/bracelet/item_bracelet_r_set_commando_dps_01_01.py @@ -0,0 +1,17 @@ +import sys + +def setup(core, object): + object.setStfFilename('static_item_n') + object.setStfName('item_bracelet_r_set_commando_dps_01_01') + object.setDetailFilename('static_item_d') + object.setDetailName('item_bracelet_r_set_commando_dps_01_01') + object.setIntAttribute('required_combat_level', 85) + object.setStringAttribute('class_required', 'Commando') + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:fast_attack_line_co_grenade', 2) + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_action_line_co_grenade', 3) + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_freeshot_co_grenade', 2) + object.setStringAttribute('@set_bonus:piece_bonus_count_3', '@set_bonus:set_bonus_commando_dps_1') + object.setStringAttribute('@set_bonus:piece_bonus_count_4', '@set_bonus:set_bonus_commando_dps_2') + object.setStringAttribute('@set_bonus:piece_bonus_count_5', '@set_bonus:set_bonus_commando_dps_3) + object.setAttachment('setBonus', 'set_bonus_commando_dps') + return \ No newline at end of file diff --git a/scripts/object/tangible/wearables/bracelet/item_bracelet_r_set_commando_utility_a_01_01.py b/scripts/object/tangible/wearables/bracelet/item_bracelet_r_set_commando_utility_a_01_01.py new file mode 100644 index 00000000..73afd03f --- /dev/null +++ b/scripts/object/tangible/wearables/bracelet/item_bracelet_r_set_commando_utility_a_01_01.py @@ -0,0 +1,17 @@ +import sys + +def setup(core, object): + object.setStfFilename('static_item_n') + object.setStfName('item_bracelet_r_set_commando_utility_a_01_01') + object.setDetailFilename('static_item_d') + object.setDetailName('item_bracelet_r_set_commando_utility_a_01_01') + object.setIntAttribute('required_combat_level', 85) + object.setStringAttribute('class_required', 'Commando') + object.setIntAttribute('cat_stat_mod_bonus.@stat_n:constitution_modified', 20) + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_block_chance', 2) + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:combat_block_value', 50) + object.setStringAttribute('@set_bonus:piece_bonus_count_3', '@set_bonus:set_bonus_commando_utility_a_1') + object.setStringAttribute('@set_bonus:piece_bonus_count_4', '@set_bonus:set_bonus_commando_utility_a_2') + object.setStringAttribute('@set_bonus:piece_bonus_count_5', '@set_bonus:set_bonus_commando_utility_a_3') + object.setAttachment('setBonus', 'set_bonus_commando_utility_a') + return \ No newline at end of file diff --git a/scripts/object/tangible/wearables/bracelet/item_bracelet_r_set_commando_utility_b_01_01.py b/scripts/object/tangible/wearables/bracelet/item_bracelet_r_set_commando_utility_b_01_01.py new file mode 100644 index 00000000..8a69bb24 --- /dev/null +++ b/scripts/object/tangible/wearables/bracelet/item_bracelet_r_set_commando_utility_b_01_01.py @@ -0,0 +1,17 @@ +import sys + +def setup(core, object): + object.setStfFilename('static_item_n') + object.setStfName('item_bracelet_r_set_commando_utility_b_01_01') + object.setDetailFilename('static_item_d') + object.setDetailName('item_bracelet_r_set_commando_utility_b_01_01') + object.setIntAttribute('required_combat_level', 85) + object.setStringAttribute('class_required', 'Commando') + object.setIntAttribute('cat_stat_mod_bonus.@stat_n:constitution_modified', 10) + object.setIntAttribute('cat_stat_mod_bonus.@stat_n:strength_modified', 15) + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_devastation_bonus', 5) + object.setStringAttribute('@set_bonus:piece_bonus_count_3', '@set_bonus:set_bonus_commando_utility_b_1') + object.setStringAttribute('@set_bonus:piece_bonus_count_4', '@set_bonus:set_bonus_commando_utility_b_2') + object.setStringAttribute('@set_bonus:piece_bonus_count_5', '@set_bonus:set_bonus_commando_utility_b_3') + object.setAttachment('setBonus', 'set_bonus_commando_utility_b') + return \ No newline at end of file diff --git a/scripts/object/tangible/wearables/bracelet/item_bracelet_r_set_ent_01_01.py b/scripts/object/tangible/wearables/bracelet/item_bracelet_r_set_ent_01_01.py new file mode 100644 index 00000000..11b9a215 --- /dev/null +++ b/scripts/object/tangible/wearables/bracelet/item_bracelet_r_set_ent_01_01.py @@ -0,0 +1,16 @@ +import sys + +def setup(core, object): + object.setStfFilename('static_item_n') + object.setStfName('item_bracelet_r_set_ent_01_01') + object.setDetailFilename('static_item_d') + object.setDetailName('item_bracelet_r_set_ent_01_01') + object.setIntAttribute('required_combat_level', 85) + object.setStringAttribute('class_required', 'Entertainer') + object.setIntAttribute('cat_stat_mod_bonus.@stat_n:strength_modified', 30) + object.setIntAttribute('cat_stat_mod_bonus.@stat_n:agility_modified', 30) + object.setStringAttribute('@set_bonus:piece_bonus_count_3', '@set_bonus:set_bonus_ent_1') + object.setStringAttribute('@set_bonus:piece_bonus_count_4', '@set_bonus:set_bonus_ent_2') + object.setStringAttribute('@set_bonus:piece_bonus_count_5', '@set_bonus:set_bonus_ent_3') + object.setAttachment('setBonus', 'set_bonus_ent') + return \ No newline at end of file diff --git a/scripts/object/tangible/wearables/bracelet/item_bracelet_r_set_hero_01_01.py b/scripts/object/tangible/wearables/bracelet/item_bracelet_r_set_hero_01_01.py new file mode 100644 index 00000000..5a370ad7 --- /dev/null +++ b/scripts/object/tangible/wearables/bracelet/item_bracelet_r_set_hero_01_01.py @@ -0,0 +1,16 @@ +import sys + +def setup(core, object): + object.setStfFilename('static_item_n') + object.setStfName('item_bracelet_r_set_hero_01_01') + object.setDetailFilename('static_item_d') + object.setDetailName('item_bracelet_r_set_hero_01_01') + object.setIntAttribute('required_combat_level', 85) + object.setIntAttribute('cat_stat_mod_bonus.@stat_n:strength_modified', 30) + object.setIntAttribute('cat_stat_mod_bonus.@stat_n:precision_modified', 30) + object.setIntAttribute('cat_stat_mod_bonus.@stat_n:luck_modified', 30) + object.setStringAttribute('@set_bonus:piece_bonus_count_3', '@set_bonus:set_bonus_hero_1') + object.setStringAttribute('@set_bonus:piece_bonus_count_4', '@set_bonus:set_bonus_hero_2') + object.setStringAttribute('@set_bonus:piece_bonus_count_5', '@set_bonus:set_bonus_hero_3') + object.setAttachment('setBonus', 'set_bonus_hero') + return \ No newline at end of file diff --git a/scripts/object/tangible/wearables/bracelet/item_bracelet_r_set_jedi_dps_01_01.py b/scripts/object/tangible/wearables/bracelet/item_bracelet_r_set_jedi_dps_01_01.py new file mode 100644 index 00000000..8cae3f65 --- /dev/null +++ b/scripts/object/tangible/wearables/bracelet/item_bracelet_r_set_jedi_dps_01_01.py @@ -0,0 +1,18 @@ +import sys + +def setup(core, object): + object.setStfFilename('static_item_n') + object.setStfName('item_bracelet_r_set_jedi_dps_01_01') + object.setDetailFilename('static_item_d') + object.setDetailName('item_bracelet_r_set_jedi_dps_01_01') + object.setStringAttribute('class_required', 'Jedi') + object.setIntAttribute('required_combat_level', 85) + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_action_line_fs_dm', 2) + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_action_line_fs_sweep', 2) + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_cooldown_line_fs_dm', 3) + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_cooldown_line_fs_sweep', 3) + object.setStringAttribute('@set_bonus:piece_bonus_count_3', '@set_bonus:set_bonus_jedi_dps_1') + object.setStringAttribute('@set_bonus:piece_bonus_count_4', '@set_bonus:set_bonus_jedi_dps_2') + object.setStringAttribute('@set_bonus:piece_bonus_count_5', '@set_bonus:set_bonus_jedi_dps_3') + object.setAttachment('setBonus', 'set_bonus_jedi_dps') + return \ No newline at end of file diff --git a/scripts/object/tangible/wearables/bracelet/item_bracelet_r_set_jedi_utility_a_01_01.py b/scripts/object/tangible/wearables/bracelet/item_bracelet_r_set_jedi_utility_a_01_01.py new file mode 100644 index 00000000..9dda97ca --- /dev/null +++ b/scripts/object/tangible/wearables/bracelet/item_bracelet_r_set_jedi_utility_a_01_01.py @@ -0,0 +1,18 @@ +import sys + +def setup(core, object): + object.setStfFilename('static_item_n') + object.setStfName('item_bracelet_r_set_jedi_utility_a_01_01') + object.setDetailFilename('static_item_d') + object.setDetailName('item_bracelet_r_set_jedi_utility_a_01_01') + object.setStringAttribute('class_required', 'Jedi') + object.setIntAttribute('required_combat_level', 85) + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_action_line_fs_cc_crit', 2) + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_action_line_fs_ae_dm_cc', 2) + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_cooldown_line_fs_cc_crit', 3) + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_cooldown_line_fs_ae_dm_cc', 3) + object.setStringAttribute('@set_bonus:piece_bonus_count_3', '@set_bonus:set_jedi_utility_a_1') + object.setStringAttribute('@set_bonus:piece_bonus_count_4', '@set_bonus:set_jedi_utility_a_2') + object.setStringAttribute('@set_bonus:piece_bonus_count_5', '@set_bonus:set_jedi_utility_a_3') + object.setAttachment('setBonus', 'set_jedi_utility_a') + return \ No newline at end of file diff --git a/scripts/object/tangible/wearables/bracelet/item_bracelet_r_set_jedi_utility_b_01_01.py b/scripts/object/tangible/wearables/bracelet/item_bracelet_r_set_jedi_utility_b_01_01.py new file mode 100644 index 00000000..db66599a --- /dev/null +++ b/scripts/object/tangible/wearables/bracelet/item_bracelet_r_set_jedi_utility_b_01_01.py @@ -0,0 +1,16 @@ +import sys + +def setup(core, object): + object.setStfFilename('static_item_n') + object.setStfName('item_bracelet_r_set_jedi_utility_b_01_01') + object.setDetailFilename('static_item_d') + object.setDetailName('item_bracelet_r_set_jedi_utility_b_01_01') + object.setStringAttribute('class_required', 'Jedi') + object.setIntAttribute('required_combat_level', 85) + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_glancing_blow_all', 1) + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_critical_hit_reduction', 1) + object.setStringAttribute('@set_bonus:piece_bonus_count_3', '@set_bonus:set_jedi_utility_b_1') + object.setStringAttribute('@set_bonus:piece_bonus_count_4', '@set_bonus:set_jedi_utility_b_2') + object.setStringAttribute('@set_bonus:piece_bonus_count_5', '@set_bonus:set_jedi_utility_b_3') + object.setAttachment('setBonus', 'set_jedi_utility_b') + return \ No newline at end of file diff --git a/scripts/object/tangible/wearables/bracelet/item_bracelet_r_set_medic_dps_01_01.py b/scripts/object/tangible/wearables/bracelet/item_bracelet_r_set_medic_dps_01_01.py new file mode 100644 index 00000000..7a77ab9b --- /dev/null +++ b/scripts/object/tangible/wearables/bracelet/item_bracelet_r_set_medic_dps_01_01.py @@ -0,0 +1,19 @@ +import sys + +def setup(core, object): + object.setStfFilename('static_item_n') + object.setStfName('item_bracelet_r_set_medic_dps_01_01') + object.setDetailFilename('static_item_d') + object.setDetailName('item_bracelet_r_set_medic_dps_01_01') + object.setStringAttribute('class_required', 'Medic') + object.setIntAttribute('required_combat_level', 85) + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_action_line_me_burst', 2) + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_action_line_me_dm', 1) + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_action_line_me_smash', 2) + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_buff_duration_line_me_enhance', 360) + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:fast_attack_line_me_dm', 1) + object.setStringAttribute('@set_bonus:piece_bonus_count_3', '@set_bonus:set_bonus_medic_dps_1') + object.setStringAttribute('@set_bonus:piece_bonus_count_4', '@set_bonus:set_bonus_medic_dps_2') + object.setStringAttribute('@set_bonus:piece_bonus_count_5', '@set_bonus:set_bonus_medic_dps_3') + object.setAttachment('setBonus', 'set_bonus_medic_dps') + return \ No newline at end of file diff --git a/scripts/object/tangible/wearables/bracelet/item_bracelet_r_set_medic_utility_a_01_01.py b/scripts/object/tangible/wearables/bracelet/item_bracelet_r_set_medic_utility_a_01_01.py new file mode 100644 index 00000000..9b293184 --- /dev/null +++ b/scripts/object/tangible/wearables/bracelet/item_bracelet_r_set_medic_utility_a_01_01.py @@ -0,0 +1,18 @@ +import sys + +def setup(core, object): + object.setStfFilename('static_item_n') + object.setStfName('item_bracelet_r_set_medic_utility_a_01_01') + object.setDetailFilename('static_item_d') + object.setDetailName('item_bracelet_r_set_medic_utility_a_01_01') + object.setStringAttribute('class_required', 'Medic') + object.setIntAttribute('required_combat_level', 85) + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_cooldown_line_me_evasion', 6) + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_freeshot_me_heal', 1) + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:fast_attack_line_me_heal', 2) + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:fast_attack_line_me_revive', 1) + object.setStringAttribute('@set_bonus:piece_bonus_count_3', '@set_bonus:set_medic_utility_a_1') + object.setStringAttribute('@set_bonus:piece_bonus_count_4', '@set_bonus:set_medic_utility_a_2') + object.setStringAttribute('@set_bonus:piece_bonus_count_5', '@set_bonus:set_medic_utility_a_3') + object.setAttachment('setBonus', 'set_medic_utility_a') + return \ No newline at end of file diff --git a/scripts/object/tangible/wearables/bracelet/item_bracelet_r_set_medic_utility_b_01_01.py b/scripts/object/tangible/wearables/bracelet/item_bracelet_r_set_medic_utility_b_01_01.py new file mode 100644 index 00000000..40149c33 --- /dev/null +++ b/scripts/object/tangible/wearables/bracelet/item_bracelet_r_set_medic_utility_b_01_01.py @@ -0,0 +1,17 @@ +import sys + +def setup(core, object): + object.setStfFilename('static_item_n') + object.setStfName('item_bracelet_r_set_medic_utility_b_01_01') + object.setDetailFilename('static_item_d') + object.setDetailName('item_bracelet_r_set_medic_utility_b_01_01') + object.setStringAttribute('class_required', 'Medic') + object.setIntAttribute('required_combat_level', 85) + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_cooldown_line_me_dot', 2) + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_freeshot_me_debuff', 1) + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:fast_attack_line_me_debuff', 1) + object.setStringAttribute('@set_bonus:piece_bonus_count_3', '@set_bonus:set_medic_utility_b_1') + object.setStringAttribute('@set_bonus:piece_bonus_count_4', '@set_bonus:set_medic_utility_b_2') + object.setStringAttribute('@set_bonus:piece_bonus_count_5', '@set_bonus:set_medic_utility_b_3') + object.setAttachment('setBonus', 'set_medic_utility_b') + return \ No newline at end of file diff --git a/scripts/object/tangible/wearables/bracelet/item_bracelet_r_set_officer_dps_01_01.py b/scripts/object/tangible/wearables/bracelet/item_bracelet_r_set_officer_dps_01_01.py new file mode 100644 index 00000000..21e5d96b --- /dev/null +++ b/scripts/object/tangible/wearables/bracelet/item_bracelet_r_set_officer_dps_01_01.py @@ -0,0 +1,19 @@ +import sys + +def setup(core, object): + object.setStfFilename('static_item_n') + object.setStfName('item_bracelet_r_set_officer_dps_01_01') + object.setDetailFilename('static_item_d') + object.setDetailName('item_bracelet_r_set_officer_dps_01_01') + object.setStringAttribute('class_required', 'Officer') + object.setIntAttribute('required_combat_level', 85) + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_action_line_of_paint', 1) + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_action_line_of_sure', 1) + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_cooldown_line_of_paint', 2) + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_cooldown_line_of_sure', 1) + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_freeshot_of_sure', 1) + object.setStringAttribute('@set_bonus:piece_bonus_count_3', '@set_bonus:set_bonus_officer_dps_1') + object.setStringAttribute('@set_bonus:piece_bonus_count_4', '@set_bonus:set_bonus_officer_dps_2') + object.setStringAttribute('@set_bonus:piece_bonus_count_5', '@set_bonus:set_bonus_officer_dps_3') + object.setAttachment('setBonus', 'set_bonus_officer_dps') + return \ No newline at end of file diff --git a/scripts/object/tangible/wearables/bracelet/item_bracelet_r_set_officer_utility_a_01_01.py b/scripts/object/tangible/wearables/bracelet/item_bracelet_r_set_officer_utility_a_01_01.py new file mode 100644 index 00000000..7b95ebd9 --- /dev/null +++ b/scripts/object/tangible/wearables/bracelet/item_bracelet_r_set_officer_utility_a_01_01.py @@ -0,0 +1,19 @@ +import sys + +def setup(core, object): + object.setStfFilename('static_item_n') + object.setStfName('item_bracelet_r_set_officer_utility_a_01_01') + object.setDetailFilename('static_item_d') + object.setDetailName('item_bracelet_r_set_officer_utility_a_01_01') + object.setStringAttribute('class_required', 'Officer') + object.setIntAttribute('required_combat_level', 85) + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:cooldown_percent_of_group_buff', 4) + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:fast_attack_line_of_heal', 1) + # object.setIntAttribute('cat_skill_mod_bonus.@stat_n:XXX', 1) Rallypoint Duration Increase / couldnt find the effect yet + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_action_line_of_group_buff', 2) + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_cooldown_line_of_purge', 3) + object.setStringAttribute('@set_bonus:piece_bonus_count_3', '@set_bonus:set_bonus_officer_utility_a_1') + object.setStringAttribute('@set_bonus:piece_bonus_count_4', '@set_bonus:set_bonus_officer_utility_a_2') + object.setStringAttribute('@set_bonus:piece_bonus_count_5', '@set_bonus:set_bonus_officer_utility_a_3') + object.setAttachment('setBonus', 'set_bonus_officer_utility_a') + return \ No newline at end of file diff --git a/scripts/object/tangible/wearables/bracelet/item_bracelet_r_set_officer_utility_b_01_01.py b/scripts/object/tangible/wearables/bracelet/item_bracelet_r_set_officer_utility_b_01_01.py new file mode 100644 index 00000000..bb55fb6c --- /dev/null +++ b/scripts/object/tangible/wearables/bracelet/item_bracelet_r_set_officer_utility_b_01_01.py @@ -0,0 +1,16 @@ +import sys + +def setup(core, object): + object.setStfFilename('static_item_n') + object.setStfName('item_bracelet_r_set_officer_utility_b_01_01') + object.setDetailFilename('static_item_d') + object.setDetailName('item_bracelet_r_set_officer_utility_b_01_01') + object.setStringAttribute('class_required', 'Officer') + object.setIntAttribute('required_combat_level', 85) + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_action_line_of_aoe', 2) + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_freeshot_of_aoe', 2) + object.setStringAttribute('@set_bonus:piece_bonus_count_3', '@set_bonus:set_bonus_officer_utility_b_1') + object.setStringAttribute('@set_bonus:piece_bonus_count_4', '@set_bonus:set_bonus_officer_utility_b_2') + object.setStringAttribute('@set_bonus:piece_bonus_count_5', '@set_bonus:set_bonus_officer_utility_b_3') + object.setAttachment('setBonus', 'set_bonus_officer_utility_b') + return \ No newline at end of file diff --git a/scripts/object/tangible/wearables/bracelet/item_bracelet_r_set_smuggler_dps_01_01.py b/scripts/object/tangible/wearables/bracelet/item_bracelet_r_set_smuggler_dps_01_01.py new file mode 100644 index 00000000..d2e2ca9e --- /dev/null +++ b/scripts/object/tangible/wearables/bracelet/item_bracelet_r_set_smuggler_dps_01_01.py @@ -0,0 +1,18 @@ +import sys + +def setup(core, object): + object.setStfFilename('static_item_n') + object.setStfName('item_bracelet_r_set_smuggler_dps_01_01') + object.setDetailFilename('static_item_d') + object.setDetailName('item_bracelet_r_set_smuggler_dps_01_01') + object.setStringAttribute('class_required', 'Smuggler') + object.setIntAttribute('required_combat_level', 85) + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_action_line_sm_dm', 2) + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:fast_attack_line_sm_dm', 1) + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_freeshot_sm_dm', 2) + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_cooldown_line_sm_dm', 2) + object.setStringAttribute('@set_bonus:piece_bonus_count_3', '@set_bonus:set_bonus_smuggler_dps_1') + object.setStringAttribute('@set_bonus:piece_bonus_count_4', '@set_bonus:set_bonus_smuggler_dps_2') + object.setStringAttribute('@set_bonus:piece_bonus_count_5', '@set_bonus:set_bonus_smuggler_dps_3') + object.setAttachment('setBonus', 'set_bonus_smuggler_dps') + return \ No newline at end of file diff --git a/scripts/object/tangible/wearables/bracelet/item_bracelet_r_set_smuggler_utility_a_01_01.py b/scripts/object/tangible/wearables/bracelet/item_bracelet_r_set_smuggler_utility_a_01_01.py new file mode 100644 index 00000000..17f32009 --- /dev/null +++ b/scripts/object/tangible/wearables/bracelet/item_bracelet_r_set_smuggler_utility_a_01_01.py @@ -0,0 +1,18 @@ +import sys + +def setup(core, object): + object.setStfFilename('static_item_n') + object.setStfName('item_bracelet_r_set_smuggler_utility_a_01_01') + object.setDetailFilename('static_item_d') + object.setDetailName('item_bracelet_r_set_smuggler_utility_a_01_01') + object.setStringAttribute('class_required', 'Smuggler') + object.setIntAttribute('required_combat_level', 85) + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:bh_dire_snare', 7) + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_cooldown_line_sm_dm_cc', 1) + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_freeshot_sm_dm_cc', 2) + object.setIntAttribute('cat_stat_mod_bonus.@stat_n:luck_modified', 30) + object.setStringAttribute('@set_bonus:piece_bonus_count_3', '@set_bonus:set_smuggler_utility_a_1') + object.setStringAttribute('@set_bonus:piece_bonus_count_4', '@set_bonus:set_smuggler_utility_a_2') + object.setStringAttribute('@set_bonus:piece_bonus_count_5', '@set_bonus:set_smuggler_utility_a_3') + object.setAttachment('setBonus', 'set_smuggler_utility_a') + return \ No newline at end of file diff --git a/scripts/object/tangible/wearables/bracelet/item_bracelet_r_set_smuggler_utility_b_01_01.py b/scripts/object/tangible/wearables/bracelet/item_bracelet_r_set_smuggler_utility_b_01_01.py new file mode 100644 index 00000000..e07a84d5 --- /dev/null +++ b/scripts/object/tangible/wearables/bracelet/item_bracelet_r_set_smuggler_utility_b_01_01.py @@ -0,0 +1,16 @@ +import sys + +def setup(core, object): + object.setStfFilename('static_item_n') + object.setStfName('item_bracelet_r_set_smuggler_utility_b_01_01') + object.setDetailFilename('static_item_d') + object.setDetailName('item_bracelet_r_set_smuggler_utility_b_01_01') + object.setStringAttribute('class_required', 'Smuggler') + object.setIntAttribute('required_combat_level', 85) + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_cooldown_line_sm_false_hope', 2) + object.setIntAttribute('cat_stat_mod_bonus.@stat_n:luck_modified', 30) + object.setStringAttribute('@set_bonus:piece_bonus_count_3', '@set_bonus:set_smuggler_utility_b_1') + object.setStringAttribute('@set_bonus:piece_bonus_count_4', '@set_bonus:set_smuggler_utility_b_2') + object.setStringAttribute('@set_bonus:piece_bonus_count_5', '@set_bonus:set_smuggler_utility_b_3') + object.setAttachment('setBonus', 'set_smuggler_utility_b') + return \ No newline at end of file diff --git a/scripts/object/tangible/wearables/bracelet/item_bracelet_r_set_spy_dps_01_01.py b/scripts/object/tangible/wearables/bracelet/item_bracelet_r_set_spy_dps_01_01.py new file mode 100644 index 00000000..a1400617 --- /dev/null +++ b/scripts/object/tangible/wearables/bracelet/item_bracelet_r_set_spy_dps_01_01.py @@ -0,0 +1,19 @@ +import sys + +def setup(core, object): + object.setStfFilename('static_item_n') + object.setStfName('item_bracelet_r_set_spy_dps_01_01') + object.setDetailFilename('static_item_d') + object.setDetailName('item_bracelet_r_set_spy_dps_01_01') + object.setIntAttribute('required_combat_level', 85) + object.setStringAttribute('class_required', 'Spy') + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_action_line_sp_dm', 2) + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_action_line_sp_dot', 2) + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_cooldown_line_sp_dm', 1) + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_freeshot_sp_dm', 1) + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:fast_attack_line_sp_dm', 2) + object.setStringAttribute('@set_bonus:piece_bonus_count_3', '@set_bonus:set_bonus_spy_dps_1') + object.setStringAttribute('@set_bonus:piece_bonus_count_4', '@set_bonus:set_bonus_spy_dps_2') + object.setStringAttribute('@set_bonus:piece_bonus_count_5', '@set_bonus:set_bonus_spy_dps_3') + object.setAttachment('setBonus', 'set_bonus_spy_dps') + return \ No newline at end of file diff --git a/scripts/object/tangible/wearables/bracelet/item_bracelet_r_set_spy_utility_a_01_01.py b/scripts/object/tangible/wearables/bracelet/item_bracelet_r_set_spy_utility_a_01_01.py new file mode 100644 index 00000000..6d18e3d8 --- /dev/null +++ b/scripts/object/tangible/wearables/bracelet/item_bracelet_r_set_spy_utility_a_01_01.py @@ -0,0 +1,18 @@ +import sys + +def setup(core, object): + object.setStfFilename('static_item_n') + object.setStfName('item_bracelet_r_set_spy_utility_a_01_01') + object.setDetailFilename('static_item_d') + object.setDetailName('item_bracelet_r_set_spy_utility_a_01_01') + object.setIntAttribute('required_combat_level', 85) + object.setStringAttribute('class_required', 'Spy') + object.setIntAttribute('cat_stat_mod_bonus.@stat_n:strength_modified', 25) + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:fast_attack_line_sp_smoke', 1) + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_duration_line_sp_preparation', 1) + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_cooldown_line_sp_preparation', 6) + object.setStringAttribute('@set_bonus:piece_bonus_count_3', '@set_bonus:set_bonus_spy_utility_a_1') + object.setStringAttribute('@set_bonus:piece_bonus_count_4', '@set_bonus:set_bonus_spy_utility_a_2') + object.setStringAttribute('@set_bonus:piece_bonus_count_5', '@set_bonus:set_bonus_spy_utility_a_3') + object.setAttachment('setBonus', 'set_bonus_spy_utility_a') + return diff --git a/scripts/object/tangible/wearables/bracelet/item_bracelet_r_set_spy_utility_b_01_01.py b/scripts/object/tangible/wearables/bracelet/item_bracelet_r_set_spy_utility_b_01_01.py new file mode 100644 index 00000000..1f08b3c0 --- /dev/null +++ b/scripts/object/tangible/wearables/bracelet/item_bracelet_r_set_spy_utility_b_01_01.py @@ -0,0 +1,17 @@ +import sys + +def setup(core, object): + object.setStfFilename('static_item_n') + object.setStfName('item_bracelet_r_set_spy_utility_b_01_01') + object.setDetailFilename('static_item_d') + object.setDetailName('item_bracelet_r_set_spy_utility_b_01_01') + object.setIntAttribute('required_combat_level', 85) + object.setStringAttribute('class_required', 'Spy') + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_strikethrough_chance', 2) + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_action_all', 1) + object.setIntAttribute('cat_stat_mod_bonus.@stat_n:luck_modified', 50) + object.setStringAttribute('@set_bonus:piece_bonus_count_3', '@set_bonus:set_bonus_spy_utility_b_1') + object.setStringAttribute('@set_bonus:piece_bonus_count_4', '@set_bonus:set_bonus_spy_utility_b_2') + object.setStringAttribute('@set_bonus:piece_bonus_count_5', '@set_bonus:set_bonus_spy_utility_b_3') + object.setAttachment('setBonus', 'set_bonus_spy_utility_b') + return \ No newline at end of file diff --git a/scripts/object/tangible/wearables/cape/cape_imperial_01.py b/scripts/object/tangible/wearables/cape/cape_imperial_01.py index ccad8904..66ff82f4 100644 --- a/scripts/object/tangible/wearables/cape/cape_imperial_01.py +++ b/scripts/object/tangible/wearables/cape/cape_imperial_01.py @@ -1,4 +1,11 @@ import sys def setup(core, object): + object.setCustomName('Imperial Cape') + object.setStringAttribute('condition', '100/100') + object.setIntAttribute('volume', 1) + object.setStringAttribute('cost', '[2500] Imperial Galactic Civil War token') + object.setStringAttribute('faction_restriction', 'Imperial') + + return \ No newline at end of file diff --git a/scripts/object/tangible/wearables/cape/cape_rebel_01.py b/scripts/object/tangible/wearables/cape/cape_rebel_01.py index ccad8904..ac9674d5 100644 --- a/scripts/object/tangible/wearables/cape/cape_rebel_01.py +++ b/scripts/object/tangible/wearables/cape/cape_rebel_01.py @@ -1,4 +1,11 @@ import sys def setup(core, object): + object.setCustomName('Rebel Alliance Cape') + object.setStringAttribute('condition', '100/100') + object.setIntAttribute('volume', 1) + object.setStringAttribute('cost', '[2500] Rebel Alliance Galactic Civil War token') + object.setStringAttribute('faction_restriction', 'Rebel Alliance') + + return \ No newline at end of file diff --git a/scripts/object/tangible/wearables/gloves/appearance_invisible_s01.py b/scripts/object/tangible/wearables/gloves/appearance_invisible_s01.py index ccad8904..b89922ca 100644 --- a/scripts/object/tangible/wearables/gloves/appearance_invisible_s01.py +++ b/scripts/object/tangible/wearables/gloves/appearance_invisible_s01.py @@ -1,4 +1,7 @@ import sys def setup(core, object): + object.setStringAttribute('condition', '100/100') + object.setIntAttribute('volume', 1) + return \ No newline at end of file diff --git a/scripts/object/tangible/wearables/gloves/gloves_tusken_raider.py b/scripts/object/tangible/wearables/gloves/gloves_tusken_raider.py index ccad8904..b89922ca 100644 --- a/scripts/object/tangible/wearables/gloves/gloves_tusken_raider.py +++ b/scripts/object/tangible/wearables/gloves/gloves_tusken_raider.py @@ -1,4 +1,7 @@ import sys def setup(core, object): + object.setStringAttribute('condition', '100/100') + object.setIntAttribute('volume', 1) + return \ No newline at end of file diff --git a/scripts/object/tangible/wearables/gloves/item_spy_gloves_02_01.py b/scripts/object/tangible/wearables/gloves/item_spy_gloves_02_01.py new file mode 100644 index 00000000..f5f06373 --- /dev/null +++ b/scripts/object/tangible/wearables/gloves/item_spy_gloves_02_01.py @@ -0,0 +1,10 @@ +import sys + +def setup(core, object): + object.setStfFilename('static_item_n') + object.setStfName('item_spy_gloves_02_01') + object.setDetailFilename('static_item_d') + object.setDetailName('item_spy_gloves_02_01') + object.setIntAttribute('cat_stat_mod_bonus.@stat_n:agility_modified', 3) + object.setStringAttribute('class_required', 'Spy') + return \ No newline at end of file diff --git a/scripts/object/tangible/wearables/goggles/goggles_anniversary.py b/scripts/object/tangible/wearables/goggles/goggles_anniversary.py index ccad8904..b89922ca 100644 --- a/scripts/object/tangible/wearables/goggles/goggles_anniversary.py +++ b/scripts/object/tangible/wearables/goggles/goggles_anniversary.py @@ -1,4 +1,7 @@ import sys def setup(core, object): + object.setStringAttribute('condition', '100/100') + object.setIntAttribute('volume', 1) + return \ No newline at end of file diff --git a/scripts/object/tangible/wearables/goggles/goggles_s01.py b/scripts/object/tangible/wearables/goggles/goggles_s01.py index ccad8904..b89922ca 100644 --- a/scripts/object/tangible/wearables/goggles/goggles_s01.py +++ b/scripts/object/tangible/wearables/goggles/goggles_s01.py @@ -1,4 +1,7 @@ import sys def setup(core, object): + object.setStringAttribute('condition', '100/100') + object.setIntAttribute('volume', 1) + return \ No newline at end of file diff --git a/scripts/object/tangible/wearables/goggles/goggles_s02.py b/scripts/object/tangible/wearables/goggles/goggles_s02.py index ccad8904..b89922ca 100644 --- a/scripts/object/tangible/wearables/goggles/goggles_s02.py +++ b/scripts/object/tangible/wearables/goggles/goggles_s02.py @@ -1,4 +1,7 @@ import sys def setup(core, object): + object.setStringAttribute('condition', '100/100') + object.setIntAttribute('volume', 1) + return \ No newline at end of file diff --git a/scripts/object/tangible/wearables/goggles/goggles_s03.py b/scripts/object/tangible/wearables/goggles/goggles_s03.py index ccad8904..b89922ca 100644 --- a/scripts/object/tangible/wearables/goggles/goggles_s03.py +++ b/scripts/object/tangible/wearables/goggles/goggles_s03.py @@ -1,4 +1,7 @@ import sys def setup(core, object): + object.setStringAttribute('condition', '100/100') + object.setIntAttribute('volume', 1) + return \ No newline at end of file diff --git a/scripts/object/tangible/wearables/goggles/goggles_s04.py b/scripts/object/tangible/wearables/goggles/goggles_s04.py index ccad8904..4f631a53 100644 --- a/scripts/object/tangible/wearables/goggles/goggles_s04.py +++ b/scripts/object/tangible/wearables/goggles/goggles_s04.py @@ -1,4 +1,7 @@ import sys def setup(core, object): + object.setStringAttribute('condition', '100/100') + object.setIntAttribute('volume', 1) + return \ No newline at end of file diff --git a/scripts/object/tangible/wearables/goggles/goggles_s05.py b/scripts/object/tangible/wearables/goggles/goggles_s05.py index ccad8904..b89922ca 100644 --- a/scripts/object/tangible/wearables/goggles/goggles_s05.py +++ b/scripts/object/tangible/wearables/goggles/goggles_s05.py @@ -1,4 +1,7 @@ import sys def setup(core, object): + object.setStringAttribute('condition', '100/100') + object.setIntAttribute('volume', 1) + return \ No newline at end of file diff --git a/scripts/object/tangible/wearables/goggles/goggles_s06.py b/scripts/object/tangible/wearables/goggles/goggles_s06.py index ccad8904..b89922ca 100644 --- a/scripts/object/tangible/wearables/goggles/goggles_s06.py +++ b/scripts/object/tangible/wearables/goggles/goggles_s06.py @@ -1,4 +1,7 @@ import sys def setup(core, object): + object.setStringAttribute('condition', '100/100') + object.setIntAttribute('volume', 1) + return \ No newline at end of file diff --git a/scripts/object/tangible/wearables/goggles/rebreather.py b/scripts/object/tangible/wearables/goggles/rebreather.py index ccad8904..b89922ca 100644 --- a/scripts/object/tangible/wearables/goggles/rebreather.py +++ b/scripts/object/tangible/wearables/goggles/rebreather.py @@ -1,4 +1,7 @@ import sys def setup(core, object): + object.setStringAttribute('condition', '100/100') + object.setIntAttribute('volume', 1) + return \ No newline at end of file diff --git a/scripts/object/tangible/wearables/hat/hat_fedora__s01.py b/scripts/object/tangible/wearables/hat/hat_fedora__s01.py index ccad8904..b89922ca 100644 --- a/scripts/object/tangible/wearables/hat/hat_fedora__s01.py +++ b/scripts/object/tangible/wearables/hat/hat_fedora__s01.py @@ -1,4 +1,7 @@ import sys def setup(core, object): + object.setStringAttribute('condition', '100/100') + object.setIntAttribute('volume', 1) + return \ No newline at end of file diff --git a/scripts/object/tangible/wearables/hat/hat_imp_s01.py b/scripts/object/tangible/wearables/hat/hat_imp_s01.py index ccad8904..b89922ca 100644 --- a/scripts/object/tangible/wearables/hat/hat_imp_s01.py +++ b/scripts/object/tangible/wearables/hat/hat_imp_s01.py @@ -1,4 +1,7 @@ import sys def setup(core, object): + object.setStringAttribute('condition', '100/100') + object.setIntAttribute('volume', 1) + return \ No newline at end of file diff --git a/scripts/object/tangible/wearables/hat/hat_imp_s02.py b/scripts/object/tangible/wearables/hat/hat_imp_s02.py index ccad8904..b89922ca 100644 --- a/scripts/object/tangible/wearables/hat/hat_imp_s02.py +++ b/scripts/object/tangible/wearables/hat/hat_imp_s02.py @@ -1,4 +1,7 @@ import sys def setup(core, object): + object.setStringAttribute('condition', '100/100') + object.setIntAttribute('volume', 1) + return \ No newline at end of file diff --git a/scripts/object/tangible/wearables/hat/hat_imperial_gunner_01.py b/scripts/object/tangible/wearables/hat/hat_imperial_gunner_01.py index ccad8904..b89922ca 100644 --- a/scripts/object/tangible/wearables/hat/hat_imperial_gunner_01.py +++ b/scripts/object/tangible/wearables/hat/hat_imperial_gunner_01.py @@ -1,4 +1,7 @@ import sys def setup(core, object): + object.setStringAttribute('condition', '100/100') + object.setIntAttribute('volume', 1) + return \ No newline at end of file diff --git a/scripts/object/tangible/wearables/hat/hat_loveday_halo_01.py b/scripts/object/tangible/wearables/hat/hat_loveday_halo_01.py index ccad8904..b89922ca 100644 --- a/scripts/object/tangible/wearables/hat/hat_loveday_halo_01.py +++ b/scripts/object/tangible/wearables/hat/hat_loveday_halo_01.py @@ -1,4 +1,7 @@ import sys def setup(core, object): + object.setStringAttribute('condition', '100/100') + object.setIntAttribute('volume', 1) + return \ No newline at end of file diff --git a/scripts/object/tangible/wearables/hat/hat_loveday_halo_02.py b/scripts/object/tangible/wearables/hat/hat_loveday_halo_02.py index ccad8904..b89922ca 100644 --- a/scripts/object/tangible/wearables/hat/hat_loveday_halo_02.py +++ b/scripts/object/tangible/wearables/hat/hat_loveday_halo_02.py @@ -1,4 +1,7 @@ import sys def setup(core, object): + object.setStringAttribute('condition', '100/100') + object.setIntAttribute('volume', 1) + return \ No newline at end of file diff --git a/scripts/object/tangible/wearables/hat/hat_rebel_trooper_01.py b/scripts/object/tangible/wearables/hat/hat_rebel_trooper_01.py index ccad8904..b89922ca 100644 --- a/scripts/object/tangible/wearables/hat/hat_rebel_trooper_01.py +++ b/scripts/object/tangible/wearables/hat/hat_rebel_trooper_01.py @@ -1,4 +1,7 @@ import sys def setup(core, object): + object.setStringAttribute('condition', '100/100') + object.setIntAttribute('volume', 1) + return \ No newline at end of file diff --git a/scripts/object/tangible/wearables/helmet/helmet_atat.py b/scripts/object/tangible/wearables/helmet/helmet_atat.py index ccad8904..a398dc48 100644 --- a/scripts/object/tangible/wearables/helmet/helmet_atat.py +++ b/scripts/object/tangible/wearables/helmet/helmet_atat.py @@ -1,4 +1,7 @@ import sys def setup(core, object): + object.setStringAttribute('condition', '100/100') + object.setIntAttribute('volume', 1) + return \ No newline at end of file diff --git a/scripts/object/tangible/wearables/helmet/helmet_fighter_blacksun_ace.py b/scripts/object/tangible/wearables/helmet/helmet_fighter_blacksun_ace.py index ccad8904..a398dc48 100644 --- a/scripts/object/tangible/wearables/helmet/helmet_fighter_blacksun_ace.py +++ b/scripts/object/tangible/wearables/helmet/helmet_fighter_blacksun_ace.py @@ -1,4 +1,7 @@ import sys def setup(core, object): + object.setStringAttribute('condition', '100/100') + object.setIntAttribute('volume', 1) + return \ No newline at end of file diff --git a/scripts/object/tangible/wearables/helmet/helmet_fighter_imperial_ace.py b/scripts/object/tangible/wearables/helmet/helmet_fighter_imperial_ace.py index ccad8904..4f631a53 100644 --- a/scripts/object/tangible/wearables/helmet/helmet_fighter_imperial_ace.py +++ b/scripts/object/tangible/wearables/helmet/helmet_fighter_imperial_ace.py @@ -1,4 +1,7 @@ import sys def setup(core, object): + object.setStringAttribute('condition', '100/100') + object.setIntAttribute('volume', 1) + return \ No newline at end of file diff --git a/scripts/object/tangible/wearables/helmet/helmet_fighter_privateer_ace.py b/scripts/object/tangible/wearables/helmet/helmet_fighter_privateer_ace.py index ccad8904..a398dc48 100644 --- a/scripts/object/tangible/wearables/helmet/helmet_fighter_privateer_ace.py +++ b/scripts/object/tangible/wearables/helmet/helmet_fighter_privateer_ace.py @@ -1,4 +1,7 @@ import sys def setup(core, object): + object.setStringAttribute('condition', '100/100') + object.setIntAttribute('volume', 1) + return \ No newline at end of file diff --git a/scripts/object/tangible/wearables/helmet/helmet_fighter_rebel_ace.py b/scripts/object/tangible/wearables/helmet/helmet_fighter_rebel_ace.py index ccad8904..a398dc48 100644 --- a/scripts/object/tangible/wearables/helmet/helmet_fighter_rebel_ace.py +++ b/scripts/object/tangible/wearables/helmet/helmet_fighter_rebel_ace.py @@ -1,4 +1,7 @@ import sys def setup(core, object): + object.setStringAttribute('condition', '100/100') + object.setIntAttribute('volume', 1) + return \ No newline at end of file diff --git a/scripts/object/tangible/wearables/helmet/helmet_tie_fighter.py b/scripts/object/tangible/wearables/helmet/helmet_tie_fighter.py index ccad8904..a398dc48 100644 --- a/scripts/object/tangible/wearables/helmet/helmet_tie_fighter.py +++ b/scripts/object/tangible/wearables/helmet/helmet_tie_fighter.py @@ -1,4 +1,7 @@ import sys def setup(core, object): + object.setStringAttribute('condition', '100/100') + object.setIntAttribute('volume', 1) + return \ No newline at end of file diff --git a/scripts/object/tangible/wearables/helmet/helmet_tusken_raider_s01.py b/scripts/object/tangible/wearables/helmet/helmet_tusken_raider_s01.py index ccad8904..a398dc48 100644 --- a/scripts/object/tangible/wearables/helmet/helmet_tusken_raider_s01.py +++ b/scripts/object/tangible/wearables/helmet/helmet_tusken_raider_s01.py @@ -1,4 +1,7 @@ import sys def setup(core, object): + object.setStringAttribute('condition', '100/100') + object.setIntAttribute('volume', 1) + return \ No newline at end of file diff --git a/scripts/object/tangible/wearables/helmet/helmet_tusken_raider_s02.py b/scripts/object/tangible/wearables/helmet/helmet_tusken_raider_s02.py index ccad8904..a398dc48 100644 --- a/scripts/object/tangible/wearables/helmet/helmet_tusken_raider_s02.py +++ b/scripts/object/tangible/wearables/helmet/helmet_tusken_raider_s02.py @@ -1,4 +1,7 @@ import sys def setup(core, object): + object.setStringAttribute('condition', '100/100') + object.setIntAttribute('volume', 1) + return \ No newline at end of file diff --git a/scripts/object/tangible/wearables/jacket/appearance_invisible_s01.py b/scripts/object/tangible/wearables/jacket/appearance_invisible_s01.py index ccad8904..b89922ca 100644 --- a/scripts/object/tangible/wearables/jacket/appearance_invisible_s01.py +++ b/scripts/object/tangible/wearables/jacket/appearance_invisible_s01.py @@ -1,4 +1,7 @@ import sys def setup(core, object): + object.setStringAttribute('condition', '100/100') + object.setIntAttribute('volume', 1) + return \ No newline at end of file diff --git a/scripts/object/tangible/wearables/jacket/jacket_ace_imperial.py b/scripts/object/tangible/wearables/jacket/jacket_ace_imperial.py index ccad8904..b89922ca 100644 --- a/scripts/object/tangible/wearables/jacket/jacket_ace_imperial.py +++ b/scripts/object/tangible/wearables/jacket/jacket_ace_imperial.py @@ -1,4 +1,7 @@ import sys def setup(core, object): + object.setStringAttribute('condition', '100/100') + object.setIntAttribute('volume', 1) + return \ No newline at end of file diff --git a/scripts/object/tangible/wearables/jacket/jacket_ace_privateer.py b/scripts/object/tangible/wearables/jacket/jacket_ace_privateer.py index ccad8904..b89922ca 100644 --- a/scripts/object/tangible/wearables/jacket/jacket_ace_privateer.py +++ b/scripts/object/tangible/wearables/jacket/jacket_ace_privateer.py @@ -1,4 +1,7 @@ import sys def setup(core, object): + object.setStringAttribute('condition', '100/100') + object.setIntAttribute('volume', 1) + return \ No newline at end of file diff --git a/scripts/object/tangible/wearables/jacket/jacket_ace_rebel.py b/scripts/object/tangible/wearables/jacket/jacket_ace_rebel.py index ccad8904..b89922ca 100644 --- a/scripts/object/tangible/wearables/jacket/jacket_ace_rebel.py +++ b/scripts/object/tangible/wearables/jacket/jacket_ace_rebel.py @@ -1,4 +1,7 @@ import sys def setup(core, object): + object.setStringAttribute('condition', '100/100') + object.setIntAttribute('volume', 1) + return \ No newline at end of file diff --git a/scripts/object/tangible/wearables/jacket/jacket_gcw_imperial_01.py b/scripts/object/tangible/wearables/jacket/jacket_gcw_imperial_01.py index ccad8904..b89922ca 100644 --- a/scripts/object/tangible/wearables/jacket/jacket_gcw_imperial_01.py +++ b/scripts/object/tangible/wearables/jacket/jacket_gcw_imperial_01.py @@ -1,4 +1,7 @@ import sys def setup(core, object): + object.setStringAttribute('condition', '100/100') + object.setIntAttribute('volume', 1) + return \ No newline at end of file diff --git a/scripts/object/tangible/wearables/jacket/jacket_gcw_rebel_01.py b/scripts/object/tangible/wearables/jacket/jacket_gcw_rebel_01.py index ccad8904..b89922ca 100644 --- a/scripts/object/tangible/wearables/jacket/jacket_gcw_rebel_01.py +++ b/scripts/object/tangible/wearables/jacket/jacket_gcw_rebel_01.py @@ -1,4 +1,7 @@ import sys def setup(core, object): + object.setStringAttribute('condition', '100/100') + object.setIntAttribute('volume', 1) + return \ No newline at end of file diff --git a/scripts/object/tangible/wearables/jacket/jacket_gmf_01.py b/scripts/object/tangible/wearables/jacket/jacket_gmf_01.py index ccad8904..b89922ca 100644 --- a/scripts/object/tangible/wearables/jacket/jacket_gmf_01.py +++ b/scripts/object/tangible/wearables/jacket/jacket_gmf_01.py @@ -1,4 +1,7 @@ import sys def setup(core, object): + object.setStringAttribute('condition', '100/100') + object.setIntAttribute('volume', 1) + return \ No newline at end of file diff --git a/scripts/object/tangible/wearables/jacket/jacket_lifeday_09_01.py b/scripts/object/tangible/wearables/jacket/jacket_lifeday_09_01.py index ccad8904..b89922ca 100644 --- a/scripts/object/tangible/wearables/jacket/jacket_lifeday_09_01.py +++ b/scripts/object/tangible/wearables/jacket/jacket_lifeday_09_01.py @@ -1,4 +1,7 @@ import sys def setup(core, object): + object.setStringAttribute('condition', '100/100') + object.setIntAttribute('volume', 1) + return \ No newline at end of file diff --git a/scripts/object/tangible/wearables/jacket/jacket_lifeday_09_02.py b/scripts/object/tangible/wearables/jacket/jacket_lifeday_09_02.py index ccad8904..b89922ca 100644 --- a/scripts/object/tangible/wearables/jacket/jacket_lifeday_09_02.py +++ b/scripts/object/tangible/wearables/jacket/jacket_lifeday_09_02.py @@ -1,4 +1,7 @@ import sys def setup(core, object): + object.setStringAttribute('condition', '100/100') + object.setIntAttribute('volume', 1) + return \ No newline at end of file diff --git a/scripts/object/tangible/wearables/jacket/jacket_outbreak_prison_guard.py b/scripts/object/tangible/wearables/jacket/jacket_outbreak_prison_guard.py index ccad8904..b89922ca 100644 --- a/scripts/object/tangible/wearables/jacket/jacket_outbreak_prison_guard.py +++ b/scripts/object/tangible/wearables/jacket/jacket_outbreak_prison_guard.py @@ -1,4 +1,7 @@ import sys def setup(core, object): + object.setStringAttribute('condition', '100/100') + object.setIntAttribute('volume', 1) + return \ No newline at end of file diff --git a/scripts/object/tangible/wearables/necklace/appearance_invisible_s01.py b/scripts/object/tangible/wearables/necklace/appearance_invisible_s01.py index ccad8904..b89922ca 100644 --- a/scripts/object/tangible/wearables/necklace/appearance_invisible_s01.py +++ b/scripts/object/tangible/wearables/necklace/appearance_invisible_s01.py @@ -1,4 +1,7 @@ import sys def setup(core, object): + object.setStringAttribute('condition', '100/100') + object.setIntAttribute('volume', 1) + return \ No newline at end of file diff --git a/scripts/object/tangible/wearables/necklace/item_bounty_hunter_pendant_01_02.py b/scripts/object/tangible/wearables/necklace/item_bounty_hunter_pendant_01_02.py new file mode 100644 index 00000000..46555e1f --- /dev/null +++ b/scripts/object/tangible/wearables/necklace/item_bounty_hunter_pendant_01_02.py @@ -0,0 +1,11 @@ +import sys + +def setup(core, object): + object.setStfFilename('static_item_n') + object.setStfName('item_bounty_hunter_pendant_01_02') + object.setDetailFilename('static_item_d') + object.setDetailName('item_bounty_hunter_pendant_01_02') + object.setIntAttribute('cat_stat_mod_bonus.@stat_n:agility_modified', 12) + object.setIntAttribute('cat_stat_mod_bonus.@stat_n:precision_modified', 12) + object.setStringAttribute('class_required', 'Bounty Hunter') + return diff --git a/scripts/object/tangible/wearables/necklace/item_commando_pendant_01_02.py b/scripts/object/tangible/wearables/necklace/item_commando_pendant_01_02.py new file mode 100644 index 00000000..716905e2 --- /dev/null +++ b/scripts/object/tangible/wearables/necklace/item_commando_pendant_01_02.py @@ -0,0 +1,11 @@ +import sys + +def setup(core, object): + object.setStfFilename('static_item_n') + object.setStfName('item_commando_pendant_01_02') + object.setDetailFilename('static_item_d') + object.setDetailName('item_commando_pendant_01_02') + object.setIntAttribute('cat_stat_mod_bonus.@stat_n:agility_modified', 12) + object.setIntAttribute('cat_stat_mod_bonus.@stat_n:precision_modified', 12) + object.setStringAttribute('class_required', 'Commando') + return diff --git a/scripts/object/tangible/wearables/necklace/item_force_sensitive_pendant_01_02.py b/scripts/object/tangible/wearables/necklace/item_force_sensitive_pendant_01_02.py new file mode 100644 index 00000000..37735e50 --- /dev/null +++ b/scripts/object/tangible/wearables/necklace/item_force_sensitive_pendant_01_02.py @@ -0,0 +1,11 @@ +import sys + +def setup(core, object): + object.setStfFilename('static_item_n') + object.setStfName('item_force_sensitive_pendant_01_02') + object.setDetailFilename('static_item_d') + object.setDetailName('item_force_sensitive_pendant_01_02') + object.setIntAttribute('cat_stat_mod_bonus.@stat_n:agility_modified', 12) + object.setIntAttribute('cat_stat_mod_bonus.@stat_n:strength_modified', 12) + object.setStringAttribute('class_required', 'Jedi') + return diff --git a/scripts/object/tangible/wearables/necklace/item_necklace_set_bh_dps_01_01.py b/scripts/object/tangible/wearables/necklace/item_necklace_set_bh_dps_01_01.py new file mode 100644 index 00000000..32a45e54 --- /dev/null +++ b/scripts/object/tangible/wearables/necklace/item_necklace_set_bh_dps_01_01.py @@ -0,0 +1,18 @@ +import sys + +def setup(core, object): + object.setStfFilename('static_item_n') + object.setStfName('item_necklace_set_bh_dps_01_01') + object.setDetailFilename('static_item_d') + object.setDetailName('item_necklace_set_bh_dps_01_01') + object.setIntAttribute('required_combat_level', 85) + object.setStringAttribute('class_required', 'Bounty Hunter') + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_action_line_dm', 1) + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_action_line_dm_crit', 1) + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_buff_duration_line_bh_return_fire', 1) + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_cooldown_line_dm', 1) + object.setStringAttribute('@set_bonus:piece_bonus_count_3', '@set_bonus:set_bonus_bh_dps_1') + object.setStringAttribute('@set_bonus:piece_bonus_count_4', '@set_bonus:set_bonus_bh_dps_2') + object.setStringAttribute('@set_bonus:piece_bonus_count_5', '@set_bonus:set_bonus_bh_dps_3) + object.setAttachment('setBonus', 'set_bonus_bh_dps') + return \ No newline at end of file diff --git a/scripts/object/tangible/wearables/necklace/item_necklace_set_bh_utility_a_01_01.py b/scripts/object/tangible/wearables/necklace/item_necklace_set_bh_utility_a_01_01.py new file mode 100644 index 00000000..dbadc7c6 --- /dev/null +++ b/scripts/object/tangible/wearables/necklace/item_necklace_set_bh_utility_a_01_01.py @@ -0,0 +1,16 @@ +import sys + +def setup(core, object): + object.setStfFilename('static_item_n') + object.setStfName('item_necklace_set_bh_utility_a_01_01') + object.setDetailFilename('static_item_d') + object.setDetailName('item_necklace_set_bh_utility_a_01_01') + object.setIntAttribute('required_combat_level', 85) + object.setStringAttribute('class_required', 'Bounty Hunter') + object.setIntAttribute('cat_stat_mod_bonus.@stat_n:precision_modified', 50) + object.setIntAttribute('cat_stat_mod_bonus.@stat_n:luck_modified', 30) + object.setStringAttribute('@set_bonus:piece_bonus_count_3', '@set_bonus:set_bonus_bh_utility_a_1') + object.setStringAttribute('@set_bonus:piece_bonus_count_4', '@set_bonus:set_bonus_bh_utility_a_2') + object.setStringAttribute('@set_bonus:piece_bonus_count_5', '@set_bonus:set_bonus_bh_utility_a_3') + object.setAttachment('setBonus', 'set_bonus_bh_utility_a') + return \ No newline at end of file diff --git a/scripts/object/tangible/wearables/necklace/item_necklace_set_bh_utility_b_01_01.py b/scripts/object/tangible/wearables/necklace/item_necklace_set_bh_utility_b_01_01.py new file mode 100644 index 00000000..7426c06e --- /dev/null +++ b/scripts/object/tangible/wearables/necklace/item_necklace_set_bh_utility_b_01_01.py @@ -0,0 +1,17 @@ +import sys + +def setup(core, object): + object.setStfFilename('static_item_n') + object.setStfName('item_necklace_set_bh_utility_b_01_01') + object.setDetailFilename('static_item_d') + object.setDetailName('item_necklace_set_bh_utility_b_01_01') + object.setStringAttribute('class_required', 'Bounty Hunter') + object.setIntAttribute('required_combat_level', 85) + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:bh_dire_root', 1) + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:bh_dire_snare', 1) + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:fast_attack_line_dm_cc', 2) + object.setStringAttribute('@set_bonus:piece_bonus_count_3', '@set_bonus:set_bonus_bh_utility_b_1') + object.setStringAttribute('@set_bonus:piece_bonus_count_4', '@set_bonus:set_bonus_bh_utility_b_2') + object.setStringAttribute('@set_bonus:piece_bonus_count_5', '@set_bonus:set_bonus_bh_utility_b_3') + object.setAttachment('setBonus', 'set_bonus_bh_utility_b') + return \ No newline at end of file diff --git a/scripts/object/tangible/wearables/necklace/item_necklace_set_commando_dps_01_01.py b/scripts/object/tangible/wearables/necklace/item_necklace_set_commando_dps_01_01.py new file mode 100644 index 00000000..1b0ddc6b --- /dev/null +++ b/scripts/object/tangible/wearables/necklace/item_necklace_set_commando_dps_01_01.py @@ -0,0 +1,17 @@ +import sys + +def setup(core, object): + object.setStfFilename('static_item_n') + object.setStfName('item_necklace_set_commando_dps_01_01') + object.setDetailFilename('static_item_d') + object.setDetailName('item_necklace_set_commando_dps_01_01') + object.setIntAttribute('required_combat_level', 85) + object.setStringAttribute('class_required', 'Commando') + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:fast_attack_line_co_grenade', 2) + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_action_line_co_grenade', 3) + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_freeshot_co_grenade', 2) + object.setStringAttribute('@set_bonus:piece_bonus_count_3', '@set_bonus:set_bonus_commando_dps_1') + object.setStringAttribute('@set_bonus:piece_bonus_count_4', '@set_bonus:set_bonus_commando_dps_2') + object.setStringAttribute('@set_bonus:piece_bonus_count_5', '@set_bonus:set_bonus_commando_dps_3) + object.setAttachment('setBonus', 'set_bonus_commando_dps') + return \ No newline at end of file diff --git a/scripts/object/tangible/wearables/necklace/item_necklace_set_commando_utility_a_01_01.py b/scripts/object/tangible/wearables/necklace/item_necklace_set_commando_utility_a_01_01.py new file mode 100644 index 00000000..4ceb7c9d --- /dev/null +++ b/scripts/object/tangible/wearables/necklace/item_necklace_set_commando_utility_a_01_01.py @@ -0,0 +1,17 @@ +import sys + +def setup(core, object): + object.setStfFilename('static_item_n') + object.setStfName('item_necklace_set_commando_utility_a_01_01') + object.setDetailFilename('static_item_d') + object.setDetailName('item_necklace_set_commando_utility_a_01_01') + object.setIntAttribute('required_combat_level', 85) + object.setStringAttribute('class_required', 'Commando') + object.setIntAttribute('cat_stat_mod_bonus.@stat_n:constitution_modified', 20) + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_block_chance', 2) + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:combat_block_value', 50) + object.setStringAttribute('@set_bonus:piece_bonus_count_3', '@set_bonus:set_bonus_commando_utility_a_1') + object.setStringAttribute('@set_bonus:piece_bonus_count_4', '@set_bonus:set_bonus_commando_utility_a_2') + object.setStringAttribute('@set_bonus:piece_bonus_count_5', '@set_bonus:set_bonus_commando_utility_a_3') + object.setAttachment('setBonus', 'set_bonus_commando_utility_a') + return \ No newline at end of file diff --git a/scripts/object/tangible/wearables/necklace/item_necklace_set_commando_utility_b_01_01.py b/scripts/object/tangible/wearables/necklace/item_necklace_set_commando_utility_b_01_01.py new file mode 100644 index 00000000..e66ace6b --- /dev/null +++ b/scripts/object/tangible/wearables/necklace/item_necklace_set_commando_utility_b_01_01.py @@ -0,0 +1,17 @@ +import sys + +def setup(core, object): + object.setStfFilename('static_item_n') + object.setStfName('item_necklace_set_commando_utility_b_01_01') + object.setDetailFilename('static_item_d') + object.setDetailName('item_necklace_set_commando_utility_b_01_01') + object.setIntAttribute('required_combat_level', 85) + object.setStringAttribute('class_required', 'Commando') + object.setIntAttribute('cat_stat_mod_bonus.@stat_n:constitution_modified', 10) + object.setIntAttribute('cat_stat_mod_bonus.@stat_n:strength_modified', 15) + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_devastation_bonus', 5) + object.setStringAttribute('@set_bonus:piece_bonus_count_3', '@set_bonus:set_bonus_commando_utility_b_1') + object.setStringAttribute('@set_bonus:piece_bonus_count_4', '@set_bonus:set_bonus_commando_utility_b_2') + object.setStringAttribute('@set_bonus:piece_bonus_count_5', '@set_bonus:set_bonus_commando_utility_b_3') + object.setAttachment('setBonus', 'set_bonus_commando_utility_b') + return \ No newline at end of file diff --git a/scripts/object/tangible/wearables/necklace/item_necklace_set_ent_01_01.py b/scripts/object/tangible/wearables/necklace/item_necklace_set_ent_01_01.py new file mode 100644 index 00000000..bac4ae58 --- /dev/null +++ b/scripts/object/tangible/wearables/necklace/item_necklace_set_ent_01_01.py @@ -0,0 +1,16 @@ +import sys + +def setup(core, object): + object.setStfFilename('static_item_n') + object.setStfName('item_necklace_set_ent_01_01') + object.setDetailFilename('static_item_d') + object.setDetailName('item_necklace_set_ent_01_01') + object.setIntAttribute('required_combat_level', 85) + object.setStringAttribute('class_required', 'Entertainer') + object.setIntAttribute('cat_stat_mod_bonus.@stat_n:strength_modified', 30) + object.setIntAttribute('cat_stat_mod_bonus.@stat_n:agility_modified', 30) + object.setStringAttribute('@set_bonus:piece_bonus_count_3', '@set_bonus:set_bonus_ent_1') + object.setStringAttribute('@set_bonus:piece_bonus_count_4', '@set_bonus:set_bonus_ent_2') + object.setStringAttribute('@set_bonus:piece_bonus_count_5', '@set_bonus:set_bonus_ent_3') + object.setAttachment('setBonus', 'set_bonus_ent') + return \ No newline at end of file diff --git a/scripts/object/tangible/wearables/necklace/item_necklace_set_hero_01_01.py b/scripts/object/tangible/wearables/necklace/item_necklace_set_hero_01_01.py new file mode 100644 index 00000000..efb1bc12 --- /dev/null +++ b/scripts/object/tangible/wearables/necklace/item_necklace_set_hero_01_01.py @@ -0,0 +1,16 @@ +import sys + +def setup(core, object): + object.setStfFilename('static_item_n') + object.setStfName('item_necklace_set_hero_01_01') + object.setDetailFilename('static_item_d') + object.setDetailName('item_necklace_set_hero_01_01') + object.setIntAttribute('required_combat_level', 85) + object.setIntAttribute('cat_stat_mod_bonus.@stat_n:strength_modified', 30) + object.setIntAttribute('cat_stat_mod_bonus.@stat_n:precision_modified', 30) + object.setIntAttribute('cat_stat_mod_bonus.@stat_n:luck_modified', 30) + object.setStringAttribute('@set_bonus:piece_bonus_count_3', '@set_bonus:set_bonus_hero_1') + object.setStringAttribute('@set_bonus:piece_bonus_count_4', '@set_bonus:set_bonus_hero_2') + object.setStringAttribute('@set_bonus:piece_bonus_count_5', '@set_bonus:set_bonus_hero_3') + object.setAttachment('setBonus', 'set_bonus_hero') + return \ No newline at end of file diff --git a/scripts/object/tangible/wearables/necklace/item_necklace_set_jedi_dps_01_01.py b/scripts/object/tangible/wearables/necklace/item_necklace_set_jedi_dps_01_01.py new file mode 100644 index 00000000..c4633a07 --- /dev/null +++ b/scripts/object/tangible/wearables/necklace/item_necklace_set_jedi_dps_01_01.py @@ -0,0 +1,18 @@ +import sys + +def setup(core, object): + object.setStfFilename('static_item_n') + object.setStfName('item_necklace_set_jedi_dps_01_01') + object.setDetailFilename('static_item_d') + object.setDetailName('item_necklace_set_jedi_dps_01_01') + object.setStringAttribute('class_required', 'Jedi') + object.setIntAttribute('required_combat_level', 85) + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_action_line_fs_dm', 2) + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_action_line_fs_sweep', 2) + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_cooldown_line_fs_dm', 3) + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_cooldown_line_fs_sweep', 3) + object.setStringAttribute('@set_bonus:piece_bonus_count_3', '@set_bonus:set_bonus_jedi_dps_1') + object.setStringAttribute('@set_bonus:piece_bonus_count_4', '@set_bonus:set_bonus_jedi_dps_2') + object.setStringAttribute('@set_bonus:piece_bonus_count_5', '@set_bonus:set_bonus_jedi_dps_3') + object.setAttachment('setBonus', 'set_bonus_jedi_dps') + return \ No newline at end of file diff --git a/scripts/object/tangible/wearables/necklace/item_necklace_set_jedi_utility_a_01_01.py b/scripts/object/tangible/wearables/necklace/item_necklace_set_jedi_utility_a_01_01.py new file mode 100644 index 00000000..5f3dedba --- /dev/null +++ b/scripts/object/tangible/wearables/necklace/item_necklace_set_jedi_utility_a_01_01.py @@ -0,0 +1,18 @@ +import sys + +def setup(core, object): + object.setStfFilename('static_item_n') + object.setStfName('item_necklace_set_jedi_utility_a_01_01') + object.setDetailFilename('static_item_d') + object.setDetailName('item_necklace_set_jedi_utility_a_01_01') + object.setStringAttribute('class_required', 'Jedi') + object.setIntAttribute('required_combat_level', 85) + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_action_line_fs_cc_crit', 2) + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_action_line_fs_ae_dm_cc', 2) + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_cooldown_line_fs_cc_crit', 3) + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_cooldown_line_fs_ae_dm_cc', 3) + object.setStringAttribute('@set_bonus:piece_bonus_count_3', '@set_bonus:set_jedi_utility_a_1') + object.setStringAttribute('@set_bonus:piece_bonus_count_4', '@set_bonus:set_jedi_utility_a_2') + object.setStringAttribute('@set_bonus:piece_bonus_count_5', '@set_bonus:set_jedi_utility_a_3') + object.setAttachment('setBonus', 'set_jedi_utility_a') + return \ No newline at end of file diff --git a/scripts/object/tangible/wearables/necklace/item_necklace_set_jedi_utility_b_01_01.py b/scripts/object/tangible/wearables/necklace/item_necklace_set_jedi_utility_b_01_01.py new file mode 100644 index 00000000..70b69a4a --- /dev/null +++ b/scripts/object/tangible/wearables/necklace/item_necklace_set_jedi_utility_b_01_01.py @@ -0,0 +1,16 @@ +import sys + +def setup(core, object): + object.setStfFilename('static_item_n') + object.setStfName('item_necklace_set_jedi_utility_b_01_01') + object.setDetailFilename('static_item_d') + object.setDetailName('item_necklace_set_jedi_utility_b_01_01') + object.setStringAttribute('class_required', 'Jedi') + object.setIntAttribute('required_combat_level', 85) + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_glancing_blow_all', 1) + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_critical_hit_reduction', 1) + object.setStringAttribute('@set_bonus:piece_bonus_count_3', '@set_bonus:set_jedi_utility_b_1') + object.setStringAttribute('@set_bonus:piece_bonus_count_4', '@set_bonus:set_jedi_utility_b_2') + object.setStringAttribute('@set_bonus:piece_bonus_count_5', '@set_bonus:set_jedi_utility_b_3') + object.setAttachment('setBonus', 'set_jedi_utility_b') + return \ No newline at end of file diff --git a/scripts/object/tangible/wearables/necklace/item_necklace_set_medic_dps_01_01.py b/scripts/object/tangible/wearables/necklace/item_necklace_set_medic_dps_01_01.py new file mode 100644 index 00000000..3a68cd61 --- /dev/null +++ b/scripts/object/tangible/wearables/necklace/item_necklace_set_medic_dps_01_01.py @@ -0,0 +1,19 @@ +import sys + +def setup(core, object): + object.setStfFilename('static_item_n') + object.setStfName('item_necklace_set_medic_dps_01_01') + object.setDetailFilename('static_item_d') + object.setDetailName('item_necklace_set_medic_dps_01_01') + object.setStringAttribute('class_required', 'Medic') + object.setIntAttribute('required_combat_level', 85) + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_action_line_me_burst', 2) + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_action_line_me_dm', 1) + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_action_line_me_smash', 2) + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_buff_duration_line_me_enhance', 360) + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:fast_attack_line_me_dm', 1) + object.setStringAttribute('@set_bonus:piece_bonus_count_3', '@set_bonus:set_bonus_medic_dps_1') + object.setStringAttribute('@set_bonus:piece_bonus_count_4', '@set_bonus:set_bonus_medic_dps_2') + object.setStringAttribute('@set_bonus:piece_bonus_count_5', '@set_bonus:set_bonus_medic_dps_3') + object.setAttachment('setBonus', 'set_bonus_medic_dps') + return \ No newline at end of file diff --git a/scripts/object/tangible/wearables/necklace/item_necklace_set_medic_utility_a_01_01.py b/scripts/object/tangible/wearables/necklace/item_necklace_set_medic_utility_a_01_01.py new file mode 100644 index 00000000..95b05680 --- /dev/null +++ b/scripts/object/tangible/wearables/necklace/item_necklace_set_medic_utility_a_01_01.py @@ -0,0 +1,18 @@ +import sys + +def setup(core, object): + object.setStfFilename('static_item_n') + object.setStfName('item_necklace_set_medic_utility_a_01_01') + object.setDetailFilename('static_item_d') + object.setDetailName('item_necklace_set_medic_utility_a_01_01') + object.setStringAttribute('class_required', 'Medic') + object.setIntAttribute('required_combat_level', 85) + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_cooldown_line_me_evasion', 6) + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_freeshot_me_heal', 1) + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:fast_attack_line_me_heal', 2) + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:fast_attack_line_me_revive', 1) + object.setStringAttribute('@set_bonus:piece_bonus_count_3', '@set_bonus:set_medic_utility_a_1') + object.setStringAttribute('@set_bonus:piece_bonus_count_4', '@set_bonus:set_medic_utility_a_2') + object.setStringAttribute('@set_bonus:piece_bonus_count_5', '@set_bonus:set_medic_utility_a_3') + object.setAttachment('setBonus', 'set_medic_utility_a') + return \ No newline at end of file diff --git a/scripts/object/tangible/wearables/necklace/item_necklace_set_medic_utility_b_01_01.py b/scripts/object/tangible/wearables/necklace/item_necklace_set_medic_utility_b_01_01.py new file mode 100644 index 00000000..ca854c4a --- /dev/null +++ b/scripts/object/tangible/wearables/necklace/item_necklace_set_medic_utility_b_01_01.py @@ -0,0 +1,17 @@ +import sys + +def setup(core, object): + object.setStfFilename('static_item_n') + object.setStfName('item_necklace_set_medic_utility_b_01_01') + object.setDetailFilename('static_item_d') + object.setDetailName('item_necklace_set_medic_utility_b_01_01') + object.setStringAttribute('class_required', 'Medic') + object.setIntAttribute('required_combat_level', 85) + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_cooldown_line_me_dot', 2) + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_freeshot_me_debuff', 1) + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:fast_attack_line_me_debuff', 1) + object.setStringAttribute('@set_bonus:piece_bonus_count_3', '@set_bonus:set_medic_utility_b_1') + object.setStringAttribute('@set_bonus:piece_bonus_count_4', '@set_bonus:set_medic_utility_b_2') + object.setStringAttribute('@set_bonus:piece_bonus_count_5', '@set_bonus:set_medic_utility_b_3') + object.setAttachment('setBonus', 'set_medic_utility_b') + return \ No newline at end of file diff --git a/scripts/object/tangible/wearables/necklace/item_necklace_set_officer_dps_01_01.py b/scripts/object/tangible/wearables/necklace/item_necklace_set_officer_dps_01_01.py new file mode 100644 index 00000000..dfc931a7 --- /dev/null +++ b/scripts/object/tangible/wearables/necklace/item_necklace_set_officer_dps_01_01.py @@ -0,0 +1,19 @@ +import sys + +def setup(core, object): + object.setStfFilename('static_item_n') + object.setStfName('item_necklace_set_officer_dps_01_01') + object.setDetailFilename('static_item_d') + object.setDetailName('item_necklace_set_officer_dps_01_01') + object.setStringAttribute('class_required', 'Officer') + object.setIntAttribute('required_combat_level', 85) + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_action_line_of_paint', 1) + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_action_line_of_sure', 1) + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_cooldown_line_of_paint', 2) + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_cooldown_line_of_sure', 1) + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_freeshot_of_sure', 1) + object.setStringAttribute('@set_bonus:piece_bonus_count_3', '@set_bonus:set_bonus_officer_dps_1') + object.setStringAttribute('@set_bonus:piece_bonus_count_4', '@set_bonus:set_bonus_officer_dps_2') + object.setStringAttribute('@set_bonus:piece_bonus_count_5', '@set_bonus:set_bonus_officer_dps_3') + object.setAttachment('setBonus', 'set_bonus_officer_dps') + return \ No newline at end of file diff --git a/scripts/object/tangible/wearables/necklace/item_necklace_set_officer_utility_a_01_01.py b/scripts/object/tangible/wearables/necklace/item_necklace_set_officer_utility_a_01_01.py new file mode 100644 index 00000000..90c155f0 --- /dev/null +++ b/scripts/object/tangible/wearables/necklace/item_necklace_set_officer_utility_a_01_01.py @@ -0,0 +1,19 @@ +import sys + +def setup(core, object): + object.setStfFilename('static_item_n') + object.setStfName('item_necklace_set_officer_utility_a_01_01') + object.setDetailFilename('static_item_d') + object.setDetailName('item_necklace_set_officer_utility_a_01_01') + object.setStringAttribute('class_required', 'Officer') + object.setIntAttribute('required_combat_level', 85) + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:cooldown_percent_of_group_buff', 4) + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:fast_attack_line_of_heal', 1) + # object.setIntAttribute('cat_skill_mod_bonus.@stat_n:XXX', 1) Rallypoint Duration Increase / couldnt find the effect yet + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_action_line_of_group_buff', 2) + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_cooldown_line_of_purge', 3) + object.setStringAttribute('@set_bonus:piece_bonus_count_3', '@set_bonus:set_bonus_officer_utility_a_1') + object.setStringAttribute('@set_bonus:piece_bonus_count_4', '@set_bonus:set_bonus_officer_utility_a_2') + object.setStringAttribute('@set_bonus:piece_bonus_count_5', '@set_bonus:set_bonus_officer_utility_a_3') + object.setAttachment('setBonus', 'set_bonus_officer_utility_a') + return \ No newline at end of file diff --git a/scripts/object/tangible/wearables/necklace/item_necklace_set_officer_utility_b_01_01.py b/scripts/object/tangible/wearables/necklace/item_necklace_set_officer_utility_b_01_01.py new file mode 100644 index 00000000..b75eac31 --- /dev/null +++ b/scripts/object/tangible/wearables/necklace/item_necklace_set_officer_utility_b_01_01.py @@ -0,0 +1,16 @@ +import sys + +def setup(core, object): + object.setStfFilename('static_item_n') + object.setStfName('item_necklace_set_officer_utility_b_01_01') + object.setDetailFilename('static_item_d') + object.setDetailName('item_necklace_set_officer_utility_b_01_01') + object.setStringAttribute('class_required', 'Officer') + object.setIntAttribute('required_combat_level', 85) + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_action_line_of_aoe', 2) + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_freeshot_of_aoe', 2) + object.setStringAttribute('@set_bonus:piece_bonus_count_3', '@set_bonus:set_bonus_officer_utility_b_1') + object.setStringAttribute('@set_bonus:piece_bonus_count_4', '@set_bonus:set_bonus_officer_utility_b_2') + object.setStringAttribute('@set_bonus:piece_bonus_count_5', '@set_bonus:set_bonus_officer_utility_b_3') + object.setAttachment('setBonus', 'set_bonus_officer_utility_b') + return \ No newline at end of file diff --git a/scripts/object/tangible/wearables/necklace/item_necklace_set_smuggler_dps_01_01.py b/scripts/object/tangible/wearables/necklace/item_necklace_set_smuggler_dps_01_01.py new file mode 100644 index 00000000..fdfb2c15 --- /dev/null +++ b/scripts/object/tangible/wearables/necklace/item_necklace_set_smuggler_dps_01_01.py @@ -0,0 +1,18 @@ +import sys + +def setup(core, object): + object.setStfFilename('static_item_n') + object.setStfName('item_necklace_set_smuggler_dps_01_01') + object.setDetailFilename('static_item_d') + object.setDetailName('item_necklace_set_smuggler_dps_01_01') + object.setStringAttribute('class_required', 'Smuggler') + object.setIntAttribute('required_combat_level', 85) + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_action_line_sm_dm', 2) + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:fast_attack_line_sm_dm', 1) + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_freeshot_sm_dm', 2) + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_cooldown_line_sm_dm', 2) + object.setStringAttribute('@set_bonus:piece_bonus_count_3', '@set_bonus:set_bonus_smuggler_dps_1') + object.setStringAttribute('@set_bonus:piece_bonus_count_4', '@set_bonus:set_bonus_smuggler_dps_2') + object.setStringAttribute('@set_bonus:piece_bonus_count_5', '@set_bonus:set_bonus_smuggler_dps_3') + object.setAttachment('setBonus', 'set_bonus_smuggler_dps') + return \ No newline at end of file diff --git a/scripts/object/tangible/wearables/necklace/item_necklace_set_smuggler_utility_a_01_01.py b/scripts/object/tangible/wearables/necklace/item_necklace_set_smuggler_utility_a_01_01.py new file mode 100644 index 00000000..2e7a85d0 --- /dev/null +++ b/scripts/object/tangible/wearables/necklace/item_necklace_set_smuggler_utility_a_01_01.py @@ -0,0 +1,18 @@ +import sys + +def setup(core, object): + object.setStfFilename('static_item_n') + object.setStfName('item_necklace_set_smuggler_utility_a_01_01') + object.setDetailFilename('static_item_d') + object.setDetailName('item_necklace_set_smuggler_utility_a_01_01') + object.setStringAttribute('class_required', 'Smuggler') + object.setIntAttribute('required_combat_level', 85) + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:bh_dire_snare', 7) + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_cooldown_line_sm_dm_cc', 1) + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_freeshot_sm_dm_cc', 2) + object.setIntAttribute('cat_stat_mod_bonus.@stat_n:luck_modified', 30) + object.setStringAttribute('@set_bonus:piece_bonus_count_3', '@set_bonus:set_smuggler_utility_a_1') + object.setStringAttribute('@set_bonus:piece_bonus_count_4', '@set_bonus:set_smuggler_utility_a_2') + object.setStringAttribute('@set_bonus:piece_bonus_count_5', '@set_bonus:set_smuggler_utility_a_3') + object.setAttachment('setBonus', 'set_smuggler_utility_a') + return \ No newline at end of file diff --git a/scripts/object/tangible/wearables/necklace/item_necklace_set_smuggler_utility_b_01_01.py b/scripts/object/tangible/wearables/necklace/item_necklace_set_smuggler_utility_b_01_01.py new file mode 100644 index 00000000..bda69a67 --- /dev/null +++ b/scripts/object/tangible/wearables/necklace/item_necklace_set_smuggler_utility_b_01_01.py @@ -0,0 +1,16 @@ +import sys + +def setup(core, object): + object.setStfFilename('static_item_n') + object.setStfName('item_necklace_set_smuggler_utility_b_01_01') + object.setDetailFilename('static_item_d') + object.setDetailName('item_necklace_set_smuggler_utility_b_01_01') + object.setStringAttribute('class_required', 'Smuggler') + object.setIntAttribute('required_combat_level', 85) + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_cooldown_line_sm_false_hope', 2) + object.setIntAttribute('cat_stat_mod_bonus.@stat_n:luck_modified', 30) + object.setStringAttribute('@set_bonus:piece_bonus_count_3', '@set_bonus:set_smuggler_utility_b_1') + object.setStringAttribute('@set_bonus:piece_bonus_count_4', '@set_bonus:set_smuggler_utility_b_2') + object.setStringAttribute('@set_bonus:piece_bonus_count_5', '@set_bonus:set_smuggler_utility_b_3') + object.setAttachment('setBonus', 'set_smuggler_utility_b') + return \ No newline at end of file diff --git a/scripts/object/tangible/wearables/necklace/item_necklace_set_spy_dps_01_01.py b/scripts/object/tangible/wearables/necklace/item_necklace_set_spy_dps_01_01.py new file mode 100644 index 00000000..2cda8727 --- /dev/null +++ b/scripts/object/tangible/wearables/necklace/item_necklace_set_spy_dps_01_01.py @@ -0,0 +1,19 @@ +import sys + +def setup(core, object): + object.setStfFilename('static_item_n') + object.setStfName('item_necklace_set_spy_dps_01_01') + object.setDetailFilename('static_item_d') + object.setDetailName('item_necklace_set_spy_dps_01_01') + object.setIntAttribute('required_combat_level', 85) + object.setStringAttribute('class_required', 'Spy') + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_action_line_sp_dm', 2) + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_action_line_sp_dot', 2) + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_cooldown_line_sp_dm', 1) + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_freeshot_sp_dm', 1) + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:fast_attack_line_sp_dm', 2) + object.setStringAttribute('@set_bonus:piece_bonus_count_3', '@set_bonus:set_bonus_spy_dps_1') + object.setStringAttribute('@set_bonus:piece_bonus_count_4', '@set_bonus:set_bonus_spy_dps_2') + object.setStringAttribute('@set_bonus:piece_bonus_count_5', '@set_bonus:set_bonus_spy_dps_3') + object.setAttachment('setBonus', 'set_bonus_spy_dps') + return \ No newline at end of file diff --git a/scripts/object/tangible/wearables/necklace/item_necklace_set_spy_utility_a_01_01.py b/scripts/object/tangible/wearables/necklace/item_necklace_set_spy_utility_a_01_01.py new file mode 100644 index 00000000..405ed693 --- /dev/null +++ b/scripts/object/tangible/wearables/necklace/item_necklace_set_spy_utility_a_01_01.py @@ -0,0 +1,18 @@ +import sys + +def setup(core, object): + object.setStfFilename('static_item_n') + object.setStfName('item_necklace_set_spy_utility_a_01_01') + object.setDetailFilename('static_item_d') + object.setDetailName('item_necklace_set_spy_utility_a_01_01') + object.setIntAttribute('required_combat_level', 85) + object.setStringAttribute('class_required', 'Spy') + object.setIntAttribute('cat_stat_mod_bonus.@stat_n:strength_modified', 25) + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:fast_attack_line_sp_smoke', 1) + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_duration_sp_preparation', 1) + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_cooldown_line_sp_preparation', 6) + object.setStringAttribute('@set_bonus:piece_bonus_count_3', '@set_bonus:set_bonus_spy_utility_a_1') + object.setStringAttribute('@set_bonus:piece_bonus_count_4', '@set_bonus:set_bonus_spy_utility_a_2') + object.setStringAttribute('@set_bonus:piece_bonus_count_5', '@set_bonus:set_bonus_spy_utility_a_3') + object.setAttachment('setBonus', 'set_bonus_spy_utility_a') + return diff --git a/scripts/object/tangible/wearables/necklace/item_necklace_set_spy_utility_b_01_01.py b/scripts/object/tangible/wearables/necklace/item_necklace_set_spy_utility_b_01_01.py new file mode 100644 index 00000000..8345b02a --- /dev/null +++ b/scripts/object/tangible/wearables/necklace/item_necklace_set_spy_utility_b_01_01.py @@ -0,0 +1,17 @@ +import sys + +def setup(core, object): + object.setStfFilename('static_item_n') + object.setStfName('item_necklace_set_spy_utility_b_01_01') + object.setDetailFilename('static_item_d') + object.setDetailName('item_necklace_set_spy_utility_b_01_01') + object.setIntAttribute('required_combat_level', 85) + object.setStringAttribute('class_required', 'Spy') + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_strikethrough_chance', 2) + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_action_all', 1) + object.setIntAttribute('cat_stat_mod_bonus.@stat_n:luck_modified', 50) + object.setStringAttribute('@set_bonus:piece_bonus_count_3', '@set_bonus:set_bonus_spy_utility_b_1') + object.setStringAttribute('@set_bonus:piece_bonus_count_4', '@set_bonus:set_bonus_spy_utility_b_2') + object.setStringAttribute('@set_bonus:piece_bonus_count_5', '@set_bonus:set_bonus_spy_utility_b_3') + object.setAttachment('setBonus', 'set_bonus_spy_utility_b') + return \ No newline at end of file diff --git a/scripts/object/tangible/wearables/necklace/item_spy_pendant_01_02.py b/scripts/object/tangible/wearables/necklace/item_spy_pendant_01_02.py new file mode 100644 index 00000000..f46a52b8 --- /dev/null +++ b/scripts/object/tangible/wearables/necklace/item_spy_pendant_01_02.py @@ -0,0 +1,11 @@ +import sys + +def setup(core, object): + object.setStfFilename('static_item_n') + object.setStfName('item_spy_pendant_01_02') + object.setDetailFilename('static_item_d') + object.setDetailName('item_spy_pendant_01_02') + object.setIntAttribute('cat_stat_mod_bonus.@stat_n:agility_modified', 12) + object.setIntAttribute('cat_stat_mod_bonus.@stat_n:precision_modified', 12) + object.setStringAttribute('class_required', 'Spy') + return diff --git a/scripts/object/tangible/wearables/necklace/item_trader_pendant_01_02.py b/scripts/object/tangible/wearables/necklace/item_trader_pendant_01_02.py new file mode 100644 index 00000000..48f0b1b9 --- /dev/null +++ b/scripts/object/tangible/wearables/necklace/item_trader_pendant_01_02.py @@ -0,0 +1,11 @@ +import sys + +def setup(core, object): + object.setStfFilename('static_item_n') + object.setStfName('item_trader_pendant_01_02') + object.setDetailFilename('static_item_d') + object.setDetailName('item_trader_pendant_01_02') + object.setIntAttribute('cat_stat_mod_bonus.@stat_n:general_assembly', 5) + object.setIntAttribute('cat_stat_mod_bonus.@stat_n:hiring', 3) + object.setStringAttribute('class_required', 'Trader') + return diff --git a/scripts/object/tangible/wearables/necklace/ith_necklace_ace_pilot_empire_f.py b/scripts/object/tangible/wearables/necklace/ith_necklace_ace_pilot_empire_f.py index ccad8904..b89922ca 100644 --- a/scripts/object/tangible/wearables/necklace/ith_necklace_ace_pilot_empire_f.py +++ b/scripts/object/tangible/wearables/necklace/ith_necklace_ace_pilot_empire_f.py @@ -1,4 +1,7 @@ import sys def setup(core, object): + object.setStringAttribute('condition', '100/100') + object.setIntAttribute('volume', 1) + return \ No newline at end of file diff --git a/scripts/object/tangible/wearables/necklace/ith_necklace_ace_pilot_empire_m.py b/scripts/object/tangible/wearables/necklace/ith_necklace_ace_pilot_empire_m.py index ccad8904..b89922ca 100644 --- a/scripts/object/tangible/wearables/necklace/ith_necklace_ace_pilot_empire_m.py +++ b/scripts/object/tangible/wearables/necklace/ith_necklace_ace_pilot_empire_m.py @@ -1,4 +1,7 @@ import sys def setup(core, object): + object.setStringAttribute('condition', '100/100') + object.setIntAttribute('volume', 1) + return \ No newline at end of file diff --git a/scripts/object/tangible/wearables/necklace/ith_necklace_ace_pilot_neutral_f.py b/scripts/object/tangible/wearables/necklace/ith_necklace_ace_pilot_neutral_f.py index ccad8904..b89922ca 100644 --- a/scripts/object/tangible/wearables/necklace/ith_necklace_ace_pilot_neutral_f.py +++ b/scripts/object/tangible/wearables/necklace/ith_necklace_ace_pilot_neutral_f.py @@ -1,4 +1,7 @@ import sys def setup(core, object): + object.setStringAttribute('condition', '100/100') + object.setIntAttribute('volume', 1) + return \ No newline at end of file diff --git a/scripts/object/tangible/wearables/necklace/ith_necklace_ace_pilot_neutral_m.py b/scripts/object/tangible/wearables/necklace/ith_necklace_ace_pilot_neutral_m.py index ccad8904..b89922ca 100644 --- a/scripts/object/tangible/wearables/necklace/ith_necklace_ace_pilot_neutral_m.py +++ b/scripts/object/tangible/wearables/necklace/ith_necklace_ace_pilot_neutral_m.py @@ -1,4 +1,7 @@ import sys def setup(core, object): + object.setStringAttribute('condition', '100/100') + object.setIntAttribute('volume', 1) + return \ No newline at end of file diff --git a/scripts/object/tangible/wearables/necklace/ith_necklace_ace_pilot_rebel_f.py b/scripts/object/tangible/wearables/necklace/ith_necklace_ace_pilot_rebel_f.py index ccad8904..b89922ca 100644 --- a/scripts/object/tangible/wearables/necklace/ith_necklace_ace_pilot_rebel_f.py +++ b/scripts/object/tangible/wearables/necklace/ith_necklace_ace_pilot_rebel_f.py @@ -1,4 +1,7 @@ import sys def setup(core, object): + object.setStringAttribute('condition', '100/100') + object.setIntAttribute('volume', 1) + return \ No newline at end of file diff --git a/scripts/object/tangible/wearables/necklace/ith_necklace_ace_pilot_rebel_m.py b/scripts/object/tangible/wearables/necklace/ith_necklace_ace_pilot_rebel_m.py index ccad8904..b89922ca 100644 --- a/scripts/object/tangible/wearables/necklace/ith_necklace_ace_pilot_rebel_m.py +++ b/scripts/object/tangible/wearables/necklace/ith_necklace_ace_pilot_rebel_m.py @@ -1,4 +1,7 @@ import sys def setup(core, object): + object.setStringAttribute('condition', '100/100') + object.setIntAttribute('volume', 1) + return \ No newline at end of file diff --git a/scripts/object/tangible/wearables/necklace/ith_necklace_rodian_safari_f.py b/scripts/object/tangible/wearables/necklace/ith_necklace_rodian_safari_f.py index ccad8904..b89922ca 100644 --- a/scripts/object/tangible/wearables/necklace/ith_necklace_rodian_safari_f.py +++ b/scripts/object/tangible/wearables/necklace/ith_necklace_rodian_safari_f.py @@ -1,4 +1,7 @@ import sys def setup(core, object): + object.setStringAttribute('condition', '100/100') + object.setIntAttribute('volume', 1) + return \ No newline at end of file diff --git a/scripts/object/tangible/wearables/necklace/ith_necklace_rodian_safari_m.py b/scripts/object/tangible/wearables/necklace/ith_necklace_rodian_safari_m.py index ccad8904..b89922ca 100644 --- a/scripts/object/tangible/wearables/necklace/ith_necklace_rodian_safari_m.py +++ b/scripts/object/tangible/wearables/necklace/ith_necklace_rodian_safari_m.py @@ -1,4 +1,7 @@ import sys def setup(core, object): + object.setStringAttribute('condition', '100/100') + object.setIntAttribute('volume', 1) + return \ No newline at end of file diff --git a/scripts/object/tangible/wearables/necklace/ith_necklace_trando_scale_of_honor_f.py b/scripts/object/tangible/wearables/necklace/ith_necklace_trando_scale_of_honor_f.py index ccad8904..b89922ca 100644 --- a/scripts/object/tangible/wearables/necklace/ith_necklace_trando_scale_of_honor_f.py +++ b/scripts/object/tangible/wearables/necklace/ith_necklace_trando_scale_of_honor_f.py @@ -1,4 +1,7 @@ import sys def setup(core, object): + object.setStringAttribute('condition', '100/100') + object.setIntAttribute('volume', 1) + return \ No newline at end of file diff --git a/scripts/object/tangible/wearables/necklace/ith_necklace_trando_scale_of_honor_m.py b/scripts/object/tangible/wearables/necklace/ith_necklace_trando_scale_of_honor_m.py index ccad8904..b89922ca 100644 --- a/scripts/object/tangible/wearables/necklace/ith_necklace_trando_scale_of_honor_m.py +++ b/scripts/object/tangible/wearables/necklace/ith_necklace_trando_scale_of_honor_m.py @@ -1,4 +1,7 @@ import sys def setup(core, object): + object.setStringAttribute('condition', '100/100') + object.setIntAttribute('volume', 1) + return \ No newline at end of file diff --git a/scripts/object/tangible/wearables/necklace/necklace_ace_pilot_empire.py b/scripts/object/tangible/wearables/necklace/necklace_ace_pilot_empire.py index ccad8904..b89922ca 100644 --- a/scripts/object/tangible/wearables/necklace/necklace_ace_pilot_empire.py +++ b/scripts/object/tangible/wearables/necklace/necklace_ace_pilot_empire.py @@ -1,4 +1,7 @@ import sys def setup(core, object): + object.setStringAttribute('condition', '100/100') + object.setIntAttribute('volume', 1) + return \ No newline at end of file diff --git a/scripts/object/tangible/wearables/necklace/necklace_ace_pilot_empire_f.py b/scripts/object/tangible/wearables/necklace/necklace_ace_pilot_empire_f.py index ccad8904..b89922ca 100644 --- a/scripts/object/tangible/wearables/necklace/necklace_ace_pilot_empire_f.py +++ b/scripts/object/tangible/wearables/necklace/necklace_ace_pilot_empire_f.py @@ -1,4 +1,7 @@ import sys def setup(core, object): + object.setStringAttribute('condition', '100/100') + object.setIntAttribute('volume', 1) + return \ No newline at end of file diff --git a/scripts/object/tangible/wearables/necklace/necklace_ace_pilot_empire_m.py b/scripts/object/tangible/wearables/necklace/necklace_ace_pilot_empire_m.py index ccad8904..b89922ca 100644 --- a/scripts/object/tangible/wearables/necklace/necklace_ace_pilot_empire_m.py +++ b/scripts/object/tangible/wearables/necklace/necklace_ace_pilot_empire_m.py @@ -1,4 +1,7 @@ import sys def setup(core, object): + object.setStringAttribute('condition', '100/100') + object.setIntAttribute('volume', 1) + return \ No newline at end of file diff --git a/scripts/object/tangible/wearables/necklace/necklace_ace_pilot_empire_wke_f.py b/scripts/object/tangible/wearables/necklace/necklace_ace_pilot_empire_wke_f.py index ccad8904..b89922ca 100644 --- a/scripts/object/tangible/wearables/necklace/necklace_ace_pilot_empire_wke_f.py +++ b/scripts/object/tangible/wearables/necklace/necklace_ace_pilot_empire_wke_f.py @@ -1,4 +1,7 @@ import sys def setup(core, object): + object.setStringAttribute('condition', '100/100') + object.setIntAttribute('volume', 1) + return \ No newline at end of file diff --git a/scripts/object/tangible/wearables/necklace/necklace_ace_pilot_empire_wke_m.py b/scripts/object/tangible/wearables/necklace/necklace_ace_pilot_empire_wke_m.py index ccad8904..b89922ca 100644 --- a/scripts/object/tangible/wearables/necklace/necklace_ace_pilot_empire_wke_m.py +++ b/scripts/object/tangible/wearables/necklace/necklace_ace_pilot_empire_wke_m.py @@ -1,4 +1,7 @@ import sys def setup(core, object): + object.setStringAttribute('condition', '100/100') + object.setIntAttribute('volume', 1) + return \ No newline at end of file diff --git a/scripts/object/tangible/wearables/necklace/necklace_ace_pilot_neutral.py b/scripts/object/tangible/wearables/necklace/necklace_ace_pilot_neutral.py index ccad8904..b89922ca 100644 --- a/scripts/object/tangible/wearables/necklace/necklace_ace_pilot_neutral.py +++ b/scripts/object/tangible/wearables/necklace/necklace_ace_pilot_neutral.py @@ -1,4 +1,7 @@ import sys def setup(core, object): + object.setStringAttribute('condition', '100/100') + object.setIntAttribute('volume', 1) + return \ No newline at end of file diff --git a/scripts/object/tangible/wearables/necklace/necklace_ace_pilot_neutral_f.py b/scripts/object/tangible/wearables/necklace/necklace_ace_pilot_neutral_f.py index ccad8904..b89922ca 100644 --- a/scripts/object/tangible/wearables/necklace/necklace_ace_pilot_neutral_f.py +++ b/scripts/object/tangible/wearables/necklace/necklace_ace_pilot_neutral_f.py @@ -1,4 +1,7 @@ import sys def setup(core, object): + object.setStringAttribute('condition', '100/100') + object.setIntAttribute('volume', 1) + return \ No newline at end of file diff --git a/scripts/object/tangible/wearables/necklace/necklace_ace_pilot_neutral_m.py b/scripts/object/tangible/wearables/necklace/necklace_ace_pilot_neutral_m.py index ccad8904..b89922ca 100644 --- a/scripts/object/tangible/wearables/necklace/necklace_ace_pilot_neutral_m.py +++ b/scripts/object/tangible/wearables/necklace/necklace_ace_pilot_neutral_m.py @@ -1,4 +1,7 @@ import sys def setup(core, object): + object.setStringAttribute('condition', '100/100') + object.setIntAttribute('volume', 1) + return \ No newline at end of file diff --git a/scripts/object/tangible/wearables/necklace/necklace_ace_pilot_neutral_wke_f.py b/scripts/object/tangible/wearables/necklace/necklace_ace_pilot_neutral_wke_f.py index ccad8904..b89922ca 100644 --- a/scripts/object/tangible/wearables/necklace/necklace_ace_pilot_neutral_wke_f.py +++ b/scripts/object/tangible/wearables/necklace/necklace_ace_pilot_neutral_wke_f.py @@ -1,4 +1,7 @@ import sys def setup(core, object): + object.setStringAttribute('condition', '100/100') + object.setIntAttribute('volume', 1) + return \ No newline at end of file diff --git a/scripts/object/tangible/wearables/necklace/necklace_ace_pilot_neutral_wke_m.py b/scripts/object/tangible/wearables/necklace/necklace_ace_pilot_neutral_wke_m.py index ccad8904..b89922ca 100644 --- a/scripts/object/tangible/wearables/necklace/necklace_ace_pilot_neutral_wke_m.py +++ b/scripts/object/tangible/wearables/necklace/necklace_ace_pilot_neutral_wke_m.py @@ -1,4 +1,7 @@ import sys def setup(core, object): + object.setStringAttribute('condition', '100/100') + object.setIntAttribute('volume', 1) + return \ No newline at end of file diff --git a/scripts/object/tangible/wearables/necklace/necklace_ace_pilot_rebel.py b/scripts/object/tangible/wearables/necklace/necklace_ace_pilot_rebel.py index ccad8904..b89922ca 100644 --- a/scripts/object/tangible/wearables/necklace/necklace_ace_pilot_rebel.py +++ b/scripts/object/tangible/wearables/necklace/necklace_ace_pilot_rebel.py @@ -1,4 +1,7 @@ import sys def setup(core, object): + object.setStringAttribute('condition', '100/100') + object.setIntAttribute('volume', 1) + return \ No newline at end of file diff --git a/scripts/object/tangible/wearables/necklace/necklace_ace_pilot_rebel_f.py b/scripts/object/tangible/wearables/necklace/necklace_ace_pilot_rebel_f.py index ccad8904..b89922ca 100644 --- a/scripts/object/tangible/wearables/necklace/necklace_ace_pilot_rebel_f.py +++ b/scripts/object/tangible/wearables/necklace/necklace_ace_pilot_rebel_f.py @@ -1,4 +1,7 @@ import sys def setup(core, object): + object.setStringAttribute('condition', '100/100') + object.setIntAttribute('volume', 1) + return \ No newline at end of file diff --git a/scripts/object/tangible/wearables/necklace/necklace_ace_pilot_rebel_m.py b/scripts/object/tangible/wearables/necklace/necklace_ace_pilot_rebel_m.py index ccad8904..b89922ca 100644 --- a/scripts/object/tangible/wearables/necklace/necklace_ace_pilot_rebel_m.py +++ b/scripts/object/tangible/wearables/necklace/necklace_ace_pilot_rebel_m.py @@ -1,4 +1,7 @@ import sys def setup(core, object): + object.setStringAttribute('condition', '100/100') + object.setIntAttribute('volume', 1) + return \ No newline at end of file diff --git a/scripts/object/tangible/wearables/necklace/necklace_ace_pilot_rebel_wke_f.py b/scripts/object/tangible/wearables/necklace/necklace_ace_pilot_rebel_wke_f.py index ccad8904..b89922ca 100644 --- a/scripts/object/tangible/wearables/necklace/necklace_ace_pilot_rebel_wke_f.py +++ b/scripts/object/tangible/wearables/necklace/necklace_ace_pilot_rebel_wke_f.py @@ -1,4 +1,7 @@ import sys def setup(core, object): + object.setStringAttribute('condition', '100/100') + object.setIntAttribute('volume', 1) + return \ No newline at end of file diff --git a/scripts/object/tangible/wearables/necklace/necklace_ace_pilot_rebel_wke_m.py b/scripts/object/tangible/wearables/necklace/necklace_ace_pilot_rebel_wke_m.py index ccad8904..b89922ca 100644 --- a/scripts/object/tangible/wearables/necklace/necklace_ace_pilot_rebel_wke_m.py +++ b/scripts/object/tangible/wearables/necklace/necklace_ace_pilot_rebel_wke_m.py @@ -1,4 +1,7 @@ import sys def setup(core, object): + object.setStringAttribute('condition', '100/100') + object.setIntAttribute('volume', 1) + return \ No newline at end of file diff --git a/scripts/object/tangible/wearables/necklace/necklace_lifeday.py b/scripts/object/tangible/wearables/necklace/necklace_lifeday.py index ccad8904..b89922ca 100644 --- a/scripts/object/tangible/wearables/necklace/necklace_lifeday.py +++ b/scripts/object/tangible/wearables/necklace/necklace_lifeday.py @@ -1,4 +1,7 @@ import sys def setup(core, object): + object.setStringAttribute('condition', '100/100') + object.setIntAttribute('volume', 1) + return \ No newline at end of file diff --git a/scripts/object/tangible/wearables/necklace/necklace_medallion_black_sun.py b/scripts/object/tangible/wearables/necklace/necklace_medallion_black_sun.py index ccad8904..b89922ca 100644 --- a/scripts/object/tangible/wearables/necklace/necklace_medallion_black_sun.py +++ b/scripts/object/tangible/wearables/necklace/necklace_medallion_black_sun.py @@ -1,4 +1,7 @@ import sys def setup(core, object): + object.setStringAttribute('condition', '100/100') + object.setIntAttribute('volume', 1) + return \ No newline at end of file diff --git a/scripts/object/tangible/wearables/necklace/necklace_primitive_01.py b/scripts/object/tangible/wearables/necklace/necklace_primitive_01.py index ccad8904..b89922ca 100644 --- a/scripts/object/tangible/wearables/necklace/necklace_primitive_01.py +++ b/scripts/object/tangible/wearables/necklace/necklace_primitive_01.py @@ -1,4 +1,7 @@ import sys def setup(core, object): + object.setStringAttribute('condition', '100/100') + object.setIntAttribute('volume', 1) + return \ No newline at end of file diff --git a/scripts/object/tangible/wearables/necklace/necklace_primitive_03.py b/scripts/object/tangible/wearables/necklace/necklace_primitive_03.py index ccad8904..b89922ca 100644 --- a/scripts/object/tangible/wearables/necklace/necklace_primitive_03.py +++ b/scripts/object/tangible/wearables/necklace/necklace_primitive_03.py @@ -1,4 +1,7 @@ import sys def setup(core, object): + object.setStringAttribute('condition', '100/100') + object.setIntAttribute('volume', 1) + return \ No newline at end of file diff --git a/scripts/object/tangible/wearables/necklace/necklace_primitive_04.py b/scripts/object/tangible/wearables/necklace/necklace_primitive_04.py index ccad8904..b89922ca 100644 --- a/scripts/object/tangible/wearables/necklace/necklace_primitive_04.py +++ b/scripts/object/tangible/wearables/necklace/necklace_primitive_04.py @@ -1,4 +1,7 @@ import sys def setup(core, object): + object.setStringAttribute('condition', '100/100') + object.setIntAttribute('volume', 1) + return \ No newline at end of file diff --git a/scripts/object/tangible/wearables/necklace/necklace_rodian_safari.py b/scripts/object/tangible/wearables/necklace/necklace_rodian_safari.py index ccad8904..b89922ca 100644 --- a/scripts/object/tangible/wearables/necklace/necklace_rodian_safari.py +++ b/scripts/object/tangible/wearables/necklace/necklace_rodian_safari.py @@ -1,4 +1,7 @@ import sys def setup(core, object): + object.setStringAttribute('condition', '100/100') + object.setIntAttribute('volume', 1) + return \ No newline at end of file diff --git a/scripts/object/tangible/wearables/necklace/necklace_rodian_safari_f.py b/scripts/object/tangible/wearables/necklace/necklace_rodian_safari_f.py index ccad8904..b89922ca 100644 --- a/scripts/object/tangible/wearables/necklace/necklace_rodian_safari_f.py +++ b/scripts/object/tangible/wearables/necklace/necklace_rodian_safari_f.py @@ -1,4 +1,7 @@ import sys def setup(core, object): + object.setStringAttribute('condition', '100/100') + object.setIntAttribute('volume', 1) + return \ No newline at end of file diff --git a/scripts/object/tangible/wearables/necklace/necklace_rodian_safari_m.py b/scripts/object/tangible/wearables/necklace/necklace_rodian_safari_m.py index ccad8904..b89922ca 100644 --- a/scripts/object/tangible/wearables/necklace/necklace_rodian_safari_m.py +++ b/scripts/object/tangible/wearables/necklace/necklace_rodian_safari_m.py @@ -1,4 +1,7 @@ import sys def setup(core, object): + object.setStringAttribute('condition', '100/100') + object.setIntAttribute('volume', 1) + return \ No newline at end of file diff --git a/scripts/object/tangible/wearables/necklace/necklace_rodian_safari_wke_f.py b/scripts/object/tangible/wearables/necklace/necklace_rodian_safari_wke_f.py index ccad8904..b89922ca 100644 --- a/scripts/object/tangible/wearables/necklace/necklace_rodian_safari_wke_f.py +++ b/scripts/object/tangible/wearables/necklace/necklace_rodian_safari_wke_f.py @@ -1,4 +1,7 @@ import sys def setup(core, object): + object.setStringAttribute('condition', '100/100') + object.setIntAttribute('volume', 1) + return \ No newline at end of file diff --git a/scripts/object/tangible/wearables/necklace/necklace_rodian_safari_wke_m.py b/scripts/object/tangible/wearables/necklace/necklace_rodian_safari_wke_m.py index ccad8904..b89922ca 100644 --- a/scripts/object/tangible/wearables/necklace/necklace_rodian_safari_wke_m.py +++ b/scripts/object/tangible/wearables/necklace/necklace_rodian_safari_wke_m.py @@ -1,4 +1,7 @@ import sys def setup(core, object): + object.setStringAttribute('condition', '100/100') + object.setIntAttribute('volume', 1) + return \ No newline at end of file diff --git a/scripts/object/tangible/wearables/necklace/necklace_trando_scale_of_honor_f.py b/scripts/object/tangible/wearables/necklace/necklace_trando_scale_of_honor_f.py index ccad8904..b89922ca 100644 --- a/scripts/object/tangible/wearables/necklace/necklace_trando_scale_of_honor_f.py +++ b/scripts/object/tangible/wearables/necklace/necklace_trando_scale_of_honor_f.py @@ -1,4 +1,7 @@ import sys def setup(core, object): + object.setStringAttribute('condition', '100/100') + object.setIntAttribute('volume', 1) + return \ No newline at end of file diff --git a/scripts/object/tangible/wearables/necklace/necklace_trando_scale_of_honor_m.py b/scripts/object/tangible/wearables/necklace/necklace_trando_scale_of_honor_m.py index ccad8904..b89922ca 100644 --- a/scripts/object/tangible/wearables/necklace/necklace_trando_scale_of_honor_m.py +++ b/scripts/object/tangible/wearables/necklace/necklace_trando_scale_of_honor_m.py @@ -1,4 +1,7 @@ import sys def setup(core, object): + object.setStringAttribute('condition', '100/100') + object.setIntAttribute('volume', 1) + return \ No newline at end of file diff --git a/scripts/object/tangible/wearables/necklace/necklace_trando_scale_of_honor_wke_f.py b/scripts/object/tangible/wearables/necklace/necklace_trando_scale_of_honor_wke_f.py index ccad8904..b89922ca 100644 --- a/scripts/object/tangible/wearables/necklace/necklace_trando_scale_of_honor_wke_f.py +++ b/scripts/object/tangible/wearables/necklace/necklace_trando_scale_of_honor_wke_f.py @@ -1,4 +1,7 @@ import sys def setup(core, object): + object.setStringAttribute('condition', '100/100') + object.setIntAttribute('volume', 1) + return \ No newline at end of file diff --git a/scripts/object/tangible/wearables/necklace/necklace_trando_scale_of_honor_wke_m.py b/scripts/object/tangible/wearables/necklace/necklace_trando_scale_of_honor_wke_m.py index ccad8904..b89922ca 100644 --- a/scripts/object/tangible/wearables/necklace/necklace_trando_scale_of_honor_wke_m.py +++ b/scripts/object/tangible/wearables/necklace/necklace_trando_scale_of_honor_wke_m.py @@ -1,4 +1,7 @@ import sys def setup(core, object): + object.setStringAttribute('condition', '100/100') + object.setIntAttribute('volume', 1) + return \ No newline at end of file diff --git a/scripts/object/tangible/wearables/pants/item_smuggler_pants_02_01.py b/scripts/object/tangible/wearables/pants/item_smuggler_pants_02_01.py new file mode 100644 index 00000000..12b3bd30 --- /dev/null +++ b/scripts/object/tangible/wearables/pants/item_smuggler_pants_02_01.py @@ -0,0 +1,10 @@ +import sys + +def setup(core, object): + object.setStfFilename('static_item_n') + object.setStfName('item_smuggler_pants_02_01') + object.setDetailFilename('static_item_d') + object.setDetailName('item_smuggler_pants_02_01') + object.setIntAttribute('cat_stat_mod_bonus.@stat_n:agility_modified', 3) + object.setStringAttribute('class_required', 'Smuggler') + return \ No newline at end of file diff --git a/scripts/object/tangible/wearables/pants/item_spy_pants_02_01.py b/scripts/object/tangible/wearables/pants/item_spy_pants_02_01.py new file mode 100644 index 00000000..a1021bf4 --- /dev/null +++ b/scripts/object/tangible/wearables/pants/item_spy_pants_02_01.py @@ -0,0 +1,10 @@ +import sys + +def setup(core, object): + object.setStfFilename('static_item_n') + object.setStfName('item_spy_pants_02_01') + object.setDetailFilename('static_item_d') + object.setDetailName('item_spy_pants_02_01') + object.setIntAttribute('cat_stat_mod_bonus.@stat_n:agility_modified', 3) + object.setStringAttribute('class_required', 'Spy') + return \ No newline at end of file diff --git a/scripts/object/tangible/wearables/pants/pants_outbreak_prison_guard.py b/scripts/object/tangible/wearables/pants/pants_outbreak_prison_guard.py index ccad8904..b89922ca 100644 --- a/scripts/object/tangible/wearables/pants/pants_outbreak_prison_guard.py +++ b/scripts/object/tangible/wearables/pants/pants_outbreak_prison_guard.py @@ -1,4 +1,7 @@ import sys def setup(core, object): + object.setStringAttribute('condition', '100/100') + object.setIntAttribute('volume', 1) + return \ No newline at end of file diff --git a/scripts/object/tangible/wearables/ring/aakuan_ring.py b/scripts/object/tangible/wearables/ring/aakuan_ring.py index ccad8904..a7a9a10b 100644 --- a/scripts/object/tangible/wearables/ring/aakuan_ring.py +++ b/scripts/object/tangible/wearables/ring/aakuan_ring.py @@ -1,4 +1,6 @@ import sys def setup(core, object): + object.setAttachment('radial_filename', 'ring/unity') + object.setAttachment('objType', 'ring') return \ No newline at end of file diff --git a/scripts/object/tangible/wearables/ring/item_band_set_bh_dps_01_01.py b/scripts/object/tangible/wearables/ring/item_band_set_bh_dps_01_01.py new file mode 100644 index 00000000..90d0db77 --- /dev/null +++ b/scripts/object/tangible/wearables/ring/item_band_set_bh_dps_01_01.py @@ -0,0 +1,20 @@ +import sys + +def setup(core, object): + object.setAttachment('radial_filename', 'ring/unity') + object.setAttachment('objType', 'ring') + object.setStfFilename('static_item_n') + object.setStfName('item_band_set_bh_dps_01_01') + object.setDetailFilename('static_item_d') + object.setDetailName('item_band_set_bh_dps_01_01') + object.setIntAttribute('required_combat_level', 85) + object.setStringAttribute('class_required', 'Bounty Hunter') + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_action_line_dm', 1) + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_action_line_dm_crit', 1) + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_buff_duration_line_bh_return_fire', 1) + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_cooldown_line_dm', 1) + object.setStringAttribute('@set_bonus:piece_bonus_count_3', '@set_bonus:set_bonus_bh_dps_1') + object.setStringAttribute('@set_bonus:piece_bonus_count_4', '@set_bonus:set_bonus_bh_dps_2') + object.setStringAttribute('@set_bonus:piece_bonus_count_5', '@set_bonus:set_bonus_bh_dps_3) + object.setAttachment('setBonus', 'set_bonus_bh_dps') + return \ No newline at end of file diff --git a/scripts/object/tangible/wearables/ring/item_band_set_bh_utility_a_01_01.py b/scripts/object/tangible/wearables/ring/item_band_set_bh_utility_a_01_01.py new file mode 100644 index 00000000..ff5fc10c --- /dev/null +++ b/scripts/object/tangible/wearables/ring/item_band_set_bh_utility_a_01_01.py @@ -0,0 +1,18 @@ +import sys + +def setup(core, object): + object.setAttachment('radial_filename', 'ring/unity') + object.setAttachment('objType', 'ring') + object.setStfFilename('static_item_n') + object.setStfName('item_band_set_bh_utility_a_01_01') + object.setDetailFilename('static_item_d') + object.setDetailName('item_band_set_bh_utility_a_01_01') + object.setIntAttribute('required_combat_level', 85) + object.setStringAttribute('class_required', 'Bounty Hunter') + object.setIntAttribute('cat_stat_mod_bonus.@stat_n:precision_modified', 50) + object.setIntAttribute('cat_stat_mod_bonus.@stat_n:luck_modified', 30) + object.setStringAttribute('@set_bonus:piece_bonus_count_3', '@set_bonus:set_bonus_bh_utility_a_1') + object.setStringAttribute('@set_bonus:piece_bonus_count_4', '@set_bonus:set_bonus_bh_utility_a_2') + object.setStringAttribute('@set_bonus:piece_bonus_count_5', '@set_bonus:set_bonus_bh_utility_a_3') + object.setAttachment('setBonus', 'set_bonus_bh_utility_a') + return \ No newline at end of file diff --git a/scripts/object/tangible/wearables/ring/item_band_set_bh_utility_b_01_01.py b/scripts/object/tangible/wearables/ring/item_band_set_bh_utility_b_01_01.py new file mode 100644 index 00000000..4ec469c0 --- /dev/null +++ b/scripts/object/tangible/wearables/ring/item_band_set_bh_utility_b_01_01.py @@ -0,0 +1,19 @@ +import sys + +def setup(core, object): + object.setAttachment('radial_filename', 'ring/unity') + object.setAttachment('objType', 'ring') + object.setStfFilename('static_item_n') + object.setStfName('item_band_set_bh_utility_b_01_01') + object.setDetailFilename('static_item_d') + object.setDetailName('item_band_set_bh_utility_b_01_01') + object.setStringAttribute('class_required', 'Bounty Hunter') + object.setIntAttribute('required_combat_level', 85) + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:bh_dire_root', 1) + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:bh_dire_snare', 1) + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:fast_attack_line_dm_cc', 2) + object.setStringAttribute('@set_bonus:piece_bonus_count_3', '@set_bonus:set_bonus_bh_utility_b_1') + object.setStringAttribute('@set_bonus:piece_bonus_count_4', '@set_bonus:set_bonus_bh_utility_b_2') + object.setStringAttribute('@set_bonus:piece_bonus_count_5', '@set_bonus:set_bonus_bh_utility_b_3') + object.setAttachment('setBonus', 'set_bonus_bh_utility_b') + return \ No newline at end of file diff --git a/scripts/object/tangible/wearables/ring/item_band_set_commando_dps_01_01.py b/scripts/object/tangible/wearables/ring/item_band_set_commando_dps_01_01.py new file mode 100644 index 00000000..e0b35da0 --- /dev/null +++ b/scripts/object/tangible/wearables/ring/item_band_set_commando_dps_01_01.py @@ -0,0 +1,19 @@ +import sys + +def setup(core, object): + object.setAttachment('radial_filename', 'ring/unity') + object.setAttachment('objType', 'ring') + object.setStfFilename('static_item_n') + object.setStfName('item_band_set_commando_dps_01_01') + object.setDetailFilename('static_item_d') + object.setDetailName('item_band_set_commando_dps_01_01') + object.setIntAttribute('required_combat_level', 85) + object.setStringAttribute('class_required', 'Commando') + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:fast_attack_line_co_grenade', 2) + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_action_line_co_grenade', 3) + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_freeshot_co_grenade', 2) + object.setStringAttribute('@set_bonus:piece_bonus_count_3', '@set_bonus:set_bonus_commando_dps_1') + object.setStringAttribute('@set_bonus:piece_bonus_count_4', '@set_bonus:set_bonus_commando_dps_2') + object.setStringAttribute('@set_bonus:piece_bonus_count_5', '@set_bonus:set_bonus_commando_dps_3) + object.setAttachment('setBonus', 'set_bonus_commando_dps') + return \ No newline at end of file diff --git a/scripts/object/tangible/wearables/ring/item_band_set_commando_utility_a_01_01.py b/scripts/object/tangible/wearables/ring/item_band_set_commando_utility_a_01_01.py new file mode 100644 index 00000000..b43926e7 --- /dev/null +++ b/scripts/object/tangible/wearables/ring/item_band_set_commando_utility_a_01_01.py @@ -0,0 +1,19 @@ +import sys + +def setup(core, object): + object.setAttachment('radial_filename', 'ring/unity') + object.setAttachment('objType', 'ring') + object.setStfFilename('static_item_n') + object.setStfName('item_band_set_commando_utility_a_01_01') + object.setDetailFilename('static_item_d') + object.setDetailName('item_band_set_commando_utility_a_01_01') + object.setIntAttribute('required_combat_level', 85) + object.setStringAttribute('class_required', 'Commando') + object.setIntAttribute('cat_stat_mod_bonus.@stat_n:constitution_modified', 20) + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_block_chance', 2) + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:combat_block_value', 50) + object.setStringAttribute('@set_bonus:piece_bonus_count_3', '@set_bonus:set_bonus_commando_utility_a_1') + object.setStringAttribute('@set_bonus:piece_bonus_count_4', '@set_bonus:set_bonus_commando_utility_a_2') + object.setStringAttribute('@set_bonus:piece_bonus_count_5', '@set_bonus:set_bonus_commando_utility_a_3') + object.setAttachment('setBonus', 'set_bonus_commando_utility_a') + return \ No newline at end of file diff --git a/scripts/object/tangible/wearables/ring/item_band_set_commando_utility_b_01_01.py b/scripts/object/tangible/wearables/ring/item_band_set_commando_utility_b_01_01.py new file mode 100644 index 00000000..5620019d --- /dev/null +++ b/scripts/object/tangible/wearables/ring/item_band_set_commando_utility_b_01_01.py @@ -0,0 +1,19 @@ +import sys + +def setup(core, object): + object.setAttachment('radial_filename', 'ring/unity') + object.setAttachment('objType', 'ring') + object.setStfFilename('static_item_n') + object.setStfName('item_band_set_commando_utility_b_01_01') + object.setDetailFilename('static_item_d') + object.setDetailName('item_band_set_commando_utility_b_01_01') + object.setIntAttribute('required_combat_level', 85) + object.setStringAttribute('class_required', 'Commando') + object.setIntAttribute('cat_stat_mod_bonus.@stat_n:constitution_modified', 10) + object.setIntAttribute('cat_stat_mod_bonus.@stat_n:strength_modified', 15) + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_devastation_bonus', 5) + object.setStringAttribute('@set_bonus:piece_bonus_count_3', '@set_bonus:set_bonus_commando_utility_b_1') + object.setStringAttribute('@set_bonus:piece_bonus_count_4', '@set_bonus:set_bonus_commando_utility_b_2') + object.setStringAttribute('@set_bonus:piece_bonus_count_5', '@set_bonus:set_bonus_commando_utility_b_3') + object.setAttachment('setBonus', 'set_bonus_commando_utility_b') + return \ No newline at end of file diff --git a/scripts/object/tangible/wearables/ring/item_band_set_ent_01_01.py b/scripts/object/tangible/wearables/ring/item_band_set_ent_01_01.py new file mode 100644 index 00000000..0aa88bec --- /dev/null +++ b/scripts/object/tangible/wearables/ring/item_band_set_ent_01_01.py @@ -0,0 +1,18 @@ +import sys + +def setup(core, object): + object.setAttachment('radial_filename', 'ring/unity') + object.setAttachment('objType', 'ring') + object.setStfFilename('static_item_n') + object.setStfName('item_band_set_ent_01_01') + object.setDetailFilename('static_item_d') + object.setDetailName('item_band_set_ent_01_01') + object.setIntAttribute('required_combat_level', 85) + object.setStringAttribute('class_required', 'Entertainer') + object.setIntAttribute('cat_stat_mod_bonus.@stat_n:strength_modified', 30) + object.setIntAttribute('cat_stat_mod_bonus.@stat_n:agility_modified', 30) + object.setStringAttribute('@set_bonus:piece_bonus_count_3', '@set_bonus:set_bonus_ent_1') + object.setStringAttribute('@set_bonus:piece_bonus_count_4', '@set_bonus:set_bonus_ent_2') + object.setStringAttribute('@set_bonus:piece_bonus_count_5', '@set_bonus:set_bonus_ent_3') + object.setAttachment('setBonus', 'set_bonus_ent') + return \ No newline at end of file diff --git a/scripts/object/tangible/wearables/ring/item_band_set_hero_01_01.py b/scripts/object/tangible/wearables/ring/item_band_set_hero_01_01.py new file mode 100644 index 00000000..73f173b9 --- /dev/null +++ b/scripts/object/tangible/wearables/ring/item_band_set_hero_01_01.py @@ -0,0 +1,18 @@ +import sys + +def setup(core, object): + object.setAttachment('radial_filename', 'ring/unity') + object.setAttachment('objType', 'ring') + object.setStfFilename('static_item_n') + object.setStfName('item_band_set_hero_01_01') + object.setDetailFilename('static_item_d') + object.setDetailName('item_band_set_hero_01_01') + object.setIntAttribute('required_combat_level', 85) + object.setIntAttribute('cat_stat_mod_bonus.@stat_n:strength_modified', 30) + object.setIntAttribute('cat_stat_mod_bonus.@stat_n:precision_modified', 30) + object.setIntAttribute('cat_stat_mod_bonus.@stat_n:luck_modified', 30) + object.setStringAttribute('@set_bonus:piece_bonus_count_3', '@set_bonus:set_bonus_hero_1') + object.setStringAttribute('@set_bonus:piece_bonus_count_4', '@set_bonus:set_bonus_hero_2') + object.setStringAttribute('@set_bonus:piece_bonus_count_5', '@set_bonus:set_bonus_hero_3') + object.setAttachment('setBonus', 'set_bonus_hero') + return \ No newline at end of file diff --git a/scripts/object/tangible/wearables/ring/item_band_set_jedi_dps_01_01.py b/scripts/object/tangible/wearables/ring/item_band_set_jedi_dps_01_01.py new file mode 100644 index 00000000..1986def1 --- /dev/null +++ b/scripts/object/tangible/wearables/ring/item_band_set_jedi_dps_01_01.py @@ -0,0 +1,20 @@ +import sys + +def setup(core, object): + object.setAttachment('radial_filename', 'ring/unity') + object.setAttachment('objType', 'ring') + object.setStfFilename('static_item_n') + object.setStfName('item_band_set_jedi_dps_01_01') + object.setDetailFilename('static_item_d') + object.setDetailName('item_band_set_jedi_dps_01_01') + object.setStringAttribute('class_required', 'Jedi') + object.setIntAttribute('required_combat_level', 85) + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_action_line_fs_dm', 2) + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_action_line_fs_sweep', 2) + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_cooldown_line_fs_dm', 3) + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_cooldown_line_fs_sweep', 3) + object.setStringAttribute('@set_bonus:piece_bonus_count_3', '@set_bonus:set_bonus_jedi_dps_1') + object.setStringAttribute('@set_bonus:piece_bonus_count_4', '@set_bonus:set_bonus_jedi_dps_2') + object.setStringAttribute('@set_bonus:piece_bonus_count_5', '@set_bonus:set_bonus_jedi_dps_3') + object.setAttachment('setBonus', 'set_bonus_jedi_dps') + return \ No newline at end of file diff --git a/scripts/object/tangible/wearables/ring/item_band_set_jedi_utility_a_01_01.py b/scripts/object/tangible/wearables/ring/item_band_set_jedi_utility_a_01_01.py new file mode 100644 index 00000000..295383ef --- /dev/null +++ b/scripts/object/tangible/wearables/ring/item_band_set_jedi_utility_a_01_01.py @@ -0,0 +1,20 @@ +import sys + +def setup(core, object): + object.setAttachment('radial_filename', 'ring/unity') + object.setAttachment('objType', 'ring') + object.setStfFilename('static_item_n') + object.setStfName('item_band_set_jedi_utility_a_01_01') + object.setDetailFilename('static_item_d') + object.setDetailName('item_band_set_jedi_utility_a_01_01') + object.setStringAttribute('class_required', 'Jedi') + object.setIntAttribute('required_combat_level', 85) + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_action_line_fs_cc_crit', 2) + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_action_line_fs_ae_dm_cc', 2) + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_cooldown_line_fs_cc_crit', 3) + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_cooldown_line_fs_ae_dm_cc', 3) + object.setStringAttribute('@set_bonus:piece_bonus_count_3', '@set_bonus:set_jedi_utility_a_1') + object.setStringAttribute('@set_bonus:piece_bonus_count_4', '@set_bonus:set_jedi_utility_a_2') + object.setStringAttribute('@set_bonus:piece_bonus_count_5', '@set_bonus:set_jedi_utility_a_3') + object.setAttachment('setBonus', 'set_jedi_utility_a') + return \ No newline at end of file diff --git a/scripts/object/tangible/wearables/ring/item_band_set_jedi_utility_b_01_01.py b/scripts/object/tangible/wearables/ring/item_band_set_jedi_utility_b_01_01.py new file mode 100644 index 00000000..9aae6cd1 --- /dev/null +++ b/scripts/object/tangible/wearables/ring/item_band_set_jedi_utility_b_01_01.py @@ -0,0 +1,18 @@ +import sys + +def setup(core, object): + object.setAttachment('radial_filename', 'ring/unity') + object.setAttachment('objType', 'ring') + object.setStfFilename('static_item_n') + object.setStfName('item_band_set_jedi_utility_b_01_01') + object.setDetailFilename('static_item_d') + object.setDetailName('item_band_set_jedi_utility_b_01_01') + object.setStringAttribute('class_required', 'Jedi') + object.setIntAttribute('required_combat_level', 85) + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_glancing_blow_all', 1) + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_critical_hit_reduction', 1) + object.setStringAttribute('@set_bonus:piece_bonus_count_3', '@set_bonus:set_jedi_utility_b_1') + object.setStringAttribute('@set_bonus:piece_bonus_count_4', '@set_bonus:set_jedi_utility_b_2') + object.setStringAttribute('@set_bonus:piece_bonus_count_5', '@set_bonus:set_jedi_utility_b_3') + object.setAttachment('setBonus', 'set_jedi_utility_b') + return \ No newline at end of file diff --git a/scripts/object/tangible/wearables/ring/item_band_set_medic_dps_01_01.py b/scripts/object/tangible/wearables/ring/item_band_set_medic_dps_01_01.py new file mode 100644 index 00000000..6323b57e --- /dev/null +++ b/scripts/object/tangible/wearables/ring/item_band_set_medic_dps_01_01.py @@ -0,0 +1,21 @@ +import sys + +def setup(core, object): + object.setAttachment('radial_filename', 'ring/unity') + object.setAttachment('objType', 'ring') + object.setStfFilename('static_item_n') + object.setStfName('item_band_set_medic_dps_01_01') + object.setDetailFilename('static_item_d') + object.setDetailName('item_band_set_medic_dps_01_01') + object.setStringAttribute('class_required', 'Medic') + object.setIntAttribute('required_combat_level', 85) + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_action_line_me_burst', 2) + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_action_line_me_dm', 1) + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_action_line_me_smash', 2) + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_buff_duration_line_me_enhance', 360) + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:fast_attack_line_me_dm', 1) + object.setStringAttribute('@set_bonus:piece_bonus_count_3', '@set_bonus:set_bonus_medic_dps_1') + object.setStringAttribute('@set_bonus:piece_bonus_count_4', '@set_bonus:set_bonus_medic_dps_2') + object.setStringAttribute('@set_bonus:piece_bonus_count_5', '@set_bonus:set_bonus_medic_dps_3') + object.setAttachment('setBonus', 'set_bonus_medic_dps') + return \ No newline at end of file diff --git a/scripts/object/tangible/wearables/ring/item_band_set_medic_utility_a_01_01.py b/scripts/object/tangible/wearables/ring/item_band_set_medic_utility_a_01_01.py new file mode 100644 index 00000000..1dcbdafa --- /dev/null +++ b/scripts/object/tangible/wearables/ring/item_band_set_medic_utility_a_01_01.py @@ -0,0 +1,20 @@ +import sys + +def setup(core, object): + object.setAttachment('radial_filename', 'ring/unity') + object.setAttachment('objType', 'ring') + object.setStfFilename('static_item_n') + object.setStfName('item_band_set_medic_utility_a_01_01') + object.setDetailFilename('static_item_d') + object.setDetailName('item_band_set_medic_utility_a_01_01') + object.setStringAttribute('class_required', 'Medic') + object.setIntAttribute('required_combat_level', 85) + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_cooldown_line_me_evasion', 6) + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_freeshot_me_heal', 1) + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:fast_attack_line_me_heal', 2) + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:fast_attack_line_me_revive', 1) + object.setStringAttribute('@set_bonus:piece_bonus_count_3', '@set_bonus:set_medic_utility_a_1') + object.setStringAttribute('@set_bonus:piece_bonus_count_4', '@set_bonus:set_medic_utility_a_2') + object.setStringAttribute('@set_bonus:piece_bonus_count_5', '@set_bonus:set_medic_utility_a_3') + object.setAttachment('setBonus', 'set_medic_utility_a') + return \ No newline at end of file diff --git a/scripts/object/tangible/wearables/ring/item_band_set_medic_utility_b_01_01.py b/scripts/object/tangible/wearables/ring/item_band_set_medic_utility_b_01_01.py new file mode 100644 index 00000000..26be442a --- /dev/null +++ b/scripts/object/tangible/wearables/ring/item_band_set_medic_utility_b_01_01.py @@ -0,0 +1,19 @@ +import sys + +def setup(core, object): + object.setAttachment('radial_filename', 'ring/unity') + object.setAttachment('objType', 'ring') + object.setStfFilename('static_item_n') + object.setStfName('item_band_set_medic_utility_b_01_01') + object.setDetailFilename('static_item_d') + object.setDetailName('item_band_set_medic_utility_b_01_01') + object.setStringAttribute('class_required', 'Medic') + object.setIntAttribute('required_combat_level', 85) + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_cooldown_line_me_dot', 2) + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_freeshot_me_debuff', 1) + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:fast_attack_line_me_debuff', 1) + object.setStringAttribute('@set_bonus:piece_bonus_count_3', '@set_bonus:set_medic_utility_b_1') + object.setStringAttribute('@set_bonus:piece_bonus_count_4', '@set_bonus:set_medic_utility_b_2') + object.setStringAttribute('@set_bonus:piece_bonus_count_5', '@set_bonus:set_medic_utility_b_3') + object.setAttachment('setBonus', 'set_medic_utility_b') + return \ No newline at end of file diff --git a/scripts/object/tangible/wearables/ring/item_band_set_officer_dps_01_01.py b/scripts/object/tangible/wearables/ring/item_band_set_officer_dps_01_01.py new file mode 100644 index 00000000..a622cec9 --- /dev/null +++ b/scripts/object/tangible/wearables/ring/item_band_set_officer_dps_01_01.py @@ -0,0 +1,21 @@ +import sys + +def setup(core, object): + object.setAttachment('radial_filename', 'ring/unity') + object.setAttachment('objType', 'ring') + object.setStfFilename('static_item_n') + object.setStfName('item_band_set_officer_dps_01_01') + object.setDetailFilename('static_item_d') + object.setDetailName('item_band_set_officer_dps_01_01') + object.setStringAttribute('class_required', 'Officer') + object.setIntAttribute('required_combat_level', 85) + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_action_line_of_paint', 1) + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_action_line_of_sure', 1) + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_cooldown_line_of_paint', 2) + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_cooldown_line_of_sure', 1) + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_freeshot_of_sure', 1) + object.setStringAttribute('@set_bonus:piece_bonus_count_3', '@set_bonus:set_bonus_officer_dps_1') + object.setStringAttribute('@set_bonus:piece_bonus_count_4', '@set_bonus:set_bonus_officer_dps_2') + object.setStringAttribute('@set_bonus:piece_bonus_count_5', '@set_bonus:set_bonus_officer_dps_3') + object.setAttachment('setBonus', 'set_bonus_officer_dps') + return \ No newline at end of file diff --git a/scripts/object/tangible/wearables/ring/item_band_set_officer_utility_a_01_01.py b/scripts/object/tangible/wearables/ring/item_band_set_officer_utility_a_01_01.py new file mode 100644 index 00000000..05e7c4a5 --- /dev/null +++ b/scripts/object/tangible/wearables/ring/item_band_set_officer_utility_a_01_01.py @@ -0,0 +1,21 @@ +import sys + +def setup(core, object): + object.setAttachment('radial_filename', 'ring/unity') + object.setAttachment('objType', 'ring') + object.setStfFilename('static_item_n') + object.setStfName('item_band_set_officer_utility_a_01_01') + object.setDetailFilename('static_item_d') + object.setDetailName('item_band_set_officer_utility_a_01_01') + object.setStringAttribute('class_required', 'Officer') + object.setIntAttribute('required_combat_level', 85) + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:cooldown_percent_of_group_buff', 4) + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:fast_attack_line_of_heal', 1) + # object.setIntAttribute('cat_skill_mod_bonus.@stat_n:XXX', 1) Rallypoint Duration Increase / couldnt find the effect yet + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_action_line_of_group_buff', 2) + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_cooldown_line_of_purge', 3) + object.setStringAttribute('@set_bonus:piece_bonus_count_3', '@set_bonus:set_bonus_officer_utility_a_1') + object.setStringAttribute('@set_bonus:piece_bonus_count_4', '@set_bonus:set_bonus_officer_utility_a_2') + object.setStringAttribute('@set_bonus:piece_bonus_count_5', '@set_bonus:set_bonus_officer_utility_a_3') + object.setAttachment('setBonus', 'set_bonus_officer_utility_a') + return \ No newline at end of file diff --git a/scripts/object/tangible/wearables/ring/item_band_set_officer_utility_b_01_01.py b/scripts/object/tangible/wearables/ring/item_band_set_officer_utility_b_01_01.py new file mode 100644 index 00000000..d7c050b7 --- /dev/null +++ b/scripts/object/tangible/wearables/ring/item_band_set_officer_utility_b_01_01.py @@ -0,0 +1,18 @@ +import sys + +def setup(core, object): + object.setAttachment('radial_filename', 'ring/unity') + object.setAttachment('objType', 'ring') + object.setStfFilename('static_item_n') + object.setStfName('item_band_set_officer_utility_b_01_01') + object.setDetailFilename('static_item_d') + object.setDetailName('item_band_set_officer_utility_b_01_01') + object.setStringAttribute('class_required', 'Officer') + object.setIntAttribute('required_combat_level', 85) + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_action_line_of_aoe', 2) + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_freeshot_of_aoe', 2) + object.setStringAttribute('@set_bonus:piece_bonus_count_3', '@set_bonus:set_bonus_officer_utility_b_1') + object.setStringAttribute('@set_bonus:piece_bonus_count_4', '@set_bonus:set_bonus_officer_utility_b_2') + object.setStringAttribute('@set_bonus:piece_bonus_count_5', '@set_bonus:set_bonus_officer_utility_b_3') + object.setAttachment('setBonus', 'set_bonus_officer_utility_b') + return \ No newline at end of file diff --git a/scripts/object/tangible/wearables/ring/item_band_set_smuggler_dps_01_01.py b/scripts/object/tangible/wearables/ring/item_band_set_smuggler_dps_01_01.py new file mode 100644 index 00000000..03ad7556 --- /dev/null +++ b/scripts/object/tangible/wearables/ring/item_band_set_smuggler_dps_01_01.py @@ -0,0 +1,20 @@ +import sys + +def setup(core, object): + object.setAttachment('radial_filename', 'ring/unity') + object.setAttachment('objType', 'ring') + object.setStfFilename('static_item_n') + object.setStfName('item_band_set_smuggler_dps_01_01') + object.setDetailFilename('static_item_d') + object.setDetailName('item_band_set_smuggler_dps_01_01') + object.setStringAttribute('class_required', 'Smuggler') + object.setIntAttribute('required_combat_level', 85) + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_action_line_sm_dm', 2) + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:fast_attack_line_sm_dm', 1) + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_freeshot_sm_dm', 2) + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_cooldown_line_sm_dm', 2) + object.setStringAttribute('@set_bonus:piece_bonus_count_3', '@set_bonus:set_bonus_smuggler_dps_1') + object.setStringAttribute('@set_bonus:piece_bonus_count_4', '@set_bonus:set_bonus_smuggler_dps_2') + object.setStringAttribute('@set_bonus:piece_bonus_count_5', '@set_bonus:set_bonus_smuggler_dps_3') + object.setAttachment('setBonus', 'set_bonus_smuggler_dps') + return \ No newline at end of file diff --git a/scripts/object/tangible/wearables/ring/item_band_set_smuggler_utility_a_01_01.py b/scripts/object/tangible/wearables/ring/item_band_set_smuggler_utility_a_01_01.py new file mode 100644 index 00000000..62fbde63 --- /dev/null +++ b/scripts/object/tangible/wearables/ring/item_band_set_smuggler_utility_a_01_01.py @@ -0,0 +1,20 @@ +import sys + +def setup(core, object): + object.setAttachment('radial_filename', 'ring/unity') + object.setAttachment('objType', 'ring') + object.setStfFilename('static_item_n') + object.setStfName('item_band_set_smuggler_utility_a_01_01') + object.setDetailFilename('static_item_d') + object.setDetailName('item_band_set_smuggler_utility_a_01_01') + object.setStringAttribute('class_required', 'Smuggler') + object.setIntAttribute('required_combat_level', 85) + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:bh_dire_snare', 7) + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_cooldown_line_sm_dm_cc', 1) + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_freeshot_sm_dm_cc', 2) + object.setIntAttribute('cat_stat_mod_bonus.@stat_n:luck_modified', 30) + object.setStringAttribute('@set_bonus:piece_bonus_count_3', '@set_bonus:set_smuggler_utility_a_1') + object.setStringAttribute('@set_bonus:piece_bonus_count_4', '@set_bonus:set_smuggler_utility_a_2') + object.setStringAttribute('@set_bonus:piece_bonus_count_5', '@set_bonus:set_smuggler_utility_a_3') + object.setAttachment('setBonus', 'set_smuggler_utility_a') + return \ No newline at end of file diff --git a/scripts/object/tangible/wearables/ring/item_band_set_smuggler_utility_b_01_01.py b/scripts/object/tangible/wearables/ring/item_band_set_smuggler_utility_b_01_01.py new file mode 100644 index 00000000..6a9fc806 --- /dev/null +++ b/scripts/object/tangible/wearables/ring/item_band_set_smuggler_utility_b_01_01.py @@ -0,0 +1,18 @@ +import sys + +def setup(core, object): + object.setAttachment('radial_filename', 'ring/unity') + object.setAttachment('objType', 'ring') + object.setStfFilename('static_item_n') + object.setStfName('item_band_set_smuggler_utility_b_01_01') + object.setDetailFilename('static_item_d') + object.setDetailName('item_band_set_smuggler_utility_b_01_01') + object.setStringAttribute('class_required', 'Smuggler') + object.setIntAttribute('required_combat_level', 85) + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_cooldown_line_sm_false_hope', 2) + object.setIntAttribute('cat_stat_mod_bonus.@stat_n:luck_modified', 30) + object.setStringAttribute('@set_bonus:piece_bonus_count_3', '@set_bonus:set_smuggler_utility_b_1') + object.setStringAttribute('@set_bonus:piece_bonus_count_4', '@set_bonus:set_smuggler_utility_b_2') + object.setStringAttribute('@set_bonus:piece_bonus_count_5', '@set_bonus:set_smuggler_utility_b_3') + object.setAttachment('setBonus', 'set_smuggler_utility_b') + return \ No newline at end of file diff --git a/scripts/object/tangible/wearables/ring/item_band_set_spy_dps_01_01.py b/scripts/object/tangible/wearables/ring/item_band_set_spy_dps_01_01.py new file mode 100644 index 00000000..7bb6861f --- /dev/null +++ b/scripts/object/tangible/wearables/ring/item_band_set_spy_dps_01_01.py @@ -0,0 +1,21 @@ +import sys + +def setup(core, object): + object.setAttachment('radial_filename', 'ring/unity') + object.setAttachment('objType', 'ring') + object.setStfFilename('static_item_n') + object.setStfName('item_band_set_spy_dps_01_01') + object.setDetailFilename('static_item_d') + object.setDetailName('item_band_set_spy_dps_01_01') + object.setIntAttribute('required_combat_level', 85) + object.setStringAttribute('class_required', 'Spy') + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_action_line_sp_dm', 2) + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_action_line_sp_dot', 2) + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_cooldown_line_sp_dm', 1) + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_freeshot_sp_dm', 1) + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:fast_attack_line_sp_dm', 2) + object.setStringAttribute('@set_bonus:piece_bonus_count_3', '@set_bonus:set_bonus_spy_dps_1') + object.setStringAttribute('@set_bonus:piece_bonus_count_4', '@set_bonus:set_bonus_spy_dps_2') + object.setStringAttribute('@set_bonus:piece_bonus_count_5', '@set_bonus:set_bonus_spy_dps_3') + object.setAttachment('setBonus', 'set_bonus_spy_dps') + return \ No newline at end of file diff --git a/scripts/object/tangible/wearables/ring/item_band_set_spy_utility_a_01_01.py b/scripts/object/tangible/wearables/ring/item_band_set_spy_utility_a_01_01.py new file mode 100644 index 00000000..3483cb23 --- /dev/null +++ b/scripts/object/tangible/wearables/ring/item_band_set_spy_utility_a_01_01.py @@ -0,0 +1,20 @@ +import sys + +def setup(core, object): + object.setAttachment('radial_filename', 'ring/unity') + object.setAttachment('objType', 'ring') + object.setStfFilename('static_item_n') + object.setStfName('item_band_set_spy_utility_a_01_01') + object.setDetailFilename('static_item_d') + object.setDetailName('item_band_set_spy_utility_a_01_01') + object.setIntAttribute('required_combat_level', 85) + object.setStringAttribute('class_required', 'Spy') + object.setIntAttribute('cat_stat_mod_bonus.@stat_n:strength_modified', 25) + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:fast_attack_line_sp_smoke', 1) + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_duration_line_sp_preparation', 1) + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_cooldown_line_sp_preparation', 6) + object.setStringAttribute('@set_bonus:piece_bonus_count_3', '@set_bonus:set_bonus_spy_utility_a_1') + object.setStringAttribute('@set_bonus:piece_bonus_count_4', '@set_bonus:set_bonus_spy_utility_a_2') + object.setStringAttribute('@set_bonus:piece_bonus_count_5', '@set_bonus:set_bonus_spy_utility_a_3') + object.setAttachment('setBonus', 'set_bonus_spy_utility_a') + return diff --git a/scripts/object/tangible/wearables/ring/item_band_set_spy_utility_b_01_01.py b/scripts/object/tangible/wearables/ring/item_band_set_spy_utility_b_01_01.py new file mode 100644 index 00000000..e37dc6cf --- /dev/null +++ b/scripts/object/tangible/wearables/ring/item_band_set_spy_utility_b_01_01.py @@ -0,0 +1,19 @@ +import sys + +def setup(core, object): + object.setAttachment('radial_filename', 'ring/unity') + object.setAttachment('objType', 'ring') + object.setStfFilename('static_item_n') + object.setStfName('item_band_set_spy_utility_b_01_01') + object.setDetailFilename('static_item_d') + object.setDetailName('item_band_set_spy_utility_b_01_01') + object.setIntAttribute('required_combat_level', 85) + object.setStringAttribute('class_required', 'Spy') + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_strikethrough_chance', 2) + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_action_all', 1) + object.setIntAttribute('cat_stat_mod_bonus.@stat_n:luck_modified', 50) + object.setStringAttribute('@set_bonus:piece_bonus_count_3', '@set_bonus:set_bonus_spy_utility_b_1') + object.setStringAttribute('@set_bonus:piece_bonus_count_4', '@set_bonus:set_bonus_spy_utility_b_2') + object.setStringAttribute('@set_bonus:piece_bonus_count_5', '@set_bonus:set_bonus_spy_utility_b_3') + object.setAttachment('setBonus', 'set_bonus_spy_utility_b') + return \ No newline at end of file diff --git a/scripts/object/tangible/wearables/ring/item_bounty_hunter_ring_01_02.py b/scripts/object/tangible/wearables/ring/item_bounty_hunter_ring_01_02.py new file mode 100644 index 00000000..110a5ec1 --- /dev/null +++ b/scripts/object/tangible/wearables/ring/item_bounty_hunter_ring_01_02.py @@ -0,0 +1,13 @@ +import sys + +def setup(core, object): + object.setAttachment('objType', 'ring') + object.setStfFilename('static_item_n') + object.setStfName('item_bounty_hunter_ring_01_02') + object.setDetailFilename('static_item_d') + object.setDetailName('item_bounty_hunter_ring_01_02') + object.setIntAttribute('cat_stat_mod_bonus.@stat_n:constitution_modified', 6) + object.setIntAttribute('cat_stat_mod_bonus.@stat_n:precision_modified', 6) + object.setStringAttribute('class_required', 'Bounty Hunter') + object.setAttachment('radial_filename', 'ring/unity') + return diff --git a/scripts/object/tangible/wearables/ring/item_commando_ring_01_02.py b/scripts/object/tangible/wearables/ring/item_commando_ring_01_02.py new file mode 100644 index 00000000..5e4f73c1 --- /dev/null +++ b/scripts/object/tangible/wearables/ring/item_commando_ring_01_02.py @@ -0,0 +1,13 @@ +import sys + +def setup(core, object): + object.setAttachment('objType', 'ring') + object.setStfFilename('static_item_n') + object.setStfName('item_commando_ring_01_02') + object.setDetailFilename('static_item_d') + object.setDetailName('item_commando_ring_01_02') + object.setIntAttribute('cat_stat_mod_bonus.@stat_n:constitution_modified', 6) + object.setIntAttribute('cat_stat_mod_bonus.@stat_n:precision_modified', 6) + object.setStringAttribute('class_required', 'Commando') + object.setAttachment('radial_filename', 'ring/unity') + return diff --git a/scripts/object/tangible/wearables/ring/item_content_trader_ring_03_01.py b/scripts/object/tangible/wearables/ring/item_content_trader_ring_03_01.py new file mode 100644 index 00000000..70713a96 --- /dev/null +++ b/scripts/object/tangible/wearables/ring/item_content_trader_ring_03_01.py @@ -0,0 +1,13 @@ +import sys + +def setup(core, object): + object.setAttachment('objType', 'ring') + object.setStfFilename('static_item_n') + object.setStfName('item_content_trader_ring_03_01') + object.setDetailFilename('static_item_d') + object.setDetailName('item_content_trader_ring_03_01') + object.setIntAttribute('cat_stat_mod_bonus.@stat_n:constitution_modified', 6) + object.setIntAttribute('cat_stat_mod_bonus.@stat_n:general_assembly', 6) + object.setStringAttribute('class_required', 'Trader') + object.setAttachment('radial_filename', 'ring/unity') + return \ No newline at end of file diff --git a/scripts/object/tangible/wearables/ring/item_force_sensitive_ring_01_02.py b/scripts/object/tangible/wearables/ring/item_force_sensitive_ring_01_02.py new file mode 100644 index 00000000..a22d7967 --- /dev/null +++ b/scripts/object/tangible/wearables/ring/item_force_sensitive_ring_01_02.py @@ -0,0 +1,13 @@ +import sys + +def setup(core, object): + object.setAttachment('objType', 'ring') + object.setStfFilename('static_item_n') + object.setStfName('item_force_sensitive_ring_01_02') + object.setDetailFilename('static_item_d') + object.setDetailName('item_force_sensitive_ring_01_02') + object.setIntAttribute('cat_stat_mod_bonus.@stat_n:constitution_modified', 6) + object.setIntAttribute('cat_stat_mod_bonus.@stat_n:strength_modified', 6) + object.setStringAttribute('class_required', 'Jedi') + object.setAttachment('radial_filename', 'ring/unity') + return diff --git a/scripts/object/tangible/wearables/ring/item_force_sensitive_ring_02_01.py b/scripts/object/tangible/wearables/ring/item_force_sensitive_ring_02_01.py new file mode 100644 index 00000000..01a05612 --- /dev/null +++ b/scripts/object/tangible/wearables/ring/item_force_sensitive_ring_02_01.py @@ -0,0 +1,13 @@ +import sys + +def setup(core, object): + object.setAttachment('objType', 'ring') + object.setStfFilename('static_item_n') + object.setStfName('item_force_sensitive_ring_02_01') + object.setDetailFilename('static_item_d') + object.setDetailName('item_force_sensitive_ring_02_01') + object.setIntAttribute('cat_stat_mod_bonus.@stat_n:agility_modified', 5) + object.setIntAttribute('cat_stat_mod_bonus.@stat_n:strength_modified', 5) + object.setStringAttribute('class_required', 'Jedi') + object.setAttachment('radial_filename', 'ring/unity') + return diff --git a/scripts/object/tangible/wearables/ring/item_ring_set_bh_dps_01_01.py b/scripts/object/tangible/wearables/ring/item_ring_set_bh_dps_01_01.py new file mode 100644 index 00000000..9bb5bc01 --- /dev/null +++ b/scripts/object/tangible/wearables/ring/item_ring_set_bh_dps_01_01.py @@ -0,0 +1,20 @@ +import sys + +def setup(core, object): + object.setAttachment('radial_filename', 'ring/unity') + object.setAttachment('objType', 'ring') + object.setStfFilename('static_item_n') + object.setStfName('item_ring_set_bh_dps_01_01') + object.setDetailFilename('static_item_d') + object.setDetailName('item_ring_set_bh_dps_01_01') + object.setIntAttribute('required_combat_level', 85) + object.setStringAttribute('class_required', 'Bounty Hunter') + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_action_line_dm', 1) + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_action_line_dm_crit', 1) + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_buff_duration_line_bh_return_fire', 1) + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_cooldown_line_dm', 1) + object.setStringAttribute('@set_bonus:piece_bonus_count_3', '@set_bonus:set_bonus_bh_dps_1') + object.setStringAttribute('@set_bonus:piece_bonus_count_4', '@set_bonus:set_bonus_bh_dps_2') + object.setStringAttribute('@set_bonus:piece_bonus_count_5', '@set_bonus:set_bonus_bh_dps_3) + object.setAttachment('setBonus', 'set_bonus_bh_dps') + return \ No newline at end of file diff --git a/scripts/object/tangible/wearables/ring/item_ring_set_bh_utility_a_01_01.py b/scripts/object/tangible/wearables/ring/item_ring_set_bh_utility_a_01_01.py new file mode 100644 index 00000000..7c69c061 --- /dev/null +++ b/scripts/object/tangible/wearables/ring/item_ring_set_bh_utility_a_01_01.py @@ -0,0 +1,18 @@ +import sys + +def setup(core, object): + object.setAttachment('radial_filename', 'ring/unity') + object.setAttachment('objType', 'ring') + object.setStfFilename('static_item_n') + object.setStfName('item_ring_set_bh_utility_a_01_01') + object.setDetailFilename('static_item_d') + object.setDetailName('item_ring_set_bh_utility_a_01_01') + object.setIntAttribute('required_combat_level', 85) + object.setStringAttribute('class_required', 'Bounty Hunter') + object.setIntAttribute('cat_stat_mod_bonus.@stat_n:precision_modified', 50) + object.setIntAttribute('cat_stat_mod_bonus.@stat_n:luck_modified', 30) + object.setStringAttribute('@set_bonus:piece_bonus_count_3', '@set_bonus:set_bonus_bh_utility_a_1') + object.setStringAttribute('@set_bonus:piece_bonus_count_4', '@set_bonus:set_bonus_bh_utility_a_2') + object.setStringAttribute('@set_bonus:piece_bonus_count_5', '@set_bonus:set_bonus_bh_utility_a_3') + object.setAttachment('setBonus', 'set_bonus_bh_utility_a') + return \ No newline at end of file diff --git a/scripts/object/tangible/wearables/ring/item_ring_set_bh_utility_b_01_01.py b/scripts/object/tangible/wearables/ring/item_ring_set_bh_utility_b_01_01.py new file mode 100644 index 00000000..4f1511b9 --- /dev/null +++ b/scripts/object/tangible/wearables/ring/item_ring_set_bh_utility_b_01_01.py @@ -0,0 +1,21 @@ +import sys + +def setup(core, object): + object.setAttachment('radial_filename', 'ring/unity') + object.setAttachment('objType', 'ring') + object.setAttachment('radial_filename', 'ring/unity') + object.setAttachment('objType', 'ring') + object.setStfFilename('static_item_n') + object.setStfName('item_ring_set_bh_utility_b_01_01') + object.setDetailFilename('static_item_d') + object.setDetailName('item_ring_set_bh_utility_b_01_01') + object.setStringAttribute('class_required', 'Bounty Hunter') + object.setIntAttribute('required_combat_level', 85) + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:bh_dire_root', 1) + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:bh_dire_snare', 1) + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:fast_attack_line_dm_cc', 2) + object.setStringAttribute('@set_bonus:piece_bonus_count_3', '@set_bonus:set_bonus_bh_utility_b_1') + object.setStringAttribute('@set_bonus:piece_bonus_count_4', '@set_bonus:set_bonus_bh_utility_b_2') + object.setStringAttribute('@set_bonus:piece_bonus_count_5', '@set_bonus:set_bonus_bh_utility_b_3') + object.setAttachment('setBonus', 'set_bonus_bh_utility_b') + return \ No newline at end of file diff --git a/scripts/object/tangible/wearables/ring/item_ring_set_commando_dps_01_01.py b/scripts/object/tangible/wearables/ring/item_ring_set_commando_dps_01_01.py new file mode 100644 index 00000000..cffd2d14 --- /dev/null +++ b/scripts/object/tangible/wearables/ring/item_ring_set_commando_dps_01_01.py @@ -0,0 +1,19 @@ +import sys + +def setup(core, object): + object.setAttachment('radial_filename', 'ring/unity') + object.setAttachment('objType', 'ring') + object.setStfFilename('static_item_n') + object.setStfName('item_ring_set_commando_dps_01_01') + object.setDetailFilename('static_item_d') + object.setDetailName('item_ring_set_commando_dps_01_01') + object.setIntAttribute('required_combat_level', 85) + object.setStringAttribute('class_required', 'Commando') + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:fast_attack_line_co_grenade', 2) + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_action_line_co_grenade', 3) + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_freeshot_co_grenade', 2) + object.setStringAttribute('@set_bonus:piece_bonus_count_3', '@set_bonus:set_bonus_commando_dps_1') + object.setStringAttribute('@set_bonus:piece_bonus_count_4', '@set_bonus:set_bonus_commando_dps_2') + object.setStringAttribute('@set_bonus:piece_bonus_count_5', '@set_bonus:set_bonus_commando_dps_3) + object.setAttachment('setBonus', 'set_bonus_commando_dps') + return \ No newline at end of file diff --git a/scripts/object/tangible/wearables/ring/item_ring_set_commando_utility_a_01_01.py b/scripts/object/tangible/wearables/ring/item_ring_set_commando_utility_a_01_01.py new file mode 100644 index 00000000..26d83059 --- /dev/null +++ b/scripts/object/tangible/wearables/ring/item_ring_set_commando_utility_a_01_01.py @@ -0,0 +1,19 @@ +import sys + +def setup(core, object): + object.setAttachment('radial_filename', 'ring/unity') + object.setAttachment('objType', 'ring') + object.setStfFilename('static_item_n') + object.setStfName('item_ring_set_commando_utility_a_01_01') + object.setDetailFilename('static_item_d') + object.setDetailName('item_ring_set_commando_utility_a_01_01') + object.setIntAttribute('required_combat_level', 85) + object.setStringAttribute('class_required', 'Commando') + object.setIntAttribute('cat_stat_mod_bonus.@stat_n:constitution_modified', 20) + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_block_chance', 2) + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:combat_block_value', 50) + object.setStringAttribute('@set_bonus:piece_bonus_count_3', '@set_bonus:set_bonus_commando_utility_a_1') + object.setStringAttribute('@set_bonus:piece_bonus_count_4', '@set_bonus:set_bonus_commando_utility_a_2') + object.setStringAttribute('@set_bonus:piece_bonus_count_5', '@set_bonus:set_bonus_commando_utility_a_3') + object.setAttachment('setBonus', 'set_bonus_commando_utility_a') + return \ No newline at end of file diff --git a/scripts/object/tangible/wearables/ring/item_ring_set_commando_utility_b_01_01.py b/scripts/object/tangible/wearables/ring/item_ring_set_commando_utility_b_01_01.py new file mode 100644 index 00000000..82e3a076 --- /dev/null +++ b/scripts/object/tangible/wearables/ring/item_ring_set_commando_utility_b_01_01.py @@ -0,0 +1,19 @@ +import sys + +def setup(core, object): + object.setAttachment('radial_filename', 'ring/unity') + object.setAttachment('objType', 'ring') + object.setStfFilename('static_item_n') + object.setStfName('item_ring_set_commando_utility_b_01_01') + object.setDetailFilename('static_item_d') + object.setDetailName('item_ring_set_commando_utility_b_01_01') + object.setIntAttribute('required_combat_level', 85) + object.setStringAttribute('class_required', 'Commando') + object.setIntAttribute('cat_stat_mod_bonus.@stat_n:constitution_modified', 10) + object.setIntAttribute('cat_stat_mod_bonus.@stat_n:strength_modified', 15) + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_devastation_bonus', 5) + object.setStringAttribute('@set_bonus:piece_bonus_count_3', '@set_bonus:set_bonus_commando_utility_b_1') + object.setStringAttribute('@set_bonus:piece_bonus_count_4', '@set_bonus:set_bonus_commando_utility_b_2') + object.setStringAttribute('@set_bonus:piece_bonus_count_5', '@set_bonus:set_bonus_commando_utility_b_3') + object.setAttachment('setBonus', 'set_bonus_commando_utility_b') + return \ No newline at end of file diff --git a/scripts/object/tangible/wearables/ring/item_ring_set_ent_01_01.py b/scripts/object/tangible/wearables/ring/item_ring_set_ent_01_01.py new file mode 100644 index 00000000..723903a0 --- /dev/null +++ b/scripts/object/tangible/wearables/ring/item_ring_set_ent_01_01.py @@ -0,0 +1,18 @@ +import sys + +def setup(core, object): + object.setAttachment('radial_filename', 'ring/unity') + object.setAttachment('objType', 'ring') + object.setStfFilename('static_item_n') + object.setStfName('item_ring_set_ent_01_01') + object.setDetailFilename('static_item_d') + object.setDetailName('item_ring_set_ent_01_01') + object.setIntAttribute('required_combat_level', 85) + object.setStringAttribute('class_required', 'Entertainer') + object.setIntAttribute('cat_stat_mod_bonus.@stat_n:strength_modified', 30) + object.setIntAttribute('cat_stat_mod_bonus.@stat_n:agility_modified', 30) + object.setStringAttribute('@set_bonus:piece_bonus_count_3', '@set_bonus:set_bonus_ent_1') + object.setStringAttribute('@set_bonus:piece_bonus_count_4', '@set_bonus:set_bonus_ent_2') + object.setStringAttribute('@set_bonus:piece_bonus_count_5', '@set_bonus:set_bonus_ent_3') + object.setAttachment('setBonus', 'set_bonus_ent') + return \ No newline at end of file diff --git a/scripts/object/tangible/wearables/ring/item_ring_set_hero_01_01.py b/scripts/object/tangible/wearables/ring/item_ring_set_hero_01_01.py new file mode 100644 index 00000000..2a2d0124 --- /dev/null +++ b/scripts/object/tangible/wearables/ring/item_ring_set_hero_01_01.py @@ -0,0 +1,18 @@ +import sys + +def setup(core, object): + object.setAttachment('radial_filename', 'ring/unity') + object.setAttachment('objType', 'ring') + object.setStfFilename('static_item_n') + object.setStfName('item_ring_set_hero_01_01') + object.setDetailFilename('static_item_d') + object.setDetailName('item_ring_set_hero_01_01') + object.setIntAttribute('required_combat_level', 85) + object.setIntAttribute('cat_stat_mod_bonus.@stat_n:strength_modified', 30) + object.setIntAttribute('cat_stat_mod_bonus.@stat_n:precision_modified', 30) + object.setIntAttribute('cat_stat_mod_bonus.@stat_n:luck_modified', 30) + object.setStringAttribute('@set_bonus:piece_bonus_count_3', '@set_bonus:set_bonus_hero_1') + object.setStringAttribute('@set_bonus:piece_bonus_count_4', '@set_bonus:set_bonus_hero_2') + object.setStringAttribute('@set_bonus:piece_bonus_count_5', '@set_bonus:set_bonus_hero_3') + object.setAttachment('setBonus', 'set_bonus_hero') + return \ No newline at end of file diff --git a/scripts/object/tangible/wearables/ring/item_ring_set_jedi_dps_01_01.py b/scripts/object/tangible/wearables/ring/item_ring_set_jedi_dps_01_01.py new file mode 100644 index 00000000..4bf14f5f --- /dev/null +++ b/scripts/object/tangible/wearables/ring/item_ring_set_jedi_dps_01_01.py @@ -0,0 +1,20 @@ +import sys + +def setup(core, object): + object.setAttachment('radial_filename', 'ring/unity') + object.setAttachment('objType', 'ring') + object.setStfFilename('static_item_n') + object.setStfName('item_ring_set_jedi_dps_01_01') + object.setDetailFilename('static_item_d') + object.setDetailName('item_ring_set_jedi_dps_01_01') + object.setStringAttribute('class_required', 'Jedi') + object.setIntAttribute('required_combat_level', 85) + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_action_line_fs_dm', 2) + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_action_line_fs_sweep', 2) + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_cooldown_line_fs_dm', 3) + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_cooldown_line_fs_sweep', 3) + object.setStringAttribute('@set_bonus:piece_bonus_count_3', '@set_bonus:set_bonus_jedi_dps_1') + object.setStringAttribute('@set_bonus:piece_bonus_count_4', '@set_bonus:set_bonus_jedi_dps_2') + object.setStringAttribute('@set_bonus:piece_bonus_count_5', '@set_bonus:set_bonus_jedi_dps_3') + object.setAttachment('setBonus', 'set_bonus_jedi_dps') + return \ No newline at end of file diff --git a/scripts/object/tangible/wearables/ring/item_ring_set_jedi_utility_a_01_01.py b/scripts/object/tangible/wearables/ring/item_ring_set_jedi_utility_a_01_01.py new file mode 100644 index 00000000..651141da --- /dev/null +++ b/scripts/object/tangible/wearables/ring/item_ring_set_jedi_utility_a_01_01.py @@ -0,0 +1,20 @@ +import sys + +def setup(core, object): + object.setAttachment('radial_filename', 'ring/unity') + object.setAttachment('objType', 'ring') + object.setStfFilename('static_item_n') + object.setStfName('item_ring_set_jedi_utility_a_01_01') + object.setDetailFilename('static_item_d') + object.setDetailName('item_ring_set_jedi_utility_a_01_01') + object.setStringAttribute('class_required', 'Jedi') + object.setIntAttribute('required_combat_level', 85) + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_action_line_fs_cc_crit', 2) + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_action_line_fs_ae_dm_cc', 2) + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_cooldown_line_fs_cc_crit', 3) + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_cooldown_line_fs_ae_dm_cc', 3) + object.setStringAttribute('@set_bonus:piece_bonus_count_3', '@set_bonus:set_jedi_utility_a_1') + object.setStringAttribute('@set_bonus:piece_bonus_count_4', '@set_bonus:set_jedi_utility_a_2') + object.setStringAttribute('@set_bonus:piece_bonus_count_5', '@set_bonus:set_jedi_utility_a_3') + object.setAttachment('setBonus', 'set_jedi_utility_a') + return \ No newline at end of file diff --git a/scripts/object/tangible/wearables/ring/item_ring_set_jedi_utility_b_01_01.py b/scripts/object/tangible/wearables/ring/item_ring_set_jedi_utility_b_01_01.py new file mode 100644 index 00000000..a6b3d8ec --- /dev/null +++ b/scripts/object/tangible/wearables/ring/item_ring_set_jedi_utility_b_01_01.py @@ -0,0 +1,18 @@ +import sys + +def setup(core, object): + object.setAttachment('radial_filename', 'ring/unity') + object.setAttachment('objType', 'ring') + object.setStfFilename('static_item_n') + object.setStfName('item_ring_set_jedi_utility_b_01_01') + object.setDetailFilename('static_item_d') + object.setDetailName('item_ring_set_jedi_utility_b_01_01') + object.setStringAttribute('class_required', 'Jedi') + object.setIntAttribute('required_combat_level', 85) + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_glancing_blow_all', 1) + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_critical_hit_reduction', 1) + object.setStringAttribute('@set_bonus:piece_bonus_count_3', '@set_bonus:set_jedi_utility_b_1') + object.setStringAttribute('@set_bonus:piece_bonus_count_4', '@set_bonus:set_jedi_utility_b_2') + object.setStringAttribute('@set_bonus:piece_bonus_count_5', '@set_bonus:set_jedi_utility_b_3') + object.setAttachment('setBonus', 'set_jedi_utility_b') + return \ No newline at end of file diff --git a/scripts/object/tangible/wearables/ring/item_ring_set_medic_dps_01_01.py b/scripts/object/tangible/wearables/ring/item_ring_set_medic_dps_01_01.py new file mode 100644 index 00000000..1209fcee --- /dev/null +++ b/scripts/object/tangible/wearables/ring/item_ring_set_medic_dps_01_01.py @@ -0,0 +1,21 @@ +import sys + +def setup(core, object): + object.setAttachment('radial_filename', 'ring/unity') + object.setAttachment('objType', 'ring') + object.setStfFilename('static_item_n') + object.setStfName('item_ring_set_medic_dps_01_01') + object.setDetailFilename('static_item_d') + object.setDetailName('item_ring_set_medic_dps_01_01') + object.setStringAttribute('class_required', 'Medic') + object.setIntAttribute('required_combat_level', 85) + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_action_line_me_burst', 2) + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_action_line_me_dm', 1) + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_action_line_me_smash', 2) + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_buff_duration_line_me_enhance', 360) + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:fast_attack_line_me_dm', 1) + object.setStringAttribute('@set_bonus:piece_bonus_count_3', '@set_bonus:set_bonus_medic_dps_1') + object.setStringAttribute('@set_bonus:piece_bonus_count_4', '@set_bonus:set_bonus_medic_dps_2') + object.setStringAttribute('@set_bonus:piece_bonus_count_5', '@set_bonus:set_bonus_medic_dps_3') + object.setAttachment('setBonus', 'set_bonus_medic_dps') + return \ No newline at end of file diff --git a/scripts/object/tangible/wearables/ring/item_ring_set_medic_utility_a_01_01.py b/scripts/object/tangible/wearables/ring/item_ring_set_medic_utility_a_01_01.py new file mode 100644 index 00000000..bd270056 --- /dev/null +++ b/scripts/object/tangible/wearables/ring/item_ring_set_medic_utility_a_01_01.py @@ -0,0 +1,20 @@ +import sys + +def setup(core, object): + object.setAttachment('radial_filename', 'ring/unity') + object.setAttachment('objType', 'ring') + object.setStfFilename('static_item_n') + object.setStfName('item_ring_set_medic_utility_a_01_01') + object.setDetailFilename('static_item_d') + object.setDetailName('item_ring_set_medic_utility_a_01_01') + object.setStringAttribute('class_required', 'Medic') + object.setIntAttribute('required_combat_level', 85) + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_cooldown_line_me_evasion', 6) + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_freeshot_me_heal', 1) + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:fast_attack_line_me_heal', 2) + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:fast_attack_line_me_revive', 1) + object.setStringAttribute('@set_bonus:piece_bonus_count_3', '@set_bonus:set_medic_utility_a_1') + object.setStringAttribute('@set_bonus:piece_bonus_count_4', '@set_bonus:set_medic_utility_a_2') + object.setStringAttribute('@set_bonus:piece_bonus_count_5', '@set_bonus:set_medic_utility_a_3') + object.setAttachment('setBonus', 'set_medic_utility_a') + return \ No newline at end of file diff --git a/scripts/object/tangible/wearables/ring/item_ring_set_medic_utility_b_01_01.py b/scripts/object/tangible/wearables/ring/item_ring_set_medic_utility_b_01_01.py new file mode 100644 index 00000000..339a68b4 --- /dev/null +++ b/scripts/object/tangible/wearables/ring/item_ring_set_medic_utility_b_01_01.py @@ -0,0 +1,19 @@ +import sys + +def setup(core, object): + object.setAttachment('radial_filename', 'ring/unity') + object.setAttachment('objType', 'ring') + object.setStfFilename('static_item_n') + object.setStfName('item_ring_set_medic_utility_b_01_01') + object.setDetailFilename('static_item_d') + object.setDetailName('item_ring_set_medic_utility_b_01_01') + object.setStringAttribute('class_required', 'Medic') + object.setIntAttribute('required_combat_level', 85) + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_cooldown_line_me_dot', 2) + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_freeshot_me_debuff', 1) + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:fast_attack_line_me_debuff', 1) + object.setStringAttribute('@set_bonus:piece_bonus_count_3', '@set_bonus:set_medic_utility_b_1') + object.setStringAttribute('@set_bonus:piece_bonus_count_4', '@set_bonus:set_medic_utility_b_2') + object.setStringAttribute('@set_bonus:piece_bonus_count_5', '@set_bonus:set_medic_utility_b_3') + object.setAttachment('setBonus', 'set_medic_utility_b') + return \ No newline at end of file diff --git a/scripts/object/tangible/wearables/ring/item_ring_set_officer_dps_01_01.py b/scripts/object/tangible/wearables/ring/item_ring_set_officer_dps_01_01.py new file mode 100644 index 00000000..2355f9cf --- /dev/null +++ b/scripts/object/tangible/wearables/ring/item_ring_set_officer_dps_01_01.py @@ -0,0 +1,21 @@ +import sys + +def setup(core, object): + object.setAttachment('radial_filename', 'ring/unity') + object.setAttachment('objType', 'ring') + object.setStfFilename('static_item_n') + object.setStfName('item_ring_set_officer_dps_01_01') + object.setDetailFilename('static_item_d') + object.setDetailName('item_ring_set_officer_dps_01_01') + object.setStringAttribute('class_required', 'Officer') + object.setIntAttribute('required_combat_level', 85) + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_action_line_of_paint', 1) + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_action_line_of_sure', 1) + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_cooldown_line_of_paint', 2) + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_cooldown_line_of_sure', 1) + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_freeshot_of_sure', 1) + object.setStringAttribute('@set_bonus:piece_bonus_count_3', '@set_bonus:set_bonus_officer_dps_1') + object.setStringAttribute('@set_bonus:piece_bonus_count_4', '@set_bonus:set_bonus_officer_dps_2') + object.setStringAttribute('@set_bonus:piece_bonus_count_5', '@set_bonus:set_bonus_officer_dps_3') + object.setAttachment('setBonus', 'set_bonus_officer_dps') + return \ No newline at end of file diff --git a/scripts/object/tangible/wearables/ring/item_ring_set_officer_utility_a_01_01.py b/scripts/object/tangible/wearables/ring/item_ring_set_officer_utility_a_01_01.py new file mode 100644 index 00000000..79fbeff8 --- /dev/null +++ b/scripts/object/tangible/wearables/ring/item_ring_set_officer_utility_a_01_01.py @@ -0,0 +1,21 @@ +import sys + +def setup(core, object): + object.setAttachment('radial_filename', 'ring/unity') + object.setAttachment('objType', 'ring') + object.setStfFilename('static_item_n') + object.setStfName('item_ring_set_officer_utility_a_01_01') + object.setDetailFilename('static_item_d') + object.setDetailName('item_ring_set_officer_utility_a_01_01') + object.setStringAttribute('class_required', 'Officer') + object.setIntAttribute('required_combat_level', 85) + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:cooldown_percent_of_group_buff', 4) + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:fast_attack_line_of_heal', 1) + # object.setIntAttribute('cat_skill_mod_bonus.@stat_n:XXX', 1) Rallypoint Duration Increase / couldnt find the effect yet + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_action_line_of_group_buff', 2) + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_cooldown_line_of_purge', 3) + object.setStringAttribute('@set_bonus:piece_bonus_count_3', '@set_bonus:set_bonus_officer_utility_a_1') + object.setStringAttribute('@set_bonus:piece_bonus_count_4', '@set_bonus:set_bonus_officer_utility_a_2') + object.setStringAttribute('@set_bonus:piece_bonus_count_5', '@set_bonus:set_bonus_officer_utility_a_3') + object.setAttachment('setBonus', 'set_bonus_officer_utility_a') + return \ No newline at end of file diff --git a/scripts/object/tangible/wearables/ring/item_ring_set_officer_utility_b_01_01.py b/scripts/object/tangible/wearables/ring/item_ring_set_officer_utility_b_01_01.py new file mode 100644 index 00000000..4e8ee197 --- /dev/null +++ b/scripts/object/tangible/wearables/ring/item_ring_set_officer_utility_b_01_01.py @@ -0,0 +1,18 @@ +import sys + +def setup(core, object): + object.setAttachment('radial_filename', 'ring/unity') + object.setAttachment('objType', 'ring') + object.setStfFilename('static_item_n') + object.setStfName('item_ring_set_officer_utility_b_01_01') + object.setDetailFilename('static_item_d') + object.setDetailName('item_ring_set_officer_utility_b_01_01') + object.setStringAttribute('class_required', 'Officer') + object.setIntAttribute('required_combat_level', 85) + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_action_line_of_aoe', 2) + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_freeshot_of_aoe', 2) + object.setStringAttribute('@set_bonus:piece_bonus_count_3', '@set_bonus:set_bonus_officer_utility_b_1') + object.setStringAttribute('@set_bonus:piece_bonus_count_4', '@set_bonus:set_bonus_officer_utility_b_2') + object.setStringAttribute('@set_bonus:piece_bonus_count_5', '@set_bonus:set_bonus_officer_utility_b_3') + object.setAttachment('setBonus', 'set_bonus_officer_utility_b') + return \ No newline at end of file diff --git a/scripts/object/tangible/wearables/ring/item_ring_set_smuggler_dps_01_01.py b/scripts/object/tangible/wearables/ring/item_ring_set_smuggler_dps_01_01.py new file mode 100644 index 00000000..90e4dd89 --- /dev/null +++ b/scripts/object/tangible/wearables/ring/item_ring_set_smuggler_dps_01_01.py @@ -0,0 +1,20 @@ +import sys + +def setup(core, object): + object.setAttachment('radial_filename', 'ring/unity') + object.setAttachment('objType', 'ring') + object.setStfFilename('static_item_n') + object.setStfName('item_ring_set_smuggler_dps_01_01') + object.setDetailFilename('static_item_d') + object.setDetailName('item_ring_set_smuggler_dps_01_01') + object.setStringAttribute('class_required', 'Smuggler') + object.setIntAttribute('required_combat_level', 85) + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_action_line_sm_dm', 2) + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:fast_attack_line_sm_dm', 1) + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_freeshot_sm_dm', 2) + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_cooldown_line_sm_dm', 2) + object.setStringAttribute('@set_bonus:piece_bonus_count_3', '@set_bonus:set_bonus_smuggler_dps_1') + object.setStringAttribute('@set_bonus:piece_bonus_count_4', '@set_bonus:set_bonus_smuggler_dps_2') + object.setStringAttribute('@set_bonus:piece_bonus_count_5', '@set_bonus:set_bonus_smuggler_dps_3') + object.setAttachment('setBonus', 'set_bonus_smuggler_dps') + return \ No newline at end of file diff --git a/scripts/object/tangible/wearables/ring/item_ring_set_smuggler_utility_a_01_01.py b/scripts/object/tangible/wearables/ring/item_ring_set_smuggler_utility_a_01_01.py new file mode 100644 index 00000000..6b961659 --- /dev/null +++ b/scripts/object/tangible/wearables/ring/item_ring_set_smuggler_utility_a_01_01.py @@ -0,0 +1,20 @@ +import sys + +def setup(core, object): + object.setAttachment('radial_filename', 'ring/unity') + object.setAttachment('objType', 'ring') + object.setStfFilename('static_item_n') + object.setStfName('item_ring_set_smuggler_utility_a_01_01') + object.setDetailFilename('static_item_d') + object.setDetailName('item_ring_set_smuggler_utility_a_01_01') + object.setStringAttribute('class_required', 'Smuggler') + object.setIntAttribute('required_combat_level', 85) + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:bh_dire_snare', 7) + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_cooldown_line_sm_dm_cc', 1) + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_freeshot_sm_dm_cc', 2) + object.setIntAttribute('cat_stat_mod_bonus.@stat_n:luck_modified', 30) + object.setStringAttribute('@set_bonus:piece_bonus_count_3', '@set_bonus:set_smuggler_utility_a_1') + object.setStringAttribute('@set_bonus:piece_bonus_count_4', '@set_bonus:set_smuggler_utility_a_2') + object.setStringAttribute('@set_bonus:piece_bonus_count_5', '@set_bonus:set_smuggler_utility_a_3') + object.setAttachment('setBonus', 'set_smuggler_utility_a') + return \ No newline at end of file diff --git a/scripts/object/tangible/wearables/ring/item_ring_set_smuggler_utility_b_01_01.py b/scripts/object/tangible/wearables/ring/item_ring_set_smuggler_utility_b_01_01.py new file mode 100644 index 00000000..6b74bc35 --- /dev/null +++ b/scripts/object/tangible/wearables/ring/item_ring_set_smuggler_utility_b_01_01.py @@ -0,0 +1,18 @@ +import sys + +def setup(core, object): + object.setAttachment('radial_filename', 'ring/unity') + object.setAttachment('objType', 'ring') + object.setStfFilename('static_item_n') + object.setStfName('item_ring_set_smuggler_utility_b_01_01') + object.setDetailFilename('static_item_d') + object.setDetailName('item_ring_set_smuggler_utility_b_01_01') + object.setStringAttribute('class_required', 'Smuggler') + object.setIntAttribute('required_combat_level', 85) + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_cooldown_line_sm_false_hope', 2) + object.setIntAttribute('cat_stat_mod_bonus.@stat_n:luck_modified', 30) + object.setStringAttribute('@set_bonus:piece_bonus_count_3', '@set_bonus:set_smuggler_utility_b_1') + object.setStringAttribute('@set_bonus:piece_bonus_count_4', '@set_bonus:set_smuggler_utility_b_2') + object.setStringAttribute('@set_bonus:piece_bonus_count_5', '@set_bonus:set_smuggler_utility_b_3') + object.setAttachment('setBonus', 'set_smuggler_utility_b') + return \ No newline at end of file diff --git a/scripts/object/tangible/wearables/ring/item_ring_set_spy_dps_01_01.py b/scripts/object/tangible/wearables/ring/item_ring_set_spy_dps_01_01.py new file mode 100644 index 00000000..3563aed7 --- /dev/null +++ b/scripts/object/tangible/wearables/ring/item_ring_set_spy_dps_01_01.py @@ -0,0 +1,21 @@ +import sys + +def setup(core, object): + object.setAttachment('radial_filename', 'ring/unity') + object.setAttachment('objType', 'ring') + object.setStfFilename('static_item_n') + object.setStfName('item_ring_set_spy_dps_01_01') + object.setDetailFilename('static_item_d') + object.setDetailName('item_ring_set_spy_dps_01_01') + object.setIntAttribute('required_combat_level', 85) + object.setStringAttribute('class_required', 'Spy') + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_action_line_sp_dm', 2) + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_action_line_sp_dot', 2) + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_cooldown_line_sp_dm', 1) + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_freeshot_sp_dm', 1) + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:fast_attack_line_sp_dm', 2) + object.setStringAttribute('@set_bonus:piece_bonus_count_3', '@set_bonus:set_bonus_spy_dps_1') + object.setStringAttribute('@set_bonus:piece_bonus_count_4', '@set_bonus:set_bonus_spy_dps_2') + object.setStringAttribute('@set_bonus:piece_bonus_count_5', '@set_bonus:set_bonus_spy_dps_3') + object.setAttachment('setBonus', 'set_bonus_spy_dps') + return \ No newline at end of file diff --git a/scripts/object/tangible/wearables/ring/item_ring_set_spy_utility_a_01_01.py b/scripts/object/tangible/wearables/ring/item_ring_set_spy_utility_a_01_01.py new file mode 100644 index 00000000..500ea4ff --- /dev/null +++ b/scripts/object/tangible/wearables/ring/item_ring_set_spy_utility_a_01_01.py @@ -0,0 +1,20 @@ +import sys + +def setup(core, object): + object.setAttachment('radial_filename', 'ring/unity') + object.setAttachment('objType', 'ring') + object.setStfFilename('static_item_n') + object.setStfName('item_ring_set_spy_utility_a_01_01') + object.setDetailFilename('static_item_d') + object.setDetailName('item_ring_set_spy_utility_a_01_01') + object.setIntAttribute('required_combat_level', 85) + object.setStringAttribute('class_required', 'Spy') + object.setIntAttribute('cat_stat_mod_bonus.@stat_n:strength_modified', 25) + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:fast_attack_line_sp_smoke', 1) + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_duration_line_sp_preparation', 1) + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_cooldown_line_sp_preparation', 6) + object.setStringAttribute('@set_bonus:piece_bonus_count_3', '@set_bonus:set_bonus_spy_utility_a_1') + object.setStringAttribute('@set_bonus:piece_bonus_count_4', '@set_bonus:set_bonus_spy_utility_a_2') + object.setStringAttribute('@set_bonus:piece_bonus_count_5', '@set_bonus:set_bonus_spy_utility_a_3') + object.setAttachment('setBonus', 'set_bonus_spy_utility_a') + return diff --git a/scripts/object/tangible/wearables/ring/item_ring_set_spy_utility_b_01_01.py b/scripts/object/tangible/wearables/ring/item_ring_set_spy_utility_b_01_01.py new file mode 100644 index 00000000..3903a677 --- /dev/null +++ b/scripts/object/tangible/wearables/ring/item_ring_set_spy_utility_b_01_01.py @@ -0,0 +1,19 @@ +import sys + +def setup(core, object): + object.setAttachment('radial_filename', 'ring/unity') + object.setAttachment('objType', 'ring') + object.setStfFilename('static_item_n') + object.setStfName('item_ring_set_spy_utility_b_01_01') + object.setDetailFilename('static_item_d') + object.setDetailName('item_ring_set_spy_utility_b_01_01') + object.setIntAttribute('required_combat_level', 85) + object.setStringAttribute('class_required', 'Spy') + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_strikethrough_chance', 2) + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_action_all', 1) + object.setIntAttribute('cat_stat_mod_bonus.@stat_n:luck_modified', 50) + object.setStringAttribute('@set_bonus:piece_bonus_count_3', '@set_bonus:set_bonus_spy_utility_b_1') + object.setStringAttribute('@set_bonus:piece_bonus_count_4', '@set_bonus:set_bonus_spy_utility_b_2') + object.setStringAttribute('@set_bonus:piece_bonus_count_5', '@set_bonus:set_bonus_spy_utility_b_3') + object.setAttachment('setBonus', 'set_bonus_spy_utility_b') + return \ No newline at end of file diff --git a/scripts/object/tangible/wearables/ring/item_spy_ring_01_02.py b/scripts/object/tangible/wearables/ring/item_spy_ring_01_02.py new file mode 100644 index 00000000..e6d4aafb --- /dev/null +++ b/scripts/object/tangible/wearables/ring/item_spy_ring_01_02.py @@ -0,0 +1,11 @@ +import sys + +def setup(core, object): + object.setStfFilename('static_item_n') + object.setStfName('item_spy_ring_01_02') + object.setDetailFilename('static_item_d') + object.setDetailName('item_spy_ring_01_02') + object.setIntAttribute('cat_stat_mod_bonus.@stat_n:constitution_modified', 6) + object.setIntAttribute('cat_stat_mod_bonus.@stat_n:precision_modified', 6) + object.setStringAttribute('class_required', 'Spy') + return diff --git a/scripts/object/tangible/wearables/ring/ring_base.py b/scripts/object/tangible/wearables/ring/ring_base.py index ccad8904..21d2e709 100644 --- a/scripts/object/tangible/wearables/ring/ring_base.py +++ b/scripts/object/tangible/wearables/ring/ring_base.py @@ -1,4 +1,6 @@ import sys def setup(core, object): + object.setAttachment('objType', 'ring') + object.setAttachment('radial_filename', 'ring/unity') return \ No newline at end of file diff --git a/scripts/object/tangible/wearables/ring/ring_gcw_imperial.py b/scripts/object/tangible/wearables/ring/ring_gcw_imperial.py index ccad8904..a7a9a10b 100644 --- a/scripts/object/tangible/wearables/ring/ring_gcw_imperial.py +++ b/scripts/object/tangible/wearables/ring/ring_gcw_imperial.py @@ -1,4 +1,6 @@ import sys def setup(core, object): + object.setAttachment('radial_filename', 'ring/unity') + object.setAttachment('objType', 'ring') return \ No newline at end of file diff --git a/scripts/object/tangible/wearables/ring/ring_gcw_rebel.py b/scripts/object/tangible/wearables/ring/ring_gcw_rebel.py index ccad8904..a7a9a10b 100644 --- a/scripts/object/tangible/wearables/ring/ring_gcw_rebel.py +++ b/scripts/object/tangible/wearables/ring/ring_gcw_rebel.py @@ -1,4 +1,6 @@ import sys def setup(core, object): + object.setAttachment('radial_filename', 'ring/unity') + object.setAttachment('objType', 'ring') return \ No newline at end of file diff --git a/scripts/object/tangible/wearables/ring/ring_mark_hero.py b/scripts/object/tangible/wearables/ring/ring_mark_hero.py index ccad8904..a7a9a10b 100644 --- a/scripts/object/tangible/wearables/ring/ring_mark_hero.py +++ b/scripts/object/tangible/wearables/ring/ring_mark_hero.py @@ -1,4 +1,6 @@ import sys def setup(core, object): + object.setAttachment('radial_filename', 'ring/unity') + object.setAttachment('objType', 'ring') return \ No newline at end of file diff --git a/scripts/object/tangible/wearables/ring/ring_nightsister.py b/scripts/object/tangible/wearables/ring/ring_nightsister.py index ccad8904..a7a9a10b 100644 --- a/scripts/object/tangible/wearables/ring/ring_nightsister.py +++ b/scripts/object/tangible/wearables/ring/ring_nightsister.py @@ -1,4 +1,6 @@ import sys def setup(core, object): + object.setAttachment('radial_filename', 'ring/unity') + object.setAttachment('objType', 'ring') return \ No newline at end of file diff --git a/scripts/object/tangible/wearables/ring/ring_s01.py b/scripts/object/tangible/wearables/ring/ring_s01.py index dc6ea0b1..f311265b 100644 --- a/scripts/object/tangible/wearables/ring/ring_s01.py +++ b/scripts/object/tangible/wearables/ring/ring_s01.py @@ -1,6 +1,8 @@ import sys def setup(core, object): + object.setAttachment('radial_filename', 'ring/unity') + object.setAttachment('objType', 'ring') return def equip(core, actor, object): diff --git a/scripts/object/tangible/wearables/ring/ring_s02.py b/scripts/object/tangible/wearables/ring/ring_s02.py index 2ca3d3ca..467d8fb3 100644 --- a/scripts/object/tangible/wearables/ring/ring_s02.py +++ b/scripts/object/tangible/wearables/ring/ring_s02.py @@ -1,6 +1,8 @@ import sys def setup(core, object): + object.setAttachment('radial_filename', 'ring/unity') + object.setAttachment('objType', 'ring') return def equip(core, actor, object): diff --git a/scripts/object/tangible/wearables/ring/ring_s03.py b/scripts/object/tangible/wearables/ring/ring_s03.py index 418b5aa4..52d2d1d2 100644 --- a/scripts/object/tangible/wearables/ring/ring_s03.py +++ b/scripts/object/tangible/wearables/ring/ring_s03.py @@ -1,6 +1,8 @@ import sys def setup(core, object): + object.setAttachment('radial_filename', 'ring/unity') + object.setAttachment('objType', 'ring') return def equip(core, actor, object): diff --git a/scripts/object/tangible/wearables/ring/ring_s03_quest.py b/scripts/object/tangible/wearables/ring/ring_s03_quest.py index ccad8904..a7a9a10b 100644 --- a/scripts/object/tangible/wearables/ring/ring_s03_quest.py +++ b/scripts/object/tangible/wearables/ring/ring_s03_quest.py @@ -1,4 +1,6 @@ import sys def setup(core, object): + object.setAttachment('radial_filename', 'ring/unity') + object.setAttachment('objType', 'ring') return \ No newline at end of file diff --git a/scripts/object/tangible/wearables/ring/ring_s04.py b/scripts/object/tangible/wearables/ring/ring_s04.py index 6410d76f..c00caed9 100644 --- a/scripts/object/tangible/wearables/ring/ring_s04.py +++ b/scripts/object/tangible/wearables/ring/ring_s04.py @@ -1,6 +1,8 @@ import sys def setup(core, object): + object.setAttachment('radial_filename', 'ring/unity') + object.setAttachment('objType', 'ring') return def equip(core, actor, object): diff --git a/scripts/object/tangible/wearables/robe/item_npe_fs_robe_02_01.py b/scripts/object/tangible/wearables/robe/item_npe_fs_robe_02_01.py new file mode 100644 index 00000000..afb64a4b --- /dev/null +++ b/scripts/object/tangible/wearables/robe/item_npe_fs_robe_02_01.py @@ -0,0 +1,11 @@ +import sys + +def setup(core, object): + object.setStfFilename('static_item_n') + object.setStfName('item_npe_fs_robe_02_01') + object.setDetailFilename('static_item_d') + object.setDetailName('item_npe_fs_robe_02_01') + object.setIntAttribute('cat_stat_mod_bonus.@stat_n:agility_modified', 10) + object.setStringAttribute('class_required', 'Jedi') + object.setIntAttribute('required_combat_level', 1) + return diff --git a/scripts/object/tangible/wearables/robe/item_npe_fs_robe_02_02.py b/scripts/object/tangible/wearables/robe/item_npe_fs_robe_02_02.py new file mode 100644 index 00000000..d71c2f44 --- /dev/null +++ b/scripts/object/tangible/wearables/robe/item_npe_fs_robe_02_02.py @@ -0,0 +1,13 @@ +import sys + +def setup(core, object): + object.setStfFilename('static_item_n') + object.setStfName('item_npe_fs_robe_02_02') + object.setDetailFilename('static_item_d') + object.setDetailName('item_npe_fs_robe_02_02') + object.setIntAttribute('cat_stat_mod_bonus.@stat_n:constitution_modified', 21) + object.setStringAttribute('protection_level', 'Faint') + object.setStringAttribute('class_required', 'Jedi') + object.setIntAttribute('required_combat_level', 20) + object.setAttachment('type', 'jedi_robe') + return diff --git a/scripts/object/tangible/wearables/robe/robe_jedi_dark_s01.py b/scripts/object/tangible/wearables/robe/robe_jedi_dark_s01.py index ccad8904..6c8a9d3c 100644 --- a/scripts/object/tangible/wearables/robe/robe_jedi_dark_s01.py +++ b/scripts/object/tangible/wearables/robe/robe_jedi_dark_s01.py @@ -1,4 +1,15 @@ import sys def setup(core, object): - return \ No newline at end of file + object.setStfFilename('static_item_n') + object.setStfName('item_jedi_robe_dark_03_01') + object.setDetailFilename('static_item_d') + object.setDetailName('item_jedi_robe_dark_03_01') + object.setIntAttribute('cat_stat_mod_bonus.@stat_n:constitution_modified', 100) + object.setIntAttribute('cat_stat_mod_bonus.@stat_n:precision_modified', 100) + object.setStringAttribute('protection_level', 'Weak') + object.setStringAttribute('class_required', 'Jedi') + object.setIntAttribute('required_combat_level', 40) + object.setStringAttribute('@set_bonus:piece_bonus_count_2', '@set_bonus:set_bonus_jedi_robe_1') + object.setAttachment('type', 'jedi_robe') + return diff --git a/scripts/object/tangible/wearables/robe/robe_jedi_dark_s02.py b/scripts/object/tangible/wearables/robe/robe_jedi_dark_s02.py index ccad8904..ab11f14c 100644 --- a/scripts/object/tangible/wearables/robe/robe_jedi_dark_s02.py +++ b/scripts/object/tangible/wearables/robe/robe_jedi_dark_s02.py @@ -1,4 +1,15 @@ import sys def setup(core, object): - return \ No newline at end of file + object.setStfFilename('static_item_n') + object.setStfName('item_jedi_robe_dark_03_02') + object.setDetailFilename('static_item_d') + object.setDetailName('item_jedi_robe_dark_03_02') + object.setIntAttribute('cat_stat_mod_bonus.@stat_n:constitution_modified', 145) + object.setIntAttribute('cat_stat_mod_bonus.@stat_n:precision_modified', 145) + object.setStringAttribute('protection_level', 'Lucent') + object.setStringAttribute('class_required', 'Jedi') + object.setIntAttribute('required_combat_level', 60) + object.setAttachment('type', 'jedi_robe') + object.setStringAttribute('@set_bonus:piece_bonus_count_2', '@set_bonus:set_bonus_jedi_robe_1') + return diff --git a/scripts/object/tangible/wearables/robe/robe_jedi_dark_s03.py b/scripts/object/tangible/wearables/robe/robe_jedi_dark_s03.py index ccad8904..101fa13f 100644 --- a/scripts/object/tangible/wearables/robe/robe_jedi_dark_s03.py +++ b/scripts/object/tangible/wearables/robe/robe_jedi_dark_s03.py @@ -1,4 +1,21 @@ import sys def setup(core, object): - return \ No newline at end of file + object.setStfFilename('static_item_n') + object.setStfName('item_jedi_robe_dark_03_03') + object.setDetailFilename('static_item_d') + object.setDetailName('item_jedi_robe_dark_03_03') + + object.setStringAttribute('protection_level', 'Luminous') + object.setStringAttribute('class_required', 'Jedi') + object.setIntAttribute('required_combat_level', 80) + + object.setIntAttribute('cat_stat_mod_bonus.@stat_n:constitution_modified', 185) + object.setIntAttribute('cat_stat_mod_bonus.@stat_n:precision_modified', 185) + object.setIntAttribute('cat_stat_mod_bonus.@stat_n:luck_modified', 185) + + object.setStringAttribute('@set_bonus:piece_bonus_count_2', '@set_bonus:set_bonus_jedi_robe_1') + + object.setAttachment('type', 'jedi_robe') + object.setAttachment('setBonus', 'set_bonus_jedi_robe') + return diff --git a/scripts/object/tangible/wearables/robe/robe_jedi_dark_s04.py b/scripts/object/tangible/wearables/robe/robe_jedi_dark_s04.py index ccad8904..5b1543e3 100644 --- a/scripts/object/tangible/wearables/robe/robe_jedi_dark_s04.py +++ b/scripts/object/tangible/wearables/robe/robe_jedi_dark_s04.py @@ -1,4 +1,22 @@ import sys def setup(core, object): + object.setStfFilename('static_item_n') + object.setStfName('item_jedi_robe_dark_04_04') + object.setDetailFilename('static_item_d') + object.setDetailName('item_jedi_robe_dark_04_04') + + object.setStringAttribute('protection_level', 'Radiant') + object.setStringAttribute('class_required', 'Jedi') + object.setIntAttribute('required_combat_level', 80) + + object.setIntAttribute('cat_stat_mod_bonus.@stat_n:constitution_modified', 250) + object.setIntAttribute('cat_stat_mod_bonus.@stat_n:precision_modified', 250) + object.setIntAttribute('cat_stat_mod_bonus.@stat_n:luck_modified', 250) + + object.setStringAttribute('proc_name', '@ui_buff:proc_old_dark_jedi_gift') + object.setStringAttribute('@set_bonus:piece_bonus_count_2', '@set_bonus:set_bonus_jedi_robe_1') + + object.setAttachment('type', 'jedi_robe') + object.setAttachment('setBonus', 'set_bonus_jedi_robe') return \ No newline at end of file diff --git a/scripts/object/tangible/wearables/robe/robe_jedi_dark_s05.py b/scripts/object/tangible/wearables/robe/robe_jedi_dark_s05.py index f4e46790..80081dce 100644 --- a/scripts/object/tangible/wearables/robe/robe_jedi_dark_s05.py +++ b/scripts/object/tangible/wearables/robe/robe_jedi_dark_s05.py @@ -1,31 +1,22 @@ import sys def setup(core, object): + object.setStfFilename('static_item_n') + object.setStfName('item_jedi_robe_dark_04_05') + object.setDetailFilename('static_item_d') + object.setDetailName('item_jedi_robe_dark_04_05') + + object.setStringAttribute('protection_level', 'Radiant') + object.setStringAttribute('class_required', 'Jedi') + object.setIntAttribute('required_combat_level', 20) + + object.setIntAttribute('cat_stat_mod_bonus.@stat_n:constitution_modified', 250) + object.setIntAttribute('cat_stat_mod_bonus.@stat_n:precision_modified', 250) + object.setIntAttribute('cat_stat_mod_bonus.@stat_n:luck_modified', 250) + + object.setStringAttribute('proc_name', '@ui_buff:proc_old_dark_jedi_gift') + object.setStringAttribute('@set_bonus:piece_bonus_count_2', '@set_bonus:set_bonus_jedi_robe_1') + + object.setAttachment('type', 'jedi_robe') + object.setAttachment('setBonus', 'set_bonus_jedi_robe') return - -def equip(core, actor, target): - core.skillModService.addSkillMod(actor, 'constitution_modified', 250) - core.skillModService.addSkillMod(actor, 'precision_modified', 250) - core.skillModService.addSkillMod(actor, 'luck_modified', 250) - - Buff = actor.getBuffByName('proc_old_dark_jedi_gift') - if actor.getBuffList().contains(Buff): - core.buffService.removeBuffFromCreature(actor, Buff) - return - - if actor: - core.buffService.addBuffToCreature(actor, 'proc_old_dark_jedi_gift') - return - return - -def unequip(core, actor, target): - core.skillModService.deductSkillMod(actor, 'constitution_modified', 250) - core.skillModService.deductSkillMod(actor, 'precision_modified', 250) - core.skillModService.deductSkillMod(actor, 'luck_modified', 250) - - Buff = actor.getBuffByName('proc_old_dark_jedi_gift') - if actor.getBuffList().contains(Buff): - core.buffService.removeBuffFromCreature(actor, Buff) - return - return - diff --git a/scripts/object/tangible/wearables/robe/robe_jedi_light_s01.py b/scripts/object/tangible/wearables/robe/robe_jedi_light_s01.py index ccad8904..bc274ef4 100644 --- a/scripts/object/tangible/wearables/robe/robe_jedi_light_s01.py +++ b/scripts/object/tangible/wearables/robe/robe_jedi_light_s01.py @@ -1,4 +1,15 @@ import sys def setup(core, object): - return \ No newline at end of file + object.setStfFilename('static_item_n') + object.setStfName('item_jedi_robe_light_03_01') + object.setDetailFilename('static_item_d') + object.setDetailName('item_jedi_robe_light_03_01') + object.setIntAttribute('cat_stat_mod_bonus.@stat_n:constitution_modified', 100) + object.setIntAttribute('cat_stat_mod_bonus.@stat_n:strength_modified', 100) + object.setStringAttribute('protection_level', 'Weak') + object.setStringAttribute('class_required', 'Jedi') + object.setIntAttribute('required_combat_level', 40) + object.setAttachment('type', 'jedi_robe') + object.setStringAttribute('@set_bonus:piece_bonus_count_2', '@set_bonus:set_bonus_jedi_robe_1') + return diff --git a/scripts/object/tangible/wearables/robe/robe_jedi_light_s02.py b/scripts/object/tangible/wearables/robe/robe_jedi_light_s02.py index ccad8904..7e01e7ab 100644 --- a/scripts/object/tangible/wearables/robe/robe_jedi_light_s02.py +++ b/scripts/object/tangible/wearables/robe/robe_jedi_light_s02.py @@ -1,4 +1,15 @@ import sys def setup(core, object): - return \ No newline at end of file + object.setStfFilename('static_item_n') + object.setStfName('item_jedi_robe_light_03_02') + object.setDetailFilename('static_item_d') + object.setDetailName('item_jedi_robe_light_03_02') + object.setIntAttribute('cat_stat_mod_bonus.@stat_n:constitution_modified', 145) + object.setIntAttribute('cat_stat_mod_bonus.@stat_n:strength_modified', 145) + object.setStringAttribute('protection_level', 'Lucent') + object.setStringAttribute('class_required', 'Jedi') + object.setIntAttribute('required_combat_level', 60) + object.setAttachment('type', 'jedi_robe') + object.setStringAttribute('@set_bonus:piece_bonus_count_2', '@set_bonus:set_bonus_jedi_robe_1') + return diff --git a/scripts/object/tangible/wearables/robe/robe_jedi_light_s03.py b/scripts/object/tangible/wearables/robe/robe_jedi_light_s03.py index ccad8904..904d0be2 100644 --- a/scripts/object/tangible/wearables/robe/robe_jedi_light_s03.py +++ b/scripts/object/tangible/wearables/robe/robe_jedi_light_s03.py @@ -1,4 +1,21 @@ import sys def setup(core, object): - return \ No newline at end of file + object.setStfFilename('static_item_n') + object.setStfName('item_jedi_robe_light_03_03') + object.setDetailFilename('static_item_d') + object.setDetailName('item_jedi_robe_light_03_03') + + object.setStringAttribute('protection_level', 'Luminous') + object.setStringAttribute('class_required', 'Jedi') + object.setIntAttribute('required_combat_level', 80) + + object.setIntAttribute('cat_stat_mod_bonus.@stat_n:constitution_modified', 185) + object.setIntAttribute('cat_stat_mod_bonus.@stat_n:strength_modified', 185) + object.setIntAttribute('cat_stat_mod_bonus.@stat_n:agility_modified', 185) + + object.setStringAttribute('@set_bonus:piece_bonus_count_2', '@set_bonus:set_bonus_jedi_robe_1') + + object.setAttachment('type', 'jedi_robe') + object.setAttachment('setBonus', 'set_bonus_jedi_robe') + return diff --git a/scripts/object/tangible/wearables/robe/robe_jedi_light_s04.py b/scripts/object/tangible/wearables/robe/robe_jedi_light_s04.py index ccad8904..c540ba74 100644 --- a/scripts/object/tangible/wearables/robe/robe_jedi_light_s04.py +++ b/scripts/object/tangible/wearables/robe/robe_jedi_light_s04.py @@ -1,4 +1,26 @@ import sys def setup(core, object): - return \ No newline at end of file + object.setStfFilename('static_item_n') + object.setStfName('item_jedi_robe_light_04_04') + object.setDetailFilename('static_item_d') + object.setDetailName('item_jedi_robe_light_04_04') + + object.setStringAttribute('protection_level', 'Radiant') + object.setStringAttribute('class_required', 'Jedi') + object.setIntAttribute('required_combat_level', 80) + + object.setIntAttribute('cat_stat_mod_bonus.@stat_n:constitution_modified', 250) + object.setIntAttribute('cat_stat_mod_bonus.@stat_n:strength_modified', 250) + object.setIntAttribute('cat_stat_mod_bonus.@stat_n:agility_modified', 250) + + + object.setStringAttribute('proc_name', '@ui_buff:proc_old_light_jedi_gift') + object.setStringAttribute('@set_bonus:piece_bonus_count_2', '@set_bonus:set_bonus_jedi_robe_1') + + object.setAttachment('type', 'jedi_robe') + object.setAttachment('setBonus', 'set_bonus_jedi_robe') + + return + + \ No newline at end of file diff --git a/scripts/object/tangible/wearables/robe/robe_jedi_light_s05.py b/scripts/object/tangible/wearables/robe/robe_jedi_light_s05.py index ccad8904..0b850eec 100644 --- a/scripts/object/tangible/wearables/robe/robe_jedi_light_s05.py +++ b/scripts/object/tangible/wearables/robe/robe_jedi_light_s05.py @@ -1,4 +1,26 @@ import sys def setup(core, object): - return \ No newline at end of file + object.setStfFilename('static_item_n') + object.setStfName('item_jedi_robe_light_04_05') + object.setDetailFilename('static_item_d') + object.setDetailName('item_jedi_robe_light_04_05') + + object.setStringAttribute('protection_level', 'Radiant') + object.setStringAttribute('class_required', 'Jedi') + object.setIntAttribute('required_combat_level', 20) + + object.setIntAttribute('cat_stat_mod_bonus.@stat_n:constitution_modified', 250) + object.setIntAttribute('cat_stat_mod_bonus.@stat_n:strength_modified', 250) + object.setIntAttribute('cat_stat_mod_bonus.@stat_n:agility_modified', 250) + + + object.setStringAttribute('proc_name', '@ui_buff:proc_old_light_jedi_gift') + object.setStringAttribute('@set_bonus:piece_bonus_count_2', '@set_bonus:set_bonus_jedi_robe_1') + + object.setAttachment('type', 'jedi_robe') + object.setAttachment('setBonus', 'set_bonus_jedi_robe') + + return + + diff --git a/scripts/object/tangible/wearables/robe/robe_jedi_padawan.py b/scripts/object/tangible/wearables/robe/robe_jedi_padawan.py index ccad8904..6a0ba95d 100644 --- a/scripts/object/tangible/wearables/robe/robe_jedi_padawan.py +++ b/scripts/object/tangible/wearables/robe/robe_jedi_padawan.py @@ -1,4 +1,15 @@ import sys def setup(core, object): - return \ No newline at end of file + return + +def equip(core, actor, target): + core.skillModService.addSkillMod(actor, 'agility_modified', 21) + + return + +def unequip(core, actor, target): + core.skillModService.deductSkillMod(actor, 'agility_modified', 21) + + return + \ No newline at end of file diff --git a/scripts/object/tangible/wearables/robe/robe_s05_h1.py b/scripts/object/tangible/wearables/robe/robe_s05_h1.py index ccad8904..6df15568 100644 --- a/scripts/object/tangible/wearables/robe/robe_s05_h1.py +++ b/scripts/object/tangible/wearables/robe/robe_s05_h1.py @@ -1,4 +1,22 @@ import sys def setup(core, object): + object.setStfFilename('static_item_n') + object.setStfName('item_jedi_robe_06_01') + object.setDetailFilename('static_item_d') + object.setDetailName('item_jedi_robe_06_01') + + object.setStringAttribute('protection_level', 'Luminous') + object.setStringAttribute('class_required', 'Jedi') + object.setIntAttribute('required_combat_level', 80) + + object.setIntAttribute('cat_stat_mod_bonus.@stat_n:constitution_modified', 100) + object.setIntAttribute('cat_stat_mod_bonus.@stat_n:strength_modified', 100) + object.setIntAttribute('cat_stat_mod_bonus.@stat_n:agility_modified', 100) + object.setIntAttribute('cat_stat_mod_bonus.@stat_n:luck_modified', 100) + + object.setStringAttribute('@set_bonus:piece_bonus_count_2', '@set_bonus:set_bonus_jedi_robe_1') + + object.setAttachment('type', 'jedi_robe') + object.setAttachment('setBonus', 'set_bonus_jedi_robe') return \ No newline at end of file diff --git a/scripts/object/tangible/wearables/robe/robe_tusken_raider_s01.py b/scripts/object/tangible/wearables/robe/robe_tusken_raider_s01.py index ccad8904..b89922ca 100644 --- a/scripts/object/tangible/wearables/robe/robe_tusken_raider_s01.py +++ b/scripts/object/tangible/wearables/robe/robe_tusken_raider_s01.py @@ -1,4 +1,7 @@ import sys def setup(core, object): + object.setStringAttribute('condition', '100/100') + object.setIntAttribute('volume', 1) + return \ No newline at end of file diff --git a/scripts/object/tangible/wearables/robe/robe_tusken_raider_s02.py b/scripts/object/tangible/wearables/robe/robe_tusken_raider_s02.py index ccad8904..b89922ca 100644 --- a/scripts/object/tangible/wearables/robe/robe_tusken_raider_s02.py +++ b/scripts/object/tangible/wearables/robe/robe_tusken_raider_s02.py @@ -1,4 +1,7 @@ import sys def setup(core, object): + object.setStringAttribute('condition', '100/100') + object.setIntAttribute('volume', 1) + return \ No newline at end of file diff --git a/scripts/object/tangible/wearables/shirt/item_smuggler_shirt_02_01.py b/scripts/object/tangible/wearables/shirt/item_smuggler_shirt_02_01.py new file mode 100644 index 00000000..c331d0b1 --- /dev/null +++ b/scripts/object/tangible/wearables/shirt/item_smuggler_shirt_02_01.py @@ -0,0 +1,10 @@ +import sys + +def setup(core, object): + object.setStfFilename('static_item_n') + object.setStfName('item_smuggler_shirt_02_01') + object.setDetailFilename('static_item_d') + object.setDetailName('item_smuggler_shirt_02_01') + object.setIntAttribute('cat_stat_mod_bonus.@stat_n:agility_modified', 3) + object.setStringAttribute('class_required', 'Smuggler') + return \ No newline at end of file diff --git a/scripts/object/tangible/wearables/shirt/item_spy_shirt_02_01.py b/scripts/object/tangible/wearables/shirt/item_spy_shirt_02_01.py new file mode 100644 index 00000000..8bda143e --- /dev/null +++ b/scripts/object/tangible/wearables/shirt/item_spy_shirt_02_01.py @@ -0,0 +1,10 @@ +import sys + +def setup(core, object): + object.setStfFilename('static_item_n') + object.setStfName('item_spy_shirt_02_01') + object.setDetailFilename('static_item_d') + object.setDetailName('item_spy_shirt_02_01') + object.setIntAttribute('cat_stat_mod_bonus.@stat_n:agility_modified', 3) + object.setStringAttribute('class_required', 'Spy') + return \ No newline at end of file diff --git a/scripts/object/tangible/wearables/utility/utility_belt_tusken_raider.py b/scripts/object/tangible/wearables/utility/utility_belt_tusken_raider.py index ccad8904..a398dc48 100644 --- a/scripts/object/tangible/wearables/utility/utility_belt_tusken_raider.py +++ b/scripts/object/tangible/wearables/utility/utility_belt_tusken_raider.py @@ -1,4 +1,7 @@ import sys def setup(core, object): + object.setStringAttribute('condition', '100/100') + object.setIntAttribute('volume', 1) + return \ No newline at end of file diff --git a/scripts/object/tangible/wearables/vest/appearance_invisible_s01.py b/scripts/object/tangible/wearables/vest/appearance_invisible_s01.py index ccad8904..a398dc48 100644 --- a/scripts/object/tangible/wearables/vest/appearance_invisible_s01.py +++ b/scripts/object/tangible/wearables/vest/appearance_invisible_s01.py @@ -1,4 +1,7 @@ import sys def setup(core, object): + object.setStringAttribute('condition', '100/100') + object.setIntAttribute('volume', 1) + return \ No newline at end of file diff --git a/scripts/object/tangible/wearables/vest/item_smuggler_vest_02_01.py b/scripts/object/tangible/wearables/vest/item_smuggler_vest_02_01.py new file mode 100644 index 00000000..35c0cd30 --- /dev/null +++ b/scripts/object/tangible/wearables/vest/item_smuggler_vest_02_01.py @@ -0,0 +1,10 @@ +import sys + +def setup(core, object): + object.setStfFilename('static_item_n') + object.setStfName('item_smuggler_vest_02_01') + object.setDetailFilename('static_item_d') + object.setDetailName('item_smuggler_vest_02_01') + object.setIntAttribute('cat_stat_mod_bonus.@stat_n:agility_modified', 3) + object.setStringAttribute('class_required', 'Smuggler') + return \ No newline at end of file diff --git a/scripts/object/tangible/wearables/wookiee/wke_lifeday_robe.py b/scripts/object/tangible/wearables/wookiee/wke_lifeday_robe.py index ccad8904..b89922ca 100644 --- a/scripts/object/tangible/wearables/wookiee/wke_lifeday_robe.py +++ b/scripts/object/tangible/wearables/wookiee/wke_lifeday_robe.py @@ -1,4 +1,7 @@ import sys def setup(core, object): + object.setStringAttribute('condition', '100/100') + object.setIntAttribute('volume', 1) + return \ No newline at end of file diff --git a/scripts/object/tangible/wearables/wookiee/wke_lifeday_robe_f.py b/scripts/object/tangible/wearables/wookiee/wke_lifeday_robe_f.py index ccad8904..b89922ca 100644 --- a/scripts/object/tangible/wearables/wookiee/wke_lifeday_robe_f.py +++ b/scripts/object/tangible/wearables/wookiee/wke_lifeday_robe_f.py @@ -1,4 +1,7 @@ import sys def setup(core, object): + object.setStringAttribute('condition', '100/100') + object.setIntAttribute('volume', 1) + return \ No newline at end of file diff --git a/scripts/object/tangible/wearables/wookiee/wke_lifeday_robe_m.py b/scripts/object/tangible/wearables/wookiee/wke_lifeday_robe_m.py index ccad8904..b89922ca 100644 --- a/scripts/object/tangible/wearables/wookiee/wke_lifeday_robe_m.py +++ b/scripts/object/tangible/wearables/wookiee/wke_lifeday_robe_m.py @@ -1,4 +1,7 @@ import sys def setup(core, object): + object.setStringAttribute('condition', '100/100') + object.setIntAttribute('volume', 1) + return \ No newline at end of file diff --git a/scripts/object/weapon/creature/creature_default_weapon.py b/scripts/object/weapon/creature/creature_default_weapon.py index ccad8904..78eeaca8 100644 --- a/scripts/object/weapon/creature/creature_default_weapon.py +++ b/scripts/object/weapon/creature/creature_default_weapon.py @@ -1,4 +1,12 @@ import sys +from resources.datatables import WeaponType def setup(core, object): + object.setAttackSpeed(1) + object.setDamageType("kinetic") + object.setMinDamage(50) + object.setMaxDamage(100) + object.setMaxRange(5) + object.setWeaponType(WeaponType.UNARMED) + return \ No newline at end of file diff --git a/scripts/object/weapon/melee/2h_sword/crafted_saber/sword_lightsaber_two_handed_gen5.py b/scripts/object/weapon/melee/2h_sword/crafted_saber/sword_lightsaber_two_handed_gen5.py index ccad8904..7f41b9a6 100644 --- a/scripts/object/weapon/melee/2h_sword/crafted_saber/sword_lightsaber_two_handed_gen5.py +++ b/scripts/object/weapon/melee/2h_sword/crafted_saber/sword_lightsaber_two_handed_gen5.py @@ -1,4 +1,13 @@ import sys +from engine.resources.container import CreaturePermissions def setup(core, object): + + inventory = core.objectService.createObject("object/tangible/inventory/shared_lightsaber_inventory_5.iff", object.getPlanet()) + inventory.setContainerPermissions(CreaturePermissions.CREATURE_PERMISSIONS); + + object.add(inventory) + + object.setAttachment('radial_filename', 'item/lightsaber') + return \ No newline at end of file diff --git a/scripts/object/weapon/melee/knife/weapon_knife_trader_roadmap_01_02.py b/scripts/object/weapon/melee/knife/weapon_knife_trader_roadmap_01_02.py new file mode 100644 index 00000000..a8e53801 --- /dev/null +++ b/scripts/object/weapon/melee/knife/weapon_knife_trader_roadmap_01_02.py @@ -0,0 +1,15 @@ +import sys + +def setup(core, object): + object.setStfFilename('static_item_n') + object.setStfName('weapon_knife_trader_roadmap_01_02') + object.setDetailFilename('static_item_d') + object.setDetailName('weapon_knife_trader_roadmap_01_02') + object.setStringAttribute('class_required', 'Trader') + object.setIntAttribute('required_combat_level', 42) + object.setFloatAttribute('cat_wpn_damage.wpn_attack_speed', 0) + object.setStringAttribute('cat_wpn_damage.damage', '80 - 160') + object.setStringAttribute('cat_wpn_damage.wpn_range', '0-5m') + object.setStringAttribute('cat_wpn_damage.wpn_category', 'One-Handed Melee') + object.setIntAttribute('cat_wpn_damage.dps', object.getDamagePerSecond()) + return \ No newline at end of file diff --git a/scripts/object/weapon/melee/polearm/crafted_saber/sword_lightsaber_polearm_gen5.py b/scripts/object/weapon/melee/polearm/crafted_saber/sword_lightsaber_polearm_gen5.py index ccad8904..7f41b9a6 100644 --- a/scripts/object/weapon/melee/polearm/crafted_saber/sword_lightsaber_polearm_gen5.py +++ b/scripts/object/weapon/melee/polearm/crafted_saber/sword_lightsaber_polearm_gen5.py @@ -1,4 +1,13 @@ import sys +from engine.resources.container import CreaturePermissions def setup(core, object): + + inventory = core.objectService.createObject("object/tangible/inventory/shared_lightsaber_inventory_5.iff", object.getPlanet()) + inventory.setContainerPermissions(CreaturePermissions.CREATURE_PERMISSIONS); + + object.add(inventory) + + object.setAttachment('radial_filename', 'item/lightsaber') + return \ No newline at end of file diff --git a/scripts/object/weapon/melee/polearm/weapon_polearm_02_03.py b/scripts/object/weapon/melee/polearm/weapon_polearm_02_03.py new file mode 100644 index 00000000..a730dfbb --- /dev/null +++ b/scripts/object/weapon/melee/polearm/weapon_polearm_02_03.py @@ -0,0 +1,16 @@ +import sys + +def setup(core, object): + object.setStfFilename('static_item_n') + object.setStfName('weapon_polearm_02_03') + object.setDetailFilename('static_item_d') + object.setDetailName('weapon_polearm_02_03') + object.setIntAttribute('required_combat_level', 1) + object.setAttackSpeed(1); + object.setMaxRange(5); + object.setDamageType("kinetic"); + object.setMinDamage(43); + object.setMaxDamage(75); + object.setWeaponType(7); + return + return \ No newline at end of file diff --git a/scripts/object/weapon/melee/sword/crafted_saber/sword_lightsaber_one_handed_gen5.py b/scripts/object/weapon/melee/sword/crafted_saber/sword_lightsaber_one_handed_gen5.py index ccad8904..7f41b9a6 100644 --- a/scripts/object/weapon/melee/sword/crafted_saber/sword_lightsaber_one_handed_gen5.py +++ b/scripts/object/weapon/melee/sword/crafted_saber/sword_lightsaber_one_handed_gen5.py @@ -1,4 +1,13 @@ import sys +from engine.resources.container import CreaturePermissions def setup(core, object): + + inventory = core.objectService.createObject("object/tangible/inventory/shared_lightsaber_inventory_5.iff", object.getPlanet()) + inventory.setContainerPermissions(CreaturePermissions.CREATURE_PERMISSIONS); + + object.add(inventory) + + object.setAttachment('radial_filename', 'item/lightsaber') + return \ No newline at end of file diff --git a/scripts/object/weapon/melee/sword/crafted_saber/weapon_roadmap_lightsaber_02_02.py b/scripts/object/weapon/melee/sword/crafted_saber/weapon_roadmap_lightsaber_02_02.py new file mode 100644 index 00000000..38a9f07e --- /dev/null +++ b/scripts/object/weapon/melee/sword/crafted_saber/weapon_roadmap_lightsaber_02_02.py @@ -0,0 +1,12 @@ +import sys + +def setup(core, object): + object.setCustomName('First Generation Lightsaber') + + object.setFloatAttribute('cat_wpn_damage.wpn_attack_speed', 1) + object.setStringAttribute('class_required', 'Jedi') + object.setStringAttribute('cat_wpn_damage.wpn_damage_type', 'Energy') + object.setStringAttribute('cat_wpn_damage.damage', '200-400') + + ## finish this ## + return \ No newline at end of file diff --git a/scripts/object/weapon/ranged/carbine/weapon_acidbeam_commando_roadmap_01_02.py b/scripts/object/weapon/ranged/carbine/weapon_acidbeam_commando_roadmap_01_02.py new file mode 100644 index 00000000..8fd46b6d --- /dev/null +++ b/scripts/object/weapon/ranged/carbine/weapon_acidbeam_commando_roadmap_01_02.py @@ -0,0 +1,17 @@ +import sys + +def setup(core, object): + object.setStfFilename('static_item_n') + object.setStfName('weapon_acidbeam_commando_roadmap_01_02') + object.setDetailFilename('static_item_d') + object.setDetailName('weapon_acidbeam_commando_roadmap_01_02') + object.setIntAttribute('cat_stat_mod_bonus.@stat_n:precision_modified', 5) + object.setStringAttribute('class_required', 'Commando') + object.setIntAttribute('required_combat_level', 30) + object.setFloatAttribute('cat_wpn_damage.wpn_attack_speed', 0.6) + object.setStringAttribute('cat_wpn_damage.wpn_damage_type', 'Energy') + object.setStringAttribute('cat_wpn_damage.damage', '109-218') + object.setStringAttribute('cat_wpn_damage.wpn_range', '0-50m') + object.setStringAttribute('cat_wpn_damage.wpn_category', 'Carbine') + object.setIntAttribute('cat_wpn_damage.dps', object.getDamagePerSecond()) + return \ No newline at end of file diff --git a/scripts/object/weapon/ranged/carbine/weapon_carbine_bh_roadmap_01_02.py b/scripts/object/weapon/ranged/carbine/weapon_carbine_bh_roadmap_01_02.py new file mode 100644 index 00000000..eede7b59 --- /dev/null +++ b/scripts/object/weapon/ranged/carbine/weapon_carbine_bh_roadmap_01_02.py @@ -0,0 +1,17 @@ +import sys + +def setup(core, object): + object.setStfFilename('static_item_n') + object.setStfName('weapon_carbine_bh_roadmap_01_02') + object.setDetailFilename('static_item_d') + object.setDetailName('weapon_carbine_bh_roadmap_01_02') + object.setIntAttribute('cat_stat_mod_bonus.@stat_n:precision_modified', 5) + object.setStringAttribute('class_required', 'Bounty Hunter') + object.setIntAttribute('required_combat_level', 30) + object.setFloatAttribute('cat_wpn_damage.wpn_attack_speed', 0.6) + object.setStringAttribute('cat_wpn_damage.wpn_damage_type', 'Energy') + object.setStringAttribute('cat_wpn_damage.damage', '109-218') + object.setStringAttribute('cat_wpn_damage.wpn_range', '0-55m') + object.setStringAttribute('cat_wpn_damage.wpn_category', 'Carbine') + object.setIntAttribute('cat_wpn_damage.dps', object.getDamagePerSecond()) + return \ No newline at end of file diff --git a/scripts/object/weapon/ranged/carbine/weapon_carbine_sp_roadmap_01_02.py b/scripts/object/weapon/ranged/carbine/weapon_carbine_sp_roadmap_01_02.py new file mode 100644 index 00000000..b8697c39 --- /dev/null +++ b/scripts/object/weapon/ranged/carbine/weapon_carbine_sp_roadmap_01_02.py @@ -0,0 +1,17 @@ +import sys + +def setup(core, object): + object.setStfFilename('static_item_n') + object.setStfName('weapon_carbine_sp_roadmap_01_02') + object.setDetailFilename('static_item_d') + object.setDetailName('weapon_carbine_sp_roadmap_01_02') + object.setIntAttribute('cat_stat_mod_bonus.@stat_n:precision_modified', 5) + object.setStringAttribute('class_required', 'Spy') + object.setIntAttribute('required_combat_level', 50) + object.setFloatAttribute('cat_wpn_damage.wpn_attack_speed', 0.6) + object.setStringAttribute('cat_wpn_damage.wpn_damage_type', 'Energy') + object.setStringAttribute('cat_wpn_damage.damage', '195-392') + object.setStringAttribute('cat_wpn_damage.range', '0-55m') + object.setStringAttribute('cat_wpn_damage.wpn_category', 'Carbine') + object.setIntAttribute('cat_wpn_damage.dps', object.getDamagePerSecond()) + return diff --git a/scripts/object/weapon/ranged/carbine/weapon_npe_carbine_bh_03_01.py b/scripts/object/weapon/ranged/carbine/weapon_npe_carbine_bh_03_01.py new file mode 100644 index 00000000..600a05a8 --- /dev/null +++ b/scripts/object/weapon/ranged/carbine/weapon_npe_carbine_bh_03_01.py @@ -0,0 +1,16 @@ +import sys + +def setup(core, object): + object.setStfFilename('static_item_n') + object.setStfName('weapon_npe_carbine_bh_03_01') + object.setDetailFilename('static_item_d') + object.setDetailName('weapon_npe_carbine_bh_03_01') + object.setStringAttribute('class_required', 'Bounty Hunter') + object.setIntAttribute('required_combat_level', 1) + object.setAttackSpeed(0.6); + object.setMaxRange(35); + object.setDamageType("energy"); + object.setMinDamage(17); + object.setMaxDamage(43); + object.setWeaponType(1); + return \ No newline at end of file diff --git a/scripts/object/weapon/ranged/carbine/weapon_npe_carbine_spy_03_01.py b/scripts/object/weapon/ranged/carbine/weapon_npe_carbine_spy_03_01.py new file mode 100644 index 00000000..bb153176 --- /dev/null +++ b/scripts/object/weapon/ranged/carbine/weapon_npe_carbine_spy_03_01.py @@ -0,0 +1,16 @@ +import sys + +def setup(core, object): + object.setStfFilename('static_item_n') + object.setStfName('weapon_npe_carbine_spy_03_01') + object.setDetailFilename('static_item_d') + object.setDetailName('weapon_npe_carbine_spy_03_01') + object.setStringAttribute('class_required', 'Spy') + object.setIntAttribute('required_combat_level', 1) + object.setAttackSpeed(0.6); + object.setMaxRange(35); + object.setDamageType("energy"); + object.setMinDamage(17); + object.setMaxDamage(43); + object.setWeaponType(1); + return \ No newline at end of file diff --git a/scripts/object/weapon/ranged/carbine/weapon_npe_commando_carbine_03_01.py b/scripts/object/weapon/ranged/carbine/weapon_npe_commando_carbine_03_01.py new file mode 100644 index 00000000..e707e4f4 --- /dev/null +++ b/scripts/object/weapon/ranged/carbine/weapon_npe_commando_carbine_03_01.py @@ -0,0 +1,16 @@ +import sys + +def setup(core, object): + object.setStfFilename('static_item_n') + object.setStfName('weapon_npe_commando_carbine_03_01') + object.setDetailFilename('static_item_d') + object.setDetailName('weapon_npe_commando_carbine_03_01') + object.setStringAttribute('class_required', 'Commando') + object.setIntAttribute('required_combat_level', 1) + object.setAttackSpeed(0.6); + object.setMaxRange(35); + object.setDamageType("energy"); + object.setMinDamage(20); + object.setMaxDamage(40); + object.setWeaponType(1); + return \ No newline at end of file diff --git a/scripts/object/weapon/ranged/pistol/item_npe_officer_sidearm.py b/scripts/object/weapon/ranged/pistol/item_npe_officer_sidearm.py new file mode 100644 index 00000000..b1c7fa0f --- /dev/null +++ b/scripts/object/weapon/ranged/pistol/item_npe_officer_sidearm.py @@ -0,0 +1,16 @@ +import sys + +def setup(core, object): + object.setStfFilename('static_item_n') + object.setStfName('item_npe_officer_sidearm') + object.setDetailFilename('static_item_d') + object.setDetailName('item_npe_officer_sidearm') + object.setStringAttribute('class_required', 'Officer') + object.setIntAttribute('required_combat_level', 1) + object.setAttackSpeed(0.4); + object.setMaxRange(35); + object.setDamageType("energy"); + object.setMinDamage(15); + object.setMaxDamage(25); + object.setWeaponType(2); + return \ No newline at end of file diff --git a/scripts/object/weapon/ranged/pistol/item_npe_smuggler_han_solo_gun.py b/scripts/object/weapon/ranged/pistol/item_npe_smuggler_han_solo_gun.py new file mode 100644 index 00000000..baef2e0b --- /dev/null +++ b/scripts/object/weapon/ranged/pistol/item_npe_smuggler_han_solo_gun.py @@ -0,0 +1,16 @@ +import sys + +def setup(core, object): + object.setStfFilename('static_item_n') + object.setStfName('item_npe_smuggler_han_solo_gun') + object.setDetailFilename('static_item_d') + object.setDetailName('item_npe_smuggler_han_solo_gun') + object.setStringAttribute('class_required', 'Smuggler') + object.setIntAttribute('required_combat_level', 1) + object.setAttackSpeed(0.4); + object.setMaxRange(35); + object.setDamageType("energy"); + object.setMinDamage(13); + object.setMaxDamage(27); + object.setWeaponType(2); + return \ No newline at end of file diff --git a/scripts/object/weapon/ranged/pistol/weapon_npe_medic_pistol_03_01.py b/scripts/object/weapon/ranged/pistol/weapon_npe_medic_pistol_03_01.py new file mode 100644 index 00000000..56169960 --- /dev/null +++ b/scripts/object/weapon/ranged/pistol/weapon_npe_medic_pistol_03_01.py @@ -0,0 +1,16 @@ +import sys + +def setup(core, object): + object.setStfFilename('static_item_n') + object.setStfName('weapon_npe_medic_pistol_03_01') + object.setDetailFilename('static_item_d') + object.setDetailName('weapon_npe_medic_pistol_03_01') + object.setStringAttribute('class_required', 'Medic') + object.setIntAttribute('required_combat_level', 1) + object.setAttackSpeed(0.4); + object.setMaxRange(35); + object.setDamageType("energy"); + object.setMinDamage(13); + object.setMaxDamage(27); + object.setWeaponType(2); + return \ No newline at end of file diff --git a/scripts/object/weapon/ranged/pistol/weapon_pistol_02_02.py b/scripts/object/weapon/ranged/pistol/weapon_pistol_02_02.py new file mode 100644 index 00000000..055d033d --- /dev/null +++ b/scripts/object/weapon/ranged/pistol/weapon_pistol_02_02.py @@ -0,0 +1,15 @@ +import sys + +def setup(core, object): + object.setStfFilename('static_item_n') + object.setStfName('weapon_pistol_02_02') + object.setDetailFilename('static_item_d') + object.setDetailName('weapon_pistol_02_02') + object.setIntAttribute('required_combat_level', 1) + object.setFloatAttribute('cat_wpn_damage.wpn_attack_speed', 0.4) + object.setStringAttribute('cat_wpn_damage.wpn_damage_type', 'Energy') + object.setStringAttribute('cat_wpn_damage.damage', '10-26') + object.setStringAttribute('cat_wpn_damage.wpn_range', '0-35m') + object.setStringAttribute('cat_wpn_damage.wpn_category', 'Pistol') + object.setIntAttribute('cat_wpn_damage.dps', object.getDamagePerSecond()) + return \ No newline at end of file diff --git a/scripts/object/weapon/ranged/pistol/weapon_pistol_sp_roadmap_01_02.py b/scripts/object/weapon/ranged/pistol/weapon_pistol_sp_roadmap_01_02.py new file mode 100644 index 00000000..5951524c --- /dev/null +++ b/scripts/object/weapon/ranged/pistol/weapon_pistol_sp_roadmap_01_02.py @@ -0,0 +1,17 @@ +import sys + +def setup(core, object): + object.setStfFilename('static_item_n') + object.setStfName('weapon_pistol_sp_roadmap_01_02') + object.setDetailFilename('static_item_d') + object.setDetailName('weapon_pistol_sp_roadmap_01_02') + object.setIntAttribute('cat_stat_mod_bonus.@stat_n:precision_modified', 5) + object.setStringAttribute('class_required', 'Spy') + object.setIntAttribute('required_combat_level', 30) + object.setFloatAttribute('cat_wpn_damage.wpn_attack_speed', 0.4) + object.setStringAttribute('cat_wpn_damage.wpn_damage_type', 'Energy') + object.setStringAttribute('cat_wpn_damage.damage', '73-145') + object.setStringAttribute('cat_wpn_damage.range', '0-35m') + object.setStringAttribute('cat_wpn_damage.wpn_category', 'Pistol') + object.setIntAttribute('cat_wpn_damage.dps', object.getDamagePerSecond()) + return diff --git a/scripts/object/weapon/ranged/pistol/weapon_pistol_trader_roadmap_01_02.py b/scripts/object/weapon/ranged/pistol/weapon_pistol_trader_roadmap_01_02.py new file mode 100644 index 00000000..9feea0cd --- /dev/null +++ b/scripts/object/weapon/ranged/pistol/weapon_pistol_trader_roadmap_01_02.py @@ -0,0 +1,16 @@ +import sys + +def setup(core, object): + object.setStfFilename('static_item_n') + object.setStfName('weapon_pistol_trader_roadmap_01_02') + object.setDetailFilename('static_item_d') + object.setDetailName('weapon_pistol_trader_roadmap_01_02') + object.setStringAttribute('class_required', 'Trader') + object.setIntAttribute('required_combat_level', 62) + object.setFloatAttribute('cat_wpn_damage.wpn_attack_speed', 0.4) + object.setStringAttribute('cat_wpn_damage.wpn_damage_type', 'Energy') + object.setStringAttribute('cat_wpn_damage.damage', '250-500') + object.setStringAttribute('cat_wpn_damage.wpn_range', '0-35m') + object.setStringAttribute('cat_wpn_damage.wpn_category', 'Pistol') + object.setIntAttribute('cat_wpn_damage.dps', object.getDamagePerSecond()) + return \ No newline at end of file diff --git a/scripts/object/weapon/ranged/rifle/weapon_lightningbeam_commando_roadmap_01_02.py b/scripts/object/weapon/ranged/rifle/weapon_lightningbeam_commando_roadmap_01_02.py new file mode 100644 index 00000000..03768d96 --- /dev/null +++ b/scripts/object/weapon/ranged/rifle/weapon_lightningbeam_commando_roadmap_01_02.py @@ -0,0 +1,17 @@ +import sys + +def setup(core, object): + object.setStfFilename('static_item_n') + object.setStfName('weapon_lightningbeam_commando_roadmap_01_02') + object.setDetailFilename('static_item_d') + object.setDetailName('weapon_lightningbeam_commando_roadmap_01_02') + object.setIntAttribute('cat_stat_mod_bonus.@stat_n:precision_modified', 5) + object.setStringAttribute('class_required', 'Commando') + object.setIntAttribute('required_combat_level', 30) + object.setFloatAttribute('cat_wpn_damage.wpn_attack_speed', 0.8) + object.setStringAttribute('cat_wpn_damage.wpn_damage_type', 'Energy') + object.setStringAttribute('cat_wpn_damage.damage', '261-522') + object.setStringAttribute('cat_wpn_damage.wpn_range', '0-64m') + object.setStringAttribute('cat_wpn_damage.wpn_category', 'Rifle') + object.setIntAttribute('cat_wpn_damage.dps', object.getDamagePerSecond()) + return \ No newline at end of file diff --git a/scripts/object/weapon/ranged/rifle/weapon_rifle_bh_roadmap_01_02.py b/scripts/object/weapon/ranged/rifle/weapon_rifle_bh_roadmap_01_02.py new file mode 100644 index 00000000..33825f81 --- /dev/null +++ b/scripts/object/weapon/ranged/rifle/weapon_rifle_bh_roadmap_01_02.py @@ -0,0 +1,17 @@ +import sys + +def setup(core, object): + object.setStfFilename('static_item_n') + object.setStfName('weapon_rifle_bh_roadmap_01_02') + object.setDetailFilename('static_item_d') + object.setDetailName('weapon_rifle_bh_roadmap_01_02') + object.setIntAttribute('cat_stat_mod_bonus.@stat_n:precision_modified', 5) + object.setStringAttribute('class_required', 'Bounty Hunter') + object.setIntAttribute('required_combat_level', 50) + object.setFloatAttribute('cat_wpn_damage.wpn_attack_speed', 0.8) + object.setStringAttribute('cat_wpn_damage.wpn_damage_type', 'Energy') + object.setStringAttribute('cat_wpn_damage.damage', '261-522') + object.setStringAttribute('cat_wpn_damage.wpn_range', '0-64m') + object.setStringAttribute('cat_wpn_damage.wpn_category', 'Rifle') + object.setIntAttribute('cat_wpn_damage.dps', object.getDamagePerSecond()) + return \ No newline at end of file diff --git a/scripts/pvpzones.py b/scripts/pvpzones.py new file mode 100644 index 00000000..0714e398 --- /dev/null +++ b/scripts/pvpzones.py @@ -0,0 +1,10 @@ +import sys + +def addZones(core): + + gcwService = core.gcwService + + gcwService.addPvPZone('rori', 5318, 5680, 400) + gcwService.addPvPZone('corellia', 4722, -5233, 200) + gcwService.addPvPZone('naboo', 1019, -1508, 150) + gcwService.addPvPZone('talus', -4899, -3137, 150) \ No newline at end of file diff --git a/scripts/radial/creature/player.py b/scripts/radial/creature/player.py new file mode 100644 index 00000000..08fa50e0 --- /dev/null +++ b/scripts/radial/creature/player.py @@ -0,0 +1,32 @@ +from resources.common import RadialOptions +from resources.datatables import Posture +import sys + +def createRadial(core, owner, target, radials): + if target.getPosture() == Posture.SkillAnimating: + if owner.getPerformanceWatchee() == target: + if target.getPerformanceType() is True: + radials.add(RadialOptions(0, 141, 3, 'Stop Watching')) + elif owner.getPerformanceListenee() == target: + radials.add(RadialOptions(0, 141, 3, 'Stop Listening')) + else: + if target.getPerformanceType() is True: + radials.add(RadialOptions(0, 140, 3, 'Watch')) + else: + radials.add(RadialOptions(0, 140, 3, 'Listen')) + return + +def handleSelection(core, owner, target, option): + if option == 140: + if target.getPerformanceType() is True: + core.commandService.callCommand(owner, 'watch', target, '') + return + else: + # TODO: Insert callCommand /listen + return + return + + if option == 141: + core.commandService.callCommand(owner, 'stopwatching', target, '') + return + return \ No newline at end of file diff --git a/scripts/radial/creature/vehicle.py b/scripts/radial/creature/vehicle.py new file mode 100644 index 00000000..af827f7d --- /dev/null +++ b/scripts/radial/creature/vehicle.py @@ -0,0 +1,31 @@ +from resources.common import RadialOptions +import sys + +def createRadial(core, owner, target, radials): + master = core.objectService.getObject(target.getOwnerId()) + + radials.add(RadialOptions(0, 7, 1, '')) + if core.mountService.canMount(owner, target): + radials.add(RadialOptions(0, 40, 3, '@pet/pet_menu:menu_enter_exit')) + if target.getOwnerId() == owner.getObjectID(): + radials.add(RadialOptions(0, 60, 3, '@pet/pet_menu:menu_store')) + if core.mountService.canRepair(owner, target): + radials.add(RadialOptions(0, 114, 3, '@pet/pet_menu:menu_repair_vehicle')) + return + +def handleSelection(core, owner, target, option): + mntSvc = core.mountService + + if target: + if option == 40: + if mntSvc.isMounted(owner): + mntSvc.dismount(owner, target) + else: + mntSvc.mount(owner, target) + core.objectService.useObject(owner, target) + elif option == 60: + mntSvc.store(owner, target) + elif option == 114: + mntSvc.repair(owner, target) + return + diff --git a/scripts/radial/datapad/vehicle_pcd.py b/scripts/radial/datapad/vehicle_pcd.py new file mode 100644 index 00000000..b1ee9ad0 --- /dev/null +++ b/scripts/radial/datapad/vehicle_pcd.py @@ -0,0 +1,23 @@ +from resources.common import RadialOptions +import sys + +def createRadial(core, owner, target, radials): + if core.mountService.getMount(target) is None: + radials.add(RadialOptions(0, 61, 1, '@pet/pet_menu:menu_call')) + else: + radials.add(RadialOptions(0, 61, 1, '@pet/pet_menu:menu_store')) + radials.add(RadialOptions(0, 7, 1, '')) + radials.add(RadialOptions(0, 15, 1, '')) + return + +def handleSelection(core, owner, target, option): + if option == 61 and target: + if core.mountService.getMount(target) is None: + core.mountService.call(owner, target) + else: + core.mountService.store(owner, core.mountService.getMount(target)) + elif option == 15 and target: + core.mountService.destroy(owner, target) + + return + \ No newline at end of file diff --git a/scripts/radial/deeds/deed.py b/scripts/radial/deeds/deed.py new file mode 100644 index 00000000..633eb6db --- /dev/null +++ b/scripts/radial/deeds/deed.py @@ -0,0 +1,16 @@ +from resources.common import RadialOptions +import sys + +def createRadial(core, owner, target, radials): + radials.add(RadialOptions(0, 7, 1, '')) + radials.add(RadialOptions(0, 15, 1, '')) + radials.add(RadialOptions(0, 61, 1, '')) + return + +def handleSelection(core, owner, target, option): + if option == 61 and target: + core.objectService.useObject(owner, target) + if option == 15 and target: + core.objectService.destroyObject(target) + return + \ No newline at end of file diff --git a/scripts/radial/deeds/harvesterDeed.py b/scripts/radial/deeds/harvesterDeed.py new file mode 100644 index 00000000..9d85158b --- /dev/null +++ b/scripts/radial/deeds/harvesterDeed.py @@ -0,0 +1,21 @@ +from resources.common import RadialOptions +import sys + +def createRadial(core, owner, target, radials): + radials.clear() + radials.add(RadialOptions(0, 21, 3, 'Use Deed')) + #radials.add(RadialOptions(0, 7, 1, '111111')) + #radials.add(RadialOptions(0, 15, 1, '')) + #radials.add(RadialOptions(0, 61, 1, '')) + return + +def handleSelection(core, owner, target, option): + if option == 21 and target: + core.objectService.useObject(owner, target) + core.harvesterService.enterStructurePlacementMode(owner, target) + if option == 61 and target: + object5 = core.harvesterService.constructionSite(owner, target) + if option == 15 and target: + core.objectService.destroyObject(target) + return + \ No newline at end of file diff --git a/scripts/radial/deeds/structureDeed.py b/scripts/radial/deeds/structureDeed.py new file mode 100644 index 00000000..0ddee9f3 --- /dev/null +++ b/scripts/radial/deeds/structureDeed.py @@ -0,0 +1,11 @@ +from resources.common import RadialOptions +import sys + +def createRadial(core, owner, target, radials): + return + +def handleSelection(core, owner, target, option): + if option == 21 and target: + core.housingService.enterStructureMode(owner, target) + return + \ No newline at end of file diff --git a/scripts/radial/deeds/vehicleDeed.py b/scripts/radial/deeds/vehicleDeed.py new file mode 100644 index 00000000..ad08a40f --- /dev/null +++ b/scripts/radial/deeds/vehicleDeed.py @@ -0,0 +1,16 @@ +from resources.common import RadialOptions +import sys + +def createRadial(core, owner, target, radials): + radials.add(RadialOptions(0, 7, 1, '')) + radials.add(RadialOptions(0, 15, 1, '')) + radials.add(RadialOptions(0, 61, 3, '@pet/pet_menu:menu_generate')) + return + +def handleSelection(core, owner, target, option): + if option == 61 and target: + core.objectService.useObject(owner, target) + if option == 15 and target: + core.objectService.destroyObject(target) + return + \ No newline at end of file diff --git a/scripts/radial/equipment/appearance.py b/scripts/radial/equipment/appearance.py new file mode 100644 index 00000000..4c184296 --- /dev/null +++ b/scripts/radial/equipment/appearance.py @@ -0,0 +1,16 @@ +from resources.common import RadialOptions +import sys + +def createRadial(core, owner, target, radials): + radials.add(RadialOptions(0, 21, 1, '')) + radials.add(RadialOptions(0, 7, 1, '')) + radials.add(RadialOptions(0, 15, 1, '')) + return + +def handleSelection(core, owner, target, option): + if option == 21 and target: + core.objectService.useObject(owner, target) + if option == 15 and target: + core.objectService.destroyObject(target) + return + \ No newline at end of file diff --git a/scripts/radial/equipment/wearable.py b/scripts/radial/equipment/wearable.py new file mode 100644 index 00000000..4c184296 --- /dev/null +++ b/scripts/radial/equipment/wearable.py @@ -0,0 +1,16 @@ +from resources.common import RadialOptions +import sys + +def createRadial(core, owner, target, radials): + radials.add(RadialOptions(0, 21, 1, '')) + radials.add(RadialOptions(0, 7, 1, '')) + radials.add(RadialOptions(0, 15, 1, '')) + return + +def handleSelection(core, owner, target, option): + if option == 21 and target: + core.objectService.useObject(owner, target) + if option == 15 and target: + core.objectService.destroyObject(target) + return + \ No newline at end of file diff --git a/scripts/radial/holidays/lifeday_gift.py b/scripts/radial/holidays/lifeday_gift.py new file mode 100644 index 00000000..696d7662 --- /dev/null +++ b/scripts/radial/holidays/lifeday_gift.py @@ -0,0 +1,57 @@ +from resources.common import RadialOptions +import sys +import java.util.Random + +def createRadial(core, owner, target, radials): + radials.clear() + radials.add(RadialOptions(0, 21, 1, '')) + return + +def handleSelection(core, actor, object, option): + if option == 21: + if object.getAttachment('ownerId') and actor.getObjectID() == object.getAttachment('ownerId'): + return + + random = java.util.Random() + giftNum = random.nextInt(12) + + if giftNum == 0: + objectName = 'rewards_09/shared_lifeday_decor_cookie' + elif giftNum == 1: + objectName = 'rewards_09/shared_lifeday_decor_fruitcake' + elif giftNum == 2: + objectName = 'rewards_09/shared_lifeday_decor_hoth_chocolate' + elif giftNum == 3: + objectName = 'rewards_09/shared_lifeday_decor_varactyl_nog' + elif giftNum == 4: + objectName = 'rewards_09/shared_lifeday_fireplace_01' + elif giftNum == 5: + objectName = 'rewards_09/shared_lifeday_fireplace_02' + elif giftNum == 6: + objectName = 'rewards_09/shared_lifeday_lamp_01' + elif giftNum == 7: + objectName = 'rewards_09/shared_lifeday_lamp_02' + elif giftNum == 8: + objectName = 'rewards_09/shared_lifeday_ornament' + elif giftNum == 9: + objectName = 'shared_life_day_present' + elif giftNum == 10: + objectName = 'shared_life_day_tree' + elif giftNum == 11: + objectName = 'shared_life_day_tree_dressed' + else: + objectName = 'rewards_09/shared_lifeday_ornament' + + inventory = actor.getSlottedObject('inventory') + + if not inventory: + return + + reward1 = core.objectService.createObject('object/tangible/holiday/life_day/rewards_09/shared_lifeday_painting.iff', actor.getPlanet()) + reward2 = core.objectService.createObject('object/tangible/holiday/life_day/' + objectName + '.iff', actor.getPlanet()) + + inventory.add(reward1) + inventory.add(reward2) + + core.objectService.destroyObject(object) + return diff --git a/scripts/radial/holidays/main_lifeday_tree.py b/scripts/radial/holidays/main_lifeday_tree.py new file mode 100644 index 00000000..c996a9b5 --- /dev/null +++ b/scripts/radial/holidays/main_lifeday_tree.py @@ -0,0 +1,46 @@ +from resources.common import RadialOptions +import sys + +def createRadial(core, owner, target, radials): + radials.clear() + player = owner.getSlottedObject('ghost') + radials.add(RadialOptions(0, 7, 1, '')) + if player and core.collectionService.getCollection(owner, 'col_lifeday_tree_tracking_2010') < 1: + radials.add(RadialOptions(0, 21, 3, '@spam:tree_use')) + if player and core.collectionService.getCollection(owner, 'lifeday_badge_08') < 1: + radials.add(RadialOptions(0, 115, 3, '@spam:tree_badge')) + return + +def handleSelection(core, owner, target, option): + actor = owner + object = target + + if option == 115: + core.collectionService.addCollection(owner, 'lifeday_badge_08') + return + + if option != 21 or not object: + return + + player = actor.getSlottedObject('ghost') + + if not player: + return + + if core.collectionService.isComplete(actor, 'col_lifeday_tree_tracking_2010'): + return + + inventory = actor.getSlottedObject('inventory') + + if not inventory: + return + + lifedaybox = core.objectService.createObject('object/tangible/loot/creature_loot/collections/shared_dejarik_table_base.iff', actor.getPlanet(), 'item_lifeday_gift_self_01_01') + lifedaybox.setAttachment('radial_filename', 'lifeday_gift') + inventory.add(lifedaybox) + + lifedayboxfriend = core.objectService.createObject('object/tangible/loot/creature_loot/collections/shared_dejarik_table_base.iff', actor.getPlanet(), 'item_lifeday_gift_other_01_01') + lifedayboxfriend.setAttachment('ownerId', actor.getObjectID()) + inventory.add(lifedayboxfriend) + + core.collectionService.addCollection(owner, 'col_lifeday_tree_tracking_2010') diff --git a/scripts/radial/instances/exar_kun/exar_kun_brazier.py b/scripts/radial/instances/exar_kun/exar_kun_brazier.py new file mode 100644 index 00000000..d78e1915 --- /dev/null +++ b/scripts/radial/instances/exar_kun/exar_kun_brazier.py @@ -0,0 +1,14 @@ +from resources.common import RadialOptions +import sys + +def createRadial(core, owner, target, radials): + radials.add(RadialOptions(0, 21, 1, '')) + radials.add(RadialOptions(0, 7, 1, '')) + radials.add(RadialOptions(0, 21, 3, '@building_name:heroic_exar_enter')) + return + +def handleSelection(core, owner, target, option): + if option == 21 and target: + core.objectService.useObject(owner, target) + return + \ No newline at end of file diff --git a/scripts/radial/item/collection.py b/scripts/radial/item/collection.py new file mode 100644 index 00000000..dfdc1edf --- /dev/null +++ b/scripts/radial/item/collection.py @@ -0,0 +1,14 @@ +from resources.common import RadialOptions +import sys + +def createRadial(core, owner, target, radials): + radials.add(RadialOptions(0, 21, 1, '')) + radials.add(RadialOptions(0, 7, 1, '')) + radials.add(RadialOptions(0, 21, 3, '@collection:consume_item')) + return + +def handleSelection(core, owner, target, option): + if option == 21 and target: + core.objectService.useObject(owner, target) + return + \ No newline at end of file diff --git a/scripts/radial/item/item.py b/scripts/radial/item/item.py new file mode 100644 index 00000000..4c184296 --- /dev/null +++ b/scripts/radial/item/item.py @@ -0,0 +1,16 @@ +from resources.common import RadialOptions +import sys + +def createRadial(core, owner, target, radials): + radials.add(RadialOptions(0, 21, 1, '')) + radials.add(RadialOptions(0, 7, 1, '')) + radials.add(RadialOptions(0, 15, 1, '')) + return + +def handleSelection(core, owner, target, option): + if option == 21 and target: + core.objectService.useObject(owner, target) + if option == 15 and target: + core.objectService.destroyObject(target) + return + \ No newline at end of file diff --git a/scripts/radial/item/lightsaber.py b/scripts/radial/item/lightsaber.py new file mode 100644 index 00000000..c02dc502 --- /dev/null +++ b/scripts/radial/item/lightsaber.py @@ -0,0 +1,12 @@ +from resources.common import RadialOptions +import sys + +def createRadial(core, owner, target, radials): + radials.add(RadialOptions(0, 21, 1, 'Open Lightsaber')) + return + +def handleSelection(core, owner, target, option): + if option == 21 and target: + core.simulationService.openContainer(owner, target.getSlottedObject("saber_inv")) + return + \ No newline at end of file diff --git a/scripts/radial/item/lootchest.py b/scripts/radial/item/lootchest.py new file mode 100644 index 00000000..90c6b03e --- /dev/null +++ b/scripts/radial/item/lootchest.py @@ -0,0 +1,14 @@ +from resources.common import RadialOptions +import sys + +def createRadial(core, owner, target, radials): + radials.add(RadialOptions(0, 21, 1, 'Open')) + radials.add(RadialOptions(0, 7, 1, '')) + return + +def handleSelection(core, owner, target, option): + if option == 21 and target: + core.lootService.fillrarelootchest(owner, target) + + return + \ No newline at end of file diff --git a/scripts/radial/item/resourceContainer.py b/scripts/radial/item/resourceContainer.py new file mode 100644 index 00000000..fb6fa586 --- /dev/null +++ b/scripts/radial/item/resourceContainer.py @@ -0,0 +1,18 @@ +from resources.common import RadialOptions +import sys + +def createRadial(core, owner, target, radials): + radials.add(RadialOptions(0, 49, 0, 'Split')) + radials.add(RadialOptions(0, 7, 0, 'Examine')) + radials.add(RadialOptions(0, 15, 0, 'Destroy')) + return + +def handleSelection(core, owner, target, option): + #if option == 21 and target: + #core.objectService.useObject(owner, target) + if option == 15 and target: + if target == player.getRecentContainer(): + player.setRecentContainer(None) + + core.objectService.destroyObject(target) + return \ No newline at end of file diff --git a/scripts/radial/item/survey_tool.py b/scripts/radial/item/survey_tool.py new file mode 100644 index 00000000..33e36367 --- /dev/null +++ b/scripts/radial/item/survey_tool.py @@ -0,0 +1,27 @@ +from resources.common import RadialOptions +from protocol.swg import ResourceListForSurveyMessage +from services.sui.SUIService import MessageBoxType +from services.SurveyService import createSurveyRangeSUIWindow +from services.sui.SUIWindow import Trigger +from java.util import Vector +import sys + +def createRadial(core, owner, target, radials): + radials.clear() + radials.add(RadialOptions(0, 21, 1, 'Use')) + radials.add(RadialOptions(0, 7, 0, 'Examine')) + radials.add(RadialOptions(0, 15, 0, 'Destroy')) + radials.add(RadialOptions(0, 132, 1, 'Tool Options')) + return + +def handleSelection(core, owner, target, option): + if option == 21 and target: + if owner is not None: + rlfsm = ResourceListForSurveyMessage(core,target,owner) + owner.getClient().getSession().write(rlfsm.serialize()) + return + if option == 132: + if owner is not None: + surSvc = core.surveyService + surSvc.createSurveyRangeSUIWindow(owner, target) + return diff --git a/scripts/radial/item/travel_ticket.py b/scripts/radial/item/travel_ticket.py new file mode 100644 index 00000000..fbb150e9 --- /dev/null +++ b/scripts/radial/item/travel_ticket.py @@ -0,0 +1,40 @@ +from resources.common import RadialOptions +import sys + +def createRadial(core, owner, target, radials): + radials.clear() + + radials.add(RadialOptions(0, 21, 1, 'Use Travel Ticket')) + #radials.add(RadialOptions(0, 7, 1, '')) + #radials.add(RadialOptions(0, 15, 1, '')) + return + +def handleSelection(core, owner, target, option): + + if option == 21 and target: + + tp = core.travelService.getNearestTravelPoint(owner) + + if owner is not None and tp is not None: + print (str(tp.getLocation().getDistance2D(owner.getWorldPosition()))) + if tp.getLocation().getDistance2D(owner.getWorldPosition()) <= float(25): + if tp.isShuttleAvailable() is True: + core.travelService.doTransport(owner, core.travelService.getTravelPointByName(target.getStringAttribute('@obj_attr_n:travel_arrival_planet'), + target.getStringAttribute('@obj_attr_n:travel_arrival_point'))) + core.objectService.destroyObject(target) + return + return + else: + owner.sendSystemMessage('@travel:boarding_too_far', 0) + return + return + return + + if option == 15 and target: + core.objectService.destroyObject(target) + return + return + +def handleSUI(owner, window, eventType, returnList): + + return \ No newline at end of file diff --git a/scripts/radial/item/tunable.py b/scripts/radial/item/tunable.py new file mode 100644 index 00000000..cda19b74 --- /dev/null +++ b/scripts/radial/item/tunable.py @@ -0,0 +1,60 @@ +from resources.common import RadialOptions +from services.sui.SUIService import MessageBoxType +import time +from services.sui.SUIWindow import Trigger +from java.util import Vector +import main.NGECore +import sys + +def createRadial(core, owner, target, radials): + radials.clear() + radials.add(RadialOptions(0, 7, 0, 'Examine')) + radials.add(RadialOptions(0, 15, 0, 'Destroy')) + if target.getAttachment("tunerId") == None or target.getAttachment("tunerId") == 0: + if owner.getPlayerObject().getProfession()=='force_sensitive_1a': + radials.add(RadialOptions(0, 19, 0, '@jedi_spam:tune_crystal')) + return + +def handleSelection(core, owner, target, option): + if option == 19 and target: + if owner is not None: + #owner.sendSystemMessage('You are not attuned enough with the force yet.',1) + + if target.getAttachment("tunerId") == None or target.getAttachment("tunerId") == 0: + + owner.setAttachment("TunableObject", target.getObjectID()) + handleSUIWindow(core, owner, target, option) + + else: + owner.sendSystemMessage("You cannot tune this crystal.",1) + return + +def handleSUIWindow(core, owner, target, option): + suiSvc = core.suiService + suiWindow = suiSvc.createMessageBox(MessageBoxType.MESSAGE_BOX_OK_CANCEL, '@jedi_spam:confirm_tune_title', '@jedi_spam:confirm_tune_prompt', owner, target, 15) + returnParams = Vector() + returnParams.add('btnOk:Text') + returnParams.add('btnCancel:Text') + suiWindow.addHandler(0, '', Trigger.TRIGGER_OK, returnParams, handleSUI) + suiWindow.addHandler(1, '', Trigger.TRIGGER_CANCEL, returnParams, handleSUI) + suiSvc.openSUIWindow(suiWindow) + +def handleSUI(owner, window, eventType, returnList): + + if eventType == 0: + time.sleep(1) + objectID = long(owner.getAttachment("TunableObject")) + tunableObject = main.NGECore.getInstance().objectService.getObject(objectID) + + if tunableObject: + tunableObject.getAttributes().put("@obj_attr_n:crystal_owner", owner.getCustomName()) + tunableObject.setAttachment("tunerId", int(owner.getObjectId())) + + if tunableObject.getAttributes().get("@obj_attr_n:color") is None: + main.NGECore.getInstance().lootService.tuneProcess(tunableObject) + time.sleep(0.5) + + tunableObject.setCustomName( "\\#00FF00" + tunableObject.getObjectName().getStfValue() + " (tuned)") + owner.sendSystemMessage('@jedi_spam:crystal_tune_success',1) + return + \ No newline at end of file diff --git a/scripts/radial/lootitem.py b/scripts/radial/lootitem.py new file mode 100644 index 00000000..ec9ae01e --- /dev/null +++ b/scripts/radial/lootitem.py @@ -0,0 +1,19 @@ +from resources.common import RadialOptions +import sys + +def createRadial(core, owner, target, radials): + radials.clear() + radials.add(RadialOptions(0, 11, 1, 'Pick Up')) + radials.add(RadialOptions(0, 21, 1, '')) + radials.add(RadialOptions(0, 7, 1, '')) + radials.add(RadialOptions(0, 15, 1, '')) + return + +def handleSelection(core, owner, target, option): + + if option == 21 and target: + core.objectService.useObject(owner, target) + if option == 15 and target: + core.objectService.destroyObject(target) + return + \ No newline at end of file diff --git a/scripts/radial/noradialoptions.py b/scripts/radial/noradialoptions.py new file mode 100644 index 00000000..89075314 --- /dev/null +++ b/scripts/radial/noradialoptions.py @@ -0,0 +1,13 @@ +from resources.common import RadialOptions +import sys + +def createRadial(core, owner, target, radials): + radials.clear() + radials.add(RadialOptions(0, 21, 1, '')) + radials.add(RadialOptions(0, 7, 1, '')) + radials.add(RadialOptions(0, 15, 1, '')) + return + +def handleSelection(core, owner, target, option): + return + \ No newline at end of file diff --git a/scripts/radial/npc/bounty_probot.py b/scripts/radial/npc/bounty_probot.py new file mode 100644 index 00000000..83cdb93a --- /dev/null +++ b/scripts/radial/npc/bounty_probot.py @@ -0,0 +1,35 @@ +from resources.common import RadialOptions +import sys + +def createRadial(core, owner, target, radials): + radials.add(RadialOptions(0, 138, 1, '@mission/mission_generic:probe_droid_summon')) + return + +def handleSelection(core, owner, target, option): + + if option == 138 and target: + id = owner.getPlayerObject().getBountyMissionId() + if id is None or id == 0: + owner.sendSystemMessage('@mission/mission_generic:bounty_no_mission', 0) + return + + mission = core.objectService.getObject(id) + if mission is None: + owner.sendSystemMessage('@mission/mission_generic:bounty_no_mission', 0) + return + + if mission.getObjective().isArakydActive(): + owner.sendSystemMessage('@mission/mission_generic:probe_droid_too_many', 0) + return + + if not core.terrainService.canBuildAtPosition(owner, owner.getPosition().x, owner.getPosition().z): + owner.sendSystemMessage('@mission/mission_generic:probe_droid_bad_location', 0) + return + + if target.getUses() == 0: + core.objectService.destroyObject(target) + else: + target.setUses(target.getUses() - 1) + + mission.getObjective().handleProbeDroidSummon(core, owner) + return \ No newline at end of file diff --git a/scripts/radial/npc/bounty_seeker.py b/scripts/radial/npc/bounty_seeker.py new file mode 100644 index 00000000..f619a5bb --- /dev/null +++ b/scripts/radial/npc/bounty_seeker.py @@ -0,0 +1,46 @@ +from resources.common import RadialOptions +from resources.common import SpawnPoint +import time +import sys + +def createRadial(core, owner, target, radials): + radials.clear() + radials.add(RadialOptions(0, 138, 0, 'Track Target')) + radials.add(RadialOptions(1, 136, 0, '@mission/mission_generic:probe_droid_track_target')) # Track Bounty Target + radials.add(RadialOptions(1, 137, 0, '@mission/mission_generic:probe_droid_find_target')) # Identify Bounty Target + return + +def handleSelection(core, owner, target, option): + + if option == 136 and target or option == 138 and target: + id = owner.getPlayerObject().getBountyMissionId() + if id is None or id == 0: + owner.sendSystemMessage('@mission/mission_generic:bounty_no_mission', 0) + return + + mission = core.objectService.getObject(id) + if mission is None: + owner.sendSystemMessage('@mission/mission_generic:bounty_no_mission', 0) + return + + if mission.getObjective().isSeekerActive(): + owner.sendSystemMessage('@mission/mission_generic:bounty_already_tracking', 0) + return + if target.getUses() == 0: + core.objectService.destroyObject(target) + else: + target.setUses(target.getUses() - 1) + pos = SpawnPoint.getRandomPosition(owner.getPosition(), 1, 3, owner.getPlanetId()) + ori = owner.getOrientation() + seeker = core.staticService.spawnObject('object/creature/npc/droid/crafted/shared_probe_droid_advanced.iff', owner.getPlanet().getName(), 0, pos.x, pos.y, pos.z, ori.y, ori.w) + time.sleep(3) + owner.sendSystemMessage('@mission/mission_generic:seeker_droid_standby', 0) + seeker.setPosture(8) + time.sleep(6.5) + core.objectService.destroyObject(seeker) + mission.getObjective().beginSeekerUpdates(core, owner) + return + + if option == 137 and target: + return + return \ No newline at end of file diff --git a/scripts/radial/npc/corpse.py b/scripts/radial/npc/corpse.py new file mode 100644 index 00000000..663ff2b6 --- /dev/null +++ b/scripts/radial/npc/corpse.py @@ -0,0 +1,34 @@ +from resources.common import RadialOptions +import sys + +def createRadial(core, owner, target, radials): + #owner.sendSystemMessage('Correct Loot Radial created', 0) + radials.clear() + radials.add(RadialOptions(0, 36, 0, 'Loot')) + if target.getAttachment('AI') and core.resourceService and core.resourceService.canHarvest(owner, target): + radials.add(RadialOptions(0, 163, 3, '@sui:harvest_corpse')) + radials.add(RadialOptions(2, 164, 3, '@sui:harvest_meat')) + radials.add(RadialOptions(2, 165, 3, '@sui:harvest_hide')) + radials.add(RadialOptions(2, 166, 3, '@sui:harvest_bone')) + + + return + +def handleSelection(core, owner, target, option): + + if option == 36 and target: + #core.lootService.handleLootRequest(owner,target) + core.lootService.handleLootRequest(owner,target) + #lootedObjectInventory = target.getSlottedObject("inventory") + #core.simulationService.openContainer(owner, lootedObjectInventory) + #core.lootService.handleCreditDrop(owner, lootedObjectInventory) + if option == 15 and target: + core.objectService.destroyObject(target) + if option == 164 and target.getAttachment('AI') and core.resourceService.canHarvest(owner, target): + core.resourceService.doHarvest(owner, target, 'meat') + if option == 165 and target.getAttachment('AI') and core.resourceService.canHarvest(owner, target): + core.resourceService.doHarvest(owner, target, 'hide') + if option == 166 and target.getAttachment('AI') and core.resourceService.canHarvest(owner, target): + core.resourceService.doHarvest(owner, target, 'bone') + return + \ No newline at end of file diff --git a/scripts/radial/npc/mobile.py b/scripts/radial/npc/mobile.py new file mode 100644 index 00000000..e1f43616 --- /dev/null +++ b/scripts/radial/npc/mobile.py @@ -0,0 +1,16 @@ +from resources.common import RadialOptions +import sys + +def createRadial(core, owner, target, radials): + radials.clear() + if target.getAttachment('AI') and core.resourceService and core.resourceService.canMilk(owner, target): + radials.add(RadialOptions(0, 167, 3, '@pet/pet_menu:milk_me')) + + return + +def handleSelection(core, owner, target, option): + + if option == 167 and target.getAttachment('AI') and core.resourceService and core.resourceService.canMilk(owner, target): + core.resourceService.doMilk(owner, target) + return + \ No newline at end of file diff --git a/scripts/radial/npc/noloot.py b/scripts/radial/npc/noloot.py new file mode 100644 index 00000000..00f0176a --- /dev/null +++ b/scripts/radial/npc/noloot.py @@ -0,0 +1,13 @@ +from resources.common import RadialOptions +import sys + +def createRadial(core, owner, target, radials): + radials.clear() + radials.add(RadialOptions(0, 36, 0, '')) + + return + +def handleSelection(core, owner, target, option): + + return + \ No newline at end of file diff --git a/scripts/radial/npc_ticket_collector.py b/scripts/radial/npc/npc_ticket_collector.py similarity index 100% rename from scripts/radial/npc_ticket_collector.py rename to scripts/radial/npc/npc_ticket_collector.py diff --git a/scripts/radial/object/conversation.py b/scripts/radial/object/conversation.py new file mode 100644 index 00000000..0603ecb1 --- /dev/null +++ b/scripts/radial/object/conversation.py @@ -0,0 +1,14 @@ +from resources.common import RadialOptions +import sys + +def createRadial(core, owner, target, radials): + radials.add(RadialOptions(0, 21, 1, '')) + radials.add(RadialOptions(0, 7, 1, '')) + radials.add(RadialOptions(0, 26, 1, '')) + return + +def handleSelection(core, owner, target, option): + if option == 26 and target: + core.conversationService.handleStartConversation(owner, target) + return + \ No newline at end of file diff --git a/scripts/radial/object/guild_access_device.py b/scripts/radial/object/guild_access_device.py new file mode 100644 index 00000000..48784bda --- /dev/null +++ b/scripts/radial/object/guild_access_device.py @@ -0,0 +1,108 @@ +from resources.common import RadialOptions +from services.sui.SUIService import InputBoxType +from java.util import Vector +from main import NGECore +import sys + +def createRadial(core, owner, target, radials): + # http://i293.photobucket.com/albums/mm62/cebot/radial.jpg + + #radials.clear() + + if owner.getGuildId() != 0: + + guild = core.guildService.getGuildById(owner.getGuildId()) + + if guild is None: + return + + member = guild.getMember(owner.getObjectID()) + + + # TODO: Add List of Guilds radial option + # TODO: Add List of Guild Wars radial option http://i293.photobucket.com/albums/mm62/cebot/wars.jpg << List of Guild Wars + + radials.add(RadialOptions(0, RadialOptions.serverGuildGuildManagement, 3, '@guild:menu_guild_management')) # Guild Management + radials.add(RadialOptions(0, RadialOptions.serverGuildMemberManagement, 3, '@guild:menu_member_management')) # Member Management + + #### Guild Management #### + radials.add(RadialOptions(3, RadialOptions.serverGuildInfo, 3, '@guild:menu_info')) # Guild Information + #radials.add(RadialOptions(3, RadialOptions.serverGuildEnemies, 3, '@guild:menu_enemies')) # Guild Enemies + #radials.add(RadialOptions(3, 215, 3, '@guild:menu_rank_list')) # Rank List + # TODO: Add Rank Summary + radials.add(RadialOptions(3, 217, 3, '@guild:menu_permission_list')) # Permissions List + + if member.hasDisbandPermission(): + radials.add(RadialOptions(3, RadialOptions.serverGuildDisband, 3, '@guild:menu_disband')) # Disband Guild + if member.hasChangeNamePermission(): + radials.add(RadialOptions(3, RadialOptions.serverGuildNameChange, 3, '@guild:menu_namechange')) # Change Guild Name + + #### Member Management #### + radials.add(RadialOptions(4, RadialOptions.serverGuildMembers, 3, '@guild:menu_members')) # Guild Members + if member.hasSponsorPermission(): + radials.add(RadialOptions(4, RadialOptions.serverGuildSponsor, 3, '@guild:menu_sponsor')) # Sponsor for Membership + if member.hasAcceptPermission() and guild.getSponsoredPlayers().size() > 0: + radials.add(RadialOptions(4, RadialOptions.serverGuildSponsored, 3, '@guild:menu_sponsored')) # Sponsored for Membership + if owner.getObjectID() == guild.getLeader(): + radials.add(RadialOptions(4, 218, 3, '@guild:menu_member_motd')) # Create a Guild Message + #radials.add(RadialOptions(4, 69, 3, '@guild:menu_leader_change')) # Transfer PA Leadership + return + + return + +def handleSelection(core, owner, target, option): + guild = core.guildService.getGuildById(owner.getGuildId()) + + if guild is None: + return + + #### Guild Management #### + + # - Guild Info + if option == RadialOptions.serverGuildInfo: + core.guildService.showGuildInfoWindow(owner, guild) + return + + # - Rank List + elif option == 215: + return + + # - Permissions List + elif option == 217: + core.guildService.handleViewPermissionsList(owner, guild) + return + + # - Disband Guild + elif option == RadialOptions.serverGuildDisband: + core.guildService.showDisbandConfirmWindow(owner, guild) + return + + elif option == RadialOptions.serverGuildNameChange: + core.guildService.handleChangeGuildName(owner, guild) + return + + #### Member Management #### + + # - Guild Members + elif option == RadialOptions.serverGuildMembers: + core.guildService.handleViewGuildMembers(owner, guild) + return + + # - Sponsor for Membership + elif option == RadialOptions.serverGuildSponsor: + core.guildService.handleGuildSponsorWindow(owner) + return + + # - Sponsored for Membership + elif option == RadialOptions.serverGuildSponsored: + core.guildService.handleManageSponsoredPlayers(owner) + return + + # - Transfer PA Leadership + elif option == 69: + return + + elif option == 218: + core.guildService.handleChangeGuildMotd(owner, guild) + return + return \ No newline at end of file diff --git a/scripts/radial/object/guild_registry.py b/scripts/radial/object/guild_registry.py new file mode 100644 index 00000000..4b751dec --- /dev/null +++ b/scripts/radial/object/guild_registry.py @@ -0,0 +1,20 @@ +from resources.common import RadialOptions +from services.sui.SUIService import InputBoxType +from java.util import Vector +from main import NGECore +import sys + +def createRadial(core, owner, target, radials): + + if owner.getGuildId() == 0: + radials.add(RadialOptions(0, RadialOptions.serverGuildCreate, 3, '@guild:menu_create')) + return + + return + +def handleSelection(core, owner, target, option): + # Create Guild + if option == 185 and target: + core.guildService.handleCreateGuildName(owner, target) + return + return diff --git a/scripts/radial/object/treasureContainer.py b/scripts/radial/object/treasureContainer.py new file mode 100644 index 00000000..2a3ff12d --- /dev/null +++ b/scripts/radial/object/treasureContainer.py @@ -0,0 +1,35 @@ +from resources.common import RadialOptions +from services.sui import SUIWindow +from services.sui.SUIWindow import Trigger +from java.util import Vector +import resources.common.SpawnPoint +import engine.resources.scene.Point3D +import main.NGECore +import resources.common.Forager +from resources.objects.waypoint import WaypointObject +from engine.resources.common import CRC +import sys + +def createRadial(core, owner, target, radials): + radials.clear() + radials.add(RadialOptions(0, 21, 1, 'Open')) + radials.add(RadialOptions(0, 7, 1, 'Examine')) + return + +def handleSelection(core, owner, target, option): + + if option == 21 and target: + + if target.getAttachment('TreasureExtractorID')!=owner.getObjectID(): + owner.sendSystemMessage('@treasure_map/treasure_map:wrong_player',0); + return + + forager = resources.common.Forager() + if forager.countAliveGuards(target)>0: + owner.sendSystemMessage('@treasure_map/treasure_map:kill_guards_message',0); + return + + core.simulationService.openContainer(owner, target); + + return + \ No newline at end of file diff --git a/scripts/radial/object/treasuremap.py b/scripts/radial/object/treasuremap.py new file mode 100644 index 00000000..fe5f7c72 --- /dev/null +++ b/scripts/radial/object/treasuremap.py @@ -0,0 +1,71 @@ +from resources.common import RadialOptions +from services.sui import SUIWindow +from services.sui.SUIWindow import Trigger +from java.util import Vector +import resources.common.SpawnPoint +import engine.resources.scene.Point3D +import main.NGECore +from resources.objects.waypoint import WaypointObject +from engine.resources.common import CRC +import sys + +def createRadial(core, owner, target, radials): + radials.add(RadialOptions(0, 21, 1, '@treasure_map/treasure_map:use')) + radials.add(RadialOptions(0, 7, 1, '')) + return + +def handleSelection(core, owner, target, option): + if option == 21 and target: + + mapPlanet = target.getAttachment('MapPlanet') + planet = core.terrainService.getPlanetByID(mapPlanet) + if planet==None: + owner.sendSystemMessage('The treasure map disk is faulty, no Planet',0) + return + + planetName = planet.getName() + #if owner.getPlanetId()!=mapPlanet: + #owner.sendSystemMessage('The treasure is buried on ' + planetName,0) + #return + + window = core.suiService.createSUIWindow('Script.listBox', owner, target, 0) + window.setProperty('bg.caption.lblTitle:Text', '@treasure_map/treasure_map:title_'+target.getAttachment('MapSTFName')) + window.setProperty('Prompt.lblPrompt:Text', '@treasure_map/treasure_map:text_'+target.getAttachment('MapSTFName')) + + window.setProperty('btnCancel:visible', 'True') + window.setProperty('btnOk:visible', 'True') + window.setProperty('btnCancel:Text', '@treasure_map/treasure_map:close') + window.setProperty('btnOk:Text', '@treasure_map/treasure_map:store_waypoint') + returnList = Vector() + window.addHandler(0, '', Trigger.TRIGGER_OK, returnList, storeWaypoint) + window.addHandler(1, '', Trigger.TRIGGER_CANCEL, returnList, close) + + owner.setAttachment('LastReadMap',target) + + core.suiService.openSUIWindow(window); + + return + +def storeWaypoint(owner, window, eventType, returnList): + planetCenter = engine.resources.scene.Point3D(0,0,0) + #treasureLocation = resources.common.SpawnPoint.getRandomPosition(planetCenter, 2000, 6000, owner.getPlanetId()); + treasureLocation = resources.common.SpawnPoint.getRandomPosition(owner.getPosition(), 1, 50, owner.getPlanetId()); + waypoint = main.NGECore.getInstance().objectService.createObject('object/waypoint/shared_waypoint.iff', owner.getPlanet(), treasureLocation.x, treasureLocation.z, treasureLocation.y) + waypoint.setName('Treasure Map') + waypoint.setActive(True) + waypoint.setColor(WaypointObject.YELLOW) + waypoint.setPlanetCRC(CRC.StringtoCRC(owner.getPlanet().name)) + waypoint.setStringAttribute('', '') + ghost = owner.getSlottedObject('ghost') + ghost.waypointAdd(waypoint) + owner.sendSystemMessage('@treasure_map/treasure_map:sys_store_waypoint', 0) + readMap = owner.getAttachment('LastReadMap') + readMap.setAttachment('radial_filename', 'object/treasuremapRead'); + readMap.setAttachment('MapAreaLocation', treasureLocation); + return + + +def close(owner, window, eventType, returnList): + + return + \ No newline at end of file diff --git a/scripts/radial/object/treasuremapExtract.py b/scripts/radial/object/treasuremapExtract.py new file mode 100644 index 00000000..7277620e --- /dev/null +++ b/scripts/radial/object/treasuremapExtract.py @@ -0,0 +1,35 @@ +from resources.common import RadialOptions +from services.sui import SUIWindow +from services.sui.SUIWindow import Trigger +from java.util import Vector +import resources.common.SpawnPoint +import engine.resources.scene.Point3D +import main.NGECore +import resources.common.Forager +from resources.objects.waypoint import WaypointObject +from engine.resources.common import CRC +import sys + +def createRadial(core, owner, target, radials): + radials.add(RadialOptions(0, 21, 1, '@treasure_map/treasure_map:extract_treasure')) + radials.add(RadialOptions(0, 7, 1, '')) + return + +def handleSelection(core, owner, target, option): + if option == 21 and target and owner: + exactLoc = target.getAttachment('MapExactLocation') + + #if owner.getPosition().getDistance2D(owner.getPosition())<20: + if owner.getPosition().getDistance2D(exactLoc)<20: + + target.setAttachment('radial_filename', 'object/usable') + owner.sendSystemMessage('@treasure_map/treasure_map:sys_dist_here',0) + #spawn guards + forager = resources.common.Forager() + forager.handleGuardSpawn(owner,target) + else: + owner.sendSystemMessage('@treasure_map/treasure_map:sys_dist_near',0) + + + return + \ No newline at end of file diff --git a/scripts/radial/object/treasuremapRead.py b/scripts/radial/object/treasuremapRead.py new file mode 100644 index 00000000..bc3e0735 --- /dev/null +++ b/scripts/radial/object/treasuremapRead.py @@ -0,0 +1,57 @@ +from resources.common import RadialOptions +from services.sui import SUIWindow +from services.sui.SUIWindow import Trigger +from java.util import Vector +import resources.common.SpawnPoint +import engine.resources.scene.Point3D +import main.NGECore +from resources.objects.waypoint import WaypointObject +from engine.resources.common import CRC +import sys + +def createRadial(core, owner, target, radials): + radials.add(RadialOptions(0, 21, 1, '@treasure_map/treasure_map:search_area')) + radials.add(RadialOptions(0, 7, 1, '')) + return + +def handleSelection(core, owner, target, option): + if option == 21 and target: + + planetID = target.getAttachment('MapPlanet') + if planetID!=owner.getPlanetId(): + owner.sendSystemMessage('@treasure_map/treasure_map:wrong_planet',0) + + if owner.getCombatFlag()!=0: + owner.sendSystemMessage('@treasure_map/treasure_map:sys_no_combat',0) + return + + if owner.getPosture()==10: + owner.sendSystemMessage('@treasure_map/treasure_map:sys_no_mount',0) + return + + + areaLoc = target.getAttachment('MapAreaLocation'); + owner.sendSystemMessage('owner.getPosition().getDistance2D(areaLoc) %s' % owner.getPosition().getDistance2D(areaLoc),0) + + if owner.getPosition().getDistance2D(areaLoc)<20: + owner.sendSystemMessage('@treasure_map/treasure_map:sys_success',0) + + treasureLocation = resources.common.SpawnPoint.getRandomPosition(owner.getPosition(), 1, 100, owner.getPlanetId()); + waypoint = main.NGECore.getInstance().objectService.createObject('object/waypoint/shared_waypoint.iff', owner.getPlanet(), treasureLocation.x, treasureLocation.z, treasureLocation.y) + waypoint.setName('Exact Location of the Treasure') + waypoint.setActive(True) + waypoint.setColor(WaypointObject.YELLOW) + waypoint.setPlanetCRC(CRC.StringtoCRC(owner.getPlanet().name)) + waypoint.setStringAttribute('', '') + ghost = owner.getSlottedObject('ghost') + ghost.waypointAdd(waypoint) + owner.sendSystemMessage('@treasure_map/treasure_map:sys_store_waypoint', 0) + readMap = owner.getAttachment('LastReadMap') + readMap.setAttachment('radial_filename', 'object/treasuremapExtract'); + readMap.setAttachment('MapExactLocation', treasureLocation); + else: + owner.sendSystemMessage('@treasure_map/treasure_map:sys_cant_pinpoint',0) + + + return + \ No newline at end of file diff --git a/scripts/radial/object/usable.py b/scripts/radial/object/usable.py new file mode 100644 index 00000000..94d4e810 --- /dev/null +++ b/scripts/radial/object/usable.py @@ -0,0 +1,13 @@ +from resources.common import RadialOptions +import sys + +def createRadial(core, owner, target, radials): + radials.add(RadialOptions(0, 21, 1, '')) + radials.add(RadialOptions(0, 7, 1, '')) + return + +def handleSelection(core, owner, target, option): + if option == 21 and target: + core.objectService.useObject(owner, target) + return + \ No newline at end of file diff --git a/scripts/radial/ring/unity.py b/scripts/radial/ring/unity.py new file mode 100644 index 00000000..92940452 --- /dev/null +++ b/scripts/radial/ring/unity.py @@ -0,0 +1,108 @@ +from resources.common import RadialOptions +from services.sui.SUIWindow import Trigger +from java.util import Vector +from main import NGECore +from engine.resources.objects import SWGObject +import sys + +def createRadial(core, owner, target, radials): + + ghost = owner.getSlottedObject('ghost') + if ghost is None: + return + + if ghost.getSpouseName() is None or ghost.getSpouseName() is "": + targetPlayer = core.objectService.getObject(owner.getTargetId()) + if targetPlayer is not None and targetPlayer.getSlottedObject('ghost') is not None: + if targetPlayer.getObjectID() == owner.getObjectID(): + return + radials.add(RadialOptions(0, 69, 3, '@unity:mnu_propose')) + return + else: + radials.add(RadialOptions(0, 70, 3, '@unity:mnu_divorce')) + return + return + +def handleSelection(core, owner, target, option): + if option == 69 and target: + player = core.objectService.getObject(owner.getTargetId()) + tGhost = player.getSlottedObject('ghost') + suiSvc = core.suiService + + if tGhost.getPosition().getDistance2D(owner.getWorldPosition()) < 50: + owner.sendSystemMessage('@unity:out_of_range', 0) + return + + if tGhost.getSpouseName() is not None: + owner.sendSystemMessage('@unity:target_married', 0) + return + + if player.getAttachment("proposer") is not None: + owner.sendSystemMessage('@unity:target_proposed', 0) + return + + else: + + owner.sendSystemMessage('You propose unity to ' + player.getCustomName() + '.', 0) + targetWindow = suiSvc.createMessageBox(3, '@unity:accept_title', owner.getCustomName() + ' is proposing unity to you. Do you wish to accept?', tGhost.getContainer(), owner, 15) + returnList = Vector() + + targetWindow.addHandler(0, '', Trigger.TRIGGER_OK, returnList, handlePropose) + targetWindow.addHandler(1, '', Trigger.TRIGGER_CANCEL, returnList, handlePropose) + player.setAttachment("proposer", owner.getCustomName()) + suiSvc.openSUIWindow(targetWindow) + + target.setAttachment("unity", True) + core.equipmentService.equip(owner, target) + + core.commandService.callCommand(owner, 'kneel', None, '') + return + return + + if option == 70: + married = owner.getSlottedObject('ghost').getSpouseName() + myGhost = owner.getSlottedObject('ghost') + otherPlayer = NGECore.getInstance().objectService.getObjectByCustomName(married) + + if otherPlayer is None: + return + ghost = otherPlayer.getSlottedObject('ghost') + + if ghost is None: + return + + owner.sendSystemMessage('Your union with ' + married + ' has ended.', 0) + otherPlayer.sendSystemMessage('Your union with ' + owner.getCustomName() + ' has ended.', 0) + myGhost.setSpouseName(None) + ghost.setSpouseName(None) + + target.setAttachment("unity", None) + #TODO: Divorce offline players + return + return + +def handlePropose(owner, window, eventType, returnList): + core = NGECore.getInstance() + + if owner is None: + return + + if eventType == 0: + proposer = core.objectService.getObjectByCustomName(owner.getAttachment("proposer")) + if proposer is None: + return + + core.playerService.performUnity(owner, proposer) + return + + if eventType == 1: + proposer = core.objectService.getObjectByCustomName(owner.getAttachment("proposer")) + proposer.sendSystemMessage('@unity:declined', 0) + for SWGObject in proposer.getEquipmentList(): + if SWGObject.getAttachment("unity") is not None: + SWGObject.setAttachment("unity", None) + break + + owner.setAttachment("proposer", None) + return + return diff --git a/scripts/radial/shared_drink_breath_of_heaven.py b/scripts/radial/shared_drink_breath_of_heaven.py new file mode 100644 index 00000000..11ae9ca7 --- /dev/null +++ b/scripts/radial/shared_drink_breath_of_heaven.py @@ -0,0 +1,16 @@ +import resources.objects.creature.CreatureObject; +from resources.common import RadialOptions +import sys + +def createRadial(core, owner, target, radials): + radials.add(RadialOptions(0, 21, 1, '')) + radials.add(RadialOptions(0, 7, 1, '')) + radials.add(RadialOptions(0, 15, 1, '')) + return + +def handleSelection(core, owner, object, option): + if option == 21: + core.buffService.addBuffToCreature(owner, 'drink_breath_of_heaven', owner) + + core.objectService.destroyObject(object) + return diff --git a/scripts/radial/structure/generator.py b/scripts/radial/structure/generator.py new file mode 100644 index 00000000..44d7a9b4 --- /dev/null +++ b/scripts/radial/structure/generator.py @@ -0,0 +1,53 @@ +from resources.common import RadialOptions +from protocol.swg import ResourceListForSurveyMessage +from services.sui.SUIService import MessageBoxType +from services.SurveyService import createSurveyRangeSUIWindow +from services.sui.SUIWindow import Trigger +from java.util import Vector +import sys + +def createRadial(core, owner, target, radials): + #(byte parentId, short optionId, byte optionType, String description) + radials.clear() + radials.add(RadialOptions(0, 7, 0, 'Examine')) + radials.add(RadialOptions(0, 78, 0, '@player_structure:management')) + radials.add(RadialOptions(0, 117, 0, '@player_structure:permissions')) + radials.add(RadialOptions(2, 118, 0, '@harvester:manage')) + radials.add(RadialOptions(2, 128, 0, '@player_structure:permission_destroy')) + radials.add(RadialOptions(2, 124, 0, '@player_structure:management_status')) + radials.add(RadialOptions(2, 129, 0, '@player_structure:management_pay')) + radials.add(RadialOptions(2, 50, 0, '@base_player:set_name')) + radials.add(RadialOptions(3, 121, 0, '@player_structure:permission_admin')) + radials.add(RadialOptions(3, 123, 0, '@player_structure:permissions')) + + return + +def handleSelection(core, owner, target, option): + if option == 118 and target: + if owner is not None: + core.harvesterService.handleOperateMachinery(owner,target) + return + if option == 128: + if owner is not None: + core.harvesterService.createDestroySUIPage(owner,target) + return + if option == 124: + if owner is not None: + core.harvesterService.createStatusSUIPage(owner,target) + return + if option == 129: + if owner is not None: + core.harvesterService.createPayMaintenanceSUIPage(owner,target) + return + if option == 50: + if owner is not None: + core.harvesterService.createRenameSUIPage(owner,target) + return + if option == 121: + if owner is not None: + core.harvesterService.handlePermissionAdmin(owner,target) + return + if option == 123: + if owner is not None: + core.harvesterService.handlePermissionHopper(owner,target) + return diff --git a/scripts/radial/structure/harvester.py b/scripts/radial/structure/harvester.py new file mode 100644 index 00000000..079c99ae --- /dev/null +++ b/scripts/radial/structure/harvester.py @@ -0,0 +1,58 @@ +from resources.common import RadialOptions +from protocol.swg import ResourceListForSurveyMessage +from services.sui.SUIService import MessageBoxType +from services.SurveyService import createSurveyRangeSUIWindow +from services.sui.SUIWindow import Trigger +from java.util import Vector +import sys + +def createRadial(core, owner, target, radials): + #(byte parentId, short optionId, byte optionType, String description) + radials.clear() + radials.add(RadialOptions(0, 7, 0, 'Examine')) + radials.add(RadialOptions(0, 78, 0, '@player_structure:management')) + radials.add(RadialOptions(0, 117, 0, '@player_structure:permissions')) + radials.add(RadialOptions(2, 118, 0, '@harvester:manage')) + radials.add(RadialOptions(2, 128, 0, '@player_structure:permission_destroy')) + radials.add(RadialOptions(2, 124, 0, '@player_structure:management_status')) + radials.add(RadialOptions(2, 129, 0, '@player_structure:management_pay')) + radials.add(RadialOptions(2, 50, 0, '@base_player:set_name')) + radials.add(RadialOptions(2, 51, 0, '@player_structure:management_power')) + radials.add(RadialOptions(3, 121, 0, '@player_structure:permission_admin')) + radials.add(RadialOptions(3, 123, 0, '@player_structure:permissions')) + + return + +def handleSelection(core, owner, target, option): + if option == 118 and target: + if owner is not None: + core.harvesterService.handleOperateMachinery(owner,target) + return + if option == 128: + if owner is not None: + core.harvesterService.createDestroySUIPage(owner,target) + return + if option == 124: + if owner is not None: + core.harvesterService.createStatusSUIPage(owner,target) + return + if option == 129: + if owner is not None: + core.harvesterService.createPayMaintenanceSUIPage(owner,target) + return + if option == 50: + if owner is not None: + core.harvesterService.createRenameSUIPage(owner,target) + return + if option == 51: + if owner is not None: + core.harvesterService.handleDepositPower(owner,target) + return + if option == 121: + if owner is not None: + core.harvesterService.handlePermissionAdmin(owner,target) + return + if option == 123: + if owner is not None: + core.harvesterService.handlePermissionHopper(owner,target) + return diff --git a/scripts/radial/structure/harvesterHopper.py b/scripts/radial/structure/harvesterHopper.py new file mode 100644 index 00000000..3323d45b --- /dev/null +++ b/scripts/radial/structure/harvesterHopper.py @@ -0,0 +1,21 @@ +from resources.common import RadialOptions +from protocol.swg import ResourceListForSurveyMessage +from services.sui.SUIService import MessageBoxType +from services.SurveyService import createSurveyRangeSUIWindow +from services.sui.SUIWindow import Trigger +from java.util import Vector +import sys + +def createRadial(core, owner, target, radials): + #(byte parentId, short optionId, byte optionType, String description) + radials.clear() + radials.add(RadialOptions(0, 7, 0, 'Examine')) + radials.add(RadialOptions(0, 78, 0, '@player_structure:management')) + radials.add(RadialOptions(2, 118, 0, '@harvester:manage')) + return + +def handleSelection(core, owner, target, option): + if option == 118 and target: + if owner is not None: + core.harvesterService.handleOperateMachinery(owner,target) + return diff --git a/scripts/radial/structure/moveable.py b/scripts/radial/structure/moveable.py new file mode 100644 index 00000000..4bbb4120 --- /dev/null +++ b/scripts/radial/structure/moveable.py @@ -0,0 +1,25 @@ +from resources.common import RadialOptions +import sys + +def createRadial(core, owner, target, radials): + radials.clear() + radials.add(RadialOptions(0, 11, 1, '')) + + radials.add(RadialOptions(0, 55, 0, '')) + radials.add(RadialOptions(3, 56, 1, '')) + radials.add(RadialOptions(3, 57, 1, '')) + radials.add(RadialOptions(3, 58, 1, '')) + radials.add(RadialOptions(3, 59, 1, '')) + + radials.add(RadialOptions(0, 52, 0, '')) + radials.add(RadialOptions(4, 53, 1, '')) + radials.add(RadialOptions(4, 54, 1, '')) + return + +def handleSelection(core, owner, target, option): + + if option == 56: + core.commandService.callCommand(owner, 'movefurniture', target, 'forward 10') + + return + \ No newline at end of file diff --git a/scripts/radial/structure/structure_management_terminal.py b/scripts/radial/structure/structure_management_terminal.py new file mode 100644 index 00000000..8bdc5878 --- /dev/null +++ b/scripts/radial/structure/structure_management_terminal.py @@ -0,0 +1,81 @@ +from resources.common import RadialOptions +from protocol.swg import ResourceListForSurveyMessage +from services.sui.SUIService import MessageBoxType +from services.sui.SUIWindow import Trigger +from java.util import Vector +import sys + +def createRadial(core, owner, target, radials): + #(byte parentId, short optionId, byte optionType, String description) + radials.clear() + radials.add(RadialOptions(0, 7, 0, 'Examine')) + radials.add(RadialOptions(0, 78, 0, '@player_structure:management')) + radials.add(RadialOptions(0, 117, 0, '@player_structure:permissions')) + radials.add(RadialOptions(2, 128, 0, '@player_structure:permission_destroy')) + radials.add(RadialOptions(2, 124, 0, '@player_structure:management_status')) + radials.add(RadialOptions(2, 129, 0, '@player_structure:management_pay')) + radials.add(RadialOptions(2, 50, 0, '@base_player:set_name')) + radials.add(RadialOptions(2, 127, 0, '@player_structure:management_residence')) + radials.add(RadialOptions(2, 125, 0, '@player_structure:management_privacy : ' + core.housingService.fetchPrivacyString(target))) + radials.add(RadialOptions(2, 171, 0, '@player_structure:find_items_find_all_house_items')) + radials.add(RadialOptions(2, 173, 0, '@player_structure:move_first_item')) + radials.add(RadialOptions(2, 174, 0, '@player_structure:find_items_search_for_house_items')) + radials.add(RadialOptions(2, 175, 0, '@player_structure:delete_all_items_title')) + radials.add(RadialOptions(2, 172, 0, 'Pack Up This Building')) + radials.add(RadialOptions(3, 121, 0, '@player_structure:permission_enter')) + radials.add(RadialOptions(3, 123, 0, '@player_structure:permission_banned')) + if owner.getSkillModBase('manage_vendor') >= 1: + radials.add(RadialOptions(2, 130, 0, '@player_structure:create_vendor')) + + return + +def handleSelection(core, owner, target, option): + + if option == 128: + if owner is not None: + core.housingService.createDestroySUIPage(owner,target) + return + if option == 124: + if owner is not None: + core.housingService.createStatusSUIPage(owner,target) + return + if option == 129: + if owner is not None: + core.housingService.createPayMaintenanceSUIPage(owner,target) + return + if option == 50: + if owner is not None: + core.housingService.createRenameSUIPage(owner,target) + return + if option == 127: + if owner is not None: + core.housingService.declareResidency(owner,target) + return + if option == 171: + if owner is not None: + core.housingService.handleListAllItems(owner,target) + return + if option == 175: + if owner is not None: + core.housingService.handleDeleteAllItems(owner,target) + return + if option == 173: + if owner is not None: + core.housingService.handleFindLostItems(owner,target) + return + if option == 174: + if owner is not None: + core.housingService.handleSearchForItems(owner,target) + return + if option == 121: + if owner is not None: + core.housingService.handlePermissionEntry(owner,target) + return + if option == 123: + if owner is not None: + core.housingService.handlePermissionBan(owner,target) + return + if option == 130: + if owner is not None and owner.getSkillModBase('manage_vendor') >= 1: + core.commandService.callCommand(owner, 'createvendor', None, '') + return diff --git a/scripts/radial/bank.py b/scripts/radial/terminal/bank.py similarity index 100% rename from scripts/radial/bank.py rename to scripts/radial/terminal/bank.py diff --git a/scripts/radial/terminal/city_maintenance_terminal.py b/scripts/radial/terminal/city_maintenance_terminal.py new file mode 100644 index 00000000..e5bab716 --- /dev/null +++ b/scripts/radial/terminal/city_maintenance_terminal.py @@ -0,0 +1,701 @@ +from resources.common import RadialOptions +from protocol.swg import ResourceListForSurveyMessage +from services.sui.SUIService import MessageBoxType +from services.sui.SUIWindow import Trigger +from java.util import Vector +import main.NGECore +import sys + +def createRadial(core, owner, target, radials): + #(byte parentId, short optionId, byte optionType, String description) + radials.clear() + radials.add(RadialOptions(0, 7, 0, 'Examine')) + radials.add(RadialOptions(0, 216, 0, '@city/city:city_management')) + radials.add(RadialOptions(0, 226, 0, '@city/city:city_info')) + radials.add(RadialOptions(0, 227, 0, '@city/city:remove_trainers')) + radials.add(RadialOptions(2, 217, 0, '@city/city:city_name_new_t')) + radials.add(RadialOptions(2, 222, 0, '@city/city:city_register')) + radials.add(RadialOptions(2, 224, 0, '@city/city:unzone')) + radials.add(RadialOptions(2, 218, 0, '@city/city:city_militia')) + radials.add(RadialOptions(2, 219, 0, '@city/city:treasury_taxes')) + radials.add(RadialOptions(2, 221, 0, '@city/city:treasury_withdraw')) + radials.add(RadialOptions(2, 225, 0, '@city/city:city_specializations')) + radials.add(RadialOptions(2, 228, 0, '@city/city:align')) + radials.add(RadialOptions(3, 121, 0, '@city/city:non_citizen_city_status')) + radials.add(RadialOptions(3, 122, 0, '@city/city:rank_info_t')) + radials.add(RadialOptions(3, 123, 0, '@city/city:citizen_list_t')) + radials.add(RadialOptions(3, 230, 0, '@city/city:revoke_citizenship')) + + radials.add(RadialOptions(3, 231, 0, 'Add 10 citizens')) + radials.add(RadialOptions(3, 232, 0, 'Deduct 10 citizens')) + + return + +def handleSelection(core, owner, target, option): + playerCity = core.playerCityService.getPlayerCity(owner) + if playerCity==None: + return + + if option == 217: + if owner is not None: + handleSetCityName(core, owner, target, option) + return + if option == 124: + if owner is not None: + core.housingService.createStatusSUIPage(owner,target) + return + if option == 129: + if owner is not None: + core.housingService.createPayMaintenanceSUIPage(owner,target) + return + if option == 50: + if owner is not None: + core.housingService.createRenameSUIPage(owner,target) + return + if option == 222: + if owner is not None: + handleRegisterMap(core, owner, target, option) + return + if option == 171: + if owner is not None: + core.housingService.handleListAllItems(owner,target) + return + if option == 219: + if owner is not None: + handleAdjustTaxes(core, owner, target, option) + return + if option == 225: + if owner is not None: + handleSpecialization(core, owner, target, option) + return + if option == 221: + if owner is not None: + handleWithdrawal(core, owner, target, option) + return + if option == 121: + if owner is not None: + handleCityRankInfo(core, owner, target, option) + return + if option == 122: + if owner is not None: + handleCityRankInfo(core, owner, target, option) + return + if option == 123: + if owner is not None: + handleCitizenList(core, owner, target, option) + return + + if option == 231: + if owner is not None: + handle10Add(core, owner, target, option) + return + + if option == 232: + if owner is not None: + handle10Deduct(core, owner, target, option) + return + +def handle10Add(core, owner, target, option): + playerCity = main.NGECore.getInstance().playerCityService.getPlayerCity(owner) + playerCity.Add10MoreCitizens() + return + + +def handle10Deduct(core, owner, target, option): + playerCity = main.NGECore.getInstance().playerCityService.getPlayerCity(owner) + playerCity.Deduct10Citizens() + return + +def setnameCallBack(owner, window, eventType, returnList): + if returnList.size()==0: + return + playerCity = main.NGECore.getInstance().playerCityService.getPlayerCity(owner) + playerCity.setCityName(returnList.get(0)) + owner.sendSystemMessage('@city/city:name_changed', 0) + return + + +def handleAdjustTaxes(core, owner, target, option): + + playerCity = main.NGECore.getInstance().playerCityService.getPlayerCity(owner) + if playerCity.getRank()<2: + owner.sendSystemMessage('@city/city:no_rank_taxes', 0) + return + + window = core.suiService.createSUIWindow('Script.listBox', owner, target, 0); + window.setProperty('bg.caption.lblTitle:Text', '@city/city:adjust_taxes_t') + window.setProperty('Prompt.lblPrompt:Text', '@city/city:adjust_taxes_d') + + window.addListBoxMenuItem('@city/city:set_tax_t_income',0) + window.addListBoxMenuItem('@city/city:set_tax_t_property',1) + window.addListBoxMenuItem('@city/city:set_tax_t_sales',2) + window.addListBoxMenuItem('@city/city:set_tax_t_travel',3) + window.addListBoxMenuItem('@city/city:set_tax_t_garage',4) + + window.setProperty('btnOk:visible', 'True') + window.setProperty('btnCancel:visible', 'True') + window.setProperty('btnOk:Text', '@ok') + window.setProperty('btnCancel:Text', '@cancel') + + returnList = Vector() + returnList.add('List.lstList:SelectedRow') + window.addHandler(0, '', Trigger.TRIGGER_OK, returnList, setAdjustTaxesCallBack) + window.addHandler(1, '', Trigger.TRIGGER_CANCEL, returnList, setSpecializationCancelCallBack) + core.suiService.openSUIWindow(window); + return + +def setAdjustTaxesCallBack(owner, window, eventType, returnList): + if returnList.size()==0: + owner.sendSystemMessage('NULL', 0) + return + + if returnList.get(0)=='0': + handleSetIncomeTax(owner) + return + if returnList.get(0)=='1': + handleSetPropertyTax(owner) + return + if returnList.get(0)=='2': + handleSetSalesTax(owner) + return + if returnList.get(0)=='3': + handleSetTravelTax(owner) + return + if returnList.get(0)=='4': + handleSetGarageTax(owner) + return + + return + +def handleSetIncomeTax(owner): + + playerCity = main.NGECore.getInstance().playerCityService.getPlayerCity(owner) + window = main.NGECore.getInstance().suiService.createInputBox(2,'@city/city:set_tax_t_income','@city/city:set_tax_d_income \n \n @city/city:income_tax_prompt : %s' % playerCity.getIncomeTax(), owner, owner, 0) + returnList = Vector() + returnList.add('txtInput:LocalText') + window.addHandler(0, '', Trigger.TRIGGER_OK, returnList, handleSetIncomeTaxCallBack) + window.addHandler(1, '', Trigger.TRIGGER_CANCEL, returnList, setSpecializationCancelCallBack) + main.NGECore.getInstance().suiService.openSUIWindow(window); + return + +def handleSetIncomeTaxCallBack(owner, window, eventType, returnList): + if int(returnList.get(0))>2000 or int(returnList.get(0))<0: + owner.sendSystemMessage('Income tax value is out of range of accepteable values.', 0) + handleSetIncomeTax(owner) + return + + playerCity = main.NGECore.getInstance().playerCityService.getPlayerCity(owner) + playerCity.setIncomeTax(int(returnList.get(0))) + owner.sendSystemMessage('@city/city:set_income_tax', 0) + return + +def handleSetSalesTax(owner): + + playerCity = main.NGECore.getInstance().playerCityService.getPlayerCity(owner) + window = main.NGECore.getInstance().suiService.createInputBox(2,'@city/city:set_tax_t_sales','@city/city:set_tax_d_sales \n \n @city/city:sales_tax_prompt : %s' % playerCity.getSalesTax(), owner, owner, 0) + returnList = Vector() + returnList.add('txtInput:LocalText') + window.addHandler(0, '', Trigger.TRIGGER_OK, returnList, handleSetSalesTaxCallBack) + window.addHandler(1, '', Trigger.TRIGGER_CANCEL, returnList, setSpecializationCancelCallBack) + main.NGECore.getInstance().suiService.openSUIWindow(window); + return + +def handleSetSalesTaxCallBack(owner, window, eventType, returnList): + if int(returnList.get(0))>20 or int(returnList.get(0))<0: + owner.sendSystemMessage('Sales tax value is out of range of accepteable values.', 0) + handleSetSalesTax(owner) + return + + playerCity = main.NGECore.getInstance().playerCityService.getPlayerCity(owner) + playerCity.setIncomeTax(int(returnList.get(0))) + owner.sendSystemMessage('@city/city:set_sales_tax', 0) + return + +def handleSetPropertyTax(owner): + + playerCity = main.NGECore.getInstance().playerCityService.getPlayerCity(owner) + window = main.NGECore.getInstance().suiService.createInputBox(2,'@city/city:set_tax_t_property','@city/city:set_tax_d_property \n \n @city/city:property_tax_prompt : %s' % playerCity.getPropertyTax(), owner, owner, 0) + returnList = Vector() + returnList.add('txtInput:LocalText') + window.addHandler(0, '', Trigger.TRIGGER_OK, returnList, handleSetPropertyTaxCallBack) + window.addHandler(1, '', Trigger.TRIGGER_CANCEL, returnList, setSpecializationCancelCallBack) + main.NGECore.getInstance().suiService.openSUIWindow(window); + return + +def handleSetPropertyTaxCallBack(owner, window, eventType, returnList): + if int(returnList.get(0))>50 or int(returnList.get(0))<0: + owner.sendSystemMessage('Property tax value is out of range of accepteable values.', 0) + handleSetPropertyTax(owner) + return + + playerCity = main.NGECore.getInstance().playerCityService.getPlayerCity(owner) + playerCity.setIncomeTax(int(returnList.get(0))) + owner.sendSystemMessage('@city/city:set_property_tax', 0) + return + +def handleSetTravelTax(owner): + + playerCity = main.NGECore.getInstance().playerCityService.getPlayerCity(owner) + if playerCity.hasShuttlePort()==0: + owner.sendSystemMessage('@city/city:no_shuttleport', 0) + return + + window = main.NGECore.getInstance().suiService.createInputBox(2,'@city/city:set_tax_t_travel','@city/city:set_tax_d_travel \n \n @city/city:travel_tax_prompt : %s' % playerCity.getTravelTax(), owner, owner, 0) + returnList = Vector() + returnList.add('txtInput:LocalText') + window.addHandler(0, '', Trigger.TRIGGER_OK, returnList, handleSetTravelTaxCallBack) + window.addHandler(1, '', Trigger.TRIGGER_CANCEL, returnList, setSpecializationCancelCallBack) + main.NGECore.getInstance().suiService.openSUIWindow(window); + return + +def handleSetTravelTaxCallBack(owner, window, eventType, returnList): + if int(returnList.get(0))>500 or int(returnList.get(0))<1: + owner.sendSystemMessage('Travel tax value is out of range of accepteable values.', 0) + handleSetIncomeTax(owner) + return + + playerCity = main.NGECore.getInstance().playerCityService.getPlayerCity(owner) + playerCity.setTravelTax(int(returnList.get(0))) + owner.sendSystemMessage('@city/city:set_travel_fee', 0) + return + +def handleSetGarageTax(owner): + + playerCity = main.NGECore.getInstance().playerCityService.getPlayerCity(owner) + window = main.NGECore.getInstance().suiService.createInputBox(2,'@city/city:set_tax_t_garage','@city/city:set_tax_d_garage \n\n @city/city:garage_tax : %s' % playerCity.getGarageTax(), owner, owner, 0) + returnList = Vector() + returnList.add('txtInput:LocalText') + window.addHandler(0, '', Trigger.TRIGGER_OK, returnList, handleSetGarageTaxCallBack) + window.addHandler(1, '', Trigger.TRIGGER_CANCEL, returnList, setSpecializationCancelCallBack) + main.NGECore.getInstance().suiService.openSUIWindow(window); + return + +def handleSetGarageTaxCallBack(owner, window, eventType, returnList): + if int(returnList.get(0))>500 or int(returnList.get(0))<1: + owner.sendSystemMessage('Garage tax value is out of range of accepteable values.', 0) + handleSetIncomeTax(owner) + return + + playerCity = main.NGECore.getInstance().playerCityService.getPlayerCity(owner) + playerCity.setGarageTax(int(returnList.get(0))) + owner.sendSystemMessage('@city/city:set_garage_tax', 0) + return + +def handleWithdrawal(core, owner, target, option): + + playerCity = main.NGECore.getInstance().playerCityService.getPlayerCity(owner) + window = core.suiService.createSUIWindow("Script.transfer", owner, target, 10) + + window.setProperty("bg.caption.lblTitle:Text", "@city/city:treasury_withdraw_subject") + window.setProperty("Prompt.lblPrompt:Text", "@city/city:treasury_withdraw_prompt" + "\n \n @city/city:treasury_status : %s" % playerCity.getCityTreasury()) + + window.setProperty("msgPayMaintenance", "transaction.txtInputFrom"); + + window.setProperty("transaction.lblFrom:Text", "@city/city:treasury_balance_t"); + window.setProperty("transaction.lblTo:Text", "@city/city:treasury_withdraw"); + window.setProperty("transaction.lblFrom", "@city/city:treasury_balance_t"); + window.setProperty("transaction.lblTo", "@city/city:treasury_withdraw"); + + window.setProperty("transaction.lblStartingFrom:Text", '%s' % playerCity.getCityTreasury()); + window.setProperty("transaction.lblStartingTo:Text", '0'); + + window.setProperty("transaction:InputFrom", "555555"); + window.setProperty("transaction:InputTo", "666666"); + + window.setProperty("transaction:txtInputFrom", '%s' % playerCity.getCityTreasury()); + window.setProperty("transaction:txtInputTo", "1"); + window.setProperty("transaction.txtInputFrom:Text", '%s' % playerCity.getCityTreasury()); + window.setProperty("transaction.txtInputTo:Text", "" + "0"); + + window.setProperty("transaction.ConversionRatioFrom", "1"); + window.setProperty("transaction.ConversionRatioTo", "0"); + + window.setProperty("btnOk:visible", "True"); + window.setProperty("btnCancel:visible", "True"); + window.setProperty("btnOk:Text", "@ok"); + window.setProperty("btnCancel:Text", "@cancel"); + + returnList = Vector() + returnList.add('transaction.txtInputFrom:Text') + returnList.add('ransaction.txtInputTo:Text') + window.addHandler(0, '', Trigger.TRIGGER_OK, returnList, setWithdrawalCallBack) + window.addHandler(1, '', Trigger.TRIGGER_CANCEL, returnList, setWithdrawalCallBack) + core.suiService.openSUIWindow(window); + return + +def setWithdrawalCallBack(owner, window, eventType, returnList): + if returnList.size()==0: + return + playerCity = main.NGECore.getInstance().playerCityService.getPlayerCity(owner) + playerCity.setCityName(returnList.get(0)) + owner.sendSystemMessage('@city/city:name_changed', 0) + return + +def handleCitizenList(core, owner, target, option): + window = core.suiService.createSUIWindow('Script.listBox', owner, target, 0); + window.setProperty('bg.caption.lblTitle:Text', '@city/city:citizen_list_t') + window.setProperty('Prompt.lblPrompt:Text', '@city/city:citizen_list_prompt') + + playerCity = main.NGECore.getInstance().playerCityService.getPlayerCity(owner) + index = 1; + for citizen in playerCity.getCitizens(): + citizenObject = core.objectService.getObject(citizen) + window.addListBoxMenuItem(citizenObject.getCustomName(),index) + index += 1 + + window.setProperty('btnOk:visible', 'True') + window.setProperty('btnCancel:visible', 'True') + window.setProperty('btnOk:Text', '@ok') + window.setProperty('btnCancel:Text', '@cancel') + playerCity = main.NGECore.getInstance().playerCityService.getPlayerCity(owner) + returnList = Vector() + returnList.add('txtInput:LocalText') + window.addHandler(0, '', Trigger.TRIGGER_OK, returnList, setCitizenListCallBack) + window.addHandler(1, '', Trigger.TRIGGER_CANCEL, returnList, setCitizenListCallBack) + core.suiService.openSUIWindow(window); + return + +def setCitizenListCallBack(owner, window, eventType, returnList): + #handle waypoint creation to citizen's house + return + +def handleCityRankInfo(core, owner, target, option): + window = core.suiService.createSUIWindow('Script.listBox', owner, target, 0); + window.setProperty('bg.caption.lblTitle:Text', '@city/city:rank_info_t') + window.setProperty('Prompt.lblPrompt:Text', '@city/city:rank_info_d') + + playerCity = main.NGECore.getInstance().playerCityService.getPlayerCity(owner) + + window.addListBoxMenuItem('City : ' + playerCity.getCityName(),0) + window.addListBoxMenuItem('@city/city:radius_prompt : %s' % playerCity.getCityRadius(),1) + window.addListBoxMenuItem('@city/city:city_rank_prompt : @city/city:rank' + str(playerCity.getRank()),2) + window.addListBoxMenuItem('@city/city:reg_citizen_prompt : %s' % len(playerCity.getCitizens()),3) + if playerCity.getRank()>=3 and playerCity.getSpecialization()>-1: + window.addListBoxMenuItem('@city/city:specialization_prompt : @city/city:' + playerCity.getSpecializationSTFNamesAsList().get(playerCity.getSpecialization()),4) + + + window.setProperty('btnOk:visible', 'True') + window.setProperty('btnCancel:visible', 'True') + window.setProperty('btnOk:Text', '@ok') + window.setProperty('btnCancel:Text', '@cancel') + window.setProperty('btnCancel:Text', '@cancel') + playerCity = main.NGECore.getInstance().playerCityService.getPlayerCity(owner) + returnList = Vector() + returnList.add('txtInput:LocalText') + window.addHandler(0, '', Trigger.TRIGGER_OK, returnList, setCityInfoCallBack) + window.addHandler(1, '', Trigger.TRIGGER_CANCEL, returnList, setCitizenListCallBack) + core.suiService.openSUIWindow(window); + return + +def setCityInfoCallBack(owner, window, eventType, returnList): + #handle waypoint creation to citizen's house + return + +def handleRegisterMap(core, owner, target, option): + + playerCity = main.NGECore.getInstance().playerCityService.getPlayerCity(owner) + if playerCity.getRank()<3: + owner.sendSystemMessage('@city/city:cant_register_rank', 0) + return + + if owner.getObjectId()!=playerCity.getMayorID(): + owner.sendSystemMessage('@city/city:cant_register', 0) + return + + # now register it somehow + + return + +def setRegisterMapCallBack(owner, window, eventType, returnList): + if returnList.size()==0: + return + playerCity = main.NGECore.getInstance().playerCityService.getPlayerCity(owner) + playerCity.setCityName(returnList.get(0)) + owner.sendSystemMessage('@city/city:name_changed', 0) + return + +def handleSpecialization(core, owner, target, option): + + playerCity = main.NGECore.getInstance().playerCityService.getPlayerCity(owner) + if playerCity.getRank()<3: + owner.sendSystemMessage('@city/city:no_rank_spec', 0) + return + + window = core.suiService.createSUIWindow('Script.listBox', owner, target, 0); + window.setProperty('bg.caption.lblTitle:Text', '@city/city:city_specs_t') + window.setProperty('Prompt.lblPrompt:Text', '@city/city:city_specs_d') + + window.addListBoxMenuItem('@city/city:city_spec_cloning',0) + window.addListBoxMenuItem('@city/city:city_spec_bm_incubator',1) + window.addListBoxMenuItem('@city/city:city_spec_storyteller',2) + window.addListBoxMenuItem('@city/city:city_spec_entertainer',3) + window.addListBoxMenuItem('@city/city:city_spec_missions',4) + window.addListBoxMenuItem('@city/city:city_spec_industry',5) + window.addListBoxMenuItem('@city/city:city_spec_doctor',6) + window.addListBoxMenuItem('@city/city:city_spec_research',7) + window.addListBoxMenuItem('@city/city:city_spec_sample_rich',8) + window.addListBoxMenuItem('@city/city:city_spec_master_manufacturing',9) + window.addListBoxMenuItem('@city/city:city_spec_master_healing',10) + window.addListBoxMenuItem('@city/city:city_spec_stronghold',11) + + window.setProperty('btnOk:visible', 'True') + window.setProperty('btnCancel:visible', 'True') + window.setProperty('btnOk:Text', '@ok') + window.setProperty('btnCancel:Text', '@cancel') + + returnList = Vector() + returnList.add('List.lstList:SelectedRow') + window.addHandler(0, '', Trigger.TRIGGER_OK, returnList, setSpecializationCallBack) + window.addHandler(1, '', Trigger.TRIGGER_CANCEL, returnList, setSpecializationCancelCallBack) + core.suiService.openSUIWindow(window); + return + +def setSpecializationCancelCallBack(owner, window, eventType, returnList): + return + +def setSpecializationCallBack(owner, window, eventType, returnList): + + if returnList.size()==0: + owner.sendSystemMessage('NULL', 0) + return + + if returnList.get(0)=='0': + showCloning(owner) + return + if returnList.get(0)=='1': + showDNA(owner) + return + if returnList.get(0)=='2': + showEncore(owner) + return + if returnList.get(0)=='3': + showEntertainment(owner) + return + if returnList.get(0)=='4': + showImproved(owner) + return + if returnList.get(0)=='5': + showManufacturing(owner) + return + if returnList.get(0)=='6': + showMedical(owner) + return + if returnList.get(0)=='7': + showResearch(owner) + return + if returnList.get(0)=='8': + showSample(owner) + return + + return + +def showCloning(owner): + window = main.NGECore.getInstance().suiService.createSUIWindow('Script.messageBox', owner, owner, 0) + window.setProperty('bg.caption.lblTitle:Text', '@city/city:city_spec_cloning') + window.setProperty('Prompt.lblPrompt:Text', '@city/city:city_spec_cloning_d') + window.setProperty("btnOk:visible", "True") + window.setProperty("btnCancel:visible", "True") + window.setProperty("btnOk:Text", "Select") + window.setProperty("btnCancel:Text", "@cancel") + returnList = Vector() + returnList.add('txtInput:LocalText') + window.addHandler(0, '', Trigger.TRIGGER_OK, returnList, handleCloningCallback) + window.addHandler(1, '', Trigger.TRIGGER_CANCEL, returnList, setSpecializationCancelCallBack) + main.NGECore.getInstance().suiService.openSUIWindow(window); + return + +def handleCloningCallback(owner, window, eventType, returnList): + playerCity = main.NGECore.getInstance().playerCityService.getPlayerCity(owner) + owner.setAttachment('ChosenCitySpec',1) + showSpecConfirmWindow(owner) + return + +def showDNA(owner): + window = main.NGECore.getInstance().suiService.createSUIWindow('Script.messageBox', owner, owner, 0) + window.setProperty('bg.caption.lblTitle:Text', '@city/city:city_spec_bm_incubator') + window.setProperty('Prompt.lblPrompt:Text', '@city/city:city_spec_bm_incubator_d') + window.setProperty("btnOk:visible", "True") + window.setProperty("btnCancel:visible", "True") + window.setProperty("btnOk:Text", "Select") + window.setProperty("btnCancel:Text", "@cancel") + returnList = Vector() + returnList.add('txtInput:LocalText') + window.addHandler(0, '', Trigger.TRIGGER_OK, returnList, handleDNACallback) + window.addHandler(1, '', Trigger.TRIGGER_CANCEL, returnList, setSpecializationCancelCallBack) + main.NGECore.getInstance().suiService.openSUIWindow(window); + return + +def handleDNACallback(owner, window, eventType, returnList): + playerCity = main.NGECore.getInstance().playerCityService.getPlayerCity(owner) + owner.setAttachment('ChosenCitySpec',2) + showSpecConfirmWindow(owner) + return + +def showEncore(owner): + window = main.NGECore.getInstance().suiService.createSUIWindow('Script.messageBox', owner, owner, 0) + window.setProperty('bg.caption.lblTitle:Text', '@city/city:city_spec_storyteller') + window.setProperty('Prompt.lblPrompt:Text', '@city/city:city_spec_storyteller_d') + window.setProperty("btnOk:visible", "True") + window.setProperty("btnCancel:visible", "True") + window.setProperty("btnOk:Text", "Select") + window.setProperty("btnCancel:Text", "@cancel") + returnList = Vector() + returnList.add('txtInput:LocalText') + window.addHandler(0, '', Trigger.TRIGGER_OK, returnList, handleEncoreCallback) + window.addHandler(1, '', Trigger.TRIGGER_CANCEL, returnList, setSpecializationCancelCallBack) + main.NGECore.getInstance().suiService.openSUIWindow(window); + return + +def handleEncoreCallback(owner, window, eventType, returnList): + playerCity = main.NGECore.getInstance().playerCityService.getPlayerCity(owner) + owner.setAttachment('ChosenCitySpec',3) + showSpecConfirmWindow(owner) + return + + +def showEntertainment(owner): + window = main.NGECore.getInstance().suiService.createSUIWindow('Script.messageBox', owner, owner, 0) + window.setProperty('bg.caption.lblTitle:Text', '@city/city:city_spec_entertainer') + window.setProperty('Prompt.lblPrompt:Text', '@city/city:city_spec_entertainer_d') + window.setProperty("btnOk:visible", "True") + window.setProperty("btnCancel:visible", "True") + window.setProperty("btnOk:Text", "Select") + window.setProperty("btnCancel:Text", "@cancel") + returnList = Vector() + returnList.add('txtInput:LocalText') + window.addHandler(0, '', Trigger.TRIGGER_OK, returnList, handleEntertainmentCallback) + window.addHandler(1, '', Trigger.TRIGGER_CANCEL, returnList, setSpecializationCancelCallBack) + main.NGECore.getInstance().suiService.openSUIWindow(window); + return + +def handleEntertainmentCallback(owner, window, eventType, returnList): + playerCity = main.NGECore.getInstance().playerCityService.getPlayerCity(owner) + owner.setAttachment('ChosenCitySpec',4) + showSpecConfirmWindow(owner) + return + +def showImproved(owner): + window = main.NGECore.getInstance().suiService.createSUIWindow('Script.messageBox', owner, owner, 0) + window.setProperty('bg.caption.lblTitle:Text', '@city/city:city_spec_missions') + window.setProperty('Prompt.lblPrompt:Text', '@city/city:city_spec_missions_d') + window.setProperty("btnOk:visible", "True") + window.setProperty("btnCancel:visible", "True") + window.setProperty("btnOk:Text", "Select") + window.setProperty("btnCancel:Text", "@cancel") + returnList = Vector() + returnList.add('txtInput:LocalText') + window.addHandler(0, '', Trigger.TRIGGER_OK, returnList, handleImprovedCallback) + window.addHandler(1, '', Trigger.TRIGGER_CANCEL, returnList, setSpecializationCancelCallBack) + main.NGECore.getInstance().suiService.openSUIWindow(window); + return + +def handleImprovedCallback(owner, window, eventType, returnList): + playerCity = main.NGECore.getInstance().playerCityService.getPlayerCity(owner) + owner.setAttachment('ChosenCitySpec',5) + showSpecConfirmWindow(owner) + return + +def showManufacturing(owner): + window = main.NGECore.getInstance().suiService.createSUIWindow('Script.messageBox', owner, owner, 0) + window.setProperty('bg.caption.lblTitle:Text', '@city/city:city_spec_industry') + window.setProperty('Prompt.lblPrompt:Text', '@city/city:city_spec_industry_d') + window.setProperty("btnOk:visible", "True") + window.setProperty("btnCancel:visible", "True") + window.setProperty("btnOk:Text", "Select") + window.setProperty("btnCancel:Text", "@cancel") + returnList = Vector() + returnList.add('txtInput:LocalText') + window.addHandler(0, '', Trigger.TRIGGER_OK, returnList, handleManufacturingCallback) + window.addHandler(1, '', Trigger.TRIGGER_CANCEL, returnList, setSpecializationCancelCallBack) + main.NGECore.getInstance().suiService.openSUIWindow(window); + return + +def handleManufacturingCallback(owner, window, eventType, returnList): + playerCity = main.NGECore.getInstance().playerCityService.getPlayerCity(owner) + owner.setAttachment('ChosenCitySpec',6) + showSpecConfirmWindow(owner) + return + +def showMedical(owner): + window = main.NGECore.getInstance().suiService.createSUIWindow('Script.messageBox', owner, owner, 0) + window.setProperty('bg.caption.lblTitle:Text', '@city/city:city_spec_doctor') + window.setProperty('Prompt.lblPrompt:Text', '@city/city:city_spec_doctor_d') + window.setProperty("btnOk:visible", "True") + window.setProperty("btnCancel:visible", "True") + window.setProperty("btnOk:Text", "Select") + window.setProperty("btnCancel:Text", "@cancel") + returnList = Vector() + returnList.add('txtInput:LocalText') + window.addHandler(0, '', Trigger.TRIGGER_OK, returnList, handleMedicalCallback) + window.addHandler(1, '', Trigger.TRIGGER_CANCEL, returnList, setSpecializationCancelCallBack) + main.NGECore.getInstance().suiService.openSUIWindow(window); + return + +def handleMedicalCallback(owner, window, eventType, returnList): + playerCity = main.NGECore.getInstance().playerCityService.getPlayerCity(owner) + owner.setAttachment('ChosenCitySpec',7) + showSpecConfirmWindow(owner) + return + +def showResearch(owner): + window = main.NGECore.getInstance().suiService.createSUIWindow('Script.messageBox', owner, owner, 0) + window.setProperty('bg.caption.lblTitle:Text', '@city/city:city_spec_research') + window.setProperty('Prompt.lblPrompt:Text', '@city/city:city_spec_research_d') + window.setProperty("btnOk:visible", "True") + window.setProperty("btnCancel:visible", "True") + window.setProperty("btnOk:Text", "Select") + window.setProperty("btnCancel:Text", "@cancel") + returnList = Vector() + returnList.add('txtInput:LocalText') + window.addHandler(0, '', Trigger.TRIGGER_OK, returnList, handleResearchCallback) + window.addHandler(1, '', Trigger.TRIGGER_CANCEL, returnList, setSpecializationCancelCallBack) + main.NGECore.getInstance().suiService.openSUIWindow(window); + return + +def handleResearchCallback(owner, window, eventType, returnList): + playerCity = main.NGECore.getInstance().playerCityService.getPlayerCity(owner) + owner.setAttachment('ChosenCitySpec',8) + showSpecConfirmWindow(owner) + return + +def showSample(owner): + window = main.NGECore.getInstance().suiService.createSUIWindow('Script.messageBox', owner, owner, 0) + window.setProperty('bg.caption.lblTitle:Text', '@city/city:city_spec_sample_rich') + window.setProperty('Prompt.lblPrompt:Text', '@city/city:city_spec_sample_rich_d') + window.setProperty("btnOk:visible", "True") + window.setProperty("btnCancel:visible", "True") + window.setProperty("btnOk:Text", "Select") + window.setProperty("btnCancel:Text", "@cancel") + returnList = Vector() + returnList.add('txtInput:LocalText') + window.addHandler(0, '', Trigger.TRIGGER_OK, returnList, handleSampleCallback) + window.addHandler(1, '', Trigger.TRIGGER_CANCEL, returnList, setSpecializationCancelCallBack) + main.NGECore.getInstance().suiService.openSUIWindow(window); + return + +def handleSampleCallback(owner, window, eventType, returnList): + playerCity = main.NGECore.getInstance().playerCityService.getPlayerCity(owner) + owner.setAttachment('ChosenCitySpec',9) + showSpecConfirmWindow(owner) + return + +def showSpecConfirmWindow(owner): + window = main.NGECore.getInstance().suiService.createSUIWindow('Script.messageBox', owner, owner, 0) + window.setProperty('bg.caption.lblTitle:Text', '@city/city:confirm_spec_t') + window.setProperty('Prompt.lblPrompt:Text', '@city/city:confirm_spec_d') + window.setProperty("btnOk:visible", "True") + window.setProperty("btnCancel:visible", "True") + window.setProperty("btnOk:Text", "Yes") + window.setProperty("btnCancel:Text", "No") + returnList = Vector() + returnList.add('txtInput:LocalText') + window.addHandler(0, '', Trigger.TRIGGER_OK, returnList, handleSpecConfirmCallback) + window.addHandler(1, '', Trigger.TRIGGER_CANCEL, returnList, handleSpecConfirmCallback) + main.NGECore.getInstance().suiService.openSUIWindow(window); + return + +def handleSpecConfirmCallback(owner, window, eventType, returnList): + playerCity = main.NGECore.getInstance().playerCityService.getPlayerCity(owner) + chosenSpec = owner.getAttachment('ChosenCitySpec') + playerCity.setSpecialisation(chosenSpec) + return \ No newline at end of file diff --git a/scripts/radial/cloning_terminal.py b/scripts/radial/terminal/cloning_terminal.py similarity index 52% rename from scripts/radial/cloning_terminal.py rename to scripts/radial/terminal/cloning_terminal.py index 4809d1d6..1cf0e065 100644 --- a/scripts/radial/cloning_terminal.py +++ b/scripts/radial/terminal/cloning_terminal.py @@ -10,8 +10,19 @@ def createRadial(core, owner, target, radials): def handleSelection(core, owner, target, option): if option == 21 and target: + # REALLY Dirty hack until this can be resolved SWG way !! + stra = "Will you pay the %DI credits to clone yourself here?" + level = int(owner.getLevel()) + + if level <= 10: + cloningFee = 100 + elif level >= 11: + cloningFee = (((owner.getLevel() + 17) * owner.getLevel())/2) + elif level == 90: + cloningFee = 5000 + suiSvc = core.suiService - suiWindow = suiSvc.createMessageBox(MessageBoxType.MESSAGE_BOX_OK_CANCEL, '@base_player:clone_confirm_title', '@base_player:clone_confirm_prompt', owner, target, 15) + suiWindow = suiSvc.createMessageBox(MessageBoxType.MESSAGE_BOX_OK_CANCEL, '@base_player:clone_confirm_title', stra.replace ("%DI" , str(cloningFee)), owner, target, 15) returnParams = Vector() returnParams.add('btnOk:Text') returnParams.add('btnCancel:Text') @@ -24,17 +35,26 @@ def handleSelection(core, owner, target, option): def handleSUI(owner, window, eventType, returnList): if eventType == 0: + level = int(owner.getLevel()) + if level <= 10: + cloningFee = 100 + elif level >= 11: + cloningFee = (((owner.getLevel() + 17) * owner.getLevel())/2) + elif level == 90: + cloningFee = 5000 + cash = owner.getCashCredits() bank = owner.getBankCredits() - if bank < 1000 and cash < 1000: + + if bank < cloningFee and cash < cloningFee: owner.sendSystemMessage('You lack the credits required to cover the cost of cloning.', 0) return - elif bank > 1000: - owner.setBankCredits(bank - 1000) - elif cash > 1000 and bank < 1000: - owner.setCashCredits(cash - 1000) + elif bank >= cloningFee: + owner.setBankCredits(bank - cloningFee) + elif cash >= cloningFee and bank < cloningFee: + owner.setCashCredits(cash - cloningFee) - owner.setAttachment('preDesignatedCloner', window.getRangeObject().getGrandparent().getObjectID()) + owner.getPlayerObject().setBindLocation(window.getRangeObject().getGrandparent().getObjectID()) owner.sendSystemMessage('@base_player:clone_success', 0) diff --git a/scripts/radial/travel_terminal.py b/scripts/radial/terminal/travel_terminal.py similarity index 73% rename from scripts/radial/travel_terminal.py rename to scripts/radial/terminal/travel_terminal.py index f8b984fb..a579af12 100644 --- a/scripts/radial/travel_terminal.py +++ b/scripts/radial/terminal/travel_terminal.py @@ -8,13 +8,13 @@ def createRadial(core, owner, target, radials): def handleSelection(core, owner, target, option): if option == 21 and target: - print ('Owner: ' + str(owner.getObjectId())) - + if owner is not None: + if owner.getCombatFlag() == 1: + owner.sendSystemMessage('You can\'t use that while in combat.', 0) + return tpm = EnterTicketPurchaseModeMessage(owner.getPlanet().getName(), core.mapService.getClosestCityName(owner), owner) owner.getClient().getSession().write(tpm.serialize()) - print ('Planet name: ' + owner.getPlanet().getName()) - print ('City name: ' + core.mapService.getClosestCityName(owner)) return return diff --git a/scripts/radial/terminal/vendor.py b/scripts/radial/terminal/vendor.py new file mode 100644 index 00000000..1ebb5c4b --- /dev/null +++ b/scripts/radial/terminal/vendor.py @@ -0,0 +1,130 @@ +from resources.common import RadialOptions, ProsePackage, OutOfBand +from java.util import HashMap +from java.lang import Long +from services.sui.SUIService import ListBoxType +from services.sui.SUIService import InputBoxType +from services.sui.SUIWindow import Trigger +import sys + +def createRadial(core, owner, target, radials): + radials.clear() + radials.add(RadialOptions(0, 7, 1, '')) + radials.add(RadialOptions(0, 11, 1, '')) + if not long(target.getAttachment('vendorOwner')) == owner.getObjectID(): + return + radials.add(RadialOptions(0, 55, 0, '')) + radials.add(RadialOptions(0, 52, 0, '')) + radials.add(RadialOptions(0, 112, 3, '@player_structure:vendor_control')) + radials.add(RadialOptions(3, 56, 1, '')) + radials.add(RadialOptions(3, 57, 1, '')) + radials.add(RadialOptions(3, 58, 1, '')) + radials.add(RadialOptions(3, 59, 1, '')) + radials.add(RadialOptions(4, 53, 1, '')) + radials.add(RadialOptions(4, 54, 1, '')) + + + if target.getAttachment('initialized') == False: + radials.add(RadialOptions(5, 118, 3, '@player_structure:vendor_init')) + else: + # soe reuses option 118 + radials.add(RadialOptions(5, 118, 3, '@player_structure:vendor_status')) + radials.add(RadialOptions(5, 217, 3, '@player_structure:give_maintenance')) + radials.add(RadialOptions(5, 115, 3, '@player_structure:take_maintenance')) + if owner.getSkillModBase('private_register_vendor') >= 1: + radials.add(RadialOptions(5, 116, 3, '@player_structure:register_vendor')) + radials.add(RadialOptions(5, 205, 3, '@player_structure:enable_vendor_search')) + radials.add(RadialOptions(5, 206, 3, '@player_structure:disable_vendor_search')) + radials.add(RadialOptions(5, 121, 3, '@player_structure:customize_vendor')) + + radials.add(RadialOptions(5, 114, 3, '@player_structure:vendor_pack')) + radials.add(RadialOptions(5, 117, 3, '@player_structure:remove_vendor')) + + return + +def handleSelection(core, owner, target, option): + + if not target.getAttachment('vendorOwner') == owner.getObjectID(): + return + + if target.getAttachment('initialized') == False: + if option == 118: + owner.sendSystemMessage('@player_structure:vendor_initialized', 0) + target.setAttachment('initialized', True) + core.bazaarService.startVendorUpdateTask(owner, target) + else: + if option == 118: + suiOptions = HashMap() + suiOptions.put(Long(1), 'Owner: ' + owner.getCustomName()) + suiOptions.put(Long(2), 'Maintenance Pool: ' + str(target.getAttachment('maintenanceAmount')) + ' cr') + maintenanceRate = 15 + if target.getAttachment('onMap') is True: + maintenanceRate += 6 + suiOptions.put(Long(3), 'Maintenance Rate: ' + str(maintenanceRate) + ' cr/hr') + suiOptions.put(Long(4), 'Number of Items For Sale: ' + str(core.bazaarService.getNumberOfItemsForSale(target.getObjectID()))) + window = core.suiService.createListBox(ListBoxType.LIST_BOX_OK_CANCEL, '@player_structure:vendor_status', 'Vendor Status', suiOptions, owner, None, 5) + core.suiService.openSUIWindow(window) + if option == 205: + target.setAttachment('vendorSearchEnabled', True) + owner.sendSystemMessage('@player_structure:vendor_search_enabled', 0) + if option == 206: + target.setAttachment('vendorSearchEnabled', False) + owner.sendSystemMessage('@player_structure:vendor_search_disabled', 0) + if option == 217: + window = core.suiService.createInputBox(InputBoxType.INPUT_BOX_OK_CANCEL, '@player_structure:pay_vendor_t', '@player_structure:pay_vendor_d', owner, target, 5, handlePayMaintenance) + core.suiService.openSUIWindow(window) + if option == 115: + window = core.suiService.createInputBox(InputBoxType.INPUT_BOX_OK_CANCEL, '@player_structure:withdraw_vendor_t', '@player_structure:withdraw_vendor_d', owner, target, 5, handleWithdrawMaintenance) + core.suiService.openSUIWindow(window) + + + + + + + return + +def handlePayMaintenance(actor, window, eventType, returnList): + + value = int(returnList.get(0)) + + if value > 100000: + actor.sendSystemMessage('@player_structure:vendor_maint_invalid', 0) + return + if value <= 0: + actor.sendSystemMessage('@player_structure:amt_greater_than_zero', 0) + return + if actor.getBankCredits() + actor.getCashCredits() <= value: + actor.sendSystemMessage('@player_structure:vendor_maint_denied', 0) + return + + if actor.getBankCredits() < value: + actor.setCashCredits(actor.getCashCredits() - (value - actor.getBankCredits())) + actor.setBankCredits(0) + else: + actor.setBankCredits(actor.getBankCredits() - value) + + maintAmount = window.getRangeObject().getAttachment('maintenanceAmount') + maintAmount += value + window.getRangeObject().setAttachment('maintenanceAmount', maintAmount) + + #actor.sendSystemMessage('@player_structure:vendor_maint_accepted', OutOfBand(ProsePackage(maintAmount)), 0) + + return + +def handleWithdrawMaintenance(actor, window, eventType, returnList): + + value = int(returnList.get(0)) + maintAmount = window.getRangeObject().getAttachment('maintenanceAmount') + + if value > maintAmount: + #actor.sendSystemMessage('@player_structure:vendor_withdraw_fail', OutOfBand(ProsePackage(value)), 0) + return + if value <= 0: + actor.sendSystemMessage('@player_structure:amt_greater_than_zero', 0) + + maintAmount -= value + window.getRangeObject().setAttachment('maintenanceAmount', maintAmount) + #actor.sendSystemMessage('@player_structure:vendor_withdraw', OutOfBand(ProsePackage(value)), 0) + + return + \ No newline at end of file diff --git a/scripts/roadmap/bounty_hunter_1a.py b/scripts/roadmap/bounty_hunter_1a.py index 7bb425e3..0c708fec 100644 --- a/scripts/roadmap/bounty_hunter_1a.py +++ b/scripts/roadmap/bounty_hunter_1a.py @@ -23,3 +23,97 @@ def getHealth(): def getAction(): return 75 + +def getRewards(name): + if name == 'item_bounty_hunter_backpack_01_02': + return "object/tangible/wearables/backpack/shared_backpack_s05.iff" + + if name == 'armor_bounty_hunter_roadmap_bicep_l_02_01': + return "object/tangible/wearables/armor/composite/shared_armor_composite_bicep_l.iff" + + if name == 'armor_bounty_hunter_roadmap_bicep_r_02_01': + return "object/tangible/wearables/armor/composite/shared_armor_composite_bicep_r.iff" + + if name == 'armor_bounty_hunter_roadmap_bracer_l_02_01': + return "object/tangible/wearables/armor/composite/shared_armor_composite_bracer_l.iff" + + if name == 'armor_bounty_hunter_roadmap_bracer_r_02_01': + return "object/tangible/wearables/armor/composite/shared_armor_composite_bracer_r.iff" + + if name == 'armor_bounty_hunter_roadmap_boots_02_01': + return "object/tangible/wearables/armor/composite/shared_armor_composite_boots.iff" + + if name == 'armor_bounty_hunter_roadmap_chest_02_01': + return "object/tangible/wearables/armor/composite/shared_armor_composite_chest_plate.iff" + + if name == 'armor_bounty_hunter_roadmap_gloves_02_01': + return "object/tangible/wearables/armor/composite/shared_armor_composite_gloves.iff" + + if name == 'armor_bounty_hunter_roadmap_helmet_02_01': + return "object/tangible/wearables/armor/composite/shared_armor_composite_helmet.iff" + + if name == 'armor_bounty_hunter_roadmap_leggings_02_01': + return "object/tangible/wearables/armor/composite/shared_armor_composite_leggings.iff" + + if name == 'armor_wookiee_roadmap_chest_02_03': + return "object/tangible/wearables/armor/kashyyykian_hunting/shared_armor_kashyyykian_hunting_chestplate.iff" + + if name == 'armor_wookiee_roadmap_leggings_02_03': + return "object/tangible/wearables/armor/kashyyykian_hunting/shared_armor_kashyyykian_hunting_leggings.iff" + + if name == 'armor_wookiee_roadmap_bicep_l_02_03': + return "object/tangible/wearables/armor/kashyyykian_hunting/shared_armor_kashyyykian_hunting_bicep_l.iff" + + if name == 'armor_wookiee_roadmap_bicep_r_02_03': + return "object/tangible/wearables/armor/kashyyykian_hunting/shared_armor_kashyyykian_hunting_bicep_r.iff" + + if name == 'armor_wookiee_roadmap_bracer_l_02_03': + return "object/tangible/wearables/armor/kashyyykian_hunting/shared_armor_kashyyykian_hunting_bracer_l.iff" + + if name == 'armor_wookiee_roadmap_bracer_r_02_03': + return "object/tangible/wearables/armor/kashyyykian_hunting/shared_armor_kashyyykian_hunting_bracer_r.iff" + + if name == 'armor_ithorian_roadmap_chest_02_03': + return "object/tangible/wearables/armor/ithorian_sentinel/shared_ith_armor_s03_chest_plate.iff" + + if name == 'armor_ithorian_roadmap_leggings_02_03': + return "object/tangible/wearables/armor/ithorian_sentinel/shared_ith_armor_s03_leggings.iff" + + if name == 'armor_ithorian_roadmap_helmet_02_03': + return "object/tangible/wearables/armor/ithorian_sentinel/shared_ith_armor_s03_helmet.iff" + + if name == 'armor_ithorian_roadmap_bicep_l_02_03': + return "object/tangible/wearables/armor/ithorian_sentinel/shared_ith_armor_s03_bicep_l.iff" + + if name == 'armor_ithorian_roadmap_bicep_r_02_03': + return "object/tangible/wearables/armor/ithorian_sentinel/shared_ith_armor_s03_bicep_r.iff" + + if name == 'armor_ithorian_roadmap_bracer_l_02_03': + return "object/tangible/wearables/armor/ithorian_sentinel/shared_ith_armor_s03_bracer_l.iff" + + if name == 'armor_ithorian_roadmap_bracer_r_02_03': + return "object/tangible/wearables/armor/ithorian_sentinel/shared_ith_armor_s03_bracer_r.iff" + + if name == 'armor_ithorian_roadmap_boots_02_03': + return "object/tangible/wearables/armor/ithorian_sentinel/shared_ith_armor_s03_boots.iff" + + if name == 'armor_ithorian_roadmap_gloves_02_03': + return "object/tangible/wearables/armor/ithorian_sentinel/shared_ith_armor_s03_gloves.iff" + + if name == 'weapon_carbine_bh_roadmap_01_02': + return "object/weapon/ranged/carbine/shared_carbine_ee3.iff" + + if name == 'item_bounty_hunter_ring_01_02': + return "object/tangible/wearables/ring/shared_ring_s02.iff" + + if name == 'weapon_rifle_bh_roadmap_01_02': + return "object/weapon/ranged/rifle/shared_rifle_lightning.iff" + + if name == 'item_bounty_hunter_pendant_01_02': + return "object/tangible/wearables/necklace/shared_necklace_s02.iff" + + if name == 'item_bounty_hunter_clicky_01_02': + return "object/tangible/loot/generic_usable/shared_survey_pad_adv_generic.iff" + + if name == 'item_roadmap_belt_bounty_hunter_01_02': + return "object/tangible/wearables/armor/zam/shared_armor_zam_wesell_belt.iff" \ No newline at end of file diff --git a/scripts/roadmap/commando_1a.py b/scripts/roadmap/commando_1a.py index 8d9253ae..c63fd717 100644 --- a/scripts/roadmap/commando_1a.py +++ b/scripts/roadmap/commando_1a.py @@ -23,3 +23,97 @@ def getHealth(): def getAction(): return 75 + +def getRewards(name): + if name == 'item_bounty_hunter_backpack_01_02': + return "object/tangible/wearables/backpack/shared_backpack_s04.iff" + + if name == 'armor_commando_roadmap_bicep_l_02_01': + return "object/tangible/wearables/armor/composite/shared_armor_composite_bicep_l.iff" + + if name == 'armor_commando_roadmap_bicep_r_02_01': + return "object/tangible/wearables/armor/composite/shared_armor_composite_bicep_r.iff" + + if name == 'armor_commando_roadmap_bracer_l_02_01': + return "object/tangible/wearables/armor/composite/shared_armor_composite_bracer_l.iff" + + if name == 'armor_commando_roadmap_bracer_r_02_01': + return "object/tangible/wearables/armor/composite/shared_armor_composite_bracer_r.iff" + + if name == 'armor_commando_roadmap_boots_02_01': + return "object/tangible/wearables/armor/composite/shared_armor_composite_boots.iff" + + if name == 'armor_commando_roadmap_chest_02_01': + return "object/tangible/wearables/armor/composite/shared_armor_composite_chest_plate.iff" + + if name == 'armor_commando_roadmap_gloves_02_01': + return "object/tangible/wearables/armor/composite/shared_armor_composite_gloves.iff" + + if name == 'armor_commando_roadmap_helmet_02_01': + return "object/tangible/wearables/armor/composite/shared_armor_composite_helmet.iff" + + if name == 'armor_commando_roadmap_leggings_02_01': + return "object/tangible/wearables/armor/composite/shared_armor_composite_leggings.iff" + + if name == 'armor_wookiee_roadmap_chest_02_03': + return "object/tangible/wearables/armor/kashyyykian_hunting/shared_armor_kashyyykian_hunting_chestplate.iff" + + if name == 'armor_wookiee_roadmap_leggings_02_03': + return "object/tangible/wearables/armor/kashyyykian_hunting/shared_armor_kashyyykian_hunting_leggings.iff" + + if name == 'armor_wookiee_roadmap_bicep_l_02_03': + return "object/tangible/wearables/armor/kashyyykian_hunting/shared_armor_kashyyykian_hunting_bicep_l.iff" + + if name == 'armor_wookiee_roadmap_bicep_r_02_03': + return "object/tangible/wearables/armor/kashyyykian_hunting/shared_armor_kashyyykian_hunting_bicep_r.iff" + + if name == 'armor_wookiee_roadmap_bracer_l_02_03': + return "object/tangible/wearables/armor/kashyyykian_hunting/shared_armor_kashyyykian_hunting_bracer_l.iff" + + if name == 'armor_wookiee_roadmap_bracer_r_02_03': + return "object/tangible/wearables/armor/kashyyykian_hunting/shared_armor_kashyyykian_hunting_bracer_r.iff" + + if name == 'armor_ithorian_roadmap_chest_02_03': + return "object/tangible/wearables/armor/ithorian_sentinel/shared_ith_armor_s03_chest_plate.iff" + + if name == 'armor_ithorian_roadmap_leggings_02_03': + return "object/tangible/wearables/armor/ithorian_sentinel/shared_ith_armor_s03_leggings.iff" + + if name == 'armor_ithorian_roadmap_helmet_02_03': + return "object/tangible/wearables/armor/ithorian_sentinel/shared_ith_armor_s03_helmet.iff" + + if name == 'armor_ithorian_roadmap_bicep_l_02_03': + return "object/tangible/wearables/armor/ithorian_sentinel/shared_ith_armor_s03_bicep_l.iff" + + if name == 'armor_ithorian_roadmap_bicep_r_02_03': + return "object/tangible/wearables/armor/ithorian_sentinel/shared_ith_armor_s03_bicep_r.iff" + + if name == 'armor_ithorian_roadmap_bracer_l_02_03': + return "object/tangible/wearables/armor/ithorian_sentinel/shared_ith_armor_s03_bracer_l.iff" + + if name == 'armor_ithorian_roadmap_bracer_r_02_03': + return "object/tangible/wearables/armor/ithorian_sentinel/shared_ith_armor_s03_bracer_r.iff" + + if name == 'armor_ithorian_roadmap_boots_02_03': + return "object/tangible/wearables/armor/ithorian_sentinel/shared_ith_armor_s03_boots.iff" + + if name == 'armor_ithorian_roadmap_gloves_02_03': + return "object/tangible/wearables/armor/ithorian_sentinel/shared_ith_armor_s03_gloves.iff" + + if name == 'weapon_lightningbeam_commando_roadmap_01_02': + return "object/weapon/ranged/rifle/shared_rifle_dlt20.iff" + + if name == 'item_commando_ring_01_02': + return "object/tangible/wearables/ring/shared_ring_s03.iff" + + if name == 'weapon_acidbeam_commando_roadmap_01_02': + return "object/weapon/ranged/carbine/shared_carbine_e11.iff" + + if name == 'item_commando_pendant_01_02': + return "object/tangible/wearables/necklace/shared_necklace_s07.iff" + + if name == 'item_commando_clicky_01_02': + return "object/tangible/loot/generic_usable/shared_survey_pad_adv_generic.iff" + + if name == 'item_roadmap_belt_commando_01_02': + return "object/tangible/wearables/armor/zam/shared_armor_zam_wesell_belt.iff" \ No newline at end of file diff --git a/scripts/roadmap/entertainer_1a.py b/scripts/roadmap/entertainer_1a.py index 0541cc93..efe33465 100644 --- a/scripts/roadmap/entertainer_1a.py +++ b/scripts/roadmap/entertainer_1a.py @@ -23,3 +23,6 @@ def getHealth(): def getAction(): return 75 + +def getRewards(name): + return \ No newline at end of file diff --git a/scripts/roadmap/force_sensitive_1a.py b/scripts/roadmap/force_sensitive_1a.py index 2d9241b0..9fd5ca69 100644 --- a/scripts/roadmap/force_sensitive_1a.py +++ b/scripts/roadmap/force_sensitive_1a.py @@ -23,3 +23,28 @@ def getHealth(): def getAction(): return 75 + +def getRewards(name): + if name == 'item_force_sensitive_ring_02_01': + return "object/tangible/wearables/ring/shared_ring_s02.iff" + + if name == 'item_npe_fs_robe_02_02': + return "object/tangible/wearables/robe/shared_robe_jedi_padawan.iff" + + if name == 'weapon_roadmap_lightsaber_02_02': + return "object/weapon/melee/sword/crafted_saber/shared_sword_lightsaber_one_handed_s1.iff" + + if name == 'item_force_sensitive_ring_01_02': + return "object/tangible/wearables/ring/shared_ring_s01.iff" + + if name == 'item_krayt_pearl_04_01': + return "object/tangible/component/weapon/lightsaber/shared_lightsaber_module_krayt_dragon_pearl.iff" + + if name == 'item_force_sensitive_pendant_01_02': + return "object/tangible/wearables/necklace/shared_necklace_s12.iff" + + if name == 'item_force_sensitive_clicky_01_02': + return "object/tangible/loot/generic_usable/shared_generic_crystal.iff" + + if name == 'item_roadmap_belt_force_sensitive_01_02': + return "object/tangible/wearables/armor/zam/shared_armor_zam_wesell_belt.iff" \ No newline at end of file diff --git a/scripts/roadmap/medic_1a.py b/scripts/roadmap/medic_1a.py index 6b84327b..dd0ffb66 100644 --- a/scripts/roadmap/medic_1a.py +++ b/scripts/roadmap/medic_1a.py @@ -23,3 +23,97 @@ def getHealth(): def getAction(): return 75 + +def getRewards(name): + if name == 'item_medic_backpack_01_02': + return "object/tangible/wearables/backpack/shared_backpack_s02.iff" + + if name == 'armor_medic_roadmap_bicep_l_02_01': + return "object/tangible/wearables/armor/tantel/shared_armor_tantel_skreej_bicep_l.iff" + + if name == 'armor_medic_roadmap_bicep_r_02_01': + return "object/tangible/wearables/armor/tantel/shared_armor_tantel_skreej_bicep_r.iff" + + if name == 'armor_medic_roadmap_bracer_l_02_01': + return "object/tangible/wearables/armor/tantel/shared_armor_tantel_skreej_bracer_l.iff" + + if name == 'armor_medic_roadmap_bracer_r_02_01': + return "object/tangible/wearables/armor/tantel/shared_armor_tantel_skreej_bracer_r.iff" + + if name == 'armor_medic_roadmap_boots_02_01': + return "object/tangible/wearables/armor/tantel/shared_armor_tantel_skreej_boots.iff" + + if name == 'armor_medic_roadmap_chest_02_01': + return "object/tangible/wearables/armor/tantel/shared_armor_tantel_skreej_chest_plate.iff" + + if name == 'armor_medic_roadmap_gloves_02_01': + return "object/tangible/wearables/armor/tantel/shared_armor_tantel_skreej_gloves.iff" + + if name == 'armor_medic_roadmap_helmet_02_01': + return "object/tangible/wearables/armor/tantel/shared_armor_tantel_skreej_helmet.iff" + + if name == 'armor_medic_roadmap_leggings_02_01': + return "object/tangible/wearables/armor/tantel/shared_armor_tantel_skreej_leggings.iff" + + if name == 'armor_wookiee_roadmap_chest_02_03': + return "object/tangible/wearables/armor/kashyyykian_hunting/shared_armor_kashyyykian_hunting_chestplate.iff" + + if name == 'armor_wookiee_roadmap_leggings_02_03': + return "object/tangible/wearables/armor/kashyyykian_hunting/shared_armor_kashyyykian_hunting_leggings.iff" + + if name == 'armor_wookiee_roadmap_bicep_l_02_03': + return "object/tangible/wearables/armor/kashyyykian_hunting/shared_armor_kashyyykian_hunting_bicep_l.iff" + + if name == 'armor_wookiee_roadmap_bicep_r_02_03': + return "object/tangible/wearables/armor/kashyyykian_hunting/shared_armor_kashyyykian_hunting_bicep_r.iff" + + if name == 'armor_wookiee_roadmap_bracer_l_02_03': + return "object/tangible/wearables/armor/kashyyykian_hunting/shared_armor_kashyyykian_hunting_bracer_l.iff" + + if name == 'armor_wookiee_roadmap_bracer_r_02_03': + return "object/tangible/wearables/armor/kashyyykian_hunting/shared_armor_kashyyykian_hunting_bracer_r.iff" + + if name == 'armor_ithorian_roadmap_chest_02_03': + return "object/tangible/wearables/armor/ithorian_sentinel/shared_ith_armor_s03_chest_plate.iff" + + if name == 'armor_ithorian_roadmap_leggings_02_03': + return "object/tangible/wearables/armor/ithorian_sentinel/shared_ith_armor_s03_leggings.iff" + + if name == 'armor_ithorian_roadmap_helmet_02_03': + return "object/tangible/wearables/armor/ithorian_sentinel/shared_ith_armor_s03_helmet.iff" + + if name == 'armor_ithorian_roadmap_bicep_l_02_03': + return "object/tangible/wearables/armor/ithorian_sentinel/shared_ith_armor_s03_bicep_l.iff" + + if name == 'armor_ithorian_roadmap_bicep_r_02_03': + return "object/tangible/wearables/armor/ithorian_sentinel/shared_ith_armor_s03_bicep_r.iff" + + if name == 'armor_ithorian_roadmap_bracer_l_02_03': + return "object/tangible/wearables/armor/ithorian_sentinel/shared_ith_armor_s03_bracer_l.iff" + + if name == 'armor_ithorian_roadmap_bracer_r_02_03': + return "object/tangible/wearables/armor/ithorian_sentinel/shared_ith_armor_s03_bracer_r.iff" + + if name == 'armor_ithorian_roadmap_boots_02_03': + return "object/tangible/wearables/armor/ithorian_sentinel/shared_ith_armor_s03_boots.iff" + + if name == 'armor_ithorian_roadmap_gloves_02_03': + return "object/tangible/wearables/armor/ithorian_sentinel/shared_ith_armor_s03_gloves.iff" + + if name == 'weapon_carbine_me_roadmap_01_02': + return "object/weapon/ranged/pistol/shared_pistol_scout_blaster.iff" + + if name == 'item_medic_ring_01_02': + return "object/tangible/wearables/ring/shared_ring_s02.iff" + + if name == 'weapon_rifle_me_roadmap_01_02': + return "object/weapon/ranged/carbine/shared_carbine_laser.iff" + + if name == 'item_medic_pendant_01_02': + return "object/tangible/wearables/necklace/shared_necklace_s02.iff" + + if name == 'item_medic_clicky_01_02': + return "object/tangible/loot/generic_usable/shared_survey_pad_adv_generic.iff" + + if name == 'item_roadmap_belt_medic_01_02': + return "object/tangible/wearables/armor/zam/shared_armor_zam_wesell_belt.iff" diff --git a/scripts/roadmap/officer_1a.py b/scripts/roadmap/officer_1a.py new file mode 100644 index 00000000..3a139591 --- /dev/null +++ b/scripts/roadmap/officer_1a.py @@ -0,0 +1,120 @@ +import sys + +def getLuck(): + return 20 + +def getPrecision(): + return 70 + +def getStrength(): + return 50 + +def getConstitution(): + return 80 + +def getStamina(): + return 80 + +def getAgility(): + return 60 + +def getHealth(): + return 100 + +def getAction(): + return 75 + +def getRewards(name): + + if name == 'item_officer_backpack_01_02': + return "object/tangible/wearables/backpack/shared_backpack_s03.iff" + + if name == 'armor_officer_roadmap_bicep_l_02_01': + return "object/tangible/wearables/armor/composite/shared_armor_composite_bicep_l.iff" + + if name == 'armor_officer_roadmap_bicep_r_02_01': + return "object/tangible/wearables/armor/composite/shared_armor_composite_bicep_r.iff" + + if name == 'armor_officer_roadmap_bracer_l_02_01': + return "object/tangible/wearables/armor/composite/shared_armor_composite_bracer_l.iff" + + if name == 'armor_officer_roadmap_bracer_r_02_01': + return "object/tangible/wearables/armor/composite/shared_armor_composite_bracer_r.iff" + + if name == 'armor_officer_roadmap_boots_02_01': + return "object/tangible/wearables/armor/composite/shared_armor_composite_boots.iff" + + if name == 'armor_officer_roadmap_chest_02_01': + return "object/tangible/wearables/armor/composite/shared_armor_composite_chest_plate.iff" + + if name == 'armor_officer_roadmap_gloves_02_01': + return "object/tangible/wearables/armor/composite/shared_armor_composite_gloves.iff" + + if name == 'armor_officer_roadmap_helmet_02_01': + return "object/tangible/wearables/armor/composite/shared_armor_composite_helmet.iff" + + if name == 'armor_officer_roadmap_leggings_02_01': + return "object/tangible/wearables/armor/composite/shared_armor_composite_leggings.iff" + + if name == 'armor_wookiee_roadmap_chest_02_03': + return "object/tangible/wearables/armor/kashyyykian_hunting/shared_armor_kashyyykian_hunting_chestplate.iff" + + if name == 'armor_wookiee_roadmap_leggings_02_03': + return "object/tangible/wearables/armor/kashyyykian_hunting/shared_armor_kashyyykian_hunting_leggings.iff" + + if name == 'armor_wookiee_roadmap_bicep_l_02_03': + return "object/tangible/wearables/armor/kashyyykian_hunting/shared_armor_kashyyykian_hunting_bicep_l.iff" + + if name == 'armor_wookiee_roadmap_bicep_r_02_03': + return "object/tangible/wearables/armor/kashyyykian_hunting/shared_armor_kashyyykian_hunting_bicep_r.iff" + + if name == 'armor_wookiee_roadmap_bracer_l_02_03': + return "object/tangible/wearables/armor/kashyyykian_hunting/shared_armor_kashyyykian_hunting_bracer_l.iff" + + if name == 'armor_wookiee_roadmap_bracer_r_02_03': + return "object/tangible/wearables/armor/kashyyykian_hunting/shared_armor_kashyyykian_hunting_bracer_r.iff" + + if name == 'armor_ithorian_roadmap_chest_02_03': + return "object/tangible/wearables/armor/ithorian_sentinel/shared_ith_armor_s03_chest_plate.iff" + + if name == 'armor_ithorian_roadmap_leggings_02_03': + return "object/tangible/wearables/armor/ithorian_sentinel/shared_ith_armor_s03_leggings.iff" + + if name == 'armor_ithorian_roadmap_helmet_02_03': + return "object/tangible/wearables/armor/ithorian_sentinel/shared_ith_armor_s03_helmet.iff" + + if name == 'armor_ithorian_roadmap_bicep_l_02_03': + return "object/tangible/wearables/armor/ithorian_sentinel/shared_ith_armor_s03_bicep_l.iff" + + if name == 'armor_ithorian_roadmap_bicep_r_02_03': + return "object/tangible/wearables/armor/ithorian_sentinel/shared_ith_armor_s03_bicep_r.iff" + + if name == 'armor_ithorian_roadmap_bracer_l_02_03': + return "object/tangible/wearables/armor/ithorian_sentinel/shared_ith_armor_s03_bracer_l.iff" + + if name == 'armor_ithorian_roadmap_bracer_r_02_03': + return "object/tangible/wearables/armor/ithorian_sentinel/shared_ith_armor_s03_bracer_r.iff" + + if name == 'armor_ithorian_roadmap_boots_02_03': + return "object/tangible/wearables/armor/ithorian_sentinel/shared_ith_armor_s03_boots.iff" + + if name == 'armor_ithorian_roadmap_gloves_02_03': + return "object/tangible/wearables/armor/ithorian_sentinel/shared_ith_armor_s03_gloves.iff" + + if name == 'weapon_pistol_sp_roadmap_01_02': + return "object/weapon/ranged/pistol/shared_pistol_dl44.iff" + + if name == 'item_officer_ring_01_02': + return "object/tangible/wearables/ring/shared_ring_s02.iff" + + if name == 'weapon_carbine_of_roadmap_01_02': + return "object/weapon/ranged/pistol/shared_pistol_dl44_metal.iff" + + if name == 'item_officer_pendant_01_02': + return "object/tangible/wearables/necklace/shared_necklace_s02.iff" + + if name == 'item_officer_clicky_01_02': + return "object/tangible/loot/generic_usable/shared_survey_pad_adv_generic.iff" + + if name == 'item_roadmap_belt_officer_01_02': + return "object/tangible/wearables/armor/zam/shared_armor_zam_wesell_belt.iff" diff --git a/scripts/roadmap/roadmap_rewards.py b/scripts/roadmap/roadmap_rewards.py deleted file mode 100644 index 2f11d77e..00000000 --- a/scripts/roadmap/roadmap_rewards.py +++ /dev/null @@ -1,4 +0,0 @@ -import sys - -def get(name): - return "" diff --git a/scripts/roadmap/smuggler_1a.py b/scripts/roadmap/smuggler_1a.py index 8084fcd2..44a2d32c 100644 --- a/scripts/roadmap/smuggler_1a.py +++ b/scripts/roadmap/smuggler_1a.py @@ -23,3 +23,97 @@ def getHealth(): def getAction(): return 75 + +def getRewards(name): + if name == 'item_smuggler_backpack_01_02': + return "object/tangible/wearables/backpack/shared_backpack_s02.iff" + + if name == 'armor_smuggler_roadmap_bicep_l_02_01': + return "object/tangible/wearables/armor/tantel/shared_armor_tantel_skreej_bicep_l.iff" + + if name == 'armor_smuggler_roadmap_bicep_r_02_01': + return "object/tangible/wearables/armor/tantel/shared_armor_tantel_skreej_bicep_r.iff" + + if name == 'armor_smuggler_roadmap_bracer_l_02_01': + return "object/tangible/wearables/armor/tantel/shared_armor_tantel_skreej_bracer_l.iff" + + if name == 'armor_smuggler_roadmap_bracer_r_02_01': + return "object/tangible/wearables/armor/tantel/shared_armor_tantel_skreej_bracer_r.iff" + + if name == 'armor_smuggler_roadmap_boots_02_01': + return "object/tangible/wearables/armor/tantel/shared_armor_tantel_skreej_boots.iff" + + if name == 'armor_smuggler_roadmap_chest_02_01': + return "object/tangible/wearables/armor/tantel/shared_armor_tantel_skreej_chest_plate.iff" + + if name == 'armor_smuggler_roadmap_gloves_02_01': + return "object/tangible/wearables/armor/tantel/shared_armor_tantel_skreej_gloves.iff" + + if name == 'armor_smuggler_roadmap_helmet_02_01': + return "object/tangible/wearables/armor/tantel/shared_armor_tantel_skreej_helmet.iff" + + if name == 'armor_smuggler_roadmap_leggings_02_01': + return "object/tangible/wearables/armor/tantel/shared_armor_tantel_skreej_leggings.iff" + + if name == 'armor_wookiee_roadmap_chest_02_03': + return "object/tangible/wearables/armor/kashyyykian_hunting/shared_armor_kashyyykian_hunting_chestplate.iff" + + if name == 'armor_wookiee_roadmap_leggings_02_03': + return "object/tangible/wearables/armor/kashyyykian_hunting/shared_armor_kashyyykian_hunting_leggings.iff" + + if name == 'armor_wookiee_roadmap_bicep_l_02_03': + return "object/tangible/wearables/armor/kashyyykian_hunting/shared_armor_kashyyykian_hunting_bicep_l.iff" + + if name == 'armor_wookiee_roadmap_bicep_r_02_03': + return "object/tangible/wearables/armor/kashyyykian_hunting/shared_armor_kashyyykian_hunting_bicep_r.iff" + + if name == 'armor_wookiee_roadmap_bracer_l_02_03': + return "object/tangible/wearables/armor/kashyyykian_hunting/shared_armor_kashyyykian_hunting_bracer_l.iff" + + if name == 'armor_wookiee_roadmap_bracer_r_02_03': + return "object/tangible/wearables/armor/kashyyykian_hunting/shared_armor_kashyyykian_hunting_bracer_r.iff" + + if name == 'armor_ithorian_roadmap_chest_02_03': + return "object/tangible/wearables/armor/ithorian_sentinel/shared_ith_armor_s03_chest_plate.iff" + + if name == 'armor_ithorian_roadmap_leggings_02_03': + return "object/tangible/wearables/armor/ithorian_sentinel/shared_ith_armor_s03_leggings.iff" + + if name == 'armor_ithorian_roadmap_helmet_02_03': + return "object/tangible/wearables/armor/ithorian_sentinel/shared_ith_armor_s03_helmet.iff" + + if name == 'armor_ithorian_roadmap_bicep_l_02_03': + return "object/tangible/wearables/armor/ithorian_sentinel/shared_ith_armor_s03_bicep_l.iff" + + if name == 'armor_ithorian_roadmap_bicep_r_02_03': + return "object/tangible/wearables/armor/ithorian_sentinel/shared_ith_armor_s03_bicep_r.iff" + + if name == 'armor_ithorian_roadmap_bracer_l_02_03': + return "object/tangible/wearables/armor/ithorian_sentinel/shared_ith_armor_s03_bracer_l.iff" + + if name == 'armor_ithorian_roadmap_bracer_r_02_03': + return "object/tangible/wearables/armor/ithorian_sentinel/shared_ith_armor_s03_bracer_r.iff" + + if name == 'armor_ithorian_roadmap_boots_02_03': + return "object/tangible/wearables/armor/ithorian_sentinel/shared_ith_armor_s03_boots.iff" + + if name == 'armor_ithorian_roadmap_gloves_02_03': + return "object/tangible/wearables/armor/ithorian_sentinel/shared_ith_armor_s03_gloves.iff" + + if name == 'weapon_pistol_sm_roadmap_01_02': + return "object/weapon/ranged/pistol/shared_pistol_striker.iff" + + if name == 'item_smuggler_ring_01_02': + return "object/tangible/wearables/ring/shared_ring_s02.iff" + + if name == 'weapon_carbine_sm_roadmap_01_02': + return "object/weapon/ranged/pistol/shared_pistol_scout_blaster.iff" + + if name == 'item_smuggler_pendant_01_02': + return "object/tangible/wearables/necklace/shared_necklace_s02.iff" + + if name == 'item_smuggler_clicky_01_02': + return "object/tangible/loot/generic_usable/shared_survey_pad_adv_generic.iff" + + if name == 'item_roadmap_belt_smuggler_01_02': + return "object/tangible/wearables/armor/zam/shared_armor_zam_wesell_belt.iff" diff --git a/scripts/roadmap/spy_1a.py b/scripts/roadmap/spy_1a.py index 6fe7c37a..65d40d6c 100644 --- a/scripts/roadmap/spy_1a.py +++ b/scripts/roadmap/spy_1a.py @@ -23,3 +23,98 @@ def getHealth(): def getAction(): return 75 + +def getRewards(name): + + if name == 'item_spy_backpack_01_02': + return "object/tangible/wearables/backpack/shared_backpack_s04.iff" + + if name == 'armor_spy_roadmap_bicep_l_02_01': + return "object/tangible/wearables/armor/padded/shared_armor_padded_s01_bicep_l.iff" + + if name == 'armor_spy_roadmap_bicep_r_02_01': + return "object/tangible/wearables/armor/padded/shared_armor_padded_s01_bicep_r.iff" + + if name == 'armor_spy_roadmap_bracer_l_02_01': + return "object/tangible/wearables/armor/padded/shared_armor_padded_s01_bracer_l.iff" + + if name == 'armor_spy_roadmap_bracer_r_02_01': + return "object/tangible/wearables/armor/padded/shared_armor_padded_s01_bracer_r.iff" + + if name == 'armor_spy_roadmap_boots_02_01': + return "object/tangible/wearables/armor/padded/shared_armor_padded_s01_boots.iff" + + if name == 'armor_spy_roadmap_chest_02_01': + return "object/tangible/wearables/armor/padded/shared_armor_padded_s01_chest_plate.iff" + + if name == 'armor_spy_roadmap_gloves_02_01': + return "object/tangible/wearables/armor/padded/shared_armor_padded_s01_gloves.iff" + + if name == 'armor_spy_roadmap_helmet_02_01': + return "object/tangible/wearables/armor/padded/shared_armor_padded_s01_helmet.iff" + + if name == 'armor_spy_roadmap_leggings_02_01': + return "object/tangible/wearables/armor/padded/shared_armor_padded_s01_leggings.iff" + + if name == 'armor_wookiee_roadmap_chest_02_03': + return "object/tangible/wearables/armor/kashyyykian_hunting/shared_armor_kashyyykian_hunting_chestplate.iff" + + if name == 'armor_wookiee_roadmap_leggings_02_03': + return "object/tangible/wearables/armor/kashyyykian_hunting/shared_armor_kashyyykian_hunting_leggings.iff" + + if name == 'armor_wookiee_roadmap_bicep_l_02_03': + return "object/tangible/wearables/armor/kashyyykian_hunting/shared_armor_kashyyykian_hunting_bicep_l.iff" + + if name == 'armor_wookiee_roadmap_bicep_r_02_03': + return "object/tangible/wearables/armor/kashyyykian_hunting/shared_armor_kashyyykian_hunting_bicep_r.iff" + + if name == 'armor_wookiee_roadmap_bracer_l_02_03': + return "object/tangible/wearables/armor/kashyyykian_hunting/shared_armor_kashyyykian_hunting_bracer_l.iff" + + if name == 'armor_wookiee_roadmap_bracer_r_02_03': + return "object/tangible/wearables/armor/kashyyykian_hunting/shared_armor_kashyyykian_hunting_bracer_r.iff" + + if name == 'armor_ithorian_roadmap_chest_02_03': + return "object/tangible/wearables/armor/ithorian_sentinel/shared_ith_armor_s03_chest_plate.iff" + + if name == 'armor_ithorian_roadmap_leggings_02_03': + return "object/tangible/wearables/armor/ithorian_sentinel/shared_ith_armor_s03_leggings.iff" + + if name == 'armor_ithorian_roadmap_helmet_02_03': + return "object/tangible/wearables/armor/ithorian_sentinel/shared_ith_armor_s03_helmet.iff" + + if name == 'armor_ithorian_roadmap_bicep_l_02_03': + return "object/tangible/wearables/armor/ithorian_sentinel/shared_ith_armor_s03_bicep_l.iff" + + if name == 'armor_ithorian_roadmap_bicep_r_02_03': + return "object/tangible/wearables/armor/ithorian_sentinel/shared_ith_armor_s03_bicep_r.iff" + + if name == 'armor_ithorian_roadmap_bracer_l_02_03': + return "object/tangible/wearables/armor/ithorian_sentinel/shared_ith_armor_s03_bracer_l.iff" + + if name == 'armor_ithorian_roadmap_bracer_r_02_03': + return "object/tangible/wearables/armor/ithorian_sentinel/shared_ith_armor_s03_bracer_r.iff" + + if name == 'armor_ithorian_roadmap_boots_02_03': + return "object/tangible/wearables/armor/ithorian_sentinel/shared_ith_armor_s03_boots.iff" + + if name == 'armor_ithorian_roadmap_gloves_02_03': + return "object/tangible/wearables/armor/ithorian_sentinel/shared_ith_armor_s03_gloves.iff" + + if name == 'weapon_pistol_sp_roadmap_01_02': + return "object/weapon/ranged/pistol/shared_pistol_striker.iff" + + if name == 'item_spy_ring_01_02': + return "object/tangible/wearables/ring/shared_ring_s02.iff" + + if name == 'weapon_carbine_sp_roadmap_01_02': + return "object/weapon/ranged/carbine/shared_carbine_e11.iff" + + if name == 'item_spy_pendant_01_02': + return "object/tangible/wearables/necklace/shared_necklace_s02.iff" + + if name == 'item_spy_clicky_01_02': + return "object/tangible/loot/generic_usable/shared_survey_pad_adv_generic.iff" + + if name == 'item_roadmap_belt_spy_01_02': + return "object/tangible/wearables/armor/zam/shared_armor_zam_wesell_belt.iff" diff --git a/scripts/roadmap/trader_0a.py b/scripts/roadmap/trader_0a.py index 2846dee7..c0ae1ee4 100644 --- a/scripts/roadmap/trader_0a.py +++ b/scripts/roadmap/trader_0a.py @@ -23,3 +23,32 @@ def getHealth(): def getAction(): return 75 + +def getRewards(name): + if name == 'item_npe_gen_craft_tool_trader_03_01': + return "object/tangible/crafting/base/shared_generic_base_tool.iff" + + if name == 'item_trader_backpack_01_02': + return "object/tangible/wearables/backpack/shared_backpack_s04.iff" + + if name == 'weapon_knife_trader_roadmap_01_02': + return "object/weapon/melee/knife/shared_knife_dagger.iff" + + if name == 'item_trader_ring_01_02': + return "object/tangible/wearables/ring/shared_ring_s02.iff" + + if name == 'item_trader_roadmap_jumpsuit_02_02': + return "object/tangible/wearables/bodysuit/shared_bodysuit_s01.iff" + + if name == 'weapon_pistol_trader_roadmap_01_02': + return "object/weapon/ranged/pistol/shared_pistol_scout_blaster.iff" + + if name == 'item_trader_pendant_01_02': + return "object/tangible/wearables/necklace/shared_necklace_s07.iff" + + if name == 'item_trader_clicky_01_02': + return "object/tangible/crafting/station/shared_generic_generic_tool.iff" + + if name == 'item_roadmap_belt_trader_01_02': + return "object/tangible/wearables/armor/zam/shared_armor_zam_wesell_belt.iff" + return \ No newline at end of file diff --git a/scripts/roadmap/trader_0b.py b/scripts/roadmap/trader_0b.py index 2846dee7..c3a7e4ec 100644 --- a/scripts/roadmap/trader_0b.py +++ b/scripts/roadmap/trader_0b.py @@ -23,3 +23,33 @@ def getHealth(): def getAction(): return 75 + + +def getRewards(name): + if name == 'item_npe_gen_craft_tool_trader_03_01': + return "object/tangible/crafting/base/shared_generic_base_tool.iff" + + if name == 'item_trader_backpack_01_02': + return "object/tangible/wearables/backpack/shared_backpack_s04.iff" + + if name == 'weapon_knife_trader_roadmap_01_02': + return "object/weapon/melee/knife/shared_knife_dagger.iff" + + if name == 'item_trader_ring_01_02': + return "object/tangible/wearables/ring/shared_ring_s02.iff" + + if name == 'item_trader_roadmap_jumpsuit_02_02': + return "object/tangible/wearables/bodysuit/shared_bodysuit_s01.iff" + + if name == 'weapon_pistol_trader_roadmap_01_02': + return "object/weapon/ranged/pistol/shared_pistol_scout_blaster.iff" + + if name == 'item_trader_pendant_01_02': + return "object/tangible/wearables/necklace/shared_necklace_s07.iff" + + if name == 'item_trader_clicky_01_02': + return "object/tangible/crafting/station/shared_generic_generic_tool.iff" + + if name == 'item_roadmap_belt_trader_01_02': + return "object/tangible/wearables/armor/zam/shared_armor_zam_wesell_belt.iff" + return \ No newline at end of file diff --git a/scripts/roadmap/trader_0c.py b/scripts/roadmap/trader_0c.py index 2846dee7..7ac4a0d7 100644 --- a/scripts/roadmap/trader_0c.py +++ b/scripts/roadmap/trader_0c.py @@ -23,3 +23,32 @@ def getHealth(): def getAction(): return 75 + +def getRewards(name): + if name == 'item_npe_gen_craft_tool_trader_03_01': + return "object/tangible/crafting/base/shared_generic_base_tool.iff" + + if name == 'item_trader_backpack_01_02': + return "object/tangible/wearables/backpack/shared_backpack_s04.iff" + + if name == 'weapon_knife_trader_roadmap_01_02': + return "object/weapon/melee/knife/shared_knife_dagger.iff" + + if name == 'item_trader_ring_01_02': + return "object/tangible/wearables/ring/shared_ring_s02.iff" + + if name == 'item_trader_roadmap_jumpsuit_02_02': + return "object/tangible/wearables/bodysuit/shared_bodysuit_s01.iff" + + if name == 'weapon_pistol_trader_roadmap_01_02': + return "object/weapon/ranged/pistol/shared_pistol_scout_blaster.iff" + + if name == 'item_trader_pendant_01_02': + return "object/tangible/wearables/necklace/shared_necklace_s07.iff" + + if name == 'item_trader_clicky_01_02': + return "object/tangible/crafting/station/shared_generic_generic_tool.iff" + + if name == 'item_roadmap_belt_trader_01_02': + return "object/tangible/wearables/armor/zam/shared_armor_zam_wesell_belt.iff" + return \ No newline at end of file diff --git a/scripts/roadmap/trader_0d.py b/scripts/roadmap/trader_0d.py index 2846dee7..7ac4a0d7 100644 --- a/scripts/roadmap/trader_0d.py +++ b/scripts/roadmap/trader_0d.py @@ -23,3 +23,32 @@ def getHealth(): def getAction(): return 75 + +def getRewards(name): + if name == 'item_npe_gen_craft_tool_trader_03_01': + return "object/tangible/crafting/base/shared_generic_base_tool.iff" + + if name == 'item_trader_backpack_01_02': + return "object/tangible/wearables/backpack/shared_backpack_s04.iff" + + if name == 'weapon_knife_trader_roadmap_01_02': + return "object/weapon/melee/knife/shared_knife_dagger.iff" + + if name == 'item_trader_ring_01_02': + return "object/tangible/wearables/ring/shared_ring_s02.iff" + + if name == 'item_trader_roadmap_jumpsuit_02_02': + return "object/tangible/wearables/bodysuit/shared_bodysuit_s01.iff" + + if name == 'weapon_pistol_trader_roadmap_01_02': + return "object/weapon/ranged/pistol/shared_pistol_scout_blaster.iff" + + if name == 'item_trader_pendant_01_02': + return "object/tangible/wearables/necklace/shared_necklace_s07.iff" + + if name == 'item_trader_clicky_01_02': + return "object/tangible/crafting/station/shared_generic_generic_tool.iff" + + if name == 'item_roadmap_belt_trader_01_02': + return "object/tangible/wearables/armor/zam/shared_armor_zam_wesell_belt.iff" + return \ No newline at end of file diff --git a/scripts/skillMods/absorption_bleeding.py b/scripts/skillMods/absorption_bleeding.py index ee7769e2..b5c5e291 100644 --- a/scripts/skillMods/absorption_bleeding.py +++ b/scripts/skillMods/absorption_bleeding.py @@ -1,10 +1,8 @@ import sys -def add(core, actor, name, base): - actor.addSkillMod(name, base) +def add(core, actor, skillMod, value): return - -def deduct(core, actor, name, base): - actor.deductSkillMod(name, base) + +def deduct(core, actor, skillMod, value): return \ No newline at end of file diff --git a/scripts/skillMods/absorption_disease.py b/scripts/skillMods/absorption_disease.py index ee7769e2..b5c5e291 100644 --- a/scripts/skillMods/absorption_disease.py +++ b/scripts/skillMods/absorption_disease.py @@ -1,10 +1,8 @@ import sys -def add(core, actor, name, base): - actor.addSkillMod(name, base) +def add(core, actor, skillMod, value): return - -def deduct(core, actor, name, base): - actor.deductSkillMod(name, base) + +def deduct(core, actor, skillMod, value): return \ No newline at end of file diff --git a/scripts/skillMods/absorption_fire.py b/scripts/skillMods/absorption_fire.py index ee7769e2..b5c5e291 100644 --- a/scripts/skillMods/absorption_fire.py +++ b/scripts/skillMods/absorption_fire.py @@ -1,10 +1,8 @@ import sys -def add(core, actor, name, base): - actor.addSkillMod(name, base) +def add(core, actor, skillMod, value): return - -def deduct(core, actor, name, base): - actor.deductSkillMod(name, base) + +def deduct(core, actor, skillMod, value): return \ No newline at end of file diff --git a/scripts/skillMods/absorption_poison.py b/scripts/skillMods/absorption_poison.py index ee7769e2..b5c5e291 100644 --- a/scripts/skillMods/absorption_poison.py +++ b/scripts/skillMods/absorption_poison.py @@ -1,10 +1,8 @@ import sys -def add(core, actor, name, base): - actor.addSkillMod(name, base) +def add(core, actor, skillMod, value): return - -def deduct(core, actor, name, base): - actor.deductSkillMod(name, base) + +def deduct(core, actor, skillMod, value): return \ No newline at end of file diff --git a/scripts/skillMods/accuracy_modifier.py b/scripts/skillMods/accuracy_modifier.py index ee7769e2..b5c5e291 100644 --- a/scripts/skillMods/accuracy_modifier.py +++ b/scripts/skillMods/accuracy_modifier.py @@ -1,10 +1,8 @@ import sys -def add(core, actor, name, base): - actor.addSkillMod(name, base) +def add(core, actor, skillMod, value): return - -def deduct(core, actor, name, base): - actor.deductSkillMod(name, base) + +def deduct(core, actor, skillMod, value): return \ No newline at end of file diff --git a/scripts/skillMods/acid.py b/scripts/skillMods/acid.py index ee7769e2..b5c5e291 100644 --- a/scripts/skillMods/acid.py +++ b/scripts/skillMods/acid.py @@ -1,10 +1,8 @@ import sys -def add(core, actor, name, base): - actor.addSkillMod(name, base) +def add(core, actor, skillMod, value): return - -def deduct(core, actor, name, base): - actor.deductSkillMod(name, base) + +def deduct(core, actor, skillMod, value): return \ No newline at end of file diff --git a/scripts/skillMods/action.py b/scripts/skillMods/action.py new file mode 100644 index 00000000..b5c5e291 --- /dev/null +++ b/scripts/skillMods/action.py @@ -0,0 +1,8 @@ +import sys + +def add(core, actor, skillMod, value): + return + +def deduct(core, actor, skillMod, value): + return + \ No newline at end of file diff --git a/scripts/skillMods/actionPercent.py b/scripts/skillMods/actionPercent.py new file mode 100644 index 00000000..a2fabea0 --- /dev/null +++ b/scripts/skillMods/actionPercent.py @@ -0,0 +1,12 @@ +import sys + +# Temporarily disabled until the skillmod calculation system is refactored + +def add(core, actor, skillMod, divisor): + #actor.setMaxAction(actor.getMaxAction() + int((float(actor.getMaxAction()) * (float(skillMod.getBase()) / float(100))))) + return + +def deduct(core, actor, skillMod, divisor): + #actor.setMaxAction(actor.getMaxAction() - int((float(actor.getMaxAction()) * (float(skillMod.getBase()) / float(100))))) + return + \ No newline at end of file diff --git a/scripts/skillMods/action_burn.py b/scripts/skillMods/action_burn.py index ee7769e2..b5c5e291 100644 --- a/scripts/skillMods/action_burn.py +++ b/scripts/skillMods/action_burn.py @@ -1,10 +1,8 @@ import sys -def add(core, actor, name, base): - actor.addSkillMod(name, base) +def add(core, actor, skillMod, value): return - -def deduct(core, actor, name, base): - actor.deductSkillMod(name, base) + +def deduct(core, actor, skillMod, value): return \ No newline at end of file diff --git a/scripts/skillMods/advanced_assembly.py b/scripts/skillMods/advanced_assembly.py index ee7769e2..6cd11173 100644 --- a/scripts/skillMods/advanced_assembly.py +++ b/scripts/skillMods/advanced_assembly.py @@ -1,10 +1,8 @@ import sys -def add(core, actor, name, base): - actor.addSkillMod(name, base) +def add(core, actor, skillMod, divisor): return - -def deduct(core, actor, name, base): - actor.deductSkillMod(name, base) + +def deduct(core, actor, skillMod, divisor): return \ No newline at end of file diff --git a/scripts/skillMods/advanced_ship_experimentation.py b/scripts/skillMods/advanced_ship_experimentation.py index ee7769e2..b5c5e291 100644 --- a/scripts/skillMods/advanced_ship_experimentation.py +++ b/scripts/skillMods/advanced_ship_experimentation.py @@ -1,10 +1,8 @@ import sys -def add(core, actor, name, base): - actor.addSkillMod(name, base) +def add(core, actor, skillMod, value): return - -def deduct(core, actor, name, base): - actor.deductSkillMod(name, base) + +def deduct(core, actor, skillMod, value): return \ No newline at end of file diff --git a/scripts/skillMods/agility.py b/scripts/skillMods/agility.py index 80b31400..7978281a 100644 --- a/scripts/skillMods/agility.py +++ b/scripts/skillMods/agility.py @@ -1,16 +1,14 @@ import sys -def add(core, actor, name, base): - actor.addSkillMod(name, base) - actor.addSkillMod('display_only_dodge', base) - actor.addSkillMod('display_only_parry', base / 2) - actor.addSkillMod('display_only_evasion', base) +def add(core, actor, skillMod, divisor): + core.skillModService.addSkillMod(actor, 'display_only_dodge', skillMod.getBase()) + core.skillModService.addSkillMod(actor, 'display_only_parry', skillMod.getBase() / 2) + core.skillModService.addSkillMod(actor, 'display_only_evasion', skillMod.getBase()) + return + +def deduct(core, actor, skillMod, divisor): + core.skillModService.deductSkillMod(actor, 'display_only_dodge', skillMod.getBase()) + core.skillModService.deductSkillMod(actor, 'display_only_parry', skillMod.getBase() / 2) + core.skillModService.deductSkillMod(actor, 'display_only_evasion', skillMod.getBase()) return -def deduct(core, actor, name, base): - actor.deductSkillMod(name, base) - actor.deductSkillMod('display_only_dodge', base) - actor.deductSkillMod('display_only_parry', base / 2) - actor.deductSkillMod('display_only_evasion', base) - return - \ No newline at end of file diff --git a/scripts/skillMods/agility_modified.py b/scripts/skillMods/agility_modified.py index 80b31400..7978281a 100644 --- a/scripts/skillMods/agility_modified.py +++ b/scripts/skillMods/agility_modified.py @@ -1,16 +1,14 @@ import sys -def add(core, actor, name, base): - actor.addSkillMod(name, base) - actor.addSkillMod('display_only_dodge', base) - actor.addSkillMod('display_only_parry', base / 2) - actor.addSkillMod('display_only_evasion', base) +def add(core, actor, skillMod, divisor): + core.skillModService.addSkillMod(actor, 'display_only_dodge', skillMod.getBase()) + core.skillModService.addSkillMod(actor, 'display_only_parry', skillMod.getBase() / 2) + core.skillModService.addSkillMod(actor, 'display_only_evasion', skillMod.getBase()) + return + +def deduct(core, actor, skillMod, divisor): + core.skillModService.deductSkillMod(actor, 'display_only_dodge', skillMod.getBase()) + core.skillModService.deductSkillMod(actor, 'display_only_parry', skillMod.getBase() / 2) + core.skillModService.deductSkillMod(actor, 'display_only_evasion', skillMod.getBase()) return -def deduct(core, actor, name, base): - actor.deductSkillMod(name, base) - actor.deductSkillMod('display_only_dodge', base) - actor.deductSkillMod('display_only_parry', base / 2) - actor.deductSkillMod('display_only_evasion', base) - return - \ No newline at end of file diff --git a/scripts/skillMods/area_damage_resist_full_percentage.py b/scripts/skillMods/area_damage_resist_full_percentage.py index ee7769e2..b5c5e291 100644 --- a/scripts/skillMods/area_damage_resist_full_percentage.py +++ b/scripts/skillMods/area_damage_resist_full_percentage.py @@ -1,10 +1,8 @@ import sys -def add(core, actor, name, base): - actor.addSkillMod(name, base) +def add(core, actor, skillMod, value): return - -def deduct(core, actor, name, base): - actor.deductSkillMod(name, base) + +def deduct(core, actor, skillMod, value): return \ No newline at end of file diff --git a/scripts/skillMods/armor_assembly.py b/scripts/skillMods/armor_assembly.py index ee7769e2..b5c5e291 100644 --- a/scripts/skillMods/armor_assembly.py +++ b/scripts/skillMods/armor_assembly.py @@ -1,10 +1,8 @@ import sys -def add(core, actor, name, base): - actor.addSkillMod(name, base) +def add(core, actor, skillMod, value): return - -def deduct(core, actor, name, base): - actor.deductSkillMod(name, base) + +def deduct(core, actor, skillMod, value): return \ No newline at end of file diff --git a/scripts/skillMods/armor_customization.py b/scripts/skillMods/armor_customization.py index ee7769e2..b5c5e291 100644 --- a/scripts/skillMods/armor_customization.py +++ b/scripts/skillMods/armor_customization.py @@ -1,10 +1,8 @@ import sys -def add(core, actor, name, base): - actor.addSkillMod(name, base) +def add(core, actor, skillMod, value): return - -def deduct(core, actor, name, base): - actor.deductSkillMod(name, base) + +def deduct(core, actor, skillMod, value): return \ No newline at end of file diff --git a/scripts/skillMods/armor_experimentation.py b/scripts/skillMods/armor_experimentation.py index ee7769e2..b5c5e291 100644 --- a/scripts/skillMods/armor_experimentation.py +++ b/scripts/skillMods/armor_experimentation.py @@ -1,10 +1,8 @@ import sys -def add(core, actor, name, base): - actor.addSkillMod(name, base) +def add(core, actor, skillMod, value): return - -def deduct(core, actor, name, base): - actor.deductSkillMod(name, base) + +def deduct(core, actor, skillMod, value): return \ No newline at end of file diff --git a/scripts/skillMods/bh_dire_root.py b/scripts/skillMods/bh_dire_root.py index ee7769e2..b5c5e291 100644 --- a/scripts/skillMods/bh_dire_root.py +++ b/scripts/skillMods/bh_dire_root.py @@ -1,10 +1,8 @@ import sys -def add(core, actor, name, base): - actor.addSkillMod(name, base) +def add(core, actor, skillMod, value): return - -def deduct(core, actor, name, base): - actor.deductSkillMod(name, base) + +def deduct(core, actor, skillMod, value): return \ No newline at end of file diff --git a/scripts/skillMods/bh_dire_snare.py b/scripts/skillMods/bh_dire_snare.py index ee7769e2..b5c5e291 100644 --- a/scripts/skillMods/bh_dire_snare.py +++ b/scripts/skillMods/bh_dire_snare.py @@ -1,10 +1,8 @@ import sys -def add(core, actor, name, base): - actor.addSkillMod(name, base) +def add(core, actor, skillMod, value): return - -def deduct(core, actor, name, base): - actor.deductSkillMod(name, base) + +def deduct(core, actor, skillMod, value): return \ No newline at end of file diff --git a/scripts/skillMods/bm_creature_knowledge.py b/scripts/skillMods/bm_creature_knowledge.py index ee7769e2..b5c5e291 100644 --- a/scripts/skillMods/bm_creature_knowledge.py +++ b/scripts/skillMods/bm_creature_knowledge.py @@ -1,10 +1,8 @@ import sys -def add(core, actor, name, base): - actor.addSkillMod(name, base) +def add(core, actor, skillMod, value): return - -def deduct(core, actor, name, base): - actor.deductSkillMod(name, base) + +def deduct(core, actor, skillMod, value): return \ No newline at end of file diff --git a/scripts/skillMods/bm_incubator_dps_armor.py b/scripts/skillMods/bm_incubator_dps_armor.py index ee7769e2..b5c5e291 100644 --- a/scripts/skillMods/bm_incubator_dps_armor.py +++ b/scripts/skillMods/bm_incubator_dps_armor.py @@ -1,10 +1,8 @@ import sys -def add(core, actor, name, base): - actor.addSkillMod(name, base) +def add(core, actor, skillMod, value): return - -def deduct(core, actor, name, base): - actor.deductSkillMod(name, base) + +def deduct(core, actor, skillMod, value): return \ No newline at end of file diff --git a/scripts/skillMods/bm_mutation_chance_increase.py b/scripts/skillMods/bm_mutation_chance_increase.py index ee7769e2..b5c5e291 100644 --- a/scripts/skillMods/bm_mutation_chance_increase.py +++ b/scripts/skillMods/bm_mutation_chance_increase.py @@ -1,10 +1,8 @@ import sys -def add(core, actor, name, base): - actor.addSkillMod(name, base) +def add(core, actor, skillMod, value): return - -def deduct(core, actor, name, base): - actor.deductSkillMod(name, base) + +def deduct(core, actor, skillMod, value): return \ No newline at end of file diff --git a/scripts/skillMods/bm_xp_mod_boost.py b/scripts/skillMods/bm_xp_mod_boost.py index ee7769e2..b5c5e291 100644 --- a/scripts/skillMods/bm_xp_mod_boost.py +++ b/scripts/skillMods/bm_xp_mod_boost.py @@ -1,10 +1,8 @@ import sys -def add(core, actor, name, base): - actor.addSkillMod(name, base) +def add(core, actor, skillMod, value): return - -def deduct(core, actor, name, base): - actor.deductSkillMod(name, base) + +def deduct(core, actor, skillMod, value): return \ No newline at end of file diff --git a/scripts/skillMods/booster_assembly.py b/scripts/skillMods/booster_assembly.py index ee7769e2..b5c5e291 100644 --- a/scripts/skillMods/booster_assembly.py +++ b/scripts/skillMods/booster_assembly.py @@ -1,10 +1,8 @@ import sys -def add(core, actor, name, base): - actor.addSkillMod(name, base) +def add(core, actor, skillMod, value): return - -def deduct(core, actor, name, base): - actor.deductSkillMod(name, base) + +def deduct(core, actor, skillMod, value): return \ No newline at end of file diff --git a/scripts/skillMods/booster_experimentation.py b/scripts/skillMods/booster_experimentation.py index ee7769e2..b5c5e291 100644 --- a/scripts/skillMods/booster_experimentation.py +++ b/scripts/skillMods/booster_experimentation.py @@ -1,10 +1,8 @@ import sys -def add(core, actor, name, base): - actor.addSkillMod(name, base) +def add(core, actor, skillMod, value): return - -def deduct(core, actor, name, base): - actor.deductSkillMod(name, base) + +def deduct(core, actor, skillMod, value): return \ No newline at end of file diff --git a/scripts/skillMods/bounty_hunter.py b/scripts/skillMods/bounty_hunter.py index ee7769e2..6cd11173 100644 --- a/scripts/skillMods/bounty_hunter.py +++ b/scripts/skillMods/bounty_hunter.py @@ -1,10 +1,8 @@ import sys -def add(core, actor, name, base): - actor.addSkillMod(name, base) +def add(core, actor, skillMod, divisor): return - -def deduct(core, actor, name, base): - actor.deductSkillMod(name, base) + +def deduct(core, actor, skillMod, divisor): return \ No newline at end of file diff --git a/scripts/skillMods/bounty_mission_level.py b/scripts/skillMods/bounty_mission_level.py index ee7769e2..b5c5e291 100644 --- a/scripts/skillMods/bounty_mission_level.py +++ b/scripts/skillMods/bounty_mission_level.py @@ -1,10 +1,8 @@ import sys -def add(core, actor, name, base): - actor.addSkillMod(name, base) +def add(core, actor, skillMod, value): return - -def deduct(core, actor, name, base): - actor.deductSkillMod(name, base) + +def deduct(core, actor, skillMod, value): return \ No newline at end of file diff --git a/scripts/skillMods/camouflage.py b/scripts/skillMods/camouflage.py index ee7769e2..b5c5e291 100644 --- a/scripts/skillMods/camouflage.py +++ b/scripts/skillMods/camouflage.py @@ -1,10 +1,8 @@ import sys -def add(core, actor, name, base): - actor.addSkillMod(name, base) +def add(core, actor, skillMod, value): return - -def deduct(core, actor, name, base): - actor.deductSkillMod(name, base) + +def deduct(core, actor, skillMod, value): return \ No newline at end of file diff --git a/scripts/skillMods/chassis_assembly.py b/scripts/skillMods/chassis_assembly.py index ee7769e2..b5c5e291 100644 --- a/scripts/skillMods/chassis_assembly.py +++ b/scripts/skillMods/chassis_assembly.py @@ -1,10 +1,8 @@ import sys -def add(core, actor, name, base): - actor.addSkillMod(name, base) +def add(core, actor, skillMod, value): return - -def deduct(core, actor, name, base): - actor.deductSkillMod(name, base) + +def deduct(core, actor, skillMod, value): return \ No newline at end of file diff --git a/scripts/skillMods/chassis_experimentation.py b/scripts/skillMods/chassis_experimentation.py index ee7769e2..b5c5e291 100644 --- a/scripts/skillMods/chassis_experimentation.py +++ b/scripts/skillMods/chassis_experimentation.py @@ -1,10 +1,8 @@ import sys -def add(core, actor, name, base): - actor.addSkillMod(name, base) +def add(core, actor, skillMod, value): return - -def deduct(core, actor, name, base): - actor.deductSkillMod(name, base) + +def deduct(core, actor, skillMod, value): return \ No newline at end of file diff --git a/scripts/skillMods/clothing_assembly.py b/scripts/skillMods/clothing_assembly.py index ee7769e2..b5c5e291 100644 --- a/scripts/skillMods/clothing_assembly.py +++ b/scripts/skillMods/clothing_assembly.py @@ -1,10 +1,8 @@ import sys -def add(core, actor, name, base): - actor.addSkillMod(name, base) +def add(core, actor, skillMod, value): return - -def deduct(core, actor, name, base): - actor.deductSkillMod(name, base) + +def deduct(core, actor, skillMod, value): return \ No newline at end of file diff --git a/scripts/skillMods/clothing_customization.py b/scripts/skillMods/clothing_customization.py index ee7769e2..b5c5e291 100644 --- a/scripts/skillMods/clothing_customization.py +++ b/scripts/skillMods/clothing_customization.py @@ -1,10 +1,8 @@ import sys -def add(core, actor, name, base): - actor.addSkillMod(name, base) +def add(core, actor, skillMod, value): return - -def deduct(core, actor, name, base): - actor.deductSkillMod(name, base) + +def deduct(core, actor, skillMod, value): return \ No newline at end of file diff --git a/scripts/skillMods/clothing_experimentation.py b/scripts/skillMods/clothing_experimentation.py index ee7769e2..b5c5e291 100644 --- a/scripts/skillMods/clothing_experimentation.py +++ b/scripts/skillMods/clothing_experimentation.py @@ -1,10 +1,8 @@ import sys -def add(core, actor, name, base): - actor.addSkillMod(name, base) +def add(core, actor, skillMod, value): return - -def deduct(core, actor, name, base): - actor.deductSkillMod(name, base) + +def deduct(core, actor, skillMod, value): return \ No newline at end of file diff --git a/scripts/skillMods/cold.py b/scripts/skillMods/cold.py index ee7769e2..b5c5e291 100644 --- a/scripts/skillMods/cold.py +++ b/scripts/skillMods/cold.py @@ -1,10 +1,8 @@ import sys -def add(core, actor, name, base): - actor.addSkillMod(name, base) +def add(core, actor, skillMod, value): return - -def deduct(core, actor, name, base): - actor.deductSkillMod(name, base) + +def deduct(core, actor, skillMod, value): return \ No newline at end of file diff --git a/scripts/skillMods/combat_block_chance.py b/scripts/skillMods/combat_block_chance.py index ee7769e2..b5c5e291 100644 --- a/scripts/skillMods/combat_block_chance.py +++ b/scripts/skillMods/combat_block_chance.py @@ -1,10 +1,8 @@ import sys -def add(core, actor, name, base): - actor.addSkillMod(name, base) +def add(core, actor, skillMod, value): return - -def deduct(core, actor, name, base): - actor.deductSkillMod(name, base) + +def deduct(core, actor, skillMod, value): return \ No newline at end of file diff --git a/scripts/skillMods/combat_block_value.py b/scripts/skillMods/combat_block_value.py index ee7769e2..b5c5e291 100644 --- a/scripts/skillMods/combat_block_value.py +++ b/scripts/skillMods/combat_block_value.py @@ -1,10 +1,8 @@ import sys -def add(core, actor, name, base): - actor.addSkillMod(name, base) +def add(core, actor, skillMod, value): return - -def deduct(core, actor, name, base): - actor.deductSkillMod(name, base) + +def deduct(core, actor, skillMod, value): return \ No newline at end of file diff --git a/scripts/skillMods/combat_critical_hit_reduction.py b/scripts/skillMods/combat_critical_hit_reduction.py index ee7769e2..b5c5e291 100644 --- a/scripts/skillMods/combat_critical_hit_reduction.py +++ b/scripts/skillMods/combat_critical_hit_reduction.py @@ -1,10 +1,8 @@ import sys -def add(core, actor, name, base): - actor.addSkillMod(name, base) +def add(core, actor, skillMod, value): return - -def deduct(core, actor, name, base): - actor.deductSkillMod(name, base) + +def deduct(core, actor, skillMod, value): return \ No newline at end of file diff --git a/scripts/skillMods/combat_divide_damage_dealt.py b/scripts/skillMods/combat_divide_damage_dealt.py index ee7769e2..b5c5e291 100644 --- a/scripts/skillMods/combat_divide_damage_dealt.py +++ b/scripts/skillMods/combat_divide_damage_dealt.py @@ -1,10 +1,8 @@ import sys -def add(core, actor, name, base): - actor.addSkillMod(name, base) +def add(core, actor, skillMod, value): return - -def deduct(core, actor, name, base): - actor.deductSkillMod(name, base) + +def deduct(core, actor, skillMod, value): return \ No newline at end of file diff --git a/scripts/skillMods/combat_divide_damage_taken.py b/scripts/skillMods/combat_divide_damage_taken.py index 8d3e11e4..b5c5e291 100644 --- a/scripts/skillMods/combat_divide_damage_taken.py +++ b/scripts/skillMods/combat_divide_damage_taken.py @@ -1,9 +1,8 @@ import sys -def add(core, actor, name, base): - actor.addSkillMod(name, base) +def add(core, actor, skillMod, value): return - -def deduct(core, actor, name, base): - actor.deductSkillMod(name, base) + +def deduct(core, actor, skillMod, value): return + \ No newline at end of file diff --git a/scripts/skillMods/combat_dodge.py b/scripts/skillMods/combat_dodge.py index ee7769e2..b5c5e291 100644 --- a/scripts/skillMods/combat_dodge.py +++ b/scripts/skillMods/combat_dodge.py @@ -1,10 +1,8 @@ import sys -def add(core, actor, name, base): - actor.addSkillMod(name, base) +def add(core, actor, skillMod, value): return - -def deduct(core, actor, name, base): - actor.deductSkillMod(name, base) + +def deduct(core, actor, skillMod, value): return \ No newline at end of file diff --git a/scripts/skillMods/combat_evasion_chance.py b/scripts/skillMods/combat_evasion_chance.py index ee7769e2..b5c5e291 100644 --- a/scripts/skillMods/combat_evasion_chance.py +++ b/scripts/skillMods/combat_evasion_chance.py @@ -1,10 +1,8 @@ import sys -def add(core, actor, name, base): - actor.addSkillMod(name, base) +def add(core, actor, skillMod, value): return - -def deduct(core, actor, name, base): - actor.deductSkillMod(name, base) + +def deduct(core, actor, skillMod, value): return \ No newline at end of file diff --git a/scripts/skillMods/combat_evasion_value.py b/scripts/skillMods/combat_evasion_value.py index ee7769e2..b5c5e291 100644 --- a/scripts/skillMods/combat_evasion_value.py +++ b/scripts/skillMods/combat_evasion_value.py @@ -1,10 +1,8 @@ import sys -def add(core, actor, name, base): - actor.addSkillMod(name, base) +def add(core, actor, skillMod, value): return - -def deduct(core, actor, name, base): - actor.deductSkillMod(name, base) + +def deduct(core, actor, skillMod, value): return \ No newline at end of file diff --git a/scripts/skillMods/combat_parry.py b/scripts/skillMods/combat_parry.py index ee7769e2..b5c5e291 100644 --- a/scripts/skillMods/combat_parry.py +++ b/scripts/skillMods/combat_parry.py @@ -1,10 +1,8 @@ import sys -def add(core, actor, name, base): - actor.addSkillMod(name, base) +def add(core, actor, skillMod, value): return - -def deduct(core, actor, name, base): - actor.deductSkillMod(name, base) + +def deduct(core, actor, skillMod, value): return \ No newline at end of file diff --git a/scripts/skillMods/combat_slow.py b/scripts/skillMods/combat_slow.py index ee7769e2..b5c5e291 100644 --- a/scripts/skillMods/combat_slow.py +++ b/scripts/skillMods/combat_slow.py @@ -1,10 +1,8 @@ import sys -def add(core, actor, name, base): - actor.addSkillMod(name, base) +def add(core, actor, skillMod, value): return - -def deduct(core, actor, name, base): - actor.deductSkillMod(name, base) + +def deduct(core, actor, skillMod, value): return \ No newline at end of file diff --git a/scripts/skillMods/combat_strikethrough_chance.py b/scripts/skillMods/combat_strikethrough_chance.py index ee7769e2..b5c5e291 100644 --- a/scripts/skillMods/combat_strikethrough_chance.py +++ b/scripts/skillMods/combat_strikethrough_chance.py @@ -1,10 +1,8 @@ import sys -def add(core, actor, name, base): - actor.addSkillMod(name, base) +def add(core, actor, skillMod, value): return - -def deduct(core, actor, name, base): - actor.deductSkillMod(name, base) + +def deduct(core, actor, skillMod, value): return \ No newline at end of file diff --git a/scripts/skillMods/combat_strikethrough_value.py b/scripts/skillMods/combat_strikethrough_value.py index ee7769e2..b5c5e291 100644 --- a/scripts/skillMods/combat_strikethrough_value.py +++ b/scripts/skillMods/combat_strikethrough_value.py @@ -1,10 +1,8 @@ import sys -def add(core, actor, name, base): - actor.addSkillMod(name, base) +def add(core, actor, skillMod, value): return - -def deduct(core, actor, name, base): - actor.deductSkillMod(name, base) + +def deduct(core, actor, skillMod, value): return \ No newline at end of file diff --git a/scripts/skillMods/constitution.py b/scripts/skillMods/constitution.py index edf5e01c..299bf30d 100644 --- a/scripts/skillMods/constitution.py +++ b/scripts/skillMods/constitution.py @@ -1,14 +1,12 @@ import sys -def add(core, actor, name, base): - actor.addSkillMod(name, base) - actor.setMaxHealth(actor.getMaxHealth() + base * 8) - actor.setMaxAction(actor.getMaxAction() + base * 2) +def add(core, actor, skillMod, value): + actor.setMaxHealth(actor.getMaxHealth() + skillMod.getBase() * 8) + actor.setMaxAction(actor.getMaxAction() + skillMod.getBase() * 2) return - -def deduct(core, actor, name, base): - actor.deductSkillMod(name, base) - actor.setMaxHealth(actor.getMaxHealth() - base * 8) - actor.setMaxAction(actor.getMaxAction() - base * 2) + +def deduct(core, actor, skillMod, value): + actor.setMaxHealth(actor.getMaxHealth() - skillMod.getBase() * 8) + actor.setMaxAction(actor.getMaxAction() - skillMod.getBase() * 2) return - + \ No newline at end of file diff --git a/scripts/skillMods/constitution_modified.py b/scripts/skillMods/constitution_modified.py index edf5e01c..299bf30d 100644 --- a/scripts/skillMods/constitution_modified.py +++ b/scripts/skillMods/constitution_modified.py @@ -1,14 +1,12 @@ import sys -def add(core, actor, name, base): - actor.addSkillMod(name, base) - actor.setMaxHealth(actor.getMaxHealth() + base * 8) - actor.setMaxAction(actor.getMaxAction() + base * 2) +def add(core, actor, skillMod, value): + actor.setMaxHealth(actor.getMaxHealth() + skillMod.getBase() * 8) + actor.setMaxAction(actor.getMaxAction() + skillMod.getBase() * 2) return - -def deduct(core, actor, name, base): - actor.deductSkillMod(name, base) - actor.setMaxHealth(actor.getMaxHealth() - base * 8) - actor.setMaxAction(actor.getMaxAction() - base * 2) + +def deduct(core, actor, skillMod, value): + actor.setMaxHealth(actor.getMaxHealth() - skillMod.getBase() * 8) + actor.setMaxAction(actor.getMaxAction() - skillMod.getBase() * 2) return - + \ No newline at end of file diff --git a/scripts/skillMods/cooldown_percent_of_group_buff.py b/scripts/skillMods/cooldown_percent_of_group_buff.py index ee7769e2..b5c5e291 100644 --- a/scripts/skillMods/cooldown_percent_of_group_buff.py +++ b/scripts/skillMods/cooldown_percent_of_group_buff.py @@ -1,10 +1,8 @@ import sys -def add(core, actor, name, base): - actor.addSkillMod(name, base) +def add(core, actor, skillMod, value): return - -def deduct(core, actor, name, base): - actor.deductSkillMod(name, base) + +def deduct(core, actor, skillMod, value): return \ No newline at end of file diff --git a/scripts/skillMods/crafting_critical_success_bonus.py b/scripts/skillMods/crafting_critical_success_bonus.py index ee7769e2..b5c5e291 100644 --- a/scripts/skillMods/crafting_critical_success_bonus.py +++ b/scripts/skillMods/crafting_critical_success_bonus.py @@ -1,10 +1,8 @@ import sys -def add(core, actor, name, base): - actor.addSkillMod(name, base) +def add(core, actor, skillMod, value): return - -def deduct(core, actor, name, base): - actor.deductSkillMod(name, base) + +def deduct(core, actor, skillMod, value): return \ No newline at end of file diff --git a/scripts/skillMods/creature_harvesting.py b/scripts/skillMods/creature_harvesting.py index ee7769e2..b5c5e291 100644 --- a/scripts/skillMods/creature_harvesting.py +++ b/scripts/skillMods/creature_harvesting.py @@ -1,10 +1,8 @@ import sys -def add(core, actor, name, base): - actor.addSkillMod(name, base) +def add(core, actor, skillMod, value): return - -def deduct(core, actor, name, base): - actor.deductSkillMod(name, base) + +def deduct(core, actor, skillMod, value): return \ No newline at end of file diff --git a/scripts/skillMods/critical_damage_vulnerability.py b/scripts/skillMods/critical_damage_vulnerability.py index ee7769e2..b5c5e291 100644 --- a/scripts/skillMods/critical_damage_vulnerability.py +++ b/scripts/skillMods/critical_damage_vulnerability.py @@ -1,10 +1,8 @@ import sys -def add(core, actor, name, base): - actor.addSkillMod(name, base) +def add(core, actor, skillMod, value): return - -def deduct(core, actor, name, base): - actor.deductSkillMod(name, base) + +def deduct(core, actor, skillMod, value): return \ No newline at end of file diff --git a/scripts/skillMods/critical_hit_vulnerable.py b/scripts/skillMods/critical_hit_vulnerable.py index ee7769e2..b5c5e291 100644 --- a/scripts/skillMods/critical_hit_vulnerable.py +++ b/scripts/skillMods/critical_hit_vulnerable.py @@ -1,10 +1,8 @@ import sys -def add(core, actor, name, base): - actor.addSkillMod(name, base) +def add(core, actor, skillMod, value): return - -def deduct(core, actor, name, base): - actor.deductSkillMod(name, base) + +def deduct(core, actor, skillMod, value): return \ No newline at end of file diff --git a/scripts/skillMods/cybernetic_assembly.py b/scripts/skillMods/cybernetic_assembly.py index ee7769e2..b5c5e291 100644 --- a/scripts/skillMods/cybernetic_assembly.py +++ b/scripts/skillMods/cybernetic_assembly.py @@ -1,10 +1,8 @@ import sys -def add(core, actor, name, base): - actor.addSkillMod(name, base) +def add(core, actor, skillMod, value): return - -def deduct(core, actor, name, base): - actor.deductSkillMod(name, base) + +def deduct(core, actor, skillMod, value): return \ No newline at end of file diff --git a/scripts/skillMods/cybernetic_customization.py b/scripts/skillMods/cybernetic_customization.py index ee7769e2..b5c5e291 100644 --- a/scripts/skillMods/cybernetic_customization.py +++ b/scripts/skillMods/cybernetic_customization.py @@ -1,10 +1,8 @@ import sys -def add(core, actor, name, base): - actor.addSkillMod(name, base) +def add(core, actor, skillMod, value): return - -def deduct(core, actor, name, base): - actor.deductSkillMod(name, base) + +def deduct(core, actor, skillMod, value): return \ No newline at end of file diff --git a/scripts/skillMods/cybernetic_experimentation.py b/scripts/skillMods/cybernetic_experimentation.py index ee7769e2..b5c5e291 100644 --- a/scripts/skillMods/cybernetic_experimentation.py +++ b/scripts/skillMods/cybernetic_experimentation.py @@ -1,10 +1,8 @@ import sys -def add(core, actor, name, base): - actor.addSkillMod(name, base) +def add(core, actor, skillMod, value): return - -def deduct(core, actor, name, base): - actor.deductSkillMod(name, base) + +def deduct(core, actor, skillMod, value): return \ No newline at end of file diff --git a/scripts/skillMods/cybernetic_psychosis_resistance.py b/scripts/skillMods/cybernetic_psychosis_resistance.py index ee7769e2..b5c5e291 100644 --- a/scripts/skillMods/cybernetic_psychosis_resistance.py +++ b/scripts/skillMods/cybernetic_psychosis_resistance.py @@ -1,10 +1,8 @@ import sys -def add(core, actor, name, base): - actor.addSkillMod(name, base) +def add(core, actor, skillMod, value): return - -def deduct(core, actor, name, base): - actor.deductSkillMod(name, base) + +def deduct(core, actor, skillMod, value): return \ No newline at end of file diff --git a/scripts/skillMods/damage_decrease_percentage.py b/scripts/skillMods/damage_decrease_percentage.py index ee7769e2..b5c5e291 100644 --- a/scripts/skillMods/damage_decrease_percentage.py +++ b/scripts/skillMods/damage_decrease_percentage.py @@ -1,10 +1,8 @@ import sys -def add(core, actor, name, base): - actor.addSkillMod(name, base) +def add(core, actor, skillMod, value): return - -def deduct(core, actor, name, base): - actor.deductSkillMod(name, base) + +def deduct(core, actor, skillMod, value): return \ No newline at end of file diff --git a/scripts/skillMods/debuff_purge.py b/scripts/skillMods/debuff_purge.py index f198037b..b5c5e291 100644 --- a/scripts/skillMods/debuff_purge.py +++ b/scripts/skillMods/debuff_purge.py @@ -1,9 +1,8 @@ import sys -def add(core, actor, name, base): - actor.addSkillMod(name, base) +def add(core, actor, skillMod, value): return - -def deduct(core, actor, name, base): - actor.deductSkillMod(name, base) - return \ No newline at end of file + +def deduct(core, actor, skillMod, value): + return + \ No newline at end of file diff --git a/scripts/skillMods/defense_reverse.py b/scripts/skillMods/defense_reverse.py index ee7769e2..b5c5e291 100644 --- a/scripts/skillMods/defense_reverse.py +++ b/scripts/skillMods/defense_reverse.py @@ -1,10 +1,8 @@ import sys -def add(core, actor, name, base): - actor.addSkillMod(name, base) +def add(core, actor, skillMod, value): return - -def deduct(core, actor, name, base): - actor.deductSkillMod(name, base) + +def deduct(core, actor, skillMod, value): return \ No newline at end of file diff --git a/scripts/skillMods/detect_hidden.py b/scripts/skillMods/detect_hidden.py index ee7769e2..b5c5e291 100644 --- a/scripts/skillMods/detect_hidden.py +++ b/scripts/skillMods/detect_hidden.py @@ -1,10 +1,8 @@ import sys -def add(core, actor, name, base): - actor.addSkillMod(name, base) +def add(core, actor, skillMod, value): return - -def deduct(core, actor, name, base): - actor.deductSkillMod(name, base) + +def deduct(core, actor, skillMod, value): return \ No newline at end of file diff --git a/scripts/skillMods/display_only_block.py b/scripts/skillMods/display_only_block.py index ee7769e2..b5c5e291 100644 --- a/scripts/skillMods/display_only_block.py +++ b/scripts/skillMods/display_only_block.py @@ -1,10 +1,8 @@ import sys -def add(core, actor, name, base): - actor.addSkillMod(name, base) +def add(core, actor, skillMod, value): return - -def deduct(core, actor, name, base): - actor.deductSkillMod(name, base) + +def deduct(core, actor, skillMod, value): return \ No newline at end of file diff --git a/scripts/skillMods/display_only_critical.py b/scripts/skillMods/display_only_critical.py index ee7769e2..b5c5e291 100644 --- a/scripts/skillMods/display_only_critical.py +++ b/scripts/skillMods/display_only_critical.py @@ -1,10 +1,8 @@ import sys -def add(core, actor, name, base): - actor.addSkillMod(name, base) +def add(core, actor, skillMod, value): return - -def deduct(core, actor, name, base): - actor.deductSkillMod(name, base) + +def deduct(core, actor, skillMod, value): return \ No newline at end of file diff --git a/scripts/skillMods/display_only_dodge.py b/scripts/skillMods/display_only_dodge.py index ee7769e2..b5c5e291 100644 --- a/scripts/skillMods/display_only_dodge.py +++ b/scripts/skillMods/display_only_dodge.py @@ -1,10 +1,8 @@ import sys -def add(core, actor, name, base): - actor.addSkillMod(name, base) +def add(core, actor, skillMod, value): return - -def deduct(core, actor, name, base): - actor.deductSkillMod(name, base) + +def deduct(core, actor, skillMod, value): return \ No newline at end of file diff --git a/scripts/skillMods/display_only_evasion.py b/scripts/skillMods/display_only_evasion.py index ee7769e2..b5c5e291 100644 --- a/scripts/skillMods/display_only_evasion.py +++ b/scripts/skillMods/display_only_evasion.py @@ -1,10 +1,8 @@ import sys -def add(core, actor, name, base): - actor.addSkillMod(name, base) +def add(core, actor, skillMod, value): return - -def deduct(core, actor, name, base): - actor.deductSkillMod(name, base) + +def deduct(core, actor, skillMod, value): return \ No newline at end of file diff --git a/scripts/skillMods/display_only_expertise_critical_hit_pvp_reduction.py b/scripts/skillMods/display_only_expertise_critical_hit_pvp_reduction.py index ee7769e2..b5c5e291 100644 --- a/scripts/skillMods/display_only_expertise_critical_hit_pvp_reduction.py +++ b/scripts/skillMods/display_only_expertise_critical_hit_pvp_reduction.py @@ -1,10 +1,8 @@ import sys -def add(core, actor, name, base): - actor.addSkillMod(name, base) +def add(core, actor, skillMod, value): return - -def deduct(core, actor, name, base): - actor.deductSkillMod(name, base) + +def deduct(core, actor, skillMod, value): return \ No newline at end of file diff --git a/scripts/skillMods/display_only_expertise_critical_hit_reduction.py b/scripts/skillMods/display_only_expertise_critical_hit_reduction.py index ee7769e2..b5c5e291 100644 --- a/scripts/skillMods/display_only_expertise_critical_hit_reduction.py +++ b/scripts/skillMods/display_only_expertise_critical_hit_reduction.py @@ -1,10 +1,8 @@ import sys -def add(core, actor, name, base): - actor.addSkillMod(name, base) +def add(core, actor, skillMod, value): return - -def deduct(core, actor, name, base): - actor.deductSkillMod(name, base) + +def deduct(core, actor, skillMod, value): return \ No newline at end of file diff --git a/scripts/skillMods/display_only_glancing_blow.py b/scripts/skillMods/display_only_glancing_blow.py index ee7769e2..b5c5e291 100644 --- a/scripts/skillMods/display_only_glancing_blow.py +++ b/scripts/skillMods/display_only_glancing_blow.py @@ -1,10 +1,8 @@ import sys -def add(core, actor, name, base): - actor.addSkillMod(name, base) +def add(core, actor, skillMod, value): return - -def deduct(core, actor, name, base): - actor.deductSkillMod(name, base) + +def deduct(core, actor, skillMod, value): return \ No newline at end of file diff --git a/scripts/skillMods/display_only_opp_block_reduction.py b/scripts/skillMods/display_only_opp_block_reduction.py index ee7769e2..b5c5e291 100644 --- a/scripts/skillMods/display_only_opp_block_reduction.py +++ b/scripts/skillMods/display_only_opp_block_reduction.py @@ -1,10 +1,8 @@ import sys -def add(core, actor, name, base): - actor.addSkillMod(name, base) +def add(core, actor, skillMod, value): return - -def deduct(core, actor, name, base): - actor.deductSkillMod(name, base) + +def deduct(core, actor, skillMod, value): return \ No newline at end of file diff --git a/scripts/skillMods/display_only_opp_dodge_reduction.py b/scripts/skillMods/display_only_opp_dodge_reduction.py index ee7769e2..b5c5e291 100644 --- a/scripts/skillMods/display_only_opp_dodge_reduction.py +++ b/scripts/skillMods/display_only_opp_dodge_reduction.py @@ -1,10 +1,8 @@ import sys -def add(core, actor, name, base): - actor.addSkillMod(name, base) +def add(core, actor, skillMod, value): return - -def deduct(core, actor, name, base): - actor.deductSkillMod(name, base) + +def deduct(core, actor, skillMod, value): return \ No newline at end of file diff --git a/scripts/skillMods/display_only_parry.py b/scripts/skillMods/display_only_parry.py index ee7769e2..b5c5e291 100644 --- a/scripts/skillMods/display_only_parry.py +++ b/scripts/skillMods/display_only_parry.py @@ -1,10 +1,8 @@ import sys -def add(core, actor, name, base): - actor.addSkillMod(name, base) +def add(core, actor, skillMod, value): return - -def deduct(core, actor, name, base): - actor.deductSkillMod(name, base) + +def deduct(core, actor, skillMod, value): return \ No newline at end of file diff --git a/scripts/skillMods/display_only_parry_reduction.py b/scripts/skillMods/display_only_parry_reduction.py index ee7769e2..b5c5e291 100644 --- a/scripts/skillMods/display_only_parry_reduction.py +++ b/scripts/skillMods/display_only_parry_reduction.py @@ -1,10 +1,8 @@ import sys -def add(core, actor, name, base): - actor.addSkillMod(name, base) +def add(core, actor, skillMod, value): return - -def deduct(core, actor, name, base): - actor.deductSkillMod(name, base) + +def deduct(core, actor, skillMod, value): return \ No newline at end of file diff --git a/scripts/skillMods/display_only_strikethrough.py b/scripts/skillMods/display_only_strikethrough.py index ee7769e2..b5c5e291 100644 --- a/scripts/skillMods/display_only_strikethrough.py +++ b/scripts/skillMods/display_only_strikethrough.py @@ -1,10 +1,8 @@ import sys -def add(core, actor, name, base): - actor.addSkillMod(name, base) +def add(core, actor, skillMod, value): return - -def deduct(core, actor, name, base): - actor.deductSkillMod(name, base) + +def deduct(core, actor, skillMod, value): return \ No newline at end of file diff --git a/scripts/skillMods/display_only_tohit.py b/scripts/skillMods/display_only_tohit.py index ee7769e2..b5c5e291 100644 --- a/scripts/skillMods/display_only_tohit.py +++ b/scripts/skillMods/display_only_tohit.py @@ -1,10 +1,8 @@ import sys -def add(core, actor, name, base): - actor.addSkillMod(name, base) +def add(core, actor, skillMod, value): return - -def deduct(core, actor, name, base): - actor.deductSkillMod(name, base) + +def deduct(core, actor, skillMod, value): return \ No newline at end of file diff --git a/scripts/skillMods/dot_bleed.py b/scripts/skillMods/dot_bleed.py index f198037b..b5c5e291 100644 --- a/scripts/skillMods/dot_bleed.py +++ b/scripts/skillMods/dot_bleed.py @@ -1,9 +1,8 @@ import sys -def add(core, actor, name, base): - actor.addSkillMod(name, base) +def add(core, actor, skillMod, value): return - -def deduct(core, actor, name, base): - actor.deductSkillMod(name, base) - return \ No newline at end of file + +def deduct(core, actor, skillMod, value): + return + \ No newline at end of file diff --git a/scripts/skillMods/dot_divisor_all.py b/scripts/skillMods/dot_divisor_all.py index f198037b..b5c5e291 100644 --- a/scripts/skillMods/dot_divisor_all.py +++ b/scripts/skillMods/dot_divisor_all.py @@ -1,9 +1,8 @@ import sys -def add(core, actor, name, base): - actor.addSkillMod(name, base) +def add(core, actor, skillMod, value): return - -def deduct(core, actor, name, base): - actor.deductSkillMod(name, base) - return \ No newline at end of file + +def deduct(core, actor, skillMod, value): + return + \ No newline at end of file diff --git a/scripts/skillMods/dot_fire.py b/scripts/skillMods/dot_fire.py index ee7769e2..b5c5e291 100644 --- a/scripts/skillMods/dot_fire.py +++ b/scripts/skillMods/dot_fire.py @@ -1,10 +1,8 @@ import sys -def add(core, actor, name, base): - actor.addSkillMod(name, base) +def add(core, actor, skillMod, value): return - -def deduct(core, actor, name, base): - actor.deductSkillMod(name, base) + +def deduct(core, actor, skillMod, value): return \ No newline at end of file diff --git a/scripts/skillMods/dot_poison.py b/scripts/skillMods/dot_poison.py index f198037b..b5c5e291 100644 --- a/scripts/skillMods/dot_poison.py +++ b/scripts/skillMods/dot_poison.py @@ -1,9 +1,8 @@ import sys -def add(core, actor, name, base): - actor.addSkillMod(name, base) +def add(core, actor, skillMod, value): return - -def deduct(core, actor, name, base): - actor.deductSkillMod(name, base) - return \ No newline at end of file + +def deduct(core, actor, skillMod, value): + return + \ No newline at end of file diff --git a/scripts/skillMods/dot_resist_all.py b/scripts/skillMods/dot_resist_all.py index f198037b..b5c5e291 100644 --- a/scripts/skillMods/dot_resist_all.py +++ b/scripts/skillMods/dot_resist_all.py @@ -1,9 +1,8 @@ import sys -def add(core, actor, name, base): - actor.addSkillMod(name, base) +def add(core, actor, skillMod, value): return - -def deduct(core, actor, name, base): - actor.deductSkillMod(name, base) - return \ No newline at end of file + +def deduct(core, actor, skillMod, value): + return + \ No newline at end of file diff --git a/scripts/skillMods/droid_assembly.py b/scripts/skillMods/droid_assembly.py index ee7769e2..b5c5e291 100644 --- a/scripts/skillMods/droid_assembly.py +++ b/scripts/skillMods/droid_assembly.py @@ -1,10 +1,8 @@ import sys -def add(core, actor, name, base): - actor.addSkillMod(name, base) +def add(core, actor, skillMod, value): return - -def deduct(core, actor, name, base): - actor.deductSkillMod(name, base) + +def deduct(core, actor, skillMod, value): return \ No newline at end of file diff --git a/scripts/skillMods/droid_customization.py b/scripts/skillMods/droid_customization.py index ee7769e2..6cd11173 100644 --- a/scripts/skillMods/droid_customization.py +++ b/scripts/skillMods/droid_customization.py @@ -1,10 +1,8 @@ import sys -def add(core, actor, name, base): - actor.addSkillMod(name, base) +def add(core, actor, skillMod, divisor): return - -def deduct(core, actor, name, base): - actor.deductSkillMod(name, base) + +def deduct(core, actor, skillMod, divisor): return \ No newline at end of file diff --git a/scripts/skillMods/droid_experimentation.py b/scripts/skillMods/droid_experimentation.py index ee7769e2..b5c5e291 100644 --- a/scripts/skillMods/droid_experimentation.py +++ b/scripts/skillMods/droid_experimentation.py @@ -1,10 +1,8 @@ import sys -def add(core, actor, name, base): - actor.addSkillMod(name, base) +def add(core, actor, skillMod, value): return - -def deduct(core, actor, name, base): - actor.deductSkillMod(name, base) + +def deduct(core, actor, skillMod, value): return \ No newline at end of file diff --git a/scripts/skillMods/droid_find_chance.py b/scripts/skillMods/droid_find_chance.py index ee7769e2..b5c5e291 100644 --- a/scripts/skillMods/droid_find_chance.py +++ b/scripts/skillMods/droid_find_chance.py @@ -1,10 +1,8 @@ import sys -def add(core, actor, name, base): - actor.addSkillMod(name, base) +def add(core, actor, skillMod, value): return - -def deduct(core, actor, name, base): - actor.deductSkillMod(name, base) + +def deduct(core, actor, skillMod, value): return \ No newline at end of file diff --git a/scripts/skillMods/droid_find_speed.py b/scripts/skillMods/droid_find_speed.py index ee7769e2..b5c5e291 100644 --- a/scripts/skillMods/droid_find_speed.py +++ b/scripts/skillMods/droid_find_speed.py @@ -1,10 +1,8 @@ import sys -def add(core, actor, name, base): - actor.addSkillMod(name, base) +def add(core, actor, skillMod, value): return - -def deduct(core, actor, name, base): - actor.deductSkillMod(name, base) + +def deduct(core, actor, skillMod, value): return \ No newline at end of file diff --git a/scripts/skillMods/droid_track_chance.py b/scripts/skillMods/droid_track_chance.py index ee7769e2..b5c5e291 100644 --- a/scripts/skillMods/droid_track_chance.py +++ b/scripts/skillMods/droid_track_chance.py @@ -1,10 +1,8 @@ import sys -def add(core, actor, name, base): - actor.addSkillMod(name, base) +def add(core, actor, skillMod, value): return - -def deduct(core, actor, name, base): - actor.deductSkillMod(name, base) + +def deduct(core, actor, skillMod, value): return \ No newline at end of file diff --git a/scripts/skillMods/droid_track_speed.py b/scripts/skillMods/droid_track_speed.py index ee7769e2..b5c5e291 100644 --- a/scripts/skillMods/droid_track_speed.py +++ b/scripts/skillMods/droid_track_speed.py @@ -1,10 +1,8 @@ import sys -def add(core, actor, name, base): - actor.addSkillMod(name, base) +def add(core, actor, skillMod, value): return - -def deduct(core, actor, name, base): - actor.deductSkillMod(name, base) + +def deduct(core, actor, skillMod, value): return \ No newline at end of file diff --git a/scripts/skillMods/droid_tracks.py b/scripts/skillMods/droid_tracks.py index ee7769e2..b5c5e291 100644 --- a/scripts/skillMods/droid_tracks.py +++ b/scripts/skillMods/droid_tracks.py @@ -1,10 +1,8 @@ import sys -def add(core, actor, name, base): - actor.addSkillMod(name, base) +def add(core, actor, skillMod, value): return - -def deduct(core, actor, name, base): - actor.deductSkillMod(name, base) + +def deduct(core, actor, skillMod, value): return \ No newline at end of file diff --git a/scripts/skillMods/electricity.py b/scripts/skillMods/electricity.py index ee7769e2..b5c5e291 100644 --- a/scripts/skillMods/electricity.py +++ b/scripts/skillMods/electricity.py @@ -1,10 +1,8 @@ import sys -def add(core, actor, name, base): - actor.addSkillMod(name, base) +def add(core, actor, skillMod, value): return - -def deduct(core, actor, name, base): - actor.deductSkillMod(name, base) + +def deduct(core, actor, skillMod, value): return \ No newline at end of file diff --git a/scripts/skillMods/energy.py b/scripts/skillMods/energy.py index ee7769e2..b5c5e291 100644 --- a/scripts/skillMods/energy.py +++ b/scripts/skillMods/energy.py @@ -1,10 +1,8 @@ import sys -def add(core, actor, name, base): - actor.addSkillMod(name, base) +def add(core, actor, skillMod, value): return - -def deduct(core, actor, name, base): - actor.deductSkillMod(name, base) + +def deduct(core, actor, skillMod, value): return \ No newline at end of file diff --git a/scripts/skillMods/engine_assembly.py b/scripts/skillMods/engine_assembly.py index ee7769e2..b5c5e291 100644 --- a/scripts/skillMods/engine_assembly.py +++ b/scripts/skillMods/engine_assembly.py @@ -1,10 +1,8 @@ import sys -def add(core, actor, name, base): - actor.addSkillMod(name, base) +def add(core, actor, skillMod, value): return - -def deduct(core, actor, name, base): - actor.deductSkillMod(name, base) + +def deduct(core, actor, skillMod, value): return \ No newline at end of file diff --git a/scripts/skillMods/engine_experimentation.py b/scripts/skillMods/engine_experimentation.py index ee7769e2..b5c5e291 100644 --- a/scripts/skillMods/engine_experimentation.py +++ b/scripts/skillMods/engine_experimentation.py @@ -1,10 +1,8 @@ import sys -def add(core, actor, name, base): - actor.addSkillMod(name, base) +def add(core, actor, skillMod, value): return - -def deduct(core, actor, name, base): - actor.deductSkillMod(name, base) + +def deduct(core, actor, skillMod, value): return \ No newline at end of file diff --git a/scripts/skillMods/engineering_reverse.py b/scripts/skillMods/engineering_reverse.py index ee7769e2..b5c5e291 100644 --- a/scripts/skillMods/engineering_reverse.py +++ b/scripts/skillMods/engineering_reverse.py @@ -1,10 +1,8 @@ import sys -def add(core, actor, name, base): - actor.addSkillMod(name, base) +def add(core, actor, skillMod, value): return - -def deduct(core, actor, name, base): - actor.deductSkillMod(name, base) + +def deduct(core, actor, skillMod, value): return \ No newline at end of file diff --git a/scripts/skillMods/expertise_action_all.py b/scripts/skillMods/expertise_action_all.py index ee7769e2..b5c5e291 100644 --- a/scripts/skillMods/expertise_action_all.py +++ b/scripts/skillMods/expertise_action_all.py @@ -1,10 +1,8 @@ import sys -def add(core, actor, name, base): - actor.addSkillMod(name, base) +def add(core, actor, skillMod, value): return - -def deduct(core, actor, name, base): - actor.deductSkillMod(name, base) + +def deduct(core, actor, skillMod, value): return \ No newline at end of file diff --git a/scripts/skillMods/expertise_action_carbine.py b/scripts/skillMods/expertise_action_carbine.py index ee7769e2..b5c5e291 100644 --- a/scripts/skillMods/expertise_action_carbine.py +++ b/scripts/skillMods/expertise_action_carbine.py @@ -1,10 +1,8 @@ import sys -def add(core, actor, name, base): - actor.addSkillMod(name, base) +def add(core, actor, skillMod, value): return - -def deduct(core, actor, name, base): - actor.deductSkillMod(name, base) + +def deduct(core, actor, skillMod, value): return \ No newline at end of file diff --git a/scripts/skillMods/expertise_action_damage_line_of_sure.py b/scripts/skillMods/expertise_action_damage_line_of_sure.py index ee7769e2..b5c5e291 100644 --- a/scripts/skillMods/expertise_action_damage_line_of_sure.py +++ b/scripts/skillMods/expertise_action_damage_line_of_sure.py @@ -1,10 +1,8 @@ import sys -def add(core, actor, name, base): - actor.addSkillMod(name, base) +def add(core, actor, skillMod, value): return - -def deduct(core, actor, name, base): - actor.deductSkillMod(name, base) + +def deduct(core, actor, skillMod, value): return \ No newline at end of file diff --git a/scripts/skillMods/expertise_action_line_co_dm.py b/scripts/skillMods/expertise_action_line_co_dm.py index ee7769e2..b5c5e291 100644 --- a/scripts/skillMods/expertise_action_line_co_dm.py +++ b/scripts/skillMods/expertise_action_line_co_dm.py @@ -1,10 +1,8 @@ import sys -def add(core, actor, name, base): - actor.addSkillMod(name, base) +def add(core, actor, skillMod, value): return - -def deduct(core, actor, name, base): - actor.deductSkillMod(name, base) + +def deduct(core, actor, skillMod, value): return \ No newline at end of file diff --git a/scripts/skillMods/expertise_action_line_co_grenade.py b/scripts/skillMods/expertise_action_line_co_grenade.py index ee7769e2..b5c5e291 100644 --- a/scripts/skillMods/expertise_action_line_co_grenade.py +++ b/scripts/skillMods/expertise_action_line_co_grenade.py @@ -1,10 +1,8 @@ import sys -def add(core, actor, name, base): - actor.addSkillMod(name, base) +def add(core, actor, skillMod, value): return - -def deduct(core, actor, name, base): - actor.deductSkillMod(name, base) + +def deduct(core, actor, skillMod, value): return \ No newline at end of file diff --git a/scripts/skillMods/expertise_action_line_dm.py b/scripts/skillMods/expertise_action_line_dm.py index ee7769e2..b5c5e291 100644 --- a/scripts/skillMods/expertise_action_line_dm.py +++ b/scripts/skillMods/expertise_action_line_dm.py @@ -1,10 +1,8 @@ import sys -def add(core, actor, name, base): - actor.addSkillMod(name, base) +def add(core, actor, skillMod, value): return - -def deduct(core, actor, name, base): - actor.deductSkillMod(name, base) + +def deduct(core, actor, skillMod, value): return \ No newline at end of file diff --git a/scripts/skillMods/expertise_action_line_dm_cc.py b/scripts/skillMods/expertise_action_line_dm_cc.py index ee7769e2..b5c5e291 100644 --- a/scripts/skillMods/expertise_action_line_dm_cc.py +++ b/scripts/skillMods/expertise_action_line_dm_cc.py @@ -1,10 +1,8 @@ import sys -def add(core, actor, name, base): - actor.addSkillMod(name, base) +def add(core, actor, skillMod, value): return - -def deduct(core, actor, name, base): - actor.deductSkillMod(name, base) + +def deduct(core, actor, skillMod, value): return \ No newline at end of file diff --git a/scripts/skillMods/expertise_action_line_dm_crit.py b/scripts/skillMods/expertise_action_line_dm_crit.py index ee7769e2..b5c5e291 100644 --- a/scripts/skillMods/expertise_action_line_dm_crit.py +++ b/scripts/skillMods/expertise_action_line_dm_crit.py @@ -1,10 +1,8 @@ import sys -def add(core, actor, name, base): - actor.addSkillMod(name, base) +def add(core, actor, skillMod, value): return - -def deduct(core, actor, name, base): - actor.deductSkillMod(name, base) + +def deduct(core, actor, skillMod, value): return \ No newline at end of file diff --git a/scripts/skillMods/expertise_action_line_fs_ae_dm_cc.py b/scripts/skillMods/expertise_action_line_fs_ae_dm_cc.py index ee7769e2..b5c5e291 100644 --- a/scripts/skillMods/expertise_action_line_fs_ae_dm_cc.py +++ b/scripts/skillMods/expertise_action_line_fs_ae_dm_cc.py @@ -1,10 +1,8 @@ import sys -def add(core, actor, name, base): - actor.addSkillMod(name, base) +def add(core, actor, skillMod, value): return - -def deduct(core, actor, name, base): - actor.deductSkillMod(name, base) + +def deduct(core, actor, skillMod, value): return \ No newline at end of file diff --git a/scripts/skillMods/expertise_action_line_fs_cc_crit.py b/scripts/skillMods/expertise_action_line_fs_cc_crit.py index ee7769e2..b5c5e291 100644 --- a/scripts/skillMods/expertise_action_line_fs_cc_crit.py +++ b/scripts/skillMods/expertise_action_line_fs_cc_crit.py @@ -1,10 +1,8 @@ import sys -def add(core, actor, name, base): - actor.addSkillMod(name, base) +def add(core, actor, skillMod, value): return - -def deduct(core, actor, name, base): - actor.deductSkillMod(name, base) + +def deduct(core, actor, skillMod, value): return \ No newline at end of file diff --git a/scripts/skillMods/expertise_action_line_fs_dm.py b/scripts/skillMods/expertise_action_line_fs_dm.py index ee7769e2..b5c5e291 100644 --- a/scripts/skillMods/expertise_action_line_fs_dm.py +++ b/scripts/skillMods/expertise_action_line_fs_dm.py @@ -1,10 +1,8 @@ import sys -def add(core, actor, name, base): - actor.addSkillMod(name, base) +def add(core, actor, skillMod, value): return - -def deduct(core, actor, name, base): - actor.deductSkillMod(name, base) + +def deduct(core, actor, skillMod, value): return \ No newline at end of file diff --git a/scripts/skillMods/expertise_action_line_fs_sweep.py b/scripts/skillMods/expertise_action_line_fs_sweep.py index ee7769e2..b5c5e291 100644 --- a/scripts/skillMods/expertise_action_line_fs_sweep.py +++ b/scripts/skillMods/expertise_action_line_fs_sweep.py @@ -1,10 +1,8 @@ import sys -def add(core, actor, name, base): - actor.addSkillMod(name, base) +def add(core, actor, skillMod, value): return - -def deduct(core, actor, name, base): - actor.deductSkillMod(name, base) + +def deduct(core, actor, skillMod, value): return \ No newline at end of file diff --git a/scripts/skillMods/expertise_action_line_me_burst.py b/scripts/skillMods/expertise_action_line_me_burst.py index ee7769e2..b5c5e291 100644 --- a/scripts/skillMods/expertise_action_line_me_burst.py +++ b/scripts/skillMods/expertise_action_line_me_burst.py @@ -1,10 +1,8 @@ import sys -def add(core, actor, name, base): - actor.addSkillMod(name, base) +def add(core, actor, skillMod, value): return - -def deduct(core, actor, name, base): - actor.deductSkillMod(name, base) + +def deduct(core, actor, skillMod, value): return \ No newline at end of file diff --git a/scripts/skillMods/expertise_action_line_me_dm.py b/scripts/skillMods/expertise_action_line_me_dm.py index ee7769e2..b5c5e291 100644 --- a/scripts/skillMods/expertise_action_line_me_dm.py +++ b/scripts/skillMods/expertise_action_line_me_dm.py @@ -1,10 +1,8 @@ import sys -def add(core, actor, name, base): - actor.addSkillMod(name, base) +def add(core, actor, skillMod, value): return - -def deduct(core, actor, name, base): - actor.deductSkillMod(name, base) + +def deduct(core, actor, skillMod, value): return \ No newline at end of file diff --git a/scripts/skillMods/expertise_action_line_me_heal.py b/scripts/skillMods/expertise_action_line_me_heal.py index ee7769e2..b5c5e291 100644 --- a/scripts/skillMods/expertise_action_line_me_heal.py +++ b/scripts/skillMods/expertise_action_line_me_heal.py @@ -1,10 +1,8 @@ import sys -def add(core, actor, name, base): - actor.addSkillMod(name, base) +def add(core, actor, skillMod, value): return - -def deduct(core, actor, name, base): - actor.deductSkillMod(name, base) + +def deduct(core, actor, skillMod, value): return \ No newline at end of file diff --git a/scripts/skillMods/expertise_action_line_me_smash.py b/scripts/skillMods/expertise_action_line_me_smash.py index ee7769e2..b5c5e291 100644 --- a/scripts/skillMods/expertise_action_line_me_smash.py +++ b/scripts/skillMods/expertise_action_line_me_smash.py @@ -1,10 +1,8 @@ import sys -def add(core, actor, name, base): - actor.addSkillMod(name, base) +def add(core, actor, skillMod, value): return - -def deduct(core, actor, name, base): - actor.deductSkillMod(name, base) + +def deduct(core, actor, skillMod, value): return \ No newline at end of file diff --git a/scripts/skillMods/expertise_action_line_of_aoe.py b/scripts/skillMods/expertise_action_line_of_aoe.py index f4c71024..b5c5e291 100644 --- a/scripts/skillMods/expertise_action_line_of_aoe.py +++ b/scripts/skillMods/expertise_action_line_of_aoe.py @@ -1,11 +1,8 @@ import sys -def add(core, actor, name, base): - actor.addSkillMod(name, base) +def add(core, actor, skillMod, value): return - -def deduct(core, actor, name, base): - actor.deductSkillMod(name, base) + +def deduct(core, actor, skillMod, value): return - \ No newline at end of file diff --git a/scripts/skillMods/expertise_action_line_of_group_buff.py b/scripts/skillMods/expertise_action_line_of_group_buff.py index ee7769e2..b5c5e291 100644 --- a/scripts/skillMods/expertise_action_line_of_group_buff.py +++ b/scripts/skillMods/expertise_action_line_of_group_buff.py @@ -1,10 +1,8 @@ import sys -def add(core, actor, name, base): - actor.addSkillMod(name, base) +def add(core, actor, skillMod, value): return - -def deduct(core, actor, name, base): - actor.deductSkillMod(name, base) + +def deduct(core, actor, skillMod, value): return \ No newline at end of file diff --git a/scripts/skillMods/expertise_action_line_of_paint.py b/scripts/skillMods/expertise_action_line_of_paint.py index ee7769e2..b5c5e291 100644 --- a/scripts/skillMods/expertise_action_line_of_paint.py +++ b/scripts/skillMods/expertise_action_line_of_paint.py @@ -1,10 +1,8 @@ import sys -def add(core, actor, name, base): - actor.addSkillMod(name, base) +def add(core, actor, skillMod, value): return - -def deduct(core, actor, name, base): - actor.deductSkillMod(name, base) + +def deduct(core, actor, skillMod, value): return \ No newline at end of file diff --git a/scripts/skillMods/expertise_action_line_of_sure.py b/scripts/skillMods/expertise_action_line_of_sure.py index ee7769e2..b5c5e291 100644 --- a/scripts/skillMods/expertise_action_line_of_sure.py +++ b/scripts/skillMods/expertise_action_line_of_sure.py @@ -1,10 +1,8 @@ import sys -def add(core, actor, name, base): - actor.addSkillMod(name, base) +def add(core, actor, skillMod, value): return - -def deduct(core, actor, name, base): - actor.deductSkillMod(name, base) + +def deduct(core, actor, skillMod, value): return \ No newline at end of file diff --git a/scripts/skillMods/expertise_action_line_sm_dm.py b/scripts/skillMods/expertise_action_line_sm_dm.py index ee7769e2..b5c5e291 100644 --- a/scripts/skillMods/expertise_action_line_sm_dm.py +++ b/scripts/skillMods/expertise_action_line_sm_dm.py @@ -1,10 +1,8 @@ import sys -def add(core, actor, name, base): - actor.addSkillMod(name, base) +def add(core, actor, skillMod, value): return - -def deduct(core, actor, name, base): - actor.deductSkillMod(name, base) + +def deduct(core, actor, skillMod, value): return \ No newline at end of file diff --git a/scripts/skillMods/expertise_action_line_sp_burst_shadows.py b/scripts/skillMods/expertise_action_line_sp_burst_shadows.py index ee7769e2..b5c5e291 100644 --- a/scripts/skillMods/expertise_action_line_sp_burst_shadows.py +++ b/scripts/skillMods/expertise_action_line_sp_burst_shadows.py @@ -1,10 +1,8 @@ import sys -def add(core, actor, name, base): - actor.addSkillMod(name, base) +def add(core, actor, skillMod, value): return - -def deduct(core, actor, name, base): - actor.deductSkillMod(name, base) + +def deduct(core, actor, skillMod, value): return \ No newline at end of file diff --git a/scripts/skillMods/expertise_action_line_sp_dm.py b/scripts/skillMods/expertise_action_line_sp_dm.py index ee7769e2..b5c5e291 100644 --- a/scripts/skillMods/expertise_action_line_sp_dm.py +++ b/scripts/skillMods/expertise_action_line_sp_dm.py @@ -1,10 +1,8 @@ import sys -def add(core, actor, name, base): - actor.addSkillMod(name, base) +def add(core, actor, skillMod, value): return - -def deduct(core, actor, name, base): - actor.deductSkillMod(name, base) + +def deduct(core, actor, skillMod, value): return \ No newline at end of file diff --git a/scripts/skillMods/expertise_action_line_sp_dot.py b/scripts/skillMods/expertise_action_line_sp_dot.py index ee7769e2..b5c5e291 100644 --- a/scripts/skillMods/expertise_action_line_sp_dot.py +++ b/scripts/skillMods/expertise_action_line_sp_dot.py @@ -1,10 +1,8 @@ import sys -def add(core, actor, name, base): - actor.addSkillMod(name, base) +def add(core, actor, skillMod, value): return - -def deduct(core, actor, name, base): - actor.deductSkillMod(name, base) + +def deduct(core, actor, skillMod, value): return \ No newline at end of file diff --git a/scripts/skillMods/expertise_action_line_sp_hd_melee.py b/scripts/skillMods/expertise_action_line_sp_hd_melee.py index ee7769e2..b5c5e291 100644 --- a/scripts/skillMods/expertise_action_line_sp_hd_melee.py +++ b/scripts/skillMods/expertise_action_line_sp_hd_melee.py @@ -1,10 +1,8 @@ import sys -def add(core, actor, name, base): - actor.addSkillMod(name, base) +def add(core, actor, skillMod, value): return - -def deduct(core, actor, name, base): - actor.deductSkillMod(name, base) + +def deduct(core, actor, skillMod, value): return \ No newline at end of file diff --git a/scripts/skillMods/expertise_action_line_sp_smoke.py b/scripts/skillMods/expertise_action_line_sp_smoke.py index ee7769e2..b5c5e291 100644 --- a/scripts/skillMods/expertise_action_line_sp_smoke.py +++ b/scripts/skillMods/expertise_action_line_sp_smoke.py @@ -1,10 +1,8 @@ import sys -def add(core, actor, name, base): - actor.addSkillMod(name, base) +def add(core, actor, skillMod, value): return - -def deduct(core, actor, name, base): - actor.deductSkillMod(name, base) + +def deduct(core, actor, skillMod, value): return \ No newline at end of file diff --git a/scripts/skillMods/expertise_action_line_sp_stealth_melee.py b/scripts/skillMods/expertise_action_line_sp_stealth_melee.py index ee7769e2..b5c5e291 100644 --- a/scripts/skillMods/expertise_action_line_sp_stealth_melee.py +++ b/scripts/skillMods/expertise_action_line_sp_stealth_melee.py @@ -1,10 +1,8 @@ import sys -def add(core, actor, name, base): - actor.addSkillMod(name, base) +def add(core, actor, skillMod, value): return - -def deduct(core, actor, name, base): - actor.deductSkillMod(name, base) + +def deduct(core, actor, skillMod, value): return \ No newline at end of file diff --git a/scripts/skillMods/expertise_action_line_sp_stealth_ranged.py b/scripts/skillMods/expertise_action_line_sp_stealth_ranged.py index ee7769e2..b5c5e291 100644 --- a/scripts/skillMods/expertise_action_line_sp_stealth_ranged.py +++ b/scripts/skillMods/expertise_action_line_sp_stealth_ranged.py @@ -1,10 +1,8 @@ import sys -def add(core, actor, name, base): - actor.addSkillMod(name, base) +def add(core, actor, skillMod, value): return - -def deduct(core, actor, name, base): - actor.deductSkillMod(name, base) + +def deduct(core, actor, skillMod, value): return \ No newline at end of file diff --git a/scripts/skillMods/expertise_action_line_sp_without_trace.py b/scripts/skillMods/expertise_action_line_sp_without_trace.py index ee7769e2..b5c5e291 100644 --- a/scripts/skillMods/expertise_action_line_sp_without_trace.py +++ b/scripts/skillMods/expertise_action_line_sp_without_trace.py @@ -1,10 +1,8 @@ import sys -def add(core, actor, name, base): - actor.addSkillMod(name, base) +def add(core, actor, skillMod, value): return - -def deduct(core, actor, name, base): - actor.deductSkillMod(name, base) + +def deduct(core, actor, skillMod, value): return \ No newline at end of file diff --git a/scripts/skillMods/expertise_action_line_trap.py b/scripts/skillMods/expertise_action_line_trap.py index ee7769e2..b5c5e291 100644 --- a/scripts/skillMods/expertise_action_line_trap.py +++ b/scripts/skillMods/expertise_action_line_trap.py @@ -1,10 +1,8 @@ import sys -def add(core, actor, name, base): - actor.addSkillMod(name, base) +def add(core, actor, skillMod, value): return - -def deduct(core, actor, name, base): - actor.deductSkillMod(name, base) + +def deduct(core, actor, skillMod, value): return \ No newline at end of file diff --git a/scripts/skillMods/expertise_action_rifle.py b/scripts/skillMods/expertise_action_rifle.py index ee7769e2..b5c5e291 100644 --- a/scripts/skillMods/expertise_action_rifle.py +++ b/scripts/skillMods/expertise_action_rifle.py @@ -1,10 +1,8 @@ import sys -def add(core, actor, name, base): - actor.addSkillMod(name, base) +def add(core, actor, skillMod, value): return - -def deduct(core, actor, name, base): - actor.deductSkillMod(name, base) + +def deduct(core, actor, skillMod, value): return \ No newline at end of file diff --git a/scripts/skillMods/expertise_action_weapon_0.py b/scripts/skillMods/expertise_action_weapon_0.py index ee7769e2..b5c5e291 100644 --- a/scripts/skillMods/expertise_action_weapon_0.py +++ b/scripts/skillMods/expertise_action_weapon_0.py @@ -1,10 +1,8 @@ import sys -def add(core, actor, name, base): - actor.addSkillMod(name, base) +def add(core, actor, skillMod, value): return - -def deduct(core, actor, name, base): - actor.deductSkillMod(name, base) + +def deduct(core, actor, skillMod, value): return \ No newline at end of file diff --git a/scripts/skillMods/expertise_action_weapon_1.py b/scripts/skillMods/expertise_action_weapon_1.py index ee7769e2..b5c5e291 100644 --- a/scripts/skillMods/expertise_action_weapon_1.py +++ b/scripts/skillMods/expertise_action_weapon_1.py @@ -1,10 +1,8 @@ import sys -def add(core, actor, name, base): - actor.addSkillMod(name, base) +def add(core, actor, skillMod, value): return - -def deduct(core, actor, name, base): - actor.deductSkillMod(name, base) + +def deduct(core, actor, skillMod, value): return \ No newline at end of file diff --git a/scripts/skillMods/expertise_action_weapon_10.py b/scripts/skillMods/expertise_action_weapon_10.py index ee7769e2..6cd11173 100644 --- a/scripts/skillMods/expertise_action_weapon_10.py +++ b/scripts/skillMods/expertise_action_weapon_10.py @@ -1,10 +1,8 @@ import sys -def add(core, actor, name, base): - actor.addSkillMod(name, base) +def add(core, actor, skillMod, divisor): return - -def deduct(core, actor, name, base): - actor.deductSkillMod(name, base) + +def deduct(core, actor, skillMod, divisor): return \ No newline at end of file diff --git a/scripts/skillMods/expertise_action_weapon_11.py b/scripts/skillMods/expertise_action_weapon_11.py index ee7769e2..b5c5e291 100644 --- a/scripts/skillMods/expertise_action_weapon_11.py +++ b/scripts/skillMods/expertise_action_weapon_11.py @@ -1,10 +1,8 @@ import sys -def add(core, actor, name, base): - actor.addSkillMod(name, base) +def add(core, actor, skillMod, value): return - -def deduct(core, actor, name, base): - actor.deductSkillMod(name, base) + +def deduct(core, actor, skillMod, value): return \ No newline at end of file diff --git a/scripts/skillMods/expertise_action_weapon_2.py b/scripts/skillMods/expertise_action_weapon_2.py index ee7769e2..b5c5e291 100644 --- a/scripts/skillMods/expertise_action_weapon_2.py +++ b/scripts/skillMods/expertise_action_weapon_2.py @@ -1,10 +1,8 @@ import sys -def add(core, actor, name, base): - actor.addSkillMod(name, base) +def add(core, actor, skillMod, value): return - -def deduct(core, actor, name, base): - actor.deductSkillMod(name, base) + +def deduct(core, actor, skillMod, value): return \ No newline at end of file diff --git a/scripts/skillMods/expertise_action_weapon_3.py b/scripts/skillMods/expertise_action_weapon_3.py index ee7769e2..b5c5e291 100644 --- a/scripts/skillMods/expertise_action_weapon_3.py +++ b/scripts/skillMods/expertise_action_weapon_3.py @@ -1,10 +1,8 @@ import sys -def add(core, actor, name, base): - actor.addSkillMod(name, base) +def add(core, actor, skillMod, value): return - -def deduct(core, actor, name, base): - actor.deductSkillMod(name, base) + +def deduct(core, actor, skillMod, value): return \ No newline at end of file diff --git a/scripts/skillMods/expertise_action_weapon_4.py b/scripts/skillMods/expertise_action_weapon_4.py index ee7769e2..b5c5e291 100644 --- a/scripts/skillMods/expertise_action_weapon_4.py +++ b/scripts/skillMods/expertise_action_weapon_4.py @@ -1,10 +1,8 @@ import sys -def add(core, actor, name, base): - actor.addSkillMod(name, base) +def add(core, actor, skillMod, value): return - -def deduct(core, actor, name, base): - actor.deductSkillMod(name, base) + +def deduct(core, actor, skillMod, value): return \ No newline at end of file diff --git a/scripts/skillMods/expertise_action_weapon_5.py b/scripts/skillMods/expertise_action_weapon_5.py index ee7769e2..b5c5e291 100644 --- a/scripts/skillMods/expertise_action_weapon_5.py +++ b/scripts/skillMods/expertise_action_weapon_5.py @@ -1,10 +1,8 @@ import sys -def add(core, actor, name, base): - actor.addSkillMod(name, base) +def add(core, actor, skillMod, value): return - -def deduct(core, actor, name, base): - actor.deductSkillMod(name, base) + +def deduct(core, actor, skillMod, value): return \ No newline at end of file diff --git a/scripts/skillMods/expertise_action_weapon_6.py b/scripts/skillMods/expertise_action_weapon_6.py index ee7769e2..b5c5e291 100644 --- a/scripts/skillMods/expertise_action_weapon_6.py +++ b/scripts/skillMods/expertise_action_weapon_6.py @@ -1,10 +1,8 @@ import sys -def add(core, actor, name, base): - actor.addSkillMod(name, base) +def add(core, actor, skillMod, value): return - -def deduct(core, actor, name, base): - actor.deductSkillMod(name, base) + +def deduct(core, actor, skillMod, value): return \ No newline at end of file diff --git a/scripts/skillMods/expertise_action_weapon_7.py b/scripts/skillMods/expertise_action_weapon_7.py index ee7769e2..b5c5e291 100644 --- a/scripts/skillMods/expertise_action_weapon_7.py +++ b/scripts/skillMods/expertise_action_weapon_7.py @@ -1,10 +1,8 @@ import sys -def add(core, actor, name, base): - actor.addSkillMod(name, base) +def add(core, actor, skillMod, value): return - -def deduct(core, actor, name, base): - actor.deductSkillMod(name, base) + +def deduct(core, actor, skillMod, value): return \ No newline at end of file diff --git a/scripts/skillMods/expertise_action_weapon_9.py b/scripts/skillMods/expertise_action_weapon_9.py index ee7769e2..b5c5e291 100644 --- a/scripts/skillMods/expertise_action_weapon_9.py +++ b/scripts/skillMods/expertise_action_weapon_9.py @@ -1,10 +1,8 @@ import sys -def add(core, actor, name, base): - actor.addSkillMod(name, base) +def add(core, actor, skillMod, value): return - -def deduct(core, actor, name, base): - actor.deductSkillMod(name, base) + +def deduct(core, actor, skillMod, value): return \ No newline at end of file diff --git a/scripts/skillMods/expertise_action_weapon_melee.py b/scripts/skillMods/expertise_action_weapon_melee.py index ee7769e2..b5c5e291 100644 --- a/scripts/skillMods/expertise_action_weapon_melee.py +++ b/scripts/skillMods/expertise_action_weapon_melee.py @@ -1,10 +1,8 @@ import sys -def add(core, actor, name, base): - actor.addSkillMod(name, base) +def add(core, actor, skillMod, value): return - -def deduct(core, actor, name, base): - actor.deductSkillMod(name, base) + +def deduct(core, actor, skillMod, value): return \ No newline at end of file diff --git a/scripts/skillMods/expertise_aggro_channel.py b/scripts/skillMods/expertise_aggro_channel.py index ee7769e2..b5c5e291 100644 --- a/scripts/skillMods/expertise_aggro_channel.py +++ b/scripts/skillMods/expertise_aggro_channel.py @@ -1,10 +1,8 @@ import sys -def add(core, actor, name, base): - actor.addSkillMod(name, base) +def add(core, actor, skillMod, value): return - -def deduct(core, actor, name, base): - actor.deductSkillMod(name, base) + +def deduct(core, actor, skillMod, value): return \ No newline at end of file diff --git a/scripts/skillMods/expertise_agro_healing.py b/scripts/skillMods/expertise_agro_healing.py index ee7769e2..b5c5e291 100644 --- a/scripts/skillMods/expertise_agro_healing.py +++ b/scripts/skillMods/expertise_agro_healing.py @@ -1,10 +1,8 @@ import sys -def add(core, actor, name, base): - actor.addSkillMod(name, base) +def add(core, actor, skillMod, value): return - -def deduct(core, actor, name, base): - actor.deductSkillMod(name, base) + +def deduct(core, actor, skillMod, value): return \ No newline at end of file diff --git a/scripts/skillMods/expertise_area_size_line_co_grenade.py b/scripts/skillMods/expertise_area_size_line_co_grenade.py index ee7769e2..b5c5e291 100644 --- a/scripts/skillMods/expertise_area_size_line_co_grenade.py +++ b/scripts/skillMods/expertise_area_size_line_co_grenade.py @@ -1,10 +1,8 @@ import sys -def add(core, actor, name, base): - actor.addSkillMod(name, base) +def add(core, actor, skillMod, value): return - -def deduct(core, actor, name, base): - actor.deductSkillMod(name, base) + +def deduct(core, actor, skillMod, value): return \ No newline at end of file diff --git a/scripts/skillMods/expertise_area_size_line_co_remote_detonator.py b/scripts/skillMods/expertise_area_size_line_co_remote_detonator.py index ee7769e2..b5c5e291 100644 --- a/scripts/skillMods/expertise_area_size_line_co_remote_detonator.py +++ b/scripts/skillMods/expertise_area_size_line_co_remote_detonator.py @@ -1,10 +1,8 @@ import sys -def add(core, actor, name, base): - actor.addSkillMod(name, base) +def add(core, actor, skillMod, value): return - -def deduct(core, actor, name, base): - actor.deductSkillMod(name, base) + +def deduct(core, actor, skillMod, value): return \ No newline at end of file diff --git a/scripts/skillMods/expertise_area_size_line_diretrap.py b/scripts/skillMods/expertise_area_size_line_diretrap.py index ee7769e2..b5c5e291 100644 --- a/scripts/skillMods/expertise_area_size_line_diretrap.py +++ b/scripts/skillMods/expertise_area_size_line_diretrap.py @@ -1,10 +1,8 @@ import sys -def add(core, actor, name, base): - actor.addSkillMod(name, base) +def add(core, actor, skillMod, value): return - -def deduct(core, actor, name, base): - actor.deductSkillMod(name, base) + +def deduct(core, actor, skillMod, value): return \ No newline at end of file diff --git a/scripts/skillMods/expertise_area_size_line_trap.py b/scripts/skillMods/expertise_area_size_line_trap.py index ee7769e2..b5c5e291 100644 --- a/scripts/skillMods/expertise_area_size_line_trap.py +++ b/scripts/skillMods/expertise_area_size_line_trap.py @@ -1,10 +1,8 @@ import sys -def add(core, actor, name, base): - actor.addSkillMod(name, base) +def add(core, actor, skillMod, value): return - -def deduct(core, actor, name, base): - actor.deductSkillMod(name, base) + +def deduct(core, actor, skillMod, value): return \ No newline at end of file diff --git a/scripts/skillMods/expertise_area_size_single_fs_mind_trick_2.py b/scripts/skillMods/expertise_area_size_single_fs_mind_trick_2.py index ee7769e2..b5c5e291 100644 --- a/scripts/skillMods/expertise_area_size_single_fs_mind_trick_2.py +++ b/scripts/skillMods/expertise_area_size_single_fs_mind_trick_2.py @@ -1,10 +1,8 @@ import sys -def add(core, actor, name, base): - actor.addSkillMod(name, base) +def add(core, actor, skillMod, value): return - -def deduct(core, actor, name, base): - actor.deductSkillMod(name, base) + +def deduct(core, actor, skillMod, value): return \ No newline at end of file diff --git a/scripts/skillMods/expertise_armorset_glancing_blow_melee_2.py b/scripts/skillMods/expertise_armorset_glancing_blow_melee_2.py index ee7769e2..b5c5e291 100644 --- a/scripts/skillMods/expertise_armorset_glancing_blow_melee_2.py +++ b/scripts/skillMods/expertise_armorset_glancing_blow_melee_2.py @@ -1,10 +1,8 @@ import sys -def add(core, actor, name, base): - actor.addSkillMod(name, base) +def add(core, actor, skillMod, value): return - -def deduct(core, actor, name, base): - actor.deductSkillMod(name, base) + +def deduct(core, actor, skillMod, value): return \ No newline at end of file diff --git a/scripts/skillMods/expertise_armorset_glancing_blow_ranged_2.py b/scripts/skillMods/expertise_armorset_glancing_blow_ranged_2.py index ee7769e2..b5c5e291 100644 --- a/scripts/skillMods/expertise_armorset_glancing_blow_ranged_2.py +++ b/scripts/skillMods/expertise_armorset_glancing_blow_ranged_2.py @@ -1,10 +1,8 @@ import sys -def add(core, actor, name, base): - actor.addSkillMod(name, base) +def add(core, actor, skillMod, value): return - -def deduct(core, actor, name, base): - actor.deductSkillMod(name, base) + +def deduct(core, actor, skillMod, value): return \ No newline at end of file diff --git a/scripts/skillMods/expertise_armorset_melee_block_2.py b/scripts/skillMods/expertise_armorset_melee_block_2.py index ee7769e2..b5c5e291 100644 --- a/scripts/skillMods/expertise_armorset_melee_block_2.py +++ b/scripts/skillMods/expertise_armorset_melee_block_2.py @@ -1,10 +1,8 @@ import sys -def add(core, actor, name, base): - actor.addSkillMod(name, base) +def add(core, actor, skillMod, value): return - -def deduct(core, actor, name, base): - actor.deductSkillMod(name, base) + +def deduct(core, actor, skillMod, value): return \ No newline at end of file diff --git a/scripts/skillMods/expertise_armorset_protection_1_energy.py b/scripts/skillMods/expertise_armorset_protection_1_energy.py index ee7769e2..b5c5e291 100644 --- a/scripts/skillMods/expertise_armorset_protection_1_energy.py +++ b/scripts/skillMods/expertise_armorset_protection_1_energy.py @@ -1,10 +1,8 @@ import sys -def add(core, actor, name, base): - actor.addSkillMod(name, base) +def add(core, actor, skillMod, value): return - -def deduct(core, actor, name, base): - actor.deductSkillMod(name, base) + +def deduct(core, actor, skillMod, value): return \ No newline at end of file diff --git a/scripts/skillMods/expertise_armorset_protection_1_kinetic.py b/scripts/skillMods/expertise_armorset_protection_1_kinetic.py index ee7769e2..b5c5e291 100644 --- a/scripts/skillMods/expertise_armorset_protection_1_kinetic.py +++ b/scripts/skillMods/expertise_armorset_protection_1_kinetic.py @@ -1,10 +1,8 @@ import sys -def add(core, actor, name, base): - actor.addSkillMod(name, base) +def add(core, actor, skillMod, value): return - -def deduct(core, actor, name, base): - actor.deductSkillMod(name, base) + +def deduct(core, actor, skillMod, value): return \ No newline at end of file diff --git a/scripts/skillMods/expertise_armorset_protection_2_energy.py b/scripts/skillMods/expertise_armorset_protection_2_energy.py index ee7769e2..b5c5e291 100644 --- a/scripts/skillMods/expertise_armorset_protection_2_energy.py +++ b/scripts/skillMods/expertise_armorset_protection_2_energy.py @@ -1,10 +1,8 @@ import sys -def add(core, actor, name, base): - actor.addSkillMod(name, base) +def add(core, actor, skillMod, value): return - -def deduct(core, actor, name, base): - actor.deductSkillMod(name, base) + +def deduct(core, actor, skillMod, value): return \ No newline at end of file diff --git a/scripts/skillMods/expertise_armorset_protection_2_kinetic.py b/scripts/skillMods/expertise_armorset_protection_2_kinetic.py index ee7769e2..b5c5e291 100644 --- a/scripts/skillMods/expertise_armorset_protection_2_kinetic.py +++ b/scripts/skillMods/expertise_armorset_protection_2_kinetic.py @@ -1,10 +1,8 @@ import sys -def add(core, actor, name, base): - actor.addSkillMod(name, base) +def add(core, actor, skillMod, value): return - -def deduct(core, actor, name, base): - actor.deductSkillMod(name, base) + +def deduct(core, actor, skillMod, value): return \ No newline at end of file diff --git a/scripts/skillMods/expertise_armorset_ranged_dodge_2.py b/scripts/skillMods/expertise_armorset_ranged_dodge_2.py index ee7769e2..b5c5e291 100644 --- a/scripts/skillMods/expertise_armorset_ranged_dodge_2.py +++ b/scripts/skillMods/expertise_armorset_ranged_dodge_2.py @@ -1,10 +1,8 @@ import sys -def add(core, actor, name, base): - actor.addSkillMod(name, base) +def add(core, actor, skillMod, value): return - -def deduct(core, actor, name, base): - actor.deductSkillMod(name, base) + +def deduct(core, actor, skillMod, value): return \ No newline at end of file diff --git a/scripts/skillMods/expertise_assembly_increase_architect.py b/scripts/skillMods/expertise_assembly_increase_architect.py index ee7769e2..b5c5e291 100644 --- a/scripts/skillMods/expertise_assembly_increase_architect.py +++ b/scripts/skillMods/expertise_assembly_increase_architect.py @@ -1,10 +1,8 @@ import sys -def add(core, actor, name, base): - actor.addSkillMod(name, base) +def add(core, actor, skillMod, value): return - -def deduct(core, actor, name, base): - actor.deductSkillMod(name, base) + +def deduct(core, actor, skillMod, value): return \ No newline at end of file diff --git a/scripts/skillMods/expertise_assembly_increase_armorsmith.py b/scripts/skillMods/expertise_assembly_increase_armorsmith.py index ee7769e2..b5c5e291 100644 --- a/scripts/skillMods/expertise_assembly_increase_armorsmith.py +++ b/scripts/skillMods/expertise_assembly_increase_armorsmith.py @@ -1,10 +1,8 @@ import sys -def add(core, actor, name, base): - actor.addSkillMod(name, base) +def add(core, actor, skillMod, value): return - -def deduct(core, actor, name, base): - actor.deductSkillMod(name, base) + +def deduct(core, actor, skillMod, value): return \ No newline at end of file diff --git a/scripts/skillMods/expertise_assembly_increase_artisan.py b/scripts/skillMods/expertise_assembly_increase_artisan.py index ee7769e2..b5c5e291 100644 --- a/scripts/skillMods/expertise_assembly_increase_artisan.py +++ b/scripts/skillMods/expertise_assembly_increase_artisan.py @@ -1,10 +1,8 @@ import sys -def add(core, actor, name, base): - actor.addSkillMod(name, base) +def add(core, actor, skillMod, value): return - -def deduct(core, actor, name, base): - actor.deductSkillMod(name, base) + +def deduct(core, actor, skillMod, value): return \ No newline at end of file diff --git a/scripts/skillMods/expertise_assembly_increase_chef.py b/scripts/skillMods/expertise_assembly_increase_chef.py index ee7769e2..b5c5e291 100644 --- a/scripts/skillMods/expertise_assembly_increase_chef.py +++ b/scripts/skillMods/expertise_assembly_increase_chef.py @@ -1,10 +1,8 @@ import sys -def add(core, actor, name, base): - actor.addSkillMod(name, base) +def add(core, actor, skillMod, value): return - -def deduct(core, actor, name, base): - actor.deductSkillMod(name, base) + +def deduct(core, actor, skillMod, value): return \ No newline at end of file diff --git a/scripts/skillMods/expertise_assembly_increase_droid.py b/scripts/skillMods/expertise_assembly_increase_droid.py index ee7769e2..b5c5e291 100644 --- a/scripts/skillMods/expertise_assembly_increase_droid.py +++ b/scripts/skillMods/expertise_assembly_increase_droid.py @@ -1,10 +1,8 @@ import sys -def add(core, actor, name, base): - actor.addSkillMod(name, base) +def add(core, actor, skillMod, value): return - -def deduct(core, actor, name, base): - actor.deductSkillMod(name, base) + +def deduct(core, actor, skillMod, value): return \ No newline at end of file diff --git a/scripts/skillMods/expertise_assembly_increase_shipwright.py b/scripts/skillMods/expertise_assembly_increase_shipwright.py index ee7769e2..b5c5e291 100644 --- a/scripts/skillMods/expertise_assembly_increase_shipwright.py +++ b/scripts/skillMods/expertise_assembly_increase_shipwright.py @@ -1,10 +1,8 @@ import sys -def add(core, actor, name, base): - actor.addSkillMod(name, base) +def add(core, actor, skillMod, value): return - -def deduct(core, actor, name, base): - actor.deductSkillMod(name, base) + +def deduct(core, actor, skillMod, value): return \ No newline at end of file diff --git a/scripts/skillMods/expertise_assembly_increase_tailor.py b/scripts/skillMods/expertise_assembly_increase_tailor.py index ee7769e2..b5c5e291 100644 --- a/scripts/skillMods/expertise_assembly_increase_tailor.py +++ b/scripts/skillMods/expertise_assembly_increase_tailor.py @@ -1,10 +1,8 @@ import sys -def add(core, actor, name, base): - actor.addSkillMod(name, base) +def add(core, actor, skillMod, value): return - -def deduct(core, actor, name, base): - actor.deductSkillMod(name, base) + +def deduct(core, actor, skillMod, value): return \ No newline at end of file diff --git a/scripts/skillMods/expertise_assembly_increase_weaponsmith.py b/scripts/skillMods/expertise_assembly_increase_weaponsmith.py index ee7769e2..b5c5e291 100644 --- a/scripts/skillMods/expertise_assembly_increase_weaponsmith.py +++ b/scripts/skillMods/expertise_assembly_increase_weaponsmith.py @@ -1,10 +1,8 @@ import sys -def add(core, actor, name, base): - actor.addSkillMod(name, base) +def add(core, actor, skillMod, value): return - -def deduct(core, actor, name, base): - actor.deductSkillMod(name, base) + +def deduct(core, actor, skillMod, value): return \ No newline at end of file diff --git a/scripts/skillMods/expertise_assult_action_buff.py b/scripts/skillMods/expertise_assult_action_buff.py index ee7769e2..6fd75693 100644 --- a/scripts/skillMods/expertise_assult_action_buff.py +++ b/scripts/skillMods/expertise_assult_action_buff.py @@ -1,10 +1,8 @@ import sys -def add(core, actor, name, base): - actor.addSkillMod(name, base) +def add(core, actor, skillMod, value): return - -def deduct(core, actor, name, base): - actor.deductSkillMod(name, base) + +def deduct(core, actor, skillMod, value): return - \ No newline at end of file + \ No newline at end of file diff --git a/scripts/skillMods/expertise_attacker_action_gain.py b/scripts/skillMods/expertise_attacker_action_gain.py index ee7769e2..b5c5e291 100644 --- a/scripts/skillMods/expertise_attacker_action_gain.py +++ b/scripts/skillMods/expertise_attacker_action_gain.py @@ -1,10 +1,8 @@ import sys -def add(core, actor, name, base): - actor.addSkillMod(name, base) +def add(core, actor, skillMod, value): return - -def deduct(core, actor, name, base): - actor.deductSkillMod(name, base) + +def deduct(core, actor, skillMod, value): return \ No newline at end of file diff --git a/scripts/skillMods/expertise_aura_maintain.py b/scripts/skillMods/expertise_aura_maintain.py index ee7769e2..b5c5e291 100644 --- a/scripts/skillMods/expertise_aura_maintain.py +++ b/scripts/skillMods/expertise_aura_maintain.py @@ -1,10 +1,8 @@ import sys -def add(core, actor, name, base): - actor.addSkillMod(name, base) +def add(core, actor, skillMod, value): return - -def deduct(core, actor, name, base): - actor.deductSkillMod(name, base) + +def deduct(core, actor, skillMod, value): return \ No newline at end of file diff --git a/scripts/skillMods/expertise_avoidance_overpower.py b/scripts/skillMods/expertise_avoidance_overpower.py index ee7769e2..b5c5e291 100644 --- a/scripts/skillMods/expertise_avoidance_overpower.py +++ b/scripts/skillMods/expertise_avoidance_overpower.py @@ -1,10 +1,8 @@ import sys -def add(core, actor, name, base): - actor.addSkillMod(name, base) +def add(core, actor, skillMod, value): return - -def deduct(core, actor, name, base): - actor.deductSkillMod(name, base) + +def deduct(core, actor, skillMod, value): return \ No newline at end of file diff --git a/scripts/skillMods/expertise_bh_detect_camo_chance.py b/scripts/skillMods/expertise_bh_detect_camo_chance.py index ee7769e2..b5c5e291 100644 --- a/scripts/skillMods/expertise_bh_detect_camo_chance.py +++ b/scripts/skillMods/expertise_bh_detect_camo_chance.py @@ -1,10 +1,8 @@ import sys -def add(core, actor, name, base): - actor.addSkillMod(name, base) +def add(core, actor, skillMod, value): return - -def deduct(core, actor, name, base): - actor.deductSkillMod(name, base) + +def deduct(core, actor, skillMod, value): return \ No newline at end of file diff --git a/scripts/skillMods/expertise_bm_add_pet_bar.py b/scripts/skillMods/expertise_bm_add_pet_bar.py index ee7769e2..b5c5e291 100644 --- a/scripts/skillMods/expertise_bm_add_pet_bar.py +++ b/scripts/skillMods/expertise_bm_add_pet_bar.py @@ -1,10 +1,8 @@ import sys -def add(core, actor, name, base): - actor.addSkillMod(name, base) +def add(core, actor, skillMod, value): return - -def deduct(core, actor, name, base): - actor.deductSkillMod(name, base) + +def deduct(core, actor, skillMod, value): return \ No newline at end of file diff --git a/scripts/skillMods/expertise_bm_dna_harvesting_1.py b/scripts/skillMods/expertise_bm_dna_harvesting_1.py index ee7769e2..b5c5e291 100644 --- a/scripts/skillMods/expertise_bm_dna_harvesting_1.py +++ b/scripts/skillMods/expertise_bm_dna_harvesting_1.py @@ -1,10 +1,8 @@ import sys -def add(core, actor, name, base): - actor.addSkillMod(name, base) +def add(core, actor, skillMod, value): return - -def deduct(core, actor, name, base): - actor.deductSkillMod(name, base) + +def deduct(core, actor, skillMod, value): return \ No newline at end of file diff --git a/scripts/skillMods/expertise_bm_enhanced_skill_acquisition.py b/scripts/skillMods/expertise_bm_enhanced_skill_acquisition.py index ee7769e2..b5c5e291 100644 --- a/scripts/skillMods/expertise_bm_enhanced_skill_acquisition.py +++ b/scripts/skillMods/expertise_bm_enhanced_skill_acquisition.py @@ -1,10 +1,8 @@ import sys -def add(core, actor, name, base): - actor.addSkillMod(name, base) +def add(core, actor, skillMod, value): return - -def deduct(core, actor, name, base): - actor.deductSkillMod(name, base) + +def deduct(core, actor, skillMod, value): return \ No newline at end of file diff --git a/scripts/skillMods/expertise_bm_enzyme_enhancement.py b/scripts/skillMods/expertise_bm_enzyme_enhancement.py index ee7769e2..b5c5e291 100644 --- a/scripts/skillMods/expertise_bm_enzyme_enhancement.py +++ b/scripts/skillMods/expertise_bm_enzyme_enhancement.py @@ -1,10 +1,8 @@ import sys -def add(core, actor, name, base): - actor.addSkillMod(name, base) +def add(core, actor, skillMod, value): return - -def deduct(core, actor, name, base): - actor.deductSkillMod(name, base) + +def deduct(core, actor, skillMod, value): return \ No newline at end of file diff --git a/scripts/skillMods/expertise_bm_genetic_engineering.py b/scripts/skillMods/expertise_bm_genetic_engineering.py index ee7769e2..b5c5e291 100644 --- a/scripts/skillMods/expertise_bm_genetic_engineering.py +++ b/scripts/skillMods/expertise_bm_genetic_engineering.py @@ -1,10 +1,8 @@ import sys -def add(core, actor, name, base): - actor.addSkillMod(name, base) +def add(core, actor, skillMod, value): return - -def deduct(core, actor, name, base): - actor.deductSkillMod(name, base) + +def deduct(core, actor, skillMod, value): return \ No newline at end of file diff --git a/scripts/skillMods/expertise_bm_improved_pet_heal.py b/scripts/skillMods/expertise_bm_improved_pet_heal.py index ee7769e2..b5c5e291 100644 --- a/scripts/skillMods/expertise_bm_improved_pet_heal.py +++ b/scripts/skillMods/expertise_bm_improved_pet_heal.py @@ -1,10 +1,8 @@ import sys -def add(core, actor, name, base): - actor.addSkillMod(name, base) +def add(core, actor, skillMod, value): return - -def deduct(core, actor, name, base): - actor.deductSkillMod(name, base) + +def deduct(core, actor, skillMod, value): return \ No newline at end of file diff --git a/scripts/skillMods/expertise_bm_incubation_quality.py b/scripts/skillMods/expertise_bm_incubation_quality.py index ee7769e2..b5c5e291 100644 --- a/scripts/skillMods/expertise_bm_incubation_quality.py +++ b/scripts/skillMods/expertise_bm_incubation_quality.py @@ -1,10 +1,8 @@ import sys -def add(core, actor, name, base): - actor.addSkillMod(name, base) +def add(core, actor, skillMod, value): return - -def deduct(core, actor, name, base): - actor.deductSkillMod(name, base) + +def deduct(core, actor, skillMod, value): return \ No newline at end of file diff --git a/scripts/skillMods/expertise_bm_incubation_time.py b/scripts/skillMods/expertise_bm_incubation_time.py index ee7769e2..b5c5e291 100644 --- a/scripts/skillMods/expertise_bm_incubation_time.py +++ b/scripts/skillMods/expertise_bm_incubation_time.py @@ -1,10 +1,8 @@ import sys -def add(core, actor, name, base): - actor.addSkillMod(name, base) +def add(core, actor, skillMod, value): return - -def deduct(core, actor, name, base): - actor.deductSkillMod(name, base) + +def deduct(core, actor, skillMod, value): return \ No newline at end of file diff --git a/scripts/skillMods/expertise_bm_pet_armor.py b/scripts/skillMods/expertise_bm_pet_armor.py index ee7769e2..b5c5e291 100644 --- a/scripts/skillMods/expertise_bm_pet_armor.py +++ b/scripts/skillMods/expertise_bm_pet_armor.py @@ -1,10 +1,8 @@ import sys -def add(core, actor, name, base): - actor.addSkillMod(name, base) +def add(core, actor, skillMod, value): return - -def deduct(core, actor, name, base): - actor.deductSkillMod(name, base) + +def deduct(core, actor, skillMod, value): return \ No newline at end of file diff --git a/scripts/skillMods/expertise_bm_pet_attack_speed.py b/scripts/skillMods/expertise_bm_pet_attack_speed.py index ee7769e2..b5c5e291 100644 --- a/scripts/skillMods/expertise_bm_pet_attack_speed.py +++ b/scripts/skillMods/expertise_bm_pet_attack_speed.py @@ -1,10 +1,8 @@ import sys -def add(core, actor, name, base): - actor.addSkillMod(name, base) +def add(core, actor, skillMod, value): return - -def deduct(core, actor, name, base): - actor.deductSkillMod(name, base) + +def deduct(core, actor, skillMod, value): return \ No newline at end of file diff --git a/scripts/skillMods/expertise_bm_pet_damage.py b/scripts/skillMods/expertise_bm_pet_damage.py index ee7769e2..b5c5e291 100644 --- a/scripts/skillMods/expertise_bm_pet_damage.py +++ b/scripts/skillMods/expertise_bm_pet_damage.py @@ -1,10 +1,8 @@ import sys -def add(core, actor, name, base): - actor.addSkillMod(name, base) +def add(core, actor, skillMod, value): return - -def deduct(core, actor, name, base): - actor.deductSkillMod(name, base) + +def deduct(core, actor, skillMod, value): return \ No newline at end of file diff --git a/scripts/skillMods/expertise_bm_pet_evade_chance.py b/scripts/skillMods/expertise_bm_pet_evade_chance.py index ee7769e2..b5c5e291 100644 --- a/scripts/skillMods/expertise_bm_pet_evade_chance.py +++ b/scripts/skillMods/expertise_bm_pet_evade_chance.py @@ -1,10 +1,8 @@ import sys -def add(core, actor, name, base): - actor.addSkillMod(name, base) +def add(core, actor, skillMod, value): return - -def deduct(core, actor, name, base): - actor.deductSkillMod(name, base) + +def deduct(core, actor, skillMod, value): return \ No newline at end of file diff --git a/scripts/skillMods/expertise_bm_pet_evade_value.py b/scripts/skillMods/expertise_bm_pet_evade_value.py index ee7769e2..b5c5e291 100644 --- a/scripts/skillMods/expertise_bm_pet_evade_value.py +++ b/scripts/skillMods/expertise_bm_pet_evade_value.py @@ -1,10 +1,8 @@ import sys -def add(core, actor, name, base): - actor.addSkillMod(name, base) +def add(core, actor, skillMod, value): return - -def deduct(core, actor, name, base): - actor.deductSkillMod(name, base) + +def deduct(core, actor, skillMod, value): return \ No newline at end of file diff --git a/scripts/skillMods/expertise_bm_pet_happiness.py b/scripts/skillMods/expertise_bm_pet_happiness.py index ee7769e2..b5c5e291 100644 --- a/scripts/skillMods/expertise_bm_pet_happiness.py +++ b/scripts/skillMods/expertise_bm_pet_happiness.py @@ -1,10 +1,8 @@ import sys -def add(core, actor, name, base): - actor.addSkillMod(name, base) +def add(core, actor, skillMod, value): return - -def deduct(core, actor, name, base): - actor.deductSkillMod(name, base) + +def deduct(core, actor, skillMod, value): return \ No newline at end of file diff --git a/scripts/skillMods/expertise_bm_pet_health.py b/scripts/skillMods/expertise_bm_pet_health.py index ee7769e2..b5c5e291 100644 --- a/scripts/skillMods/expertise_bm_pet_health.py +++ b/scripts/skillMods/expertise_bm_pet_health.py @@ -1,10 +1,8 @@ import sys -def add(core, actor, name, base): - actor.addSkillMod(name, base) +def add(core, actor, skillMod, value): return - -def deduct(core, actor, name, base): - actor.deductSkillMod(name, base) + +def deduct(core, actor, skillMod, value): return \ No newline at end of file diff --git a/scripts/skillMods/expertise_bm_pet_movement_rate.py b/scripts/skillMods/expertise_bm_pet_movement_rate.py index ee7769e2..b5c5e291 100644 --- a/scripts/skillMods/expertise_bm_pet_movement_rate.py +++ b/scripts/skillMods/expertise_bm_pet_movement_rate.py @@ -1,10 +1,8 @@ import sys -def add(core, actor, name, base): - actor.addSkillMod(name, base) +def add(core, actor, skillMod, value): return - -def deduct(core, actor, name, base): - actor.deductSkillMod(name, base) + +def deduct(core, actor, skillMod, value): return \ No newline at end of file diff --git a/scripts/skillMods/expertise_bm_pet_recovery.py b/scripts/skillMods/expertise_bm_pet_recovery.py index ee7769e2..b5c5e291 100644 --- a/scripts/skillMods/expertise_bm_pet_recovery.py +++ b/scripts/skillMods/expertise_bm_pet_recovery.py @@ -1,10 +1,8 @@ import sys -def add(core, actor, name, base): - actor.addSkillMod(name, base) +def add(core, actor, skillMod, value): return - -def deduct(core, actor, name, base): - actor.deductSkillMod(name, base) + +def deduct(core, actor, skillMod, value): return \ No newline at end of file diff --git a/scripts/skillMods/expertise_bm_pet_regen.py b/scripts/skillMods/expertise_bm_pet_regen.py index ee7769e2..b5c5e291 100644 --- a/scripts/skillMods/expertise_bm_pet_regen.py +++ b/scripts/skillMods/expertise_bm_pet_regen.py @@ -1,10 +1,8 @@ import sys -def add(core, actor, name, base): - actor.addSkillMod(name, base) +def add(core, actor, skillMod, value): return - -def deduct(core, actor, name, base): - actor.deductSkillMod(name, base) + +def deduct(core, actor, skillMod, value): return \ No newline at end of file diff --git a/scripts/skillMods/expertise_bm_pet_revive_time.py b/scripts/skillMods/expertise_bm_pet_revive_time.py index ee7769e2..b5c5e291 100644 --- a/scripts/skillMods/expertise_bm_pet_revive_time.py +++ b/scripts/skillMods/expertise_bm_pet_revive_time.py @@ -1,10 +1,8 @@ import sys -def add(core, actor, name, base): - actor.addSkillMod(name, base) +def add(core, actor, skillMod, value): return - -def deduct(core, actor, name, base): - actor.deductSkillMod(name, base) + +def deduct(core, actor, skillMod, value): return \ No newline at end of file diff --git a/scripts/skillMods/expertise_bm_self_debuff_reduction.py b/scripts/skillMods/expertise_bm_self_debuff_reduction.py index ee7769e2..b5c5e291 100644 --- a/scripts/skillMods/expertise_bm_self_debuff_reduction.py +++ b/scripts/skillMods/expertise_bm_self_debuff_reduction.py @@ -1,10 +1,8 @@ import sys -def add(core, actor, name, base): - actor.addSkillMod(name, base) +def add(core, actor, skillMod, value): return - -def deduct(core, actor, name, base): - actor.deductSkillMod(name, base) + +def deduct(core, actor, skillMod, value): return \ No newline at end of file diff --git a/scripts/skillMods/expertise_bm_train_mount.py b/scripts/skillMods/expertise_bm_train_mount.py index ee7769e2..b5c5e291 100644 --- a/scripts/skillMods/expertise_bm_train_mount.py +++ b/scripts/skillMods/expertise_bm_train_mount.py @@ -1,10 +1,8 @@ import sys -def add(core, actor, name, base): - actor.addSkillMod(name, base) +def add(core, actor, skillMod, value): return - -def deduct(core, actor, name, base): - actor.deductSkillMod(name, base) + +def deduct(core, actor, skillMod, value): return \ No newline at end of file diff --git a/scripts/skillMods/expertise_buff_best_deal_ever.py b/scripts/skillMods/expertise_buff_best_deal_ever.py index ee7769e2..b5c5e291 100644 --- a/scripts/skillMods/expertise_buff_best_deal_ever.py +++ b/scripts/skillMods/expertise_buff_best_deal_ever.py @@ -1,10 +1,8 @@ import sys -def add(core, actor, name, base): - actor.addSkillMod(name, base) +def add(core, actor, skillMod, value): return - -def deduct(core, actor, name, base): - actor.deductSkillMod(name, base) + +def deduct(core, actor, skillMod, value): return \ No newline at end of file diff --git a/scripts/skillMods/expertise_buff_chance_fs_force_throw_root.py b/scripts/skillMods/expertise_buff_chance_fs_force_throw_root.py index ee7769e2..b5c5e291 100644 --- a/scripts/skillMods/expertise_buff_chance_fs_force_throw_root.py +++ b/scripts/skillMods/expertise_buff_chance_fs_force_throw_root.py @@ -1,10 +1,8 @@ import sys -def add(core, actor, name, base): - actor.addSkillMod(name, base) +def add(core, actor, skillMod, value): return - -def deduct(core, actor, name, base): - actor.deductSkillMod(name, base) + +def deduct(core, actor, skillMod, value): return \ No newline at end of file diff --git a/scripts/skillMods/expertise_buff_chance_line_fs_ae_dm_cc.py b/scripts/skillMods/expertise_buff_chance_line_fs_ae_dm_cc.py index ee7769e2..b5c5e291 100644 --- a/scripts/skillMods/expertise_buff_chance_line_fs_ae_dm_cc.py +++ b/scripts/skillMods/expertise_buff_chance_line_fs_ae_dm_cc.py @@ -1,10 +1,8 @@ import sys -def add(core, actor, name, base): - actor.addSkillMod(name, base) +def add(core, actor, skillMod, value): return - -def deduct(core, actor, name, base): - actor.deductSkillMod(name, base) + +def deduct(core, actor, skillMod, value): return \ No newline at end of file diff --git a/scripts/skillMods/expertise_buff_chance_line_fs_force_throw.py b/scripts/skillMods/expertise_buff_chance_line_fs_force_throw.py index ee7769e2..b5c5e291 100644 --- a/scripts/skillMods/expertise_buff_chance_line_fs_force_throw.py +++ b/scripts/skillMods/expertise_buff_chance_line_fs_force_throw.py @@ -1,10 +1,8 @@ import sys -def add(core, actor, name, base): - actor.addSkillMod(name, base) +def add(core, actor, skillMod, value): return - -def deduct(core, actor, name, base): - actor.deductSkillMod(name, base) + +def deduct(core, actor, skillMod, value): return \ No newline at end of file diff --git a/scripts/skillMods/expertise_buff_chance_line_fs_heal.py b/scripts/skillMods/expertise_buff_chance_line_fs_heal.py index ee7769e2..b5c5e291 100644 --- a/scripts/skillMods/expertise_buff_chance_line_fs_heal.py +++ b/scripts/skillMods/expertise_buff_chance_line_fs_heal.py @@ -1,10 +1,8 @@ import sys -def add(core, actor, name, base): - actor.addSkillMod(name, base) +def add(core, actor, skillMod, value): return - -def deduct(core, actor, name, base): - actor.deductSkillMod(name, base) + +def deduct(core, actor, skillMod, value): return \ No newline at end of file diff --git a/scripts/skillMods/expertise_buff_duration_group_snare.py b/scripts/skillMods/expertise_buff_duration_group_snare.py index ee7769e2..b5c5e291 100644 --- a/scripts/skillMods/expertise_buff_duration_group_snare.py +++ b/scripts/skillMods/expertise_buff_duration_group_snare.py @@ -1,10 +1,8 @@ import sys -def add(core, actor, name, base): - actor.addSkillMod(name, base) +def add(core, actor, skillMod, value): return - -def deduct(core, actor, name, base): - actor.deductSkillMod(name, base) + +def deduct(core, actor, skillMod, value): return \ No newline at end of file diff --git a/scripts/skillMods/expertise_buff_duration_line_bh_return_fire.py b/scripts/skillMods/expertise_buff_duration_line_bh_return_fire.py index ee7769e2..b5c5e291 100644 --- a/scripts/skillMods/expertise_buff_duration_line_bh_return_fire.py +++ b/scripts/skillMods/expertise_buff_duration_line_bh_return_fire.py @@ -1,10 +1,8 @@ import sys -def add(core, actor, name, base): - actor.addSkillMod(name, base) +def add(core, actor, skillMod, value): return - -def deduct(core, actor, name, base): - actor.deductSkillMod(name, base) + +def deduct(core, actor, skillMod, value): return \ No newline at end of file diff --git a/scripts/skillMods/expertise_buff_duration_line_en_debuff_thrill.py b/scripts/skillMods/expertise_buff_duration_line_en_debuff_thrill.py index ee7769e2..b5c5e291 100644 --- a/scripts/skillMods/expertise_buff_duration_line_en_debuff_thrill.py +++ b/scripts/skillMods/expertise_buff_duration_line_en_debuff_thrill.py @@ -1,10 +1,8 @@ import sys -def add(core, actor, name, base): - actor.addSkillMod(name, base) +def add(core, actor, skillMod, value): return - -def deduct(core, actor, name, base): - actor.deductSkillMod(name, base) + +def deduct(core, actor, skillMod, value): return \ No newline at end of file diff --git a/scripts/skillMods/expertise_buff_duration_line_en_unhealthy_fixation_debuff.py b/scripts/skillMods/expertise_buff_duration_line_en_unhealthy_fixation_debuff.py index ee7769e2..b5c5e291 100644 --- a/scripts/skillMods/expertise_buff_duration_line_en_unhealthy_fixation_debuff.py +++ b/scripts/skillMods/expertise_buff_duration_line_en_unhealthy_fixation_debuff.py @@ -1,10 +1,8 @@ import sys -def add(core, actor, name, base): - actor.addSkillMod(name, base) +def add(core, actor, skillMod, value): return - -def deduct(core, actor, name, base): - actor.deductSkillMod(name, base) + +def deduct(core, actor, skillMod, value): return \ No newline at end of file diff --git a/scripts/skillMods/expertise_buff_duration_line_fs_ae_dm_cc.py b/scripts/skillMods/expertise_buff_duration_line_fs_ae_dm_cc.py index ee7769e2..b5c5e291 100644 --- a/scripts/skillMods/expertise_buff_duration_line_fs_ae_dm_cc.py +++ b/scripts/skillMods/expertise_buff_duration_line_fs_ae_dm_cc.py @@ -1,10 +1,8 @@ import sys -def add(core, actor, name, base): - actor.addSkillMod(name, base) +def add(core, actor, skillMod, value): return - -def deduct(core, actor, name, base): - actor.deductSkillMod(name, base) + +def deduct(core, actor, skillMod, value): return \ No newline at end of file diff --git a/scripts/skillMods/expertise_buff_duration_line_fs_dm_cc.py b/scripts/skillMods/expertise_buff_duration_line_fs_dm_cc.py index ee7769e2..b5c5e291 100644 --- a/scripts/skillMods/expertise_buff_duration_line_fs_dm_cc.py +++ b/scripts/skillMods/expertise_buff_duration_line_fs_dm_cc.py @@ -1,10 +1,8 @@ import sys -def add(core, actor, name, base): - actor.addSkillMod(name, base) +def add(core, actor, skillMod, value): return - -def deduct(core, actor, name, base): - actor.deductSkillMod(name, base) + +def deduct(core, actor, skillMod, value): return \ No newline at end of file diff --git a/scripts/skillMods/expertise_buff_duration_line_fs_force_run.py b/scripts/skillMods/expertise_buff_duration_line_fs_force_run.py index ee7769e2..b5c5e291 100644 --- a/scripts/skillMods/expertise_buff_duration_line_fs_force_run.py +++ b/scripts/skillMods/expertise_buff_duration_line_fs_force_run.py @@ -1,10 +1,8 @@ import sys -def add(core, actor, name, base): - actor.addSkillMod(name, base) +def add(core, actor, skillMod, value): return - -def deduct(core, actor, name, base): - actor.deductSkillMod(name, base) + +def deduct(core, actor, skillMod, value): return \ No newline at end of file diff --git a/scripts/skillMods/expertise_buff_duration_line_fs_force_throw.py b/scripts/skillMods/expertise_buff_duration_line_fs_force_throw.py index ee7769e2..b5c5e291 100644 --- a/scripts/skillMods/expertise_buff_duration_line_fs_force_throw.py +++ b/scripts/skillMods/expertise_buff_duration_line_fs_force_throw.py @@ -1,10 +1,8 @@ import sys -def add(core, actor, name, base): - actor.addSkillMod(name, base) +def add(core, actor, skillMod, value): return - -def deduct(core, actor, name, base): - actor.deductSkillMod(name, base) + +def deduct(core, actor, skillMod, value): return \ No newline at end of file diff --git a/scripts/skillMods/expertise_buff_duration_line_fs_heal.py b/scripts/skillMods/expertise_buff_duration_line_fs_heal.py index ee7769e2..b5c5e291 100644 --- a/scripts/skillMods/expertise_buff_duration_line_fs_heal.py +++ b/scripts/skillMods/expertise_buff_duration_line_fs_heal.py @@ -1,10 +1,8 @@ import sys -def add(core, actor, name, base): - actor.addSkillMod(name, base) +def add(core, actor, skillMod, value): return - -def deduct(core, actor, name, base): - actor.deductSkillMod(name, base) + +def deduct(core, actor, skillMod, value): return \ No newline at end of file diff --git a/scripts/skillMods/expertise_buff_duration_line_fs_mind_trick.py b/scripts/skillMods/expertise_buff_duration_line_fs_mind_trick.py index ee7769e2..b5c5e291 100644 --- a/scripts/skillMods/expertise_buff_duration_line_fs_mind_trick.py +++ b/scripts/skillMods/expertise_buff_duration_line_fs_mind_trick.py @@ -1,10 +1,8 @@ import sys -def add(core, actor, name, base): - actor.addSkillMod(name, base) +def add(core, actor, skillMod, value): return - -def deduct(core, actor, name, base): - actor.deductSkillMod(name, base) + +def deduct(core, actor, skillMod, value): return \ No newline at end of file diff --git a/scripts/skillMods/expertise_buff_duration_line_me_debuff.py b/scripts/skillMods/expertise_buff_duration_line_me_debuff.py index ee7769e2..b5c5e291 100644 --- a/scripts/skillMods/expertise_buff_duration_line_me_debuff.py +++ b/scripts/skillMods/expertise_buff_duration_line_me_debuff.py @@ -1,10 +1,8 @@ import sys -def add(core, actor, name, base): - actor.addSkillMod(name, base) +def add(core, actor, skillMod, value): return - -def deduct(core, actor, name, base): - actor.deductSkillMod(name, base) + +def deduct(core, actor, skillMod, value): return \ No newline at end of file diff --git a/scripts/skillMods/expertise_buff_duration_line_me_enhance.py b/scripts/skillMods/expertise_buff_duration_line_me_enhance.py index ee7769e2..b5c5e291 100644 --- a/scripts/skillMods/expertise_buff_duration_line_me_enhance.py +++ b/scripts/skillMods/expertise_buff_duration_line_me_enhance.py @@ -1,10 +1,8 @@ import sys -def add(core, actor, name, base): - actor.addSkillMod(name, base) +def add(core, actor, skillMod, value): return - -def deduct(core, actor, name, base): - actor.deductSkillMod(name, base) + +def deduct(core, actor, skillMod, value): return \ No newline at end of file diff --git a/scripts/skillMods/expertise_buff_duration_line_of_group_buff.py b/scripts/skillMods/expertise_buff_duration_line_of_group_buff.py index f4c71024..b5c5e291 100644 --- a/scripts/skillMods/expertise_buff_duration_line_of_group_buff.py +++ b/scripts/skillMods/expertise_buff_duration_line_of_group_buff.py @@ -1,11 +1,8 @@ import sys -def add(core, actor, name, base): - actor.addSkillMod(name, base) +def add(core, actor, skillMod, value): return - -def deduct(core, actor, name, base): - actor.deductSkillMod(name, base) + +def deduct(core, actor, skillMod, value): return - \ No newline at end of file diff --git a/scripts/skillMods/expertise_buff_duration_line_sm_false_hope.py b/scripts/skillMods/expertise_buff_duration_line_sm_false_hope.py index ee7769e2..b5c5e291 100644 --- a/scripts/skillMods/expertise_buff_duration_line_sm_false_hope.py +++ b/scripts/skillMods/expertise_buff_duration_line_sm_false_hope.py @@ -1,10 +1,8 @@ import sys -def add(core, actor, name, base): - actor.addSkillMod(name, base) +def add(core, actor, skillMod, value): return - -def deduct(core, actor, name, base): - actor.deductSkillMod(name, base) + +def deduct(core, actor, skillMod, value): return \ No newline at end of file diff --git a/scripts/skillMods/expertise_buff_duration_line_sm_impossible_odds.py b/scripts/skillMods/expertise_buff_duration_line_sm_impossible_odds.py index ee7769e2..b5c5e291 100644 --- a/scripts/skillMods/expertise_buff_duration_line_sm_impossible_odds.py +++ b/scripts/skillMods/expertise_buff_duration_line_sm_impossible_odds.py @@ -1,10 +1,8 @@ import sys -def add(core, actor, name, base): - actor.addSkillMod(name, base) +def add(core, actor, skillMod, value): return - -def deduct(core, actor, name, base): - actor.deductSkillMod(name, base) + +def deduct(core, actor, skillMod, value): return \ No newline at end of file diff --git a/scripts/skillMods/expertise_buff_duration_line_sm_skullduggery.py b/scripts/skillMods/expertise_buff_duration_line_sm_skullduggery.py index ee7769e2..b5c5e291 100644 --- a/scripts/skillMods/expertise_buff_duration_line_sm_skullduggery.py +++ b/scripts/skillMods/expertise_buff_duration_line_sm_skullduggery.py @@ -1,10 +1,8 @@ import sys -def add(core, actor, name, base): - actor.addSkillMod(name, base) +def add(core, actor, skillMod, value): return - -def deduct(core, actor, name, base): - actor.deductSkillMod(name, base) + +def deduct(core, actor, skillMod, value): return \ No newline at end of file diff --git a/scripts/skillMods/expertise_buff_duration_line_sp_burst_shadows.py b/scripts/skillMods/expertise_buff_duration_line_sp_burst_shadows.py index ee7769e2..b5c5e291 100644 --- a/scripts/skillMods/expertise_buff_duration_line_sp_burst_shadows.py +++ b/scripts/skillMods/expertise_buff_duration_line_sp_burst_shadows.py @@ -1,10 +1,8 @@ import sys -def add(core, actor, name, base): - actor.addSkillMod(name, base) +def add(core, actor, skillMod, value): return - -def deduct(core, actor, name, base): - actor.deductSkillMod(name, base) + +def deduct(core, actor, skillMod, value): return \ No newline at end of file diff --git a/scripts/skillMods/expertise_buff_duration_line_sp_decoy.py b/scripts/skillMods/expertise_buff_duration_line_sp_decoy.py index ee7769e2..b5c5e291 100644 --- a/scripts/skillMods/expertise_buff_duration_line_sp_decoy.py +++ b/scripts/skillMods/expertise_buff_duration_line_sp_decoy.py @@ -1,10 +1,8 @@ import sys -def add(core, actor, name, base): - actor.addSkillMod(name, base) +def add(core, actor, skillMod, value): return - -def deduct(core, actor, name, base): - actor.deductSkillMod(name, base) + +def deduct(core, actor, skillMod, value): return \ No newline at end of file diff --git a/scripts/skillMods/expertise_buff_duration_line_sp_preparation.py b/scripts/skillMods/expertise_buff_duration_line_sp_preparation.py index ee7769e2..b5c5e291 100644 --- a/scripts/skillMods/expertise_buff_duration_line_sp_preparation.py +++ b/scripts/skillMods/expertise_buff_duration_line_sp_preparation.py @@ -1,10 +1,8 @@ import sys -def add(core, actor, name, base): - actor.addSkillMod(name, base) +def add(core, actor, skillMod, value): return - -def deduct(core, actor, name, base): - actor.deductSkillMod(name, base) + +def deduct(core, actor, skillMod, value): return \ No newline at end of file diff --git a/scripts/skillMods/expertise_buff_en_void_dance_buff.py b/scripts/skillMods/expertise_buff_en_void_dance_buff.py index ee7769e2..b5c5e291 100644 --- a/scripts/skillMods/expertise_buff_en_void_dance_buff.py +++ b/scripts/skillMods/expertise_buff_en_void_dance_buff.py @@ -1,10 +1,8 @@ import sys -def add(core, actor, name, base): - actor.addSkillMod(name, base) +def add(core, actor, skillMod, value): return - -def deduct(core, actor, name, base): - actor.deductSkillMod(name, base) + +def deduct(core, actor, skillMod, value): return \ No newline at end of file diff --git a/scripts/skillMods/expertise_burst_fire_devastation_bonus.py b/scripts/skillMods/expertise_burst_fire_devastation_bonus.py index ee7769e2..b5c5e291 100644 --- a/scripts/skillMods/expertise_burst_fire_devastation_bonus.py +++ b/scripts/skillMods/expertise_burst_fire_devastation_bonus.py @@ -1,10 +1,8 @@ import sys -def add(core, actor, name, base): - actor.addSkillMod(name, base) +def add(core, actor, skillMod, value): return - -def deduct(core, actor, name, base): - actor.deductSkillMod(name, base) + +def deduct(core, actor, skillMod, value): return \ No newline at end of file diff --git a/scripts/skillMods/expertise_co_burst_fire_proc.py b/scripts/skillMods/expertise_co_burst_fire_proc.py index ee7769e2..b5c5e291 100644 --- a/scripts/skillMods/expertise_co_burst_fire_proc.py +++ b/scripts/skillMods/expertise_co_burst_fire_proc.py @@ -1,10 +1,8 @@ import sys -def add(core, actor, name, base): - actor.addSkillMod(name, base) +def add(core, actor, skillMod, value): return - -def deduct(core, actor, name, base): - actor.deductSkillMod(name, base) + +def deduct(core, actor, skillMod, value): return \ No newline at end of file diff --git a/scripts/skillMods/expertise_co_flash_bang.py b/scripts/skillMods/expertise_co_flash_bang.py index ee7769e2..b5c5e291 100644 --- a/scripts/skillMods/expertise_co_flash_bang.py +++ b/scripts/skillMods/expertise_co_flash_bang.py @@ -1,10 +1,8 @@ import sys -def add(core, actor, name, base): - actor.addSkillMod(name, base) +def add(core, actor, skillMod, value): return - -def deduct(core, actor, name, base): - actor.deductSkillMod(name, base) + +def deduct(core, actor, skillMod, value): return \ No newline at end of file diff --git a/scripts/skillMods/expertise_co_muscle_spasm.py b/scripts/skillMods/expertise_co_muscle_spasm.py index ee7769e2..b5c5e291 100644 --- a/scripts/skillMods/expertise_co_muscle_spasm.py +++ b/scripts/skillMods/expertise_co_muscle_spasm.py @@ -1,10 +1,8 @@ import sys -def add(core, actor, name, base): - actor.addSkillMod(name, base) +def add(core, actor, skillMod, value): return - -def deduct(core, actor, name, base): - actor.deductSkillMod(name, base) + +def deduct(core, actor, skillMod, value): return \ No newline at end of file diff --git a/scripts/skillMods/expertise_complexity_decrease_architect.py b/scripts/skillMods/expertise_complexity_decrease_architect.py index ee7769e2..b5c5e291 100644 --- a/scripts/skillMods/expertise_complexity_decrease_architect.py +++ b/scripts/skillMods/expertise_complexity_decrease_architect.py @@ -1,10 +1,8 @@ import sys -def add(core, actor, name, base): - actor.addSkillMod(name, base) +def add(core, actor, skillMod, value): return - -def deduct(core, actor, name, base): - actor.deductSkillMod(name, base) + +def deduct(core, actor, skillMod, value): return \ No newline at end of file diff --git a/scripts/skillMods/expertise_complexity_decrease_armorsmith.py b/scripts/skillMods/expertise_complexity_decrease_armorsmith.py index ee7769e2..b5c5e291 100644 --- a/scripts/skillMods/expertise_complexity_decrease_armorsmith.py +++ b/scripts/skillMods/expertise_complexity_decrease_armorsmith.py @@ -1,10 +1,8 @@ import sys -def add(core, actor, name, base): - actor.addSkillMod(name, base) +def add(core, actor, skillMod, value): return - -def deduct(core, actor, name, base): - actor.deductSkillMod(name, base) + +def deduct(core, actor, skillMod, value): return \ No newline at end of file diff --git a/scripts/skillMods/expertise_complexity_decrease_chef.py b/scripts/skillMods/expertise_complexity_decrease_chef.py index ee7769e2..b5c5e291 100644 --- a/scripts/skillMods/expertise_complexity_decrease_chef.py +++ b/scripts/skillMods/expertise_complexity_decrease_chef.py @@ -1,10 +1,8 @@ import sys -def add(core, actor, name, base): - actor.addSkillMod(name, base) +def add(core, actor, skillMod, value): return - -def deduct(core, actor, name, base): - actor.deductSkillMod(name, base) + +def deduct(core, actor, skillMod, value): return \ No newline at end of file diff --git a/scripts/skillMods/expertise_complexity_decrease_droid.py b/scripts/skillMods/expertise_complexity_decrease_droid.py index ee7769e2..b5c5e291 100644 --- a/scripts/skillMods/expertise_complexity_decrease_droid.py +++ b/scripts/skillMods/expertise_complexity_decrease_droid.py @@ -1,10 +1,8 @@ import sys -def add(core, actor, name, base): - actor.addSkillMod(name, base) +def add(core, actor, skillMod, value): return - -def deduct(core, actor, name, base): - actor.deductSkillMod(name, base) + +def deduct(core, actor, skillMod, value): return \ No newline at end of file diff --git a/scripts/skillMods/expertise_complexity_decrease_shipwright.py b/scripts/skillMods/expertise_complexity_decrease_shipwright.py index ee7769e2..b5c5e291 100644 --- a/scripts/skillMods/expertise_complexity_decrease_shipwright.py +++ b/scripts/skillMods/expertise_complexity_decrease_shipwright.py @@ -1,10 +1,8 @@ import sys -def add(core, actor, name, base): - actor.addSkillMod(name, base) +def add(core, actor, skillMod, value): return - -def deduct(core, actor, name, base): - actor.deductSkillMod(name, base) + +def deduct(core, actor, skillMod, value): return \ No newline at end of file diff --git a/scripts/skillMods/expertise_complexity_decrease_tailor.py b/scripts/skillMods/expertise_complexity_decrease_tailor.py index ee7769e2..b5c5e291 100644 --- a/scripts/skillMods/expertise_complexity_decrease_tailor.py +++ b/scripts/skillMods/expertise_complexity_decrease_tailor.py @@ -1,10 +1,8 @@ import sys -def add(core, actor, name, base): - actor.addSkillMod(name, base) +def add(core, actor, skillMod, value): return - -def deduct(core, actor, name, base): - actor.deductSkillMod(name, base) + +def deduct(core, actor, skillMod, value): return \ No newline at end of file diff --git a/scripts/skillMods/expertise_complexity_decrease_weaponsmith.py b/scripts/skillMods/expertise_complexity_decrease_weaponsmith.py index ee7769e2..b5c5e291 100644 --- a/scripts/skillMods/expertise_complexity_decrease_weaponsmith.py +++ b/scripts/skillMods/expertise_complexity_decrease_weaponsmith.py @@ -1,10 +1,8 @@ import sys -def add(core, actor, name, base): - actor.addSkillMod(name, base) +def add(core, actor, skillMod, value): return - -def deduct(core, actor, name, base): - actor.deductSkillMod(name, base) + +def deduct(core, actor, skillMod, value): return \ No newline at end of file diff --git a/scripts/skillMods/expertise_cooldown_line_bh_flawless_strike.py b/scripts/skillMods/expertise_cooldown_line_bh_flawless_strike.py index ee7769e2..b5c5e291 100644 --- a/scripts/skillMods/expertise_cooldown_line_bh_flawless_strike.py +++ b/scripts/skillMods/expertise_cooldown_line_bh_flawless_strike.py @@ -1,10 +1,8 @@ import sys -def add(core, actor, name, base): - actor.addSkillMod(name, base) +def add(core, actor, skillMod, value): return - -def deduct(core, actor, name, base): - actor.deductSkillMod(name, base) + +def deduct(core, actor, skillMod, value): return \ No newline at end of file diff --git a/scripts/skillMods/expertise_cooldown_line_bh_return_fire.py b/scripts/skillMods/expertise_cooldown_line_bh_return_fire.py index ee7769e2..b5c5e291 100644 --- a/scripts/skillMods/expertise_cooldown_line_bh_return_fire.py +++ b/scripts/skillMods/expertise_cooldown_line_bh_return_fire.py @@ -1,10 +1,8 @@ import sys -def add(core, actor, name, base): - actor.addSkillMod(name, base) +def add(core, actor, skillMod, value): return - -def deduct(core, actor, name, base): - actor.deductSkillMod(name, base) + +def deduct(core, actor, skillMod, value): return \ No newline at end of file diff --git a/scripts/skillMods/expertise_cooldown_line_co_riddle_armor.py b/scripts/skillMods/expertise_cooldown_line_co_riddle_armor.py index ee7769e2..b5c5e291 100644 --- a/scripts/skillMods/expertise_cooldown_line_co_riddle_armor.py +++ b/scripts/skillMods/expertise_cooldown_line_co_riddle_armor.py @@ -1,10 +1,8 @@ import sys -def add(core, actor, name, base): - actor.addSkillMod(name, base) +def add(core, actor, skillMod, value): return - -def deduct(core, actor, name, base): - actor.deductSkillMod(name, base) + +def deduct(core, actor, skillMod, value): return \ No newline at end of file diff --git a/scripts/skillMods/expertise_cooldown_line_dm.py b/scripts/skillMods/expertise_cooldown_line_dm.py index ee7769e2..b5c5e291 100644 --- a/scripts/skillMods/expertise_cooldown_line_dm.py +++ b/scripts/skillMods/expertise_cooldown_line_dm.py @@ -1,10 +1,8 @@ import sys -def add(core, actor, name, base): - actor.addSkillMod(name, base) +def add(core, actor, skillMod, value): return - -def deduct(core, actor, name, base): - actor.deductSkillMod(name, base) + +def deduct(core, actor, skillMod, value): return \ No newline at end of file diff --git a/scripts/skillMods/expertise_cooldown_line_dm_cc.py b/scripts/skillMods/expertise_cooldown_line_dm_cc.py index ee7769e2..b5c5e291 100644 --- a/scripts/skillMods/expertise_cooldown_line_dm_cc.py +++ b/scripts/skillMods/expertise_cooldown_line_dm_cc.py @@ -1,10 +1,8 @@ import sys -def add(core, actor, name, base): - actor.addSkillMod(name, base) +def add(core, actor, skillMod, value): return - -def deduct(core, actor, name, base): - actor.deductSkillMod(name, base) + +def deduct(core, actor, skillMod, value): return \ No newline at end of file diff --git a/scripts/skillMods/expertise_cooldown_line_dm_crit.py b/scripts/skillMods/expertise_cooldown_line_dm_crit.py index ee7769e2..b5c5e291 100644 --- a/scripts/skillMods/expertise_cooldown_line_dm_crit.py +++ b/scripts/skillMods/expertise_cooldown_line_dm_crit.py @@ -1,10 +1,8 @@ import sys -def add(core, actor, name, base): - actor.addSkillMod(name, base) +def add(core, actor, skillMod, value): return - -def deduct(core, actor, name, base): - actor.deductSkillMod(name, base) + +def deduct(core, actor, skillMod, value): return \ No newline at end of file diff --git a/scripts/skillMods/expertise_cooldown_line_fs_ae_dm_cc.py b/scripts/skillMods/expertise_cooldown_line_fs_ae_dm_cc.py index ee7769e2..b5c5e291 100644 --- a/scripts/skillMods/expertise_cooldown_line_fs_ae_dm_cc.py +++ b/scripts/skillMods/expertise_cooldown_line_fs_ae_dm_cc.py @@ -1,10 +1,8 @@ import sys -def add(core, actor, name, base): - actor.addSkillMod(name, base) +def add(core, actor, skillMod, value): return - -def deduct(core, actor, name, base): - actor.deductSkillMod(name, base) + +def deduct(core, actor, skillMod, value): return \ No newline at end of file diff --git a/scripts/skillMods/expertise_cooldown_line_fs_cc_crit.py b/scripts/skillMods/expertise_cooldown_line_fs_cc_crit.py index ee7769e2..b5c5e291 100644 --- a/scripts/skillMods/expertise_cooldown_line_fs_cc_crit.py +++ b/scripts/skillMods/expertise_cooldown_line_fs_cc_crit.py @@ -1,10 +1,8 @@ import sys -def add(core, actor, name, base): - actor.addSkillMod(name, base) +def add(core, actor, skillMod, value): return - -def deduct(core, actor, name, base): - actor.deductSkillMod(name, base) + +def deduct(core, actor, skillMod, value): return \ No newline at end of file diff --git a/scripts/skillMods/expertise_cooldown_line_fs_dm.py b/scripts/skillMods/expertise_cooldown_line_fs_dm.py index ee7769e2..b5c5e291 100644 --- a/scripts/skillMods/expertise_cooldown_line_fs_dm.py +++ b/scripts/skillMods/expertise_cooldown_line_fs_dm.py @@ -1,10 +1,8 @@ import sys -def add(core, actor, name, base): - actor.addSkillMod(name, base) +def add(core, actor, skillMod, value): return - -def deduct(core, actor, name, base): - actor.deductSkillMod(name, base) + +def deduct(core, actor, skillMod, value): return \ No newline at end of file diff --git a/scripts/skillMods/expertise_cooldown_line_fs_sweep.py b/scripts/skillMods/expertise_cooldown_line_fs_sweep.py index ee7769e2..b5c5e291 100644 --- a/scripts/skillMods/expertise_cooldown_line_fs_sweep.py +++ b/scripts/skillMods/expertise_cooldown_line_fs_sweep.py @@ -1,10 +1,8 @@ import sys -def add(core, actor, name, base): - actor.addSkillMod(name, base) +def add(core, actor, skillMod, value): return - -def deduct(core, actor, name, base): - actor.deductSkillMod(name, base) + +def deduct(core, actor, skillMod, value): return \ No newline at end of file diff --git a/scripts/skillMods/expertise_cooldown_line_me_aoe_revive.py b/scripts/skillMods/expertise_cooldown_line_me_aoe_revive.py index ee7769e2..b5c5e291 100644 --- a/scripts/skillMods/expertise_cooldown_line_me_aoe_revive.py +++ b/scripts/skillMods/expertise_cooldown_line_me_aoe_revive.py @@ -1,10 +1,8 @@ import sys -def add(core, actor, name, base): - actor.addSkillMod(name, base) +def add(core, actor, skillMod, value): return - -def deduct(core, actor, name, base): - actor.deductSkillMod(name, base) + +def deduct(core, actor, skillMod, value): return \ No newline at end of file diff --git a/scripts/skillMods/expertise_cooldown_line_me_dot.py b/scripts/skillMods/expertise_cooldown_line_me_dot.py index ee7769e2..b5c5e291 100644 --- a/scripts/skillMods/expertise_cooldown_line_me_dot.py +++ b/scripts/skillMods/expertise_cooldown_line_me_dot.py @@ -1,10 +1,8 @@ import sys -def add(core, actor, name, base): - actor.addSkillMod(name, base) +def add(core, actor, skillMod, value): return - -def deduct(core, actor, name, base): - actor.deductSkillMod(name, base) + +def deduct(core, actor, skillMod, value): return \ No newline at end of file diff --git a/scripts/skillMods/expertise_cooldown_line_me_evasion.py b/scripts/skillMods/expertise_cooldown_line_me_evasion.py index ee7769e2..b5c5e291 100644 --- a/scripts/skillMods/expertise_cooldown_line_me_evasion.py +++ b/scripts/skillMods/expertise_cooldown_line_me_evasion.py @@ -1,10 +1,8 @@ import sys -def add(core, actor, name, base): - actor.addSkillMod(name, base) +def add(core, actor, skillMod, value): return - -def deduct(core, actor, name, base): - actor.deductSkillMod(name, base) + +def deduct(core, actor, skillMod, value): return \ No newline at end of file diff --git a/scripts/skillMods/expertise_cooldown_line_me_revive.py b/scripts/skillMods/expertise_cooldown_line_me_revive.py index ee7769e2..b5c5e291 100644 --- a/scripts/skillMods/expertise_cooldown_line_me_revive.py +++ b/scripts/skillMods/expertise_cooldown_line_me_revive.py @@ -1,10 +1,8 @@ import sys -def add(core, actor, name, base): - actor.addSkillMod(name, base) +def add(core, actor, skillMod, value): return - -def deduct(core, actor, name, base): - actor.deductSkillMod(name, base) + +def deduct(core, actor, skillMod, value): return \ No newline at end of file diff --git a/scripts/skillMods/expertise_cooldown_line_me_stasis_self.py b/scripts/skillMods/expertise_cooldown_line_me_stasis_self.py index ee7769e2..b5c5e291 100644 --- a/scripts/skillMods/expertise_cooldown_line_me_stasis_self.py +++ b/scripts/skillMods/expertise_cooldown_line_me_stasis_self.py @@ -1,10 +1,8 @@ import sys -def add(core, actor, name, base): - actor.addSkillMod(name, base) +def add(core, actor, skillMod, value): return - -def deduct(core, actor, name, base): - actor.deductSkillMod(name, base) + +def deduct(core, actor, skillMod, value): return \ No newline at end of file diff --git a/scripts/skillMods/expertise_cooldown_line_of_firepower.py b/scripts/skillMods/expertise_cooldown_line_of_firepower.py index ab7fca99..b5c5e291 100644 --- a/scripts/skillMods/expertise_cooldown_line_of_firepower.py +++ b/scripts/skillMods/expertise_cooldown_line_of_firepower.py @@ -1,19 +1,8 @@ import sys -def add(core, actor, name, base): - actor.addSkillMod(name, base) +def add(core, actor, skillMod, value): return - -def deduct(core, actor, name, base): - actor.deductSkillMod(name, base) - return - import sys -def add(core, actor, name, base): - actor.addSkillMod(name, base) - return - -def deduct(core, actor, name, base): - actor.deductSkillMod(name, base) +def deduct(core, actor, skillMod, value): return \ No newline at end of file diff --git a/scripts/skillMods/expertise_cooldown_line_of_heal.py b/scripts/skillMods/expertise_cooldown_line_of_heal.py index ee7769e2..b5c5e291 100644 --- a/scripts/skillMods/expertise_cooldown_line_of_heal.py +++ b/scripts/skillMods/expertise_cooldown_line_of_heal.py @@ -1,10 +1,8 @@ import sys -def add(core, actor, name, base): - actor.addSkillMod(name, base) +def add(core, actor, skillMod, value): return - -def deduct(core, actor, name, base): - actor.deductSkillMod(name, base) + +def deduct(core, actor, skillMod, value): return \ No newline at end of file diff --git a/scripts/skillMods/expertise_cooldown_line_of_paint.py b/scripts/skillMods/expertise_cooldown_line_of_paint.py index ee7769e2..b5c5e291 100644 --- a/scripts/skillMods/expertise_cooldown_line_of_paint.py +++ b/scripts/skillMods/expertise_cooldown_line_of_paint.py @@ -1,10 +1,8 @@ import sys -def add(core, actor, name, base): - actor.addSkillMod(name, base) +def add(core, actor, skillMod, value): return - -def deduct(core, actor, name, base): - actor.deductSkillMod(name, base) + +def deduct(core, actor, skillMod, value): return \ No newline at end of file diff --git a/scripts/skillMods/expertise_cooldown_line_of_purge.py b/scripts/skillMods/expertise_cooldown_line_of_purge.py index ee7769e2..b5c5e291 100644 --- a/scripts/skillMods/expertise_cooldown_line_of_purge.py +++ b/scripts/skillMods/expertise_cooldown_line_of_purge.py @@ -1,10 +1,8 @@ import sys -def add(core, actor, name, base): - actor.addSkillMod(name, base) +def add(core, actor, skillMod, value): return - -def deduct(core, actor, name, base): - actor.deductSkillMod(name, base) + +def deduct(core, actor, skillMod, value): return \ No newline at end of file diff --git a/scripts/skillMods/expertise_cooldown_line_of_sup.py b/scripts/skillMods/expertise_cooldown_line_of_sup.py index ee7769e2..b5c5e291 100644 --- a/scripts/skillMods/expertise_cooldown_line_of_sup.py +++ b/scripts/skillMods/expertise_cooldown_line_of_sup.py @@ -1,10 +1,8 @@ import sys -def add(core, actor, name, base): - actor.addSkillMod(name, base) +def add(core, actor, skillMod, value): return - -def deduct(core, actor, name, base): - actor.deductSkillMod(name, base) + +def deduct(core, actor, skillMod, value): return \ No newline at end of file diff --git a/scripts/skillMods/expertise_cooldown_line_of_sure.py b/scripts/skillMods/expertise_cooldown_line_of_sure.py index ee7769e2..b5c5e291 100644 --- a/scripts/skillMods/expertise_cooldown_line_of_sure.py +++ b/scripts/skillMods/expertise_cooldown_line_of_sure.py @@ -1,10 +1,8 @@ import sys -def add(core, actor, name, base): - actor.addSkillMod(name, base) +def add(core, actor, skillMod, value): return - -def deduct(core, actor, name, base): - actor.deductSkillMod(name, base) + +def deduct(core, actor, skillMod, value): return \ No newline at end of file diff --git a/scripts/skillMods/expertise_cooldown_line_sh.py b/scripts/skillMods/expertise_cooldown_line_sh.py index ee7769e2..b5c5e291 100644 --- a/scripts/skillMods/expertise_cooldown_line_sh.py +++ b/scripts/skillMods/expertise_cooldown_line_sh.py @@ -1,10 +1,8 @@ import sys -def add(core, actor, name, base): - actor.addSkillMod(name, base) +def add(core, actor, skillMod, value): return - -def deduct(core, actor, name, base): - actor.deductSkillMod(name, base) + +def deduct(core, actor, skillMod, value): return \ No newline at end of file diff --git a/scripts/skillMods/expertise_cooldown_line_sm_dm.py b/scripts/skillMods/expertise_cooldown_line_sm_dm.py index ee7769e2..b5c5e291 100644 --- a/scripts/skillMods/expertise_cooldown_line_sm_dm.py +++ b/scripts/skillMods/expertise_cooldown_line_sm_dm.py @@ -1,10 +1,8 @@ import sys -def add(core, actor, name, base): - actor.addSkillMod(name, base) +def add(core, actor, skillMod, value): return - -def deduct(core, actor, name, base): - actor.deductSkillMod(name, base) + +def deduct(core, actor, skillMod, value): return \ No newline at end of file diff --git a/scripts/skillMods/expertise_cooldown_line_sm_dm_cc.py b/scripts/skillMods/expertise_cooldown_line_sm_dm_cc.py index ee7769e2..b5c5e291 100644 --- a/scripts/skillMods/expertise_cooldown_line_sm_dm_cc.py +++ b/scripts/skillMods/expertise_cooldown_line_sm_dm_cc.py @@ -1,10 +1,8 @@ import sys -def add(core, actor, name, base): - actor.addSkillMod(name, base) +def add(core, actor, skillMod, value): return - -def deduct(core, actor, name, base): - actor.deductSkillMod(name, base) + +def deduct(core, actor, skillMod, value): return \ No newline at end of file diff --git a/scripts/skillMods/expertise_cooldown_line_sm_false_hope.py b/scripts/skillMods/expertise_cooldown_line_sm_false_hope.py index ee7769e2..b5c5e291 100644 --- a/scripts/skillMods/expertise_cooldown_line_sm_false_hope.py +++ b/scripts/skillMods/expertise_cooldown_line_sm_false_hope.py @@ -1,10 +1,8 @@ import sys -def add(core, actor, name, base): - actor.addSkillMod(name, base) +def add(core, actor, skillMod, value): return - -def deduct(core, actor, name, base): - actor.deductSkillMod(name, base) + +def deduct(core, actor, skillMod, value): return \ No newline at end of file diff --git a/scripts/skillMods/expertise_cooldown_line_sp_burst_of_shadows.py b/scripts/skillMods/expertise_cooldown_line_sp_burst_of_shadows.py index ee7769e2..b5c5e291 100644 --- a/scripts/skillMods/expertise_cooldown_line_sp_burst_of_shadows.py +++ b/scripts/skillMods/expertise_cooldown_line_sp_burst_of_shadows.py @@ -1,10 +1,8 @@ import sys -def add(core, actor, name, base): - actor.addSkillMod(name, base) +def add(core, actor, skillMod, value): return - -def deduct(core, actor, name, base): - actor.deductSkillMod(name, base) + +def deduct(core, actor, skillMod, value): return \ No newline at end of file diff --git a/scripts/skillMods/expertise_cooldown_line_sp_dm.py b/scripts/skillMods/expertise_cooldown_line_sp_dm.py index ee7769e2..b5c5e291 100644 --- a/scripts/skillMods/expertise_cooldown_line_sp_dm.py +++ b/scripts/skillMods/expertise_cooldown_line_sp_dm.py @@ -1,10 +1,8 @@ import sys -def add(core, actor, name, base): - actor.addSkillMod(name, base) +def add(core, actor, skillMod, value): return - -def deduct(core, actor, name, base): - actor.deductSkillMod(name, base) + +def deduct(core, actor, skillMod, value): return \ No newline at end of file diff --git a/scripts/skillMods/expertise_cooldown_line_sp_preparation.py b/scripts/skillMods/expertise_cooldown_line_sp_preparation.py index ee7769e2..b5c5e291 100644 --- a/scripts/skillMods/expertise_cooldown_line_sp_preparation.py +++ b/scripts/skillMods/expertise_cooldown_line_sp_preparation.py @@ -1,10 +1,8 @@ import sys -def add(core, actor, name, base): - actor.addSkillMod(name, base) +def add(core, actor, skillMod, value): return - -def deduct(core, actor, name, base): - actor.deductSkillMod(name, base) + +def deduct(core, actor, skillMod, value): return \ No newline at end of file diff --git a/scripts/skillMods/expertise_cooldown_line_sp_reveal_shadows.py b/scripts/skillMods/expertise_cooldown_line_sp_reveal_shadows.py index ee7769e2..b5c5e291 100644 --- a/scripts/skillMods/expertise_cooldown_line_sp_reveal_shadows.py +++ b/scripts/skillMods/expertise_cooldown_line_sp_reveal_shadows.py @@ -1,10 +1,8 @@ import sys -def add(core, actor, name, base): - actor.addSkillMod(name, base) +def add(core, actor, skillMod, value): return - -def deduct(core, actor, name, base): - actor.deductSkillMod(name, base) + +def deduct(core, actor, skillMod, value): return \ No newline at end of file diff --git a/scripts/skillMods/expertise_cooldown_line_sp_smoke.py b/scripts/skillMods/expertise_cooldown_line_sp_smoke.py index ee7769e2..b5c5e291 100644 --- a/scripts/skillMods/expertise_cooldown_line_sp_smoke.py +++ b/scripts/skillMods/expertise_cooldown_line_sp_smoke.py @@ -1,10 +1,8 @@ import sys -def add(core, actor, name, base): - actor.addSkillMod(name, base) +def add(core, actor, skillMod, value): return - -def deduct(core, actor, name, base): - actor.deductSkillMod(name, base) + +def deduct(core, actor, skillMod, value): return \ No newline at end of file diff --git a/scripts/skillMods/expertise_cooldown_line_sp_without_trace.py b/scripts/skillMods/expertise_cooldown_line_sp_without_trace.py index ee7769e2..b5c5e291 100644 --- a/scripts/skillMods/expertise_cooldown_line_sp_without_trace.py +++ b/scripts/skillMods/expertise_cooldown_line_sp_without_trace.py @@ -1,10 +1,8 @@ import sys -def add(core, actor, name, base): - actor.addSkillMod(name, base) +def add(core, actor, skillMod, value): return - -def deduct(core, actor, name, base): - actor.deductSkillMod(name, base) + +def deduct(core, actor, skillMod, value): return \ No newline at end of file diff --git a/scripts/skillMods/expertise_critical_1h.py b/scripts/skillMods/expertise_critical_1h.py index ee7769e2..b5c5e291 100644 --- a/scripts/skillMods/expertise_critical_1h.py +++ b/scripts/skillMods/expertise_critical_1h.py @@ -1,10 +1,8 @@ import sys -def add(core, actor, name, base): - actor.addSkillMod(name, base) +def add(core, actor, skillMod, value): return - -def deduct(core, actor, name, base): - actor.deductSkillMod(name, base) + +def deduct(core, actor, skillMod, value): return \ No newline at end of file diff --git a/scripts/skillMods/expertise_critical_2h.py b/scripts/skillMods/expertise_critical_2h.py index ee7769e2..b5c5e291 100644 --- a/scripts/skillMods/expertise_critical_2h.py +++ b/scripts/skillMods/expertise_critical_2h.py @@ -1,10 +1,8 @@ import sys -def add(core, actor, name, base): - actor.addSkillMod(name, base) +def add(core, actor, skillMod, value): return - -def deduct(core, actor, name, base): - actor.deductSkillMod(name, base) + +def deduct(core, actor, skillMod, value): return \ No newline at end of file diff --git a/scripts/skillMods/expertise_critical_carbine.py b/scripts/skillMods/expertise_critical_carbine.py index ee7769e2..b5c5e291 100644 --- a/scripts/skillMods/expertise_critical_carbine.py +++ b/scripts/skillMods/expertise_critical_carbine.py @@ -1,10 +1,8 @@ import sys -def add(core, actor, name, base): - actor.addSkillMod(name, base) +def add(core, actor, skillMod, value): return - -def deduct(core, actor, name, base): - actor.deductSkillMod(name, base) + +def deduct(core, actor, skillMod, value): return \ No newline at end of file diff --git a/scripts/skillMods/expertise_critical_heavy.py b/scripts/skillMods/expertise_critical_heavy.py index ee7769e2..b5c5e291 100644 --- a/scripts/skillMods/expertise_critical_heavy.py +++ b/scripts/skillMods/expertise_critical_heavy.py @@ -1,10 +1,8 @@ import sys -def add(core, actor, name, base): - actor.addSkillMod(name, base) +def add(core, actor, skillMod, value): return - -def deduct(core, actor, name, base): - actor.deductSkillMod(name, base) + +def deduct(core, actor, skillMod, value): return \ No newline at end of file diff --git a/scripts/skillMods/expertise_critical_line_co_dm.py b/scripts/skillMods/expertise_critical_line_co_dm.py index ee7769e2..b5c5e291 100644 --- a/scripts/skillMods/expertise_critical_line_co_dm.py +++ b/scripts/skillMods/expertise_critical_line_co_dm.py @@ -1,10 +1,8 @@ import sys -def add(core, actor, name, base): - actor.addSkillMod(name, base) +def add(core, actor, skillMod, value): return - -def deduct(core, actor, name, base): - actor.deductSkillMod(name, base) + +def deduct(core, actor, skillMod, value): return \ No newline at end of file diff --git a/scripts/skillMods/expertise_critical_line_dm.py b/scripts/skillMods/expertise_critical_line_dm.py index ee7769e2..b5c5e291 100644 --- a/scripts/skillMods/expertise_critical_line_dm.py +++ b/scripts/skillMods/expertise_critical_line_dm.py @@ -1,10 +1,8 @@ import sys -def add(core, actor, name, base): - actor.addSkillMod(name, base) +def add(core, actor, skillMod, value): return - -def deduct(core, actor, name, base): - actor.deductSkillMod(name, base) + +def deduct(core, actor, skillMod, value): return \ No newline at end of file diff --git a/scripts/skillMods/expertise_critical_line_dm_crit.py b/scripts/skillMods/expertise_critical_line_dm_crit.py index ee7769e2..b5c5e291 100644 --- a/scripts/skillMods/expertise_critical_line_dm_crit.py +++ b/scripts/skillMods/expertise_critical_line_dm_crit.py @@ -1,10 +1,8 @@ import sys -def add(core, actor, name, base): - actor.addSkillMod(name, base) +def add(core, actor, skillMod, value): return - -def deduct(core, actor, name, base): - actor.deductSkillMod(name, base) + +def deduct(core, actor, skillMod, value): return \ No newline at end of file diff --git a/scripts/skillMods/expertise_critical_line_en_spiral_kick.py b/scripts/skillMods/expertise_critical_line_en_spiral_kick.py index ee7769e2..b5c5e291 100644 --- a/scripts/skillMods/expertise_critical_line_en_spiral_kick.py +++ b/scripts/skillMods/expertise_critical_line_en_spiral_kick.py @@ -1,10 +1,8 @@ import sys -def add(core, actor, name, base): - actor.addSkillMod(name, base) +def add(core, actor, skillMod, value): return - -def deduct(core, actor, name, base): - actor.deductSkillMod(name, base) + +def deduct(core, actor, skillMod, value): return \ No newline at end of file diff --git a/scripts/skillMods/expertise_critical_line_fldmot.py b/scripts/skillMods/expertise_critical_line_fldmot.py index ee7769e2..b5c5e291 100644 --- a/scripts/skillMods/expertise_critical_line_fldmot.py +++ b/scripts/skillMods/expertise_critical_line_fldmot.py @@ -1,10 +1,8 @@ import sys -def add(core, actor, name, base): - actor.addSkillMod(name, base) +def add(core, actor, skillMod, value): return - -def deduct(core, actor, name, base): - actor.deductSkillMod(name, base) + +def deduct(core, actor, skillMod, value): return \ No newline at end of file diff --git a/scripts/skillMods/expertise_critical_line_fs_dm.py b/scripts/skillMods/expertise_critical_line_fs_dm.py index ee7769e2..b5c5e291 100644 --- a/scripts/skillMods/expertise_critical_line_fs_dm.py +++ b/scripts/skillMods/expertise_critical_line_fs_dm.py @@ -1,10 +1,8 @@ import sys -def add(core, actor, name, base): - actor.addSkillMod(name, base) +def add(core, actor, skillMod, value): return - -def deduct(core, actor, name, base): - actor.deductSkillMod(name, base) + +def deduct(core, actor, skillMod, value): return \ No newline at end of file diff --git a/scripts/skillMods/expertise_critical_line_me_dm.py b/scripts/skillMods/expertise_critical_line_me_dm.py index ee7769e2..b5c5e291 100644 --- a/scripts/skillMods/expertise_critical_line_me_dm.py +++ b/scripts/skillMods/expertise_critical_line_me_dm.py @@ -1,10 +1,8 @@ import sys -def add(core, actor, name, base): - actor.addSkillMod(name, base) +def add(core, actor, skillMod, value): return - -def deduct(core, actor, name, base): - actor.deductSkillMod(name, base) + +def deduct(core, actor, skillMod, value): return \ No newline at end of file diff --git a/scripts/skillMods/expertise_critical_line_of_aoe.py b/scripts/skillMods/expertise_critical_line_of_aoe.py index ee7769e2..b5c5e291 100644 --- a/scripts/skillMods/expertise_critical_line_of_aoe.py +++ b/scripts/skillMods/expertise_critical_line_of_aoe.py @@ -1,10 +1,8 @@ import sys -def add(core, actor, name, base): - actor.addSkillMod(name, base) +def add(core, actor, skillMod, value): return - -def deduct(core, actor, name, base): - actor.deductSkillMod(name, base) + +def deduct(core, actor, skillMod, value): return \ No newline at end of file diff --git a/scripts/skillMods/expertise_critical_line_of_sure.py b/scripts/skillMods/expertise_critical_line_of_sure.py index ee7769e2..b5c5e291 100644 --- a/scripts/skillMods/expertise_critical_line_of_sure.py +++ b/scripts/skillMods/expertise_critical_line_of_sure.py @@ -1,10 +1,8 @@ import sys -def add(core, actor, name, base): - actor.addSkillMod(name, base) +def add(core, actor, skillMod, value): return - -def deduct(core, actor, name, base): - actor.deductSkillMod(name, base) + +def deduct(core, actor, skillMod, value): return \ No newline at end of file diff --git a/scripts/skillMods/expertise_critical_line_sm_dm.py b/scripts/skillMods/expertise_critical_line_sm_dm.py index ee7769e2..b5c5e291 100644 --- a/scripts/skillMods/expertise_critical_line_sm_dm.py +++ b/scripts/skillMods/expertise_critical_line_sm_dm.py @@ -1,10 +1,8 @@ import sys -def add(core, actor, name, base): - actor.addSkillMod(name, base) +def add(core, actor, skillMod, value): return - -def deduct(core, actor, name, base): - actor.deductSkillMod(name, base) + +def deduct(core, actor, skillMod, value): return \ No newline at end of file diff --git a/scripts/skillMods/expertise_critical_line_sp_dm.py b/scripts/skillMods/expertise_critical_line_sp_dm.py index ee7769e2..b5c5e291 100644 --- a/scripts/skillMods/expertise_critical_line_sp_dm.py +++ b/scripts/skillMods/expertise_critical_line_sp_dm.py @@ -1,10 +1,8 @@ import sys -def add(core, actor, name, base): - actor.addSkillMod(name, base) +def add(core, actor, skillMod, value): return - -def deduct(core, actor, name, base): - actor.deductSkillMod(name, base) + +def deduct(core, actor, skillMod, value): return \ No newline at end of file diff --git a/scripts/skillMods/expertise_critical_line_sp_stealth_melee.py b/scripts/skillMods/expertise_critical_line_sp_stealth_melee.py index ee7769e2..b5c5e291 100644 --- a/scripts/skillMods/expertise_critical_line_sp_stealth_melee.py +++ b/scripts/skillMods/expertise_critical_line_sp_stealth_melee.py @@ -1,10 +1,8 @@ import sys -def add(core, actor, name, base): - actor.addSkillMod(name, base) +def add(core, actor, skillMod, value): return - -def deduct(core, actor, name, base): - actor.deductSkillMod(name, base) + +def deduct(core, actor, skillMod, value): return \ No newline at end of file diff --git a/scripts/skillMods/expertise_critical_line_sp_stealth_ranged.py b/scripts/skillMods/expertise_critical_line_sp_stealth_ranged.py index ee7769e2..b5c5e291 100644 --- a/scripts/skillMods/expertise_critical_line_sp_stealth_ranged.py +++ b/scripts/skillMods/expertise_critical_line_sp_stealth_ranged.py @@ -1,10 +1,8 @@ import sys -def add(core, actor, name, base): - actor.addSkillMod(name, base) +def add(core, actor, skillMod, value): return - -def deduct(core, actor, name, base): - actor.deductSkillMod(name, base) + +def deduct(core, actor, skillMod, value): return \ No newline at end of file diff --git a/scripts/skillMods/expertise_critical_melee.py b/scripts/skillMods/expertise_critical_melee.py index ee7769e2..4757f6ed 100644 --- a/scripts/skillMods/expertise_critical_melee.py +++ b/scripts/skillMods/expertise_critical_melee.py @@ -1,10 +1,16 @@ import sys -def add(core, actor, name, base): - actor.addSkillMod(name, base) +def add(core, actor, skillMod, value): + core.skillModService.addSkillMod(actor, "expertise_critical_1h", value) + core.skillModService.addSkillMod(actor, "expertise_critical_2h", value) + core.skillModService.addSkillMod(actor, "expertise_critical_unarmed", value) + core.skillModService.addSkillMod(actor, "expertise_critical_polearm", value) return - -def deduct(core, actor, name, base): - actor.deductSkillMod(name, base) + +def deduct(core, actor, skillMod, value): + core.skillModService.deductSkillMod(actor, "expertise_critical_1h", value) + core.skillModService.deductSkillMod(actor, "expertise_critical_2h", value) + core.skillModService.deductSkillMod(actor, "expertise_critical_unarmed", value) + core.skillModService.deductSkillMod(actor, "expertise_critical_polearm", value) return \ No newline at end of file diff --git a/scripts/skillMods/expertise_critical_niche_all.py b/scripts/skillMods/expertise_critical_niche_all.py index 4f2871ac..f2d7d723 100644 --- a/scripts/skillMods/expertise_critical_niche_all.py +++ b/scripts/skillMods/expertise_critical_niche_all.py @@ -1,12 +1,10 @@ import sys -def add(core, actor, name, base): - actor.addSkillMod(name, base) - core.skillModService.addSkillMod(actor, 'display_only_critical', 100 * (actor.getSkillModBase('expertise_critical_niche_all'))) +def add(core, actor, skillMod, value): + core.skillModService.addSkillMod(actor, 'display_only_critical', 100 * skillMod.getBase()) return - -def deduct(core, actor, name, base): - actor.deductSkillMod(name, base) - core.skillModService.deductSkillMod(actor, 'display_only_critical', 100 * (actor.getSkillModBase('expertise_critical_niche_all'))) + +def deduct(core, actor, skillMod, value): + core.skillModService.deductSkillMod(actor, 'display_only_critical', 100 * skillMod.getBase()) return \ No newline at end of file diff --git a/scripts/skillMods/expertise_critical_niche_creature.py b/scripts/skillMods/expertise_critical_niche_creature.py index ee7769e2..b5c5e291 100644 --- a/scripts/skillMods/expertise_critical_niche_creature.py +++ b/scripts/skillMods/expertise_critical_niche_creature.py @@ -1,10 +1,8 @@ import sys -def add(core, actor, name, base): - actor.addSkillMod(name, base) +def add(core, actor, skillMod, value): return - -def deduct(core, actor, name, base): - actor.deductSkillMod(name, base) + +def deduct(core, actor, skillMod, value): return \ No newline at end of file diff --git a/scripts/skillMods/expertise_critical_niche_droid.py b/scripts/skillMods/expertise_critical_niche_droid.py index ee7769e2..b5c5e291 100644 --- a/scripts/skillMods/expertise_critical_niche_droid.py +++ b/scripts/skillMods/expertise_critical_niche_droid.py @@ -1,10 +1,8 @@ import sys -def add(core, actor, name, base): - actor.addSkillMod(name, base) +def add(core, actor, skillMod, value): return - -def deduct(core, actor, name, base): - actor.deductSkillMod(name, base) + +def deduct(core, actor, skillMod, value): return \ No newline at end of file diff --git a/scripts/skillMods/expertise_critical_niche_npc.py b/scripts/skillMods/expertise_critical_niche_npc.py index ee7769e2..b5c5e291 100644 --- a/scripts/skillMods/expertise_critical_niche_npc.py +++ b/scripts/skillMods/expertise_critical_niche_npc.py @@ -1,10 +1,8 @@ import sys -def add(core, actor, name, base): - actor.addSkillMod(name, base) +def add(core, actor, skillMod, value): return - -def deduct(core, actor, name, base): - actor.deductSkillMod(name, base) + +def deduct(core, actor, skillMod, value): return \ No newline at end of file diff --git a/scripts/skillMods/expertise_critical_niche_pvp.py b/scripts/skillMods/expertise_critical_niche_pvp.py index ee7769e2..b5c5e291 100644 --- a/scripts/skillMods/expertise_critical_niche_pvp.py +++ b/scripts/skillMods/expertise_critical_niche_pvp.py @@ -1,10 +1,8 @@ import sys -def add(core, actor, name, base): - actor.addSkillMod(name, base) +def add(core, actor, skillMod, value): return - -def deduct(core, actor, name, base): - actor.deductSkillMod(name, base) + +def deduct(core, actor, skillMod, value): return \ No newline at end of file diff --git a/scripts/skillMods/expertise_critical_pistol.py b/scripts/skillMods/expertise_critical_pistol.py index ee7769e2..b5c5e291 100644 --- a/scripts/skillMods/expertise_critical_pistol.py +++ b/scripts/skillMods/expertise_critical_pistol.py @@ -1,10 +1,8 @@ import sys -def add(core, actor, name, base): - actor.addSkillMod(name, base) +def add(core, actor, skillMod, value): return - -def deduct(core, actor, name, base): - actor.deductSkillMod(name, base) + +def deduct(core, actor, skillMod, value): return \ No newline at end of file diff --git a/scripts/skillMods/expertise_critical_polearm.py b/scripts/skillMods/expertise_critical_polearm.py index ee7769e2..b5c5e291 100644 --- a/scripts/skillMods/expertise_critical_polearm.py +++ b/scripts/skillMods/expertise_critical_polearm.py @@ -1,10 +1,8 @@ import sys -def add(core, actor, name, base): - actor.addSkillMod(name, base) +def add(core, actor, skillMod, value): return - -def deduct(core, actor, name, base): - actor.deductSkillMod(name, base) + +def deduct(core, actor, skillMod, value): return \ No newline at end of file diff --git a/scripts/skillMods/expertise_critical_rifle.py b/scripts/skillMods/expertise_critical_rifle.py index ee7769e2..b5c5e291 100644 --- a/scripts/skillMods/expertise_critical_rifle.py +++ b/scripts/skillMods/expertise_critical_rifle.py @@ -1,10 +1,8 @@ import sys -def add(core, actor, name, base): - actor.addSkillMod(name, base) +def add(core, actor, skillMod, value): return - -def deduct(core, actor, name, base): - actor.deductSkillMod(name, base) + +def deduct(core, actor, skillMod, value): return \ No newline at end of file diff --git a/scripts/skillMods/expertise_critical_unarmed.py b/scripts/skillMods/expertise_critical_unarmed.py index ee7769e2..b5c5e291 100644 --- a/scripts/skillMods/expertise_critical_unarmed.py +++ b/scripts/skillMods/expertise_critical_unarmed.py @@ -1,10 +1,8 @@ import sys -def add(core, actor, name, base): - actor.addSkillMod(name, base) +def add(core, actor, skillMod, value): return - -def deduct(core, actor, name, base): - actor.deductSkillMod(name, base) + +def deduct(core, actor, skillMod, value): return \ No newline at end of file diff --git a/scripts/skillMods/expertise_damage_add_to_action.py b/scripts/skillMods/expertise_damage_add_to_action.py index ee7769e2..b5c5e291 100644 --- a/scripts/skillMods/expertise_damage_add_to_action.py +++ b/scripts/skillMods/expertise_damage_add_to_action.py @@ -1,10 +1,8 @@ import sys -def add(core, actor, name, base): - actor.addSkillMod(name, base) +def add(core, actor, skillMod, value): return - -def deduct(core, actor, name, base): - actor.deductSkillMod(name, base) + +def deduct(core, actor, skillMod, value): return \ No newline at end of file diff --git a/scripts/skillMods/expertise_damage_all.py b/scripts/skillMods/expertise_damage_all.py index ee7769e2..b5c5e291 100644 --- a/scripts/skillMods/expertise_damage_all.py +++ b/scripts/skillMods/expertise_damage_all.py @@ -1,10 +1,8 @@ import sys -def add(core, actor, name, base): - actor.addSkillMod(name, base) +def add(core, actor, skillMod, value): return - -def deduct(core, actor, name, base): - actor.deductSkillMod(name, base) + +def deduct(core, actor, skillMod, value): return \ No newline at end of file diff --git a/scripts/skillMods/expertise_damage_area_effect.py b/scripts/skillMods/expertise_damage_area_effect.py index ee7769e2..b5c5e291 100644 --- a/scripts/skillMods/expertise_damage_area_effect.py +++ b/scripts/skillMods/expertise_damage_area_effect.py @@ -1,10 +1,8 @@ import sys -def add(core, actor, name, base): - actor.addSkillMod(name, base) +def add(core, actor, skillMod, value): return - -def deduct(core, actor, name, base): - actor.deductSkillMod(name, base) + +def deduct(core, actor, skillMod, value): return \ No newline at end of file diff --git a/scripts/skillMods/expertise_damage_attacker_action.py b/scripts/skillMods/expertise_damage_attacker_action.py index ee7769e2..b5c5e291 100644 --- a/scripts/skillMods/expertise_damage_attacker_action.py +++ b/scripts/skillMods/expertise_damage_attacker_action.py @@ -1,10 +1,8 @@ import sys -def add(core, actor, name, base): - actor.addSkillMod(name, base) +def add(core, actor, skillMod, value): return - -def deduct(core, actor, name, base): - actor.deductSkillMod(name, base) + +def deduct(core, actor, skillMod, value): return \ No newline at end of file diff --git a/scripts/skillMods/expertise_damage_convert_to_action.py b/scripts/skillMods/expertise_damage_convert_to_action.py index ee7769e2..b5c5e291 100644 --- a/scripts/skillMods/expertise_damage_convert_to_action.py +++ b/scripts/skillMods/expertise_damage_convert_to_action.py @@ -1,10 +1,8 @@ import sys -def add(core, actor, name, base): - actor.addSkillMod(name, base) +def add(core, actor, skillMod, value): return - -def deduct(core, actor, name, base): - actor.deductSkillMod(name, base) + +def deduct(core, actor, skillMod, value): return \ No newline at end of file diff --git a/scripts/skillMods/expertise_damage_decrease_chance.py b/scripts/skillMods/expertise_damage_decrease_chance.py index ee7769e2..b5c5e291 100644 --- a/scripts/skillMods/expertise_damage_decrease_chance.py +++ b/scripts/skillMods/expertise_damage_decrease_chance.py @@ -1,10 +1,8 @@ import sys -def add(core, actor, name, base): - actor.addSkillMod(name, base) +def add(core, actor, skillMod, value): return - -def deduct(core, actor, name, base): - actor.deductSkillMod(name, base) + +def deduct(core, actor, skillMod, value): return \ No newline at end of file diff --git a/scripts/skillMods/expertise_damage_decrease_percentage.py b/scripts/skillMods/expertise_damage_decrease_percentage.py index f4c71024..c23ada08 100644 --- a/scripts/skillMods/expertise_damage_decrease_percentage.py +++ b/scripts/skillMods/expertise_damage_decrease_percentage.py @@ -1,11 +1,9 @@ import sys -def add(core, actor, name, base): - actor.addSkillMod(name, base) +def add(core, actor, skillMod, value): return - -def deduct(core, actor, name, base): - actor.deductSkillMod(name, base) + +def deduct(core, actor, skillMod, value): return \ No newline at end of file diff --git a/scripts/skillMods/expertise_damage_line_co_dm.py b/scripts/skillMods/expertise_damage_line_co_dm.py index ee7769e2..b5c5e291 100644 --- a/scripts/skillMods/expertise_damage_line_co_dm.py +++ b/scripts/skillMods/expertise_damage_line_co_dm.py @@ -1,10 +1,8 @@ import sys -def add(core, actor, name, base): - actor.addSkillMod(name, base) +def add(core, actor, skillMod, value): return - -def deduct(core, actor, name, base): - actor.deductSkillMod(name, base) + +def deduct(core, actor, skillMod, value): return \ No newline at end of file diff --git a/scripts/skillMods/expertise_damage_line_co_grenade.py b/scripts/skillMods/expertise_damage_line_co_grenade.py index ee7769e2..b5c5e291 100644 --- a/scripts/skillMods/expertise_damage_line_co_grenade.py +++ b/scripts/skillMods/expertise_damage_line_co_grenade.py @@ -1,10 +1,8 @@ import sys -def add(core, actor, name, base): - actor.addSkillMod(name, base) +def add(core, actor, skillMod, value): return - -def deduct(core, actor, name, base): - actor.deductSkillMod(name, base) + +def deduct(core, actor, skillMod, value): return \ No newline at end of file diff --git a/scripts/skillMods/expertise_damage_line_co_remote_detonator.py b/scripts/skillMods/expertise_damage_line_co_remote_detonator.py index ee7769e2..b5c5e291 100644 --- a/scripts/skillMods/expertise_damage_line_co_remote_detonator.py +++ b/scripts/skillMods/expertise_damage_line_co_remote_detonator.py @@ -1,10 +1,8 @@ import sys -def add(core, actor, name, base): - actor.addSkillMod(name, base) +def add(core, actor, skillMod, value): return - -def deduct(core, actor, name, base): - actor.deductSkillMod(name, base) + +def deduct(core, actor, skillMod, value): return \ No newline at end of file diff --git a/scripts/skillMods/expertise_damage_line_dm.py b/scripts/skillMods/expertise_damage_line_dm.py index ee7769e2..b5c5e291 100644 --- a/scripts/skillMods/expertise_damage_line_dm.py +++ b/scripts/skillMods/expertise_damage_line_dm.py @@ -1,10 +1,8 @@ import sys -def add(core, actor, name, base): - actor.addSkillMod(name, base) +def add(core, actor, skillMod, value): return - -def deduct(core, actor, name, base): - actor.deductSkillMod(name, base) + +def deduct(core, actor, skillMod, value): return \ No newline at end of file diff --git a/scripts/skillMods/expertise_damage_line_dm_cc.py b/scripts/skillMods/expertise_damage_line_dm_cc.py index ee7769e2..b5c5e291 100644 --- a/scripts/skillMods/expertise_damage_line_dm_cc.py +++ b/scripts/skillMods/expertise_damage_line_dm_cc.py @@ -1,10 +1,8 @@ import sys -def add(core, actor, name, base): - actor.addSkillMod(name, base) +def add(core, actor, skillMod, value): return - -def deduct(core, actor, name, base): - actor.deductSkillMod(name, base) + +def deduct(core, actor, skillMod, value): return \ No newline at end of file diff --git a/scripts/skillMods/expertise_damage_line_dm_crit.py b/scripts/skillMods/expertise_damage_line_dm_crit.py index ee7769e2..b5c5e291 100644 --- a/scripts/skillMods/expertise_damage_line_dm_crit.py +++ b/scripts/skillMods/expertise_damage_line_dm_crit.py @@ -1,10 +1,8 @@ import sys -def add(core, actor, name, base): - actor.addSkillMod(name, base) +def add(core, actor, skillMod, value): return - -def deduct(core, actor, name, base): - actor.deductSkillMod(name, base) + +def deduct(core, actor, skillMod, value): return \ No newline at end of file diff --git a/scripts/skillMods/expertise_damage_line_en_sweeping_pirouette.py b/scripts/skillMods/expertise_damage_line_en_sweeping_pirouette.py index ee7769e2..b5c5e291 100644 --- a/scripts/skillMods/expertise_damage_line_en_sweeping_pirouette.py +++ b/scripts/skillMods/expertise_damage_line_en_sweeping_pirouette.py @@ -1,10 +1,8 @@ import sys -def add(core, actor, name, base): - actor.addSkillMod(name, base) +def add(core, actor, skillMod, value): return - -def deduct(core, actor, name, base): - actor.deductSkillMod(name, base) + +def deduct(core, actor, skillMod, value): return \ No newline at end of file diff --git a/scripts/skillMods/expertise_damage_line_fldmot.py b/scripts/skillMods/expertise_damage_line_fldmot.py index ee7769e2..b5c5e291 100644 --- a/scripts/skillMods/expertise_damage_line_fldmot.py +++ b/scripts/skillMods/expertise_damage_line_fldmot.py @@ -1,10 +1,8 @@ import sys -def add(core, actor, name, base): - actor.addSkillMod(name, base) +def add(core, actor, skillMod, value): return - -def deduct(core, actor, name, base): - actor.deductSkillMod(name, base) + +def deduct(core, actor, skillMod, value): return \ No newline at end of file diff --git a/scripts/skillMods/expertise_damage_line_fs_ae_dm_cc.py b/scripts/skillMods/expertise_damage_line_fs_ae_dm_cc.py index ee7769e2..b5c5e291 100644 --- a/scripts/skillMods/expertise_damage_line_fs_ae_dm_cc.py +++ b/scripts/skillMods/expertise_damage_line_fs_ae_dm_cc.py @@ -1,10 +1,8 @@ import sys -def add(core, actor, name, base): - actor.addSkillMod(name, base) +def add(core, actor, skillMod, value): return - -def deduct(core, actor, name, base): - actor.deductSkillMod(name, base) + +def deduct(core, actor, skillMod, value): return \ No newline at end of file diff --git a/scripts/skillMods/expertise_damage_line_fs_cc_crit.py b/scripts/skillMods/expertise_damage_line_fs_cc_crit.py index ee7769e2..b5c5e291 100644 --- a/scripts/skillMods/expertise_damage_line_fs_cc_crit.py +++ b/scripts/skillMods/expertise_damage_line_fs_cc_crit.py @@ -1,10 +1,8 @@ import sys -def add(core, actor, name, base): - actor.addSkillMod(name, base) +def add(core, actor, skillMod, value): return - -def deduct(core, actor, name, base): - actor.deductSkillMod(name, base) + +def deduct(core, actor, skillMod, value): return \ No newline at end of file diff --git a/scripts/skillMods/expertise_damage_line_fs_dm.py b/scripts/skillMods/expertise_damage_line_fs_dm.py index ee7769e2..b5c5e291 100644 --- a/scripts/skillMods/expertise_damage_line_fs_dm.py +++ b/scripts/skillMods/expertise_damage_line_fs_dm.py @@ -1,10 +1,8 @@ import sys -def add(core, actor, name, base): - actor.addSkillMod(name, base) +def add(core, actor, skillMod, value): return - -def deduct(core, actor, name, base): - actor.deductSkillMod(name, base) + +def deduct(core, actor, skillMod, value): return \ No newline at end of file diff --git a/scripts/skillMods/expertise_damage_line_fs_dm_cc.py b/scripts/skillMods/expertise_damage_line_fs_dm_cc.py index ee7769e2..b5c5e291 100644 --- a/scripts/skillMods/expertise_damage_line_fs_dm_cc.py +++ b/scripts/skillMods/expertise_damage_line_fs_dm_cc.py @@ -1,10 +1,8 @@ import sys -def add(core, actor, name, base): - actor.addSkillMod(name, base) +def add(core, actor, skillMod, value): return - -def deduct(core, actor, name, base): - actor.deductSkillMod(name, base) + +def deduct(core, actor, skillMod, value): return \ No newline at end of file diff --git a/scripts/skillMods/expertise_damage_line_fs_force_throw.py b/scripts/skillMods/expertise_damage_line_fs_force_throw.py index ee7769e2..b5c5e291 100644 --- a/scripts/skillMods/expertise_damage_line_fs_force_throw.py +++ b/scripts/skillMods/expertise_damage_line_fs_force_throw.py @@ -1,10 +1,8 @@ import sys -def add(core, actor, name, base): - actor.addSkillMod(name, base) +def add(core, actor, skillMod, value): return - -def deduct(core, actor, name, base): - actor.deductSkillMod(name, base) + +def deduct(core, actor, skillMod, value): return \ No newline at end of file diff --git a/scripts/skillMods/expertise_damage_line_fs_saber_reflect.py b/scripts/skillMods/expertise_damage_line_fs_saber_reflect.py index ee7769e2..b5c5e291 100644 --- a/scripts/skillMods/expertise_damage_line_fs_saber_reflect.py +++ b/scripts/skillMods/expertise_damage_line_fs_saber_reflect.py @@ -1,10 +1,8 @@ import sys -def add(core, actor, name, base): - actor.addSkillMod(name, base) +def add(core, actor, skillMod, value): return - -def deduct(core, actor, name, base): - actor.deductSkillMod(name, base) + +def deduct(core, actor, skillMod, value): return \ No newline at end of file diff --git a/scripts/skillMods/expertise_damage_line_fs_sweep.py b/scripts/skillMods/expertise_damage_line_fs_sweep.py index ee7769e2..b5c5e291 100644 --- a/scripts/skillMods/expertise_damage_line_fs_sweep.py +++ b/scripts/skillMods/expertise_damage_line_fs_sweep.py @@ -1,10 +1,8 @@ import sys -def add(core, actor, name, base): - actor.addSkillMod(name, base) +def add(core, actor, skillMod, value): return - -def deduct(core, actor, name, base): - actor.deductSkillMod(name, base) + +def deduct(core, actor, skillMod, value): return \ No newline at end of file diff --git a/scripts/skillMods/expertise_damage_line_me_dm.py b/scripts/skillMods/expertise_damage_line_me_dm.py index ee7769e2..b5c5e291 100644 --- a/scripts/skillMods/expertise_damage_line_me_dm.py +++ b/scripts/skillMods/expertise_damage_line_me_dm.py @@ -1,10 +1,8 @@ import sys -def add(core, actor, name, base): - actor.addSkillMod(name, base) +def add(core, actor, skillMod, value): return - -def deduct(core, actor, name, base): - actor.deductSkillMod(name, base) + +def deduct(core, actor, skillMod, value): return \ No newline at end of file diff --git a/scripts/skillMods/expertise_damage_line_me_dot.py b/scripts/skillMods/expertise_damage_line_me_dot.py index ee7769e2..b5c5e291 100644 --- a/scripts/skillMods/expertise_damage_line_me_dot.py +++ b/scripts/skillMods/expertise_damage_line_me_dot.py @@ -1,10 +1,8 @@ import sys -def add(core, actor, name, base): - actor.addSkillMod(name, base) +def add(core, actor, skillMod, value): return - -def deduct(core, actor, name, base): - actor.deductSkillMod(name, base) + +def deduct(core, actor, skillMod, value): return \ No newline at end of file diff --git a/scripts/skillMods/expertise_damage_line_of_aoe.py b/scripts/skillMods/expertise_damage_line_of_aoe.py index f4c71024..c23ada08 100644 --- a/scripts/skillMods/expertise_damage_line_of_aoe.py +++ b/scripts/skillMods/expertise_damage_line_of_aoe.py @@ -1,11 +1,9 @@ import sys -def add(core, actor, name, base): - actor.addSkillMod(name, base) +def add(core, actor, skillMod, value): return - -def deduct(core, actor, name, base): - actor.deductSkillMod(name, base) + +def deduct(core, actor, skillMod, value): return \ No newline at end of file diff --git a/scripts/skillMods/expertise_damage_line_of_paint.py b/scripts/skillMods/expertise_damage_line_of_paint.py index ee7769e2..b5c5e291 100644 --- a/scripts/skillMods/expertise_damage_line_of_paint.py +++ b/scripts/skillMods/expertise_damage_line_of_paint.py @@ -1,10 +1,8 @@ import sys -def add(core, actor, name, base): - actor.addSkillMod(name, base) +def add(core, actor, skillMod, value): return - -def deduct(core, actor, name, base): - actor.deductSkillMod(name, base) + +def deduct(core, actor, skillMod, value): return \ No newline at end of file diff --git a/scripts/skillMods/expertise_damage_line_of_sure.py b/scripts/skillMods/expertise_damage_line_of_sure.py index f4c71024..c23ada08 100644 --- a/scripts/skillMods/expertise_damage_line_of_sure.py +++ b/scripts/skillMods/expertise_damage_line_of_sure.py @@ -1,11 +1,9 @@ import sys -def add(core, actor, name, base): - actor.addSkillMod(name, base) +def add(core, actor, skillMod, value): return - -def deduct(core, actor, name, base): - actor.deductSkillMod(name, base) + +def deduct(core, actor, skillMod, value): return \ No newline at end of file diff --git a/scripts/skillMods/expertise_damage_line_sm_dm.py b/scripts/skillMods/expertise_damage_line_sm_dm.py index ee7769e2..b5c5e291 100644 --- a/scripts/skillMods/expertise_damage_line_sm_dm.py +++ b/scripts/skillMods/expertise_damage_line_sm_dm.py @@ -1,10 +1,8 @@ import sys -def add(core, actor, name, base): - actor.addSkillMod(name, base) +def add(core, actor, skillMod, value): return - -def deduct(core, actor, name, base): - actor.deductSkillMod(name, base) + +def deduct(core, actor, skillMod, value): return \ No newline at end of file diff --git a/scripts/skillMods/expertise_damage_line_sp_dm.py b/scripts/skillMods/expertise_damage_line_sp_dm.py index ee7769e2..b5c5e291 100644 --- a/scripts/skillMods/expertise_damage_line_sp_dm.py +++ b/scripts/skillMods/expertise_damage_line_sp_dm.py @@ -1,10 +1,8 @@ import sys -def add(core, actor, name, base): - actor.addSkillMod(name, base) +def add(core, actor, skillMod, value): return - -def deduct(core, actor, name, base): - actor.deductSkillMod(name, base) + +def deduct(core, actor, skillMod, value): return \ No newline at end of file diff --git a/scripts/skillMods/expertise_damage_line_sp_hd_melee.py b/scripts/skillMods/expertise_damage_line_sp_hd_melee.py index ee7769e2..b5c5e291 100644 --- a/scripts/skillMods/expertise_damage_line_sp_hd_melee.py +++ b/scripts/skillMods/expertise_damage_line_sp_hd_melee.py @@ -1,10 +1,8 @@ import sys -def add(core, actor, name, base): - actor.addSkillMod(name, base) +def add(core, actor, skillMod, value): return - -def deduct(core, actor, name, base): - actor.deductSkillMod(name, base) + +def deduct(core, actor, skillMod, value): return \ No newline at end of file diff --git a/scripts/skillMods/expertise_damage_line_sp_stealth_melee.py b/scripts/skillMods/expertise_damage_line_sp_stealth_melee.py index ee7769e2..b5c5e291 100644 --- a/scripts/skillMods/expertise_damage_line_sp_stealth_melee.py +++ b/scripts/skillMods/expertise_damage_line_sp_stealth_melee.py @@ -1,10 +1,8 @@ import sys -def add(core, actor, name, base): - actor.addSkillMod(name, base) +def add(core, actor, skillMod, value): return - -def deduct(core, actor, name, base): - actor.deductSkillMod(name, base) + +def deduct(core, actor, skillMod, value): return \ No newline at end of file diff --git a/scripts/skillMods/expertise_damage_line_sp_stealth_ranged.py b/scripts/skillMods/expertise_damage_line_sp_stealth_ranged.py index ee7769e2..b5c5e291 100644 --- a/scripts/skillMods/expertise_damage_line_sp_stealth_ranged.py +++ b/scripts/skillMods/expertise_damage_line_sp_stealth_ranged.py @@ -1,10 +1,8 @@ import sys -def add(core, actor, name, base): - actor.addSkillMod(name, base) +def add(core, actor, skillMod, value): return - -def deduct(core, actor, name, base): - actor.deductSkillMod(name, base) + +def deduct(core, actor, skillMod, value): return \ No newline at end of file diff --git a/scripts/skillMods/expertise_damage_line_vulnerability_of_buff_def.py b/scripts/skillMods/expertise_damage_line_vulnerability_of_buff_def.py index ee7769e2..b5c5e291 100644 --- a/scripts/skillMods/expertise_damage_line_vulnerability_of_buff_def.py +++ b/scripts/skillMods/expertise_damage_line_vulnerability_of_buff_def.py @@ -1,10 +1,8 @@ import sys -def add(core, actor, name, base): - actor.addSkillMod(name, base) +def add(core, actor, skillMod, value): return - -def deduct(core, actor, name, base): - actor.deductSkillMod(name, base) + +def deduct(core, actor, skillMod, value): return \ No newline at end of file diff --git a/scripts/skillMods/expertise_damage_line_vulnerability_of_dm.py b/scripts/skillMods/expertise_damage_line_vulnerability_of_dm.py index ee7769e2..b5c5e291 100644 --- a/scripts/skillMods/expertise_damage_line_vulnerability_of_dm.py +++ b/scripts/skillMods/expertise_damage_line_vulnerability_of_dm.py @@ -1,10 +1,8 @@ import sys -def add(core, actor, name, base): - actor.addSkillMod(name, base) +def add(core, actor, skillMod, value): return - -def deduct(core, actor, name, base): - actor.deductSkillMod(name, base) + +def deduct(core, actor, skillMod, value): return \ No newline at end of file diff --git a/scripts/skillMods/expertise_damage_melee.py b/scripts/skillMods/expertise_damage_melee.py index f4c71024..c23ada08 100644 --- a/scripts/skillMods/expertise_damage_melee.py +++ b/scripts/skillMods/expertise_damage_melee.py @@ -1,11 +1,9 @@ import sys -def add(core, actor, name, base): - actor.addSkillMod(name, base) +def add(core, actor, skillMod, value): return - -def deduct(core, actor, name, base): - actor.deductSkillMod(name, base) + +def deduct(core, actor, skillMod, value): return \ No newline at end of file diff --git a/scripts/skillMods/expertise_damage_pistol.py b/scripts/skillMods/expertise_damage_pistol.py index ee7769e2..b5c5e291 100644 --- a/scripts/skillMods/expertise_damage_pistol.py +++ b/scripts/skillMods/expertise_damage_pistol.py @@ -1,10 +1,8 @@ import sys -def add(core, actor, name, base): - actor.addSkillMod(name, base) +def add(core, actor, skillMod, value): return - -def deduct(core, actor, name, base): - actor.deductSkillMod(name, base) + +def deduct(core, actor, skillMod, value): return \ No newline at end of file diff --git a/scripts/skillMods/expertise_damage_ranged.py b/scripts/skillMods/expertise_damage_ranged.py index ee7769e2..b5c5e291 100644 --- a/scripts/skillMods/expertise_damage_ranged.py +++ b/scripts/skillMods/expertise_damage_ranged.py @@ -1,10 +1,8 @@ import sys -def add(core, actor, name, base): - actor.addSkillMod(name, base) +def add(core, actor, skillMod, value): return - -def deduct(core, actor, name, base): - actor.deductSkillMod(name, base) + +def deduct(core, actor, skillMod, value): return \ No newline at end of file diff --git a/scripts/skillMods/expertise_damage_to_healing_fs_ae_dm_cc.py b/scripts/skillMods/expertise_damage_to_healing_fs_ae_dm_cc.py index ee7769e2..b5c5e291 100644 --- a/scripts/skillMods/expertise_damage_to_healing_fs_ae_dm_cc.py +++ b/scripts/skillMods/expertise_damage_to_healing_fs_ae_dm_cc.py @@ -1,10 +1,8 @@ import sys -def add(core, actor, name, base): - actor.addSkillMod(name, base) +def add(core, actor, skillMod, value): return - -def deduct(core, actor, name, base): - actor.deductSkillMod(name, base) + +def deduct(core, actor, skillMod, value): return \ No newline at end of file diff --git a/scripts/skillMods/expertise_damage_unarmed.py b/scripts/skillMods/expertise_damage_unarmed.py index ee7769e2..b5c5e291 100644 --- a/scripts/skillMods/expertise_damage_unarmed.py +++ b/scripts/skillMods/expertise_damage_unarmed.py @@ -1,10 +1,8 @@ import sys -def add(core, actor, name, base): - actor.addSkillMod(name, base) +def add(core, actor, skillMod, value): return - -def deduct(core, actor, name, base): - actor.deductSkillMod(name, base) + +def deduct(core, actor, skillMod, value): return \ No newline at end of file diff --git a/scripts/skillMods/expertise_damage_weapon_0.py b/scripts/skillMods/expertise_damage_weapon_0.py index ee7769e2..b5c5e291 100644 --- a/scripts/skillMods/expertise_damage_weapon_0.py +++ b/scripts/skillMods/expertise_damage_weapon_0.py @@ -1,10 +1,8 @@ import sys -def add(core, actor, name, base): - actor.addSkillMod(name, base) +def add(core, actor, skillMod, value): return - -def deduct(core, actor, name, base): - actor.deductSkillMod(name, base) + +def deduct(core, actor, skillMod, value): return \ No newline at end of file diff --git a/scripts/skillMods/expertise_damage_weapon_1.py b/scripts/skillMods/expertise_damage_weapon_1.py index ee7769e2..b5c5e291 100644 --- a/scripts/skillMods/expertise_damage_weapon_1.py +++ b/scripts/skillMods/expertise_damage_weapon_1.py @@ -1,10 +1,8 @@ import sys -def add(core, actor, name, base): - actor.addSkillMod(name, base) +def add(core, actor, skillMod, value): return - -def deduct(core, actor, name, base): - actor.deductSkillMod(name, base) + +def deduct(core, actor, skillMod, value): return \ No newline at end of file diff --git a/scripts/skillMods/expertise_damage_weapon_10.py b/scripts/skillMods/expertise_damage_weapon_10.py index ee7769e2..b5c5e291 100644 --- a/scripts/skillMods/expertise_damage_weapon_10.py +++ b/scripts/skillMods/expertise_damage_weapon_10.py @@ -1,10 +1,8 @@ import sys -def add(core, actor, name, base): - actor.addSkillMod(name, base) +def add(core, actor, skillMod, value): return - -def deduct(core, actor, name, base): - actor.deductSkillMod(name, base) + +def deduct(core, actor, skillMod, value): return \ No newline at end of file diff --git a/scripts/skillMods/expertise_damage_weapon_11.py b/scripts/skillMods/expertise_damage_weapon_11.py index ee7769e2..b5c5e291 100644 --- a/scripts/skillMods/expertise_damage_weapon_11.py +++ b/scripts/skillMods/expertise_damage_weapon_11.py @@ -1,10 +1,8 @@ import sys -def add(core, actor, name, base): - actor.addSkillMod(name, base) +def add(core, actor, skillMod, value): return - -def deduct(core, actor, name, base): - actor.deductSkillMod(name, base) + +def deduct(core, actor, skillMod, value): return \ No newline at end of file diff --git a/scripts/skillMods/expertise_damage_weapon_2.py b/scripts/skillMods/expertise_damage_weapon_2.py index f4c71024..c23ada08 100644 --- a/scripts/skillMods/expertise_damage_weapon_2.py +++ b/scripts/skillMods/expertise_damage_weapon_2.py @@ -1,11 +1,9 @@ import sys -def add(core, actor, name, base): - actor.addSkillMod(name, base) +def add(core, actor, skillMod, value): return - -def deduct(core, actor, name, base): - actor.deductSkillMod(name, base) + +def deduct(core, actor, skillMod, value): return \ No newline at end of file diff --git a/scripts/skillMods/expertise_damage_weapon_29.py b/scripts/skillMods/expertise_damage_weapon_29.py index ee7769e2..b5c5e291 100644 --- a/scripts/skillMods/expertise_damage_weapon_29.py +++ b/scripts/skillMods/expertise_damage_weapon_29.py @@ -1,10 +1,8 @@ import sys -def add(core, actor, name, base): - actor.addSkillMod(name, base) +def add(core, actor, skillMod, value): return - -def deduct(core, actor, name, base): - actor.deductSkillMod(name, base) + +def deduct(core, actor, skillMod, value): return \ No newline at end of file diff --git a/scripts/skillMods/expertise_damage_weapon_3.py b/scripts/skillMods/expertise_damage_weapon_3.py index ee7769e2..b5c5e291 100644 --- a/scripts/skillMods/expertise_damage_weapon_3.py +++ b/scripts/skillMods/expertise_damage_weapon_3.py @@ -1,10 +1,8 @@ import sys -def add(core, actor, name, base): - actor.addSkillMod(name, base) +def add(core, actor, skillMod, value): return - -def deduct(core, actor, name, base): - actor.deductSkillMod(name, base) + +def deduct(core, actor, skillMod, value): return \ No newline at end of file diff --git a/scripts/skillMods/expertise_damage_weapon_4.py b/scripts/skillMods/expertise_damage_weapon_4.py index ee7769e2..b5c5e291 100644 --- a/scripts/skillMods/expertise_damage_weapon_4.py +++ b/scripts/skillMods/expertise_damage_weapon_4.py @@ -1,10 +1,8 @@ import sys -def add(core, actor, name, base): - actor.addSkillMod(name, base) +def add(core, actor, skillMod, value): return - -def deduct(core, actor, name, base): - actor.deductSkillMod(name, base) + +def deduct(core, actor, skillMod, value): return \ No newline at end of file diff --git a/scripts/skillMods/expertise_damage_weapon_5.py b/scripts/skillMods/expertise_damage_weapon_5.py index ee7769e2..b5c5e291 100644 --- a/scripts/skillMods/expertise_damage_weapon_5.py +++ b/scripts/skillMods/expertise_damage_weapon_5.py @@ -1,10 +1,8 @@ import sys -def add(core, actor, name, base): - actor.addSkillMod(name, base) +def add(core, actor, skillMod, value): return - -def deduct(core, actor, name, base): - actor.deductSkillMod(name, base) + +def deduct(core, actor, skillMod, value): return \ No newline at end of file diff --git a/scripts/skillMods/expertise_damage_weapon_6.py b/scripts/skillMods/expertise_damage_weapon_6.py index ee7769e2..b5c5e291 100644 --- a/scripts/skillMods/expertise_damage_weapon_6.py +++ b/scripts/skillMods/expertise_damage_weapon_6.py @@ -1,10 +1,8 @@ import sys -def add(core, actor, name, base): - actor.addSkillMod(name, base) +def add(core, actor, skillMod, value): return - -def deduct(core, actor, name, base): - actor.deductSkillMod(name, base) + +def deduct(core, actor, skillMod, value): return \ No newline at end of file diff --git a/scripts/skillMods/expertise_damage_weapon_7.py b/scripts/skillMods/expertise_damage_weapon_7.py index ee7769e2..b5c5e291 100644 --- a/scripts/skillMods/expertise_damage_weapon_7.py +++ b/scripts/skillMods/expertise_damage_weapon_7.py @@ -1,10 +1,8 @@ import sys -def add(core, actor, name, base): - actor.addSkillMod(name, base) +def add(core, actor, skillMod, value): return - -def deduct(core, actor, name, base): - actor.deductSkillMod(name, base) + +def deduct(core, actor, skillMod, value): return \ No newline at end of file diff --git a/scripts/skillMods/expertise_damage_weapon_9.py b/scripts/skillMods/expertise_damage_weapon_9.py index ee7769e2..b5c5e291 100644 --- a/scripts/skillMods/expertise_damage_weapon_9.py +++ b/scripts/skillMods/expertise_damage_weapon_9.py @@ -1,10 +1,8 @@ import sys -def add(core, actor, name, base): - actor.addSkillMod(name, base) +def add(core, actor, skillMod, value): return - -def deduct(core, actor, name, base): - actor.deductSkillMod(name, base) + +def deduct(core, actor, skillMod, value): return \ No newline at end of file diff --git a/scripts/skillMods/expertise_damage_weapon_all.py b/scripts/skillMods/expertise_damage_weapon_all.py index ee7769e2..b5c5e291 100644 --- a/scripts/skillMods/expertise_damage_weapon_all.py +++ b/scripts/skillMods/expertise_damage_weapon_all.py @@ -1,10 +1,8 @@ import sys -def add(core, actor, name, base): - actor.addSkillMod(name, base) +def add(core, actor, skillMod, value): return - -def deduct(core, actor, name, base): - actor.deductSkillMod(name, base) + +def deduct(core, actor, skillMod, value): return \ No newline at end of file diff --git a/scripts/skillMods/expertise_delay_line_co_remote_detonator.py b/scripts/skillMods/expertise_delay_line_co_remote_detonator.py index ee7769e2..b5c5e291 100644 --- a/scripts/skillMods/expertise_delay_line_co_remote_detonator.py +++ b/scripts/skillMods/expertise_delay_line_co_remote_detonator.py @@ -1,10 +1,8 @@ import sys -def add(core, actor, name, base): - actor.addSkillMod(name, base) +def add(core, actor, skillMod, value): return - -def deduct(core, actor, name, base): - actor.deductSkillMod(name, base) + +def deduct(core, actor, skillMod, value): return \ No newline at end of file diff --git a/scripts/skillMods/expertise_devastation_bonus.py b/scripts/skillMods/expertise_devastation_bonus.py index ee7769e2..b5c5e291 100644 --- a/scripts/skillMods/expertise_devastation_bonus.py +++ b/scripts/skillMods/expertise_devastation_bonus.py @@ -1,10 +1,8 @@ import sys -def add(core, actor, name, base): - actor.addSkillMod(name, base) +def add(core, actor, skillMod, value): return - -def deduct(core, actor, name, base): - actor.deductSkillMod(name, base) + +def deduct(core, actor, skillMod, value): return \ No newline at end of file diff --git a/scripts/skillMods/expertise_dodge.py b/scripts/skillMods/expertise_dodge.py index f4c71024..c23ada08 100644 --- a/scripts/skillMods/expertise_dodge.py +++ b/scripts/skillMods/expertise_dodge.py @@ -1,11 +1,9 @@ import sys -def add(core, actor, name, base): - actor.addSkillMod(name, base) +def add(core, actor, skillMod, value): return - -def deduct(core, actor, name, base): - actor.deductSkillMod(name, base) + +def deduct(core, actor, skillMod, value): return \ No newline at end of file diff --git a/scripts/skillMods/expertise_dot_absorption_all.py b/scripts/skillMods/expertise_dot_absorption_all.py index ee7769e2..b5c5e291 100644 --- a/scripts/skillMods/expertise_dot_absorption_all.py +++ b/scripts/skillMods/expertise_dot_absorption_all.py @@ -1,10 +1,8 @@ import sys -def add(core, actor, name, base): - actor.addSkillMod(name, base) +def add(core, actor, skillMod, value): return - -def deduct(core, actor, name, base): - actor.deductSkillMod(name, base) + +def deduct(core, actor, skillMod, value): return \ No newline at end of file diff --git a/scripts/skillMods/expertise_dot_damage_line_sp_stealth_melee.py b/scripts/skillMods/expertise_dot_damage_line_sp_stealth_melee.py index ee7769e2..b5c5e291 100644 --- a/scripts/skillMods/expertise_dot_damage_line_sp_stealth_melee.py +++ b/scripts/skillMods/expertise_dot_damage_line_sp_stealth_melee.py @@ -1,10 +1,8 @@ import sys -def add(core, actor, name, base): - actor.addSkillMod(name, base) +def add(core, actor, skillMod, value): return - -def deduct(core, actor, name, base): - actor.deductSkillMod(name, base) + +def deduct(core, actor, skillMod, value): return \ No newline at end of file diff --git a/scripts/skillMods/expertise_dot_damage_line_sp_stealth_ranged.py b/scripts/skillMods/expertise_dot_damage_line_sp_stealth_ranged.py index ee7769e2..b5c5e291 100644 --- a/scripts/skillMods/expertise_dot_damage_line_sp_stealth_ranged.py +++ b/scripts/skillMods/expertise_dot_damage_line_sp_stealth_ranged.py @@ -1,10 +1,8 @@ import sys -def add(core, actor, name, base): - actor.addSkillMod(name, base) +def add(core, actor, skillMod, value): return - -def deduct(core, actor, name, base): - actor.deductSkillMod(name, base) + +def deduct(core, actor, skillMod, value): return \ No newline at end of file diff --git a/scripts/skillMods/expertise_dot_duration_line_co_armor_splash.py b/scripts/skillMods/expertise_dot_duration_line_co_armor_splash.py index ee7769e2..b5c5e291 100644 --- a/scripts/skillMods/expertise_dot_duration_line_co_armor_splash.py +++ b/scripts/skillMods/expertise_dot_duration_line_co_armor_splash.py @@ -1,10 +1,8 @@ import sys -def add(core, actor, name, base): - actor.addSkillMod(name, base) +def add(core, actor, skillMod, value): return - -def deduct(core, actor, name, base): - actor.deductSkillMod(name, base) + +def deduct(core, actor, skillMod, value): return \ No newline at end of file diff --git a/scripts/skillMods/expertise_dot_duration_line_co_grenade.py b/scripts/skillMods/expertise_dot_duration_line_co_grenade.py index ee7769e2..b5c5e291 100644 --- a/scripts/skillMods/expertise_dot_duration_line_co_grenade.py +++ b/scripts/skillMods/expertise_dot_duration_line_co_grenade.py @@ -1,10 +1,8 @@ import sys -def add(core, actor, name, base): - actor.addSkillMod(name, base) +def add(core, actor, skillMod, value): return - -def deduct(core, actor, name, base): - actor.deductSkillMod(name, base) + +def deduct(core, actor, skillMod, value): return \ No newline at end of file diff --git a/scripts/skillMods/expertise_dot_duration_line_co_it_burns.py b/scripts/skillMods/expertise_dot_duration_line_co_it_burns.py index ee7769e2..b5c5e291 100644 --- a/scripts/skillMods/expertise_dot_duration_line_co_it_burns.py +++ b/scripts/skillMods/expertise_dot_duration_line_co_it_burns.py @@ -1,10 +1,8 @@ import sys -def add(core, actor, name, base): - actor.addSkillMod(name, base) +def add(core, actor, skillMod, value): return - -def deduct(core, actor, name, base): - actor.deductSkillMod(name, base) + +def deduct(core, actor, skillMod, value): return \ No newline at end of file diff --git a/scripts/skillMods/expertise_dot_duration_line_co_shock_tracer.py b/scripts/skillMods/expertise_dot_duration_line_co_shock_tracer.py index ee7769e2..b5c5e291 100644 --- a/scripts/skillMods/expertise_dot_duration_line_co_shock_tracer.py +++ b/scripts/skillMods/expertise_dot_duration_line_co_shock_tracer.py @@ -1,10 +1,8 @@ import sys -def add(core, actor, name, base): - actor.addSkillMod(name, base) +def add(core, actor, skillMod, value): return - -def deduct(core, actor, name, base): - actor.deductSkillMod(name, base) + +def deduct(core, actor, skillMod, value): return \ No newline at end of file diff --git a/scripts/skillMods/expertise_dot_duration_line_me_dot.py b/scripts/skillMods/expertise_dot_duration_line_me_dot.py index ee7769e2..b5c5e291 100644 --- a/scripts/skillMods/expertise_dot_duration_line_me_dot.py +++ b/scripts/skillMods/expertise_dot_duration_line_me_dot.py @@ -1,10 +1,8 @@ import sys -def add(core, actor, name, base): - actor.addSkillMod(name, base) +def add(core, actor, skillMod, value): return - -def deduct(core, actor, name, base): - actor.deductSkillMod(name, base) + +def deduct(core, actor, skillMod, value): return \ No newline at end of file diff --git a/scripts/skillMods/expertise_dot_increase.py b/scripts/skillMods/expertise_dot_increase.py index ee7769e2..b5c5e291 100644 --- a/scripts/skillMods/expertise_dot_increase.py +++ b/scripts/skillMods/expertise_dot_increase.py @@ -1,10 +1,8 @@ import sys -def add(core, actor, name, base): - actor.addSkillMod(name, base) +def add(core, actor, skillMod, value): return - -def deduct(core, actor, name, base): - actor.deductSkillMod(name, base) + +def deduct(core, actor, skillMod, value): return \ No newline at end of file diff --git a/scripts/skillMods/expertise_double_deal_chance.py b/scripts/skillMods/expertise_double_deal_chance.py index ee7769e2..b5c5e291 100644 --- a/scripts/skillMods/expertise_double_deal_chance.py +++ b/scripts/skillMods/expertise_double_deal_chance.py @@ -1,10 +1,8 @@ import sys -def add(core, actor, name, base): - actor.addSkillMod(name, base) +def add(core, actor, skillMod, value): return - -def deduct(core, actor, name, base): - actor.deductSkillMod(name, base) + +def deduct(core, actor, skillMod, value): return \ No newline at end of file diff --git a/scripts/skillMods/expertise_double_hit_chance.py b/scripts/skillMods/expertise_double_hit_chance.py index ee7769e2..b5c5e291 100644 --- a/scripts/skillMods/expertise_double_hit_chance.py +++ b/scripts/skillMods/expertise_double_hit_chance.py @@ -1,10 +1,8 @@ import sys -def add(core, actor, name, base): - actor.addSkillMod(name, base) +def add(core, actor, skillMod, value): return - -def deduct(core, actor, name, base): - actor.deductSkillMod(name, base) + +def deduct(core, actor, skillMod, value): return \ No newline at end of file diff --git a/scripts/skillMods/expertise_dueterium_rounds_proc.py b/scripts/skillMods/expertise_dueterium_rounds_proc.py index ee7769e2..b5c5e291 100644 --- a/scripts/skillMods/expertise_dueterium_rounds_proc.py +++ b/scripts/skillMods/expertise_dueterium_rounds_proc.py @@ -1,10 +1,8 @@ import sys -def add(core, actor, name, base): - actor.addSkillMod(name, base) +def add(core, actor, skillMod, value): return - -def deduct(core, actor, name, base): - actor.deductSkillMod(name, base) + +def deduct(core, actor, skillMod, value): return \ No newline at end of file diff --git a/scripts/skillMods/expertise_en_combat_buff_increase.py b/scripts/skillMods/expertise_en_combat_buff_increase.py index ee7769e2..b5c5e291 100644 --- a/scripts/skillMods/expertise_en_combat_buff_increase.py +++ b/scripts/skillMods/expertise_en_combat_buff_increase.py @@ -1,10 +1,8 @@ import sys -def add(core, actor, name, base): - actor.addSkillMod(name, base) +def add(core, actor, skillMod, value): return - -def deduct(core, actor, name, base): - actor.deductSkillMod(name, base) + +def deduct(core, actor, skillMod, value): return \ No newline at end of file diff --git a/scripts/skillMods/expertise_en_debuff_thrill_increase.py b/scripts/skillMods/expertise_en_debuff_thrill_increase.py index ee7769e2..b5c5e291 100644 --- a/scripts/skillMods/expertise_en_debuff_thrill_increase.py +++ b/scripts/skillMods/expertise_en_debuff_thrill_increase.py @@ -1,10 +1,8 @@ import sys -def add(core, actor, name, base): - actor.addSkillMod(name, base) +def add(core, actor, skillMod, value): return - -def deduct(core, actor, name, base): - actor.deductSkillMod(name, base) + +def deduct(core, actor, skillMod, value): return \ No newline at end of file diff --git a/scripts/skillMods/expertise_en_holographic_additional_backup.py b/scripts/skillMods/expertise_en_holographic_additional_backup.py index ee7769e2..b5c5e291 100644 --- a/scripts/skillMods/expertise_en_holographic_additional_backup.py +++ b/scripts/skillMods/expertise_en_holographic_additional_backup.py @@ -1,10 +1,8 @@ import sys -def add(core, actor, name, base): - actor.addSkillMod(name, base) +def add(core, actor, skillMod, value): return - -def deduct(core, actor, name, base): - actor.deductSkillMod(name, base) + +def deduct(core, actor, skillMod, value): return \ No newline at end of file diff --git a/scripts/skillMods/expertise_en_improv.py b/scripts/skillMods/expertise_en_improv.py index ee7769e2..b5c5e291 100644 --- a/scripts/skillMods/expertise_en_improv.py +++ b/scripts/skillMods/expertise_en_improv.py @@ -1,10 +1,8 @@ import sys -def add(core, actor, name, base): - actor.addSkillMod(name, base) +def add(core, actor, skillMod, value): return - -def deduct(core, actor, name, base): - actor.deductSkillMod(name, base) + +def deduct(core, actor, skillMod, value): return \ No newline at end of file diff --git a/scripts/skillMods/expertise_en_inspire_attrib_increase.py b/scripts/skillMods/expertise_en_inspire_attrib_increase.py index ee7769e2..b5c5e291 100644 --- a/scripts/skillMods/expertise_en_inspire_attrib_increase.py +++ b/scripts/skillMods/expertise_en_inspire_attrib_increase.py @@ -1,10 +1,8 @@ import sys -def add(core, actor, name, base): - actor.addSkillMod(name, base) +def add(core, actor, skillMod, value): return - -def deduct(core, actor, name, base): - actor.deductSkillMod(name, base) + +def deduct(core, actor, skillMod, value): return \ No newline at end of file diff --git a/scripts/skillMods/expertise_en_inspire_base_point_increase.py b/scripts/skillMods/expertise_en_inspire_base_point_increase.py index ee7769e2..b5c5e291 100644 --- a/scripts/skillMods/expertise_en_inspire_base_point_increase.py +++ b/scripts/skillMods/expertise_en_inspire_base_point_increase.py @@ -1,10 +1,8 @@ import sys -def add(core, actor, name, base): - actor.addSkillMod(name, base) +def add(core, actor, skillMod, value): return - -def deduct(core, actor, name, base): - actor.deductSkillMod(name, base) + +def deduct(core, actor, skillMod, value): return \ No newline at end of file diff --git a/scripts/skillMods/expertise_en_inspire_buff_duration_increase.py b/scripts/skillMods/expertise_en_inspire_buff_duration_increase.py index ee7769e2..b5c5e291 100644 --- a/scripts/skillMods/expertise_en_inspire_buff_duration_increase.py +++ b/scripts/skillMods/expertise_en_inspire_buff_duration_increase.py @@ -1,10 +1,8 @@ import sys -def add(core, actor, name, base): - actor.addSkillMod(name, base) +def add(core, actor, skillMod, value): return - -def deduct(core, actor, name, base): - actor.deductSkillMod(name, base) + +def deduct(core, actor, skillMod, value): return \ No newline at end of file diff --git a/scripts/skillMods/expertise_en_inspire_proc_chance_increase.py b/scripts/skillMods/expertise_en_inspire_proc_chance_increase.py index ee7769e2..b5c5e291 100644 --- a/scripts/skillMods/expertise_en_inspire_proc_chance_increase.py +++ b/scripts/skillMods/expertise_en_inspire_proc_chance_increase.py @@ -1,10 +1,8 @@ import sys -def add(core, actor, name, base): - actor.addSkillMod(name, base) +def add(core, actor, skillMod, value): return - -def deduct(core, actor, name, base): - actor.deductSkillMod(name, base) + +def deduct(core, actor, skillMod, value): return \ No newline at end of file diff --git a/scripts/skillMods/expertise_en_inspire_pulse_duration_increase.py b/scripts/skillMods/expertise_en_inspire_pulse_duration_increase.py index ee7769e2..b5c5e291 100644 --- a/scripts/skillMods/expertise_en_inspire_pulse_duration_increase.py +++ b/scripts/skillMods/expertise_en_inspire_pulse_duration_increase.py @@ -1,10 +1,8 @@ import sys -def add(core, actor, name, base): - actor.addSkillMod(name, base) +def add(core, actor, skillMod, value): return - -def deduct(core, actor, name, base): - actor.deductSkillMod(name, base) + +def deduct(core, actor, skillMod, value): return \ No newline at end of file diff --git a/scripts/skillMods/expertise_en_inspire_resist_increase.py b/scripts/skillMods/expertise_en_inspire_resist_increase.py index ee7769e2..b5c5e291 100644 --- a/scripts/skillMods/expertise_en_inspire_resist_increase.py +++ b/scripts/skillMods/expertise_en_inspire_resist_increase.py @@ -1,10 +1,8 @@ import sys -def add(core, actor, name, base): - actor.addSkillMod(name, base) +def add(core, actor, skillMod, value): return - -def deduct(core, actor, name, base): - actor.deductSkillMod(name, base) + +def deduct(core, actor, skillMod, value): return \ No newline at end of file diff --git a/scripts/skillMods/expertise_en_inspire_trader_increase.py b/scripts/skillMods/expertise_en_inspire_trader_increase.py index ee7769e2..b5c5e291 100644 --- a/scripts/skillMods/expertise_en_inspire_trader_increase.py +++ b/scripts/skillMods/expertise_en_inspire_trader_increase.py @@ -1,10 +1,8 @@ import sys -def add(core, actor, name, base): - actor.addSkillMod(name, base) +def add(core, actor, skillMod, value): return - -def deduct(core, actor, name, base): - actor.deductSkillMod(name, base) + +def deduct(core, actor, skillMod, value): return \ No newline at end of file diff --git a/scripts/skillMods/expertise_en_performance_increase.py b/scripts/skillMods/expertise_en_performance_increase.py index ee7769e2..b5c5e291 100644 --- a/scripts/skillMods/expertise_en_performance_increase.py +++ b/scripts/skillMods/expertise_en_performance_increase.py @@ -1,10 +1,8 @@ import sys -def add(core, actor, name, base): - actor.addSkillMod(name, base) +def add(core, actor, skillMod, value): return - -def deduct(core, actor, name, base): - actor.deductSkillMod(name, base) + +def deduct(core, actor, skillMod, value): return \ No newline at end of file diff --git a/scripts/skillMods/expertise_evasion_chance.py b/scripts/skillMods/expertise_evasion_chance.py index 44fc827c..ad63a264 100644 --- a/scripts/skillMods/expertise_evasion_chance.py +++ b/scripts/skillMods/expertise_evasion_chance.py @@ -1,12 +1,10 @@ import sys -def add(core, actor, name, base): - actor.addSkillMod(name, base) - core.skillModService.addSkillMod(actor, 'display_only_evasion', 100 * (actor.getSkillModBase('expertise_evasion_chance'))) +def add(core, actor, skillMod, divisor): + core.skillModService.addSkillMod(actor, 'display_only_evasion', 100 * skillMod.getBase()) return - -def deduct(core, actor, name, base): - actor.deductSkillMod(name, base) - core.skillModService.deductSkillMod(actor, 'display_only_evasion', 100 * (actor.getSkillModBase('expertise_evasion_chance'))) + +def deduct(core, actor, skillMod, divisor): + core.skillModService.deductSkillMod(actor, 'display_only_evasion', 100 * skillMod.getBase()) return \ No newline at end of file diff --git a/scripts/skillMods/expertise_evasion_value.py b/scripts/skillMods/expertise_evasion_value.py index fa2af1aa..b5ccba7f 100644 --- a/scripts/skillMods/expertise_evasion_value.py +++ b/scripts/skillMods/expertise_evasion_value.py @@ -1,12 +1,10 @@ import sys -def add(core, actor, name, base): - actor.addSkillMod(name, base) - core.skillModService.addSkillMod(actor, 'combat_evasion_value', (actor.getSkillModBase('expertise_evasion_value'))) +def add(core, actor, skillMod, divisor): + core.skillModService.addSkillMod(actor, 'combat_evasion_value', skillMod) return - -def deduct(core, actor, name, base): - actor.deductSkillMod(name, base) - core.skillModService.deductSkillMod(actor, 'combat_evasion_value', (actor.getSkillModBase('expertise_evasion_value'))) + +def deduct(core, actor, skillMod, divisor): + core.skillModService.deductSkillMod(actor, 'combat_evasion_value', skillMod) return \ No newline at end of file diff --git a/scripts/skillMods/expertise_experimentation_increase_architect.py b/scripts/skillMods/expertise_experimentation_increase_architect.py index ee7769e2..b5c5e291 100644 --- a/scripts/skillMods/expertise_experimentation_increase_architect.py +++ b/scripts/skillMods/expertise_experimentation_increase_architect.py @@ -1,10 +1,8 @@ import sys -def add(core, actor, name, base): - actor.addSkillMod(name, base) +def add(core, actor, skillMod, value): return - -def deduct(core, actor, name, base): - actor.deductSkillMod(name, base) + +def deduct(core, actor, skillMod, value): return \ No newline at end of file diff --git a/scripts/skillMods/expertise_experimentation_increase_armorsmith.py b/scripts/skillMods/expertise_experimentation_increase_armorsmith.py index ee7769e2..b5c5e291 100644 --- a/scripts/skillMods/expertise_experimentation_increase_armorsmith.py +++ b/scripts/skillMods/expertise_experimentation_increase_armorsmith.py @@ -1,10 +1,8 @@ import sys -def add(core, actor, name, base): - actor.addSkillMod(name, base) +def add(core, actor, skillMod, value): return - -def deduct(core, actor, name, base): - actor.deductSkillMod(name, base) + +def deduct(core, actor, skillMod, value): return \ No newline at end of file diff --git a/scripts/skillMods/expertise_experimentation_increase_artisan.py b/scripts/skillMods/expertise_experimentation_increase_artisan.py index ee7769e2..b5c5e291 100644 --- a/scripts/skillMods/expertise_experimentation_increase_artisan.py +++ b/scripts/skillMods/expertise_experimentation_increase_artisan.py @@ -1,10 +1,8 @@ import sys -def add(core, actor, name, base): - actor.addSkillMod(name, base) +def add(core, actor, skillMod, value): return - -def deduct(core, actor, name, base): - actor.deductSkillMod(name, base) + +def deduct(core, actor, skillMod, value): return \ No newline at end of file diff --git a/scripts/skillMods/expertise_experimentation_increase_chef.py b/scripts/skillMods/expertise_experimentation_increase_chef.py index ee7769e2..b5c5e291 100644 --- a/scripts/skillMods/expertise_experimentation_increase_chef.py +++ b/scripts/skillMods/expertise_experimentation_increase_chef.py @@ -1,10 +1,8 @@ import sys -def add(core, actor, name, base): - actor.addSkillMod(name, base) +def add(core, actor, skillMod, value): return - -def deduct(core, actor, name, base): - actor.deductSkillMod(name, base) + +def deduct(core, actor, skillMod, value): return \ No newline at end of file diff --git a/scripts/skillMods/expertise_experimentation_increase_cybernetic.py b/scripts/skillMods/expertise_experimentation_increase_cybernetic.py index ee7769e2..b5c5e291 100644 --- a/scripts/skillMods/expertise_experimentation_increase_cybernetic.py +++ b/scripts/skillMods/expertise_experimentation_increase_cybernetic.py @@ -1,10 +1,8 @@ import sys -def add(core, actor, name, base): - actor.addSkillMod(name, base) +def add(core, actor, skillMod, value): return - -def deduct(core, actor, name, base): - actor.deductSkillMod(name, base) + +def deduct(core, actor, skillMod, value): return \ No newline at end of file diff --git a/scripts/skillMods/expertise_experimentation_increase_droid.py b/scripts/skillMods/expertise_experimentation_increase_droid.py index ee7769e2..b5c5e291 100644 --- a/scripts/skillMods/expertise_experimentation_increase_droid.py +++ b/scripts/skillMods/expertise_experimentation_increase_droid.py @@ -1,10 +1,8 @@ import sys -def add(core, actor, name, base): - actor.addSkillMod(name, base) +def add(core, actor, skillMod, value): return - -def deduct(core, actor, name, base): - actor.deductSkillMod(name, base) + +def deduct(core, actor, skillMod, value): return \ No newline at end of file diff --git a/scripts/skillMods/expertise_experimentation_increase_shipwright.py b/scripts/skillMods/expertise_experimentation_increase_shipwright.py index ee7769e2..b5c5e291 100644 --- a/scripts/skillMods/expertise_experimentation_increase_shipwright.py +++ b/scripts/skillMods/expertise_experimentation_increase_shipwright.py @@ -1,10 +1,8 @@ import sys -def add(core, actor, name, base): - actor.addSkillMod(name, base) +def add(core, actor, skillMod, value): return - -def deduct(core, actor, name, base): - actor.deductSkillMod(name, base) + +def deduct(core, actor, skillMod, value): return \ No newline at end of file diff --git a/scripts/skillMods/expertise_experimentation_increase_tailor.py b/scripts/skillMods/expertise_experimentation_increase_tailor.py index ee7769e2..b5c5e291 100644 --- a/scripts/skillMods/expertise_experimentation_increase_tailor.py +++ b/scripts/skillMods/expertise_experimentation_increase_tailor.py @@ -1,10 +1,8 @@ import sys -def add(core, actor, name, base): - actor.addSkillMod(name, base) +def add(core, actor, skillMod, value): return - -def deduct(core, actor, name, base): - actor.deductSkillMod(name, base) + +def deduct(core, actor, skillMod, value): return \ No newline at end of file diff --git a/scripts/skillMods/expertise_experimentation_increase_weaponsmith.py b/scripts/skillMods/expertise_experimentation_increase_weaponsmith.py index ee7769e2..b5c5e291 100644 --- a/scripts/skillMods/expertise_experimentation_increase_weaponsmith.py +++ b/scripts/skillMods/expertise_experimentation_increase_weaponsmith.py @@ -1,10 +1,8 @@ import sys -def add(core, actor, name, base): - actor.addSkillMod(name, base) +def add(core, actor, skillMod, value): return - -def deduct(core, actor, name, base): - actor.deductSkillMod(name, base) + +def deduct(core, actor, skillMod, value): return \ No newline at end of file diff --git a/scripts/skillMods/expertise_experimentation_point_architect.py b/scripts/skillMods/expertise_experimentation_point_architect.py index ee7769e2..b5c5e291 100644 --- a/scripts/skillMods/expertise_experimentation_point_architect.py +++ b/scripts/skillMods/expertise_experimentation_point_architect.py @@ -1,10 +1,8 @@ import sys -def add(core, actor, name, base): - actor.addSkillMod(name, base) +def add(core, actor, skillMod, value): return - -def deduct(core, actor, name, base): - actor.deductSkillMod(name, base) + +def deduct(core, actor, skillMod, value): return \ No newline at end of file diff --git a/scripts/skillMods/expertise_experimentation_point_armorsmith.py b/scripts/skillMods/expertise_experimentation_point_armorsmith.py index ee7769e2..b5c5e291 100644 --- a/scripts/skillMods/expertise_experimentation_point_armorsmith.py +++ b/scripts/skillMods/expertise_experimentation_point_armorsmith.py @@ -1,10 +1,8 @@ import sys -def add(core, actor, name, base): - actor.addSkillMod(name, base) +def add(core, actor, skillMod, value): return - -def deduct(core, actor, name, base): - actor.deductSkillMod(name, base) + +def deduct(core, actor, skillMod, value): return \ No newline at end of file diff --git a/scripts/skillMods/expertise_experimentation_point_artisan.py b/scripts/skillMods/expertise_experimentation_point_artisan.py index ee7769e2..b5c5e291 100644 --- a/scripts/skillMods/expertise_experimentation_point_artisan.py +++ b/scripts/skillMods/expertise_experimentation_point_artisan.py @@ -1,10 +1,8 @@ import sys -def add(core, actor, name, base): - actor.addSkillMod(name, base) +def add(core, actor, skillMod, value): return - -def deduct(core, actor, name, base): - actor.deductSkillMod(name, base) + +def deduct(core, actor, skillMod, value): return \ No newline at end of file diff --git a/scripts/skillMods/expertise_experimentation_point_chef.py b/scripts/skillMods/expertise_experimentation_point_chef.py index ee7769e2..b5c5e291 100644 --- a/scripts/skillMods/expertise_experimentation_point_chef.py +++ b/scripts/skillMods/expertise_experimentation_point_chef.py @@ -1,10 +1,8 @@ import sys -def add(core, actor, name, base): - actor.addSkillMod(name, base) +def add(core, actor, skillMod, value): return - -def deduct(core, actor, name, base): - actor.deductSkillMod(name, base) + +def deduct(core, actor, skillMod, value): return \ No newline at end of file diff --git a/scripts/skillMods/expertise_experimentation_point_droid.py b/scripts/skillMods/expertise_experimentation_point_droid.py index ee7769e2..b5c5e291 100644 --- a/scripts/skillMods/expertise_experimentation_point_droid.py +++ b/scripts/skillMods/expertise_experimentation_point_droid.py @@ -1,10 +1,8 @@ import sys -def add(core, actor, name, base): - actor.addSkillMod(name, base) +def add(core, actor, skillMod, value): return - -def deduct(core, actor, name, base): - actor.deductSkillMod(name, base) + +def deduct(core, actor, skillMod, value): return \ No newline at end of file diff --git a/scripts/skillMods/expertise_experimentation_point_shipwright.py b/scripts/skillMods/expertise_experimentation_point_shipwright.py index ee7769e2..b5c5e291 100644 --- a/scripts/skillMods/expertise_experimentation_point_shipwright.py +++ b/scripts/skillMods/expertise_experimentation_point_shipwright.py @@ -1,10 +1,8 @@ import sys -def add(core, actor, name, base): - actor.addSkillMod(name, base) +def add(core, actor, skillMod, value): return - -def deduct(core, actor, name, base): - actor.deductSkillMod(name, base) + +def deduct(core, actor, skillMod, value): return \ No newline at end of file diff --git a/scripts/skillMods/expertise_experimentation_point_tailor.py b/scripts/skillMods/expertise_experimentation_point_tailor.py index ee7769e2..b5c5e291 100644 --- a/scripts/skillMods/expertise_experimentation_point_tailor.py +++ b/scripts/skillMods/expertise_experimentation_point_tailor.py @@ -1,10 +1,8 @@ import sys -def add(core, actor, name, base): - actor.addSkillMod(name, base) +def add(core, actor, skillMod, value): return - -def deduct(core, actor, name, base): - actor.deductSkillMod(name, base) + +def deduct(core, actor, skillMod, value): return \ No newline at end of file diff --git a/scripts/skillMods/expertise_experimentation_point_weaponsmith.py b/scripts/skillMods/expertise_experimentation_point_weaponsmith.py index ee7769e2..b5c5e291 100644 --- a/scripts/skillMods/expertise_experimentation_point_weaponsmith.py +++ b/scripts/skillMods/expertise_experimentation_point_weaponsmith.py @@ -1,10 +1,8 @@ import sys -def add(core, actor, name, base): - actor.addSkillMod(name, base) +def add(core, actor, skillMod, value): return - -def deduct(core, actor, name, base): - actor.deductSkillMod(name, base) + +def deduct(core, actor, skillMod, value): return \ No newline at end of file diff --git a/scripts/skillMods/expertise_factory_energy_decrease.py b/scripts/skillMods/expertise_factory_energy_decrease.py index ee7769e2..b5c5e291 100644 --- a/scripts/skillMods/expertise_factory_energy_decrease.py +++ b/scripts/skillMods/expertise_factory_energy_decrease.py @@ -1,10 +1,8 @@ import sys -def add(core, actor, name, base): - actor.addSkillMod(name, base) +def add(core, actor, skillMod, value): return - -def deduct(core, actor, name, base): - actor.deductSkillMod(name, base) + +def deduct(core, actor, skillMod, value): return \ No newline at end of file diff --git a/scripts/skillMods/expertise_factory_maintenance_decrease.py b/scripts/skillMods/expertise_factory_maintenance_decrease.py index ee7769e2..b5c5e291 100644 --- a/scripts/skillMods/expertise_factory_maintenance_decrease.py +++ b/scripts/skillMods/expertise_factory_maintenance_decrease.py @@ -1,10 +1,8 @@ import sys -def add(core, actor, name, base): - actor.addSkillMod(name, base) +def add(core, actor, skillMod, value): return - -def deduct(core, actor, name, base): - actor.deductSkillMod(name, base) + +def deduct(core, actor, skillMod, value): return \ No newline at end of file diff --git a/scripts/skillMods/expertise_factory_production_increase.py b/scripts/skillMods/expertise_factory_production_increase.py index ee7769e2..b5c5e291 100644 --- a/scripts/skillMods/expertise_factory_production_increase.py +++ b/scripts/skillMods/expertise_factory_production_increase.py @@ -1,10 +1,8 @@ import sys -def add(core, actor, name, base): - actor.addSkillMod(name, base) +def add(core, actor, skillMod, value): return - -def deduct(core, actor, name, base): - actor.deductSkillMod(name, base) + +def deduct(core, actor, skillMod, value): return \ No newline at end of file diff --git a/scripts/skillMods/expertise_fast_talk_bonus.py b/scripts/skillMods/expertise_fast_talk_bonus.py index ee7769e2..b5c5e291 100644 --- a/scripts/skillMods/expertise_fast_talk_bonus.py +++ b/scripts/skillMods/expertise_fast_talk_bonus.py @@ -1,10 +1,8 @@ import sys -def add(core, actor, name, base): - actor.addSkillMod(name, base) +def add(core, actor, skillMod, value): return - -def deduct(core, actor, name, base): - actor.deductSkillMod(name, base) + +def deduct(core, actor, skillMod, value): return \ No newline at end of file diff --git a/scripts/skillMods/expertise_fast_talk_rank.py b/scripts/skillMods/expertise_fast_talk_rank.py index ee7769e2..b5c5e291 100644 --- a/scripts/skillMods/expertise_fast_talk_rank.py +++ b/scripts/skillMods/expertise_fast_talk_rank.py @@ -1,10 +1,8 @@ import sys -def add(core, actor, name, base): - actor.addSkillMod(name, base) +def add(core, actor, skillMod, value): return - -def deduct(core, actor, name, base): - actor.deductSkillMod(name, base) + +def deduct(core, actor, skillMod, value): return \ No newline at end of file diff --git a/scripts/skillMods/expertise_focus.py b/scripts/skillMods/expertise_focus.py index 0d10255e..17feedf8 100644 --- a/scripts/skillMods/expertise_focus.py +++ b/scripts/skillMods/expertise_focus.py @@ -1,15 +1,13 @@ import sys -def add(core, actor, name, base): - actor.addSkillMod(name, base) - core.skillModService.addSkillMod(actor, 'stamina_modified', (actor.getSkillModBase('expertise_stance_constitution'))) +def add(core, actor, skillMod, divisor): + core.skillModService.addSkillMod(actor, 'stamina_modified', (actor.getSkillModBase('expertise_focus_stamina'))) core.skillModService.addSkillMod(actor, 'display_only_critical', 100 * (actor.getSkillModBase('expertise_focus_critical_buff_line'))) core.skillModService.addSkillMod(actor, 'expertise_damage_melee', 1 * (actor.getSkillModBase('expertise_focus_damage_increase'))) return - -def deduct(core, actor, name, base): - actor.deductSkillMod(name, base) - core.skillModService.deductSkillMod(actor, 'stamina_modified', (actor.getSkillModBase('expertise_stance_constitution'))) + +def deduct(core, actor, skillMod, divisor): + core.skillModService.deductSkillMod(actor, 'stamina_modified', (actor.getSkillModBase('expertise_focus_stamina'))) core.skillModService.deductSkillMod(actor, 'display_only_critical', 100 * (actor.getSkillModBase('expertise_focus_critical_buff_line'))) core.skillModService.deductSkillMod(actor, 'expertise_damage_melee', 1 * (actor.getSkillModBase('expertise_focus_damage_increase'))) return diff --git a/scripts/skillMods/expertise_focus_critical_buff_line.py b/scripts/skillMods/expertise_focus_critical_buff_line.py index ee7769e2..b5c5e291 100644 --- a/scripts/skillMods/expertise_focus_critical_buff_line.py +++ b/scripts/skillMods/expertise_focus_critical_buff_line.py @@ -1,10 +1,8 @@ import sys -def add(core, actor, name, base): - actor.addSkillMod(name, base) +def add(core, actor, skillMod, value): return - -def deduct(core, actor, name, base): - actor.deductSkillMod(name, base) + +def deduct(core, actor, skillMod, value): return \ No newline at end of file diff --git a/scripts/skillMods/expertise_focus_damage_increase.py b/scripts/skillMods/expertise_focus_damage_increase.py new file mode 100644 index 00000000..b5c5e291 --- /dev/null +++ b/scripts/skillMods/expertise_focus_damage_increase.py @@ -0,0 +1,8 @@ +import sys + +def add(core, actor, skillMod, value): + return + +def deduct(core, actor, skillMod, value): + return + \ No newline at end of file diff --git a/scripts/skillMods/expertise_focus_stamina.py b/scripts/skillMods/expertise_focus_stamina.py index ee7769e2..b5c5e291 100644 --- a/scripts/skillMods/expertise_focus_stamina.py +++ b/scripts/skillMods/expertise_focus_stamina.py @@ -1,10 +1,8 @@ import sys -def add(core, actor, name, base): - actor.addSkillMod(name, base) +def add(core, actor, skillMod, value): return - -def deduct(core, actor, name, base): - actor.deductSkillMod(name, base) + +def deduct(core, actor, skillMod, value): return \ No newline at end of file diff --git a/scripts/skillMods/expertise_focus_strength.py b/scripts/skillMods/expertise_focus_strength.py index ee7769e2..b5c5e291 100644 --- a/scripts/skillMods/expertise_focus_strength.py +++ b/scripts/skillMods/expertise_focus_strength.py @@ -1,10 +1,8 @@ import sys -def add(core, actor, name, base): - actor.addSkillMod(name, base) +def add(core, actor, skillMod, value): return - -def deduct(core, actor, name, base): - actor.deductSkillMod(name, base) + +def deduct(core, actor, skillMod, value): return \ No newline at end of file diff --git a/scripts/skillMods/expertise_force_cloak_combat_escape.py b/scripts/skillMods/expertise_force_cloak_combat_escape.py index ee7769e2..b5c5e291 100644 --- a/scripts/skillMods/expertise_force_cloak_combat_escape.py +++ b/scripts/skillMods/expertise_force_cloak_combat_escape.py @@ -1,10 +1,8 @@ import sys -def add(core, actor, name, base): - actor.addSkillMod(name, base) +def add(core, actor, skillMod, value): return - -def deduct(core, actor, name, base): - actor.deductSkillMod(name, base) + +def deduct(core, actor, skillMod, value): return \ No newline at end of file diff --git a/scripts/skillMods/expertise_freeshot_co_dm.py b/scripts/skillMods/expertise_freeshot_co_dm.py index ee7769e2..b5c5e291 100644 --- a/scripts/skillMods/expertise_freeshot_co_dm.py +++ b/scripts/skillMods/expertise_freeshot_co_dm.py @@ -1,10 +1,8 @@ import sys -def add(core, actor, name, base): - actor.addSkillMod(name, base) +def add(core, actor, skillMod, value): return - -def deduct(core, actor, name, base): - actor.deductSkillMod(name, base) + +def deduct(core, actor, skillMod, value): return \ No newline at end of file diff --git a/scripts/skillMods/expertise_freeshot_co_grenade.py b/scripts/skillMods/expertise_freeshot_co_grenade.py index ee7769e2..b5c5e291 100644 --- a/scripts/skillMods/expertise_freeshot_co_grenade.py +++ b/scripts/skillMods/expertise_freeshot_co_grenade.py @@ -1,10 +1,8 @@ import sys -def add(core, actor, name, base): - actor.addSkillMod(name, base) +def add(core, actor, skillMod, value): return - -def deduct(core, actor, name, base): - actor.deductSkillMod(name, base) + +def deduct(core, actor, skillMod, value): return \ No newline at end of file diff --git a/scripts/skillMods/expertise_freeshot_dm.py b/scripts/skillMods/expertise_freeshot_dm.py index ee7769e2..b5c5e291 100644 --- a/scripts/skillMods/expertise_freeshot_dm.py +++ b/scripts/skillMods/expertise_freeshot_dm.py @@ -1,10 +1,8 @@ import sys -def add(core, actor, name, base): - actor.addSkillMod(name, base) +def add(core, actor, skillMod, value): return - -def deduct(core, actor, name, base): - actor.deductSkillMod(name, base) + +def deduct(core, actor, skillMod, value): return \ No newline at end of file diff --git a/scripts/skillMods/expertise_freeshot_fs_dm.py b/scripts/skillMods/expertise_freeshot_fs_dm.py index ee7769e2..b5c5e291 100644 --- a/scripts/skillMods/expertise_freeshot_fs_dm.py +++ b/scripts/skillMods/expertise_freeshot_fs_dm.py @@ -1,10 +1,8 @@ import sys -def add(core, actor, name, base): - actor.addSkillMod(name, base) +def add(core, actor, skillMod, value): return - -def deduct(core, actor, name, base): - actor.deductSkillMod(name, base) + +def deduct(core, actor, skillMod, value): return \ No newline at end of file diff --git a/scripts/skillMods/expertise_freeshot_me_debuff.py b/scripts/skillMods/expertise_freeshot_me_debuff.py index ee7769e2..b5c5e291 100644 --- a/scripts/skillMods/expertise_freeshot_me_debuff.py +++ b/scripts/skillMods/expertise_freeshot_me_debuff.py @@ -1,10 +1,8 @@ import sys -def add(core, actor, name, base): - actor.addSkillMod(name, base) +def add(core, actor, skillMod, value): return - -def deduct(core, actor, name, base): - actor.deductSkillMod(name, base) + +def deduct(core, actor, skillMod, value): return \ No newline at end of file diff --git a/scripts/skillMods/expertise_freeshot_me_dm.py b/scripts/skillMods/expertise_freeshot_me_dm.py index ee7769e2..b5c5e291 100644 --- a/scripts/skillMods/expertise_freeshot_me_dm.py +++ b/scripts/skillMods/expertise_freeshot_me_dm.py @@ -1,10 +1,8 @@ import sys -def add(core, actor, name, base): - actor.addSkillMod(name, base) +def add(core, actor, skillMod, value): return - -def deduct(core, actor, name, base): - actor.deductSkillMod(name, base) + +def deduct(core, actor, skillMod, value): return \ No newline at end of file diff --git a/scripts/skillMods/expertise_freeshot_me_heal.py b/scripts/skillMods/expertise_freeshot_me_heal.py index ee7769e2..b5c5e291 100644 --- a/scripts/skillMods/expertise_freeshot_me_heal.py +++ b/scripts/skillMods/expertise_freeshot_me_heal.py @@ -1,10 +1,8 @@ import sys -def add(core, actor, name, base): - actor.addSkillMod(name, base) +def add(core, actor, skillMod, value): return - -def deduct(core, actor, name, base): - actor.deductSkillMod(name, base) + +def deduct(core, actor, skillMod, value): return \ No newline at end of file diff --git a/scripts/skillMods/expertise_freeshot_of_aoe.py b/scripts/skillMods/expertise_freeshot_of_aoe.py index ee7769e2..b5c5e291 100644 --- a/scripts/skillMods/expertise_freeshot_of_aoe.py +++ b/scripts/skillMods/expertise_freeshot_of_aoe.py @@ -1,10 +1,8 @@ import sys -def add(core, actor, name, base): - actor.addSkillMod(name, base) +def add(core, actor, skillMod, value): return - -def deduct(core, actor, name, base): - actor.deductSkillMod(name, base) + +def deduct(core, actor, skillMod, value): return \ No newline at end of file diff --git a/scripts/skillMods/expertise_freeshot_of_sure.py b/scripts/skillMods/expertise_freeshot_of_sure.py index ee7769e2..b5c5e291 100644 --- a/scripts/skillMods/expertise_freeshot_of_sure.py +++ b/scripts/skillMods/expertise_freeshot_of_sure.py @@ -1,10 +1,8 @@ import sys -def add(core, actor, name, base): - actor.addSkillMod(name, base) +def add(core, actor, skillMod, value): return - -def deduct(core, actor, name, base): - actor.deductSkillMod(name, base) + +def deduct(core, actor, skillMod, value): return \ No newline at end of file diff --git a/scripts/skillMods/expertise_freeshot_sm_dm.py b/scripts/skillMods/expertise_freeshot_sm_dm.py index ee7769e2..b5c5e291 100644 --- a/scripts/skillMods/expertise_freeshot_sm_dm.py +++ b/scripts/skillMods/expertise_freeshot_sm_dm.py @@ -1,10 +1,8 @@ import sys -def add(core, actor, name, base): - actor.addSkillMod(name, base) +def add(core, actor, skillMod, value): return - -def deduct(core, actor, name, base): - actor.deductSkillMod(name, base) + +def deduct(core, actor, skillMod, value): return \ No newline at end of file diff --git a/scripts/skillMods/expertise_freeshot_sm_dm_cc.py b/scripts/skillMods/expertise_freeshot_sm_dm_cc.py index ee7769e2..b5c5e291 100644 --- a/scripts/skillMods/expertise_freeshot_sm_dm_cc.py +++ b/scripts/skillMods/expertise_freeshot_sm_dm_cc.py @@ -1,10 +1,8 @@ import sys -def add(core, actor, name, base): - actor.addSkillMod(name, base) +def add(core, actor, skillMod, value): return - -def deduct(core, actor, name, base): - actor.deductSkillMod(name, base) + +def deduct(core, actor, skillMod, value): return \ No newline at end of file diff --git a/scripts/skillMods/expertise_freeshot_sp_dm.py b/scripts/skillMods/expertise_freeshot_sp_dm.py index ee7769e2..b5c5e291 100644 --- a/scripts/skillMods/expertise_freeshot_sp_dm.py +++ b/scripts/skillMods/expertise_freeshot_sp_dm.py @@ -1,10 +1,8 @@ import sys -def add(core, actor, name, base): - actor.addSkillMod(name, base) +def add(core, actor, skillMod, value): return - -def deduct(core, actor, name, base): - actor.deductSkillMod(name, base) + +def deduct(core, actor, skillMod, value): return \ No newline at end of file diff --git a/scripts/skillMods/expertise_fs_force_clarity_1_proc.py b/scripts/skillMods/expertise_fs_force_clarity_1_proc.py index ee7769e2..b5c5e291 100644 --- a/scripts/skillMods/expertise_fs_force_clarity_1_proc.py +++ b/scripts/skillMods/expertise_fs_force_clarity_1_proc.py @@ -1,10 +1,8 @@ import sys -def add(core, actor, name, base): - actor.addSkillMod(name, base) +def add(core, actor, skillMod, value): return - -def deduct(core, actor, name, base): - actor.deductSkillMod(name, base) + +def deduct(core, actor, skillMod, value): return \ No newline at end of file diff --git a/scripts/skillMods/expertise_glancing_blow_all.py b/scripts/skillMods/expertise_glancing_blow_all.py index 3f89621b..69f34dd8 100644 --- a/scripts/skillMods/expertise_glancing_blow_all.py +++ b/scripts/skillMods/expertise_glancing_blow_all.py @@ -1,12 +1,10 @@ import sys -def add(core, actor, name, base): - actor.addSkillMod(name, base) - core.skillModService.addSkillMod(actor, 'display_only_glancing_blow', 100 * (actor.getSkillModBase('expertise_glancing_blow_all'))) +def add(core, actor, skillMod, divisor): + core.skillModService.addSkillMod(actor, 'display_only_glancing_blow', 100 * skillMod.getBase()) return - -def deduct(core, actor, name, base): - actor.deductSkillMod(name, base) - core.skillModService.deductSkillMod(actor, 'display_only_glancing_blow', 100 * (actor.getSkillModBase('expertise_glancing_blow_all'))) + +def deduct(core, actor, skillMod, divisor): + core.skillModService.deductSkillMod(actor, 'display_only_glancing_blow', 100 * skillMod.getBase()) return \ No newline at end of file diff --git a/scripts/skillMods/expertise_glancing_blow_melee.py b/scripts/skillMods/expertise_glancing_blow_melee.py index ee7769e2..b5c5e291 100644 --- a/scripts/skillMods/expertise_glancing_blow_melee.py +++ b/scripts/skillMods/expertise_glancing_blow_melee.py @@ -1,10 +1,8 @@ import sys -def add(core, actor, name, base): - actor.addSkillMod(name, base) +def add(core, actor, skillMod, value): return - -def deduct(core, actor, name, base): - actor.deductSkillMod(name, base) + +def deduct(core, actor, skillMod, value): return \ No newline at end of file diff --git a/scripts/skillMods/expertise_glancing_blow_melee_defense.py b/scripts/skillMods/expertise_glancing_blow_melee_defense.py index ee7769e2..b5c5e291 100644 --- a/scripts/skillMods/expertise_glancing_blow_melee_defense.py +++ b/scripts/skillMods/expertise_glancing_blow_melee_defense.py @@ -1,10 +1,8 @@ import sys -def add(core, actor, name, base): - actor.addSkillMod(name, base) +def add(core, actor, skillMod, value): return - -def deduct(core, actor, name, base): - actor.deductSkillMod(name, base) + +def deduct(core, actor, skillMod, value): return \ No newline at end of file diff --git a/scripts/skillMods/expertise_glancing_blow_ranged.py b/scripts/skillMods/expertise_glancing_blow_ranged.py index ee7769e2..b5c5e291 100644 --- a/scripts/skillMods/expertise_glancing_blow_ranged.py +++ b/scripts/skillMods/expertise_glancing_blow_ranged.py @@ -1,10 +1,8 @@ import sys -def add(core, actor, name, base): - actor.addSkillMod(name, base) +def add(core, actor, skillMod, value): return - -def deduct(core, actor, name, base): - actor.deductSkillMod(name, base) + +def deduct(core, actor, skillMod, value): return \ No newline at end of file diff --git a/scripts/skillMods/expertise_harvester_collection_increase.py b/scripts/skillMods/expertise_harvester_collection_increase.py index ee7769e2..b5c5e291 100644 --- a/scripts/skillMods/expertise_harvester_collection_increase.py +++ b/scripts/skillMods/expertise_harvester_collection_increase.py @@ -1,10 +1,8 @@ import sys -def add(core, actor, name, base): - actor.addSkillMod(name, base) +def add(core, actor, skillMod, value): return - -def deduct(core, actor, name, base): - actor.deductSkillMod(name, base) + +def deduct(core, actor, skillMod, value): return \ No newline at end of file diff --git a/scripts/skillMods/expertise_harvester_energy_decrease.py b/scripts/skillMods/expertise_harvester_energy_decrease.py index ee7769e2..b5c5e291 100644 --- a/scripts/skillMods/expertise_harvester_energy_decrease.py +++ b/scripts/skillMods/expertise_harvester_energy_decrease.py @@ -1,10 +1,8 @@ import sys -def add(core, actor, name, base): - actor.addSkillMod(name, base) +def add(core, actor, skillMod, value): return - -def deduct(core, actor, name, base): - actor.deductSkillMod(name, base) + +def deduct(core, actor, skillMod, value): return \ No newline at end of file diff --git a/scripts/skillMods/expertise_harvester_maintenance_decrease.py b/scripts/skillMods/expertise_harvester_maintenance_decrease.py index ee7769e2..b5c5e291 100644 --- a/scripts/skillMods/expertise_harvester_maintenance_decrease.py +++ b/scripts/skillMods/expertise_harvester_maintenance_decrease.py @@ -1,10 +1,8 @@ import sys -def add(core, actor, name, base): - actor.addSkillMod(name, base) +def add(core, actor, skillMod, value): return - -def deduct(core, actor, name, base): - actor.deductSkillMod(name, base) + +def deduct(core, actor, skillMod, value): return \ No newline at end of file diff --git a/scripts/skillMods/expertise_havester_storage_increase.py b/scripts/skillMods/expertise_havester_storage_increase.py index ee7769e2..b5c5e291 100644 --- a/scripts/skillMods/expertise_havester_storage_increase.py +++ b/scripts/skillMods/expertise_havester_storage_increase.py @@ -1,10 +1,8 @@ import sys -def add(core, actor, name, base): - actor.addSkillMod(name, base) +def add(core, actor, skillMod, value): return - -def deduct(core, actor, name, base): - actor.deductSkillMod(name, base) + +def deduct(core, actor, skillMod, value): return \ No newline at end of file diff --git a/scripts/skillMods/expertise_healing_all.py b/scripts/skillMods/expertise_healing_all.py index ee7769e2..b5c5e291 100644 --- a/scripts/skillMods/expertise_healing_all.py +++ b/scripts/skillMods/expertise_healing_all.py @@ -1,10 +1,8 @@ import sys -def add(core, actor, name, base): - actor.addSkillMod(name, base) +def add(core, actor, skillMod, value): return - -def deduct(core, actor, name, base): - actor.deductSkillMod(name, base) + +def deduct(core, actor, skillMod, value): return \ No newline at end of file diff --git a/scripts/skillMods/expertise_healing_line_fs_heal.py b/scripts/skillMods/expertise_healing_line_fs_heal.py index ee7769e2..b5c5e291 100644 --- a/scripts/skillMods/expertise_healing_line_fs_heal.py +++ b/scripts/skillMods/expertise_healing_line_fs_heal.py @@ -1,10 +1,8 @@ import sys -def add(core, actor, name, base): - actor.addSkillMod(name, base) +def add(core, actor, skillMod, value): return - -def deduct(core, actor, name, base): - actor.deductSkillMod(name, base) + +def deduct(core, actor, skillMod, value): return \ No newline at end of file diff --git a/scripts/skillMods/expertise_healing_line_me_heal.py b/scripts/skillMods/expertise_healing_line_me_heal.py index ee7769e2..b5c5e291 100644 --- a/scripts/skillMods/expertise_healing_line_me_heal.py +++ b/scripts/skillMods/expertise_healing_line_me_heal.py @@ -1,10 +1,8 @@ import sys -def add(core, actor, name, base): - actor.addSkillMod(name, base) +def add(core, actor, skillMod, value): return - -def deduct(core, actor, name, base): - actor.deductSkillMod(name, base) + +def deduct(core, actor, skillMod, value): return \ No newline at end of file diff --git a/scripts/skillMods/expertise_healing_line_me_hot.py b/scripts/skillMods/expertise_healing_line_me_hot.py index ee7769e2..b5c5e291 100644 --- a/scripts/skillMods/expertise_healing_line_me_hot.py +++ b/scripts/skillMods/expertise_healing_line_me_hot.py @@ -1,10 +1,8 @@ import sys -def add(core, actor, name, base): - actor.addSkillMod(name, base) +def add(core, actor, skillMod, value): return - -def deduct(core, actor, name, base): - actor.deductSkillMod(name, base) + +def deduct(core, actor, skillMod, value): return \ No newline at end of file diff --git a/scripts/skillMods/expertise_healing_line_me_hot_ae.py b/scripts/skillMods/expertise_healing_line_me_hot_ae.py index ee7769e2..b5c5e291 100644 --- a/scripts/skillMods/expertise_healing_line_me_hot_ae.py +++ b/scripts/skillMods/expertise_healing_line_me_hot_ae.py @@ -1,10 +1,8 @@ import sys -def add(core, actor, name, base): - actor.addSkillMod(name, base) +def add(core, actor, skillMod, value): return - -def deduct(core, actor, name, base): - actor.deductSkillMod(name, base) + +def deduct(core, actor, skillMod, value): return \ No newline at end of file diff --git a/scripts/skillMods/expertise_healing_line_of_heal.py b/scripts/skillMods/expertise_healing_line_of_heal.py index ee7769e2..b5c5e291 100644 --- a/scripts/skillMods/expertise_healing_line_of_heal.py +++ b/scripts/skillMods/expertise_healing_line_of_heal.py @@ -1,10 +1,8 @@ import sys -def add(core, actor, name, base): - actor.addSkillMod(name, base) +def add(core, actor, skillMod, value): return - -def deduct(core, actor, name, base): - actor.deductSkillMod(name, base) + +def deduct(core, actor, skillMod, value): return \ No newline at end of file diff --git a/scripts/skillMods/expertise_healing_line_sm_heal.py b/scripts/skillMods/expertise_healing_line_sm_heal.py index ee7769e2..b5c5e291 100644 --- a/scripts/skillMods/expertise_healing_line_sm_heal.py +++ b/scripts/skillMods/expertise_healing_line_sm_heal.py @@ -1,10 +1,8 @@ import sys -def add(core, actor, name, base): - actor.addSkillMod(name, base) +def add(core, actor, skillMod, value): return - -def deduct(core, actor, name, base): - actor.deductSkillMod(name, base) + +def deduct(core, actor, skillMod, value): return \ No newline at end of file diff --git a/scripts/skillMods/expertise_healing_line_sp_cloaked_heal.py b/scripts/skillMods/expertise_healing_line_sp_cloaked_heal.py index ee7769e2..b5c5e291 100644 --- a/scripts/skillMods/expertise_healing_line_sp_cloaked_heal.py +++ b/scripts/skillMods/expertise_healing_line_sp_cloaked_heal.py @@ -1,10 +1,8 @@ import sys -def add(core, actor, name, base): - actor.addSkillMod(name, base) +def add(core, actor, skillMod, value): return - -def deduct(core, actor, name, base): - actor.deductSkillMod(name, base) + +def deduct(core, actor, skillMod, value): return \ No newline at end of file diff --git a/scripts/skillMods/expertise_healing_line_sp_heal.py b/scripts/skillMods/expertise_healing_line_sp_heal.py index ee7769e2..b5c5e291 100644 --- a/scripts/skillMods/expertise_healing_line_sp_heal.py +++ b/scripts/skillMods/expertise_healing_line_sp_heal.py @@ -1,10 +1,8 @@ import sys -def add(core, actor, name, base): - actor.addSkillMod(name, base) +def add(core, actor, skillMod, value): return - -def deduct(core, actor, name, base): - actor.deductSkillMod(name, base) + +def deduct(core, actor, skillMod, value): return \ No newline at end of file diff --git a/scripts/skillMods/expertise_hit_by_luck.py b/scripts/skillMods/expertise_hit_by_luck.py index ee7769e2..b5c5e291 100644 --- a/scripts/skillMods/expertise_hit_by_luck.py +++ b/scripts/skillMods/expertise_hit_by_luck.py @@ -1,10 +1,8 @@ import sys -def add(core, actor, name, base): - actor.addSkillMod(name, base) +def add(core, actor, skillMod, value): return - -def deduct(core, actor, name, base): - actor.deductSkillMod(name, base) + +def deduct(core, actor, skillMod, value): return \ No newline at end of file diff --git a/scripts/skillMods/expertise_increase_hit_by_luck.py b/scripts/skillMods/expertise_increase_hit_by_luck.py index ee7769e2..b5c5e291 100644 --- a/scripts/skillMods/expertise_increase_hit_by_luck.py +++ b/scripts/skillMods/expertise_increase_hit_by_luck.py @@ -1,10 +1,8 @@ import sys -def add(core, actor, name, base): - actor.addSkillMod(name, base) +def add(core, actor, skillMod, value): return - -def deduct(core, actor, name, base): - actor.deductSkillMod(name, base) + +def deduct(core, actor, skillMod, value): return \ No newline at end of file diff --git a/scripts/skillMods/expertise_increase_smuggler_loot.py b/scripts/skillMods/expertise_increase_smuggler_loot.py index ee7769e2..b5c5e291 100644 --- a/scripts/skillMods/expertise_increase_smuggler_loot.py +++ b/scripts/skillMods/expertise_increase_smuggler_loot.py @@ -1,10 +1,8 @@ import sys -def add(core, actor, name, base): - actor.addSkillMod(name, base) +def add(core, actor, skillMod, value): return - -def deduct(core, actor, name, base): - actor.deductSkillMod(name, base) + +def deduct(core, actor, skillMod, value): return \ No newline at end of file diff --git a/scripts/skillMods/expertise_innate_protection_all.py b/scripts/skillMods/expertise_innate_protection_all.py index ee7769e2..7cf5648d 100644 --- a/scripts/skillMods/expertise_innate_protection_all.py +++ b/scripts/skillMods/expertise_innate_protection_all.py @@ -1,10 +1,20 @@ import sys -def add(core, actor, name, base): - actor.addSkillMod(name, base) +def add(core, actor, skillMod, divisor): + core.skillModService.addSkillMod(actor, 'energy', skillMod) + core.skillModService.addSkillMod(actor, 'kinetic', skillMod) + core.skillModService.addSkillMod(actor, 'acid', skillMod) + core.skillModService.addSkillMod(actor, 'heat', skillMod) + core.skillModService.addSkillMod(actor, 'cold', skillMod) + core.skillModService.addSkillMod(actor, 'electricity', skillMod) return - -def deduct(core, actor, name, base): - actor.deductSkillMod(name, base) + +def deduct(core, actor, skillMod, divisor): + core.skillModService.deductSkillMod(actor, 'energy', skillMod) + core.skillModService.deductSkillMod(actor, 'kinetic', skillMod) + core.skillModService.deductSkillMod(actor, 'acid', skillMod) + core.skillModService.deductSkillMod(actor, 'heat', skillMod) + core.skillModService.deductSkillMod(actor, 'cold', skillMod) + core.skillModService.deductSkillMod(actor, 'electricity', skillMod) return \ No newline at end of file diff --git a/scripts/skillMods/expertise_innate_protection_energy.py b/scripts/skillMods/expertise_innate_protection_energy.py index ee7769e2..575c6b90 100644 --- a/scripts/skillMods/expertise_innate_protection_energy.py +++ b/scripts/skillMods/expertise_innate_protection_energy.py @@ -1,10 +1,10 @@ import sys -def add(core, actor, name, base): - actor.addSkillMod(name, base) +def add(core, actor, skillMod, divisor): + core.skillModService.addSkillMod(actor, 'energy', skillMod) return - -def deduct(core, actor, name, base): - actor.deductSkillMod(name, base) + +def deduct(core, actor, skillMod, divisor): + core.skillModService.deductSkillMod(actor, 'energy', skillMod) return \ No newline at end of file diff --git a/scripts/skillMods/expertise_innate_protection_kinetic.py b/scripts/skillMods/expertise_innate_protection_kinetic.py index ee7769e2..ca7c4cd7 100644 --- a/scripts/skillMods/expertise_innate_protection_kinetic.py +++ b/scripts/skillMods/expertise_innate_protection_kinetic.py @@ -1,10 +1,10 @@ import sys -def add(core, actor, name, base): - actor.addSkillMod(name, base) +def add(core, actor, skillMod, divisor): + core.skillModService.addSkillMod(actor, 'kinetic', skillMod) return -def deduct(core, actor, name, base): - actor.deductSkillMod(name, base) +def deduct(core, actor, skillMod, divisor): + core.skillModService.deductSkillMod(actor, 'kinetic', skillMod) return \ No newline at end of file diff --git a/scripts/skillMods/expertise_innate_reduction_all_player.py b/scripts/skillMods/expertise_innate_reduction_all_player.py index ee7769e2..b5c5e291 100644 --- a/scripts/skillMods/expertise_innate_reduction_all_player.py +++ b/scripts/skillMods/expertise_innate_reduction_all_player.py @@ -1,10 +1,8 @@ import sys -def add(core, actor, name, base): - actor.addSkillMod(name, base) +def add(core, actor, skillMod, value): return - -def deduct(core, actor, name, base): - actor.deductSkillMod(name, base) + +def deduct(core, actor, skillMod, value): return \ No newline at end of file diff --git a/scripts/skillMods/expertise_junk_dealer_cut.py b/scripts/skillMods/expertise_junk_dealer_cut.py index ee7769e2..b5c5e291 100644 --- a/scripts/skillMods/expertise_junk_dealer_cut.py +++ b/scripts/skillMods/expertise_junk_dealer_cut.py @@ -1,10 +1,8 @@ import sys -def add(core, actor, name, base): - actor.addSkillMod(name, base) +def add(core, actor, skillMod, value): return - -def deduct(core, actor, name, base): - actor.deductSkillMod(name, base) + +def deduct(core, actor, skillMod, value): return \ No newline at end of file diff --git a/scripts/skillMods/expertise_lucky_break_chance.py b/scripts/skillMods/expertise_lucky_break_chance.py index ee7769e2..b5c5e291 100644 --- a/scripts/skillMods/expertise_lucky_break_chance.py +++ b/scripts/skillMods/expertise_lucky_break_chance.py @@ -1,10 +1,8 @@ import sys -def add(core, actor, name, base): - actor.addSkillMod(name, base) +def add(core, actor, skillMod, value): return - -def deduct(core, actor, name, base): - actor.deductSkillMod(name, base) + +def deduct(core, actor, skillMod, value): return \ No newline at end of file diff --git a/scripts/skillMods/expertise_miss_by_luck.py b/scripts/skillMods/expertise_miss_by_luck.py index ee7769e2..b5c5e291 100644 --- a/scripts/skillMods/expertise_miss_by_luck.py +++ b/scripts/skillMods/expertise_miss_by_luck.py @@ -1,10 +1,8 @@ import sys -def add(core, actor, name, base): - actor.addSkillMod(name, base) +def add(core, actor, skillMod, value): return - -def deduct(core, actor, name, base): - actor.deductSkillMod(name, base) + +def deduct(core, actor, skillMod, value): return \ No newline at end of file diff --git a/scripts/skillMods/expertise_movement_buff_fs_force_run.py b/scripts/skillMods/expertise_movement_buff_fs_force_run.py index ee7769e2..b5c5e291 100644 --- a/scripts/skillMods/expertise_movement_buff_fs_force_run.py +++ b/scripts/skillMods/expertise_movement_buff_fs_force_run.py @@ -1,10 +1,8 @@ import sys -def add(core, actor, name, base): - actor.addSkillMod(name, base) +def add(core, actor, skillMod, value): return - -def deduct(core, actor, name, base): - actor.deductSkillMod(name, base) + +def deduct(core, actor, skillMod, value): return \ No newline at end of file diff --git a/scripts/skillMods/expertise_movement_buff_invis_sp_buff_invis_1.py b/scripts/skillMods/expertise_movement_buff_invis_sp_buff_invis_1.py index ee7769e2..b5c5e291 100644 --- a/scripts/skillMods/expertise_movement_buff_invis_sp_buff_invis_1.py +++ b/scripts/skillMods/expertise_movement_buff_invis_sp_buff_invis_1.py @@ -1,10 +1,8 @@ import sys -def add(core, actor, name, base): - actor.addSkillMod(name, base) +def add(core, actor, skillMod, value): return - -def deduct(core, actor, name, base): - actor.deductSkillMod(name, base) + +def deduct(core, actor, skillMod, value): return \ No newline at end of file diff --git a/scripts/skillMods/expertise_movement_buff_invis_sp_buff_stealth_1.py b/scripts/skillMods/expertise_movement_buff_invis_sp_buff_stealth_1.py index ee7769e2..b5c5e291 100644 --- a/scripts/skillMods/expertise_movement_buff_invis_sp_buff_stealth_1.py +++ b/scripts/skillMods/expertise_movement_buff_invis_sp_buff_stealth_1.py @@ -1,10 +1,8 @@ import sys -def add(core, actor, name, base): - actor.addSkillMod(name, base) +def add(core, actor, skillMod, value): return - -def deduct(core, actor, name, base): - actor.deductSkillMod(name, base) + +def deduct(core, actor, skillMod, value): return \ No newline at end of file diff --git a/scripts/skillMods/expertise_on_target_critical.py b/scripts/skillMods/expertise_on_target_critical.py index ee7769e2..b5c5e291 100644 --- a/scripts/skillMods/expertise_on_target_critical.py +++ b/scripts/skillMods/expertise_on_target_critical.py @@ -1,10 +1,8 @@ import sys -def add(core, actor, name, base): - actor.addSkillMod(name, base) +def add(core, actor, skillMod, value): return - -def deduct(core, actor, name, base): - actor.deductSkillMod(name, base) + +def deduct(core, actor, skillMod, value): return \ No newline at end of file diff --git a/scripts/skillMods/expertise_on_target_protection.py b/scripts/skillMods/expertise_on_target_protection.py index ee7769e2..b5c5e291 100644 --- a/scripts/skillMods/expertise_on_target_protection.py +++ b/scripts/skillMods/expertise_on_target_protection.py @@ -1,10 +1,8 @@ import sys -def add(core, actor, name, base): - actor.addSkillMod(name, base) +def add(core, actor, skillMod, value): return - -def deduct(core, actor, name, base): - actor.deductSkillMod(name, base) + +def deduct(core, actor, skillMod, value): return \ No newline at end of file diff --git a/scripts/skillMods/expertise_overridable_protection_generic.py b/scripts/skillMods/expertise_overridable_protection_generic.py index ee7769e2..b5c5e291 100644 --- a/scripts/skillMods/expertise_overridable_protection_generic.py +++ b/scripts/skillMods/expertise_overridable_protection_generic.py @@ -1,10 +1,8 @@ import sys -def add(core, actor, name, base): - actor.addSkillMod(name, base) +def add(core, actor, skillMod, value): return - -def deduct(core, actor, name, base): - actor.deductSkillMod(name, base) + +def deduct(core, actor, skillMod, value): return \ No newline at end of file diff --git a/scripts/skillMods/expertise_parry.py b/scripts/skillMods/expertise_parry.py index ee7769e2..b5c5e291 100644 --- a/scripts/skillMods/expertise_parry.py +++ b/scripts/skillMods/expertise_parry.py @@ -1,10 +1,8 @@ import sys -def add(core, actor, name, base): - actor.addSkillMod(name, base) +def add(core, actor, skillMod, value): return - -def deduct(core, actor, name, base): - actor.deductSkillMod(name, base) + +def deduct(core, actor, skillMod, value): return \ No newline at end of file diff --git a/scripts/skillMods/expertise_pet_dodge.py b/scripts/skillMods/expertise_pet_dodge.py index ee7769e2..b5c5e291 100644 --- a/scripts/skillMods/expertise_pet_dodge.py +++ b/scripts/skillMods/expertise_pet_dodge.py @@ -1,10 +1,8 @@ import sys -def add(core, actor, name, base): - actor.addSkillMod(name, base) +def add(core, actor, skillMod, value): return - -def deduct(core, actor, name, base): - actor.deductSkillMod(name, base) + +def deduct(core, actor, skillMod, value): return \ No newline at end of file diff --git a/scripts/skillMods/expertise_poison_knuckle_proc.py b/scripts/skillMods/expertise_poison_knuckle_proc.py index ee7769e2..b5c5e291 100644 --- a/scripts/skillMods/expertise_poison_knuckle_proc.py +++ b/scripts/skillMods/expertise_poison_knuckle_proc.py @@ -1,10 +1,8 @@ import sys -def add(core, actor, name, base): - actor.addSkillMod(name, base) +def add(core, actor, skillMod, value): return - -def deduct(core, actor, name, base): - actor.deductSkillMod(name, base) + +def deduct(core, actor, skillMod, value): return \ No newline at end of file diff --git a/scripts/skillMods/expertise_range_bonus_all.py b/scripts/skillMods/expertise_range_bonus_all.py index ee7769e2..b5c5e291 100644 --- a/scripts/skillMods/expertise_range_bonus_all.py +++ b/scripts/skillMods/expertise_range_bonus_all.py @@ -1,10 +1,8 @@ import sys -def add(core, actor, name, base): - actor.addSkillMod(name, base) +def add(core, actor, skillMod, value): return - -def deduct(core, actor, name, base): - actor.deductSkillMod(name, base) + +def deduct(core, actor, skillMod, value): return \ No newline at end of file diff --git a/scripts/skillMods/expertise_range_bonus_carbine.py b/scripts/skillMods/expertise_range_bonus_carbine.py index ee7769e2..b5c5e291 100644 --- a/scripts/skillMods/expertise_range_bonus_carbine.py +++ b/scripts/skillMods/expertise_range_bonus_carbine.py @@ -1,10 +1,8 @@ import sys -def add(core, actor, name, base): - actor.addSkillMod(name, base) +def add(core, actor, skillMod, value): return - -def deduct(core, actor, name, base): - actor.deductSkillMod(name, base) + +def deduct(core, actor, skillMod, value): return \ No newline at end of file diff --git a/scripts/skillMods/expertise_range_bonus_melee.py b/scripts/skillMods/expertise_range_bonus_melee.py index ee7769e2..b5c5e291 100644 --- a/scripts/skillMods/expertise_range_bonus_melee.py +++ b/scripts/skillMods/expertise_range_bonus_melee.py @@ -1,10 +1,8 @@ import sys -def add(core, actor, name, base): - actor.addSkillMod(name, base) +def add(core, actor, skillMod, value): return - -def deduct(core, actor, name, base): - actor.deductSkillMod(name, base) + +def deduct(core, actor, skillMod, value): return \ No newline at end of file diff --git a/scripts/skillMods/expertise_range_bonus_pistol.py b/scripts/skillMods/expertise_range_bonus_pistol.py index ee7769e2..b5c5e291 100644 --- a/scripts/skillMods/expertise_range_bonus_pistol.py +++ b/scripts/skillMods/expertise_range_bonus_pistol.py @@ -1,10 +1,8 @@ import sys -def add(core, actor, name, base): - actor.addSkillMod(name, base) +def add(core, actor, skillMod, value): return - -def deduct(core, actor, name, base): - actor.deductSkillMod(name, base) + +def deduct(core, actor, skillMod, value): return \ No newline at end of file diff --git a/scripts/skillMods/expertise_range_bonus_ranged.py b/scripts/skillMods/expertise_range_bonus_ranged.py index ee7769e2..b5c5e291 100644 --- a/scripts/skillMods/expertise_range_bonus_ranged.py +++ b/scripts/skillMods/expertise_range_bonus_ranged.py @@ -1,10 +1,8 @@ import sys -def add(core, actor, name, base): - actor.addSkillMod(name, base) +def add(core, actor, skillMod, value): return - -def deduct(core, actor, name, base): - actor.deductSkillMod(name, base) + +def deduct(core, actor, skillMod, value): return \ No newline at end of file diff --git a/scripts/skillMods/expertise_resource_quality_increase.py b/scripts/skillMods/expertise_resource_quality_increase.py index ee7769e2..b5c5e291 100644 --- a/scripts/skillMods/expertise_resource_quality_increase.py +++ b/scripts/skillMods/expertise_resource_quality_increase.py @@ -1,10 +1,8 @@ import sys -def add(core, actor, name, base): - actor.addSkillMod(name, base) +def add(core, actor, skillMod, value): return - -def deduct(core, actor, name, base): - actor.deductSkillMod(name, base) + +def deduct(core, actor, skillMod, value): return \ No newline at end of file diff --git a/scripts/skillMods/expertise_resource_sampling_increase.py b/scripts/skillMods/expertise_resource_sampling_increase.py index ee7769e2..b5c5e291 100644 --- a/scripts/skillMods/expertise_resource_sampling_increase.py +++ b/scripts/skillMods/expertise_resource_sampling_increase.py @@ -1,10 +1,8 @@ import sys -def add(core, actor, name, base): - actor.addSkillMod(name, base) +def add(core, actor, skillMod, value): return - -def deduct(core, actor, name, base): - actor.deductSkillMod(name, base) + +def deduct(core, actor, skillMod, value): return \ No newline at end of file diff --git a/scripts/skillMods/expertise_resource_sampling_time_decrease.py b/scripts/skillMods/expertise_resource_sampling_time_decrease.py index ee7769e2..b5c5e291 100644 --- a/scripts/skillMods/expertise_resource_sampling_time_decrease.py +++ b/scripts/skillMods/expertise_resource_sampling_time_decrease.py @@ -1,10 +1,8 @@ import sys -def add(core, actor, name, base): - actor.addSkillMod(name, base) +def add(core, actor, skillMod, value): return - -def deduct(core, actor, name, base): - actor.deductSkillMod(name, base) + +def deduct(core, actor, skillMod, value): return \ No newline at end of file diff --git a/scripts/skillMods/expertise_reverse_engineering_bonus.py b/scripts/skillMods/expertise_reverse_engineering_bonus.py index ee7769e2..b5c5e291 100644 --- a/scripts/skillMods/expertise_reverse_engineering_bonus.py +++ b/scripts/skillMods/expertise_reverse_engineering_bonus.py @@ -1,10 +1,8 @@ import sys -def add(core, actor, name, base): - actor.addSkillMod(name, base) +def add(core, actor, skillMod, value): return - -def deduct(core, actor, name, base): - actor.deductSkillMod(name, base) + +def deduct(core, actor, skillMod, value): return \ No newline at end of file diff --git a/scripts/skillMods/expertise_riddle_armor.py b/scripts/skillMods/expertise_riddle_armor.py index ee7769e2..b5c5e291 100644 --- a/scripts/skillMods/expertise_riddle_armor.py +++ b/scripts/skillMods/expertise_riddle_armor.py @@ -1,10 +1,8 @@ import sys -def add(core, actor, name, base): - actor.addSkillMod(name, base) +def add(core, actor, skillMod, value): return - -def deduct(core, actor, name, base): - actor.deductSkillMod(name, base) + +def deduct(core, actor, skillMod, value): return \ No newline at end of file diff --git a/scripts/skillMods/expertise_root_chance_fs_dm_cc.py b/scripts/skillMods/expertise_root_chance_fs_dm_cc.py index ee7769e2..b5c5e291 100644 --- a/scripts/skillMods/expertise_root_chance_fs_dm_cc.py +++ b/scripts/skillMods/expertise_root_chance_fs_dm_cc.py @@ -1,10 +1,8 @@ import sys -def add(core, actor, name, base): - actor.addSkillMod(name, base) +def add(core, actor, skillMod, value): return - -def deduct(core, actor, name, base): - actor.deductSkillMod(name, base) + +def deduct(core, actor, skillMod, value): return \ No newline at end of file diff --git a/scripts/skillMods/expertise_saber_block.py b/scripts/skillMods/expertise_saber_block.py index ee7769e2..b5c5e291 100644 --- a/scripts/skillMods/expertise_saber_block.py +++ b/scripts/skillMods/expertise_saber_block.py @@ -1,10 +1,8 @@ import sys -def add(core, actor, name, base): - actor.addSkillMod(name, base) +def add(core, actor, skillMod, value): return - -def deduct(core, actor, name, base): - actor.deductSkillMod(name, base) + +def deduct(core, actor, skillMod, value): return \ No newline at end of file diff --git a/scripts/skillMods/expertise_skill_buff_glancing_blow_vulnerable.py b/scripts/skillMods/expertise_skill_buff_glancing_blow_vulnerable.py index ee7769e2..b5c5e291 100644 --- a/scripts/skillMods/expertise_skill_buff_glancing_blow_vulnerable.py +++ b/scripts/skillMods/expertise_skill_buff_glancing_blow_vulnerable.py @@ -1,10 +1,8 @@ import sys -def add(core, actor, name, base): - actor.addSkillMod(name, base) +def add(core, actor, skillMod, value): return - -def deduct(core, actor, name, base): - actor.deductSkillMod(name, base) + +def deduct(core, actor, skillMod, value): return \ No newline at end of file diff --git a/scripts/skillMods/expertise_sly_lie_bonus.py b/scripts/skillMods/expertise_sly_lie_bonus.py index ee7769e2..b5c5e291 100644 --- a/scripts/skillMods/expertise_sly_lie_bonus.py +++ b/scripts/skillMods/expertise_sly_lie_bonus.py @@ -1,10 +1,8 @@ import sys -def add(core, actor, name, base): - actor.addSkillMod(name, base) +def add(core, actor, skillMod, value): return - -def deduct(core, actor, name, base): - actor.deductSkillMod(name, base) + +def deduct(core, actor, skillMod, value): return \ No newline at end of file diff --git a/scripts/skillMods/expertise_sly_lie_rank.py b/scripts/skillMods/expertise_sly_lie_rank.py index ee7769e2..b5c5e291 100644 --- a/scripts/skillMods/expertise_sly_lie_rank.py +++ b/scripts/skillMods/expertise_sly_lie_rank.py @@ -1,10 +1,8 @@ import sys -def add(core, actor, name, base): - actor.addSkillMod(name, base) +def add(core, actor, skillMod, value): return - -def deduct(core, actor, name, base): - actor.deductSkillMod(name, base) + +def deduct(core, actor, skillMod, value): return \ No newline at end of file diff --git a/scripts/skillMods/expertise_sm_card_melee_proc.py b/scripts/skillMods/expertise_sm_card_melee_proc.py index ee7769e2..b5c5e291 100644 --- a/scripts/skillMods/expertise_sm_card_melee_proc.py +++ b/scripts/skillMods/expertise_sm_card_melee_proc.py @@ -1,10 +1,8 @@ import sys -def add(core, actor, name, base): - actor.addSkillMod(name, base) +def add(core, actor, skillMod, value): return - -def deduct(core, actor, name, base): - actor.deductSkillMod(name, base) + +def deduct(core, actor, skillMod, value): return \ No newline at end of file diff --git a/scripts/skillMods/expertise_sm_card_ranged_proc.py b/scripts/skillMods/expertise_sm_card_ranged_proc.py index ee7769e2..b5c5e291 100644 --- a/scripts/skillMods/expertise_sm_card_ranged_proc.py +++ b/scripts/skillMods/expertise_sm_card_ranged_proc.py @@ -1,10 +1,8 @@ import sys -def add(core, actor, name, base): - actor.addSkillMod(name, base) +def add(core, actor, skillMod, value): return - -def deduct(core, actor, name, base): - actor.deductSkillMod(name, base) + +def deduct(core, actor, skillMod, value): return \ No newline at end of file diff --git a/scripts/skillMods/expertise_sm_feeling_lucky_chance_proc.py b/scripts/skillMods/expertise_sm_feeling_lucky_chance_proc.py index ee7769e2..b5c5e291 100644 --- a/scripts/skillMods/expertise_sm_feeling_lucky_chance_proc.py +++ b/scripts/skillMods/expertise_sm_feeling_lucky_chance_proc.py @@ -1,10 +1,8 @@ import sys -def add(core, actor, name, base): - actor.addSkillMod(name, base) +def add(core, actor, skillMod, value): return - -def deduct(core, actor, name, base): - actor.deductSkillMod(name, base) + +def deduct(core, actor, skillMod, value): return \ No newline at end of file diff --git a/scripts/skillMods/expertise_sm_melee_proc.py b/scripts/skillMods/expertise_sm_melee_proc.py index ee7769e2..b5c5e291 100644 --- a/scripts/skillMods/expertise_sm_melee_proc.py +++ b/scripts/skillMods/expertise_sm_melee_proc.py @@ -1,10 +1,8 @@ import sys -def add(core, actor, name, base): - actor.addSkillMod(name, base) +def add(core, actor, skillMod, value): return - -def deduct(core, actor, name, base): - actor.deductSkillMod(name, base) + +def deduct(core, actor, skillMod, value): return \ No newline at end of file diff --git a/scripts/skillMods/expertise_sm_melee_stun_proc.py b/scripts/skillMods/expertise_sm_melee_stun_proc.py index ee7769e2..b5c5e291 100644 --- a/scripts/skillMods/expertise_sm_melee_stun_proc.py +++ b/scripts/skillMods/expertise_sm_melee_stun_proc.py @@ -1,10 +1,8 @@ import sys -def add(core, actor, name, base): - actor.addSkillMod(name, base) +def add(core, actor, skillMod, value): return - -def deduct(core, actor, name, base): - actor.deductSkillMod(name, base) + +def deduct(core, actor, skillMod, value): return \ No newline at end of file diff --git a/scripts/skillMods/expertise_sm_ranged_shot_proc.py b/scripts/skillMods/expertise_sm_ranged_shot_proc.py index ee7769e2..b5c5e291 100644 --- a/scripts/skillMods/expertise_sm_ranged_shot_proc.py +++ b/scripts/skillMods/expertise_sm_ranged_shot_proc.py @@ -1,10 +1,8 @@ import sys -def add(core, actor, name, base): - actor.addSkillMod(name, base) +def add(core, actor, skillMod, value): return - -def deduct(core, actor, name, base): - actor.deductSkillMod(name, base) + +def deduct(core, actor, skillMod, value): return \ No newline at end of file diff --git a/scripts/skillMods/expertise_sm_rank_damage_bonus.py b/scripts/skillMods/expertise_sm_rank_damage_bonus.py index ee7769e2..b5c5e291 100644 --- a/scripts/skillMods/expertise_sm_rank_damage_bonus.py +++ b/scripts/skillMods/expertise_sm_rank_damage_bonus.py @@ -1,10 +1,8 @@ import sys -def add(core, actor, name, base): - actor.addSkillMod(name, base) +def add(core, actor, skillMod, value): return - -def deduct(core, actor, name, base): - actor.deductSkillMod(name, base) + +def deduct(core, actor, skillMod, value): return \ No newline at end of file diff --git a/scripts/skillMods/expertise_sm_rank_range_bonus.py b/scripts/skillMods/expertise_sm_rank_range_bonus.py index ee7769e2..b5c5e291 100644 --- a/scripts/skillMods/expertise_sm_rank_range_bonus.py +++ b/scripts/skillMods/expertise_sm_rank_range_bonus.py @@ -1,10 +1,8 @@ import sys -def add(core, actor, name, base): - actor.addSkillMod(name, base) +def add(core, actor, skillMod, value): return - -def deduct(core, actor, name, base): - actor.deductSkillMod(name, base) + +def deduct(core, actor, skillMod, value): return \ No newline at end of file diff --git a/scripts/skillMods/expertise_socket_increase_tailor.py b/scripts/skillMods/expertise_socket_increase_tailor.py index ee7769e2..b5c5e291 100644 --- a/scripts/skillMods/expertise_socket_increase_tailor.py +++ b/scripts/skillMods/expertise_socket_increase_tailor.py @@ -1,10 +1,8 @@ import sys -def add(core, actor, name, base): - actor.addSkillMod(name, base) +def add(core, actor, skillMod, value): return - -def deduct(core, actor, name, base): - actor.deductSkillMod(name, base) + +def deduct(core, actor, skillMod, value): return \ No newline at end of file diff --git a/scripts/skillMods/expertise_sp_cripple_trap_proc_increase.py b/scripts/skillMods/expertise_sp_cripple_trap_proc_increase.py index ee7769e2..b5c5e291 100644 --- a/scripts/skillMods/expertise_sp_cripple_trap_proc_increase.py +++ b/scripts/skillMods/expertise_sp_cripple_trap_proc_increase.py @@ -1,10 +1,8 @@ import sys -def add(core, actor, name, base): - actor.addSkillMod(name, base) +def add(core, actor, skillMod, value): return - -def deduct(core, actor, name, base): - actor.deductSkillMod(name, base) + +def deduct(core, actor, skillMod, value): return \ No newline at end of file diff --git a/scripts/skillMods/expertise_sp_reveal_shadows_detect_chance_increase.py b/scripts/skillMods/expertise_sp_reveal_shadows_detect_chance_increase.py index ee7769e2..b5c5e291 100644 --- a/scripts/skillMods/expertise_sp_reveal_shadows_detect_chance_increase.py +++ b/scripts/skillMods/expertise_sp_reveal_shadows_detect_chance_increase.py @@ -1,10 +1,8 @@ import sys -def add(core, actor, name, base): - actor.addSkillMod(name, base) +def add(core, actor, skillMod, value): return - -def deduct(core, actor, name, base): - actor.deductSkillMod(name, base) + +def deduct(core, actor, skillMod, value): return \ No newline at end of file diff --git a/scripts/skillMods/expertise_sp_reveal_shadows_distance_increase.py b/scripts/skillMods/expertise_sp_reveal_shadows_distance_increase.py index ee7769e2..b5c5e291 100644 --- a/scripts/skillMods/expertise_sp_reveal_shadows_distance_increase.py +++ b/scripts/skillMods/expertise_sp_reveal_shadows_distance_increase.py @@ -1,10 +1,8 @@ import sys -def add(core, actor, name, base): - actor.addSkillMod(name, base) +def add(core, actor, skillMod, value): return - -def deduct(core, actor, name, base): - actor.deductSkillMod(name, base) + +def deduct(core, actor, skillMod, value): return \ No newline at end of file diff --git a/scripts/skillMods/expertise_spot_a_sucker_critical_decrease.py b/scripts/skillMods/expertise_spot_a_sucker_critical_decrease.py index ee7769e2..b5c5e291 100644 --- a/scripts/skillMods/expertise_spot_a_sucker_critical_decrease.py +++ b/scripts/skillMods/expertise_spot_a_sucker_critical_decrease.py @@ -1,10 +1,8 @@ import sys -def add(core, actor, name, base): - actor.addSkillMod(name, base) +def add(core, actor, skillMod, value): return - -def deduct(core, actor, name, base): - actor.deductSkillMod(name, base) + +def deduct(core, actor, skillMod, value): return \ No newline at end of file diff --git a/scripts/skillMods/expertise_spot_a_sucker_glance_chance.py b/scripts/skillMods/expertise_spot_a_sucker_glance_chance.py index ee7769e2..b5c5e291 100644 --- a/scripts/skillMods/expertise_spot_a_sucker_glance_chance.py +++ b/scripts/skillMods/expertise_spot_a_sucker_glance_chance.py @@ -1,10 +1,8 @@ import sys -def add(core, actor, name, base): - actor.addSkillMod(name, base) +def add(core, actor, skillMod, value): return - -def deduct(core, actor, name, base): - actor.deductSkillMod(name, base) + +def deduct(core, actor, skillMod, value): return \ No newline at end of file diff --git a/scripts/skillMods/expertise_stance.py b/scripts/skillMods/expertise_stance.py index 9d6fa7c6..25bfb4cc 100644 --- a/scripts/skillMods/expertise_stance.py +++ b/scripts/skillMods/expertise_stance.py @@ -1,16 +1,12 @@ import sys -def add(core, actor, name, base): - actor.addSkillMod(name, base) +def add(core, actor, skillMod, divisor): core.skillModService.addSkillMod(actor, 'constitution_modified', (actor.getSkillModBase('expertise_stance_constitution'))) core.skillModService.addSkillMod(actor, 'display_only_parry', 100 * (actor.getSkillModBase('expertise_stance_parry'))) - core.skillModService.addSkillMod(actor, 'display_only_evasion', 100 *(actor.getSkillModBase('expertise_stance_evasion'))) - - + core.skillModService.addSkillMod(actor, 'display_only_evasion', 100 * (actor.getSkillModBase('expertise_stance_evasion'))) return - -def deduct(core, actor, name, base): - actor.deductSkillMod(name, base) + +def deduct(core, actor, skillMod, divisor): core.skillModService.deductSkillMod(actor, 'constitution_modified', (actor.getSkillModBase('expertise_stance_constitution'))) core.skillModService.deductSkillMod(actor, 'display_only_parry', 100 * (actor.getSkillModBase('expertise_stance_parry'))) core.skillModService.deductSkillMod(actor, 'display_only_evasion', 100 * (actor.getSkillModBase('expertise_stance_evasion'))) diff --git a/scripts/skillMods/expertise_stance_constitution.py b/scripts/skillMods/expertise_stance_constitution.py index ee7769e2..6cd11173 100644 --- a/scripts/skillMods/expertise_stance_constitution.py +++ b/scripts/skillMods/expertise_stance_constitution.py @@ -1,10 +1,8 @@ import sys -def add(core, actor, name, base): - actor.addSkillMod(name, base) +def add(core, actor, skillMod, divisor): return - -def deduct(core, actor, name, base): - actor.deductSkillMod(name, base) + +def deduct(core, actor, skillMod, divisor): return \ No newline at end of file diff --git a/scripts/skillMods/expertise_stance_evasion.py b/scripts/skillMods/expertise_stance_evasion.py index ee7769e2..b5c5e291 100644 --- a/scripts/skillMods/expertise_stance_evasion.py +++ b/scripts/skillMods/expertise_stance_evasion.py @@ -1,10 +1,8 @@ import sys -def add(core, actor, name, base): - actor.addSkillMod(name, base) +def add(core, actor, skillMod, value): return - -def deduct(core, actor, name, base): - actor.deductSkillMod(name, base) + +def deduct(core, actor, skillMod, value): return \ No newline at end of file diff --git a/scripts/skillMods/expertise_stance_glance_buff_line.py b/scripts/skillMods/expertise_stance_glance_buff_line.py index ee7769e2..b5c5e291 100644 --- a/scripts/skillMods/expertise_stance_glance_buff_line.py +++ b/scripts/skillMods/expertise_stance_glance_buff_line.py @@ -1,10 +1,8 @@ import sys -def add(core, actor, name, base): - actor.addSkillMod(name, base) +def add(core, actor, skillMod, value): return - -def deduct(core, actor, name, base): - actor.deductSkillMod(name, base) + +def deduct(core, actor, skillMod, value): return \ No newline at end of file diff --git a/scripts/skillMods/expertise_stance_parry.py b/scripts/skillMods/expertise_stance_parry.py index ee7769e2..b5c5e291 100644 --- a/scripts/skillMods/expertise_stance_parry.py +++ b/scripts/skillMods/expertise_stance_parry.py @@ -1,10 +1,8 @@ import sys -def add(core, actor, name, base): - actor.addSkillMod(name, base) +def add(core, actor, skillMod, value): return - -def deduct(core, actor, name, base): - actor.deductSkillMod(name, base) + +def deduct(core, actor, skillMod, value): return \ No newline at end of file diff --git a/scripts/skillMods/expertise_stance_riposte.py b/scripts/skillMods/expertise_stance_riposte.py index ee7769e2..b5c5e291 100644 --- a/scripts/skillMods/expertise_stance_riposte.py +++ b/scripts/skillMods/expertise_stance_riposte.py @@ -1,10 +1,8 @@ import sys -def add(core, actor, name, base): - actor.addSkillMod(name, base) +def add(core, actor, skillMod, value): return - -def deduct(core, actor, name, base): - actor.deductSkillMod(name, base) + +def deduct(core, actor, skillMod, value): return \ No newline at end of file diff --git a/scripts/skillMods/expertise_stance_saber_block.py b/scripts/skillMods/expertise_stance_saber_block.py index ee7769e2..64962f76 100644 --- a/scripts/skillMods/expertise_stance_saber_block.py +++ b/scripts/skillMods/expertise_stance_saber_block.py @@ -1,10 +1,10 @@ import sys -def add(core, actor, name, base): - actor.addSkillMod(name, base) +def add(core, actor, skillMod, value): + core.skillModService.addSkillMod(actor, 'display_only_parry', skillMod.getBase() * 100) return - -def deduct(core, actor, name, base): - actor.deductSkillMod(name, base) + +def deduct(core, actor, skillMod, value): + core.skillModService.deductSkillMod(actor, 'display_only_parry', skillMod.getBase() * 100) return \ No newline at end of file diff --git a/scripts/skillMods/expertise_strikethrough_chance.py b/scripts/skillMods/expertise_strikethrough_chance.py index ee7769e2..47e3d763 100644 --- a/scripts/skillMods/expertise_strikethrough_chance.py +++ b/scripts/skillMods/expertise_strikethrough_chance.py @@ -1,10 +1,10 @@ import sys -def add(core, actor, name, base): - actor.addSkillMod(name, base) +def add(core, actor, skillMod, value): + core.skillModService.addSkillMod(actor, 'display_only_strikethrough', 100 * skillMod.getBase()) + return + +def deduct(core, actor, skillMod, value): + core.skillModService.deductSkillMod(actor, 'display_only_strikethrough', 100 * skillMod.getBase()) return -def deduct(core, actor, name, base): - actor.deductSkillMod(name, base) - return - \ No newline at end of file diff --git a/scripts/skillMods/expertise_underworld_boss.py b/scripts/skillMods/expertise_underworld_boss.py index ee7769e2..b5c5e291 100644 --- a/scripts/skillMods/expertise_underworld_boss.py +++ b/scripts/skillMods/expertise_underworld_boss.py @@ -1,10 +1,8 @@ import sys -def add(core, actor, name, base): - actor.addSkillMod(name, base) +def add(core, actor, skillMod, value): return - -def deduct(core, actor, name, base): - actor.deductSkillMod(name, base) + +def deduct(core, actor, skillMod, value): return \ No newline at end of file diff --git a/scripts/skillMods/expertise_undiminished_critical_melee.py b/scripts/skillMods/expertise_undiminished_critical_melee.py index ee7769e2..b5c5e291 100644 --- a/scripts/skillMods/expertise_undiminished_critical_melee.py +++ b/scripts/skillMods/expertise_undiminished_critical_melee.py @@ -1,10 +1,8 @@ import sys -def add(core, actor, name, base): - actor.addSkillMod(name, base) +def add(core, actor, skillMod, value): return - -def deduct(core, actor, name, base): - actor.deductSkillMod(name, base) + +def deduct(core, actor, skillMod, value): return \ No newline at end of file diff --git a/scripts/skillMods/expertise_vendor_cost_decrease.py b/scripts/skillMods/expertise_vendor_cost_decrease.py index ee7769e2..b5c5e291 100644 --- a/scripts/skillMods/expertise_vendor_cost_decrease.py +++ b/scripts/skillMods/expertise_vendor_cost_decrease.py @@ -1,10 +1,8 @@ import sys -def add(core, actor, name, base): - actor.addSkillMod(name, base) +def add(core, actor, skillMod, value): return - -def deduct(core, actor, name, base): - actor.deductSkillMod(name, base) + +def deduct(core, actor, skillMod, value): return \ No newline at end of file diff --git a/scripts/skillMods/expertise_vendor_item_limit.py b/scripts/skillMods/expertise_vendor_item_limit.py index ee7769e2..b5c5e291 100644 --- a/scripts/skillMods/expertise_vendor_item_limit.py +++ b/scripts/skillMods/expertise_vendor_item_limit.py @@ -1,10 +1,8 @@ import sys -def add(core, actor, name, base): - actor.addSkillMod(name, base) +def add(core, actor, skillMod, value): return - -def deduct(core, actor, name, base): - actor.deductSkillMod(name, base) + +def deduct(core, actor, skillMod, value): return \ No newline at end of file diff --git a/scripts/skillMods/expertise_vendor_limit_increase.py b/scripts/skillMods/expertise_vendor_limit_increase.py index ee7769e2..b5c5e291 100644 --- a/scripts/skillMods/expertise_vendor_limit_increase.py +++ b/scripts/skillMods/expertise_vendor_limit_increase.py @@ -1,10 +1,8 @@ import sys -def add(core, actor, name, base): - actor.addSkillMod(name, base) +def add(core, actor, skillMod, value): return - -def deduct(core, actor, name, base): - actor.deductSkillMod(name, base) + +def deduct(core, actor, skillMod, value): return \ No newline at end of file diff --git a/scripts/skillMods/expertise_youll_regret_that.py b/scripts/skillMods/expertise_youll_regret_that.py index ee7769e2..b5c5e291 100644 --- a/scripts/skillMods/expertise_youll_regret_that.py +++ b/scripts/skillMods/expertise_youll_regret_that.py @@ -1,10 +1,8 @@ import sys -def add(core, actor, name, base): - actor.addSkillMod(name, base) +def add(core, actor, skillMod, value): return - -def deduct(core, actor, name, base): - actor.deductSkillMod(name, base) + +def deduct(core, actor, skillMod, value): return \ No newline at end of file diff --git a/scripts/skillMods/face.py b/scripts/skillMods/face.py new file mode 100644 index 00000000..6cd11173 --- /dev/null +++ b/scripts/skillMods/face.py @@ -0,0 +1,8 @@ +import sys + +def add(core, actor, skillMod, divisor): + return + +def deduct(core, actor, skillMod, divisor): + return + \ No newline at end of file diff --git a/scripts/skillMods/factory_speed.py b/scripts/skillMods/factory_speed.py index ee7769e2..b5c5e291 100644 --- a/scripts/skillMods/factory_speed.py +++ b/scripts/skillMods/factory_speed.py @@ -1,10 +1,8 @@ import sys -def add(core, actor, name, base): - actor.addSkillMod(name, base) +def add(core, actor, skillMod, value): return - -def deduct(core, actor, name, base): - actor.deductSkillMod(name, base) + +def deduct(core, actor, skillMod, value): return \ No newline at end of file diff --git a/scripts/skillMods/fast_attack_line_co_grenade.py b/scripts/skillMods/fast_attack_line_co_grenade.py index ee7769e2..b5c5e291 100644 --- a/scripts/skillMods/fast_attack_line_co_grenade.py +++ b/scripts/skillMods/fast_attack_line_co_grenade.py @@ -1,10 +1,8 @@ import sys -def add(core, actor, name, base): - actor.addSkillMod(name, base) +def add(core, actor, skillMod, value): return - -def deduct(core, actor, name, base): - actor.deductSkillMod(name, base) + +def deduct(core, actor, skillMod, value): return \ No newline at end of file diff --git a/scripts/skillMods/fast_attack_line_dm_cc.py b/scripts/skillMods/fast_attack_line_dm_cc.py index ee7769e2..b5c5e291 100644 --- a/scripts/skillMods/fast_attack_line_dm_cc.py +++ b/scripts/skillMods/fast_attack_line_dm_cc.py @@ -1,10 +1,8 @@ import sys -def add(core, actor, name, base): - actor.addSkillMod(name, base) +def add(core, actor, skillMod, value): return - -def deduct(core, actor, name, base): - actor.deductSkillMod(name, base) + +def deduct(core, actor, skillMod, value): return \ No newline at end of file diff --git a/scripts/skillMods/fast_attack_line_fs_powers.py b/scripts/skillMods/fast_attack_line_fs_powers.py index ee7769e2..b5c5e291 100644 --- a/scripts/skillMods/fast_attack_line_fs_powers.py +++ b/scripts/skillMods/fast_attack_line_fs_powers.py @@ -1,10 +1,8 @@ import sys -def add(core, actor, name, base): - actor.addSkillMod(name, base) +def add(core, actor, skillMod, value): return - -def deduct(core, actor, name, base): - actor.deductSkillMod(name, base) + +def deduct(core, actor, skillMod, value): return \ No newline at end of file diff --git a/scripts/skillMods/fast_attack_line_me_debuff.py b/scripts/skillMods/fast_attack_line_me_debuff.py index ee7769e2..b5c5e291 100644 --- a/scripts/skillMods/fast_attack_line_me_debuff.py +++ b/scripts/skillMods/fast_attack_line_me_debuff.py @@ -1,10 +1,8 @@ import sys -def add(core, actor, name, base): - actor.addSkillMod(name, base) +def add(core, actor, skillMod, value): return - -def deduct(core, actor, name, base): - actor.deductSkillMod(name, base) + +def deduct(core, actor, skillMod, value): return \ No newline at end of file diff --git a/scripts/skillMods/fast_attack_line_me_dm.py b/scripts/skillMods/fast_attack_line_me_dm.py index ee7769e2..b5c5e291 100644 --- a/scripts/skillMods/fast_attack_line_me_dm.py +++ b/scripts/skillMods/fast_attack_line_me_dm.py @@ -1,10 +1,8 @@ import sys -def add(core, actor, name, base): - actor.addSkillMod(name, base) +def add(core, actor, skillMod, value): return - -def deduct(core, actor, name, base): - actor.deductSkillMod(name, base) + +def deduct(core, actor, skillMod, value): return \ No newline at end of file diff --git a/scripts/skillMods/fast_attack_line_me_heal.py b/scripts/skillMods/fast_attack_line_me_heal.py index ee7769e2..b5c5e291 100644 --- a/scripts/skillMods/fast_attack_line_me_heal.py +++ b/scripts/skillMods/fast_attack_line_me_heal.py @@ -1,10 +1,8 @@ import sys -def add(core, actor, name, base): - actor.addSkillMod(name, base) +def add(core, actor, skillMod, value): return - -def deduct(core, actor, name, base): - actor.deductSkillMod(name, base) + +def deduct(core, actor, skillMod, value): return \ No newline at end of file diff --git a/scripts/skillMods/fast_attack_line_me_revive.py b/scripts/skillMods/fast_attack_line_me_revive.py index ee7769e2..b5c5e291 100644 --- a/scripts/skillMods/fast_attack_line_me_revive.py +++ b/scripts/skillMods/fast_attack_line_me_revive.py @@ -1,10 +1,8 @@ import sys -def add(core, actor, name, base): - actor.addSkillMod(name, base) +def add(core, actor, skillMod, value): return - -def deduct(core, actor, name, base): - actor.deductSkillMod(name, base) + +def deduct(core, actor, skillMod, value): return \ No newline at end of file diff --git a/scripts/skillMods/fast_attack_line_of_aoe.py b/scripts/skillMods/fast_attack_line_of_aoe.py index ee7769e2..b5c5e291 100644 --- a/scripts/skillMods/fast_attack_line_of_aoe.py +++ b/scripts/skillMods/fast_attack_line_of_aoe.py @@ -1,10 +1,8 @@ import sys -def add(core, actor, name, base): - actor.addSkillMod(name, base) +def add(core, actor, skillMod, value): return - -def deduct(core, actor, name, base): - actor.deductSkillMod(name, base) + +def deduct(core, actor, skillMod, value): return \ No newline at end of file diff --git a/scripts/skillMods/fast_attack_line_of_heal.py b/scripts/skillMods/fast_attack_line_of_heal.py index ee7769e2..b5c5e291 100644 --- a/scripts/skillMods/fast_attack_line_of_heal.py +++ b/scripts/skillMods/fast_attack_line_of_heal.py @@ -1,10 +1,8 @@ import sys -def add(core, actor, name, base): - actor.addSkillMod(name, base) +def add(core, actor, skillMod, value): return - -def deduct(core, actor, name, base): - actor.deductSkillMod(name, base) + +def deduct(core, actor, skillMod, value): return \ No newline at end of file diff --git a/scripts/skillMods/fast_attack_line_sm_dm.py b/scripts/skillMods/fast_attack_line_sm_dm.py index ee7769e2..b5c5e291 100644 --- a/scripts/skillMods/fast_attack_line_sm_dm.py +++ b/scripts/skillMods/fast_attack_line_sm_dm.py @@ -1,10 +1,8 @@ import sys -def add(core, actor, name, base): - actor.addSkillMod(name, base) +def add(core, actor, skillMod, value): return - -def deduct(core, actor, name, base): - actor.deductSkillMod(name, base) + +def deduct(core, actor, skillMod, value): return \ No newline at end of file diff --git a/scripts/skillMods/fast_attack_line_sp_dm.py b/scripts/skillMods/fast_attack_line_sp_dm.py index ee7769e2..b5c5e291 100644 --- a/scripts/skillMods/fast_attack_line_sp_dm.py +++ b/scripts/skillMods/fast_attack_line_sp_dm.py @@ -1,10 +1,8 @@ import sys -def add(core, actor, name, base): - actor.addSkillMod(name, base) +def add(core, actor, skillMod, value): return - -def deduct(core, actor, name, base): - actor.deductSkillMod(name, base) + +def deduct(core, actor, skillMod, value): return \ No newline at end of file diff --git a/scripts/skillMods/fast_attack_line_sp_perfect.py b/scripts/skillMods/fast_attack_line_sp_perfect.py index ee7769e2..b5c5e291 100644 --- a/scripts/skillMods/fast_attack_line_sp_perfect.py +++ b/scripts/skillMods/fast_attack_line_sp_perfect.py @@ -1,10 +1,8 @@ import sys -def add(core, actor, name, base): - actor.addSkillMod(name, base) +def add(core, actor, skillMod, value): return - -def deduct(core, actor, name, base): - actor.deductSkillMod(name, base) + +def deduct(core, actor, skillMod, value): return \ No newline at end of file diff --git a/scripts/skillMods/fast_attack_line_sp_smoke.py b/scripts/skillMods/fast_attack_line_sp_smoke.py index ee7769e2..b5c5e291 100644 --- a/scripts/skillMods/fast_attack_line_sp_smoke.py +++ b/scripts/skillMods/fast_attack_line_sp_smoke.py @@ -1,10 +1,8 @@ import sys -def add(core, actor, name, base): - actor.addSkillMod(name, base) +def add(core, actor, skillMod, value): return - -def deduct(core, actor, name, base): - actor.deductSkillMod(name, base) + +def deduct(core, actor, skillMod, value): return \ No newline at end of file diff --git a/scripts/skillMods/food_assembly.py b/scripts/skillMods/food_assembly.py index ee7769e2..b5c5e291 100644 --- a/scripts/skillMods/food_assembly.py +++ b/scripts/skillMods/food_assembly.py @@ -1,10 +1,8 @@ import sys -def add(core, actor, name, base): - actor.addSkillMod(name, base) +def add(core, actor, skillMod, value): return - -def deduct(core, actor, name, base): - actor.deductSkillMod(name, base) + +def deduct(core, actor, skillMod, value): return \ No newline at end of file diff --git a/scripts/skillMods/food_experimentation.py b/scripts/skillMods/food_experimentation.py index ee7769e2..b5c5e291 100644 --- a/scripts/skillMods/food_experimentation.py +++ b/scripts/skillMods/food_experimentation.py @@ -1,10 +1,8 @@ import sys -def add(core, actor, name, base): - actor.addSkillMod(name, base) +def add(core, actor, skillMod, value): return - -def deduct(core, actor, name, base): - actor.deductSkillMod(name, base) + +def deduct(core, actor, skillMod, value): return \ No newline at end of file diff --git a/scripts/skillMods/force_sensitive.py b/scripts/skillMods/force_sensitive.py index ee7769e2..b5c5e291 100644 --- a/scripts/skillMods/force_sensitive.py +++ b/scripts/skillMods/force_sensitive.py @@ -1,10 +1,8 @@ import sys -def add(core, actor, name, base): - actor.addSkillMod(name, base) +def add(core, actor, skillMod, value): return - -def deduct(core, actor, name, base): - actor.deductSkillMod(name, base) + +def deduct(core, actor, skillMod, value): return \ No newline at end of file diff --git a/scripts/skillMods/general_assembly.py b/scripts/skillMods/general_assembly.py index ee7769e2..b5c5e291 100644 --- a/scripts/skillMods/general_assembly.py +++ b/scripts/skillMods/general_assembly.py @@ -1,10 +1,8 @@ import sys -def add(core, actor, name, base): - actor.addSkillMod(name, base) +def add(core, actor, skillMod, value): return - -def deduct(core, actor, name, base): - actor.deductSkillMod(name, base) + +def deduct(core, actor, skillMod, value): return \ No newline at end of file diff --git a/scripts/skillMods/general_experimentation.py b/scripts/skillMods/general_experimentation.py index ee7769e2..b5c5e291 100644 --- a/scripts/skillMods/general_experimentation.py +++ b/scripts/skillMods/general_experimentation.py @@ -1,10 +1,8 @@ import sys -def add(core, actor, name, base): - actor.addSkillMod(name, base) +def add(core, actor, skillMod, value): return - -def deduct(core, actor, name, base): - actor.deductSkillMod(name, base) + +def deduct(core, actor, skillMod, value): return \ No newline at end of file diff --git a/scripts/skillMods/glancing_blow_vulnerable.py b/scripts/skillMods/glancing_blow_vulnerable.py index ee7769e2..b5c5e291 100644 --- a/scripts/skillMods/glancing_blow_vulnerable.py +++ b/scripts/skillMods/glancing_blow_vulnerable.py @@ -1,10 +1,8 @@ import sys -def add(core, actor, name, base): - actor.addSkillMod(name, base) +def add(core, actor, skillMod, value): return - -def deduct(core, actor, name, base): - actor.deductSkillMod(name, base) + +def deduct(core, actor, skillMod, value): return \ No newline at end of file diff --git a/scripts/skillMods/hair.py b/scripts/skillMods/hair.py new file mode 100644 index 00000000..6cd11173 --- /dev/null +++ b/scripts/skillMods/hair.py @@ -0,0 +1,8 @@ +import sys + +def add(core, actor, skillMod, divisor): + return + +def deduct(core, actor, skillMod, divisor): + return + \ No newline at end of file diff --git a/scripts/skillMods/healing_action.py b/scripts/skillMods/healing_action.py index f198037b..026370f5 100644 --- a/scripts/skillMods/healing_action.py +++ b/scripts/skillMods/healing_action.py @@ -1,9 +1,9 @@ import sys -def add(core, actor, name, base): - actor.addSkillMod(name, base) +def add(core, actor, skillMod, divisor): + actor.setAction(actor.getAction() + skillMod.getBase()) return - -def deduct(core, actor, name, base): - actor.deductSkillMod(name, base) - return \ No newline at end of file + +def deduct(core, actor, skillMod, divisor): + return + \ No newline at end of file diff --git a/scripts/skillMods/healing_dance_ability.py b/scripts/skillMods/healing_dance_ability.py index ee7769e2..b5c5e291 100644 --- a/scripts/skillMods/healing_dance_ability.py +++ b/scripts/skillMods/healing_dance_ability.py @@ -1,10 +1,8 @@ import sys -def add(core, actor, name, base): - actor.addSkillMod(name, base) +def add(core, actor, skillMod, value): return - -def deduct(core, actor, name, base): - actor.deductSkillMod(name, base) + +def deduct(core, actor, skillMod, value): return \ No newline at end of file diff --git a/scripts/skillMods/healing_dance_wound.py b/scripts/skillMods/healing_dance_wound.py index ee7769e2..b5c5e291 100644 --- a/scripts/skillMods/healing_dance_wound.py +++ b/scripts/skillMods/healing_dance_wound.py @@ -1,10 +1,8 @@ import sys -def add(core, actor, name, base): - actor.addSkillMod(name, base) +def add(core, actor, skillMod, value): return - -def deduct(core, actor, name, base): - actor.deductSkillMod(name, base) + +def deduct(core, actor, skillMod, value): return \ No newline at end of file diff --git a/scripts/skillMods/healing_health.py b/scripts/skillMods/healing_health.py index ee7769e2..a5613e79 100644 --- a/scripts/skillMods/healing_health.py +++ b/scripts/skillMods/healing_health.py @@ -1,10 +1,9 @@ import sys -def add(core, actor, name, base): - actor.addSkillMod(name, base) +def add(core, actor, skillMod, value): + actor.setHealth(actor.getHealth() + skillMod.getBase()) return - -def deduct(core, actor, name, base): - actor.deductSkillMod(name, base) + +def deduct(core, actor, skillMod, value): return \ No newline at end of file diff --git a/scripts/skillMods/healing_music_ability.py b/scripts/skillMods/healing_music_ability.py index ee7769e2..b5c5e291 100644 --- a/scripts/skillMods/healing_music_ability.py +++ b/scripts/skillMods/healing_music_ability.py @@ -1,10 +1,8 @@ import sys -def add(core, actor, name, base): - actor.addSkillMod(name, base) +def add(core, actor, skillMod, value): return - -def deduct(core, actor, name, base): - actor.deductSkillMod(name, base) + +def deduct(core, actor, skillMod, value): return \ No newline at end of file diff --git a/scripts/skillMods/healing_music_wound.py b/scripts/skillMods/healing_music_wound.py index ee7769e2..b5c5e291 100644 --- a/scripts/skillMods/healing_music_wound.py +++ b/scripts/skillMods/healing_music_wound.py @@ -1,10 +1,8 @@ import sys -def add(core, actor, name, base): - actor.addSkillMod(name, base) +def add(core, actor, skillMod, value): return - -def deduct(core, actor, name, base): - actor.deductSkillMod(name, base) + +def deduct(core, actor, skillMod, value): return \ No newline at end of file diff --git a/scripts/skillMods/health.py b/scripts/skillMods/health.py new file mode 100644 index 00000000..7915a5a9 --- /dev/null +++ b/scripts/skillMods/health.py @@ -0,0 +1,10 @@ +import sys + +def add(core, actor, skillMod, divisor): + actor.setMaxHealth(actor.getMaxHealth() + skillMod.getBase()) + return + +def deduct(core, actor, skillMod, divisor): + actor.setMaxHealth(actor.getMaxHealth() - skillMod.getBase()) + return + \ No newline at end of file diff --git a/scripts/skillMods/healthPercent.py b/scripts/skillMods/healthPercent.py new file mode 100644 index 00000000..db2dbd95 --- /dev/null +++ b/scripts/skillMods/healthPercent.py @@ -0,0 +1,12 @@ +import sys + +# Temporarily disabled until the skillmod calculation system is refactored + +def add(core, actor, skillMod, divisor): + #actor.setMaxHealth(actor.getMaxHealth() + int((float(actor.getMaxHealth()) * (float(skillMod.getBase()) / float(100))))) + return + +def deduct(core, actor, skillMod, divisor): + #actor.setMaxHealth(actor.getMaxHealth() - int((actor.getMaxHealth() * (float(skillMod.getBase()) / float(100))))) + return + \ No newline at end of file diff --git a/scripts/skillMods/heat.py b/scripts/skillMods/heat.py index ee7769e2..b5c5e291 100644 --- a/scripts/skillMods/heat.py +++ b/scripts/skillMods/heat.py @@ -1,10 +1,8 @@ import sys -def add(core, actor, name, base): - actor.addSkillMod(name, base) +def add(core, actor, skillMod, value): return - -def deduct(core, actor, name, base): - actor.deductSkillMod(name, base) + +def deduct(core, actor, skillMod, value): return \ No newline at end of file diff --git a/scripts/skillMods/hiring.py b/scripts/skillMods/hiring.py index ee7769e2..b5c5e291 100644 --- a/scripts/skillMods/hiring.py +++ b/scripts/skillMods/hiring.py @@ -1,10 +1,8 @@ import sys -def add(core, actor, name, base): - actor.addSkillMod(name, base) +def add(core, actor, skillMod, value): return - -def deduct(core, actor, name, base): - actor.deductSkillMod(name, base) + +def deduct(core, actor, skillMod, value): return \ No newline at end of file diff --git a/scripts/skillMods/incubation_time_reduction.py b/scripts/skillMods/incubation_time_reduction.py index ee7769e2..b5c5e291 100644 --- a/scripts/skillMods/incubation_time_reduction.py +++ b/scripts/skillMods/incubation_time_reduction.py @@ -1,10 +1,8 @@ import sys -def add(core, actor, name, base): - actor.addSkillMod(name, base) +def add(core, actor, skillMod, value): return - -def deduct(core, actor, name, base): - actor.deductSkillMod(name, base) + +def deduct(core, actor, skillMod, value): return \ No newline at end of file diff --git a/scripts/skillMods/instrument_assembly.py b/scripts/skillMods/instrument_assembly.py index ee7769e2..b5c5e291 100644 --- a/scripts/skillMods/instrument_assembly.py +++ b/scripts/skillMods/instrument_assembly.py @@ -1,10 +1,8 @@ import sys -def add(core, actor, name, base): - actor.addSkillMod(name, base) +def add(core, actor, skillMod, value): return - -def deduct(core, actor, name, base): - actor.deductSkillMod(name, base) + +def deduct(core, actor, skillMod, value): return \ No newline at end of file diff --git a/scripts/skillMods/instrument_customization.py b/scripts/skillMods/instrument_customization.py index ee7769e2..b5c5e291 100644 --- a/scripts/skillMods/instrument_customization.py +++ b/scripts/skillMods/instrument_customization.py @@ -1,10 +1,8 @@ import sys -def add(core, actor, name, base): - actor.addSkillMod(name, base) +def add(core, actor, skillMod, value): return - -def deduct(core, actor, name, base): - actor.deductSkillMod(name, base) + +def deduct(core, actor, skillMod, value): return \ No newline at end of file diff --git a/scripts/skillMods/invis.py b/scripts/skillMods/invis.py index ee7769e2..b5c5e291 100644 --- a/scripts/skillMods/invis.py +++ b/scripts/skillMods/invis.py @@ -1,10 +1,8 @@ import sys -def add(core, actor, name, base): - actor.addSkillMod(name, base) +def add(core, actor, skillMod, value): return - -def deduct(core, actor, name, base): - actor.deductSkillMod(name, base) + +def deduct(core, actor, skillMod, value): return \ No newline at end of file diff --git a/scripts/skillMods/jedi_saber_assembly.py b/scripts/skillMods/jedi_saber_assembly.py index ee7769e2..b5c5e291 100644 --- a/scripts/skillMods/jedi_saber_assembly.py +++ b/scripts/skillMods/jedi_saber_assembly.py @@ -1,10 +1,8 @@ import sys -def add(core, actor, name, base): - actor.addSkillMod(name, base) +def add(core, actor, skillMod, value): return - -def deduct(core, actor, name, base): - actor.deductSkillMod(name, base) + +def deduct(core, actor, skillMod, value): return \ No newline at end of file diff --git a/scripts/skillMods/jedi_saber_experimentation.py b/scripts/skillMods/jedi_saber_experimentation.py index ee7769e2..b5c5e291 100644 --- a/scripts/skillMods/jedi_saber_experimentation.py +++ b/scripts/skillMods/jedi_saber_experimentation.py @@ -1,10 +1,8 @@ import sys -def add(core, actor, name, base): - actor.addSkillMod(name, base) +def add(core, actor, skillMod, value): return - -def deduct(core, actor, name, base): - actor.deductSkillMod(name, base) + +def deduct(core, actor, skillMod, value): return \ No newline at end of file diff --git a/scripts/skillMods/kill_meter_co_armor_splash_proc.py b/scripts/skillMods/kill_meter_co_armor_splash_proc.py index ee7769e2..b5c5e291 100644 --- a/scripts/skillMods/kill_meter_co_armor_splash_proc.py +++ b/scripts/skillMods/kill_meter_co_armor_splash_proc.py @@ -1,10 +1,8 @@ import sys -def add(core, actor, name, base): - actor.addSkillMod(name, base) +def add(core, actor, skillMod, value): return - -def deduct(core, actor, name, base): - actor.deductSkillMod(name, base) + +def deduct(core, actor, skillMod, value): return \ No newline at end of file diff --git a/scripts/skillMods/kill_meter_co_it_burns_proc.py b/scripts/skillMods/kill_meter_co_it_burns_proc.py index ee7769e2..b5c5e291 100644 --- a/scripts/skillMods/kill_meter_co_it_burns_proc.py +++ b/scripts/skillMods/kill_meter_co_it_burns_proc.py @@ -1,10 +1,8 @@ import sys -def add(core, actor, name, base): - actor.addSkillMod(name, base) +def add(core, actor, skillMod, value): return - -def deduct(core, actor, name, base): - actor.deductSkillMod(name, base) + +def deduct(core, actor, skillMod, value): return \ No newline at end of file diff --git a/scripts/skillMods/kill_meter_co_youll_regret_that_reac.py b/scripts/skillMods/kill_meter_co_youll_regret_that_reac.py index ee7769e2..b5c5e291 100644 --- a/scripts/skillMods/kill_meter_co_youll_regret_that_reac.py +++ b/scripts/skillMods/kill_meter_co_youll_regret_that_reac.py @@ -1,10 +1,8 @@ import sys -def add(core, actor, name, base): - actor.addSkillMod(name, base) +def add(core, actor, skillMod, value): return - -def deduct(core, actor, name, base): - actor.deductSkillMod(name, base) + +def deduct(core, actor, skillMod, value): return \ No newline at end of file diff --git a/scripts/skillMods/kill_meter_damage_line_co_grenade.py b/scripts/skillMods/kill_meter_damage_line_co_grenade.py index ee7769e2..b5c5e291 100644 --- a/scripts/skillMods/kill_meter_damage_line_co_grenade.py +++ b/scripts/skillMods/kill_meter_damage_line_co_grenade.py @@ -1,10 +1,8 @@ import sys -def add(core, actor, name, base): - actor.addSkillMod(name, base) +def add(core, actor, skillMod, value): return - -def deduct(core, actor, name, base): - actor.deductSkillMod(name, base) + +def deduct(core, actor, skillMod, value): return \ No newline at end of file diff --git a/scripts/skillMods/kill_meter_damage_weapon_all.py b/scripts/skillMods/kill_meter_damage_weapon_all.py index ee7769e2..b5c5e291 100644 --- a/scripts/skillMods/kill_meter_damage_weapon_all.py +++ b/scripts/skillMods/kill_meter_damage_weapon_all.py @@ -1,10 +1,8 @@ import sys -def add(core, actor, name, base): - actor.addSkillMod(name, base) +def add(core, actor, skillMod, value): return - -def deduct(core, actor, name, base): - actor.deductSkillMod(name, base) + +def deduct(core, actor, skillMod, value): return \ No newline at end of file diff --git a/scripts/skillMods/kinetic.py b/scripts/skillMods/kinetic.py index ee7769e2..b5c5e291 100644 --- a/scripts/skillMods/kinetic.py +++ b/scripts/skillMods/kinetic.py @@ -1,10 +1,8 @@ import sys -def add(core, actor, name, base): - actor.addSkillMod(name, base) +def add(core, actor, skillMod, value): return - -def deduct(core, actor, name, base): - actor.deductSkillMod(name, base) + +def deduct(core, actor, skillMod, value): return \ No newline at end of file diff --git a/scripts/skillMods/level_add_to_damage.py b/scripts/skillMods/level_add_to_damage.py index ee7769e2..b5c5e291 100644 --- a/scripts/skillMods/level_add_to_damage.py +++ b/scripts/skillMods/level_add_to_damage.py @@ -1,10 +1,8 @@ import sys -def add(core, actor, name, base): - actor.addSkillMod(name, base) +def add(core, actor, skillMod, value): return - -def deduct(core, actor, name, base): - actor.deductSkillMod(name, base) + +def deduct(core, actor, skillMod, value): return \ No newline at end of file diff --git a/scripts/skillMods/luck.py b/scripts/skillMods/luck.py index d036f779..c6ae1f0d 100644 --- a/scripts/skillMods/luck.py +++ b/scripts/skillMods/luck.py @@ -1,18 +1,16 @@ import sys -def add(core, actor, name, base): - actor.addSkillMod(name, base) - actor.addSkillMod('display_only_dodge', base / 3) - actor.addSkillMod('display_only_evasion', base / 3) - actor.addSkillMod('display_only_critical', base / 3) - actor.addSkillMod('display_only_strikethrough', base / 2) +def add(core, actor, skillMod, divisor): + core.skillModService.addSkillMod(actor, 'display_only_dodge', skillMod.getBase() / 3) + core.skillModService.addSkillMod(actor, 'display_only_evasion', skillMod.getBase() / 3) + core.skillModService.addSkillMod(actor, 'display_only_critical', skillMod.getBase() / 3) + core.skillModService.addSkillMod(actor, 'display_only_strikethrough', skillMod.getBase() / 2) return - -def deduct(core, actor, name, base): - actor.deductSkillMod(name, base) - actor.deductSkillMod('display_only_dodge', base / 3) - actor.deductSkillMod('display_only_evasion', base / 3) - actor.deductSkillMod('display_only_critical', base / 3) - actor.deductSkillMod('display_only_strikethrough', base / 2) + +def deduct(core, actor, skillMod, divisor): + core.skillModService.deductSkillMod(actor, 'display_only_dodge', skillMod.getBase() / 3) + core.skillModService.deductSkillMod(actor, 'display_only_evasion', skillMod.getBase() / 3) + core.skillModService.deductSkillMod(actor, 'display_only_critical', skillMod.getBase() / 3) + core.skillModService.deductSkillMod(actor, 'display_only_strikethrough', skillMod.getBase() / 2) return \ No newline at end of file diff --git a/scripts/skillMods/luck_modified.py b/scripts/skillMods/luck_modified.py index d036f779..c6ae1f0d 100644 --- a/scripts/skillMods/luck_modified.py +++ b/scripts/skillMods/luck_modified.py @@ -1,18 +1,16 @@ import sys -def add(core, actor, name, base): - actor.addSkillMod(name, base) - actor.addSkillMod('display_only_dodge', base / 3) - actor.addSkillMod('display_only_evasion', base / 3) - actor.addSkillMod('display_only_critical', base / 3) - actor.addSkillMod('display_only_strikethrough', base / 2) +def add(core, actor, skillMod, divisor): + core.skillModService.addSkillMod(actor, 'display_only_dodge', skillMod.getBase() / 3) + core.skillModService.addSkillMod(actor, 'display_only_evasion', skillMod.getBase() / 3) + core.skillModService.addSkillMod(actor, 'display_only_critical', skillMod.getBase() / 3) + core.skillModService.addSkillMod(actor, 'display_only_strikethrough', skillMod.getBase() / 2) return - -def deduct(core, actor, name, base): - actor.deductSkillMod(name, base) - actor.deductSkillMod('display_only_dodge', base / 3) - actor.deductSkillMod('display_only_evasion', base / 3) - actor.deductSkillMod('display_only_critical', base / 3) - actor.deductSkillMod('display_only_strikethrough', base / 2) + +def deduct(core, actor, skillMod, divisor): + core.skillModService.deductSkillMod(actor, 'display_only_dodge', skillMod.getBase() / 3) + core.skillModService.deductSkillMod(actor, 'display_only_evasion', skillMod.getBase() / 3) + core.skillModService.deductSkillMod(actor, 'display_only_critical', skillMod.getBase() / 3) + core.skillModService.deductSkillMod(actor, 'display_only_strikethrough', skillMod.getBase() / 2) return \ No newline at end of file diff --git a/scripts/skillMods/manage_vendor.py b/scripts/skillMods/manage_vendor.py index ee7769e2..b5c5e291 100644 --- a/scripts/skillMods/manage_vendor.py +++ b/scripts/skillMods/manage_vendor.py @@ -1,10 +1,8 @@ import sys -def add(core, actor, name, base): - actor.addSkillMod(name, base) +def add(core, actor, skillMod, value): return - -def deduct(core, actor, name, base): - actor.deductSkillMod(name, base) + +def deduct(core, actor, skillMod, value): return \ No newline at end of file diff --git a/scripts/skillMods/markings.py b/scripts/skillMods/markings.py new file mode 100644 index 00000000..ef489a26 --- /dev/null +++ b/scripts/skillMods/markings.py @@ -0,0 +1,7 @@ +import sys + +def add(core, actor, skillMod, divisor): + return + +def deduct(core, actor, skillMod, divisor): + return \ No newline at end of file diff --git a/scripts/skillMods/me_doom_chance.py b/scripts/skillMods/me_doom_chance.py index ee7769e2..b5c5e291 100644 --- a/scripts/skillMods/me_doom_chance.py +++ b/scripts/skillMods/me_doom_chance.py @@ -1,10 +1,8 @@ import sys -def add(core, actor, name, base): - actor.addSkillMod(name, base) +def add(core, actor, skillMod, value): return - -def deduct(core, actor, name, base): - actor.deductSkillMod(name, base) + +def deduct(core, actor, skillMod, value): return \ No newline at end of file diff --git a/scripts/skillMods/milk_exceptional_modified.py b/scripts/skillMods/milk_exceptional_modified.py index ee7769e2..b5c5e291 100644 --- a/scripts/skillMods/milk_exceptional_modified.py +++ b/scripts/skillMods/milk_exceptional_modified.py @@ -1,10 +1,8 @@ import sys -def add(core, actor, name, base): - actor.addSkillMod(name, base) +def add(core, actor, skillMod, value): return - -def deduct(core, actor, name, base): - actor.deductSkillMod(name, base) + +def deduct(core, actor, skillMod, value): return \ No newline at end of file diff --git a/scripts/skillMods/milk_quantity_modified.py b/scripts/skillMods/milk_quantity_modified.py index ee7769e2..b5c5e291 100644 --- a/scripts/skillMods/milk_quantity_modified.py +++ b/scripts/skillMods/milk_quantity_modified.py @@ -1,10 +1,8 @@ import sys -def add(core, actor, name, base): - actor.addSkillMod(name, base) +def add(core, actor, skillMod, value): return - -def deduct(core, actor, name, base): - actor.deductSkillMod(name, base) + +def deduct(core, actor, skillMod, value): return \ No newline at end of file diff --git a/scripts/skillMods/milk_stun_modified.py b/scripts/skillMods/milk_stun_modified.py index ee7769e2..b5c5e291 100644 --- a/scripts/skillMods/milk_stun_modified.py +++ b/scripts/skillMods/milk_stun_modified.py @@ -1,10 +1,8 @@ import sys -def add(core, actor, name, base): - actor.addSkillMod(name, base) +def add(core, actor, skillMod, value): return - -def deduct(core, actor, name, base): - actor.deductSkillMod(name, base) + +def deduct(core, actor, skillMod, value): return \ No newline at end of file diff --git a/scripts/skillMods/misc.py b/scripts/skillMods/misc.py index ee7769e2..b5c5e291 100644 --- a/scripts/skillMods/misc.py +++ b/scripts/skillMods/misc.py @@ -1,10 +1,8 @@ import sys -def add(core, actor, name, base): - actor.addSkillMod(name, base) +def add(core, actor, skillMod, value): return - -def deduct(core, actor, name, base): - actor.deductSkillMod(name, base) + +def deduct(core, actor, skillMod, value): return \ No newline at end of file diff --git a/scripts/skillMods/missile_launching.py b/scripts/skillMods/missile_launching.py index ee7769e2..b5c5e291 100644 --- a/scripts/skillMods/missile_launching.py +++ b/scripts/skillMods/missile_launching.py @@ -1,10 +1,8 @@ import sys -def add(core, actor, name, base): - actor.addSkillMod(name, base) +def add(core, actor, skillMod, value): return - -def deduct(core, actor, name, base): - actor.deductSkillMod(name, base) + +def deduct(core, actor, skillMod, value): return \ No newline at end of file diff --git a/scripts/skillMods/movement.py b/scripts/skillMods/movement.py index 47ce841d..90148d53 100644 --- a/scripts/skillMods/movement.py +++ b/scripts/skillMods/movement.py @@ -1,14 +1,10 @@ import sys -def add(core, actor, name, base): - actor.addSkillMod(name, base) - actor.getSkillMod(name).setModifier(10) - modifier = actor.getSkillMod(name).getModifier() - actor.setSpeedMultiplierBase(actor.getSpeedMultiplierBase() + float(float(base) / float(modifier))) +def add(core, actor, skillMod, divisor): + actor.setSpeedMultiplierMod(actor.getSpeedMultiplierMod() + (float(skillMod.getBase()) / float(10))) return -def deduct(core, actor, name, base): - modifier = actor.getSkillMod(name).getModifier() - actor.setSpeedMultiplierBase(actor.getSpeedMultiplierBase() - float(float(base) / float(modifier))) - actor.deductSkillMod(name, base) - return \ No newline at end of file +def deduct(core, actor, skillMod, divisor): + actor.setSpeedMultiplierMod(actor.getSpeedMultiplierMod() - (float(skillMod.getBase()) / float(10))) + return + \ No newline at end of file diff --git a/scripts/skillMods/movement_resist_root.py b/scripts/skillMods/movement_resist_root.py index ee7769e2..b5c5e291 100644 --- a/scripts/skillMods/movement_resist_root.py +++ b/scripts/skillMods/movement_resist_root.py @@ -1,10 +1,8 @@ import sys -def add(core, actor, name, base): - actor.addSkillMod(name, base) +def add(core, actor, skillMod, value): return - -def deduct(core, actor, name, base): - actor.deductSkillMod(name, base) + +def deduct(core, actor, skillMod, value): return \ No newline at end of file diff --git a/scripts/skillMods/movement_resist_snare.py b/scripts/skillMods/movement_resist_snare.py index ee7769e2..b5c5e291 100644 --- a/scripts/skillMods/movement_resist_snare.py +++ b/scripts/skillMods/movement_resist_snare.py @@ -1,10 +1,8 @@ import sys -def add(core, actor, name, base): - actor.addSkillMod(name, base) +def add(core, actor, skillMod, value): return - -def deduct(core, actor, name, base): - actor.deductSkillMod(name, base) + +def deduct(core, actor, skillMod, value): return \ No newline at end of file diff --git a/scripts/skillMods/of_inspired_action_chance.py b/scripts/skillMods/of_inspired_action_chance.py index ee7769e2..b5c5e291 100644 --- a/scripts/skillMods/of_inspired_action_chance.py +++ b/scripts/skillMods/of_inspired_action_chance.py @@ -1,10 +1,8 @@ import sys -def add(core, actor, name, base): - actor.addSkillMod(name, base) +def add(core, actor, skillMod, value): return - -def deduct(core, actor, name, base): - actor.deductSkillMod(name, base) + +def deduct(core, actor, skillMod, value): return \ No newline at end of file diff --git a/scripts/skillMods/pilot_special_tactics.py b/scripts/skillMods/pilot_special_tactics.py index ee7769e2..b5c5e291 100644 --- a/scripts/skillMods/pilot_special_tactics.py +++ b/scripts/skillMods/pilot_special_tactics.py @@ -1,10 +1,8 @@ import sys -def add(core, actor, name, base): - actor.addSkillMod(name, base) +def add(core, actor, skillMod, value): return - -def deduct(core, actor, name, base): - actor.deductSkillMod(name, base) + +def deduct(core, actor, skillMod, value): return \ No newline at end of file diff --git a/scripts/skillMods/piloting.py b/scripts/skillMods/piloting.py index ee7769e2..b5c5e291 100644 --- a/scripts/skillMods/piloting.py +++ b/scripts/skillMods/piloting.py @@ -1,10 +1,8 @@ import sys -def add(core, actor, name, base): - actor.addSkillMod(name, base) +def add(core, actor, skillMod, value): return - -def deduct(core, actor, name, base): - actor.deductSkillMod(name, base) + +def deduct(core, actor, skillMod, value): return \ No newline at end of file diff --git a/scripts/skillMods/politics.py b/scripts/skillMods/politics.py index ee7769e2..b5c5e291 100644 --- a/scripts/skillMods/politics.py +++ b/scripts/skillMods/politics.py @@ -1,10 +1,8 @@ import sys -def add(core, actor, name, base): - actor.addSkillMod(name, base) +def add(core, actor, skillMod, value): return - -def deduct(core, actor, name, base): - actor.deductSkillMod(name, base) + +def deduct(core, actor, skillMod, value): return \ No newline at end of file diff --git a/scripts/skillMods/power_systems.py b/scripts/skillMods/power_systems.py index ee7769e2..b5c5e291 100644 --- a/scripts/skillMods/power_systems.py +++ b/scripts/skillMods/power_systems.py @@ -1,10 +1,8 @@ import sys -def add(core, actor, name, base): - actor.addSkillMod(name, base) +def add(core, actor, skillMod, value): return - -def deduct(core, actor, name, base): - actor.deductSkillMod(name, base) + +def deduct(core, actor, skillMod, value): return \ No newline at end of file diff --git a/scripts/skillMods/power_systems_experimentation.py b/scripts/skillMods/power_systems_experimentation.py index ee7769e2..b5c5e291 100644 --- a/scripts/skillMods/power_systems_experimentation.py +++ b/scripts/skillMods/power_systems_experimentation.py @@ -1,10 +1,8 @@ import sys -def add(core, actor, name, base): - actor.addSkillMod(name, base) +def add(core, actor, skillMod, value): return - -def deduct(core, actor, name, base): - actor.deductSkillMod(name, base) + +def deduct(core, actor, skillMod, value): return \ No newline at end of file diff --git a/scripts/skillMods/precision.py b/scripts/skillMods/precision.py index 6d31b77e..b8fa220c 100644 --- a/scripts/skillMods/precision.py +++ b/scripts/skillMods/precision.py @@ -1,18 +1,16 @@ import sys -def add(core, actor, name, base): - actor.addSkillMod(name, base) - actor.addSkillMod('display_only_block', base / 2) - actor.addSkillMod('display_only_parry', base / 2) - actor.addSkillMod('display_only_critical', base) - actor.addSkillMod('display_only_strikethrough', base / 2) +def add(core, actor, skillMod, divisor): + core.skillModService.addSkillMod(actor, 'display_only_block', skillMod.getBase() / 2) + core.skillModService.addSkillMod(actor, 'display_only_parry', skillMod.getBase() / 2) + core.skillModService.addSkillMod(actor, 'display_only_critical', skillMod.getBase()) + core.skillModService.addSkillMod(actor, 'display_only_strikethrough', skillMod.getBase() / 2) return - -def deduct(core, actor, name, base): - actor.deductSkillMod(name, base) - actor.deductSkillMod('display_only_block', base / 2) - actor.deductSkillMod('display_only_parry', base / 2) - actor.deductSkillMod('display_only_critical', base) - actor.deductSkillMod('display_only_strikethrough', base / 2) + +def deduct(core, actor, skillMod, divisor): + core.skillModService.deductSkillMod(actor, 'display_only_block', skillMod.getBase() / 2) + core.skillModService.deductSkillMod(actor, 'display_only_parry', skillMod.getBase() / 2) + core.skillModService.deductSkillMod(actor, 'display_only_critical', skillMod.getBase()) + core.skillModService.deductSkillMod(actor, 'display_only_strikethrough', skillMod.getBase() / 2) return \ No newline at end of file diff --git a/scripts/skillMods/precision_modified.py b/scripts/skillMods/precision_modified.py index 6d31b77e..b8fa220c 100644 --- a/scripts/skillMods/precision_modified.py +++ b/scripts/skillMods/precision_modified.py @@ -1,18 +1,16 @@ import sys -def add(core, actor, name, base): - actor.addSkillMod(name, base) - actor.addSkillMod('display_only_block', base / 2) - actor.addSkillMod('display_only_parry', base / 2) - actor.addSkillMod('display_only_critical', base) - actor.addSkillMod('display_only_strikethrough', base / 2) +def add(core, actor, skillMod, divisor): + core.skillModService.addSkillMod(actor, 'display_only_block', skillMod.getBase() / 2) + core.skillModService.addSkillMod(actor, 'display_only_parry', skillMod.getBase() / 2) + core.skillModService.addSkillMod(actor, 'display_only_critical', skillMod.getBase()) + core.skillModService.addSkillMod(actor, 'display_only_strikethrough', skillMod.getBase() / 2) return - -def deduct(core, actor, name, base): - actor.deductSkillMod(name, base) - actor.deductSkillMod('display_only_block', base / 2) - actor.deductSkillMod('display_only_parry', base / 2) - actor.deductSkillMod('display_only_critical', base) - actor.deductSkillMod('display_only_strikethrough', base / 2) + +def deduct(core, actor, skillMod, divisor): + core.skillModService.deductSkillMod(actor, 'display_only_block', skillMod.getBase() / 2) + core.skillModService.deductSkillMod(actor, 'display_only_parry', skillMod.getBase() / 2) + core.skillModService.deductSkillMod(actor, 'display_only_critical', skillMod.getBase()) + core.skillModService.deductSkillMod(actor, 'display_only_strikethrough', skillMod.getBase() / 2) return \ No newline at end of file diff --git a/scripts/skillMods/private_place_bank.py b/scripts/skillMods/private_place_bank.py index ee7769e2..b5c5e291 100644 --- a/scripts/skillMods/private_place_bank.py +++ b/scripts/skillMods/private_place_bank.py @@ -1,10 +1,8 @@ import sys -def add(core, actor, name, base): - actor.addSkillMod(name, base) +def add(core, actor, skillMod, value): return - -def deduct(core, actor, name, base): - actor.deductSkillMod(name, base) + +def deduct(core, actor, skillMod, value): return \ No newline at end of file diff --git a/scripts/skillMods/private_place_cityhall.py b/scripts/skillMods/private_place_cityhall.py index ee7769e2..b5c5e291 100644 --- a/scripts/skillMods/private_place_cityhall.py +++ b/scripts/skillMods/private_place_cityhall.py @@ -1,10 +1,8 @@ import sys -def add(core, actor, name, base): - actor.addSkillMod(name, base) +def add(core, actor, skillMod, value): return - -def deduct(core, actor, name, base): - actor.deductSkillMod(name, base) + +def deduct(core, actor, skillMod, value): return \ No newline at end of file diff --git a/scripts/skillMods/private_place_cloning.py b/scripts/skillMods/private_place_cloning.py index ee7769e2..b5c5e291 100644 --- a/scripts/skillMods/private_place_cloning.py +++ b/scripts/skillMods/private_place_cloning.py @@ -1,10 +1,8 @@ import sys -def add(core, actor, name, base): - actor.addSkillMod(name, base) +def add(core, actor, skillMod, value): return - -def deduct(core, actor, name, base): - actor.deductSkillMod(name, base) + +def deduct(core, actor, skillMod, value): return \ No newline at end of file diff --git a/scripts/skillMods/private_place_exotic_garden.py b/scripts/skillMods/private_place_exotic_garden.py index ee7769e2..b5c5e291 100644 --- a/scripts/skillMods/private_place_exotic_garden.py +++ b/scripts/skillMods/private_place_exotic_garden.py @@ -1,10 +1,8 @@ import sys -def add(core, actor, name, base): - actor.addSkillMod(name, base) +def add(core, actor, skillMod, value): return - -def deduct(core, actor, name, base): - actor.deductSkillMod(name, base) + +def deduct(core, actor, skillMod, value): return \ No newline at end of file diff --git a/scripts/skillMods/private_place_garage.py b/scripts/skillMods/private_place_garage.py index ee7769e2..b5c5e291 100644 --- a/scripts/skillMods/private_place_garage.py +++ b/scripts/skillMods/private_place_garage.py @@ -1,10 +1,8 @@ import sys -def add(core, actor, name, base): - actor.addSkillMod(name, base) +def add(core, actor, skillMod, value): return - -def deduct(core, actor, name, base): - actor.deductSkillMod(name, base) + +def deduct(core, actor, skillMod, value): return \ No newline at end of file diff --git a/scripts/skillMods/private_place_hospital.py b/scripts/skillMods/private_place_hospital.py index ee7769e2..b5c5e291 100644 --- a/scripts/skillMods/private_place_hospital.py +++ b/scripts/skillMods/private_place_hospital.py @@ -1,10 +1,8 @@ import sys -def add(core, actor, name, base): - actor.addSkillMod(name, base) +def add(core, actor, skillMod, value): return - -def deduct(core, actor, name, base): - actor.deductSkillMod(name, base) + +def deduct(core, actor, skillMod, value): return \ No newline at end of file diff --git a/scripts/skillMods/private_place_large_garden.py b/scripts/skillMods/private_place_large_garden.py index ee7769e2..b5c5e291 100644 --- a/scripts/skillMods/private_place_large_garden.py +++ b/scripts/skillMods/private_place_large_garden.py @@ -1,10 +1,8 @@ import sys -def add(core, actor, name, base): - actor.addSkillMod(name, base) +def add(core, actor, skillMod, value): return - -def deduct(core, actor, name, base): - actor.deductSkillMod(name, base) + +def deduct(core, actor, skillMod, value): return \ No newline at end of file diff --git a/scripts/skillMods/private_place_medium_garden.py b/scripts/skillMods/private_place_medium_garden.py index ee7769e2..b5c5e291 100644 --- a/scripts/skillMods/private_place_medium_garden.py +++ b/scripts/skillMods/private_place_medium_garden.py @@ -1,10 +1,8 @@ import sys -def add(core, actor, name, base): - actor.addSkillMod(name, base) +def add(core, actor, skillMod, value): return - -def deduct(core, actor, name, base): - actor.deductSkillMod(name, base) + +def deduct(core, actor, skillMod, value): return \ No newline at end of file diff --git a/scripts/skillMods/private_place_shuttleport.py b/scripts/skillMods/private_place_shuttleport.py index ee7769e2..b5c5e291 100644 --- a/scripts/skillMods/private_place_shuttleport.py +++ b/scripts/skillMods/private_place_shuttleport.py @@ -1,10 +1,8 @@ import sys -def add(core, actor, name, base): - actor.addSkillMod(name, base) +def add(core, actor, skillMod, value): return - -def deduct(core, actor, name, base): - actor.deductSkillMod(name, base) + +def deduct(core, actor, skillMod, value): return \ No newline at end of file diff --git a/scripts/skillMods/private_place_small_garden.py b/scripts/skillMods/private_place_small_garden.py index ee7769e2..b5c5e291 100644 --- a/scripts/skillMods/private_place_small_garden.py +++ b/scripts/skillMods/private_place_small_garden.py @@ -1,10 +1,8 @@ import sys -def add(core, actor, name, base): - actor.addSkillMod(name, base) +def add(core, actor, skillMod, value): return - -def deduct(core, actor, name, base): - actor.deductSkillMod(name, base) + +def deduct(core, actor, skillMod, value): return \ No newline at end of file diff --git a/scripts/skillMods/propulsion_reverse.py b/scripts/skillMods/propulsion_reverse.py index ee7769e2..b5c5e291 100644 --- a/scripts/skillMods/propulsion_reverse.py +++ b/scripts/skillMods/propulsion_reverse.py @@ -1,10 +1,8 @@ import sys -def add(core, actor, name, base): - actor.addSkillMod(name, base) +def add(core, actor, skillMod, value): return - -def deduct(core, actor, name, base): - actor.deductSkillMod(name, base) + +def deduct(core, actor, skillMod, value): return \ No newline at end of file diff --git a/scripts/skillMods/resistance_bleeding.py b/scripts/skillMods/resistance_bleeding.py index ee7769e2..b5c5e291 100644 --- a/scripts/skillMods/resistance_bleeding.py +++ b/scripts/skillMods/resistance_bleeding.py @@ -1,10 +1,8 @@ import sys -def add(core, actor, name, base): - actor.addSkillMod(name, base) +def add(core, actor, skillMod, value): return - -def deduct(core, actor, name, base): - actor.deductSkillMod(name, base) + +def deduct(core, actor, skillMod, value): return \ No newline at end of file diff --git a/scripts/skillMods/resistance_disease.py b/scripts/skillMods/resistance_disease.py index ee7769e2..b5c5e291 100644 --- a/scripts/skillMods/resistance_disease.py +++ b/scripts/skillMods/resistance_disease.py @@ -1,10 +1,8 @@ import sys -def add(core, actor, name, base): - actor.addSkillMod(name, base) +def add(core, actor, skillMod, value): return - -def deduct(core, actor, name, base): - actor.deductSkillMod(name, base) + +def deduct(core, actor, skillMod, value): return \ No newline at end of file diff --git a/scripts/skillMods/resistance_fire.py b/scripts/skillMods/resistance_fire.py index ee7769e2..b5c5e291 100644 --- a/scripts/skillMods/resistance_fire.py +++ b/scripts/skillMods/resistance_fire.py @@ -1,10 +1,8 @@ import sys -def add(core, actor, name, base): - actor.addSkillMod(name, base) +def add(core, actor, skillMod, value): return - -def deduct(core, actor, name, base): - actor.deductSkillMod(name, base) + +def deduct(core, actor, skillMod, value): return \ No newline at end of file diff --git a/scripts/skillMods/resistance_incapacitation.py b/scripts/skillMods/resistance_incapacitation.py index ee7769e2..b5c5e291 100644 --- a/scripts/skillMods/resistance_incapacitation.py +++ b/scripts/skillMods/resistance_incapacitation.py @@ -1,10 +1,8 @@ import sys -def add(core, actor, name, base): - actor.addSkillMod(name, base) +def add(core, actor, skillMod, value): return - -def deduct(core, actor, name, base): - actor.deductSkillMod(name, base) + +def deduct(core, actor, skillMod, value): return \ No newline at end of file diff --git a/scripts/skillMods/resistance_poison.py b/scripts/skillMods/resistance_poison.py index ee7769e2..b5c5e291 100644 --- a/scripts/skillMods/resistance_poison.py +++ b/scripts/skillMods/resistance_poison.py @@ -1,10 +1,8 @@ import sys -def add(core, actor, name, base): - actor.addSkillMod(name, base) +def add(core, actor, skillMod, value): return - -def deduct(core, actor, name, base): - actor.deductSkillMod(name, base) + +def deduct(core, actor, skillMod, value): return \ No newline at end of file diff --git a/scripts/skillMods/resistance_spice_downer.py b/scripts/skillMods/resistance_spice_downer.py index ee7769e2..b5c5e291 100644 --- a/scripts/skillMods/resistance_spice_downer.py +++ b/scripts/skillMods/resistance_spice_downer.py @@ -1,10 +1,8 @@ import sys -def add(core, actor, name, base): - actor.addSkillMod(name, base) +def add(core, actor, skillMod, value): return - -def deduct(core, actor, name, base): - actor.deductSkillMod(name, base) + +def deduct(core, actor, skillMod, value): return \ No newline at end of file diff --git a/scripts/skillMods/shields_assembly.py b/scripts/skillMods/shields_assembly.py index ee7769e2..b5c5e291 100644 --- a/scripts/skillMods/shields_assembly.py +++ b/scripts/skillMods/shields_assembly.py @@ -1,10 +1,8 @@ import sys -def add(core, actor, name, base): - actor.addSkillMod(name, base) +def add(core, actor, skillMod, value): return - -def deduct(core, actor, name, base): - actor.deductSkillMod(name, base) + +def deduct(core, actor, skillMod, value): return \ No newline at end of file diff --git a/scripts/skillMods/shields_experimentation.py b/scripts/skillMods/shields_experimentation.py index ee7769e2..b5c5e291 100644 --- a/scripts/skillMods/shields_experimentation.py +++ b/scripts/skillMods/shields_experimentation.py @@ -1,10 +1,8 @@ import sys -def add(core, actor, name, base): - actor.addSkillMod(name, base) +def add(core, actor, skillMod, value): return - -def deduct(core, actor, name, base): - actor.deductSkillMod(name, base) + +def deduct(core, actor, skillMod, value): return \ No newline at end of file diff --git a/scripts/skillMods/ship_weapon_damage.py b/scripts/skillMods/ship_weapon_damage.py index ee7769e2..b5c5e291 100644 --- a/scripts/skillMods/ship_weapon_damage.py +++ b/scripts/skillMods/ship_weapon_damage.py @@ -1,10 +1,8 @@ import sys -def add(core, actor, name, base): - actor.addSkillMod(name, base) +def add(core, actor, skillMod, value): return - -def deduct(core, actor, name, base): - actor.deductSkillMod(name, base) + +def deduct(core, actor, skillMod, value): return \ No newline at end of file diff --git a/scripts/skillMods/shop_sign.py b/scripts/skillMods/shop_sign.py index ee7769e2..b5c5e291 100644 --- a/scripts/skillMods/shop_sign.py +++ b/scripts/skillMods/shop_sign.py @@ -1,10 +1,8 @@ import sys -def add(core, actor, name, base): - actor.addSkillMod(name, base) +def add(core, actor, skillMod, value): return - -def deduct(core, actor, name, base): - actor.deductSkillMod(name, base) + +def deduct(core, actor, skillMod, value): return \ No newline at end of file diff --git a/scripts/skillMods/slope_move.py b/scripts/skillMods/slope_move.py index ee7769e2..b5c5e291 100644 --- a/scripts/skillMods/slope_move.py +++ b/scripts/skillMods/slope_move.py @@ -1,10 +1,8 @@ import sys -def add(core, actor, name, base): - actor.addSkillMod(name, base) +def add(core, actor, skillMod, value): return - -def deduct(core, actor, name, base): - actor.deductSkillMod(name, base) + +def deduct(core, actor, skillMod, value): return \ No newline at end of file diff --git a/scripts/skillMods/special_sign_chronicle_master_hanging_sign.py b/scripts/skillMods/special_sign_chronicle_master_hanging_sign.py index ee7769e2..b5c5e291 100644 --- a/scripts/skillMods/special_sign_chronicle_master_hanging_sign.py +++ b/scripts/skillMods/special_sign_chronicle_master_hanging_sign.py @@ -1,10 +1,8 @@ import sys -def add(core, actor, name, base): - actor.addSkillMod(name, base) +def add(core, actor, skillMod, value): return - -def deduct(core, actor, name, base): - actor.deductSkillMod(name, base) + +def deduct(core, actor, skillMod, value): return \ No newline at end of file diff --git a/scripts/skillMods/special_sign_chronicle_master_standing_sign.py b/scripts/skillMods/special_sign_chronicle_master_standing_sign.py index ee7769e2..b5c5e291 100644 --- a/scripts/skillMods/special_sign_chronicle_master_standing_sign.py +++ b/scripts/skillMods/special_sign_chronicle_master_standing_sign.py @@ -1,10 +1,8 @@ import sys -def add(core, actor, name, base): - actor.addSkillMod(name, base) +def add(core, actor, skillMod, value): return - -def deduct(core, actor, name, base): - actor.deductSkillMod(name, base) + +def deduct(core, actor, skillMod, value): return \ No newline at end of file diff --git a/scripts/skillMods/special_sign_efol_hanging.py b/scripts/skillMods/special_sign_efol_hanging.py index ee7769e2..b5c5e291 100644 --- a/scripts/skillMods/special_sign_efol_hanging.py +++ b/scripts/skillMods/special_sign_efol_hanging.py @@ -1,10 +1,8 @@ import sys -def add(core, actor, name, base): - actor.addSkillMod(name, base) +def add(core, actor, skillMod, value): return - -def deduct(core, actor, name, base): - actor.deductSkillMod(name, base) + +def deduct(core, actor, skillMod, value): return \ No newline at end of file diff --git a/scripts/skillMods/special_sign_efol_standing.py b/scripts/skillMods/special_sign_efol_standing.py index ee7769e2..b5c5e291 100644 --- a/scripts/skillMods/special_sign_efol_standing.py +++ b/scripts/skillMods/special_sign_efol_standing.py @@ -1,10 +1,8 @@ import sys -def add(core, actor, name, base): - actor.addSkillMod(name, base) +def add(core, actor, skillMod, value): return - -def deduct(core, actor, name, base): - actor.deductSkillMod(name, base) + +def deduct(core, actor, skillMod, value): return \ No newline at end of file diff --git a/scripts/skillMods/special_sign_halloween_hanging_sign.py b/scripts/skillMods/special_sign_halloween_hanging_sign.py index ee7769e2..b5c5e291 100644 --- a/scripts/skillMods/special_sign_halloween_hanging_sign.py +++ b/scripts/skillMods/special_sign_halloween_hanging_sign.py @@ -1,10 +1,8 @@ import sys -def add(core, actor, name, base): - actor.addSkillMod(name, base) +def add(core, actor, skillMod, value): return - -def deduct(core, actor, name, base): - actor.deductSkillMod(name, base) + +def deduct(core, actor, skillMod, value): return \ No newline at end of file diff --git a/scripts/skillMods/special_sign_halloween_standing_sign.py b/scripts/skillMods/special_sign_halloween_standing_sign.py index ee7769e2..b5c5e291 100644 --- a/scripts/skillMods/special_sign_halloween_standing_sign.py +++ b/scripts/skillMods/special_sign_halloween_standing_sign.py @@ -1,10 +1,8 @@ import sys -def add(core, actor, name, base): - actor.addSkillMod(name, base) +def add(core, actor, skillMod, value): return - -def deduct(core, actor, name, base): - actor.deductSkillMod(name, base) + +def deduct(core, actor, skillMod, value): return \ No newline at end of file diff --git a/scripts/skillMods/special_sign_imp_empire_day_hanging.py b/scripts/skillMods/special_sign_imp_empire_day_hanging.py index ee7769e2..b5c5e291 100644 --- a/scripts/skillMods/special_sign_imp_empire_day_hanging.py +++ b/scripts/skillMods/special_sign_imp_empire_day_hanging.py @@ -1,10 +1,8 @@ import sys -def add(core, actor, name, base): - actor.addSkillMod(name, base) +def add(core, actor, skillMod, value): return - -def deduct(core, actor, name, base): - actor.deductSkillMod(name, base) + +def deduct(core, actor, skillMod, value): return \ No newline at end of file diff --git a/scripts/skillMods/special_sign_imp_empire_day_standing.py b/scripts/skillMods/special_sign_imp_empire_day_standing.py index ee7769e2..b5c5e291 100644 --- a/scripts/skillMods/special_sign_imp_empire_day_standing.py +++ b/scripts/skillMods/special_sign_imp_empire_day_standing.py @@ -1,10 +1,8 @@ import sys -def add(core, actor, name, base): - actor.addSkillMod(name, base) +def add(core, actor, skillMod, value): return - -def deduct(core, actor, name, base): - actor.deductSkillMod(name, base) + +def deduct(core, actor, skillMod, value): return \ No newline at end of file diff --git a/scripts/skillMods/special_sign_reb_empire_day_hanging.py b/scripts/skillMods/special_sign_reb_empire_day_hanging.py index ee7769e2..b5c5e291 100644 --- a/scripts/skillMods/special_sign_reb_empire_day_hanging.py +++ b/scripts/skillMods/special_sign_reb_empire_day_hanging.py @@ -1,10 +1,8 @@ import sys -def add(core, actor, name, base): - actor.addSkillMod(name, base) +def add(core, actor, skillMod, value): return - -def deduct(core, actor, name, base): - actor.deductSkillMod(name, base) + +def deduct(core, actor, skillMod, value): return \ No newline at end of file diff --git a/scripts/skillMods/special_sign_reb_empire_day_standing.py b/scripts/skillMods/special_sign_reb_empire_day_standing.py index ee7769e2..b5c5e291 100644 --- a/scripts/skillMods/special_sign_reb_empire_day_standing.py +++ b/scripts/skillMods/special_sign_reb_empire_day_standing.py @@ -1,10 +1,8 @@ import sys -def add(core, actor, name, base): - actor.addSkillMod(name, base) +def add(core, actor, skillMod, value): return - -def deduct(core, actor, name, base): - actor.deductSkillMod(name, base) + +def deduct(core, actor, skillMod, value): return \ No newline at end of file diff --git a/scripts/skillMods/special_sign_tcg_series3.py b/scripts/skillMods/special_sign_tcg_series3.py index ee7769e2..b5c5e291 100644 --- a/scripts/skillMods/special_sign_tcg_series3.py +++ b/scripts/skillMods/special_sign_tcg_series3.py @@ -1,10 +1,8 @@ import sys -def add(core, actor, name, base): - actor.addSkillMod(name, base) +def add(core, actor, skillMod, value): return - -def deduct(core, actor, name, base): - actor.deductSkillMod(name, base) + +def deduct(core, actor, skillMod, value): return \ No newline at end of file diff --git a/scripts/skillMods/special_sign_tcg_series5.py b/scripts/skillMods/special_sign_tcg_series5.py index ee7769e2..b5c5e291 100644 --- a/scripts/skillMods/special_sign_tcg_series5.py +++ b/scripts/skillMods/special_sign_tcg_series5.py @@ -1,10 +1,8 @@ import sys -def add(core, actor, name, base): - actor.addSkillMod(name, base) +def add(core, actor, skillMod, value): return - -def deduct(core, actor, name, base): - actor.deductSkillMod(name, base) + +def deduct(core, actor, skillMod, value): return \ No newline at end of file diff --git a/scripts/skillMods/special_sign_wod_sm_01_banner.py b/scripts/skillMods/special_sign_wod_sm_01_banner.py index ee7769e2..b5c5e291 100644 --- a/scripts/skillMods/special_sign_wod_sm_01_banner.py +++ b/scripts/skillMods/special_sign_wod_sm_01_banner.py @@ -1,10 +1,8 @@ import sys -def add(core, actor, name, base): - actor.addSkillMod(name, base) +def add(core, actor, skillMod, value): return - -def deduct(core, actor, name, base): - actor.deductSkillMod(name, base) + +def deduct(core, actor, skillMod, value): return \ No newline at end of file diff --git a/scripts/skillMods/special_sign_wod_sm_01_hanging.py b/scripts/skillMods/special_sign_wod_sm_01_hanging.py index ee7769e2..b5c5e291 100644 --- a/scripts/skillMods/special_sign_wod_sm_01_hanging.py +++ b/scripts/skillMods/special_sign_wod_sm_01_hanging.py @@ -1,10 +1,8 @@ import sys -def add(core, actor, name, base): - actor.addSkillMod(name, base) +def add(core, actor, skillMod, value): return - -def deduct(core, actor, name, base): - actor.deductSkillMod(name, base) + +def deduct(core, actor, skillMod, value): return \ No newline at end of file diff --git a/scripts/skillMods/special_sign_wod_sm_01_standing.py b/scripts/skillMods/special_sign_wod_sm_01_standing.py index ee7769e2..b5c5e291 100644 --- a/scripts/skillMods/special_sign_wod_sm_01_standing.py +++ b/scripts/skillMods/special_sign_wod_sm_01_standing.py @@ -1,10 +1,8 @@ import sys -def add(core, actor, name, base): - actor.addSkillMod(name, base) +def add(core, actor, skillMod, value): return - -def deduct(core, actor, name, base): - actor.deductSkillMod(name, base) + +def deduct(core, actor, skillMod, value): return \ No newline at end of file diff --git a/scripts/skillMods/special_sign_wod_sm_02_banner.py b/scripts/skillMods/special_sign_wod_sm_02_banner.py index ee7769e2..b5c5e291 100644 --- a/scripts/skillMods/special_sign_wod_sm_02_banner.py +++ b/scripts/skillMods/special_sign_wod_sm_02_banner.py @@ -1,10 +1,8 @@ import sys -def add(core, actor, name, base): - actor.addSkillMod(name, base) +def add(core, actor, skillMod, value): return - -def deduct(core, actor, name, base): - actor.deductSkillMod(name, base) + +def deduct(core, actor, skillMod, value): return \ No newline at end of file diff --git a/scripts/skillMods/special_sign_wod_sm_03_banner.py b/scripts/skillMods/special_sign_wod_sm_03_banner.py index ee7769e2..b5c5e291 100644 --- a/scripts/skillMods/special_sign_wod_sm_03_banner.py +++ b/scripts/skillMods/special_sign_wod_sm_03_banner.py @@ -1,10 +1,8 @@ import sys -def add(core, actor, name, base): - actor.addSkillMod(name, base) +def add(core, actor, skillMod, value): return - -def deduct(core, actor, name, base): - actor.deductSkillMod(name, base) + +def deduct(core, actor, skillMod, value): return \ No newline at end of file diff --git a/scripts/skillMods/special_vendor_tcg_series1_bomarr_monk.py b/scripts/skillMods/special_vendor_tcg_series1_bomarr_monk.py index ee7769e2..b5c5e291 100644 --- a/scripts/skillMods/special_vendor_tcg_series1_bomarr_monk.py +++ b/scripts/skillMods/special_vendor_tcg_series1_bomarr_monk.py @@ -1,10 +1,8 @@ import sys -def add(core, actor, name, base): - actor.addSkillMod(name, base) +def add(core, actor, skillMod, value): return - -def deduct(core, actor, name, base): - actor.deductSkillMod(name, base) + +def deduct(core, actor, skillMod, value): return \ No newline at end of file diff --git a/scripts/skillMods/special_vendor_tcg_series1_ewok.py b/scripts/skillMods/special_vendor_tcg_series1_ewok.py index ee7769e2..b5c5e291 100644 --- a/scripts/skillMods/special_vendor_tcg_series1_ewok.py +++ b/scripts/skillMods/special_vendor_tcg_series1_ewok.py @@ -1,10 +1,8 @@ import sys -def add(core, actor, name, base): - actor.addSkillMod(name, base) +def add(core, actor, skillMod, value): return - -def deduct(core, actor, name, base): - actor.deductSkillMod(name, base) + +def deduct(core, actor, skillMod, value): return \ No newline at end of file diff --git a/scripts/skillMods/special_vendor_tcg_series1_gungan.py b/scripts/skillMods/special_vendor_tcg_series1_gungan.py index ee7769e2..b5c5e291 100644 --- a/scripts/skillMods/special_vendor_tcg_series1_gungan.py +++ b/scripts/skillMods/special_vendor_tcg_series1_gungan.py @@ -1,10 +1,8 @@ import sys -def add(core, actor, name, base): - actor.addSkillMod(name, base) +def add(core, actor, skillMod, value): return - -def deduct(core, actor, name, base): - actor.deductSkillMod(name, base) + +def deduct(core, actor, skillMod, value): return \ No newline at end of file diff --git a/scripts/skillMods/special_vendor_tcg_series1_jawa.py b/scripts/skillMods/special_vendor_tcg_series1_jawa.py index ee7769e2..b5c5e291 100644 --- a/scripts/skillMods/special_vendor_tcg_series1_jawa.py +++ b/scripts/skillMods/special_vendor_tcg_series1_jawa.py @@ -1,10 +1,8 @@ import sys -def add(core, actor, name, base): - actor.addSkillMod(name, base) +def add(core, actor, skillMod, value): return - -def deduct(core, actor, name, base): - actor.deductSkillMod(name, base) + +def deduct(core, actor, skillMod, value): return \ No newline at end of file diff --git a/scripts/skillMods/special_vendor_tcg_series1_meatlump.py b/scripts/skillMods/special_vendor_tcg_series1_meatlump.py index ee7769e2..b5c5e291 100644 --- a/scripts/skillMods/special_vendor_tcg_series1_meatlump.py +++ b/scripts/skillMods/special_vendor_tcg_series1_meatlump.py @@ -1,10 +1,8 @@ import sys -def add(core, actor, name, base): - actor.addSkillMod(name, base) +def add(core, actor, skillMod, value): return - -def deduct(core, actor, name, base): - actor.deductSkillMod(name, base) + +def deduct(core, actor, skillMod, value): return \ No newline at end of file diff --git a/scripts/skillMods/special_vendor_tcg_series1_serving_droid.py b/scripts/skillMods/special_vendor_tcg_series1_serving_droid.py index ee7769e2..b5c5e291 100644 --- a/scripts/skillMods/special_vendor_tcg_series1_serving_droid.py +++ b/scripts/skillMods/special_vendor_tcg_series1_serving_droid.py @@ -1,10 +1,8 @@ import sys -def add(core, actor, name, base): - actor.addSkillMod(name, base) +def add(core, actor, skillMod, value): return - -def deduct(core, actor, name, base): - actor.deductSkillMod(name, base) + +def deduct(core, actor, skillMod, value): return \ No newline at end of file diff --git a/scripts/skillMods/special_vendor_tcg_series3_battle_droid.py b/scripts/skillMods/special_vendor_tcg_series3_battle_droid.py index ee7769e2..b5c5e291 100644 --- a/scripts/skillMods/special_vendor_tcg_series3_battle_droid.py +++ b/scripts/skillMods/special_vendor_tcg_series3_battle_droid.py @@ -1,10 +1,8 @@ import sys -def add(core, actor, name, base): - actor.addSkillMod(name, base) +def add(core, actor, skillMod, value): return - -def deduct(core, actor, name, base): - actor.deductSkillMod(name, base) + +def deduct(core, actor, skillMod, value): return \ No newline at end of file diff --git a/scripts/skillMods/special_vendor_tcg_series3_nightsister.py b/scripts/skillMods/special_vendor_tcg_series3_nightsister.py index ee7769e2..b5c5e291 100644 --- a/scripts/skillMods/special_vendor_tcg_series3_nightsister.py +++ b/scripts/skillMods/special_vendor_tcg_series3_nightsister.py @@ -1,10 +1,8 @@ import sys -def add(core, actor, name, base): - actor.addSkillMod(name, base) +def add(core, actor, skillMod, value): return - -def deduct(core, actor, name, base): - actor.deductSkillMod(name, base) + +def deduct(core, actor, skillMod, value): return \ No newline at end of file diff --git a/scripts/skillMods/special_vendor_tcg_series4_kitonak.py b/scripts/skillMods/special_vendor_tcg_series4_kitonak.py index ee7769e2..b5c5e291 100644 --- a/scripts/skillMods/special_vendor_tcg_series4_kitonak.py +++ b/scripts/skillMods/special_vendor_tcg_series4_kitonak.py @@ -1,10 +1,8 @@ import sys -def add(core, actor, name, base): - actor.addSkillMod(name, base) +def add(core, actor, skillMod, value): return - -def deduct(core, actor, name, base): - actor.deductSkillMod(name, base) + +def deduct(core, actor, skillMod, value): return \ No newline at end of file diff --git a/scripts/skillMods/special_vendor_tcg_series4_toydarian.py b/scripts/skillMods/special_vendor_tcg_series4_toydarian.py index ee7769e2..b5c5e291 100644 --- a/scripts/skillMods/special_vendor_tcg_series4_toydarian.py +++ b/scripts/skillMods/special_vendor_tcg_series4_toydarian.py @@ -1,10 +1,8 @@ import sys -def add(core, actor, name, base): - actor.addSkillMod(name, base) +def add(core, actor, skillMod, value): return - -def deduct(core, actor, name, base): - actor.deductSkillMod(name, base) + +def deduct(core, actor, skillMod, value): return \ No newline at end of file diff --git a/scripts/skillMods/species.py b/scripts/skillMods/species.py index ee7769e2..b5c5e291 100644 --- a/scripts/skillMods/species.py +++ b/scripts/skillMods/species.py @@ -1,10 +1,8 @@ import sys -def add(core, actor, name, base): - actor.addSkillMod(name, base) +def add(core, actor, skillMod, value): return - -def deduct(core, actor, name, base): - actor.deductSkillMod(name, base) + +def deduct(core, actor, skillMod, value): return \ No newline at end of file diff --git a/scripts/skillMods/species_bothan.py b/scripts/skillMods/species_bothan.py index ee7769e2..b5c5e291 100644 --- a/scripts/skillMods/species_bothan.py +++ b/scripts/skillMods/species_bothan.py @@ -1,10 +1,8 @@ import sys -def add(core, actor, name, base): - actor.addSkillMod(name, base) +def add(core, actor, skillMod, value): return - -def deduct(core, actor, name, base): - actor.deductSkillMod(name, base) + +def deduct(core, actor, skillMod, value): return \ No newline at end of file diff --git a/scripts/skillMods/species_human.py b/scripts/skillMods/species_human.py index ee7769e2..b5c5e291 100644 --- a/scripts/skillMods/species_human.py +++ b/scripts/skillMods/species_human.py @@ -1,10 +1,8 @@ import sys -def add(core, actor, name, base): - actor.addSkillMod(name, base) +def add(core, actor, skillMod, value): return - -def deduct(core, actor, name, base): - actor.deductSkillMod(name, base) + +def deduct(core, actor, skillMod, value): return \ No newline at end of file diff --git a/scripts/skillMods/species_ithorian.py b/scripts/skillMods/species_ithorian.py index ee7769e2..b5c5e291 100644 --- a/scripts/skillMods/species_ithorian.py +++ b/scripts/skillMods/species_ithorian.py @@ -1,10 +1,8 @@ import sys -def add(core, actor, name, base): - actor.addSkillMod(name, base) +def add(core, actor, skillMod, value): return - -def deduct(core, actor, name, base): - actor.deductSkillMod(name, base) + +def deduct(core, actor, skillMod, value): return \ No newline at end of file diff --git a/scripts/skillMods/species_moncal.py b/scripts/skillMods/species_moncal.py index ee7769e2..b5c5e291 100644 --- a/scripts/skillMods/species_moncal.py +++ b/scripts/skillMods/species_moncal.py @@ -1,10 +1,8 @@ import sys -def add(core, actor, name, base): - actor.addSkillMod(name, base) +def add(core, actor, skillMod, value): return - -def deduct(core, actor, name, base): - actor.deductSkillMod(name, base) + +def deduct(core, actor, skillMod, value): return \ No newline at end of file diff --git a/scripts/skillMods/species_rodian.py b/scripts/skillMods/species_rodian.py index ee7769e2..b5c5e291 100644 --- a/scripts/skillMods/species_rodian.py +++ b/scripts/skillMods/species_rodian.py @@ -1,10 +1,8 @@ import sys -def add(core, actor, name, base): - actor.addSkillMod(name, base) +def add(core, actor, skillMod, value): return - -def deduct(core, actor, name, base): - actor.deductSkillMod(name, base) + +def deduct(core, actor, skillMod, value): return \ No newline at end of file diff --git a/scripts/skillMods/species_sullustan.py b/scripts/skillMods/species_sullustan.py index ee7769e2..b5c5e291 100644 --- a/scripts/skillMods/species_sullustan.py +++ b/scripts/skillMods/species_sullustan.py @@ -1,10 +1,8 @@ import sys -def add(core, actor, name, base): - actor.addSkillMod(name, base) +def add(core, actor, skillMod, value): return - -def deduct(core, actor, name, base): - actor.deductSkillMod(name, base) + +def deduct(core, actor, skillMod, value): return \ No newline at end of file diff --git a/scripts/skillMods/species_trandoshan.py b/scripts/skillMods/species_trandoshan.py index ee7769e2..b5c5e291 100644 --- a/scripts/skillMods/species_trandoshan.py +++ b/scripts/skillMods/species_trandoshan.py @@ -1,10 +1,8 @@ import sys -def add(core, actor, name, base): - actor.addSkillMod(name, base) +def add(core, actor, skillMod, value): return - -def deduct(core, actor, name, base): - actor.deductSkillMod(name, base) + +def deduct(core, actor, skillMod, value): return \ No newline at end of file diff --git a/scripts/skillMods/species_twilek.py b/scripts/skillMods/species_twilek.py index ee7769e2..b5c5e291 100644 --- a/scripts/skillMods/species_twilek.py +++ b/scripts/skillMods/species_twilek.py @@ -1,10 +1,8 @@ import sys -def add(core, actor, name, base): - actor.addSkillMod(name, base) +def add(core, actor, skillMod, value): return - -def deduct(core, actor, name, base): - actor.deductSkillMod(name, base) + +def deduct(core, actor, skillMod, value): return \ No newline at end of file diff --git a/scripts/skillMods/species_wookiee.py b/scripts/skillMods/species_wookiee.py index ee7769e2..b5c5e291 100644 --- a/scripts/skillMods/species_wookiee.py +++ b/scripts/skillMods/species_wookiee.py @@ -1,10 +1,8 @@ import sys -def add(core, actor, name, base): - actor.addSkillMod(name, base) +def add(core, actor, skillMod, value): return - -def deduct(core, actor, name, base): - actor.deductSkillMod(name, base) + +def deduct(core, actor, skillMod, value): return \ No newline at end of file diff --git a/scripts/skillMods/species_zabrak.py b/scripts/skillMods/species_zabrak.py index ee7769e2..b5c5e291 100644 --- a/scripts/skillMods/species_zabrak.py +++ b/scripts/skillMods/species_zabrak.py @@ -1,10 +1,8 @@ import sys -def add(core, actor, name, base): - actor.addSkillMod(name, base) +def add(core, actor, skillMod, value): return - -def deduct(core, actor, name, base): - actor.deductSkillMod(name, base) + +def deduct(core, actor, skillMod, value): return \ No newline at end of file diff --git a/scripts/skillMods/stamina.py b/scripts/skillMods/stamina.py index b58840b6..b08eb75f 100644 --- a/scripts/skillMods/stamina.py +++ b/scripts/skillMods/stamina.py @@ -1,14 +1,12 @@ import sys -def add(core, actor, name, base): - actor.addSkillMod(name, base) - actor.setMaxHealth(actor.getMaxHealth() + base * 2) - actor.setMaxAction(actor.getMaxAction() + base * 8) +def add(core, actor, skillMod, divisor): + actor.setMaxHealth(actor.getMaxHealth() + skillMod.getBase() * 2) + actor.setMaxAction(actor.getMaxAction() + skillMod.getBase() * 8) return - -def deduct(core, actor, name, base): - actor.deductSkillMod(name, base) - actor.setMaxHealth(actor.getMaxHealth() - base * 2) - actor.setMaxAction(actor.getMaxAction() - base * 8) + +def deduct(core, actor, skillMod, divisor): + actor.setMaxHealth(actor.getMaxHealth() - skillMod.getBase() * 2) + actor.setMaxAction(actor.getMaxAction() - skillMod.getBase() * 8) return - + \ No newline at end of file diff --git a/scripts/skillMods/stamina_modified.py b/scripts/skillMods/stamina_modified.py index b58840b6..b08eb75f 100644 --- a/scripts/skillMods/stamina_modified.py +++ b/scripts/skillMods/stamina_modified.py @@ -1,14 +1,12 @@ import sys -def add(core, actor, name, base): - actor.addSkillMod(name, base) - actor.setMaxHealth(actor.getMaxHealth() + base * 2) - actor.setMaxAction(actor.getMaxAction() + base * 8) +def add(core, actor, skillMod, divisor): + actor.setMaxHealth(actor.getMaxHealth() + skillMod.getBase() * 2) + actor.setMaxAction(actor.getMaxAction() + skillMod.getBase() * 8) return - -def deduct(core, actor, name, base): - actor.deductSkillMod(name, base) - actor.setMaxHealth(actor.getMaxHealth() - base * 2) - actor.setMaxAction(actor.getMaxAction() - base * 8) + +def deduct(core, actor, skillMod, divisor): + actor.setMaxHealth(actor.getMaxHealth() - skillMod.getBase() * 2) + actor.setMaxAction(actor.getMaxAction() - skillMod.getBase() * 8) return - + \ No newline at end of file diff --git a/scripts/skillMods/stealth.py b/scripts/skillMods/stealth.py index ee7769e2..b5c5e291 100644 --- a/scripts/skillMods/stealth.py +++ b/scripts/skillMods/stealth.py @@ -1,10 +1,8 @@ import sys -def add(core, actor, name, base): - actor.addSkillMod(name, base) +def add(core, actor, skillMod, value): return - -def deduct(core, actor, name, base): - actor.deductSkillMod(name, base) + +def deduct(core, actor, skillMod, value): return \ No newline at end of file diff --git a/scripts/skillMods/stealth_divisor.py b/scripts/skillMods/stealth_divisor.py index ee7769e2..b5c5e291 100644 --- a/scripts/skillMods/stealth_divisor.py +++ b/scripts/skillMods/stealth_divisor.py @@ -1,10 +1,8 @@ import sys -def add(core, actor, name, base): - actor.addSkillMod(name, base) +def add(core, actor, skillMod, value): return - -def deduct(core, actor, name, base): - actor.deductSkillMod(name, base) + +def deduct(core, actor, skillMod, value): return \ No newline at end of file diff --git a/scripts/skillMods/strength.py b/scripts/skillMods/strength.py index 4e702217..469cc568 100644 --- a/scripts/skillMods/strength.py +++ b/scripts/skillMods/strength.py @@ -1,12 +1,10 @@ import sys -def add(core, actor, name, base): - actor.addSkillMod(name, base) - actor.addSkillMod('display_only_block', base / 2) +def add(core, actor, skillMod, divisor): + core.skillModService.addSkillMod(actor, 'display_only_block', skillMod.getBase() / 2) return - -def deduct(core, actor, name, base): - actor.deductSkillMod(name, base) - actor.deductSkillMod('display_only_block', base / 2) + +def deduct(core, actor, skillMod, divisor): + core.skillModService.deductSkillMod(actor, 'display_only_block', skillMod.getBase() / 2) return \ No newline at end of file diff --git a/scripts/skillMods/strength_modified.py b/scripts/skillMods/strength_modified.py index 4e702217..469cc568 100644 --- a/scripts/skillMods/strength_modified.py +++ b/scripts/skillMods/strength_modified.py @@ -1,12 +1,10 @@ import sys -def add(core, actor, name, base): - actor.addSkillMod(name, base) - actor.addSkillMod('display_only_block', base / 2) +def add(core, actor, skillMod, divisor): + core.skillModService.addSkillMod(actor, 'display_only_block', skillMod.getBase() / 2) return - -def deduct(core, actor, name, base): - actor.deductSkillMod(name, base) - actor.deductSkillMod('display_only_block', base / 2) + +def deduct(core, actor, skillMod, divisor): + core.skillModService.deductSkillMod(actor, 'display_only_block', skillMod.getBase() / 2) return \ No newline at end of file diff --git a/scripts/skillMods/strikethrough_vulnerable.py b/scripts/skillMods/strikethrough_vulnerable.py index ee7769e2..b5c5e291 100644 --- a/scripts/skillMods/strikethrough_vulnerable.py +++ b/scripts/skillMods/strikethrough_vulnerable.py @@ -1,10 +1,8 @@ import sys -def add(core, actor, name, base): - actor.addSkillMod(name, base) +def add(core, actor, skillMod, value): return - -def deduct(core, actor, name, base): - actor.deductSkillMod(name, base) + +def deduct(core, actor, skillMod, value): return \ No newline at end of file diff --git a/scripts/skillMods/structure_assembly.py b/scripts/skillMods/structure_assembly.py index ee7769e2..b5c5e291 100644 --- a/scripts/skillMods/structure_assembly.py +++ b/scripts/skillMods/structure_assembly.py @@ -1,10 +1,8 @@ import sys -def add(core, actor, name, base): - actor.addSkillMod(name, base) +def add(core, actor, skillMod, value): return - -def deduct(core, actor, name, base): - actor.deductSkillMod(name, base) + +def deduct(core, actor, skillMod, value): return \ No newline at end of file diff --git a/scripts/skillMods/structure_customization.py b/scripts/skillMods/structure_customization.py index ee7769e2..b5c5e291 100644 --- a/scripts/skillMods/structure_customization.py +++ b/scripts/skillMods/structure_customization.py @@ -1,10 +1,8 @@ import sys -def add(core, actor, name, base): - actor.addSkillMod(name, base) +def add(core, actor, skillMod, value): return - -def deduct(core, actor, name, base): - actor.deductSkillMod(name, base) + +def deduct(core, actor, skillMod, value): return \ No newline at end of file diff --git a/scripts/skillMods/structure_experimentation.py b/scripts/skillMods/structure_experimentation.py index ee7769e2..b5c5e291 100644 --- a/scripts/skillMods/structure_experimentation.py +++ b/scripts/skillMods/structure_experimentation.py @@ -1,10 +1,8 @@ import sys -def add(core, actor, name, base): - actor.addSkillMod(name, base) +def add(core, actor, skillMod, value): return - -def deduct(core, actor, name, base): - actor.deductSkillMod(name, base) + +def deduct(core, actor, skillMod, value): return \ No newline at end of file diff --git a/scripts/skillMods/surveying.py b/scripts/skillMods/surveying.py index ee7769e2..b5c5e291 100644 --- a/scripts/skillMods/surveying.py +++ b/scripts/skillMods/surveying.py @@ -1,10 +1,8 @@ import sys -def add(core, actor, name, base): - actor.addSkillMod(name, base) +def add(core, actor, skillMod, value): return - -def deduct(core, actor, name, base): - actor.deductSkillMod(name, base) + +def deduct(core, actor, skillMod, value): return \ No newline at end of file diff --git a/scripts/skillMods/systems_reverse.py b/scripts/skillMods/systems_reverse.py index ee7769e2..b5c5e291 100644 --- a/scripts/skillMods/systems_reverse.py +++ b/scripts/skillMods/systems_reverse.py @@ -1,10 +1,8 @@ import sys -def add(core, actor, name, base): - actor.addSkillMod(name, base) +def add(core, actor, skillMod, value): return - -def deduct(core, actor, name, base): - actor.deductSkillMod(name, base) + +def deduct(core, actor, skillMod, value): return \ No newline at end of file diff --git a/scripts/skillMods/tka_armor.py b/scripts/skillMods/tka_armor.py index ee7769e2..b5c5e291 100644 --- a/scripts/skillMods/tka_armor.py +++ b/scripts/skillMods/tka_armor.py @@ -1,10 +1,8 @@ import sys -def add(core, actor, name, base): - actor.addSkillMod(name, base) +def add(core, actor, skillMod, value): return - -def deduct(core, actor, name, base): - actor.deductSkillMod(name, base) + +def deduct(core, actor, skillMod, value): return \ No newline at end of file diff --git a/scripts/skillMods/trader.py b/scripts/skillMods/trader.py index ee7769e2..b5c5e291 100644 --- a/scripts/skillMods/trader.py +++ b/scripts/skillMods/trader.py @@ -1,10 +1,8 @@ import sys -def add(core, actor, name, base): - actor.addSkillMod(name, base) +def add(core, actor, skillMod, value): return - -def deduct(core, actor, name, base): - actor.deductSkillMod(name, base) + +def deduct(core, actor, skillMod, value): return \ No newline at end of file diff --git a/scripts/skillMods/vendor_item_limit.py b/scripts/skillMods/vendor_item_limit.py index ee7769e2..b5c5e291 100644 --- a/scripts/skillMods/vendor_item_limit.py +++ b/scripts/skillMods/vendor_item_limit.py @@ -1,10 +1,8 @@ import sys -def add(core, actor, name, base): - actor.addSkillMod(name, base) +def add(core, actor, skillMod, value): return - -def deduct(core, actor, name, base): - actor.deductSkillMod(name, base) + +def deduct(core, actor, skillMod, value): return \ No newline at end of file diff --git a/scripts/skillMods/weapon_assembly.py b/scripts/skillMods/weapon_assembly.py index ee7769e2..b5c5e291 100644 --- a/scripts/skillMods/weapon_assembly.py +++ b/scripts/skillMods/weapon_assembly.py @@ -1,10 +1,8 @@ import sys -def add(core, actor, name, base): - actor.addSkillMod(name, base) +def add(core, actor, skillMod, value): return - -def deduct(core, actor, name, base): - actor.deductSkillMod(name, base) + +def deduct(core, actor, skillMod, value): return \ No newline at end of file diff --git a/scripts/skillMods/weapon_experimentation.py b/scripts/skillMods/weapon_experimentation.py index ee7769e2..b5c5e291 100644 --- a/scripts/skillMods/weapon_experimentation.py +++ b/scripts/skillMods/weapon_experimentation.py @@ -1,10 +1,8 @@ import sys -def add(core, actor, name, base): - actor.addSkillMod(name, base) +def add(core, actor, skillMod, value): return - -def deduct(core, actor, name, base): - actor.deductSkillMod(name, base) + +def deduct(core, actor, skillMod, value): return \ No newline at end of file diff --git a/scripts/skillMods/weapon_systems.py b/scripts/skillMods/weapon_systems.py index ee7769e2..b5c5e291 100644 --- a/scripts/skillMods/weapon_systems.py +++ b/scripts/skillMods/weapon_systems.py @@ -1,10 +1,8 @@ import sys -def add(core, actor, name, base): - actor.addSkillMod(name, base) +def add(core, actor, skillMod, value): return - -def deduct(core, actor, name, base): - actor.deductSkillMod(name, base) + +def deduct(core, actor, skillMod, value): return \ No newline at end of file diff --git a/scripts/skillMods/weapon_systems_experimentation.py b/scripts/skillMods/weapon_systems_experimentation.py index ee7769e2..b5c5e291 100644 --- a/scripts/skillMods/weapon_systems_experimentation.py +++ b/scripts/skillMods/weapon_systems_experimentation.py @@ -1,10 +1,8 @@ import sys -def add(core, actor, name, base): - actor.addSkillMod(name, base) +def add(core, actor, skillMod, value): return - -def deduct(core, actor, name, base): - actor.deductSkillMod(name, base) + +def deduct(core, actor, skillMod, value): return \ No newline at end of file diff --git a/scripts/starter_clothing/combat_brawler_humanoid_female.py b/scripts/starter_clothing/combat_brawler_humanoid_female.py deleted file mode 100644 index 3a176081..00000000 --- a/scripts/starter_clothing/combat_brawler_humanoid_female.py +++ /dev/null @@ -1,13 +0,0 @@ -import sys - -def CombatBrawlerHumanoidFemale(core, object): - shirt = core.objectService.createObject('object/tangible/wearables/shirt/shared_shirt_s24.iff', object.getPlanet()) - jacket = core.objectService.createObject('object/tangible/wearables/jacket/shared_jacket_s24.iff', object.getPlanet()) - pants = core.objectService.createObject('object/tangible/wearables/pants/shared_pants_s25.iff', object.getPlanet()) - boots = core.objectService.createObject('object/tangible/wearables/boots/shared_boots_s05.iff', object.getPlanet()) - necklace = core.objectService.createObject('object/tangible/wearables/necklace/shared_necklace_primitive_01.iff', object.getPlanet()) - object._add(shirt) - object._add(jacket) - object._add(pants) - object._add(boots) - object._add(necklace) \ No newline at end of file diff --git a/scripts/starter_clothing/combat_brawler_humanoid_male.py b/scripts/starter_clothing/combat_brawler_humanoid_male.py deleted file mode 100644 index a1ae7072..00000000 --- a/scripts/starter_clothing/combat_brawler_humanoid_male.py +++ /dev/null @@ -1,13 +0,0 @@ -import sys - -def CombatBrawlerHumanoidMale(core, object): - shirt = core.objectService.createObject('object/tangible/wearables/shirt/shared_shirt_s42.iff', object.getPlanet()) - jacket = core.objectService.createObject('object/tangible/wearables/jacket/shared_jacket_s24.iff', object.getPlanet()) - gloves = core.objectService.createObject('object/tangible/wearables/gloves/shared_gloves_s06.iff', object.getPlanet()) - pants = core.objectService.createObject('object/tangible/wearables/pants/shared_pants_s04.iff', object.getPlanet()) - boots = core.objectService.createObject('object/tangible/wearables/boots/shared_boots_s22.iff', object.getPlanet()) - object._add(shirt) - object._add(jacket) - object._add(gloves) - object._add(pants) - object._add(boots) diff --git a/scripts/starter_clothing/combat_brawler_ithorian_female.py b/scripts/starter_clothing/combat_brawler_ithorian_female.py deleted file mode 100644 index 223236bd..00000000 --- a/scripts/starter_clothing/combat_brawler_ithorian_female.py +++ /dev/null @@ -1,15 +0,0 @@ -import sys - -def CombatBrawlerIthorianFemale(core, object): - jacket = core.objectService.createObject('object/tangible/wearables/ithorian/shared_ith_jacket_s06.iff', object.getPlanet()) - shirt = core.objectService.createObject('object/tangible/wearables/ithorian/shared_ith_shirt_s01.iff', object.getPlanet()) - bandolier = core.objectService.createObject('object/tangible/wearables/ithorian/shared_ith_bandolier_s04.iff', object.getPlanet()) - belt = core.objectService.createObject('object/tangible/wearables/ithorian/shared_ith_belt_s17.iff', object.getPlanet()) - pants = core.objectService.createObject('object/tangible/wearables/ithorian/shared_ith_pants_s01.iff', object.getPlanet()) - gloves = core.objectService.createObject('object/tangible/wearables/ithorian/shared_ith_gloves_s01.iff', object.getPlanet()) - object._add(jacket) - object._add(shirt) - object._add(bandolier) - object._add(belt) - object._add(pants) - object._add(gloves) \ No newline at end of file diff --git a/scripts/starter_clothing/combat_brawler_ithorian_male.py b/scripts/starter_clothing/combat_brawler_ithorian_male.py deleted file mode 100644 index cd6dce81..00000000 --- a/scripts/starter_clothing/combat_brawler_ithorian_male.py +++ /dev/null @@ -1,9 +0,0 @@ -import sys - -def CombatBrawlerIthorianMale(core, object): - jacket = core.objectService.createObject('object/tangible/wearables/ithorian/shared_ith_jacket_s10.iff', object.getPlanet()) - pants = core.objectService.createObject('object/tangible/wearables/ithorian/shared_ith_pants_s02.iff', object.getPlanet()) - bandolier = core.objectService.createObject('object/tangible/wearables/ithorian/shared_ith_bandolier_s04.iff', object.getPlanet()) - object._add(jacket) - object._add(pants) - object._add(bandolier) \ No newline at end of file diff --git a/scripts/starter_clothing/combat_brawler_trandoshan_female.py b/scripts/starter_clothing/combat_brawler_trandoshan_female.py deleted file mode 100644 index 1f755bfe..00000000 --- a/scripts/starter_clothing/combat_brawler_trandoshan_female.py +++ /dev/null @@ -1,11 +0,0 @@ -import sys - -def CombatBrawlerTrandoshanFemale(core, object): - shirt = core.objectService.createObject('object/tangible/wearables/shirt/shared_shirt_s24.iff', object.getPlanet()) - jacket = core.objectService.createObject('object/tangible/wearables/jacket/shared_jacket_s24.iff', object.getPlanet()) - pants = core.objectService.createObject('object/tangible/wearables/pants/shared_pants_s25.iff', object.getPlanet()) - necklace = core.objectService.createObject('object/tangible/wearables/necklace/shared_necklace_primitive_01.iff', object.getPlanet()) - object._add(shirt) - object._add(jacket) - object._add(pants) - object._add(necklace) \ No newline at end of file diff --git a/scripts/starter_clothing/combat_brawler_trandoshan_male.py b/scripts/starter_clothing/combat_brawler_trandoshan_male.py deleted file mode 100644 index 78b4d786..00000000 --- a/scripts/starter_clothing/combat_brawler_trandoshan_male.py +++ /dev/null @@ -1,10 +0,0 @@ -import sys - -def CombatBrawlerTrandoshanMale(core, object): - shirt = core.objectService.createObject('object/tangible/wearables/shirt/shared_shirt_s42.iff', object.getPlanet()) - jacket = core.objectService.createObject('object/tangible/wearables/jacket/shared_jacket_s24.iff', object.getPlanet()) - pants = core.objectService.createObject('object/tangible/wearables/pants/shared_pants_s04.iff', object.getPlanet()) - inventory = object.getSlottedObject('inventory') - object._add(shirt) - object._add(jacket) - object._add(pants) diff --git a/scripts/starter_clothing/combat_brawler_wookiee_female.py b/scripts/starter_clothing/combat_brawler_wookiee_female.py deleted file mode 100644 index 917fb2d0..00000000 --- a/scripts/starter_clothing/combat_brawler_wookiee_female.py +++ /dev/null @@ -1,7 +0,0 @@ -import sys - -def CombatBrawlerWookieeFemale(core, object): - shirt = core.objectService.createObject('object/tangible/wearables/wookiee/shared_wke_shirt_s04.iff', object.getPlanet()) - skirt = core.objectService.createObject('object/tangible/wearables/wookiee/shared_wke_skirt_s02.iff', object.getPlanet()) - object._add(shirt) - object._add(skirt) diff --git a/scripts/starter_clothing/combat_brawler_wookiee_male.py b/scripts/starter_clothing/combat_brawler_wookiee_male.py deleted file mode 100644 index 8646f4e9..00000000 --- a/scripts/starter_clothing/combat_brawler_wookiee_male.py +++ /dev/null @@ -1,8 +0,0 @@ -import sys - -def CombatBrawlerWookieeMale(core, object): - shirt = core.objectService.createObject('object/tangible/wearables/wookiee/shared_wke_shirt_s04.iff', object.getPlanet()) - skirt = core.objectService.createObject('object/tangible/wearables/wookiee/shared_wke_skirt_s02.iff', object.getPlanet()) - inventory = object.getSlottedObject('inventory') - object._add(shirt) - object._add(skirt) diff --git a/scripts/starter_clothing/combat_marksman_humanoid_female.py b/scripts/starter_clothing/combat_marksman_humanoid_female.py deleted file mode 100644 index f43d084b..00000000 --- a/scripts/starter_clothing/combat_marksman_humanoid_female.py +++ /dev/null @@ -1,15 +0,0 @@ -import sys - -def CombatMarksmanHumanoidFemale(core, object): - shirt = core.objectService.createObject('object/tangible/wearables/shirt/shared_shirt_s28.iff', object.getPlanet()) - bandolier = core.objectService.createObject('object/tangible/wearables/bandolier/shared_npe_bandolier.iff', object.getPlanet()) - necklace = core.objectService.createObject('object/tangible/wearables/necklace/shared_necklace_primitive_04.iff', object.getPlanet()) - pants = core.objectService.createObject('object/tangible/wearables/pants/shared_pants_s09.iff', object.getPlanet()) - belt = core.objectService.createObject('object/tangible/wearables/belt/shared_npe_belt_02.iff', object.getPlanet()) - shoes = core.objectService.createObject('object/tangible/wearables/shoes/shared_shoes_s01.iff', object.getPlanet()) - object._add(shirt) - object._add(bandolier) - object._add(necklace) - object._add(pants) - object._add(belt) - object._add(shoes) \ No newline at end of file diff --git a/scripts/starter_clothing/combat_marksman_humanoid_male.py b/scripts/starter_clothing/combat_marksman_humanoid_male.py deleted file mode 100644 index 421fed10..00000000 --- a/scripts/starter_clothing/combat_marksman_humanoid_male.py +++ /dev/null @@ -1,12 +0,0 @@ -import sys - -def CombatMarksmanHumanoidMale(core, object): - shirt = core.objectService.createObject('object/tangible/wearables/shirt/shared_npe_shirt.iff', object.getPlanet()) - jacket = core.objectService.createObject('object/tangible/wearables/jacket/shared_jacket_s16.iff', object.getPlanet()) - pants = core.objectService.createObject('object/tangible/wearables/pants/shared_pants_s21.iff', object.getPlanet()) - boots = core.objectService.createObject('object/tangible/wearables/boots/shared_boots_s03.iff', object.getPlanet()) - inventory = object.getSlottedObject('inventory') - object._add(shirt) - object._add(jacket) - object._add(pants) - object._add(boots) \ No newline at end of file diff --git a/scripts/starter_clothing/combat_marksman_ithorian_female.py b/scripts/starter_clothing/combat_marksman_ithorian_female.py deleted file mode 100644 index 4f9903d7..00000000 --- a/scripts/starter_clothing/combat_marksman_ithorian_female.py +++ /dev/null @@ -1,12 +0,0 @@ -import sys - -def CombatMarksmanIthorianFemale(core, object): - shirt = core.objectService.createObject('object/tangible/wearables/ithorian/shared_ith_shirt_s09.iff', object.getPlanet()) - vest = core.objectService.createObject('object/tangible/wearables/ithorian/shared_ith_vest_s01.iff', object.getPlanet()) - pants = core.objectService.createObject('object/tangible/wearables/ithorian/shared_ith_pants_s01.iff', object.getPlanet()) - belt = core.objectService.createObject('object/tangible/wearables/ithorian/shared_ith_belt_s17.iff', object.getPlanet()) - inventory = object.getSlottedObject('inventory') - object._addshirt) - object._add(vest) - object._add(pants) - object._add(belt) \ No newline at end of file diff --git a/scripts/starter_clothing/combat_marksman_ithorian_male.py b/scripts/starter_clothing/combat_marksman_ithorian_male.py deleted file mode 100644 index 11db70e3..00000000 --- a/scripts/starter_clothing/combat_marksman_ithorian_male.py +++ /dev/null @@ -1,12 +0,0 @@ -import sys - -def CombatMarksmanIthorianMale(core, object): - belt = core.objectService.createObject('object/tangible/wearables/ithorian/shared_ith_belt_s20.iff', object.getPlanet()) - shirt = core.objectService.createObject('object/tangible/wearables/ithorian/shared_ith_shirt_s11.iff', object.getPlanet()) - jacket = core.objectService.createObject('object/tangible/wearables/ithorian/shared_ith_jacket_s07.iff', object.getPlanet()) - pants = core.objectService.createObject('object/tangible/wearables/ithorian/shared_ith_pants_s04.iff', object.getPlanet()) - inventory = object.getSlottedObject('inventory') - object._add(belt) - object._add(shirt) - object._add(jacket) - object._add(pants) \ No newline at end of file diff --git a/scripts/starter_clothing/combat_marksman_trandoshan_female.py b/scripts/starter_clothing/combat_marksman_trandoshan_female.py deleted file mode 100644 index 569d1ad6..00000000 --- a/scripts/starter_clothing/combat_marksman_trandoshan_female.py +++ /dev/null @@ -1,14 +0,0 @@ -import sys - -def CombatMarksmanTrandoshanFemale(core, object): - shirt = core.objectService.createObject('object/tangible/wearables/shirt/shared_shirt_s28.iff', object.getPlanet()) - bandolier = core.objectService.createObject('object/tangible/wearables/bandolier/shared_npe_bandolier.iff', object.getPlanet()) - necklace = core.objectService.createObject('object/tangible/wearables/necklace/shared_necklace_primitive_04.iff', object.getPlanet()) - pants = core.objectService.createObject('object/tangible/wearables/pants/shared_pants_s09.iff', object.getPlanet()) - belt = core.objectService.createObject('object/tangible/wearables/belt/shared_npe_belt_02.iff', object.getPlanet()) - inventory = object.getSlottedObject('inventory') - object._add(shirt) - object._add(bandolier) - object._add(necklace) - object._add(pants) - object._add(belt) \ No newline at end of file diff --git a/scripts/starter_clothing/combat_marksman_trandoshan_male.py b/scripts/starter_clothing/combat_marksman_trandoshan_male.py deleted file mode 100644 index 724752b6..00000000 --- a/scripts/starter_clothing/combat_marksman_trandoshan_male.py +++ /dev/null @@ -1,10 +0,0 @@ -import sys - -def CombatMarksmanTrandoshanMale(core, object): - shirt = core.objectService.createObject('object/tangible/wearables/shirt/shared_npe_shirt.iff', object.getPlanet()) - jacket = core.objectService.createObject('object/tangible/wearables/jacket/shared_jacket_s16.iff', object.getPlanet()) - pants = core.objectService.createObject('object/tangible/wearables/pants/shared_pants_s21.iff', object.getPlanet()) - inventory = object.getSlottedObject('inventory') - object._add(shirt) - object._add(jacket) - object._add(pants) \ No newline at end of file diff --git a/scripts/starter_clothing/combat_marksman_wookiee_female.py b/scripts/starter_clothing/combat_marksman_wookiee_female.py deleted file mode 100644 index 4c33c52a..00000000 --- a/scripts/starter_clothing/combat_marksman_wookiee_female.py +++ /dev/null @@ -1,8 +0,0 @@ -import sys - -def CombatMarksmanWookieeFemale(core, object): - bandolier = core.objectService.createObject('object/tangible/wearables/bandolier/shared_bandolier_s04.iff', object.getPlanet()) - shirt = core.objectService.createObject('object/tangible/wearables/wookiee/shared_wke_shirt_s03.iff', object.getPlanet()) - inventory = object.getSlottedObject('inventory') - object._add(bandolier) - object._add(shirt) \ No newline at end of file diff --git a/scripts/starter_clothing/combat_marksman_wookiee_male.py b/scripts/starter_clothing/combat_marksman_wookiee_male.py deleted file mode 100644 index b43a9f0a..00000000 --- a/scripts/starter_clothing/combat_marksman_wookiee_male.py +++ /dev/null @@ -1,8 +0,0 @@ -import sys - -def CombatMarksmanWookieeMale(core, object): - bandolier = core.objectService.createObject('object/tangible/wearables/bandolier/shared_bandolier_s04.iff', object.getPlanet()) - shirt = core.objectService.createObject('object/tangible/wearables/wookiee/shared_wke_shirt_s03.iff', object.getPlanet()) - inventory = object.getSlottedObject('inventory') - object._add(bandolier) - object._add(shirt) \ No newline at end of file diff --git a/scripts/starter_clothing/crafting_artisan_humanoid_female.py b/scripts/starter_clothing/crafting_artisan_humanoid_female.py deleted file mode 100644 index e02090dd..00000000 --- a/scripts/starter_clothing/crafting_artisan_humanoid_female.py +++ /dev/null @@ -1,18 +0,0 @@ -import sys - -def CraftingArtisanHumanoidFemale(core, object): - dress = core.objectService.createObject('object/tangible/wearables/dress/shared_dress_s29.iff', object.getPlanet()) - necklace = core.objectService.createObject('object/tangible/wearables/necklace/shared_necklace_s02.iff', object.getPlanet()) - bracelet_l = core.objectService.createObject('object/tangible/wearables/bracelet/shared_bracelet_s03_l.iff', object.getPlanet()) - bracelet_r = core.objectService.createObject('object/tangible/wearables/bracelet/shared_bracelet_s03_r.iff', object.getPlanet()) - bracelet_l_2 = core.objectService.createObject('object/tangible/wearables/bracelet/shared_bracelet_s06_l.iff', object.getPlanet()) - bracelet_r_2 = core.objectService.createObject('object/tangible/wearables/bracelet/shared_bracelet_s06_r.iff', object.getPlanet()) - shoes = core.objectService.createObject('object/tangible/wearables/shoes/shared_shoes_s07.iff', object.getPlanet()) - inventory = object.getSlottedObject('inventory') - inventory.add(bracelet_l_2) - inventory.add(bracelet_r_2) - object._add(dress) - object._add(necklace) - object._add(bracelet_l) - object._add(bracelet_r) - object._add(shoes) diff --git a/scripts/starter_clothing/crafting_artisan_humanoid_male.py b/scripts/starter_clothing/crafting_artisan_humanoid_male.py deleted file mode 100644 index f140e4c1..00000000 --- a/scripts/starter_clothing/crafting_artisan_humanoid_male.py +++ /dev/null @@ -1,14 +0,0 @@ -import sys - -def CraftingArtisanHumanoidMale(core, object): - shirt = core.objectService.createObject('object/tangible/wearables/shirt/shared_shirt_s03.iff', object.getPlanet()) - vest = core.objectService.createObject('object/tangible/wearables/vest/shared_vest_s09.iff', object.getPlanet()) - necklace = core.objectService.createObject('object/tangible/wearables/necklace/shared_necklace_primitive_03.iff', object.getPlanet()) - pants = core.objectService.createObject('object/tangible/wearables/pants/shared_pants_s13.iff', object.getPlanet()) - shoes = core.objectService.createObject('object/tangible/wearables/shoes/shared_shoes_s01.iff', object.getPlanet()) - inventory = object.getSlottedObject('inventory') - object._add(shirt) - object._add(vest) - object._add(necklace) - object._add(pants) - object._add(shoes) diff --git a/scripts/starter_clothing/crafting_artisan_ithorian_female.py b/scripts/starter_clothing/crafting_artisan_ithorian_female.py deleted file mode 100644 index 4ae7a7ea..00000000 --- a/scripts/starter_clothing/crafting_artisan_ithorian_female.py +++ /dev/null @@ -1,8 +0,0 @@ -import sys - -def CraftingArtisanIthorianFemale(core, object): - dress = core.objectService.createObject('object/tangible/wearables/ithorian/shared_ith_dress_s03.iff', object.getPlanet()) - hat = core.objectService.createObject('object/tangible/wearables/ithorian/shared_ith_hat_s02.iff', object.getPlanet()) - inventory = object.getSlottedObject('inventory') - object._add(dress) - object._add(hat) diff --git a/scripts/starter_clothing/crafting_artisan_ithorian_male.py b/scripts/starter_clothing/crafting_artisan_ithorian_male.py deleted file mode 100644 index 8ecd98cf..00000000 --- a/scripts/starter_clothing/crafting_artisan_ithorian_male.py +++ /dev/null @@ -1,10 +0,0 @@ -import sys - -def CraftingArtisanIthorianMale(core, object): - shirt = core.objectService.createObject('object/tangible/wearables/ithorian/shared_ith_shirt_s10.iff', object.getPlanet()) - pants = core.objectService.createObject('object/tangible/wearables/ithorian/shared_ith_pants_s06.iff', object.getPlanet()) - vest = core.objectService.createObject('object/tangible/wearables/ithorian/shared_ith_vest_s02.iff', object.getPlanet()) - inventory = object.getSlottedObject('inventory') - object._add(shirt) - object._add(pants) - object._add(vest) \ No newline at end of file diff --git a/scripts/starter_clothing/crafting_artisan_trandoshan_female.py b/scripts/starter_clothing/crafting_artisan_trandoshan_female.py deleted file mode 100644 index 60acce4a..00000000 --- a/scripts/starter_clothing/crafting_artisan_trandoshan_female.py +++ /dev/null @@ -1,16 +0,0 @@ -import sys - -def CraftingArtisanTrandoshanFemale(core, object): - dress = core.objectService.createObject('object/tangible/wearables/dress/shared_dress_s29.iff', object.getPlanet()) - necklace = core.objectService.createObject('object/tangible/wearables/necklace/shared_necklace_s02.iff', object.getPlanet()) - bracelet_l = core.objectService.createObject('object/tangible/wearables/bracelet/shared_bracelet_s03_l.iff', object.getPlanet()) - bracelet_r = core.objectService.createObject('object/tangible/wearables/bracelet/shared_bracelet_s03_r.iff', object.getPlanet()) - bracelet_l_2 = core.objectService.createObject('object/tangible/wearables/bracelet/shared_bracelet_s06_l.iff', object.getPlanet()) - bracelet_r_2 = core.objectService.createObject('object/tangible/wearables/bracelet/shared_bracelet_s06_r.iff', object.getPlanet()) - inventory = object.getSlottedObject('inventory') - inventory.add(bracelet_l_2) - inventory.add(bracelet_r_2) - object._add(dress) - object._add(necklace) - object._add(bracelet_l) - object._add(bracelet_r) \ No newline at end of file diff --git a/scripts/starter_clothing/crafting_artisan_trandoshan_male.py b/scripts/starter_clothing/crafting_artisan_trandoshan_male.py deleted file mode 100644 index fcabfeda..00000000 --- a/scripts/starter_clothing/crafting_artisan_trandoshan_male.py +++ /dev/null @@ -1,12 +0,0 @@ -import sys - -def CraftingArtisanTrandoshanMale(core, object): - shirt = core.objectService.createObject('object/tangible/wearables/shirt/shared_shirt_s03.iff', object.getPlanet()) - vest = core.objectService.createObject('object/tangible/wearables/vest/shared_vest_s09.if', object.getPlanet()) - necklace = core.objectService.createObject('object/tangible/wearables/necklace/shared_necklace_primitive_03.iff', object.getPlanet()) - pants = core.objectService.createObject('object/tangible/wearables/pants/shared_pants_s13.ifff', object.getPlanet()) - inventory = object.getSlottedObject('inventory') - object._add(shirt) - object._add(vest) - object._add(necklace) - object._add(pants) diff --git a/scripts/starter_clothing/crafting_artisan_twilek_female.py b/scripts/starter_clothing/crafting_artisan_twilek_female.py deleted file mode 100644 index 77e72081..00000000 --- a/scripts/starter_clothing/crafting_artisan_twilek_female.py +++ /dev/null @@ -1,20 +0,0 @@ -import sys - -def CraftingArtisanTwilekFemale(core, object): - dress = core.objectService.createObject('object/tangible/wearables/dress/shared_dress_s29.iff', object.getPlanet()) - necklace = core.objectService.createObject('object/tangible/wearables/necklace/shared_necklace_s02.iff', object.getPlanet()) - bracelet_l = core.objectService.createObject('object/tangible/wearables/bracelet/shared_bracelet_s03_l.iff', object.getPlanet()) - bracelet_r = core.objectService.createObject('object/tangible/wearables/bracelet/shared_bracelet_s03_r.iff', object.getPlanet()) - bracelet_l_2 = core.objectService.createObject('object/tangible/wearables/bracelet/shared_bracelet_s06_l.iff', object.getPlanet()) - bracelet_r_2 = core.objectService.createObject('object/tangible/wearables/bracelet/shared_bracelet_s06_r.iff', object.getPlanet()) - shoes = core.objectService.createObject('object/tangible/wearables/shoes/shared_shoes_s07.iff', object.getPlanet()) - hat = core.objectService.createObject('object/tangible/wearables/hat/shared_hat_twilek_s01.iff', object.getPlanet()) - inventory = object.getSlottedObject('inventory') - inventory.add(bracelet_l_2) - inventory.add(bracelet_r_2) - object._add(dress) - object._add(necklace) - object._add(bracelet_l) - object._add(bracelet_r) - object._add(shoes) - object._add(hat) diff --git a/scripts/starter_clothing/crafting_artisan_wookiee_female.py b/scripts/starter_clothing/crafting_artisan_wookiee_female.py deleted file mode 100644 index aa6fb915..00000000 --- a/scripts/starter_clothing/crafting_artisan_wookiee_female.py +++ /dev/null @@ -1,8 +0,0 @@ -import sys - -def CraftingArtisanWookieeFemale(core, object): - shirt = core.objectService.createObject('object/tangible/wearables/wookiee/shared_wke_shirt_s02.iff', object.getPlanet()) - skirt = core.objectService.createObject('object/tangible/wearables/wookiee/shared_wke_skirt_s03.iff', object.getPlanet()) - inventory = object.getSlottedObject('inventory') - object._add(shirt) - object._add(skirt) \ No newline at end of file diff --git a/scripts/starter_clothing/crafting_artisan_wookiee_male.py b/scripts/starter_clothing/crafting_artisan_wookiee_male.py deleted file mode 100644 index 841dfd41..00000000 --- a/scripts/starter_clothing/crafting_artisan_wookiee_male.py +++ /dev/null @@ -1,8 +0,0 @@ -import sys - -def CraftingArtisanWookieeMale(core, object): - shirt = core.objectService.createObject('object/tangible/wearables/wookiee/shared_wke_shirt_s02.iff', object.getPlanet()) - skirt = core.objectService.createObject('object/tangible/wearables/wookiee/shared_wke_skirt_s03.iff', object.getPlanet()) - inventory = object.getSlottedObject('inventory') - object._add(shirt) - object._add(skirt) \ No newline at end of file diff --git a/scripts/starter_clothing/outdoors_scout_humanoid_female.py b/scripts/starter_clothing/outdoors_scout_humanoid_female.py deleted file mode 100644 index a3347f00..00000000 --- a/scripts/starter_clothing/outdoors_scout_humanoid_female.py +++ /dev/null @@ -1,22 +0,0 @@ -import sys - -def OutdoorScoutHumanoidFemale(core, object): - vest = core.objectService.createObject('object/tangible/wearables/vest/shared_vest_s04.iff', object.getPlanet()) - bustier = core.objectService.createObject('object/tangible/wearables/bustier/shared_bustier_s02.iff', object.getPlanet()) - pants = core.objectService.createObject('object/tangible/wearables/pants/shared_pants_s13.iff', object.getPlanet()) - gloves = core.objectService.createObject('object/tangible/wearables/gloves/shared_gloves_s06.iff', object.getPlanet()) - bracelet_l = core.objectService.createObject('object/tangible/wearables/bracelet/shared_bracelet_s05_l.iff', object.getPlanet()) - bracelet_r = core.objectService.createObject('object/tangible/wearables/bracelet/shared_bracelet_s05_r.iff', object.getPlanet()) - boots = core.objectService.createObject('object/tangible/wearables/boots/shared_boots_s04.iff', object.getPlanet()) - belt = core.objectService.createObject('object/tangible/wearables/belt/shared_npe_belt_02.iff', object.getPlanet()) - necklace = core.objectService.createObject('object/tangible/wearables/necklace/shared_necklace_primitive_03.iff', object.getPlanet()) - inventory = object.getSlottedObject('inventory') - object._add(vest) - object._add(bustier) - object._add(pants) - object._add(gloves) - object._add(bracelet_l) - object._add(bracelet_r) - object._add(boots) - object._add(belt) - object._add(necklace) diff --git a/scripts/starter_clothing/outdoors_scout_humanoid_male.py b/scripts/starter_clothing/outdoors_scout_humanoid_male.py deleted file mode 100644 index a6c8d1c4..00000000 --- a/scripts/starter_clothing/outdoors_scout_humanoid_male.py +++ /dev/null @@ -1,14 +0,0 @@ -import sys - -def OutdoorScoutHumanoidMale(core, object): - vest = core.objectService.createObject('object/tangible/wearables/vest/shared_vest_hutt_gang_s01.iff', object.getPlanet()) - bracelet = core.objectService.createObject('object/tangible/wearables/bracelet/shared_primitive_bracelet.iff', object.getPlanet()) - pants = core.objectService.createObject('object/tangible/wearables/pants/shared_pants_s04.iff', object.getPlanet()) - belt = core.objectService.createObject('object/tangible/wearables/belt/shared_npe_belt_03.iff', object.getPlanet()) - boots = core.objectService.createObject('object/tangible/wearables/boots/shared_boots_s05.iff', object.getPlanet()) - inventory = object.getSlottedObject('inventory') - object._add(vest) - object._add(bracelet) - object._add(pants) - object._add(belt) - object._add(boots) diff --git a/scripts/starter_clothing/outdoors_scout_ithorian_female.py b/scripts/starter_clothing/outdoors_scout_ithorian_female.py deleted file mode 100644 index 11fd41ff..00000000 --- a/scripts/starter_clothing/outdoors_scout_ithorian_female.py +++ /dev/null @@ -1,10 +0,0 @@ -import sys - -def OutdoorScoutIthorianFemale(core, object): - shirt = core.objectService.createObject('object/tangible/wearables/ithorian/shared_ith_shirt_s05.iff', object.getPlanet()) - pants = core.objectService.createObject('object/tangible/wearables/ithorian/shared_ith_pants_s16.iff', object.getPlanet()) - jacket = core.objectService.createObject('object/tangible/wearables/ithorian/shared_ith_jacket_s02.iff', object.getPlanet()) - inventory = object.getSlottedObject('inventory') - object._add(shirt) - object._add(pants) - object._add(jacket) \ No newline at end of file diff --git a/scripts/starter_clothing/outdoors_scout_ithorian_male.py b/scripts/starter_clothing/outdoors_scout_ithorian_male.py deleted file mode 100644 index 6b824c94..00000000 --- a/scripts/starter_clothing/outdoors_scout_ithorian_male.py +++ /dev/null @@ -1,10 +0,0 @@ -import sys - -def OutdoorScoutIthorianMale(core, object): - shirt = core.objectService.createObject('object/tangible/wearables/ithorian/shared_ith_shirt_s13.iff', object.getPlanet()) - pants = core.objectService.createObject('object/tangible/wearables/ithorian/shared_ith_pants_s12.iff', object.getPlanet()) - jacket = core.objectService.createObject('object/tangible/wearables/ithorian/shared_ith_jacket_s03.iff', object.getPlanet()) - inventory = object.getSlottedObject('inventory') - object._add(shirt) - object._add(pants) - object._add(jacket) \ No newline at end of file diff --git a/scripts/starter_clothing/outdoors_scout_trandoshan_female.py b/scripts/starter_clothing/outdoors_scout_trandoshan_female.py deleted file mode 100644 index 8bf336ed..00000000 --- a/scripts/starter_clothing/outdoors_scout_trandoshan_female.py +++ /dev/null @@ -1,18 +0,0 @@ -import sys - -def OutdoorScoutTrandoshanFemale(core, object): - vest = core.objectService.createObject('object/tangible/wearables/vest/shared_vest_s04.iff', object.getPlanet()) - bustier = core.objectService.createObject('object/tangible/wearables/bustier/shared_bustier_s02.iff', object.getPlanet()) - pants = core.objectService.createObject('object/tangible/wearables/pants/shared_pants_s13.iff', object.getPlanet()) - bracelet_l = core.objectService.createObject('object/tangible/wearables/bracelet/shared_bracelet_s05_l.iff', object.getPlanet()) - bracelet_r = core.objectService.createObject('object/tangible/wearables/bracelet/shared_bracelet_s05_r.iff', object.getPlanet()) - belt = core.objectService.createObject('object/tangible/wearables/belt/shared_npe_belt_02.iff', object.getPlanet()) - necklace = core.objectService.createObject('object/tangible/wearables/necklace/shared_necklace_primitive_03.iff', object.getPlanet()) - inventory = object.getSlottedObject('inventory') - object._add(vest) - object._add(bustier) - object._add(pants) - object._add(bracelet_l) - object._add(bracelet_r) - object._add(belt) - object._add(necklace) diff --git a/scripts/starter_clothing/outdoors_scout_trandoshan_male.py b/scripts/starter_clothing/outdoors_scout_trandoshan_male.py deleted file mode 100644 index de822de3..00000000 --- a/scripts/starter_clothing/outdoors_scout_trandoshan_male.py +++ /dev/null @@ -1,12 +0,0 @@ -import sys - -def OutdoorScoutTrandoshanMale(core, object): - vest = core.objectService.createObject('object/tangible/wearables/vest/shared_vest_hutt_gang_s01.iff', object.getPlanet()) - bracelet = core.objectService.createObject('object/tangible/wearables/bracelet/shared_primitive_bracelet.iff', object.getPlanet()) - pants = core.objectService.createObject('object/tangible/wearables/pants/shared_pants_s04.iff', object.getPlanet()) - belt = core.objectService.createObject('object/tangible/wearables/belt/shared_npe_belt_03.iff', object.getPlanet()) - inventory = object.getSlottedObject('inventory') - object._add(vest) - object._add(bracelet) - object._add(pants) - object._add(belt) diff --git a/scripts/starter_clothing/outdoors_scout_wookiee_female.py b/scripts/starter_clothing/outdoors_scout_wookiee_female.py deleted file mode 100644 index c2fca3a7..00000000 --- a/scripts/starter_clothing/outdoors_scout_wookiee_female.py +++ /dev/null @@ -1,6 +0,0 @@ -import sys - -def OutdoorScoutWookieeFemale(core, object): - shirt = core.objectService.createObject('object/tangible/wearables/wookiee/shared_wke_shirt_s01.iff', object.getPlanet()) - inventory = object.getSlottedObject('inventory') - object._add(shirt) \ No newline at end of file diff --git a/scripts/starter_clothing/outdoors_scout_wookiee_male.py b/scripts/starter_clothing/outdoors_scout_wookiee_male.py deleted file mode 100644 index 63a6b6cf..00000000 --- a/scripts/starter_clothing/outdoors_scout_wookiee_male.py +++ /dev/null @@ -1,6 +0,0 @@ -import sys - -def OutdoorScoutWookieeMale(core, object): - shirt = core.objectService.createObject('object/tangible/wearables/wookiee/shared_wke_shirt_s01.iff', object.getPlanet()) - inventory = object.getSlottedObject('inventory') - object._add(shirt) \ No newline at end of file diff --git a/scripts/starter_clothing/science_medic_humanoid_female.py b/scripts/starter_clothing/science_medic_humanoid_female.py deleted file mode 100644 index 5e6ba991..00000000 --- a/scripts/starter_clothing/science_medic_humanoid_female.py +++ /dev/null @@ -1,12 +0,0 @@ -import sys - -def ScienceMedicHumanoidFemale(core, object): - jacket = core.objectService.createObject('object/tangible/wearables/jacket/shared_jacket_s26.iff', object.getPlanet()) - pants = core.objectService.createObject('object/tangible/wearables/pants/shared_pants_s08.iff', object.getPlanet()) - shoes = core.objectService.createObject('object/tangible/wearables/shoes/shared_shoes_s01.iff', object.getPlanet()) - necklace = core.objectService.createObject('object/tangible/wearables/necklace/shared_necklace_s01.iff', object.getPlanet()) - inventory = object.getSlottedObject('inventory') - object._add(jacket) - object._add(pants) - object._add(shoes) - object._add(necklace) \ No newline at end of file diff --git a/scripts/starter_clothing/science_medic_humanoid_male.py b/scripts/starter_clothing/science_medic_humanoid_male.py deleted file mode 100644 index ca19c6e2..00000000 --- a/scripts/starter_clothing/science_medic_humanoid_male.py +++ /dev/null @@ -1,10 +0,0 @@ -import sys - -def ScienceMedicHumanoidMale(core, object): - shirt = core.objectService.createObject('object/tangible/wearables/shirt/shared_npe_shirt.iff', object.getPlanet()) - pants = core.objectService.createObject('object/tangible/wearables/pants/shared_pants_s01.iff', object.getPlanet()) - shoes = core.objectService.createObject('object/tangible/wearables/shoes/shared_shoes_s02.iff', object.getPlanet()) - inventory = object.getSlottedObject('inventory') - object._add(shirt) - object._add(pants) - object._add(shoes) \ No newline at end of file diff --git a/scripts/starter_clothing/science_medic_ithorian_female.py b/scripts/starter_clothing/science_medic_ithorian_female.py deleted file mode 100644 index fb7638b8..00000000 --- a/scripts/starter_clothing/science_medic_ithorian_female.py +++ /dev/null @@ -1,8 +0,0 @@ -import sys - -def ScienceMedicIthorianFemale(core, object): - shirt = core.objectService.createObject('object/tangible/wearables/ithorian/shared_ith_shirt_s12.iff', object.getPlanet()) - pants = core.objectService.createObject('object/tangible/wearables/ithorian/shared_ith_pants_s02.iff', object.getPlanet()) - inventory = object.getSlottedObject('inventory') - object._add(shirt) - object._add(pants) \ No newline at end of file diff --git a/scripts/starter_clothing/science_medic_ithorian_male.py b/scripts/starter_clothing/science_medic_ithorian_male.py deleted file mode 100644 index 88ec8b7a..00000000 --- a/scripts/starter_clothing/science_medic_ithorian_male.py +++ /dev/null @@ -1,10 +0,0 @@ -import sys - -def ScienceMedicIthorianMale(core, object): - jacket = core.objectService.createObject('object/tangible/wearables/ithorian/shared_ith_jacket_s01.iff', object.getPlanet()) - shirt = core.objectService.createObject('object/tangible/wearables/ithorian/shared_ith_shirt_s04.iff', object.getPlanet()) - pants = core.objectService.createObject('object/tangible/wearables/ithorian/shared_ith_pants_s18.iff', object.getPlanet()) - inventory = object.getSlottedObject('inventory') - object._add(jacket) - object._add(shirt) - object._add(pants) diff --git a/scripts/starter_clothing/science_medic_trandoshan_female.py b/scripts/starter_clothing/science_medic_trandoshan_female.py deleted file mode 100644 index 556e8e94..00000000 --- a/scripts/starter_clothing/science_medic_trandoshan_female.py +++ /dev/null @@ -1,10 +0,0 @@ -import sys - -def ScienceMedicTrandoshanFemale(core, object): - jacket = core.objectService.createObject('object/tangible/wearables/jacket/shared_jacket_s26.iff', object.getPlanet()) - pants = core.objectService.createObject('object/tangible/wearables/pants/shared_pants_s08.iff', object.getPlanet()) - necklace = core.objectService.createObject('object/tangible/wearables/necklace/shared_necklace_s01.iff', object.getPlanet()) - inventory = object.getSlottedObject('inventory') - object._add(jacket) - object._add(pants) - object._add(necklace) \ No newline at end of file diff --git a/scripts/starter_clothing/science_medic_trandoshan_male.py b/scripts/starter_clothing/science_medic_trandoshan_male.py deleted file mode 100644 index 9b50dd69..00000000 --- a/scripts/starter_clothing/science_medic_trandoshan_male.py +++ /dev/null @@ -1,8 +0,0 @@ -import sys - -def ScienceMedicTrandoshanMale(core, object): - shirt = core.objectService.createObject('object/tangible/wearables/shirt/shared_npe_shirt.iff', object.getPlanet()) - pants = core.objectService.createObject('object/tangible/wearables/pants/shared_pants_s01.iff', object.getPlanet()) - inventory = object.getSlottedObject('inventory') - object._add(shirt) - object._add(pants) \ No newline at end of file diff --git a/scripts/starter_clothing/science_medic_wookiee_female.py b/scripts/starter_clothing/science_medic_wookiee_female.py deleted file mode 100644 index 9e969888..00000000 --- a/scripts/starter_clothing/science_medic_wookiee_female.py +++ /dev/null @@ -1,8 +0,0 @@ -import sys - -def ScienceMedicWookieeFemale(core, object): - hood = core.objectService.createObject('object/tangible/wearables/wookiee/shared_wke_hood_s02.iff', object.getPlanet()) - bandolier = core.objectService.createObject('object/tangible/wearables/bandolier/shared_bandolier_s09.iff', object.getPlanet()) - inventory = object.getSlottedObject('inventory') - object._add(hood) - object._add(bandolier) \ No newline at end of file diff --git a/scripts/starter_clothing/science_medic_wookiee_male.py b/scripts/starter_clothing/science_medic_wookiee_male.py deleted file mode 100644 index ba2c8845..00000000 --- a/scripts/starter_clothing/science_medic_wookiee_male.py +++ /dev/null @@ -1,8 +0,0 @@ -import sys - -def ScienceMedicWookieeMale(core, object): - hood = core.objectService.createObject('object/tangible/wearables/wookiee/shared_wke_hood_s02.iff', object.getPlanet()) - bandolier = core.objectService.createObject('object/tangible/wearables/bandolier/shared_bandolier_s09.iff', object.getPlanet()) - inventory = object.getSlottedObject('inventory') - object._add(hood) - object._add(bandolier) \ No newline at end of file diff --git a/scripts/starter_clothing/social_entertainer_humanoid_female.py b/scripts/starter_clothing/social_entertainer_humanoid_female.py deleted file mode 100644 index 0b9f5157..00000000 --- a/scripts/starter_clothing/social_entertainer_humanoid_female.py +++ /dev/null @@ -1,16 +0,0 @@ -import sys - -def SocialEntertainerHumanoidFemale(core, object): - bracelet_l = core.objectService.createObject('object/tangible/wearables/bracelet/shared_bracelet_s05_l.iff', object.getPlanet()) - bracelet_r = core.objectService.createObject('object/tangible/wearables/bracelet/shared_bracelet_s05_r.iff', object.getPlanet()) - necklace = core.objectService.createObject('object/tangible/wearables/necklace/shared_necklace_s12.iff', object.getPlanet()) - shoes = core.objectService.createObject('object/tangible/wearables/shoes/shared_shoes_s07.iff', object.getPlanet()) - skirt = core.objectService.createObject('object/tangible/wearables/skirt/shared_npe_entertainer_skirt.iff', object.getPlanet()) - bustier = core.objectService.createObject('object/tangible/wearables/bustier/shared_bustier_s01.iff', object.getPlanet()) - inventory = object.getSlottedObject('inventory') - object._add(bracelet_l) - object._add(bracelet_r) - object._add(necklace) - object._add(shoes) - object._add(skirt) - object._add(bustier) \ No newline at end of file diff --git a/scripts/starter_clothing/social_entertainer_humanoid_male.py b/scripts/starter_clothing/social_entertainer_humanoid_male.py deleted file mode 100644 index c9fcfec6..00000000 --- a/scripts/starter_clothing/social_entertainer_humanoid_male.py +++ /dev/null @@ -1,10 +0,0 @@ -import sys - -def SocialEntertainerHumanoidMale(core, object): - vest = core.objectService.createObject('object/tangible/wearables/vest/shared_vest_s15.iff', object.getPlanet()) - skirt = core.objectService.createObject('object/tangible/wearables/skirt/shared_skirt_s05.iff', object.getPlanet()) - shoes = core.objectService.createObject('object/tangible/wearables/shoes/shared_shoes_s01.iff', object.getPlanet()) - inventory = object.getSlottedObject('inventory') - object._add(vest) - object._add(skirt) - object._add(shoes) \ No newline at end of file diff --git a/scripts/starter_clothing/social_entertainer_ithorian_female.py b/scripts/starter_clothing/social_entertainer_ithorian_female.py deleted file mode 100644 index 4afa5c52..00000000 --- a/scripts/starter_clothing/social_entertainer_ithorian_female.py +++ /dev/null @@ -1,16 +0,0 @@ -import sys - -def SocialEntertainerIthorianFemale(core, object): - bracelet_l = core.objectService.createObject('object/tangible/wearables/bracelet/shared_bracelet_s05_l.iff', object.getPlanet()) - bracelet_r = core.objectService.createObject('object/tangible/wearables/bracelet/shared_bracelet_s05_r.iff', object.getPlanet()) - necklace = core.objectService.createObject('object/tangible/wearables/necklace/shared_necklace_s12.iff', object.getPlanet()) - shoes = core.objectService.createObject('object/tangible/wearables/shoes/shared_shoes_s07.iff', object.getPlanet()) - skirt = core.objectService.createObject('object/tangible/wearables/skirt/shared_npe_entertainer_skirt.iff', object.getPlanet()) - bustier = core.objectService.createObject('object/tangible/wearables/bustier/shared_bustier_s01.iff', object.getPlanet()) - inventory = object.getSlottedObject('inventory') - object._add(bracelet_l) - object._add(bracelet_r) - object._add(necklace) - object._add(shoes) - object._add(skirt) - object._add(bustier) \ No newline at end of file diff --git a/scripts/starter_clothing/social_entertainer_ithorian_male.py b/scripts/starter_clothing/social_entertainer_ithorian_male.py deleted file mode 100644 index a13a5c78..00000000 --- a/scripts/starter_clothing/social_entertainer_ithorian_male.py +++ /dev/null @@ -1,10 +0,0 @@ -import sys - -def SocialEntertainerIthorianMale(core, object): - pants = core.objectService.createObject('object/tangible/wearables/ithorian/shared_ith_pants_s10.iff', object.getPlanet()) - shirt = core.objectService.createObject('object/tangible/wearables/ithorian/shared_ith_shirt_s08.iff', object.getPlanet()) - dress = core.objectService.createObject('object/tangible/wearables/ithorian/shared_ith_dress_short_s01.iff', object.getPlanet()) - inventory = object.getSlottedObject('inventory') - object._add(pants) - object._add(shirt) - object._add(dress) \ No newline at end of file diff --git a/scripts/starter_clothing/social_entertainer_trandoshan_female.py b/scripts/starter_clothing/social_entertainer_trandoshan_female.py deleted file mode 100644 index b77afa50..00000000 --- a/scripts/starter_clothing/social_entertainer_trandoshan_female.py +++ /dev/null @@ -1,14 +0,0 @@ -import sys - -def SocialEntertainerTrandoshanFemale(core, object): - bracelet_l = core.objectService.createObject('object/tangible/wearables/bracelet/shared_bracelet_s05_l.iff', object.getPlanet()) - bracelet_r = core.objectService.createObject('object/tangible/wearables/bracelet/shared_bracelet_s05_r.iff', object.getPlanet()) - necklace = core.objectService.createObject('object/tangible/wearables/necklace/shared_necklace_s12.iff', object.getPlanet()) - skirt = core.objectService.createObject('object/tangible/wearables/skirt/shared_npe_entertainer_skirt.iff', object.getPlanet()) - bustier = core.objectService.createObject('object/tangible/wearables/bustier/shared_bustier_s01.iff', object.getPlanet()) - inventory = object.getSlottedObject('inventory') - object._add(bracelet_l) - object._add(bracelet_r) - object._add(necklace) - object._add(skirt) - object._add(bustier) \ No newline at end of file diff --git a/scripts/starter_clothing/social_entertainer_trandoshan_male.py b/scripts/starter_clothing/social_entertainer_trandoshan_male.py deleted file mode 100644 index cd9bcc6c..00000000 --- a/scripts/starter_clothing/social_entertainer_trandoshan_male.py +++ /dev/null @@ -1,8 +0,0 @@ -import sys - -def SocialEntertainerTrandoshanMale(core, object): - vest = core.objectService.createObject('object/tangible/wearables/vest/shared_vest_s15.iff', object.getPlanet()) - skirt = core.objectService.createObject('object/tangible/wearables/skirt/shared_skirt_s05.iff', object.getPlanet()) - inventory = object.getSlottedObject('inventory') - object._add(vest) - object._add(skirt) \ No newline at end of file diff --git a/scripts/starter_clothing/social_entertainer_twilek_female.py b/scripts/starter_clothing/social_entertainer_twilek_female.py deleted file mode 100644 index e5dcdd36..00000000 --- a/scripts/starter_clothing/social_entertainer_twilek_female.py +++ /dev/null @@ -1,18 +0,0 @@ -import sys - -def SocialEntertainerTwilekFemale(core, object): - bracelet_l = core.objectService.createObject('object/tangible/wearables/bracelet/shared_bracelet_s05_l.iff', object.getPlanet()) - bracelet_r = core.objectService.createObject('object/tangible/wearables/bracelet/shared_bracelet_s05_r.iff', object.getPlanet()) - necklace = core.objectService.createObject('object/tangible/wearables/necklace/shared_necklace_s12.iff', object.getPlanet()) - shoes = core.objectService.createObject('object/tangible/wearables/shoes/shared_shoes_s07.iff', object.getPlanet()) - skirt = core.objectService.createObject('object/tangible/wearables/skirt/shared_npe_entertainer_skirt.iff', object.getPlanet()) - bustier = core.objectService.createObject('object/tangible/wearables/bustier/shared_bustier_s01.iff', object.getPlanet()) - hat = core.objectService.createObject('object/tangible/wearables/hat/shared_hat_twilek_s03.iff', object.getPlanet()) - inventory = object.getSlottedObject('inventory') - object._add(bracelet_l) - object._add(bracelet_r) - object._add(necklace) - object._add(shoes) - object._add(skirt) - object._add(bustier) - object._add(hat) \ No newline at end of file diff --git a/scripts/starter_clothing/social_entertainer_wookiee_female.py b/scripts/starter_clothing/social_entertainer_wookiee_female.py deleted file mode 100644 index a8cdfee0..00000000 --- a/scripts/starter_clothing/social_entertainer_wookiee_female.py +++ /dev/null @@ -1,8 +0,0 @@ -import sys - -def SocialEntertainerWookieeFemale(core, object): - gloves = core.objectService.createObject('object/tangible/wearables/wookiee/shared_wke_gloves_s04.iff', object.getPlanet()) - hood = core.objectService.createObject('object/tangible/wearables/wookiee/shared_wke_hood_s03.iff', object.getPlanet()) - inventory = object.getSlottedObject('inventory') - object._add(gloves) - object._add(hood) \ No newline at end of file diff --git a/scripts/starter_clothing/social_entertainer_wookiee_male.py b/scripts/starter_clothing/social_entertainer_wookiee_male.py deleted file mode 100644 index ed797f8c..00000000 --- a/scripts/starter_clothing/social_entertainer_wookiee_male.py +++ /dev/null @@ -1,8 +0,0 @@ -import sys - -def SocialEntertainerWookieeMale(core, object): - gloves = core.objectService.createObject('object/tangible/wearables/wookiee/shared_wke_gloves_s04.iff', object.getPlanet()) - hood = core.objectService.createObject('object/tangible/wearables/wookiee/shared_wke_hood_s03.iff', object.getPlanet()) - inventory = object.getSlottedObject('inventory') - object._add(gloves) - object._add(hood) \ No newline at end of file diff --git a/scripts/starterclothing.py b/scripts/starterclothing.py deleted file mode 100644 index f24afeb3..00000000 --- a/scripts/starterclothing.py +++ /dev/null @@ -1,298 +0,0 @@ - - -import sys - -def CreateStarterClothing(core, object, starterProfession, raceTemplate): - - if starterProfession == 'outdoors_scout' and raceTemplate == 'object/creature/player/human_male.iff': - core.scriptService.callScript("scripts/starter_clothing/", "OutdoorScoutHumanoidMale", "outdoors_scout_humanoid_male", core, object) - elif starterProfession == 'outdoors_scout' and raceTemplate == 'object/creature/player/zabrak_male.iff': - core.scriptService.callScript("scripts/starter_clothing/", "OutdoorScoutHumanoidMale", "outdoors_scout_humanoid_male", core, object) - elif starterProfession == 'outdoors_scout' and raceTemplate == 'object/creature/player/bothan_male.iff': - core.scriptService.callScript("scripts/starter_clothing/", "OutdoorScoutHumanoidMale", "outdoors_scout_humanoid_male", core, object) - elif starterProfession == 'outdoors_scout' and raceTemplate == 'object/creature/player/sullustan_male.iff': - core.scriptService.callScript("scripts/starter_clothing/", "OutdoorScoutHumanoidMale", "outdoors_scout_humanoid_male", core, object) - elif starterProfession == 'outdoors_scout' and raceTemplate == 'object/creature/player/twilek_male.iff': - core.scriptService.callScript("scripts/starter_clothing/", "OutdoorScoutHumanoidMale", "outdoors_scout_humanoid_male", core, object) - elif starterProfession == 'outdoors_scout' and raceTemplate == 'object/creature/player/moncal_male.iff': - core.scriptService.callScript("scripts/starter_clothing/", "OutdoorScoutHumanoidMale", "outdoors_scout_humanoid_male", core, object) - elif starterProfession == 'outdoors_scout' and raceTemplate == 'object/creature/player/rodian_male.iff': - core.scriptService.callScript("scripts/starter_clothing/", "OutdoorScoutHumanoidMale", "outdoors_scout_humanoid_male", core, object) - - elif starterProfession == 'outdoors_scout' and raceTemplate == 'object/creature/player/human_female.iff': - core.scriptService.callScript("scripts/starter_clothing/", "OutdoorScoutHumanoidFemale", "outdoors_scout_humanoid_female", core, object) - elif starterProfession == 'outdoors_scout' and raceTemplate == 'object/creature/player/zabrak_female.iff': - core.scriptService.callScript("scripts/starter_clothing/", "OutdoorScoutHumanoidFemale", "outdoors_scout_humanoid_female", core, object) - elif starterProfession == 'outdoors_scout' and raceTemplate == 'object/creature/player/bothan_female.iff': - core.scriptService.callScript("scripts/starter_clothing/", "OutdoorScoutHumanoidFemale", "outdoors_scout_humanoid_female", core, object) - elif starterProfession == 'outdoors_scout' and raceTemplate == 'object/creature/player/sullustan_female.iff': - core.scriptService.callScript("scripts/starter_clothing/", "OutdoorScoutHumanoidFemale", "outdoors_scout_humanoid_female", core, object) - elif starterProfession == 'outdoors_scout' and raceTemplate == 'object/creature/player/twilek_female.iff': - core.scriptService.callScript("scripts/starter_clothing/", "OutdoorScoutHumanoidFemale", "outdoors_scout_humanoid_female", core, object) - elif starterProfession == 'outdoors_scout' and raceTemplate == 'object/creature/player/moncal_female.iff': - core.scriptService.callScript("scripts/starter_clothing/", "OutdoorScoutHumanoidFemale", "outdoors_scout_humanoid_female", core, object) - elif starterProfession == 'outdoors_scout' and raceTemplate == 'object/creature/player/rodian_female.iff': - core.scriptService.callScript("scripts/starter_clothing/", "OutdoorScoutHumanoidFemale", "outdoors_scout_humanoid_female", core, object) - - elif starterProfession == 'outdoors_scout' and raceTemplate == 'object/creature/player/trandoshan_male.iff': - core.scriptService.callScript("scripts/starter_clothing/", "OutdoorScoutTrandoshanMale", "outdoors_scout_trandoshan_male", core, object) - - elif starterProfession == 'outdoors_scout' and raceTemplate == 'object/creature/player/trandoshan_female.iff': - core.scriptService.callScript("scripts/starter_clothing/", "OutdoorScoutTrandoshanFemale", "outdoors_scout_trandoshan_female", core, object) - - elif starterProfession == 'outdoors_scout' and raceTemplate == 'object/creature/player/wookiee_male.iff': - core.scriptService.callScript("scripts/starter_clothing/", "OutdoorScoutWookieeMale", "outdoors_scout_wookiee_male", core, object) - - elif starterProfession == 'outdoors_scout' and raceTemplate == 'object/creature/player/wookiee_female.iff': - core.scriptService.callScript("scripts/starter_clothing/", "OutdoorScoutWookieeFemale", "outdoors_scout_wookiee_female", core, object) - - elif starterProfession == 'outdoors_scout' and raceTemplate == 'object/creature/player/ithorian_male.iff': - core.scriptService.callScript("scripts/starter_clothing/", "OutdoorScoutIthorianMale", "outdoors_scout_ithorian_male", core, object) - - elif starterProfession == 'outdoors_scout' and raceTemplate == 'object/creature/player/ithorian_female.iff': - core.scriptService.callScript("scripts/starter_clothing/", "OutdoorScoutIthorianFemale", "outdoors_scout_ithorian_female", core, object) - - elif starterProfession == 'combat_brawler' and raceTemplate == 'object/creature/player/human_male.iff': - core.scriptService.callScript("scripts/starter_clothing/", "CombatBrawlerHumanoidMale", "combat_brawler_humanoid_male", core, object) - elif starterProfession == 'combat_brawler' and raceTemplate == 'object/creature/player/zabrak_male.iff': - core.scriptService.callScript("scripts/starter_clothing/", "CombatBrawlerHumanoidMale", "combat_brawler_humanoid_male", core, object) - elif starterProfession == 'combat_brawler' and raceTemplate == 'object/creature/player/bothan_male.iff': - core.scriptService.callScript("scripts/starter_clothing/", "CombatBrawlerHumanoidMale", "combat_brawler_humanoid_male", core, object) - elif starterProfession == 'combat_brawler' and raceTemplate == 'object/creature/player/sullustan_male.iff': - core.scriptService.callScript("scripts/starter_clothing/", "CombatBrawlerHumanoidMale", "combat_brawler_humanoid_male", core, object) - elif starterProfession == 'combat_brawler' and raceTemplate == 'object/creature/player/twilek_male.iff': - core.scriptService.callScript("scripts/starter_clothing/", "CombatBrawlerHumanoidMale", "combat_brawler_humanoid_male", core, object) - elif starterProfession == 'combat_brawler' and raceTemplate == 'object/creature/player/moncal_male.iff': - core.scriptService.callScript("scripts/starter_clothing/", "CombatBrawlerHumanoidMale", "combat_brawler_humanoid_male", core, object) - elif starterProfession == 'combat_brawler' and raceTemplate == 'object/creature/player/rodian_male.iff': - core.scriptService.callScript("scripts/starter_clothing/", "CombatBrawlerHumanoidMale", "combat_brawler_humanoid_male", core, object) - - elif starterProfession == 'combat_brawler' and raceTemplate == 'object/creature/player/human_female.iff': - core.scriptService.callScript("scripts/starter_clothing/", "CombatBrawlerHumanoidFemale", "combat_brawler_humanoid_female", core, object) - elif starterProfession == 'combat_brawler' and raceTemplate == 'object/creature/player/zabrak_female.iff': - core.scriptService.callScript("scripts/starter_clothing/", "CombatBrawlerHumanoidFemale", "combat_brawler_humanoid_female", core, object) - elif starterProfession == 'combat_brawler' and raceTemplate == 'object/creature/player/bothan_female.iff': - core.scriptService.callScript("scripts/starter_clothing/", "CombatBrawlerHumanoidFemale", "combat_brawler_humanoid_female", core, object) - elif starterProfession == 'combat_brawler' and raceTemplate == 'object/creature/player/sullustan_female.iff': - core.scriptService.callScript("scripts/starter_clothing/", "CombatBrawlerHumanoidFemale", "combat_brawler_humanoid_female", core, object) - elif starterProfession == 'combat_brawler' and raceTemplate == 'object/creature/player/twilek_female.iff': - core.scriptService.callScript("scripts/starter_clothing/", "CombatBrawlerHumanoidFemale", "combat_brawler_humanoid_female", core, object) - elif starterProfession == 'combat_brawler' and raceTemplate == 'object/creature/player/moncal_female.iff': - core.scriptService.callScript("scripts/starter_clothing/", "CombatBrawlerHumanoidFemale", "combat_brawler_humanoid_female", core, object) - elif starterProfession == 'combat_brawler' and raceTemplate == 'object/creature/player/rodian_female.iff': - core.scriptService.callScript("scripts/starter_clothing/", "CombatBrawlerHumanoidFemale", "combat_brawler_humanoid_female", core, object) - - elif starterProfession == 'combat_brawler' and raceTemplate == 'object/creature/player/trandoshan_male.iff': - core.scriptService.callScript("scripts/starter_clothing/", "CombatBrawlerTrandoshanMale", "combat_brawler_trandoshan_male", core, object) - - elif starterProfession == 'combat_brawler' and raceTemplate == 'object/creature/player/trandoshan_female.iff': - core.scriptService.callScript("scripts/starter_clothing/", "CombatBrawlerOutdoorScoutTrandoshanFemale", "combat_brawler_trandoshan_female", core, object) - - elif starterProfession == 'combat_brawler' and raceTemplate == 'object/creature/player/wookiee_male.iff': - core.scriptService.callScript("scripts/starter_clothing/", "CombatBrawlerWookieeMale", "combat_brawler_wookiee_male", core, object) - - elif starterProfession == 'combat_brawler' and raceTemplate == 'object/creature/player/wookiee_female.iff': - core.scriptService.callScript("scripts/starter_clothing/", "CombatBrawlerWookieeFemale", "combat_brawler_wookiee_female", core, object) - - elif starterProfession == 'combat_brawler' and raceTemplate == 'object/creature/player/ithorian_male.iff': - core.scriptService.callScript("scripts/starter_clothing/", "CombatBrawlerIthorianMale", "combat_brawler_ithorian_male", core, object) - - elif starterProfession == 'combat_brawler' and raceTemplate == 'object/creature/player/ithorian_female.iff': - core.scriptService.callScript("scripts/starter_clothing/", "CombatBrawlerIthorianFemale", "combat_brawler_ithorian_female", core, object) - - - elif starterProfession == 'combat_marksman' and raceTemplate == 'object/creature/player/human_male.iff': - core.scriptService.callScript("scripts/starter_clothing/", "CombatMarksmanHumanoidMale", "combat_marksman_humanoid_male", core, object) - elif starterProfession == 'combat_marksman' and raceTemplate == 'object/creature/player/zabrak_male.iff': - core.scriptService.callScript("scripts/starter_clothing/", "CombatMarksmanHumanoidMale", "combat_marksman_humanoid_male", core, object) - elif starterProfession == 'combat_marksman' and raceTemplate == 'object/creature/player/bothan_male.iff': - core.scriptService.callScript("scripts/starter_clothing/", "CombatMarksmanHumanoidMale", "combat_marksman_humanoid_male", core, object) - elif starterProfession == 'combat_marksman' and raceTemplate == 'object/creature/player/sullustan_male.iff': - core.scriptService.callScript("scripts/starter_clothing/", "CombatMarksmanHumanoidMale", "combat_marksman_humanoid_male", core, object) - elif starterProfession == 'combat_marksman' and raceTemplate == 'object/creature/player/twilek_male.iff': - core.scriptService.callScript("scripts/starter_clothing/", "CombatMarksmanHumanoidMale", "combat_marksman_humanoid_male", core, object) - elif starterProfession == 'combat_marksman' and raceTemplate == 'object/creature/player/moncal_male.iff': - core.scriptService.callScript("scripts/starter_clothing/", "CombatMarksmanHumanoidMale", "combat_marksman_humanoid_male", core, object) - elif starterProfession == 'combat_marksman' and raceTemplate == 'object/creature/player/rodian_male.iff': - core.scriptService.callScript("scripts/starter_clothing/", "CombatMarksmanHumanoidMale", "combat_marksman_humanoid_male", core, object) - - elif starterProfession == 'combat_marksman' and raceTemplate == 'object/creature/player/human_female.iff': - core.scriptService.callScript("scripts/starter_clothing/", "CombatMarksmanHumanoidFemale", "combat_marksman_humanoid_female", core, object) - elif starterProfession == 'combat_marksman' and raceTemplate == 'object/creature/player/zabrak_female.iff': - core.scriptService.callScript("scripts/starter_clothing/", "CombatMarksmanHumanoidFemale", "combat_marksman_humanoid_female", core, object) - elif starterProfession == 'combat_marksman' and raceTemplate == 'object/creature/player/bothan_female.iff': - core.scriptService.callScript("scripts/starter_clothing/", "CombatMarksmanHumanoidFemale", "combat_marksman_humanoid_female", core, object) - elif starterProfession == 'combat_marksman' and raceTemplate == 'object/creature/player/sullustan_female.iff': - core.scriptService.callScript("scripts/starter_clothing/", "CombatMarksmanHumanoidFemale", "combat_marksman_humanoid_female", core, object) - elif starterProfession == 'combat_marksman' and raceTemplate == 'object/creature/player/twilek_female.iff': - core.scriptService.callScript("scripts/starter_clothing/", "CombatMarksmanHumanoidFemale", "combat_marksman_humanoid_female", core, object) - elif starterProfession == 'combat_marksman' and raceTemplate == 'object/creature/player/moncal_female.iff': - core.scriptService.callScript("scripts/starter_clothing/", "CombatMarksmanHumanoidFemale", "combat_marksman_humanoid_female", core, object) - elif starterProfession == 'combat_marksman' and raceTemplate == 'object/creature/player/rodian_female.iff': - core.scriptService.callScript("scripts/starter_clothing/", "CombatMarksmanHumanoidFemale", "combat_marksman_humanoid_female", core, object) - - elif starterProfession == 'combat_marksman' and raceTemplate == 'object/creature/player/trandoshan_male.iff': - core.scriptService.callScript("scripts/starter_clothing/", "CombatMarksmanTrandoshanMale", "combat_marksman_trandoshan_male", core, object) - - elif starterProfession == 'combat_marksman' and raceTemplate == 'object/creature/player/trandoshan_female.iff': - core.scriptService.callScript("scripts/starter_clothing/", "CombatMarksmanTrandoshanFemale", "combat_marksman_trandoshan_female", core, object) - - elif starterProfession == 'combat_marksman' and raceTemplate == 'object/creature/player/wookiee_male.iff': - core.scriptService.callScript("scripts/starter_clothing/", "CombatMarksmanWookieeMale", "combat_marksman_wookiee_male", core, object) - - elif starterProfession == 'combat_marksman' and raceTemplate == 'object/creature/player/wookiee_female.iff': - core.scriptService.callScript("scripts/starter_clothing/", "CombatMarksmanWookieeFemale", "combat_marksman_wookiee_female", core, object) - - elif starterProfession == 'combat_marksman' and raceTemplate == 'object/creature/player/ithorian_male.iff': - core.scriptService.callScript("scripts/starter_clothing/", "CombatMarksmanIthorianMale", "combat_marksman_ithorian_male", core, object) - - elif starterProfession == 'combat_marksman' and raceTemplate == 'object/creature/player/ithorian_female.iff': - core.scriptService.callScript("scripts/starter_clothing/", "CombatMarksmanIthorianFemale", "combat_marksman_ithorian_female", core, object) - - elif starterProfession == 'crafting_artisan' and raceTemplate == 'object/creature/player/human_male.iff': - core.scriptService.callScript("scripts/starter_clothing/", "CraftingArtisanHumanoidMale", "crafting_artisan_humanoid_male", core, object) - elif starterProfession == 'crafting_artisan' and raceTemplate == 'object/creature/player/zabrak_male.iff': - core.scriptService.callScript("scripts/starter_clothing/", "CraftingArtisanHumanoidMale", "crafting_artisan_humanoid_male", core, object) - elif starterProfession == 'crafting_artisan' and raceTemplate == 'object/creature/player/bothan_male.iff': - core.scriptService.callScript("scripts/starter_clothing/", "CraftingArtisanHumanoidMale", "crafting_artisan_humanoid_male", core, object) - elif starterProfession == 'crafting_artisan' and raceTemplate == 'object/creature/player/sullustan_male.iff': - core.scriptService.callScript("scripts/starter_clothing/", "CraftingArtisanHumanoidMale", "crafting_artisan_humanoid_male", core, object) - elif starterProfession == 'crafting_artisan' and raceTemplate == 'object/creature/player/twilek_male.iff': - core.scriptService.callScript("scripts/starter_clothing/", "CraftingArtisanHumanoidMale", "crafting_artisan_humanoid_male", core, object) - elif starterProfession == 'crafting_artisan' and raceTemplate == 'object/creature/player/moncal_male.iff': - core.scriptService.callScript("scripts/starter_clothing/", "CraftingArtisanHumanoidMale", "crafting_artisan_humanoid_male", core, object) - elif starterProfession == 'crafting_artisan' and raceTemplate == 'object/creature/player/rodian_male.iff': - core.scriptService.callScript("scripts/starter_clothing/", "CraftingArtisanHumanoidMale", "crafting_artisan_humanoid_male", core, object) - - elif starterProfession == 'crafting_artisan' and raceTemplate == 'object/creature/player/human_female.iff': - core.scriptService.callScript("scripts/starter_clothing/", "CraftingArtisanHumanoidFemale", "crafting_artisan_humanoid_female", core, object) - elif starterProfession == 'crafting_artisan' and raceTemplate == 'object/creature/player/zabrak_female.iff': - core.scriptService.callScript("scripts/starter_clothing/", "CraftingArtisanHumanoidFemale", "crafting_artisan_humanoid_female", core, object) - elif starterProfession == 'crafting_artisan' and raceTemplate == 'object/creature/player/bothan_female.iff': - core.scriptService.callScript("scripts/starter_clothing/", "CraftingArtisanHumanoidFemale", "crafting_artisan_humanoid_female", core, object) - elif starterProfession == 'crafting_artisan' and raceTemplate == 'object/creature/player/sullustan_female.iff': - core.scriptService.callScript("scripts/starter_clothing/", "CraftingArtisanHumanoidFemale", "crafting_artisan_humanoid_female", core, object) - elif starterProfession == 'crafting_artisan' and raceTemplate == 'object/creature/player/twilek_female.iff': - core.scriptService.callScript("scripts/starter_clothing/", "CraftingArtisanTwilekFemale", "crafting_artisan_twilek_female", core, object) - elif starterProfession == 'crafting_artisan' and raceTemplate == 'object/creature/player/moncal_female.iff': - core.scriptService.callScript("scripts/starter_clothing/", "CraftingArtisanHumanoidFemale", "crafting_artisan_humanoid_female", core, object) - elif starterProfession == 'crafting_artisan' and raceTemplate == 'object/creature/player/rodian_female.iff': - core.scriptService.callScript("scripts/starter_clothing/", "CraftingArtisanHumanoidFemale", "crafting_artisan_humanoid_female", core, object) - - elif starterProfession == 'crafting_artisan' and raceTemplate == 'object/creature/player/trandoshan_male.iff': - core.scriptService.callScript("scripts/starter_clothing/", "CraftingArtisanTrandoshanMale", "crafting_artisan_trandoshan_male", core, object) - - elif starterProfession == 'crafting_artisan' and raceTemplate == 'object/creature/player/trandoshan_female.iff': - core.scriptService.callScript("scripts/starter_clothing/", "CraftingArtisanTrandoshanFemale", "crafting_artisan_trandoshan_female", core, object) - - elif starterProfession == 'crafting_artisan' and raceTemplate == 'object/creature/player/wookiee_male.iff': - core.scriptService.callScript("scripts/starter_clothing/", "CraftingArtisanWookieeMale", "crafting_artisan_wookiee_male", core, object) - - elif starterProfession == 'crafting_artisan' and raceTemplate == 'object/creature/player/wookiee_female.iff': - core.scriptService.callScript("scripts/starter_clothing/", "CraftingArtisanWookieeFemale", "crafting_artisan_wookiee_female", core, object) - - elif starterProfession == 'crafting_artisan' and raceTemplate == 'object/creature/player/ithorian_male.iff': - core.scriptService.callScript("scripts/starter_clothing/", "CraftingArtisanIthorianMale", "crafting_artisan_ithorian_male", core, object) - - elif starterProfession == 'crafting_artisan' and raceTemplate == 'object/creature/player/ithorian_female.iff': - core.scriptService.callScript("scripts/starter_clothing/", "CraftingArtisanIthorianFemale", "crafting_artisan_ithorian_female", core, object) - - - elif starterProfession == 'science_medic' and raceTemplate == 'object/creature/player/human_male.iff': - core.scriptService.callScript("scripts/starter_clothing/", "ScienceMedicHumanoidMale", "science_medic_humanoid_male", core, object) - elif starterProfession == 'science_medic' and raceTemplate == 'object/creature/player/zabrak_male.iff': - core.scriptService.callScript("scripts/starter_clothing/", "ScienceMedicHumanoidMale", "science_medic_humanoid_male", core, object) - elif starterProfession == 'science_medic' and raceTemplate == 'object/creature/player/bothan_male.iff': - core.scriptService.callScript("scripts/starter_clothing/", "ScienceMedicHumanoidMale", "science_medic_humanoid_male", core, object) - elif starterProfession == 'science_medic' and raceTemplate == 'object/creature/player/sullustan_male.iff': - core.scriptService.callScript("scripts/starter_clothing/", "ScienceMedicHumanoidMale", "science_medic_humanoid_male", core, object) - elif starterProfession == 'science_medic' and raceTemplate == 'object/creature/player/twilek_male.iff': - core.scriptService.callScript("scripts/starter_clothing/", "ScienceMedicHumanoidMale", "science_medic_humanoid_male", core, object) - elif starterProfession == 'science_medic' and raceTemplate == 'object/creature/player/moncal_male.iff': - core.scriptService.callScript("scripts/starter_clothing/", "ScienceMedicHumanoidMale", "science_medic_humanoid_male", core, object) - elif starterProfession == 'science_medic' and raceTemplate == 'object/creature/player/rodian_male.iff': - core.scriptService.callScript("scripts/starter_clothing/", "ScienceMedicHumanoidMale", "science_medic_humanoid_male", core, object) - - elif starterProfession == 'science_medic' and raceTemplate == 'object/creature/player/human_female.iff': - core.scriptService.callScript("scripts/starter_clothing/", "ScienceMedicHumanoidFemale", "science_medic_humanoid_female", core, object) - elif starterProfession == 'science_medic' and raceTemplate == 'object/creature/player/zabrak_female.iff': - core.scriptService.callScript("scripts/starter_clothing/", "ScienceMedicHumanoidFemale", "science_medic_humanoid_female", core, object) - elif starterProfession == 'science_medic' and raceTemplate == 'object/creature/player/bothan_female.iff': - core.scriptService.callScript("scripts/starter_clothing/", "ScienceMedicHumanoidFemale", "science_medic_humanoid_female", core, object) - elif starterProfession == 'science_medic' and raceTemplate == 'object/creature/player/sullustan_female.iff': - core.scriptService.callScript("scripts/starter_clothing/", "ScienceMedicHumanoidFemale", "science_medic_humanoid_female", core, object) - elif starterProfession == 'science_medic' and raceTemplate == 'object/creature/player/twilek_female.iff': - core.scriptService.callScript("scripts/starter_clothing/", "ScienceMedicHumanoidFemale", "science_medic_humanoid_female", core, object) - elif starterProfession == 'science_medic' and raceTemplate == 'object/creature/player/moncal_female.iff': - core.scriptService.callScript("scripts/starter_clothing/", "ScienceMedicHumanoidFemale", "science_medic_humanoid_female", core, object) - elif starterProfession == 'science_medic' and raceTemplate == 'object/creature/player/rodian_female.iff': - core.scriptService.callScript("scripts/starter_clothing/", "ScienceMedicHumanoidFemale", "science_medic_humanoid_female", core, object) - - elif starterProfession == 'science_medic' and raceTemplate == 'object/creature/player/trandoshan_male.iff': - core.scriptService.callScript("scripts/starter_clothing/", "ScienceMedicTrandoshanMale", "science_medic_trandoshan_male", core, object) - - elif starterProfession == 'science_medic' and raceTemplate == 'object/creature/player/trandoshan_female.iff': - core.scriptService.callScript("scripts/starter_clothing/", "ScienceMedicTrandoshanFemale", "science_medic_trandoshan_female", core, object) - - elif starterProfession == 'science_medic' and raceTemplate == 'object/creature/player/wookiee_male.iff': - core.scriptService.callScript("scripts/starter_clothing/", "ScienceMedicWookieeMale", "science_medic_wookiee_male", core, object) - - elif starterProfession == 'science_medic' and raceTemplate == 'object/creature/player/wookiee_female.iff': - core.scriptService.callScript("scripts/starter_clothing/", "ScienceMedicWookieeFemale", "science_medic_wookiee_female", core, object) - - elif starterProfession == 'science_medic' and raceTemplate == 'object/creature/player/ithorian_male.iff': - core.scriptService.callScript("scripts/starter_clothing/", "ScienceMedicIthorianMale", "science_medic_ithorian_male", core, object) - - elif starterProfession == 'science_medic' and raceTemplate == 'object/creature/player/ithorian_female.iff': - core.scriptService.callScript("scripts/starter_clothing/", "ScienceMedicIthorianFemale", "science_medic_ithorian_female", core, object) - - - - elif starterProfession == 'social_entertainer' and raceTemplate == 'object/creature/player/human_male.iff': - core.scriptService.callScript("scripts/starter_clothing/", "SocialEntertainerHumanoidMale", "social_entertainer_humanoid_male", core, object) - elif starterProfession == 'social_entertainer' and raceTemplate == 'object/creature/player/zabrak_male.iff': - core.scriptService.callScript("scripts/starter_clothing/", "SocialEntertainerHumanoidMale", "social_entertainer_humanoid_male", core, object) - elif starterProfession == 'social_entertainer' and raceTemplate == 'object/creature/player/bothan_male.iff': - core.scriptService.callScript("scripts/starter_clothing/", "SocialEntertainerHumanoidMale", "social_entertainer_humanoid_male", core, object) - elif starterProfession == 'social_entertainer' and raceTemplate == 'object/creature/player/sullustan_male.iff': - core.scriptService.callScript("scripts/starter_clothing/", "SocialEntertainerHumanoidMale", "social_entertainer_humanoid_male", core, object) - elif starterProfession == 'social_entertainer' and raceTemplate == 'object/creature/player/twilek_male.iff': - core.scriptService.callScript("scripts/starter_clothing/", "SocialEntertainerHumanoidMale", "social_entertainer_humanoid_male", core, object) - elif starterProfession == 'social_entertainer' and raceTemplate == 'object/creature/player/moncal_male.iff': - core.scriptService.callScript("scripts/starter_clothing/", "SocialEntertainerHumanoidMale", "social_entertainer_humanoid_male", core, object) - elif starterProfession == 'social_entertainer' and raceTemplate == 'object/creature/player/rodian_male.iff': - core.scriptService.callScript("scripts/starter_clothing/", "SocialEntertainerHumanoidMale", "social_entertainer_humanoid_male", core, object) - - elif starterProfession == 'social_entertainer' and raceTemplate == 'object/creature/player/human_female.iff': - core.scriptService.callScript("scripts/starter_clothing/", "SocialEntertainerHumanoidFemale", "social_entertainer_humanoid_female", core, object) - elif starterProfession == 'social_entertainer' and raceTemplate == 'object/creature/player/zabrak_female.iff': - core.scriptService.callScript("scripts/starter_clothing/", "SocialEntertainerHumanoidFemale", "social_entertainer_humanoid_female", core, object) - elif starterProfession == 'social_entertainer' and raceTemplate == 'object/creature/player/bothan_female.iff': - core.scriptService.callScript("scripts/starter_clothing/", "SocialEntertainerHumanoidFemale", "social_entertainer_humanoid_female", core, object) - elif starterProfession == 'social_entertainer' and raceTemplate == 'object/creature/player/sullustan_female.iff': - core.scriptService.callScript("scripts/starter_clothing/", "SocialEntertainerHumanoidFemale", "social_entertainer_humanoid_female", core, object) - elif starterProfession == 'social_entertainer' and raceTemplate == 'object/creature/player/twilek_female.iff': - core.scriptService.callScript("scripts/starter_clothing/", "SocialEntertainerTwilekFemale", "social_entertainer_twilek_female", core, object) - elif starterProfession == 'social_entertainer' and raceTemplate == 'object/creature/player/moncal_female.iff': - core.scriptService.callScript("scripts/starter_clothing/", "SocialEntertainerHumanoidFemale", "social_entertainer_humanoid_female", core, object) - elif starterProfession == 'social_entertainer' and raceTemplate == 'object/creature/player/rodian_female.iff': - core.scriptService.callScript("scripts/starter_clothing/", "SocialEntertainerHumanoidFemale", "social_entertainer_humanoid_female", core, object) - - elif starterProfession == 'social_entertainer' and raceTemplate == 'object/creature/player/trandoshan_male.iff': - core.scriptService.callScript("scripts/starter_clothing/", "SocialEntertainerTrandoshanMale", "social_entertainer_trandoshan_male", core, object) - - elif starterProfession == 'social_entertainer' and raceTemplate == 'object/creature/player/trandoshan_female.iff': - core.scriptService.callScript("scripts/starter_clothing/", "SocialEntertainerTrandoshanFemale", "social_entertainer_trandoshan_female", core, object) - - elif starterProfession == 'social_entertainer' and raceTemplate == 'object/creature/player/wookiee_male.iff': - core.scriptService.callScript("scripts/starter_clothing/", "SocialEntertainerWookieeMale", "social_entertainer_wookiee_male", core, object) - - elif starterProfession == 'social_entertainer' and raceTemplate == 'object/creature/player/wookiee_female.iff': - core.scriptService.callScript("scripts/starter_clothing/", "SocialEntertainerWookieeFemale", "social_entertainer_wookiee_female", core, object) - - elif starterProfession == 'social_entertainer' and raceTemplate == 'object/creature/player/ithorian_male.iff': - core.scriptService.callScript("scripts/starter_clothing/", "SocialEntertainerIthorianMale", "social_entertainer_ithorian_male", core, object) - - elif starterProfession == 'social_entertainer' and raceTemplate == 'object/creature/player/ithorian_female.iff': - core.scriptService.callScript("scripts/starter_clothing/", "SocialEntertainerIthorianFemale", "social_entertainer_ithorian_female", core, object) - \ No newline at end of file diff --git a/scripts/static_map_locations.py b/scripts/static_map_locations.py index 2222447d..c544a16e 100644 --- a/scripts/static_map_locations.py +++ b/scripts/static_map_locations.py @@ -30,7 +30,11 @@ def addLocations(core, planet): dathomirLocations(core, planet) if planet.getName() == 'lok': - lokLocations(core, planet) + lokLocations(core, planet) + + if planet.getName() == 'kaas': + kaasLocations(core, planet) + def tatooineLocations(core, planet): @@ -44,6 +48,7 @@ def tatooineLocations(core, planet): mapService.addLocation(planet, 'Wayfar', -5124, -6530, 17, 0, 0) mapService.addLocation(planet, 'Mos Eisley', 3528, -4804, 17, 0, 0) mapService.addLocation(planet, 'Anchorhead', 40, -5348, 17, 0, 0) + mapService.addLocation(planet, 'Mos Taike', 3813, 2354, 17, 0, 0) def corelliaLocations(core, planet): @@ -52,11 +57,11 @@ def corelliaLocations(core, planet): # Cities mapService.addLocation(planet, 'Coronet', -178, -4504, 17, 0, 0) - mapService.addLocation(planet, 'Tyrena', -5140, 2450, 17, 0, 0) + mapService.addLocation(planet, 'Tyrena', -5140, -2450, 17, 0, 0) mapService.addLocation(planet, 'Bela Vistal', 6766, -5692, 17, 0, 0) mapService.addLocation(planet, 'Kor Vella', -3420, 3146, 17, 0, 0) mapService.addLocation(planet, 'Doaba Guerfel', 3274, 5582, 17, 0, 0) - mapService.addLocation(planet, 'Vreni Island', -5538, 6176, 17, 0, 0) + mapService.addLocation(planet, 'Vreni Island', -5538, -6176, 17, 0, 0) def nabooLocations(core, planet): @@ -67,7 +72,7 @@ def nabooLocations(core, planet): mapService.addLocation(planet, 'Theed', -5488, 4380, 17, 0, 0) mapService.addLocation(planet, 'Keren', 1888, 2700, 17, 0, 0) mapService.addLocation(planet, 'Moenia', 4836, -4830.5, 17, 0, 0) - mapService.addLocation(planet, 'Deeja Peek', 4686, -1375, 17, 0, 0) + mapService.addLocation(planet, 'Deeja Peak', 4686, -1375, 17, 0, 0) mapService.addLocation(planet, 'Kaadara', 5288, 6687, 17, 0, 0) def roriLocations(core, planet): @@ -78,7 +83,7 @@ def roriLocations(core, planet): mapService.addLocation(planet, 'Narmle', -5140, -2368, 17, 0, 0) mapService.addLocation(planet, 'Restuss', 5318, 5680, 17, 0, 0) - mapService.addLocation(planet, 'Rebel outpost', 3677, -6447, 17, 0, 0) + mapService.addLocation(planet, 'Rebel Outpost', 3677, -6447, 17, 0, 0) def endorLocations(core, planet): @@ -86,7 +91,7 @@ def endorLocations(core, planet): # Cities - mapService.addLocation(planet, 'an outpost', -905, 1584, 17, 0, 0) + mapService.addLocation(planet, 'an Outpost', -905, 1584, 17, 0, 0) def talusLocations(core, planet): @@ -96,7 +101,7 @@ def talusLocations(core, planet): mapService.addLocation(planet, 'Dearic', 422, -3004, 17, 0, 0) mapService.addLocation(planet, 'Nashal', 4163, 5220, 17, 0, 0) - mapService.addLocation(planet, 'Imperial outpost', -2178, 2300, 17, 0, 0) + mapService.addLocation(planet, 'Imperial Outpost', -2178, 2300, 17, 0, 0) def yavin4Locations(core, planet): @@ -113,9 +118,9 @@ def dantooineLocations(core, planet): # Cities - mapService.addLocation(planet, 'Mining outpost', -640, 2486, 17, 0, 0) - mapService.addLocation(planet, 'Pirate outpost', 1588, -6399, 17, 0, 0) - mapService.addLocation(planet, 'Imperial outpost', -4224, -2400, 17, 0, 0) + mapService.addLocation(planet, 'Mining Outpost', -640, 2486, 17, 0, 0) + mapService.addLocation(planet, 'Pirate Outpost', 1588, -6399, 17, 0, 0) + mapService.addLocation(planet, 'Imperial Outpost', -4224, -2400, 17, 0, 0) def dathomirLocations(core, planet): @@ -136,4 +141,13 @@ def lokLocations(core, planet): mapService.addLocation(planet, 'Nym\'s Stronghold', 440, 5029, 17, 0, 0) mapService.addLocation(planet, 'Imperial outpost', -1920, -3084, 17, 0, 0) - \ No newline at end of file +def kaasLocations(core, planet): + mapService = core.mapService + + # Cities + + mapService.addLocation(planet, 'Imperial Outpost', -5118, -2386, 17, 0, 0) + + + + diff --git a/scripts/static_spawns/corellia/bela_vistal.py b/scripts/static_spawns/corellia/bela_vistal.py new file mode 100644 index 00000000..45ea12ee --- /dev/null +++ b/scripts/static_spawns/corellia/bela_vistal.py @@ -0,0 +1,17 @@ + +import sys +from resources.datatables import Options +from resources.datatables import StateStatus + + +def addPlanetSpawns(core, planet): + + stcSvc = core.staticService + objSvc = core.objectService + + #junkdealer + stcSvc.spawnObject('object/mobile/shared_junk_dealer_m_01.iff', 'corellia', long(0), float(6840), float(315), float(-5630), float(0.707), float(-0.707)) + stcSvc.spawnObject('object/mobile/shared_junk_dealer_m_01.iff', 'corellia', long(0), float(6852), float(315), float(-5802), float(0.71), float(-0.71)) + stcSvc.spawnObject('object/mobile/shared_junk_dealer_m_01.iff', 'corellia', long(0), float(6756), float(315), float(-5778), float(0.71), float(0.71)) + stcSvc.spawnObject('object/mobile/shared_junk_dealer_m_01.iff', 'corellia', long(0), float(6970), float(330), float(-5588), float(0.71), float(0.71)) + return diff --git a/scripts/static_spawns/corellia/corellia.py b/scripts/static_spawns/corellia/corellia.py new file mode 100644 index 00000000..0df29b32 --- /dev/null +++ b/scripts/static_spawns/corellia/corellia.py @@ -0,0 +1,13 @@ + +import sys +from resources.datatables import Options +from resources.datatables import StateStatus + + +def addPlanetSpawns(core, planet): +#This Script is no longer to be used for NPC Scripting. - Levarris + + + + + return diff --git a/scripts/static_spawns/corellia/coronet.py b/scripts/static_spawns/corellia/coronet.py new file mode 100644 index 00000000..e7974869 --- /dev/null +++ b/scripts/static_spawns/corellia/coronet.py @@ -0,0 +1,127 @@ +import sys +from resources.datatables import Options +from resources.datatables import StateStatus + +def addPlanetSpawns(core, planet): + + stcSvc = core.staticService + +#-Coronet + ralMundi = stcSvc.spawnObject('object/mobile/shared_dressed_noble_fat_twilek_male_02.iff', 'corellia', long(0), float(-138.975), float(28), float(-4718.86), float(-0.97), float(0.21)) + ralMundi.setCustomName2('Ral Mundi') + ralMundi.setOptionsBitmask(256) + + ioTsomcren = stcSvc.spawnObject('object/mobile/shared_dressed_commoner_naboo_moncal_male_01.iff', 'corellia', long(0), float(-140.701), float(28), float(-4719.16), float(-0.97), float(0.21)) + ioTsomcren.setCustomName2('Io Tsomcren') + ioTsomcren.setOptionsBitmask(256) + + tarthJax = stcSvc.spawnObject('object/mobile/shared_dressed_binayre_pirate_zabrak_male_01.iff', 'corellia', long(0), float(-137.464), float(28), float(-4718.83), float(-0.97), float(0.21)) + tarthJax.setCustomName2('Tarth Jaxx') + tarthJax.setOptionsBitmask(256) + + rebCoord = stcSvc.spawnObject('object/mobile/shared_dressed_rebel_communication_female_01.iff', 'corellia', long(0), float(94.8749), float(28), float(-4519.08), float(-0.97), float(0.21)) + rebCoord.setCustomName2('Rebel Coordinator') + rebCoord.setOptionsBitmask(264) + + huntrJavz = stcSvc.spawnObject('object/mobile/ep3/shared_ep3_rodian_hunter_m.iff', 'corellia', long(0), float(-51.79), float(28), float(-4662.65), float(0.11), float(0.21)) + huntrJavz.setCustomName2('Hunter Javeezo') + huntrJavz.setOptionsBitmask(256) + + dw_heraldRebel = stcSvc.spawnObject('object/mobile/shared_dressed_rebel_general_moncal_male_01.iff', 'corellia', long(0), float(-213.64), float(28), float(-4445.46), float(-0.97), float(0.21)) + dw_heraldRebel.setCustomName2('Lutin Nightstalker') + dw_heraldRebel.setOptionsBitmask(256) + +#---Coronet-CityHall-interrior + brantlee = stcSvc.spawnObject('object/mobile/shared_dressed_brantlee_spondoon.iff', 'corellia', long(1855463), float(-25.7), float(1.3), float(-0.5), float(0.98), float(0.01)) + #brantlee.setCustomName2('Brantlee Spondoon') + #brantlee.setOptionsBitmask(256) + + cor_brawlr00 = stcSvc.spawnObject('object/mobile/shared_dressed_brawler_trainer_01.iff', 'corellia', long(1855463), float(-1.7274), float(7.9), float(-32.175), float(0.5), float(0.01)) + #cor_brawlr00.setCustomName2('a brawler') + + cor_btdiplmt02 = stcSvc.spawnObject('object/mobile/shared_dressed_commoner_naboo_bothan_male_01.iff', 'corellia', long(1855463), float(5.228), float(0.3), float(2.9167), float(-0.47), float(0.21)) + #cor_btdiplmt02.setCustomName2('a Bothan Diplomat') + + cor_btinfobkr00 = stcSvc.spawnObject('object/mobile/shared_dressed_commoner_naboo_bothan_female_02.iff', 'corellia', long(1855463), float(5.228), float(0.3), float(4.016), float(0.99), float(0.01)) + #cor_btinfobkr00.setCustomName2('a Bothan Information Broker') + + cor_btinfobkr01 = stcSvc.spawnObject('object/mobile/shared_dressed_commoner_naboo_bothan_male_02.iff', 'corellia', long(1855463), float(5.345), float(2.278), float(-27.0615), float(-0.14), float(0.22)) + #cor_btinfobkr01.setCustomName2('a Bothan Information Broker') + + cor_ent00 = stcSvc.spawnObject('object/mobile/shared_dressed_twk_entertainer.iff', 'corellia', long(1855463), float(0.767877), float(0.3), float(-2.902), float(-0.50), float(0.11)) + #cor_ent00.setCustomName2('an Entertainer') + + cor_farmer00 = stcSvc.spawnObject('object/mobile/shared_dressed_commoner_naboo_human_male_02.iff', 'corellia', long(1855463), float(-18.6014), float(1.3026), float(-11.314), float(-0.45), float(0.21)) + #cor_farmer00.setCustomName2('a farmer') + + cor_farmer01 = stcSvc.spawnObject('object/mobile/shared_dressed_commoner_naboo_human_female_01.iff', 'corellia', long(1855463), float(0.767877), float(0.3), float(-4.002), float(-0.45), float(0.21)) + #cor_farmer01.setCustomName2('a farmer') + + galluraHanderin = stcSvc.spawnObject('object/mobile/shared_dressed_noble_human_female_02.iff', 'corellia', long(1855463), float(-6.51554), float(1.303), float(9.6562), float(0.1), float(0.01)) + #galluraHanderin.setCustomName2('Gallura Handerin') + #galluraHanderin.setOptionsBitmask(256) + + corsec_agent00 = stcSvc.spawnObject('object/mobile/shared_dressed_corellia_local_corsec_chief.iff', 'corellia', long(1855463), float(-0.332), float(0.3), float(-2.902), float(0.89), float(0.01)) + #corsec_agent00.setCustomName2('a CorSec Agent') + + thaleDustrunner = stcSvc.spawnObject('object/mobile/shared_dressed_criminal_smuggler_human_male_01.iff', 'corellia', long(1855463), float(-0.05), float(3.078), float(-10.9388), float(0.99), float(0.11)) + #thaleDustrunner.setCustomName2('Thale Dustrunner') + #thaleDustrunner.setOptionsBitmask(256) + +#---Coronet-StarPort-interrior + cor_btdiplmt00 = stcSvc.spawnObject('object/mobile/shared_dressed_noble_bothan_female_01.iff', 'corellia', long(1855678), float(56.669), float(-0.521137), float(33.7689), float(0.99), float(0.11)) + #cor_btdiplmt00.setCustomName2('a Bothan Diplomat') + + cor_btdiplmt01 = stcSvc.spawnObject('object/mobile/shared_dressed_noble_bothan_male_01.iff', 'corellia', long(1855672), float(8.651), float(0.6394), float(74.448), float(-0.47), float(0.21)) + #cor_btdiplmt01.setCustomName2('a Bothan Diplomat') + + corsec_cadt00 = stcSvc.spawnObject('object/mobile/shared_dressed_corsec_pilot_human_female_01.iff', 'corellia', long(1855678), float(37.163), float(0.6394), float(40.706), float(0.99), float(0.11)) + #corsec_cadt00.setCustomName2('a CorSec cadet') + + farmer02 = stcSvc.spawnObject('object/mobile/shared_dressed_commoner_naboo_human_male_04.iff', 'corellia', long(1855683), float(-62.767), float(2.6394), float(40.66), float(-0.45), float(0.21)) + #farmer02.setCustomName2('a farmer') + + gambler00 = stcSvc.spawnObject('object/mobile/ep3/shared_ep3_cheated_gambler.iff', 'corellia', long(1855675), float(-4.61669), float(0.6394), float(67.826), float(0.99), float(0.11)) + #gambler00.setCustomName2('a gambler') + + cor_hunter00 = stcSvc.spawnObject('object/mobile/shared_dressed_trader_thug_male_moncal_02.iff', 'corellia', long(1855672), float(8.651), float(0.6394), float(75.548), float(0.99), float(0.11)) + #cor_hunter00.setCustomName2('a hunter') + + jessbConvorr = stcSvc.spawnObject('object/mobile/shared_dressed_corellia_jesseb_convorr.iff', 'corellia', long(1855684), float(50.2), float(1.0), float(20.1), float(-0.47), float(0.21)) + #jessbConvorr.setCustomName2('Jesseb Convorr') + #jessbConvorr.setOptionsBitmask(256) + + cor_merc00 = stcSvc.spawnObject('object/mobile/shared_dressed_mercenary_strong_hum_m.iff', 'corellia', long(1855683), float(-62.767), float(2.6394), float(41.76), float(0.99), float(0.11)) + #cor_merc00.setCustomName2('a mercenary') + + cor_miner00 = stcSvc.spawnObject('object/mobile/shared_dressed_mand_miner_hum_03.iff', 'corellia', long(1855678), float(37.163), float(0.6394), float(39.606), float(-0.47), float(0.21)) + #cor_miner00.setCustomName2('a miner') + + cor_scintst00 = stcSvc.spawnObject('object/mobile/shared_dressed_twi_female_scientist_01.iff', 'corellia', long(1855678), float(56.669), float(-0.521137), float(32.6689), float(-0.47), float(0.21)) + #cor_scintst00.setCustomName2('a Scientist') + + cor_slice00 = stcSvc.spawnObject('object/mobile/shared_dressed_criminal_slicer_human_male_01.iff', 'corellia', long(1855675), float(-4.61669), float(0.6394), float(66.7263), float(-0.5), float(0.21)) + #cor_slice00.setCustomName2('a slicer') + +#-Coronet-Legacy NPCs + stregand = stcSvc.spawnObject('object/mobile/shared_dressed_commoner_tatooine_bith_male_01.iff', 'corellia', long(0), float(-33), float(28), float(-4424), float(0.67), float(0.21)) + stregand.setCustomName2('Stregand') + stregand.setOptionsBitmask(256) + + borgan = stcSvc.spawnObject('object/creature/npc/base/shared_whiphid_base_male.iff', 'corellia', long(0), float(-34.4), float(28), float(-4418.2), float(0.75), float(0.21)) + borgan.setCustomName2('Borgan') + borgan.setOptionsBitmask(256) + + #Lt. Joth - wrong appearance - looking for a bearded guy with BLUE CorSec Jacket + ltJoth = stcSvc.spawnObject('object/mobile/shared_dressed_corellia_cec_officer.iff', 'corellia', long(0), float(-283), float(28), float(-4697), float(0.07), float(0.11)) + ltJoth.setCustomName2('Lieutenant Joth') + ltJoth.setOptionsBitmask(256) + + mackJasper = stcSvc.spawnObject('object/mobile/shared_dressed_corsec_officer_human_male_01.iff', 'corellia', long(0), float(-68.2), float(28), float(-4631.8), float(-0.97), float(0.21)) + mackJasper.setCustomName2('Lieutenant Mack Jasper') + mackJasper.setOptionsBitmask(256) + + #Junkdealer will be added as soon as i can find coords + + + return \ No newline at end of file diff --git a/scripts/static_spawns/corellia/doaba_guerfel.py b/scripts/static_spawns/corellia/doaba_guerfel.py new file mode 100644 index 00000000..bb48cb72 --- /dev/null +++ b/scripts/static_spawns/corellia/doaba_guerfel.py @@ -0,0 +1,12 @@ + +import sys +from resources.datatables import Options +from resources.datatables import StateStatus + + +def addPlanetSpawns(core, planet): + + + #junkdealer will be added as soon as i find coords + + return diff --git a/scripts/static_spawns/corellia/factional_recruiters.py b/scripts/static_spawns/corellia/factional_recruiters.py new file mode 100644 index 00000000..17de611c --- /dev/null +++ b/scripts/static_spawns/corellia/factional_recruiters.py @@ -0,0 +1,27 @@ +import sys +# Project SWG: Imperial Recruiters tatooine: Static Spawns +# (C)2014 ProjectSWG + + + +from resources.datatables import Options +from resources.datatables import State + +def addPlanetSpawns(core, planet): + + stcSvc = core.staticService + objSvc = core.objectService + #recruiter Imp Outpost + + stcSvc.spawnObject('object/mobile/shared_dressed_imperial_officer_m_4.iff', 'corellia', long(0), float(6718), float(315), float(-5809), float(0), float(0), float(0), float(0)) + + #rebrecruiter tyrena + tyrenaCantina = core.objectService.getObject(long(2625352)) + stcSvc.spawnObject('object/mobile/shared_dressed_rebel_recruiter_moncal_male_01.iff', 'corellia', tyrenaCantina.getCellByCellNumber(11), float(-25.8), float(-0.9), float(0.4), float(0), float(-0.707), float(0), float(0.707)) + + #cnet cantina + cnetCantina = core.objectService.getObject(long(8105493)) + stcSvc.spawnObject('object/mobile/shared_dressed_rebel_recruiter_twilek_female_01.iff', 'corellia', cnetCantina.getCellByCellNumber(11), float(-25.8), float(-0.9), float(0.4), float(0), float(-0.707), float(0), float(0.707)) + + + return \ No newline at end of file diff --git a/scripts/static_spawns/corellia/kor_vella.py b/scripts/static_spawns/corellia/kor_vella.py new file mode 100644 index 00000000..bb48cb72 --- /dev/null +++ b/scripts/static_spawns/corellia/kor_vella.py @@ -0,0 +1,12 @@ + +import sys +from resources.datatables import Options +from resources.datatables import StateStatus + + +def addPlanetSpawns(core, planet): + + + #junkdealer will be added as soon as i find coords + + return diff --git a/scripts/static_spawns/corellia/placeholder.txt b/scripts/static_spawns/corellia/placeholder.txt new file mode 100644 index 00000000..e69de29b diff --git a/scripts/static_spawns/corellia/tyrena.py b/scripts/static_spawns/corellia/tyrena.py new file mode 100644 index 00000000..bb48cb72 --- /dev/null +++ b/scripts/static_spawns/corellia/tyrena.py @@ -0,0 +1,12 @@ + +import sys +from resources.datatables import Options +from resources.datatables import StateStatus + + +def addPlanetSpawns(core, planet): + + + #junkdealer will be added as soon as i find coords + + return diff --git a/scripts/static_spawns/dantooine/dantooine.py b/scripts/static_spawns/dantooine/dantooine.py new file mode 100644 index 00000000..ad56f992 --- /dev/null +++ b/scripts/static_spawns/dantooine/dantooine.py @@ -0,0 +1,21 @@ +import sys +from resources.datatables import Options +from resources.datatables import State + +def addPlanetSpawns(core, planet): +######################################################## +# DO NOT ADD ANYTHING ELSE TO THIS SCRIPT, PLEASE USE THE +# SUBFOLDERS FOR EACH PLANET AND CREATE NEW SCRIPTS FOR +# EACH AREA OF A PLANET. - LEVARRIS +######################################################## + stcSvc = core.staticService + # Blue Frog: Uncomment only when needed for testing. + stcSvc.spawnObject('object/tangible/terminal/shared_terminal_character_builder.iff', 'dantooine', long(0), float(4196), float(9), float(5206), float(0.70), float(0.71)) + +######################################################## +# DO NOT ADD ANYTHING ELSE TO THIS SCRIPT, PLEASE USE THE +# SUBFOLDERS FOR EACH PLANET AND CREATE NEW SCRIPTS FOR +# EACH AREA OF A PLANET. - LEVARRIS +######################################################## + return + diff --git a/scripts/static_spawns/dantooine/factional_recruiters.py b/scripts/static_spawns/dantooine/factional_recruiters.py new file mode 100644 index 00000000..22c27df9 --- /dev/null +++ b/scripts/static_spawns/dantooine/factional_recruiters.py @@ -0,0 +1,22 @@ +import sys +# Project SWG: Imperial Recruiters dantooine: Static Spawns +# (C)2014 ProjectSWG + + + +from resources.datatables import Options +from resources.datatables import State + +def addPlanetSpawns(core, planet): + + stcSvc = core.staticService + objSvc = core.objectService + #imprecruiter Imp Outpost + + stcSvc.spawnObject('object/mobile/shared_dressed_imperial_officer_m_6.iff', 'dantooine', long(0), float(-4198), float(3), float(-2411), float(0.819), float(-0.572)) + + #rebrecruiter abandoned base + stcSvc.spawnObject('object/mobile/shared_dressed_rebel_recruiter_moncal_male_01.iff', 'dantooine', long(0), float(-6817), float(46), float(5511), float(0), float(-0.707), float(0), float(0.707)) + + + return \ No newline at end of file diff --git a/scripts/static_spawns/dantooine/force_crystal_hunters_cave.py b/scripts/static_spawns/dantooine/force_crystal_hunters_cave.py new file mode 100644 index 00000000..e2b6b0e1 --- /dev/null +++ b/scripts/static_spawns/dantooine/force_crystal_hunters_cave.py @@ -0,0 +1,30 @@ +from resources.datatables import Options +from resources.datatables import State + +def addPlanetSpawns(core, planet): + + stcSvc = core.staticService + hunter1 = stcSvc.spawnObject('force_sensitive_crypt_crawler', 'dantooine', long(8535484), float(26), float(-41), float(-68), float(2.77), float(1.82)) + hunter2 = stcSvc.spawnObject('untrained_wielder_of_the_dark_side', 'dantooine', long(8535484), float(23), float(-41), float(-65), float(1.52), float(2.94)) + hunter3 = stcSvc.spawnObject('untrained_wielder_of_the_dark_side', 'dantooine', long(8535484), float(47), float(-48), float(-65), float(0.72), float(-0.68)) + hunter4 = stcSvc.spawnObject('untrained_wielder_of_the_dark_side', 'dantooine', long(8535484), float(49.12), float(-47.48), float(-13.41), float(1), float(-0.05)) + hunter5 = stcSvc.spawnObject('dark_force_crystal_hunter', 'dantooine', long(8535485), float(93.10), float(-61.87), float(-14.25), float(-0.7), float(0.7)) + hunter6 = stcSvc.spawnObject('force_sensitive_crypt_crawler', 'dantooine', long(8535485), float(62.2), float(-69.0), float(-37.8), float(0.68), float(0.72)) + hunter7 = stcSvc.spawnObject('dark_force_crystal_hunter', 'dantooine', long(8535484), float(52.14), float(-67.8), float(-42.9), float(0.51), float(0.86)) + hunter8 = stcSvc.spawnObject('force_sensitive_crypt_crawler', 'dantooine', long(8535486), float(84.94), float(-77.09), float(-63.28), float(-0.19), float(0.98)) + hunter9 = stcSvc.spawnObject('force_sensitive_crypt_crawler', 'dantooine', long(8535486), float(65.30), float(-76.16), float(-70.15), float(0.38), float(0.92)) + hunter10 = stcSvc.spawnObject('untrained_wielder_of_the_dark_side', 'dantooine', long(8535486), float(65.636), float(-76.87), float(-81.40), float(-0.123), float(0.99)) + hunter11 = stcSvc.spawnObject('dark_force_crystal_hunter', 'dantooine', long(8535487), float(80.34), float(-77.29), float(-92.77), float(-0.2), float(0.97)) + hunter12 = stcSvc.spawnObject('dark_force_crystal_hunter', 'dantooine', long(8535487), float(80.34), float(-77.29), float(-92.77), float(-0.2), float(0.97)) + objSvc = core.objectService + magSeal1 = objSvc.getObject(200335); #(200336-1) + if magSeal1 != None: + lootPoolNames_1 = ['Junk'] + lootPoolChances_1 = [100] + lootGroupChance_1 = 90 + magSeal1.addToLootGroups(lootPoolNames_1,lootPoolChances_1,lootGroupChance_1) + lotSvc = core.lootService + lotSvc.handleContainer(200335,'Junk','dantooine') + + return + \ No newline at end of file diff --git a/scripts/static_spawns/dantooine/imperial_outpost.py b/scripts/static_spawns/dantooine/imperial_outpost.py new file mode 100644 index 00000000..d19b18d5 --- /dev/null +++ b/scripts/static_spawns/dantooine/imperial_outpost.py @@ -0,0 +1,29 @@ +import sys +from resources.datatables import Options +from resources.datatables import State + +def addPlanetSpawns(core, planet): + stcSvc = core.staticService + objSvc = core.objectService + + stormtrooper1 = stcSvc.spawnObject('eow_fbase_stormtrooper', 'dantooine', long(0), float(-4211), float(3), float(-2384), float(0.011), float(0.999)) + stormtrooper2 = stcSvc.spawnObject('eow_fbase_stormtrooper', 'dantooine', long(0), float(-4212), float(3), float(-2384), float(0.011), float(0.999)) + stormtrooper3 = stcSvc.spawnObject('eow_fbase_stormtrooper', 'dantooine', long(0), float(-4211), float(3), float(-2386), float(0.011), float(0.999)) + stormtrooper4 = stcSvc.spawnObject('eow_fbase_stormtrooper', 'dantooine', long(0), float(-4212), float(3), float(-2386), float(0.011), float(0.999)) + stormtrooper5 = stcSvc.spawnObject('eow_fbase_stormtrooper', 'dantooine', long(0), float(-4212), float(3), float(-2388), float(0.011), float(0.999)) + + stormtrooper6 = stcSvc.spawnObject('eow_fbase_stormtrooper', 'dantooine', long(0), float(-4229), float(3), float(-2394), float(0.703), float(0.710)) + corporal1 = stcSvc.spawnObject('eow_fbase_imperial_corporal', 'dantooine', long(0), float(-4228), float(3), float(-2395), float(0.703), float(0.710)) + corporal2 = stcSvc.spawnObject('eow_fbase_imperial_corporal', 'dantooine', long(0), float(-4230), float(3), float(-2394), float(0.703), float(0.710)) + + atst1 = stcSvc.spawnObject('object/mobile/shared_atst.iff', 'dantooine', long(0), float(-4291), float(3), float(-2433), float(0.819), float(-0.572)) + atst2 = stcSvc.spawnObject('object/mobile/shared_atst.iff', 'dantooine', long(0), float(-4154), float(3), float(-2383), float(0.264), float(0.964)) + + r5u0 = stcSvc.spawnObject('object/creature/npc/droid/shared_r4_base.iff', 'dantooine', long(0), float(-4231), float(3), float(-2363), float(0.264), float(0.964)) + r4h3 = stcSvc.spawnObject('object/creature/npc/droid/shared_r5_base.iff', 'dantooine', long(0), float(-4215), float(3), float(-2363), float(0.264), float(0.964)) + + commoner1 = stcSvc.spawnObject('object/mobile/shared_dressed_commoner_fat_human_male_01.iff', 'dantooine', long(0), float(-4224), float(3), float(-2366), float(0.264), float(0.964)) + commoner1.setOptionsBitmask(256) + commoner2 = stcSvc.spawnObject('object/mobile/shared_dressed_commoner_fat_human_female_01.iff', 'dantooine', long(0), float(-4238), float(3), float(-2365), float(0.264), float(0.964)) + commoner2.setOptionsBitmask(256) + return diff --git a/scripts/static_spawns/dantooine/placeholder.txt b/scripts/static_spawns/dantooine/placeholder.txt new file mode 100644 index 00000000..e69de29b diff --git a/scripts/static_spawns/dathomir/ns_vs_smc_battle.py b/scripts/static_spawns/dathomir/ns_vs_smc_battle.py new file mode 100644 index 00000000..98c3f2cb --- /dev/null +++ b/scripts/static_spawns/dathomir/ns_vs_smc_battle.py @@ -0,0 +1,37 @@ +import sys +from resources.datatables import Options +from resources.datatables import State + +def addPlanetSpawns(core, planet): + stcSvc = core.staticService + objSvc = core.objectService + + Nightsister_Elder_1 = stcSvc.spawnObject('nightsister_elder', 'dathomir', long(0), float(-2520), float(130), float(1468), float(0.0007), float(0.999)) + Nightsister_Spellweaver_1 = stcSvc.spawnObject('nightsister_spell_weaver', 'dathomir', long(0), float(-2497), float(128), float(1484), float(0.0007), float(0.999)) + Nightsister_Spellweaver_2 = stcSvc.spawnObject('nightsister_spell_weaver', 'dathomir', long(0), float(-2539), float(128), float(1484), float(0.0007), float(0.999)) + Nightsister_Rancor_1 = stcSvc.spawnObject('nightsister_rancor', 'dathomir', long(0), float(-2480), float(126), float(1503), float(0.0007), float(0.999)) + Nightsister_RancorTamer_1 = stcSvc.spawnObject('nightsister_rancor_tamer', 'dathomir', long(0), float(-2495), float(122), float(1501), float(0.0007), float(0.999)) + Nightsister_Outcast_1 = stcSvc.spawnObject('nightsister_outcast', 'dathomir', long(0), float(-2480), float(119), float(1519), float(0.0007), float(0.999)) + Nightsister_Initiate_1 = stcSvc.spawnObject('nightsister_initiate', 'dathomir', long(0), float(-2494), float(124), float(1518), float(0.0007), float(0.999)) + Nightsister_Sentinel_1 = stcSvc.spawnObject('nightsister_sentinal', 'dathomir', long(0), float(-2516), float(124), float(1520), float(0.0007), float(0.999)) + Nightsister_Stalker_1 = stcSvc.spawnObject('nightsister_stalker', 'dathomir', long(0), float(-2516), float(128), float(1503), float(0.0007), float(0.999)) + Nightsister_Sentinel_2 = stcSvc.spawnObject('nightsister_sentinal', 'dathomir', long(0), float(-2516), float(124), float(1520), float(0.0007), float(0.999)) + Nightsister_Initiate_1 = stcSvc.spawnObject('nightsister_initiate', 'dathomir', long(0), float(-2540), float(125), float(1521), float(0.0007), float(0.999)) + Nightsister_Outcast_2 = stcSvc.spawnObject('nightsister_outcast', 'dathomir', long(0), float(-2557), float(125), float(1522), float(0.0007), float(0.999)) + Nightsister_Rancor_2 = stcSvc.spawnObject('nightsister_rancor', 'dathomir', long(0), float(-2556), float(125), float(1505), float(0.0007), float(0.999)) + Nightsister_RancorTamer_2 = stcSvc.spawnObject('nightsister_rancor_tamer', 'dathomir', long(0), float(-2540), float(126), float(1504), float(0.0007), float(0.999)) + + SMC_Councilwoman_1 = stcSvc.spawnObject('singing_mtn_clan_councilwoman', 'dathomir', long(0), float(-2520), float(130), float(1598), float(0.999), float(0.002)) + SMC_Archwitch_1 = stcSvc.spawnObject('singing_mtn_clan_arch_witch', 'dathomir', long(0), float(-2543), float(131), float(1585), float(0.999), float(0.002)) + SMC_Archwitch_2 = stcSvc.spawnObject('singing_mtn_clan_arch_witch', 'dathomir', long(0), float(-2498), float(124), float(1585), float(0.999), float(0.002)) + SMC_Dragoon_1 = stcSvc.spawnObject('singing_mtn_clan_dragoon', 'dathomir', long(0), float(-2516), float(123), float(1565), float(0.999), float(0.002)) + SMC_RancorTamer_1 = stcSvc.spawnObject('singing_mtn_clan_rancor_tamer', 'dathomir', long(0), float(-2497), float(121), float(1568), float(0.999), float(0.002)) + SMC_Rancor_1 = stcSvc.spawnObject('singing_mountain_clan_rancor', 'dathomir', long(0), float(-2481), float(119), float(1568), float(0.999), float(0.002)) + SMC_RancorTamer_2 = stcSvc.spawnObject('singing_mtn_clan_rancor_tamer', 'dathomir', long(0), float(-2543), float(128), float(1566), float(0.999), float(0.002)) + SMC_Rancor_2 = stcSvc.spawnObject('singing_mountain_clan_rancor', 'dathomir', long(0), float(-2556), float(130), float(1564), float(0.999), float(0.002)) + SMC_Scout_1 = stcSvc.spawnObject('singing_mtn_clan_scout', 'dathomir', long(0), float(-2481), float(118), float(1547), float(0.999), float(0.002)) + SMC_Initiate_1 = stcSvc.spawnObject('singing_mtn_clan_initiate', 'dathomir', long(0), float(-2497), float(120), float(1547), float(0.999), float(0.002)) + SMC_Sentry_1 = stcSvc.spawnObject('singing_mountain_clan_sentry', 'dathomir', long(0), float(-2515), float(122), float(1547), float(0.999), float(0.002)) + SMC_Initiate_1 = stcSvc.spawnObject('singing_mtn_clan_initiate', 'dathomir', long(0), float(-2543), float(126), float(1547), float(0.999), float(0.002)) + SMC_Scout_1 = stcSvc.spawnObject('singing_mtn_clan_scout', 'dathomir', long(0), float(-2556), float(127), float(1547), float(0.999), float(0.002)) + return diff --git a/scripts/static_spawns/dathomir/placeholder.txt b/scripts/static_spawns/dathomir/placeholder.txt new file mode 100644 index 00000000..e69de29b diff --git a/scripts/static_spawns/endor/placeholder.txt b/scripts/static_spawns/endor/placeholder.txt new file mode 100644 index 00000000..e69de29b diff --git a/scripts/static_spawns/kaas/kaas.py b/scripts/static_spawns/kaas/kaas.py new file mode 100644 index 00000000..9b82905c --- /dev/null +++ b/scripts/static_spawns/kaas/kaas.py @@ -0,0 +1,89 @@ +import sys +# Project SWG: Dromund Kaas: Static Spawns +# (C)2014 ProjectSWG + +# Do not make ANY changes to this script without direct approval from Levarris! + +from resources.datatables import Options +from resources.datatables import State + +def addPlanetSpawns(core, planet): + + + stcSvc = core.staticService + objSvc = core.objectService +#Dark Temple Area + #Structures #TODO: Ascertain why the core is not spawning the child cells. + + #building = stcSvc.spawnObject('object/building/military/shared_military_base_police_station_imperial_lok_otto.iff', 'kaas', long(0), float(-5117.8), float(80.0), float(-2314.1), float(0), float(0)) + #print building.getCells().size() + #stcSvc.spawnObject('object/building/player/shared_player_house_corellia_medium_style_01.iff', 'kaas', long(0), float(-5078.6), float(80.0), float(-2302.5), float(0), float(0)) + #stcSvc.spawnObject('object/building/general/shared_bunker_imperial_weapons_research_facility_01.iff', 'kaas', long(0), float(-5159.5), float(80.0), float(-2298.7), float(0), float(0)) + #stcSvc.spawnObject('object/building/content/aurilia/shared_aurilia_pyramid_hut.iff', 'kaas', long(0), float(-5163.9), float(79.0), float(-2369.6), float(0.71), float(0.71)) + #stcSvc.spawnObject('object/building/content/aurilia/shared_aurilia_pyramid_hut.iff', 'kaas', long(0), float(-5163.9), float(79.0), float(-2351.6), float(0.71), float(0.71)) + #stcSvc.spawnObject('object/building/content/aurilia/shared_aurilia_pyramid_hut.iff', 'kaas', long(0), float(-5072.1), float(79.0), float(-2369.6), float(-0.71), float(0.71)) + #stcSvc.spawnObject('object/building/content/aurilia/shared_aurilia_pyramid_hut.iff', 'kaas', long(0), float(-5072.1), float(79.0), float(-2351.6), float(-0.71), float(0.71)) + #stcSvc.spawnObject('object/building/military/shared_outpost_cloning_facility_s02.iff', 'kaas', long(0), float(-5072.1), float(80.0), float(-2279.5), float(0.71), float(0), float(-0.71), float(0)) + + #Terminals + stcSvc.spawnObject('object/tangible/terminal/shared_terminal_bank.iff', 'kaas', long(0), float(-5080.8), float(80.0), float(-2275.7), float(-0.71), float(0.71)) + stcSvc.spawnObject('object/tangible/terminal/shared_terminal_mission.iff', 'kaas', long(0), float(-5108.7), float(80.0), float(-2289.2), float(0), float(0)) + stcSvc.spawnObject('object/tangible/terminal/shared_terminal_mission.iff', 'kaas', long(0), float(-5127.3), float(80.0), float(-2289.2), float(0), float(0)) + + + #Decor + stcSvc.spawnObject('object/static/vehicle/shared_static_lambda_shuttle.iff', 'kaas', long(0), float(-5078.1), float(80.0), float(-2256.0), float(-0.70), float(0.70)) + stcSvc.spawnObject('object/building/content/aurilia/shared_aurilia_crystal_centerpiece.iff', 'kaas', long(0), float(-5121.5), float(80.0), float(-2360.5), float(0), float(0)) + stcSvc.spawnObject('object/static/structure/tatooine/shared_antenna_tatt_style_1.iff', 'kaas', long(0), float(-5146.7), float(80.0), float(-2301.7), float(0), float(0)) + stcSvc.spawnObject('object/static/installation/shared_mockup_power_generator_fusion_style_1.iff', 'kaas', long(0), float(-5146.7), float(80.0), float(-2301.7), float(0.71), float(0.71)) + stcSvc.spawnObject('object/static/installation/shared_mockup_power_generator_photo_bio_style_1.iff', 'kaas', long(0), float(-5146.9), float(80.0), float(-2294.5), float(0), float(0)) + stcSvc.spawnObject('object/static/vehicle/shared_static_tie_bomber.iff', 'kaas', long(0), float(-5158.5), float(80.5), float(-2232.4), float(0.70), float(0.70)) + stcSvc.spawnObject('object/static/vehicle/shared_static_tie_fighter.iff', 'kaas', long(0), float(-5158.5), float(85.0), float(-2257.4), float(0.70), float(0.70)) + + + #Streetlamps + stcSvc.spawnObject('object/static/structure/general/shared_streetlamp_large_blue_style_01_on.iff', 'kaas', long(0), float(-5109.9), float(80.0), float(-2289.9), float(0), float(0)) + stcSvc.spawnObject('object/static/structure/general/shared_streetlamp_large_blue_style_01_on.iff', 'kaas', long(0), float(-5125.9), float(80.0), float(-2289.9), float(0), float(0)) + stcSvc.spawnObject('object/static/structure/general/shared_streetlamp_large_blue_style_01_on.iff', 'kaas', long(0), float(-5115.0), float(80.0), float(-2346.6), float(0), float(0)) + stcSvc.spawnObject('object/static/structure/general/shared_streetlamp_large_blue_style_01_on.iff', 'kaas', long(0), float(-5120.8), float(80.0), float(-2346.6), float(0), float(0)) + stcSvc.spawnObject('object/static/structure/general/shared_streetlamp_large_blue_style_01_on.iff', 'kaas', long(0), float(-5127.3), float(80.0), float(-2219.0), float(0), float(0)) + stcSvc.spawnObject('object/static/structure/general/shared_streetlamp_large_blue_style_01_on.iff', 'kaas', long(0), float(-5111.2), float(80.0), float(-2219.0), float(0), float(0)) + stcSvc.spawnObject('object/static/structure/general/shared_streetlamp_large_blue_style_01_on.iff', 'kaas', long(0), float(-5162.8), float(80.0), float(-2285.9), float(0), float(0)) + stcSvc.spawnObject('object/static/structure/general/shared_streetlamp_large_blue_style_01_on.iff', 'kaas', long(0), float(-5067.3), float(80.0), float(-2294.9), float(0), float(0)) + stcSvc.spawnObject('object/static/structure/general/shared_streetlamp_large_blue_style_01_on.iff', 'kaas', long(0), float(-5068.6), float(80.0), float(-2228.1), float(0), float(0)) + stcSvc.spawnObject('object/static/structure/general/shared_streetlamp_large_blue_style_01_on.iff', 'kaas', long(0), float(-5078.5), float(80.0), float(-2360.5), float(0), float(0)) + stcSvc.spawnObject('object/static/structure/general/shared_streetlamp_large_blue_style_01_on.iff', 'kaas', long(0), float(-5157.5), float(80.0), float(-2360.5), float(0), float(0)) + + + #Dark Temple Interior + + +#Village of the Descendants Area + #stcSvc.spawnObject('object/building/general/shared_cave_01.iff', 'kaas', long(0), float(3348.1), float(110), float(2562.1), float(0), float(0)) + +#Kaas City Ruins + +#Tomb of Vitiate + +#Northwest Cave + #stcSvc.spawnObject('object/building/general/shared_cave_01.iff', 'kaas', long(0), float(-6135.3), float(185), float(6575.0), float(0), float(0)) + +#Abandoned Separatist Base + #stcSvc.spawnObject('object/building/military/shared_military_base_police_station_rebel_style_01.iff', 'kaas', long(0), float(-3538), float(80), float(6758), float(0), float(0)) + +#Sith Meditation Chamber + #stcSvc.spawnObject('object/building/player/shared_player_house_sith_meditation_room.iff', 'kaas', long(0), float(4766), float(126), float(-7307), float(0), float(0)) + +#Large Ruin + stcSvc.spawnObject('object/static/structure/dantooine/shared_dant_jedi_main_structure.iff', 'kaas', long(0), float(-434), float(77), float(-2252), float(0), float(0)) + +#Central North Ruin + stcSvc.spawnObject('object/static/structure/dantooine/shared_dant_jedi_wall_1.iff', 'kaas', long(0), float(-50), float(77), float(6313), float(0), float(0)) + stcSvc.spawnObject('object/static/structure/dantooine/shared_dant_jedi_wall_2.iff', 'kaas', long(0), float(-58), float(77), float(6304), float(0.71), float(0.71)) + stcSvc.spawnObject('object/static/structure/dantooine/shared_dant_jedi_wall_1.iff', 'kaas', long(0), float(-58), float(77), float(6321), float(-0.71), float(0.71)) + stcSvc.spawnObject('object/static/structure/dantooine/shared_dant_jedi_wall_2.iff', 'kaas', long(0), float(-71), float(77), float(6312), float(0), float(0)) + stcSvc.spawnObject('object/static/structure/dantooine/shared_dant_jedi_temple_pillar.iff', 'kaas', long(0), float(-71.0), float(78), float(6320.8), float(0), float(0)) + stcSvc.spawnObject('object/static/structure/dantooine/shared_dant_jedi_main_structure.iff', 'kaas', long(0), float(-97), float(78), float(6376), float(0), float(0)) + + return + diff --git a/scripts/static_spawns/kaas/placeholder.txt b/scripts/static_spawns/kaas/placeholder.txt new file mode 100644 index 00000000..e69de29b diff --git a/scripts/static_spawns/kashyyyk_main/placeholder.txt b/scripts/static_spawns/kashyyyk_main/placeholder.txt new file mode 100644 index 00000000..e69de29b diff --git a/scripts/static_spawns/lok/factional_recruiters.py b/scripts/static_spawns/lok/factional_recruiters.py new file mode 100644 index 00000000..8a6e3cd3 --- /dev/null +++ b/scripts/static_spawns/lok/factional_recruiters.py @@ -0,0 +1,18 @@ +import sys +# Project SWG: Imperial Recruiters tatooine: Static Spawns +# (C)2014 ProjectSWG + + + +from resources.datatables import Options +from resources.datatables import State + +def addPlanetSpawns(core, planet): + + stcSvc = core.staticService + objSvc = core.objectService + #recruiter Imp Outpost + + stcSvc.spawnObject('object/mobile/shared_dressed_imperial_officer_m_4.iff', 'lok', long(0), float(-1843), float(12), float(-3069), float(0.71), float(0), float(0.70), float(0)) + + return \ No newline at end of file diff --git a/scripts/static_spawns/lok/lok.py b/scripts/static_spawns/lok/lok.py new file mode 100644 index 00000000..658c4a93 --- /dev/null +++ b/scripts/static_spawns/lok/lok.py @@ -0,0 +1,14 @@ + +import sys +from resources.datatables import Options +from resources.datatables import StateStatus + +def addPlanetSpawns(core, planet): +######################################################## +# DO NOT ADD ANYTHING ELSE TO THIS SCRIPT, PLEASE USE THE +# SUBFOLDERS FOR EACH PLANET AND CREATE NEW SCRIPTS FOR +# EACH AREA OF A PLANET. - LEVARRIS +######################################################## + + + return diff --git a/scripts/static_spawns/lok/nyms_stronghold.py b/scripts/static_spawns/lok/nyms_stronghold.py new file mode 100644 index 00000000..c45e284d --- /dev/null +++ b/scripts/static_spawns/lok/nyms_stronghold.py @@ -0,0 +1,18 @@ +import sys +# Project SWG: Imperial Recruiters tatooine: Static Spawns +# (C)2014 ProjectSWG + + + +from resources.datatables import Options +from resources.datatables import State + +def addPlanetSpawns(core, planet): + + stcSvc = core.staticService + objSvc = core.objectService + #recruiter Imp Outpost + + stcSvc.spawnObject('object/mobile/shared_junk_dealer_m_03.iff', 'lok', long(0), float(366), float(9), float(5202), float(0.71), float(0), float(0.70), float(0)) + + return \ No newline at end of file diff --git a/scripts/static_spawns/lok/placeholder.txt b/scripts/static_spawns/lok/placeholder.txt new file mode 100644 index 00000000..e69de29b diff --git a/scripts/static_spawns/mustafar/placeholder.txt b/scripts/static_spawns/mustafar/placeholder.txt new file mode 100644 index 00000000..e69de29b diff --git a/scripts/static_spawns/naboo.py b/scripts/static_spawns/naboo.py deleted file mode 100644 index ac5d19ca..00000000 --- a/scripts/static_spawns/naboo.py +++ /dev/null @@ -1,31 +0,0 @@ -import sys - -def addPlanetSpawns(core, planet): - - stcSvc = core.staticService - - # Travel spawns - - stcSvc.spawnObject('object/tangible/travel/ticket_collector/shared_ticket_collector.iff', 'naboo', long(0), float(-5487.8), float(-149.4), float(-12.5), float(-0.710457), float(0.703739)) # Lake Retreat - stcSvc.spawnObject('object/tangible/travel/ticket_collector/shared_ticket_collector.iff', 'naboo', long(0), float(4717.7), float(4.2), float(-4650.6), float(1), float(0)) # moenia starport - stcSvc.spawnObject('object/tangible/travel/ticket_collector/shared_ticket_collector.iff', 'naboo', long(0), float(4968.6), float(4.4), float(-4883.3), float(0.71), float(-0.71)) # moenia shuttleport - stcSvc.spawnObject('object/tangible/travel/ticket_collector/shared_ticket_collector.iff', 'naboo', long(0), float(5301.1), float(-192), float(6671.5), float(0), float(1)) # kaadara starport - stcSvc.spawnObject('object/tangible/travel/ticket_collector/shared_ticket_collector.iff', 'naboo', long(0), float(5134.3), float(-191.4), float(6617.2), float(-0.373413), float(0.927665)) # kaadara shuttleport - stcSvc.spawnObject('object/tangible/travel/ticket_collector/shared_ticket_collector.iff', 'naboo', long(0), float(1347.8), float(13), float(2760.3), float(0.988256), float(0.152808)) # keren starport - stcSvc.spawnObject('object/tangible/travel/ticket_collector/shared_ticket_collector.iff', 'naboo', long(0), float(1558.3), float(25.6), float(2884.8), float(1), float(0)) # keren shuttleport a - stcSvc.spawnObject('object/tangible/travel/ticket_collector/shared_ticket_collector.iff', 'naboo', long(0), float(2027.7), float(19.6), float(2535.2), float(-0.710457), float(0.703739)) # keren shuttleport b - stcSvc.spawnObject('object/tangible/travel/ticket_collector/shared_ticket_collector.iff', 'naboo', long(0), float(5338.6), float(327.6), float(-1567.2), float(-0.710457), float(0.703739)) # deeja peek shuttleport - - - - stcSvc.spawnObject('object/tangible/terminal/shared_terminal_travel.iff', 'naboo', long(0), float(-5487), float(-149.4), float(-31.8), float(-0.710457), float(0.703739)) # Lake Retreat - stcSvc.spawnObject('object/tangible/terminal/shared_terminal_travel.iff', 'naboo', long(0), float(5121.5), float(-191.4), float(6603.8), float(-0.373413), float(0.927665)) # kaadara shuttleport - stcSvc.spawnObject('object/tangible/terminal/shared_terminal_travel.iff', 'naboo', long(0), float(1577.6), float(25.6), float(2845.1), float(1), float(0)) # keren shuttleport a - stcSvc.spawnObject('object/tangible/terminal/shared_terminal_travel.iff', 'naboo', long(0), float(2028.5), float(19.6), float(2515.6), float(-0.710457), float(0.703739)) # keren shuttleport b - stcSvc.spawnObject('object/tangible/terminal/shared_terminal_travel.iff', 'naboo', long(0), float(5339.3), float(327.6), float(-1586.7), float(-0.710457), float(0.703739)) # deeja peek shuttleport - stcSvc.spawnObject('object/tangible/terminal/shared_terminal_travel.iff', 'naboo', long(0), float(4969.4), float(4.4), float(-4902.6), float(-0.710457), float(0.703739)) # moenia shuttleport - - - - - return \ No newline at end of file diff --git a/scripts/static_spawns/naboo/deeja_peak.py b/scripts/static_spawns/naboo/deeja_peak.py new file mode 100644 index 00000000..6fdf650b --- /dev/null +++ b/scripts/static_spawns/naboo/deeja_peak.py @@ -0,0 +1,15 @@ +import sys +from resources.datatables import Options +from resources.datatables import StateStatus + + +def addPlanetSpawns(core, planet): + + stcSvc = core.staticService + objSvc = core.objectService + + #junkdealer + stcSvc.spawnObject('object/mobile/shared_junk_dealer_m_01.iff', 'naboo', long(0), float(5135), float(346.5), float(-1514), float(0.707), float(0.707)) + + + return diff --git a/scripts/static_spawns/naboo/factional_recruiters.py b/scripts/static_spawns/naboo/factional_recruiters.py new file mode 100644 index 00000000..4be2c940 --- /dev/null +++ b/scripts/static_spawns/naboo/factional_recruiters.py @@ -0,0 +1,24 @@ +import sys +# Project SWG: Imperial Recruiters Naboo: Static Spawns +# (C)2014 ProjectSWG + + + +from resources.datatables import Options +from resources.datatables import State + +def addPlanetSpawns(core, planet): + + stcSvc = core.staticService + objSvc = core.objectService + #recruiter theed + stcSvc.spawnObject('object/mobile/shared_dressed_imperial_officer_m_3.iff', 'naboo', long(0), float(-4927.9), float(6), float(4230.5), float(-0.998), float(0), float(0.06), float(0)) + + #deeja Peek + stcSvc.spawnObject('object/mobile/shared_dressed_imperial_officer_m_5.iff', 'naboo', long(0), float(5307), float(326), float(-1584), float(0), float(0), float(0), float(0)) + + #Rebrecruiter Moenia + stcSvc.spawnObject('object/mobile/shared_dressed_rebel_recruiter_human_female_02.iff', 'naboo', long(0), float(4827), float(4), float(-4697), float(0), float(-0.707), float(0), float(0.707)) + + + return \ No newline at end of file diff --git a/scripts/static_spawns/naboo/kaadara.py b/scripts/static_spawns/naboo/kaadara.py new file mode 100644 index 00000000..bb48cb72 --- /dev/null +++ b/scripts/static_spawns/naboo/kaadara.py @@ -0,0 +1,12 @@ + +import sys +from resources.datatables import Options +from resources.datatables import StateStatus + + +def addPlanetSpawns(core, planet): + + + #junkdealer will be added as soon as i find coords + + return diff --git a/scripts/static_spawns/naboo/keren.py b/scripts/static_spawns/naboo/keren.py new file mode 100644 index 00000000..2c6c6ce0 --- /dev/null +++ b/scripts/static_spawns/naboo/keren.py @@ -0,0 +1,16 @@ +import sys +from resources.datatables import Options +from resources.datatables import StateStatus + + +def addPlanetSpawns(core, planet): + + stcSvc = core.staticService + objSvc = core.objectService + + #junkdealer + stcSvc.spawnObject('object/mobile/shared_junk_dealer_m_01.iff', 'naboo', long(0), float(1242), float(13), float(2732), float(0.707), float(0.707)) + stcSvc.spawnObject('object/mobile/shared_junk_dealer_m_01.iff', 'naboo', long(0), float(1774), float(12.5), float(2625), float(0.707), float(0.707)) + + + return diff --git a/scripts/static_spawns/naboo/moenia.py b/scripts/static_spawns/naboo/moenia.py new file mode 100644 index 00000000..4c63c0fc --- /dev/null +++ b/scripts/static_spawns/naboo/moenia.py @@ -0,0 +1,17 @@ + +import sys +from resources.datatables import Options +from resources.datatables import StateStatus + + +def addPlanetSpawns(core, planet): + + stcSvc = core.staticService + objSvc = core.objectService + + # TODO Check all NPCs for personalized scripting, change format. + + #Junkdealer + stcSvc.spawnObject('object/mobile/shared_junk_dealer_m_03.iff', 'naboo', long(0), float(4318.83), float(5.15), float(-4797.57), float(0), float(1)) + + return diff --git a/scripts/static_spawns/naboo/naboo.py b/scripts/static_spawns/naboo/naboo.py new file mode 100644 index 00000000..7b0f3034 --- /dev/null +++ b/scripts/static_spawns/naboo/naboo.py @@ -0,0 +1,11 @@ +import sys + +def addPlanetSpawns(core, planet): + + stcSvc = core.staticService +######################################################## +# DO NOT ADD ANYTHING ELSE TO THIS SCRIPT, PLEASE USE THE +# SUBFOLDERS FOR EACH PLANET AND CREATE NEW SCRIPTS FOR +# EACH AREA OF A PLANET. - LEVARRIS + + return \ No newline at end of file diff --git a/scripts/static_spawns/naboo/placeholder.txt b/scripts/static_spawns/naboo/placeholder.txt new file mode 100644 index 00000000..e69de29b diff --git a/scripts/static_spawns/naboo/theed.py b/scripts/static_spawns/naboo/theed.py new file mode 100644 index 00000000..292e9649 --- /dev/null +++ b/scripts/static_spawns/naboo/theed.py @@ -0,0 +1,24 @@ +import sys +from resources.datatables import Options +from resources.datatables import StateStatus + + +def addPlanetSpawns(core, planet): + + stcSvc = core.staticService + objSvc = core.objectService + + #junkdealer + stcSvc.spawnObject('object/mobile/shared_junk_dealer_m_01.iff', 'naboo', long(0), float(-5694), float(6.5), float(4182), float(0.707), float(-0.707)) + stcSvc.spawnObject('object/mobile/shared_junk_dealer_m_01.iff', 'naboo', long(0), float(-5717), float(6.5), float(4159), float(0.71), float(0.71)) + stcSvc.spawnObject('object/mobile/shared_junk_dealer_m_01.iff', 'naboo', long(0), float(-5086), float(6), float(4142), float(0.71), float(0.71)) + stcSvc.spawnObject('object/mobile/shared_junk_dealer_m_01.iff', 'naboo', long(0), float(-5147), float(6.5), float(4158), float(0.71), float(0.71)) + stcSvc.spawnObject('object/mobile/shared_junk_dealer_m_01.iff', 'naboo', long(0), float(-5114), float(6.5), float(4161), float(0.71), float(-0.71)) + stcSvc.spawnObject('object/mobile/shared_junk_dealer_m_01.iff', 'naboo', long(0), float(-5222), float(6), float(4217), float(0.71), float(-0.71)) + stcSvc.spawnObject('object/mobile/shared_junk_dealer_m_01.iff', 'naboo', long(0), float(-5127), float(6), float(4239), float(0.71), float(0.71)) + stcSvc.spawnObject('object/mobile/shared_junk_dealer_m_01.iff', 'naboo', long(0), float(-5761), float(6.6), float(4234), float(0.71), float(0.71)) + stcSvc.spawnObject('object/mobile/shared_junk_dealer_m_01.iff', 'naboo', long(0), float(-5475), float(6), float(4105), float(0.71), float(0.71)) + stcSvc.spawnObject('object/mobile/shared_junk_dealer_m_01.iff', 'naboo', long(0), float(-4999), float(6), float(4119), float(0.71), float(0.71)) + stcSvc.spawnObject('object/mobile/shared_junk_dealer_m_01.iff', 'naboo', long(0), float(-5883), float(6), float(4214), float(0.71), float(0.71)) + + return diff --git a/scripts/static_spawns/rori/emperors_hand.py b/scripts/static_spawns/rori/emperors_hand.py new file mode 100644 index 00000000..4d94581f --- /dev/null +++ b/scripts/static_spawns/rori/emperors_hand.py @@ -0,0 +1,15 @@ +import sys +import java.util.Random + +def addPlanetSpawns(core, planet): + + stcSvc = core.staticService + random = java.util.Random() + + mintime = 14400 + maxtime = 25200 + + respawntimer = random.nextInt((maxtime - mintime) + 1800) + + stcSvc.spawnObject('restuss_emperors_hand', 'rori', long(0), float(5283), float(80), float(5746), float(0.641), float(0.767),float(0),float(0), int(respawntimer)) + return \ No newline at end of file diff --git a/scripts/static_spawns/rori.py b/scripts/static_spawns/rori/restuss.py similarity index 96% rename from scripts/static_spawns/rori.py rename to scripts/static_spawns/rori/restuss.py index 0ebd4454..e097f64b 100644 --- a/scripts/static_spawns/rori.py +++ b/scripts/static_spawns/rori/restuss.py @@ -2,17 +2,7 @@ import sys def addPlanetSpawns(core, planet): - stcSvc = core.staticService - - # Travel spawns - - stcSvc.spawnObject('object/tangible/travel/ticket_collector/shared_ticket_collector.iff', 'rori', long(0), float(3672.5), float(96), float(-6411.2), float(0.938551), float(0.345142)) # rebel outpost - stcSvc.spawnObject('object/tangible/travel/ticket_collector/shared_ticket_collector.iff', 'rori', long(0), float(-5381.5), float(80), float(-2162.8), float(1), float(0)) # narmle starport - stcSvc.spawnObject('object/tangible/travel/ticket_collector/shared_ticket_collector.iff', 'rori', long(0), float(-5257.2), float(81.3), float(-2150.3), float(-0.924076), float(0.382209)) # narmle shuttleport - - stcSvc.spawnObject('object/tangible/terminal/shared_terminal_travel.iff', 'rori', long(0), float(-5243), float(81.3), float(-2163.5), float(-0.924076), float(0.382209)) # narmle shuttleport - stcSvc.spawnObject('object/tangible/terminal/shared_terminal_travel.iff', 'rori', long(4505530), float(-3.5), float(0.1), float(-17.5), float(-0.69182), float(0.72207)) # rebel outpost - + stcSvc = core.staticService # Restuss Spawns @@ -379,15 +369,15 @@ def addPlanetSpawns(core, planet): stcSvc.spawnObject('object/static/worldbuilding/structures/shared_mun_nboo_building_chunk_destoyed_10.iff', 'rori', long(0), float(5165.2), float(80), float(5550.01), float(0.24), float(0.971)) stcSvc.spawnObject('object/static/worldbuilding/decal/shared_mun_decal_blast_lg.iff', 'rori', long(0), float(5139.4), float(160), float(5599.26), float(0.349), float(0.937)) stcSvc.spawnObject('object/static/worldbuilding/structures/shared_mun_nboo_building_chunk_destoyed_13.iff', 'rori', long(0), float(5124.02), float(80), float(5682.59), float(0.057), float(0.998)) - stcSvc.spawnObject('object/building/military/shared_outpost_cloning_facility.iff', 'rori', long(0), float(5232.54), float(79.914), float(6176.29), float(0.703), float(0.711)) - stcSvc.spawnObject('object/building/naboo/shared_rori_restuss_starport.iff', 'rori', long(0), float(5281.13), float(80), float(6171.442), float(1), float(-0.001)) - stcSvc.spawnObject('object/building/military/shared_military_base_shed_imperial_style_cantina_s01.iff', 'rori', long(0), float(5284.15), float(80), float(6236.408), float(1), float(-0.001)) - stcSvc.spawnObject('object/building/military/shared_military_base_shed_imperial_style_hospital_01.iff', 'rori', long(0), float(5327.94), float(80), float(6204.451), float(0.877), float(-0.48)) - stcSvc.spawnObject('object/building/military/shared_military_rebel_tactical_center.iff', 'rori', long(0), float(4719.25), float(80), float(5870.46), float(0.707), float(0.707)) - stcSvc.spawnObject('object/building/restuss/shared_restuss_faction_cantina.iff', 'rori', long(0), float(4827.85), float(80), float(5874.45), float(0.703), float(0.711)) - stcSvc.spawnObject('object/building/military/shared_military_rebel_tactical_center.iff', 'rori', long(0), float(4778.08), float(80), float(5905.97), float(1), float(0)) - stcSvc.spawnObject('object/building/military/shared_military_base_shed_rebel_style_01.iff', 'rori', long(0), float(4831.285), float(80), float(5810.192), float(-0.41), float(0.912)) - stcSvc.spawnObject('object/building/military/shared_military_rebel_detachment_hq.iff', 'rori', long(0), float(4777.64), float(80), float(5776.2), float(0), float(1)) + #stcSvc.spawnObject('object/building/military/shared_outpost_cloning_facility.iff', 'rori', long(0), float(5232.54), float(79.914), float(6176.29), float(0.703), float(0.711)) + #stcSvc.spawnObject('object/building/naboo/shared_rori_restuss_starport.iff', 'rori', long(0), float(5281.13), float(80), float(6171.442), float(1), float(-0.001)) + #stcSvc.spawnObject('object/building/military/shared_military_base_shed_imperial_style_cantina_s01.iff', 'rori', long(0), float(5284.15), float(80), float(6236.408), float(1), float(-0.001)) + #stcSvc.spawnObject('object/building/military/shared_military_base_shed_imperial_style_hospital_01.iff', 'rori', long(0), float(5327.94), float(80), float(6204.451), float(0.877), float(-0.48)) + #stcSvc.spawnObject('object/building/military/shared_military_rebel_tactical_center.iff', 'rori', long(0), float(4719.25), float(80), float(5870.46), float(0.707), float(0.707)) + #stcSvc.spawnObject('object/building/restuss/shared_restuss_faction_cantina.iff', 'rori', long(0), float(4827.85), float(80), float(5874.45), float(0.703), float(0.711)) + #stcSvc.spawnObject('object/building/military/shared_military_rebel_tactical_center.iff', 'rori', long(0), float(4778.08), float(80), float(5905.97), float(1), float(0)) + #stcSvc.spawnObject('object/building/military/shared_military_base_shed_rebel_style_01.iff', 'rori', long(0), float(4831.285), float(80), float(5810.192), float(-0.41), float(0.912)) + #stcSvc.spawnObject('object/building/military/shared_military_rebel_detachment_hq.iff', 'rori', long(0), float(4777.64), float(80), float(5776.2), float(0), float(1)) stcSvc.spawnObject('object/static/worldbuilding/decal/shared_mun_decal_blast_lg.iff', 'rori', long(0), float(5254.85), float(160), float(5553.39), float(-0.551), float(0.834)) stcSvc.spawnObject('object/static/worldbuilding/decal/shared_mun_decal_blast_lg.iff', 'rori', long(0), float(5365.02), float(160), float(5577.16), float(-0.574), float(0.819)) stcSvc.spawnObject('object/static/worldbuilding/decal/shared_mun_decal_blast_lg.iff', 'rori', long(0), float(5143.04), float(160), float(5552.77), float(-0.259), float(0.966)) diff --git a/scripts/static_spawns/rori/rori.py b/scripts/static_spawns/rori/rori.py new file mode 100644 index 00000000..ff976d80 --- /dev/null +++ b/scripts/static_spawns/rori/rori.py @@ -0,0 +1,14 @@ +import sys + +def addPlanetSpawns(core, planet): + + stcSvc = core.staticService + +######################################################## +# DO NOT ADD ANYTHING ELSE TO THIS SCRIPT, PLEASE USE THE +# SUBFOLDERS FOR EACH PLANET AND CREATE NEW SCRIPTS FOR +# EACH AREA OF A PLANET. - LEVARRIS +######################################################## + + + return \ No newline at end of file diff --git a/scripts/static_spawns/talus/factional_recruiters.py b/scripts/static_spawns/talus/factional_recruiters.py new file mode 100644 index 00000000..31a1a19c --- /dev/null +++ b/scripts/static_spawns/talus/factional_recruiters.py @@ -0,0 +1,21 @@ +import sys +# Project SWG: Imperial Recruiters talus: Static Spawns +# (C)2014 ProjectSWG + + + +from resources.datatables import Options +from resources.datatables import State + +def addPlanetSpawns(core, planet): + + stcSvc = core.staticService + objSvc = core.objectService + #recruiter Imp Outpost + stcSvc.spawnObject('object/mobile/shared_dressed_imperial_officer_m_6.iff', 'talus', long(0), float(-2192), float(20), float(2269), float(0), float(0), float(0), float(0)) + + #Reb recruiter + dearicCantina = core.objectService.getObject(long(3175388)) + stcSvc.spawnObject('object/mobile/shared_dressed_rebel_recruiter_human_female_02.iff', 'talus', dearicCantina.getCellByCellNumber(11), float(-25.8), float(-0.9), float(-0.7), float(0), float(-0.707), float(0), float(0.707)) + + return \ No newline at end of file diff --git a/scripts/static_spawns/talus/placeholder.txt b/scripts/static_spawns/talus/placeholder.txt new file mode 100644 index 00000000..e69de29b diff --git a/scripts/static_spawns/tatooine.py b/scripts/static_spawns/tatooine.py deleted file mode 100644 index e4c28842..00000000 --- a/scripts/static_spawns/tatooine.py +++ /dev/null @@ -1,36 +0,0 @@ -import sys - -def addPlanetSpawns(core, planet): - - stcSvc = core.staticService - - # Travel spawns - - stcSvc.spawnObject('object/tangible/travel/ticket_collector/shared_ticket_collector.iff', 'tatooine', long(0), float(-1090.8), float(12.6), float(-3554.9), float(-0.67), float(0.74)) # bestine shuttleport - stcSvc.spawnObject('object/tangible/travel/ticket_collector/shared_ticket_collector.iff', 'tatooine', long(0), float(-1382.15), float(12), float(-3583.25), float(1), float(-0.08)) # bestine starport - stcSvc.spawnObject('object/tangible/travel/ticket_collector/shared_ticket_collector.iff', 'tatooine', long(0), float(3427.5), float(5.6), float(-4644.1), float(-0.485545), float(0.874212)) # mos eisley shuttleport - stcSvc.spawnObject('object/tangible/travel/ticket_collector/shared_ticket_collector.iff', 'tatooine', long(0), float(3622), float(5), float(-4788), float(-0.276903063059), float(0.960897982121)) # mos eisley starport - - stcSvc.spawnObject('object/creature/npc/theme_park/shared_player_transport.iff', 'tatooine', long(0), float(3618), float(5), float(-4801), float(0.500574469566), float(0.865693628788)) # mos eisley starport - - stcSvc.spawnObject('object/tangible/travel/ticket_collector/shared_ticket_collector.iff', 'tatooine', long(0), float(-2886.3), float(5.6), float(1929.4), float(-0.113814), float(0.993502)) # mos espa shuttleport a - stcSvc.spawnObject('object/tangible/travel/ticket_collector/shared_ticket_collector.iff', 'tatooine', long(0), float(-3116.3), float(5.6), float(2166.1), float(-0.621933), float(0.783071)) # mos espa shuttleport b - stcSvc.spawnObject('object/tangible/travel/ticket_collector/shared_ticket_collector.iff', 'tatooine', long(0), float(3623.5), float(5.6), float(2178.4), float(-0.123692), float(0.992321)) # mos espa shuttleport c - stcSvc.spawnObject('object/tangible/travel/ticket_collector/shared_ticket_collector.iff', 'tatooine', long(0), float(38.15), float(52.6), float(-5532.2), float(1), float(0)) # anchorhead shuttleport - stcSvc.spawnObject('object/tangible/travel/ticket_collector/shared_ticket_collector.iff', 'tatooine', long(0), float(1241.95), float(7), float(3053.42), float(0.89), float(0.46)) # mos entha starport - stcSvc.spawnObject('object/tangible/travel/ticket_collector/shared_ticket_collector.iff', 'tatooine', long(0), float(1386.12), float(7.6), float(3473.81), float(1), float(0)) # mos entha shuttleport a - stcSvc.spawnObject('object/tangible/travel/ticket_collector/shared_ticket_collector.iff', 'tatooine', long(0), float(1721.5), float(7.6), float(3191.3), float(1), float(0)) # mos entha shuttleport b - stcSvc.spawnObject('object/tangible/travel/ticket_collector/shared_ticket_collector.iff', 'tatooine', long(0), float(-2820.5), float(5), float(2083.71), float(0), float(1)) # mos espa starport - - - stcSvc.spawnObject('object/tangible/terminal/shared_terminal_travel.iff', 'tatooine', long(0), float(-1091.9), float(12.6), float(-3572.7), float(-0.645025), float(0.764162)) # bestine shuttleport - stcSvc.spawnObject('object/tangible/terminal/shared_terminal_travel.iff', 'tatooine', long(0), float(-2903.5), float(5.6), float(1924), float(-0.113814), float(0.993502)) # mos espa shuttleport a - stcSvc.spawnObject('object/tangible/terminal/shared_terminal_travel.iff', 'tatooine', long(0), float(-3124.4), float(5.6), float(2138.1), float(0.621933), float(0.783071)) # mos espa shuttleport b - stcSvc.spawnObject('object/tangible/terminal/shared_terminal_travel.iff', 'tatooine', long(0), float(-2810), float(12.6), float(2173.8), float(-0.123962), float(0.992321)) # mos espa shuttleport c - stcSvc.spawnObject('object/tangible/terminal/shared_terminal_travel.iff', 'tatooine', long(0), float(55.7), float(52.6), float(-5531.4), float(1), float(0)) # anchorhead shuttleport - stcSvc.spawnObject('object/tangible/terminal/shared_terminal_travel.iff', 'tatooine', long(0), float(1403.6), float(7.6), float(3474.4), float(1), float(0)) # mos entha shuttleport a - stcSvc.spawnObject('object/tangible/terminal/shared_terminal_travel.iff', 'tatooine', long(0), float(1739), float(7.6), float(3192.1), float(1), float(0)) # mos entha shuttleport b - stcSvc.spawnObject('object/tangible/terminal/shared_terminal_travel.iff', 'tatooine', long(0), float(3418.4), float(5.6), float(-4659.3), float(-0.485545), float(0.874212)) # mos eisley shuttleport - - return - \ No newline at end of file diff --git a/scripts/static_spawns/tatooine/anchorhead.py b/scripts/static_spawns/tatooine/anchorhead.py new file mode 100644 index 00000000..ff4809f1 --- /dev/null +++ b/scripts/static_spawns/tatooine/anchorhead.py @@ -0,0 +1,52 @@ +import sys +# Project SWG: Anchorhead: Static Spawns +# (C)2014 ProjectSWG + + + +from resources.datatables import Options +from resources.datatables import State + +def addPlanetSpawns(core, planet): + + + stcSvc = core.staticService + objSvc = core.objectService + + # TODO Check all NPCs for personalized scripting, change format. + + # Cantina Interior + borraSetas = stcSvc.spawnObject('object/mobile/shared_dressed_commoner_tatooine_rodian_female_03.iff', 'tatooine', long(1213345), float(9.8), float(0.4), float(-1.2), float(-0.65), float(0.75)) + #borraSetas.setCustomName2('Borra Setas') + #borraSetas.setOptionsBitmask(256) + + # Outside + aaphKoden = stcSvc.spawnObject('object/mobile/shared_dressed_tatooine_aaph_koden.iff', 'tatooine', long(0), float(129), float(5.0), float(-5399), float(-0.67), float(0.73)) + aaphKoden.setCustomName2('Aaph Koden') + aaphKoden.setOptionsBitmask(256) + + Alger = stcSvc.spawnObject('object/mobile/shared_smuggler_fence_alger.iff', 'tatooine', long(0), float(107), float(5.0), float(-5315), float(0.96), float(0.26)) + Alger.setCustomName2('Alger') + Alger.setOptionsBitmask(256) + + carhlaBastra = stcSvc.spawnObject('object/mobile/shared_dressed_legacy_bastra.iff', 'tatooine', long(0), float(128), float(5.0), float(-5428), float(-0.26), float(0.96)) + carhlaBastra.setCustomName2('Carh\'la Bastra') + carhlaBastra.setOptionsBitmask(256) + + cuanTalon = stcSvc.spawnObject('object/mobile/shared_dressed_legacy_cuan.iff', 'tatooine', long(0), float(-161.7), float(65.0), float(-5322.8), float(0), float(0)) + cuanTalon.setCustomName2('Cuan Talon') + cuanTalon.setOptionsBitmask(256) + + dromaOrdo = stcSvc.spawnObject('object/mobile/shared_dressed_anchorjobs_ordo.iff', 'tatooine', long(0), float(110), float(52.0), float(-5431), float(0.36), float(0.93)) + dromaOrdo.setCustomName2('Droma Ordo') + dromaOrdo.setOptionsBitmask(256) + + Sorna = stcSvc.spawnObject('object/mobile/shared_dressed_tatooine_tosche_sorna.iff', 'tatooine', long(0), float(-135), float(52.0), float(-5331), float(0.36), float(0.93)) + Sorna.setCustomName2('Sorna') + Sorna.setOptionsBitmask(256) + + #Junk Dealer + stcSvc.spawnObject('object/mobile/shared_junk_dealer_m_01.iff', 'tatooine', long(0), float(110), float(52), float(-5428), float(0.71), float(0.71)) + + return + diff --git a/scripts/static_spawns/tatooine/ancient_krayt_dragon_skeleton.py b/scripts/static_spawns/tatooine/ancient_krayt_dragon_skeleton.py new file mode 100644 index 00000000..47e9b0b3 --- /dev/null +++ b/scripts/static_spawns/tatooine/ancient_krayt_dragon_skeleton.py @@ -0,0 +1,27 @@ +import sys +# Project SWG: Ancient Krayt Skeleton: Static Spawns +# (C)2014 ProjectSWG + + + +from resources.datatables import Options +from resources.datatables import State + +def addPlanetSpawns(core, planet): + + + stcSvc = core.staticService + objSvc = core.objectService + + # TODO Check all NPCs for personalized scripting, change format. + + stcSvc.spawnObject('canyon_krayt_dragon', 'tatooine', long(0), float(-4528.8), float(28.3), float(-4302.4), float(0), float(0), float(0), float(0), 1800) + stcSvc.spawnObject('juvenile_canyon_krayt_dragon', 'tatooine', long(0), float(-4521.2), float(27.1), float(-4298.1), float(0), float(0), float(0), float(0), 1500) + stcSvc.spawnObject('giant_canyon_krayt_dragon', 'tatooine', long(0), float(-4669.8), float(30.0), float(-4477.7), float(0), float(0), float(0), float(0), 1800) + stcSvc.spawnObject('grand_krayt_dragon', 'tatooine', long(0), float(-4555.0), float(49.2), float(-4459.3), float(0), float(0), float(0), float(0), 1800) + stcSvc.spawnObject('krayt_dragon_ancient', 'tatooine', long(0), float(-4713.3), float(46.5), float(-4288.3), float(0), float(0), float(0), float(0), 1800) + stcSvc.spawnObject('adolescent_krayt_dragon', 'tatooine', long(0), float(-4747.2), float(32.5), float(-4424.6), float(0), float(0), float(0), float(0), 1500) + + + return + diff --git a/scripts/static_spawns/tatooine/bestine.py b/scripts/static_spawns/tatooine/bestine.py new file mode 100644 index 00000000..7a124bd6 --- /dev/null +++ b/scripts/static_spawns/tatooine/bestine.py @@ -0,0 +1,107 @@ +import sys +# Project SWG: Bestine: Static Spawns +# (C)2014 ProjectSWG + + + +from resources.datatables import Options +from resources.datatables import State + +def addPlanetSpawns(core, planet): + + + stcSvc = core.staticService + objSvc = core.objectService + + # TODO Check all NPCs for personalized scripting, change format. + + # City hall + indigoSiyan = stcSvc.spawnObject('object/mobile/shared_dressed_indigo_siyan.iff', 'tatooine', long(926483), float(24.7), float(3.2), float(-30.7), float(-0.06), float(0.99)) + #indigoSiyan.setCustomName2('Indigo Siyan') + #indigoSiyan.setOptionsBitmask(256) + + keanna = stcSvc.spawnObject('object/mobile/shared_dressed_keanna_likyna.iff', 'tatooine', long(926480), float(-18.7), float(3.2), float(20.6), float(-0.97), float(0.2)) + #keanna.setCustomName2('Keanna Li\'kyna') + #keanna.setOptionsBitmask(256) + + oberhaur = stcSvc.spawnObject('object/mobile/shared_space_imperial_tier2_tatooine_oberhaur.iff', 'tatooine', long(926480), float(-21.9), float(3.2), float(26.9), float(0.99), float(0.01)) + #oberhaur.setCustomName2('Commander Oberhaur') + #oberhaur.setOptionsBitmask(256) + + seanTrenwell = stcSvc.spawnObject('object/mobile/shared_dressed_sean_trenwell.iff', 'tatooine', long(926483), float(19.4), float(3.2), float(-36), float(-0.06), float(0.99)) + #seanTrenwell.setCustomName2('Sean Trenwell') + #seanTrenwell.setOptionsBitmask(256) + + talmont = stcSvc.spawnObject('object/mobile/shared_prefect_talmont.iff', 'tatooine', long(926475), float(-1.9), float(3.1), float(-10.3), float(0.99), float(0)) + #talmont.setCustomName2('Prefect Talmont') + #talmont.setOptionsBitmask(256) + + tourAryon = stcSvc.spawnObject('object/mobile/shared_dressed_tatooine_tour_aryon.iff', 'tatooine', long(926479), float(-36.8), float(1.3), float(0.3), float(0.8), float(0.59)) + #tourAryon.setCustomName2('Tour Aryon') + #tourAryon.setOptionsBitmask(256) + + victorVisalis = stcSvc.spawnObject('object/mobile/shared_dressed_victor_visalis.iff', 'tatooine', long(926480), float(-26.7), float(3.2), float(20.8), float(0.96), float(0.24)) + #victorVisalis.setCustomName2('Victor Visalis') + #victorVisalis.setOptionsBitmask(256) + + wilhalmSkrim = stcSvc.spawnObject('object/mobile/shared_dressed_tatooine_wilhalm_skrim.iff', 'tatooine', long(926482), float(28.9), float(1.3), float(-6.0), float(0.23), float(0.97)) + #wilhalmSkrim.setCustomName2('Wilhalm Skrim') + #wilhalmSkrim.setOptionsBitmask(256) + + + #Miscellaneous Building Interiors + akalColzet = stcSvc.spawnObject('object/mobile/shared_dressed_imperial_trainer_space_01.iff', 'tatooine', long(1212359), float(0.7), float(1.8), float(-14), float(0), float(0.99)) + #akalColzet.setCustomName2('lt. Akal Colzet') + #akalColzet.setOptionsBitmask(256) + + fariousGletch = stcSvc.spawnObject('object/mobile/shared_dressed_tatooine_farious_gletch.iff', 'tatooine', long(1278989), float(2.0), float(-0.4), float(-5.7), float(-0.15), float(0.98)) + #fariousGletch.setCustomName2('Farious Gletch') + #fariousGletch.setOptionsBitmask(256) + + pfilbeeJhorn = stcSvc.spawnObject('object/mobile/shared_dressed_tatooine_pfilbee_jhorn.iff', 'tatooine', long(1279923), float(5.1), float(0.1), float(-3.8), float(-0.7), float(0.71)) + #pfilbeeJhorn.setCustomName2('Pfilbee Jhorn') + #pfilbeeJhorn.setOptionsBitmask(256) + + #Hotel interior + gilBurtin = stcSvc.spawnObject('object/mobile/shared_dressed_industrialist_trainer_01.iff', 'tatooine', long(1223850), float(20.3), float(1.6), float(12.8), float(0.99), float(0)) + #gilBurtin.setCustomName2('Gil Burtin') + #gilBurtin.setOptionsBitmask(256) + + # Outside + barak = stcSvc.spawnObject('object/mobile/shared_smuggler_broker_barak.iff', 'tatooine', long(0), float(-1049), float(5.0), float(-3537), float(0.97), float(0.23)) + #barak.setCustomName2('Barak') + #barak.setOptionsBitmask(256) + + barrezz = stcSvc.spawnObject('object/mobile/shared_dressed_dressed_legacy_barrezz.iff', 'tatooine', long(0), float(-1146.8), float(98.0), float(-3892.1), float(0.75), float(0.65)) + #barrezz.setCustomName2('Commander Barrezz') + #barrezz.setOptionsBitmask(256) + + jasha = stcSvc.spawnObject('object/mobile/shared_dressed_bestinejobs_jasha.iff', 'tatooine', long(0), float(-1128), float(98.0), float(-3900), float(-0.42), float(0.90)) + #jasha.setCustomName2('Captain Jasha') + #jasha.setOptionsBitmask(256) + + dkrn = stcSvc.spawnObject('object/mobile/shared_dressed_imperial_general_m.iff', 'tatooine', long(0), float(-1160), float(5.0), float(-3525), float(0.90), float(-0.41)) + #dkrn.setCustomName2('Commander D\'krn') + #dkrn.setOptionsBitmask(256) + + gunham = stcSvc.spawnObject('object/mobile/shared_dressed_imperial_lieutenant_m.iff', 'tatooine', long(0), float(-1125), float(12.2), float(-3620), float(0.9), float(0.42)) + #gunham.setCustomName2('Commander Gunham') + #gunham.setOptionsBitmask(256) + + kormundThrylle = stcSvc.spawnObject('object/mobile/shared_dressed_tatooine_kormund_thrylle.iff', 'tatooine', long(0), float(-1043), float(10.0), float(-3530), float(0.99), float(0.06)) + #kormundThrylle.setCustomName2('Kormund Thrylle') + #kormundThrylle.setOptionsBitmask(256) + + calebKnolar = stcSvc.spawnObject('object/mobile/shared_dressed_imperial_major_cold_m.iff', 'tatooine', long(0), float(-1149), float(98.0), float(-3903), float(0.42), float(0.91)) + #calebKnolar.setCustomName2('Major Caleb Knolar') + #calebKnolar.setOptionsBitmask(256) + + #Junk Dealers + stcSvc.spawnObject('object/mobile/shared_junk_dealer_m_01.iff', 'tatooine', long(0), float(-1287), float(12), float(-3655), float(0.71), float(0.71)) + stcSvc.spawnObject('object/mobile/shared_junk_dealer_m_01.iff', 'tatooine', long(0), float(-1259), float(12), float(-3673), float(0.71), float(-0.71)) + stcSvc.spawnObject('object/mobile/shared_junk_dealer_m_01.iff', 'tatooine', long(0), float(-1026), float(10), float(-3557), float(0), float(0)) + stcSvc.spawnObject('object/mobile/shared_junk_dealer_m_01.iff', 'tatooine', long(0), float(-1260), float(12), float(-3573), float(0), float(1)) + stcSvc.spawnObject('object/mobile/shared_junk_dealer_m_01.iff', 'tatooine', long(0), float(-1126), float(12), float(-3674), float(0.71), float(-0.71)) + stcSvc.spawnObject('object/mobile/shared_junk_dealer_m_01.iff', 'tatooine', long(0), float(-1118), float(12), float(-3687), float(0), float(0)) + return + diff --git a/scripts/static_spawns/tatooine/factional_recruiters.py b/scripts/static_spawns/tatooine/factional_recruiters.py new file mode 100644 index 00000000..6f9b4137 --- /dev/null +++ b/scripts/static_spawns/tatooine/factional_recruiters.py @@ -0,0 +1,30 @@ +import sys +# Project SWG: Factional Recruiters tatooine: Static Spawns +# (C)2014 ProjectSWG + + + +from resources.datatables import Options +from resources.datatables import State + +def addPlanetSpawns(core, planet): + + stcSvc = core.staticService + objSvc = core.objectService + #Imp recruiter Eisley + smallImpHouse = core.objectService.getObject(long(1280129)) + stcSvc.spawnObject('object/mobile/shared_dressed_imperial_officer_f.iff', 'tatooine', smallImpHouse.getCellByCellNumber(3), float(-6), float(1), float(9.2), float(0.71), float(0), float(0.70), float(0)) + + #Imp recruiter Bestine + #Hill + stcSvc.spawnObject('object/mobile/shared_dressed_imperial_officer_m_5.iff', 'tatooine', long(0), float(-1138), float(98), float(-3897), float(0.71), float(0), float(0.70), float(0)) + #outside SP + stcSvc.spawnObject('object/mobile/shared_dressed_imperial_officer_m_3.iff', 'tatooine', long(0), float(-1275), float(12), float(-3594), float(0), float(0), float(0), float(0)) + + # Reb Recruiter + + #Anchorhead cantina + anchCantina = core.objectService.getObject(long(1213343)) + stcSvc.spawnObject('object/mobile/shared_dressed_rebel_recruiter_human_female_01.iff', 'tatooine', anchCantina.getCellByCellNumber(2), float(-2.2), float(0.4), float(-5.4), float(0), float(0), float(0), float(0)) + + return \ No newline at end of file diff --git a/scripts/static_spawns/tatooine/jabbas_palace.py b/scripts/static_spawns/tatooine/jabbas_palace.py new file mode 100644 index 00000000..bff5a8aa --- /dev/null +++ b/scripts/static_spawns/tatooine/jabbas_palace.py @@ -0,0 +1,76 @@ +import sys +# Project SWG: Jabba's Palace: Static Spawns +# (C)2014 ProjectSWG + + + +from resources.datatables import Options +from resources.datatables import State + +def addPlanetSpawns(core, planet): + + + stcSvc = core.staticService + objSvc = core.objectService + + building = core.objectService.getObject(long(-466404040703346823)) + + #reelo baruk + stcSvc.spawnObject('object/mobile/shared_reelo_baruk.iff', 'tatooine', building.getCellByCellNumber(1), float(-3.5), float(0.2), float(113.5), float(0), float(0), float(0), float(0)) + + #Entry Ambient Sounds #TODO: Fix object/soundobject spawning + #stcSvc.spawnObject('object/soundobject/shared_soundobject_jabba_palace_entrance.iff', 'tatooine', building.getCellByCellNumber(1), float(-3.5), float(0.2), float(113.5), float(0), float(0), float(0), float(0)) + + #ree yees + stcSvc.spawnObject('object/mobile/shared_dressed_gran_thug_male_01.iff', 'tatooine', building.getCellByCellNumber(1), float(5.8), float(0.2), float(115.7), float(-0.71), float(0), float(0.7), float(0)) + + #ephantmon + stcSvc.spawnObject('object/mobile/shared_ephant_mon.iff', 'tatooine', building.getCellByCellNumber(4), float(-6.1), float(5.8), float(86.1), float(0), float(0), float(0), float(0)) + + #porcellus + stcSvc.spawnObject('object/mobile/shared_dressed_porcellus.iff', 'tatooine', building.getCellByCellNumber(12), float(-44.0), float(3.0), float(63.4), float(0), float(0), float(0), float(0)) + + #barada + stcSvc.spawnObject('object/mobile/shared_barada.iff', 'tatooine', building.getCellByCellNumber(34), float(31.2), float(0.2), float(-1.0), float(-0.17), float(0), float(0.98), float(0)) + + #Bib Fortuna + stcSvc.spawnObject('object/mobile/shared_bib_fortuna.iff', 'tatooine', building.getCellByCellNumber(22), float(-11.1), float(2.0), float(49.5), float(0.71), float(0), float(0.70), float(0)) + + #Jabba + stcSvc.spawnObject('object/mobile/shared_jabba_the_hutt.iff', 'tatooine', building.getCellByCellNumber(22), float(-17.0), float(2.8), float(44.9), float(0.71), float(0), float(0.70), float(0)) + + #oola + stcSvc.spawnObject('object/mobile/shared_oola.iff', 'tatooine', building.getCellByCellNumber(22), float(-10.3), float(2.0), float(43.9), float(-0.71), float(0), float(0.70), float(0)) + + #Ambient Sound + #stcSvc.spawnObject('object/soundobject/shared_soundobject_jabba_audience_chamber.iff', 'tatooine', building.getCellByCellNumber(22), float(-10.3), float(2.0), float(43.9), float(-0.9), float(0), float(0.42), float(0)) + + #Boba Fett + stcSvc.spawnObject('object/mobile/shared_boba_fett.iff', 'tatooine', building.getCellByCellNumber(22), float(-1.0), float(3.0), float(33.1), float(0), float(0), float(0), float(0)) + + #EV9D9 + stcSvc.spawnObject('object/mobile/shared_ev_9d9.iff', 'tatooine', building.getCellByCellNumber(14), float(18.8), float(0.2), float(78.7), float(0), float(0), float(1.0), float(0)) + + #malakili + stcSvc.spawnObject('object/mobile/shared_malakili.iff', 'tatooine', building.getCellByCellNumber(37), float(17.3), float(-11.0), float(43.8), float(0), float(0), float(0), float(0)) + + #Jabba Rancor + stcSvc.spawnObject('object/mobile/shared_rancor_static.iff', 'tatooine', building.getCellByCellNumber(38), float(0), float(-11.0), float(43.8), float(-0.9), float(0), float(0.42), float(0)) + + #Max Rebo + stcSvc.spawnObject('object/mobile/shared_max_rebo.iff', 'tatooine', building.getCellByCellNumber(22), float(-1.4), float(3.0), float(26.9), float(-0.9), float(0), float(0.42), float(0)) + + #Music + #stcSvc.spawnObject('object/soundobject/shared_soundobject_jabba_max_rebo_band.iff', 'tatooine', building.getCellByCellNumber(22), float(-1.4), float(3.0), float(26.9), float(-0.9), float(0), float(0.42), float(0)) + + #Droopy Mccool + stcSvc.spawnObject('object/mobile/shared_droopy_mccool.iff', 'tatooine', building.getCellByCellNumber(22), float(-3.9), float(3.0), float(26.1), float(-0.9), float(0), float(0.42), float(0)) + + #Sy Snootles + stcSvc.spawnObject('object/mobile/shared_sy_snootles.iff', 'tatooine', building.getCellByCellNumber(22), float(-1.4), float(3.0), float(29.8), float(-0.1), float(0), float(0.42), float(0)) + + # G5P0 + stcSvc.spawnObject('object/mobile/shared_3po_protocol_droid_red.iff', 'tatooine', building.getCellByCellNumber(22), float(-14.3), float(2.0), float(47.4), float(0.71), float(0), float(0.70), float(0)) + + return + diff --git a/scripts/static_spawns/tatooine/jawa_sandcrawler_legacy.py b/scripts/static_spawns/tatooine/jawa_sandcrawler_legacy.py new file mode 100644 index 00000000..4a4d0c61 --- /dev/null +++ b/scripts/static_spawns/tatooine/jawa_sandcrawler_legacy.py @@ -0,0 +1,25 @@ +import sys +# Project SWG: Jawa Sandcrawler - Legacy Quest Area: Static Spawns +# (C)2014 ProjectSWG + + + +from resources.datatables import Options +from resources.datatables import State + +def addPlanetSpawns(core, planet): + + + stcSvc = core.staticService + objSvc = core.objectService + + # TODO Check all NPCs for personalized scripting, change format. + + #Outside + fa2po = stcSvc.spawnObject('object/mobile/shared_3po_protocol_droid.iff', 'tatooine', long(0), float(-3805.7), float(30.4), float(-4721.6), float(0), float(0)) + fa2po.setCustomName2('FA-2PO') + fa2po.setOptionsBitmask(256) + + + return + diff --git a/scripts/static_spawns/tatooine/krayt_dragon_skeleton.py b/scripts/static_spawns/tatooine/krayt_dragon_skeleton.py new file mode 100644 index 00000000..c0aea5fd --- /dev/null +++ b/scripts/static_spawns/tatooine/krayt_dragon_skeleton.py @@ -0,0 +1,31 @@ +import sys +# Project SWG: Krayt Skeleton: Static Spawns +# (C)2014 ProjectSWG + + + +from resources.datatables import Options +from resources.datatables import State + +def addPlanetSpawns(core, planet): + + + stcSvc = core.staticService + objSvc = core.objectService + + # TODO Check all NPCs for personalized scripting, change format. + + # -6205, 5054 + stcSvc.spawnObject('canyon_krayt_dragon', 'tatooine', long(0), float(-6216.0), float(30.8), float(5033.9), float(0), float(0), float(0), float(0), 1800) + stcSvc.spawnObject('juvenile_canyon_krayt_dragon', 'tatooine', long(0), float(-6213.8), float(31.1), float(5021.3), float(0), float(0), float(0), float(0), 1500) + + # giant canyon krayt + stcSvc.spawnObject('giant_canyon_krayt_dragon', 'tatooine', long(0), float(5728.5), float(56.6), float(3784.7), float(0), float(0), float(0), float(0), 1800) + + # -6750, 3569 + stcSvc.spawnObject('grand_krayt_dragon', 'tatooine', long(0), float(-6718.3), float(175.6), float(3499.6), float(0), float(0), float(0), float(0), 1800) + stcSvc.spawnObject('grand_krayt_dragon', 'tatooine', long(0), float(-6796.1), float(194.0), float(3514.6), float(0), float(0), float(0), float(0), 1800) + stcSvc.spawnObject('adolescent_krayt_dragon', 'tatooine', long(0), float(-6789.0), float(127.7), float(3661.2), float(0), float(0), float(0), float(0), 1500) + + return + diff --git a/scripts/static_spawns/tatooine/krayt_graveyard.py b/scripts/static_spawns/tatooine/krayt_graveyard.py new file mode 100644 index 00000000..04e5a6d4 --- /dev/null +++ b/scripts/static_spawns/tatooine/krayt_graveyard.py @@ -0,0 +1,59 @@ +import sys +# Project SWG: Krayt Graveyard: Static Spawns +# (C)2014 ProjectSWG + + + +from resources.datatables import Options +from resources.datatables import State + +def addPlanetSpawns(core, planet): + + + stcSvc = core.staticService + objSvc = core.objectService + + # TODO Check all NPCs for personalized scripting, change format. + + # Canyons, 1 canyon will always spawn together with 1 juveline + stcSvc.spawnObject('canyon_krayt_dragon', 'tatooine', long(0), float(7227.5), float(33.2), float(4495.8), float(0), float(0), float(0), float(0), 1800) + stcSvc.spawnObject('canyon_krayt_dragon', 'tatooine', long(0), float(7178), float(24.5), float(4429.8), float(0), float(0), float(0), float(0), 1800) + stcSvc.spawnObject('canyon_krayt_dragon', 'tatooine', long(0), float(7035.5), float(22.8), float(4337.3), float(0), float(0), float(0), float(0), 1800) + stcSvc.spawnObject('canyon_krayt_dragon', 'tatooine', long(0), float(6872.9), float(41.7), float(4246.8), float(0), float(0), float(0), float(0), 1800) + stcSvc.spawnObject('canyon_krayt_dragon', 'tatooine', long(0), float(6564.1), float(87.7), float(4484.8), float(0), float(0), float(0), float(0), 1800) + stcSvc.spawnObject('canyon_krayt_dragon', 'tatooine', long(0), float(7523.5), float(4.5), float(4655.5), float(0), float(0), float(0), float(0), 1800) + + stcSvc.spawnObject('juvenile_canyon_krayt_dragon', 'tatooine', long(0), float(7233.2), float(30.1), float(4487.1), float(0), float(0), float(0), float(0), 1500) + stcSvc.spawnObject('juvenile_canyon_krayt_dragon', 'tatooine', long(0), float(7172.2), float(22.5), float(4441.1), float(0), float(0), float(0), float(0), 1500) + stcSvc.spawnObject('juvenile_canyon_krayt_dragon', 'tatooine', long(0), float(7043.2), float(22.1), float(4344.1), float(0), float(0), float(0), float(0), 1500) + stcSvc.spawnObject('juvenile_canyon_krayt_dragon', 'tatooine', long(0), float(6877.8), float(45.5), float(4237.0), float(0), float(0), float(0), float(0), 1500) + stcSvc.spawnObject('juvenile_canyon_krayt_dragon', 'tatooine', long(0), float(6575.9), float(92.5), float(4487.7), float(0), float(0), float(0), float(0), 1500) + stcSvc.spawnObject('juvenile_canyon_krayt_dragon', 'tatooine', long(0), float(7513.2), float(4.1), float(4656.1), float(0), float(0), float(0), float(0), 1500) + + # giant canyon + + stcSvc.spawnObject('giant_canyon_krayt_dragon', 'tatooine', long(0), float(7515.5), float(8.5), float(4556.5), float(0), float(0), float(0), float(0), 1800) + stcSvc.spawnObject('giant_canyon_krayt_dragon', 'tatooine', long(0), float(7417.5), float(7.7), float(4597.5), float(0), float(0), float(0), float(0), 1800) + stcSvc.spawnObject('giant_canyon_krayt_dragon', 'tatooine', long(0), float(7300.0), float(23.3), float(4462.0), float(0), float(0), float(0), float(0), 1800) + stcSvc.spawnObject('giant_canyon_krayt_dragon', 'tatooine', long(0), float(7140.5), float(57.0), float(4322.5), float(0), float(0), float(0), float(0), 1800) + + # grand + + stcSvc.spawnObject('grand_krayt_dragon', 'tatooine', long(0), float(7555.5), float(15.2), float(4488.8), float(0), float(0), float(0), float(0), 1800) + stcSvc.spawnObject('grand_krayt_dragon', 'tatooine', long(0), float(7429.9), float(7.2), float(4477.3), float(0), float(0), float(0), float(0), 1800) + + # ancient + + stcSvc.spawnObject('krayt_dragon_ancient', 'tatooine', long(0), float(6836.5), float(25.2), float(4321.8), float(0), float(0), float(0), float(0), 1800) + stcSvc.spawnObject('krayt_dragon_ancient', 'tatooine', long(0), float(7491.3), float(8.2), float(4484.8), float(0), float(0), float(0), float(0), 1800) + + # adolescent + stcSvc.spawnObject('adolescent_krayt_dragon', 'tatooine', long(0), float(7525.1), float(28.2), float(4387.5), float(0), float(0), float(0), float(0), 1500) + stcSvc.spawnObject('adolescent_krayt_dragon', 'tatooine', long(0), float(7269.8), float(62.4), float(4352.8), float(0), float(0), float(0), float(0), 1500) + stcSvc.spawnObject('adolescent_krayt_dragon', 'tatooine', long(0), float(7077.5), float(20.0), float(4447.3), float(0), float(0), float(0), float(0), 1500) + stcSvc.spawnObject('adolescent_krayt_dragon', 'tatooine', long(0), float(7003.0), float(86.2), float(4200.4), float(0), float(0), float(0), float(0), 1500) + stcSvc.spawnObject('adolescent_krayt_dragon', 'tatooine', long(0), float(6726.8), float(19.5), float(4288.6), float(0), float(0), float(0), float(0), 1500) + + + return + diff --git a/scripts/static_spawns/tatooine/lars_homestead.py b/scripts/static_spawns/tatooine/lars_homestead.py new file mode 100644 index 00000000..90877ca9 --- /dev/null +++ b/scripts/static_spawns/tatooine/lars_homestead.py @@ -0,0 +1,25 @@ +import sys +# Project SWG: Lars Homestead: Static Spawns +# (C)2014 ProjectSWG + + + +from resources.datatables import Options +from resources.datatables import State + +def addPlanetSpawns(core, planet): + + + stcSvc = core.staticService + objSvc = core.objectService + + # TODO Check all NPCs for personalized scripting, change format. + + #Outside + zefAndo = stcSvc.spawnObject('object/mobile/shared_dressed_legacy_zef.iff', 'tatooine', long(0), float(-2574.9), float(0), float(-5516.7), float(0), float(0)) + zefAndo.setCustomName2('Zef Ando') + zefAndo.setOptionsBitmask(256) + + + return + diff --git a/scripts/static_spawns/tatooine/mos_eisley.py b/scripts/static_spawns/tatooine/mos_eisley.py new file mode 100644 index 00000000..90c02333 --- /dev/null +++ b/scripts/static_spawns/tatooine/mos_eisley.py @@ -0,0 +1,342 @@ +import sys +# Project SWG: Mos Eisley: Static Spawns +# (C)2014 ProjectSWG + + + +from resources.datatables import Options +from resources.datatables import State +from resources.datatables import StateStatus + +def addPlanetSpawns(core, planet): + + + stcSvc = core.staticService + objSvc = core.objectService + + # TODO: Add NPCs sitting at Cantina tables with SittingOnChair bitmask. + + #Cantina Interior + building = core.objectService.getObject(long(1082874)) + wuher = stcSvc.spawnObject('object/mobile/shared_wuher.iff', 'tatooine', building.getCellByCellNumber(3), float(8.6), float(-0.9), float(0.4), float(0), float(0.71), float(0), float(0.71)) + wuher.setCustomName('Wuher') + wuher.setOptionsBitmask(256) + + chadraFanFemale = stcSvc.spawnObject('object/mobile/shared_chadra_fan_female.iff', 'tatooine', building.getCellByCellNumber(3), float(10.6), float(-0.9), float(-1.5), float(0), float(0.42), float(0), float(0.90)) + chadraFanFemale.setCustomName('a Chadra Fan Female') + chadraFanFemale.setOptionsBitmask(256) + + chadraFanMale = stcSvc.spawnObject('object/mobile/shared_chadra_fan_male.iff', 'tatooine', building.getCellByCellNumber(3), float(10.7), float(-0.9), float(-0.3), float(0), float(0.64), float(0), float(0.77)) + chadraFanMale.setCustomName('a Chadra Fan Male') + chadraFanMale.setOptionsBitmask(256) + + muftak = stcSvc.spawnObject('object/mobile/shared_muftak.iff', 'tatooine', building.getCellByCellNumber(3), float(20.3), float(-0.9), float(4.9), float(0), float(0.82), float(0), float(0.57)) + muftak.setCustomName('Muftak') + muftak.setOptionsBitmask(256) + + chissMale1 = stcSvc.spawnObject('object/mobile/ep3/shared_ep3_etyyy_chiss_poacher_01.iff', 'tatooine', building.getCellByCellNumber(3), float(1.7), float(-0.9), float(-5.0), float(0), float(0.71), float(0), float(0.71)) + chissMale1.setCustomName('a Chiss Male') + chissMale1.setOptionsBitmask(256) + + chissMale2 = stcSvc.spawnObject('object/mobile/ep3/shared_ep3_etyyy_chiss_poacher_02.iff', 'tatooine', building.getCellByCellNumber(3), float(3.4), float(-0.9), float(-4.8), float(0), float(0), float(0), float(0)) + chissMale2.setCustomName('a Chiss Male') + chissMale2.setOptionsBitmask(256) + + cantinaStorm = stcSvc.spawnObject('object/mobile/shared_stormtrooper.iff', 'tatooine', building.getCellByCellNumber(3), float(2.9), float(-0.9), float(-6.5), float(0), float(0.71), float(0), float(0.71)) + cantinaStorm.setCustomName('a Stormtrooper') + cantinaStorm.setOptionsBitmask(256) + + cantinaStormL = stcSvc.spawnObject('object/mobile/shared_stormtrooper_groupleader.iff', 'tatooine', building.getCellByCellNumber(3), float(3.6), float(-0.9), float(-7.9), float(0), float(0.71), float(0), float(0.71)) + cantinaStormL.setCustomName('a Stormtrooper Squad Leader') + cantinaStormL.setOptionsBitmask(256) + + businessman1 = stcSvc.spawnObject('object/mobile/shared_dressed_businessman_human_male_01.iff', 'tatooine', building.getCellByCellNumber(3), float(11.0), float(-0.9), float(2.1), float(0), float(0.38), float(0), float(-0.92)) + businessman1.setCustomName('a Businessman') + businessman1.setOptionsBitmask(256) + + commoner1 = stcSvc.spawnObject('object/mobile/shared_dressed_commoner_tatooine_aqualish_male_01.iff', 'tatooine', building.getCellByCellNumber(3), float(10.3), float(-0.9), float(2.7), float(0), float(0.82), float(0), float(0.57)) + commoner1.setCustomName('a Commoner') + commoner1.setOptionsBitmask(256) + + entertainer1 = stcSvc.spawnObject('object/mobile/shared_dressed_entertainer_trainer_twk_female_01.iff', 'tatooine', building.getCellByCellNumber(3), float(9.4), float(-0.9), float(3.9), float(0), float(0.38), float(0), float(-0.92)) + entertainer1.setCustomName('an Entertainer') + entertainer1.setOptionsBitmask(256) + + noble1 = stcSvc.spawnObject('object/mobile/shared_dressed_noble_trandoshan_male_01.iff', 'tatooine', building.getCellByCellNumber(3), float(8.6), float(-0.9), float(4.8), float(0), float(0.82), float(0), float(0.57)) + noble1.setCustomName('a Noble') + noble1.setOptionsBitmask(256) + + commoner2 = stcSvc.spawnObject('object/mobile/shared_dressed_commoner_tatooine_trandoshan_female_01.iff', 'tatooine', building.getCellByCellNumber(3), float(4.1), float(-0.9), float(5.7), float(0), float(1), float(0), float(0)) + commoner2.setCustomName('a Commoner') + commoner2.setOptionsBitmask(256) + + commoner3 = stcSvc.spawnObject('object/mobile/shared_dressed_commoner_naboo_bothan_female_01.iff', 'tatooine', building.getCellByCellNumber(3), float(3.1), float(-0.9), float(5.9), float(0), float(1), float(0), float(0)) + commoner3.setCustomName('a Commoner') + commoner3.setOptionsBitmask(256) + + commoner4 = stcSvc.spawnObject('object/mobile/shared_dressed_commoner_fat_twilek_male_01.iff', 'tatooine', building.getCellByCellNumber(3), float(1.7), float(-0.9), float(6.0), float(0), float(1), float(0), float(0)) + commoner4.setCustomName('a Commoner') + commoner4.setOptionsBitmask(256) + + commoner5 = stcSvc.spawnObject('object/mobile/shared_dressed_commoner_naboo_bothan_male_01.iff', 'tatooine', building.getCellByCellNumber(3), float(-0.4), float(-0.9), float(5.9), float(0), float(1), float(0), float(0)) + commoner5.setCustomName('a Commoner') + commoner5.setOptionsBitmask(256) + + commoner6 = stcSvc.spawnObject('object/mobile/shared_dressed_commoner_naboo_human_male_05.iff', 'tatooine', building.getCellByCellNumber(3), float(16.0), float(-0.9), float(4.1), float(0), float(0), float(0), float(0)) + commoner6.setCustomName('a Commoner') + commoner6.setOptionsBitmask(256) + + commoner7 = stcSvc.spawnObject('object/mobile/shared_dressed_commoner_fat_zabrak_male_01.iff', 'tatooine', building.getCellByCellNumber(3), float(8.8), float(-0.9), float(-6.0), float(0), float(0.98), float(0), float(-0.22)) + commoner7.setCustomName('a Patron') + commoner7.setOptionsBitmask(256) + + commoner8 = stcSvc.spawnObject('object/mobile/shared_dressed_commoner_naboo_human_male_08.iff', 'tatooine', building.getCellByCellNumber(3), float(6.8), float(-0.9), float(-6.5), float(0), float(0.98), float(0), float(-0.22)) + commoner8.setCustomName('a Patron') + commoner8.setOptionsBitmask(256) + + commoner9 = stcSvc.spawnObject('object/mobile/shared_dressed_commoner_tatooine_aqualish_male_09.iff', 'tatooine', building.getCellByCellNumber(3), float(1.1), float(-0.9), float(-7.7), float(0), float(0.42), float(0), float(0.91)) + commoner9.setCustomName('a Commoner') + commoner9.setOptionsBitmask(256) + + commoner10 = stcSvc.spawnObject('object/mobile/shared_dressed_commoner_tatooine_nikto_male_04.iff', 'tatooine', building.getCellByCellNumber(3), float(2.1), float(-0.9), float(-8.4), float(0), float(0.42), float(0), float(0.91)) + commoner10.setCustomName('a Commoner') + commoner10.setOptionsBitmask(256) + + anetiaKahryn = stcSvc.spawnObject('object/mobile/shared_dressed_twk_entertainer.iff', 'tatooine', building.getCellByCellNumber(4), float(19.8), float(-0.9), float(-21), float(0), float(-0.03), float(0), float(0.99)) + anetiaKahryn.setCustomName('Anetia Kah\'ryn') + anetiaKahryn.setOptionsBitmask(256) + + figrinDan = stcSvc.spawnObject('object/mobile/shared_dressed_tatooine_figrin_dan.iff', 'tatooine', building.getCellByCellNumber(6), float(3.7), float(-0.9), float(-14.4), float(0), float(0.42), float(0), float(0.91)) + figrinDan.setCustomName('Figrin D\'an') + figrinDan.setOptionsBitmask(256) + + techMor = stcSvc.spawnObject('object/mobile/tatooine_npc/shared_figrin_dan.iff', 'tatooine', building.getCellByCellNumber(6), float(4.0), float(-0.9), float(-17.0), float(0), float(0.42), float(0), float(0.91)) + techMor.setCustomName('Tech M\'or') + techMor.setOptionsBitmask(256) + + doikkNats = stcSvc.spawnObject('object/mobile/tatooine_npc/shared_figrin_dan.iff', 'tatooine', building.getCellByCellNumber(6), float(2.2), float(-0.9), float(-16.4), float(0), float(0.42), float(0), float(0.91)) + doikkNats.setCustomName('Doikk Na\'ts') + doikkNats.setOptionsBitmask(256) + + tednDahai = stcSvc.spawnObject('object/mobile/tatooine_npc/shared_figrin_dan.iff', 'tatooine', building.getCellByCellNumber(6), float(1.3), float(-0.9), float(-15.2), float(0), float(0.42), float(0), float(0.91)) + tednDahai.setCustomName('Tedn Dahai') + tednDahai.setOptionsBitmask(256) + + nalanCheel = stcSvc.spawnObject('object/mobile/tatooine_npc/shared_figrin_dan.iff', 'tatooine', building.getCellByCellNumber(6), float(0.5), float(-0.9), float(-17.1), float(0), float(0.42), float(0), float(0.91)) + nalanCheel.setCustomName('Nalan Cheel') + nalanCheel.setOptionsBitmask(256) + + dravis = stcSvc.spawnObject('object/mobile/shared_space_privateer_tier1_tatooine.iff', 'tatooine', building.getCellByCellNumber(12), float(-21.7), float(-0.9), float(25.5), float(0), float(0.99), float(0), float(0.03)) + #dravis.setCustomName2('Dravis') + #dravis.setOptionsBitmask(256) + + talonKarrde = stcSvc.spawnObject('object/mobile/shared_dressed_talon_karrde.iff', 'tatooine', building.getCellByCellNumber(13), float(-25.7), float(-0.5), float(8.8), float(0), float(0.21), float(0), float(0.97)) + talonKarrde.setCustomName('Talon Karrde') + talonKarrde.setOptionsBitmask(256) + + #Starport Interior + + + #City Hall Interior + + #Lucky Despot Interior TODO: Check Cell IDs for Spawned NPCS inside once Lucky Despot is spawning properly again. + building = core.objectService.getObject(long(-466404040703447347)) + stcSvc.spawnObject('object/mobile/shared_han_solo.iff', 'tatooine', building.getCellByCellNumber(9), float(32.3), float(7.0), float(1.6), float(0), float(0), float(0), float(0)) + + valarian = stcSvc.spawnObject('object/mobile/shared_lady_valarian.iff', 'tatooine', building.getCellByCellNumber(4), float(-21.5), float(9.0), float(0.5), float(0), float(0.70), float(0), float(-0.71)) + valarian.setCustomName('Lady Valarian') + valarian.setOptionsBitmask(256) + + #Medical Center Interior + + #Theater Interior + + #Miscellaneous Building Interiors + + #Outside + businessman2 = stcSvc.spawnObject('object/mobile/shared_dressed_businessman_human_male_01.iff', 'tatooine', long(0), float(3663.3), float(4.0), float(-4738.6), float(0), float(0)) + businessman2.setCustomName('a Businessman') + businessman2.setOptionsBitmask(256) + + noble2 = stcSvc.spawnObject('object/mobile/shared_dressed_noble_human_female_01.iff', 'tatooine', long(0), float(3542.3), float(5.0), float(-4826.0), float(0.42), float(0.91)) + noble2.setCustomName('a Noble') + noble2.setOptionsBitmask(256) + + commoner11 = stcSvc.spawnObject('object/mobile/shared_dressed_commoner_naboo_human_male_06.iff', 'tatooine', long(0), float(3529.1), float(5.0), float(-4900.4), float(0.42), float(0.91)) + commoner11.setCustomName('a Commoner') + commoner11.setOptionsBitmask(256) + + businessman3 = stcSvc.spawnObject('object/mobile/shared_dressed_commoner_tatooine_trandoshan_male_02.iff', 'tatooine', long(0), float(3595.7), float(5.0), float(-4740.1), float(0), float(0)) + businessman3.setCustomName('a Businessman') + businessman3.setOptionsBitmask(256) + + jawa1 = stcSvc.spawnObject('object/mobile/shared_jawa.iff', 'tatooine', long(0), float(3663.3), float(5.0), float(-4858.6), float(0), float(0)) + jawa1.setCustomName('a Jawa') + jawa1.setOptionsBitmask(256) + + commoner12 = stcSvc.spawnObject('object/mobile/shared_dressed_commoner_naboo_moncal_male_01.iff', 'tatooine', long(0), float(3490.3), float(5.0), float(-4799.4), float(0), float(0)) + commoner12.setCustomName('a Scientist') + commoner12.setOptionsBitmask(256) + + commoner13 = stcSvc.spawnObject('object/mobile/shared_dressed_commoner_naboo_zabrak_female_02.iff', 'tatooine', long(0), float(3559.7), float(5.0), float(-4725.9), float(0), float(0)) + commoner13.setCustomName('a Commoner') + commoner13.setOptionsBitmask(256) + + commoner14 = stcSvc.spawnObject('object/mobile/shared_dressed_commoner_tatooine_devaronian_male_01.iff', 'tatooine', long(0), float(3527.7), float(5.0), float(-4721.1), float(0.71), float(0.71)) + commoner14.setCustomName('a Commoner') + commoner14.setOptionsBitmask(256) + + commoner15 = stcSvc.spawnObject('object/mobile/shared_dressed_commoner_tatooine_aqualish_female_01.iff', 'tatooine', long(0), float(3514.9), float(5.0), float(-4737.8), float(0), float(0)) + commoner15.setCustomName('a Commoner') + commoner15.setOptionsBitmask(256) + + jawa2 = stcSvc.spawnObject('object/mobile/shared_jawa.iff', 'tatooine', long(0), float(3485.2), float(4.9), float(-4859.2), float(0), float(0)) + jawa2.setCustomName('a Jawa') + jawa2.setOptionsBitmask(256) + + jawa3 = stcSvc.spawnObject('object/mobile/shared_jawa.iff', 'tatooine', long(0), float(3465.3), float(5.0), float(-4860.1), float(0.71), float(-0.71)) + jawa3.setCustomName('a Jawa') + jawa3.setOptionsBitmask(256) + + jawa4 = stcSvc.spawnObject('object/mobile/shared_jawa.iff', 'tatooine', long(0), float(3486.8), float(5.0), float(-4884.7), float(0.43051), float(-0.9025)) + jawa4.setCustomName('a Jawa') + jawa4.setOptionsBitmask(256) + + jawa5 = stcSvc.spawnObject('object/mobile/shared_jawa.iff', 'tatooine', long(0), float(3487.1), float(5.0), float(-4886.0), float(0.95105), float(0.3090)) + jawa5.setCustomName('a Jawa') + jawa5.setOptionsBitmask(256) + + jawa6 = stcSvc.spawnObject('object/mobile/shared_jawa.iff', 'tatooine', long(0), float(3488.8), float(5.0), float(-4884.4), float(0.3255), float(-0.9455)) + jawa6.setCustomName('a Jawa') + jawa6.setOptionsBitmask(256) + + jawa7 = stcSvc.spawnObject('object/mobile/shared_jawa.iff', 'tatooine', long(0), float(3472.2), float(5.0), float(-4918.4), float(0), float(0)) + jawa7.setCustomName('a Jawa') + jawa7.setOptionsBitmask(256) + + jawa8 = stcSvc.spawnObject('object/mobile/shared_jawa.iff', 'tatooine', long(0), float(3471.4), float(5.0), float(-4919.5), float(0), float(0)) + jawa8.setCustomName('a Jawa') + jawa8.setOptionsBitmask(256) + + jawa9 = stcSvc.spawnObject('object/mobile/shared_jawa.iff', 'tatooine', long(0), float(3470.3), float(5.0), float(-4918.7), float(0), float(0)) + jawa9.setCustomName('a Jawa') + jawa9.setOptionsBitmask(256) + + bib = stcSvc.spawnObject('object/mobile/shared_bib_fortuna.iff', 'tatooine', long(0), float(3552.4), float(5.0), float(-4933.2), float(0.31730), float(-0.9483)) + bib.setCustomName('Bib Fortuna') + bib.setOptionsBitmask(256) + + commoner16 = stcSvc.spawnObject('object/mobile/shared_dressed_commoner_naboo_human_male_06.iff', 'tatooine', long(0), float(3398.2), float(4.0), float(-4654.2), float(0.42), float(0.91)) + commoner16.setCustomName('a Commoner') + commoner16.setOptionsBitmask(256) + + noble3 = stcSvc.spawnObject('object/mobile/shared_dressed_noble_human_female_01.iff', 'tatooine', long(0), float(3396.3), float(4.0), float(-4774.1), float(0.42), float(0.91)) + noble3.setCustomName('a Noble') + noble3.setOptionsBitmask(256) + + entertainer1 = stcSvc.spawnObject('object/mobile/shared_dressed_entertainer_trainer_twk_female_01.iff', 'tatooine', long(0), float(3305.7), float(5.6), float(-4771.7), float(0), float(0)) + entertainer1.setCustomName('an Entertainer') + entertainer1.setOptionsBitmask(256) + + r3m6 = stcSvc.spawnObject('object/mobile/shared_r3.iff', 'tatooine', long(0), float(3460.1), float(4.0), float(-4898.2), float(0.38), float(-0.92)) + r3m6.setCustomName('R3-M6') + r3m6.setOptionsBitmask(256) + + eg1 = stcSvc.spawnObject('object/mobile/shared_eg6_power_droid.iff', 'tatooine', long(0), float(3463.8), float(4.0), float(-4882.6), float(-0.38), float(0.92)) + eg1.setCustomName('an EG-6 Power Droid') + eg1.setOptionsBitmask(256) + + commoner17 = stcSvc.spawnObject('object/mobile/shared_dressed_commoner_naboo_zabrak_female_02.iff', 'tatooine', long(0), float(3452.6), float(4.0), float(-4937.1), float(0), float(0)) + commoner17.setCustomName('a Commoner') + commoner17.setOptionsBitmask(256) + + lifter1 = stcSvc.spawnObject('object/mobile/shared_cll8_binary_load_lifter.iff', 'tatooine', long(0), float(3547), float(5.0), float(-4768.9), float(0), float(0)) + lifter1.setCustomName('a CLL-8 Binary Load Lifter') + lifter1.setOptionsBitmask(256) + + r3j7 = stcSvc.spawnObject('object/mobile/shared_r3.iff', 'tatooine', long(0), float(3311.1), float(4.0), float(-4820.2), float(0.38), float(-0.92)) + r3j7.setCustomName('R3-J7') + r3j7.setOptionsBitmask(256) + + noble4 = stcSvc.spawnObject('object/mobile/shared_dressed_noble_human_female_03.iff', 'tatooine', long(0), float(3255.3), float(4.0), float(-4848.1), float(0.42), float(0.91)) + noble4.setCustomName('a Noble') + noble4.setOptionsBitmask(256) + + byxlePedette = stcSvc.spawnObject('object/mobile/shared_dressed_tatooine_opening_byxle.iff', 'tatooine', long(0), float(3365), float(5), float(-4639), float(0.99), float(0.12)) + byxlePedette.setOptionsBitmask(264) + + errikDarksider = stcSvc.spawnObject('object/mobile/shared_dressed_herald_tatooine_01.iff', 'tatooine', long(0), float(3381), float(4.6), float(-4498), float(0.91), float(0.40)) + errikDarksider.setCustomName('Errik Darksider') + errikDarksider.setOptionsBitmask(256) + + gendra = stcSvc.spawnObject('object/mobile/shared_dressed_gendra.iff', 'tatooine', long(0), float(3308), float(5.6), float(-4785), float(0.84), float(0.53)) + gendra.setOptionsBitmask(264) + + lurval = stcSvc.spawnObject('object/mobile/shared_lurval.iff', 'tatooine', long(0), float(3387), float(5), float(-4791), float(-0.4), float(0.91)) + lurval.setCustomName('Lurval') + lurval.setOptionsBitmask(256) + + matildaCarson = stcSvc.spawnObject('object/mobile/shared_dressed_noble_human_female_02.iff', 'tatooine', long(0), float(3490.2), float(5), float(-4778), float(0.87), float(0.48)) + matildaCarson.setCustomName('Matilda Carson') + matildaCarson.setOptionsBitmask(256) + + vanvi = stcSvc.spawnObject('object/mobile/shared_dressed_bestine_artist01.iff', 'tatooine', long(0), float(3312), float(5), float(-4655), float(0.95), float(-0.28)) + vanvi.setCustomName('Vanvi Hotn') + vanvi.setOptionsBitmask(256) + + harburik = stcSvc.spawnObject('object/mobile/shared_dressed_tatooine_lt_harburik.iff', 'tatooine', long(0), float(3486), float(5), float(-4740), float(0), float(-0.71), float(0), float(0.71)) + harburik.setCustomName('Lt. Harburik') + harburik.setOptionsBitmask(256) + + trehla = stcSvc.spawnObject('object/mobile/shared_dressed_tutorial_mentor.iff', 'tatooine', long(0), float(3484), float(5), float(-4808), float(0), float(0.92), float(0), float(-0.38)) + trehla.setCustomName('Trehla Keelo') + trehla.setOptionsBitmask(256) + + #Eisley Legacy Quest NPCs + + vourk = stcSvc.spawnObject('object/mobile/shared_dressed_tatooine_opening_santos.iff', 'tatooine', long(0), float(3520.0), float(5.0), float(-4821.0), float(0.42), float(0.91)) + vourk.setCustomName('Vourk Ver\'Zremp') + vourk.setOptionsBitmask(256) + + building = core.objectService.getObject(long(1279956)) + mayor = stcSvc.spawnObject('object/mobile/shared_dressed_mayor_mikdanyell_guhrantt.iff', 'tatooine', building.getCellByCellNumber(4), float(1.2), float(2.5), float(5.4), float(0), float(0), float(0), float(0)) + #mayor.setOptionsBitmask(264) + + enthaKandela = stcSvc.spawnObject('object/mobile/shared_dressed_entha_kandela.iff', 'tatooine', long(0), float(3511), float(5.0), float(-4785), float(0.70), float(0.71)) + enthaKandela.setCustomName('Entha Kandela') + enthaKandela.setOptionsBitmask(256) + + purvis = stcSvc.spawnObject('object/mobile/shared_dressed_purvis_arrison.iff', 'tatooine', long(0), float(3512.4), float(5.0), float(-4764.9), float(0.38), float(-0.92)) + purvis.setCustomName('Purvis Arrison') + purvis.setOptionsBitmask(256) + + building = core.objectService.getObject(long(1189630)) + peawpRdawc = stcSvc.spawnObject('object/mobile/shared_peawp_bodyguard_trainer.iff', 'tatooine', building.getCellByCellNumber(9), float(-11.8), float(1.1), float(-10.1), float(0), float(0), float(0), float(0)) + peawpRdawc.setCustomName('Peawp R\'dawc') + peawpRdawc.setOptionsBitmask(256) + + nikoBrehe = stcSvc.spawnObject('object/mobile/shared_dressed_tatooine_opening_niko.iff', 'tatooine', long(0), float(3506.7), float(5.0), float(-4795.8), float(0.70), float(0.71)) + nikoBrehe.setOptionsBitmask(264) + + dunir = stcSvc.spawnObject('object/mobile/shared_dressed_tatooine_opening_dunir.iff', 'tatooine', long(0), float(3520.7), float(5.0), float(-4683.7), float(0.99), float(-0.08)) + dunir.setOptionsBitmask(264) + + #Eisley Ship Controller + stcSvc.spawnObject('object/mobile/shared_distant_ship_controller.iff', 'tatooine', long(0), float(3542.3), float(5.0), float(-4826.0), float(0.42), float(0.91)) + + + #Profession Counselor + stcSvc.spawnObject('object/mobile/shared_respec_seller_f_1.iff', 'tatooine', long(0), float(3533.14), float(5), float(-4788.86), float(-0.3327), float(0.9288)) + + #Junk Dealers + stcSvc.spawnObject('object/mobile/shared_junk_dealer_m_01.iff', 'tatooine', long(0), float(3355), float(5), float(-4823), float(0.71), float(0.71)) + stcSvc.spawnObject('object/mobile/shared_junk_dealer_m_01.iff', 'tatooine', long(0), float(3412), float(5), float(-4713), float(0.71), float(-0.71)) + stcSvc.spawnObject('object/mobile/shared_junk_dealer_m_01.iff', 'tatooine', long(0), float(3500), float(5), float(-4960), float(0), float(0)) + stcSvc.spawnObject('object/mobile/shared_junk_dealer_m_01.iff', 'tatooine', long(0), float(3497), float(5), float(-4928), float(0), float(1)) + stcSvc.spawnObject('object/mobile/shared_junk_dealer_m_01.iff', 'tatooine', long(0), float(3377), float(5), float(-4524), float(0.71), float(0.71)) + stcSvc.spawnObject('object/mobile/shared_junk_dealer_m_01.iff', 'tatooine', long(0), float(3271), float(5), float(-4704), float(0), float(0)) + stcSvc.spawnObject('object/mobile/shared_junk_dealer_m_01.iff', 'tatooine', long(0), float(3476), float(5), float(-4665), float(0.71), float(0.71)) + + + return + diff --git a/scripts/static_spawns/tatooine/mos_eisley_desert_swoopers.py b/scripts/static_spawns/tatooine/mos_eisley_desert_swoopers.py new file mode 100644 index 00000000..8aca297d --- /dev/null +++ b/scripts/static_spawns/tatooine/mos_eisley_desert_swoopers.py @@ -0,0 +1,36 @@ +import sys +# Project SWG: Mos Eisley Desert Swoopers: Static Spawns +# (C)2014 ProjectSWG + + + +from resources.datatables import Options +from resources.datatables import State + +def addPlanetSpawns(core, planet): + + + stcSvc = core.staticService + objSvc = core.objectService + + desert_swooper = stcSvc.spawnObject('desert_swooper', 'tatooine', long(0), float(3319), float(5), float(-5125), float(0), float(0), float(0), float(0), 30) + desert_swooper1 = stcSvc.spawnObject('desert_swooper', 'tatooine', long(0), float(3309), float(5), float(-5121), float(0), float(0), float(0), float(0), 30) + desert_swooper2 = stcSvc.spawnObject('desert_swooper', 'tatooine', long(0), float(3325), float(5), float(-5112), float(0), float(0), float(0), float(0), 30) + desert_swooper3 = stcSvc.spawnObject('desert_swooper', 'tatooine', long(0), float(3334), float(5), float(-5130), float(0), float(0), float(0), float(0), 30) + desert_swooper4 = stcSvc.spawnObject('desert_swooper', 'tatooine', long(0), float(3315), float(5), float(-5122), float(0), float(0), float(0), float(0), 30) + desert_swooper5 = stcSvc.spawnObject('desert_swooper', 'tatooine', long(0), float(3322), float(5), float(-5138), float(0), float(0), float(0), float(0), 30) + desert_swooper6 = stcSvc.spawnObject('desert_swooper', 'tatooine', long(0), float(3331), float(5), float(-5119), float(0), float(0), float(0), float(0), 30) + desert_swooper7 = stcSvc.spawnObject('desert_swooper', 'tatooine', long(0), float(3292), float(5), float(-5155), float(0), float(0), float(0), float(0), 30) + desert_swooper8 = stcSvc.spawnObject('desert_swooper', 'tatooine', long(0), float(3312), float(5), float(-5155), float(0), float(0), float(0), float(0), 30) + desert_swooper9 = stcSvc.spawnObject('desert_swooper', 'tatooine', long(0), float(3303), float(5), float(-5145), float(0), float(0), float(0), float(0), 30) + desert_swooper10 = stcSvc.spawnObject('desert_swooper', 'tatooine', long(0), float(3296), float(5), float(-5121), float(0), float(0), float(0), float(0), 30) + desert_swooper11 = stcSvc.spawnObject('desert_swooper', 'tatooine', long(0), float(3280), float(5), float(-5112), float(0), float(0), float(0), float(0), 30) + desert_swooper12 = stcSvc.spawnObject('desert_swooper', 'tatooine', long(0), float(3294), float(5), float(-5130), float(0), float(0), float(0), float(0), 30) + desert_swooper13 = stcSvc.spawnObject('desert_swooper', 'tatooine', long(0), float(3303), float(5), float(-5119), float(0), float(0), float(0), float(0), 30) + desert_swooper14 = stcSvc.spawnObject('desert_swooper', 'tatooine', long(0), float(3290), float(5), float(-5138), float(0), float(0), float(0), float(0), 30) + + desert_swooper_leader = stcSvc.spawnObject('desert_swooper_leader', 'tatooine', long(0), float(3313), float(5), float(-5138), float(0), float(0), float(0), float(0), 30) + desert_swooper_leader1 = stcSvc.spawnObject('desert_swooper_leader', 'tatooine', long(0), float(3316), float(5), float(-5131), float(0), float(0), float(0), float(0), 30) + + return + diff --git a/scripts/static_spawns/tatooine/mos_eisley_error_prone.py b/scripts/static_spawns/tatooine/mos_eisley_error_prone.py new file mode 100644 index 00000000..90e68ac6 --- /dev/null +++ b/scripts/static_spawns/tatooine/mos_eisley_error_prone.py @@ -0,0 +1,35 @@ +import sys +# Project SWG: Mos Eisley Error Prone Droids: Static Spawns +# (C)2014 ProjectSWG + + + +from resources.datatables import Options +from resources.datatables import State + +def addPlanetSpawns(core, planet): + + + stcSvc = core.staticService + objSvc = core.objectService + + error_prone = stcSvc.spawnObject('error-prone_battle_droid', 'tatooine', long(0), float(2868), float(39), float(-4814), float(0), float(0), float(0), float(0), 30) + error_prone1 = stcSvc.spawnObject('error-prone_battle_droid', 'tatooine', long(0), float(2815), float(38), float(-4815), float(0), float(0), float(0), float(0), 30) + error_prone2 = stcSvc.spawnObject('error-prone_battle_droid', 'tatooine', long(0), float(2875), float(34), float(-4777), float(0), float(0), float(0), float(0), 30) + error_prone3 = stcSvc.spawnObject('error-prone_battle_droid', 'tatooine', long(0), float(2850), float(37), float(-4786), float(0), float(0), float(0), float(0), 30) + error_prone4 = stcSvc.spawnObject('error-prone_battle_droid', 'tatooine', long(0), float(2835), float(41), float(-4806), float(0), float(0), float(0), float(0), 30) + error_prone5 = stcSvc.spawnObject('error-prone_battle_droid', 'tatooine', long(0), float(2839), float(42), float(-4834), float(0), float(0), float(0), float(0), 30) + error_prone6 = stcSvc.spawnObject('error-prone_battle_droid', 'tatooine', long(0), float(2849), float(40), float(-4848), float(0), float(0), float(0), float(0), 30) + error_prone7 = stcSvc.spawnObject('error-prone_battle_droid', 'tatooine', long(0), float(2880), float(35), float(-4848), float(0), float(0), float(0), float(0), 30) + error_prone8 = stcSvc.spawnObject('error-prone_battle_droid', 'tatooine', long(0), float(2878), float(38), float(-4835), float(0), float(0), float(0), float(0), 30) + error_prone9 = stcSvc.spawnObject('error-prone_battle_droid', 'tatooine', long(0), float(2880), float(38), float(-4819), float(0), float(0), float(0), float(0), 30) + error_prone10 = stcSvc.spawnObject('error-prone_battle_droid', 'tatooine', long(0), float(2878), float(38), float(-4835), float(0), float(0), float(0), float(0), 30) + error_prone11 = stcSvc.spawnObject('error-prone_battle_droid', 'tatooine', long(0), float(2880), float(38), float(-4819), float(0), float(0), float(0), float(0), 30) + error_prone12 = stcSvc.spawnObject('error-prone_battle_droid', 'tatooine', long(0), float(2895), float(35), float(-4826), float(0), float(0), float(0), float(0), 30) + error_prone13 = stcSvc.spawnObject('error-prone_battle_droid', 'tatooine', long(0), float(2895), float(39), float(-4795), float(0), float(0), float(0), float(0), 30) + error_prone14 = stcSvc.spawnObject('error-prone_battle_droid', 'tatooine', long(0), float(2860), float(39), float(-4827), float(0), float(0), float(0), float(0), 30) + error_prone15 = stcSvc.spawnObject('error-prone_battle_droid', 'tatooine', long(0), float(2851), float(40), float(-4806), float(0), float(0), float(0), float(0), 30) + error_prone16 = stcSvc.spawnObject('error-prone_battle_droid', 'tatooine', long(0), float(2871), float(38), float(-4799), float(0), float(0), float(0), float(0), 30) + + return + diff --git a/scripts/static_spawns/tatooine/mos_eisley_escaped_criminal.py b/scripts/static_spawns/tatooine/mos_eisley_escaped_criminal.py new file mode 100644 index 00000000..225fb203 --- /dev/null +++ b/scripts/static_spawns/tatooine/mos_eisley_escaped_criminal.py @@ -0,0 +1,32 @@ +import sys +# Project SWG: Mos Eisley Error Prone Droids: Static Spawns +# (C)2014 ProjectSWG + + + +from resources.datatables import Options +from resources.datatables import State + +def addPlanetSpawns(core, planet): + + + stcSvc = core.staticService + objSvc = core.objectService + + escaped_criminal = stcSvc.spawnObject('escaped_criminal', 'tatooine', long(0), float(2862), float(13), float(-5103), float(0), float(0), float(0), float(0), 30) + escaped_criminal1 = stcSvc.spawnObject('escaped_criminal', 'tatooine', long(0), float(2856), float(13), float(-5094), float(0), float(0), float(0), float(0), 30) + escaped_criminal2 = stcSvc.spawnObject('escaped_criminal', 'tatooine', long(0), float(2845), float(10), float(-5084), float(0), float(0), float(0), float(0), 30) + escaped_criminal3 = stcSvc.spawnObject('escaped_criminal', 'tatooine', long(0), float(2832), float(10), float(-5091), float(0), float(0), float(0), float(0), 30) + escaped_criminal4 = stcSvc.spawnObject('escaped_criminal', 'tatooine', long(0), float(2815), float(7), float(-5109), float(0), float(0), float(0), float(0), 30) + escaped_criminal5 = stcSvc.spawnObject('escaped_criminal', 'tatooine', long(0), float(2827), float(11), float(-5129), float(0), float(0), float(0), float(0), 30) + escaped_criminal6 = stcSvc.spawnObject('escaped_criminal', 'tatooine', long(0), float(2843), float(7), float(-5099), float(0), float(0), float(0), float(0), 30) + escaped_criminal7 = stcSvc.spawnObject('escaped_criminal', 'tatooine', long(0), float(2849), float(6), float(-5108), float(0), float(0), float(0), float(0), 30) + escaped_criminal8 = stcSvc.spawnObject('escaped_criminal', 'tatooine', long(0), float(2852), float(7), float(-5117), float(0), float(0), float(0), float(0), 30) + escaped_criminal9 = stcSvc.spawnObject('escaped_criminal', 'tatooine', long(0), float(2848), float(13), float(-5138), float(0), float(0), float(0), float(0), 30) + escaped_criminal10 = stcSvc.spawnObject('escaped_criminal', 'tatooine', long(0), float(2809), float(9), float(-5121), float(0), float(0), float(0), float(0), 30) + escaped_criminal11 = stcSvc.spawnObject('escaped_criminal', 'tatooine', long(0), float(2815), float(2), float(-5074), float(0), float(0), float(0), float(0), 30) + escaped_criminal12 = stcSvc.spawnObject('escaped_criminal', 'tatooine', long(0), float(2837), float(5), float(-5081), float(0), float(0), float(0), float(0), 30) + + + return + diff --git a/scripts/static_spawns/tatooine/mos_eisley_gunrunners.py b/scripts/static_spawns/tatooine/mos_eisley_gunrunners.py new file mode 100644 index 00000000..acbf8d2a --- /dev/null +++ b/scripts/static_spawns/tatooine/mos_eisley_gunrunners.py @@ -0,0 +1,38 @@ +import sys +# Project SWG: Mos Eisley gunrunners: Static Spawns +# (C)2014 ProjectSWG + + + +from resources.datatables import Options +from resources.datatables import State + +def addPlanetSpawns(core, planet): + + + stcSvc = core.staticService + objSvc = core.objectService + + # gunrunners + gunrunner = stcSvc.spawnObject('gunrunner', 'tatooine', long(0), float(2835), float(8), float(-4276), float(0), float(0), float(0), float(0), 45) + gunrunner1 = stcSvc.spawnObject('gunrunner', 'tatooine', long(0), float(2818), float(7), float(-4265), float(0), float(0), float(0), float(0), 45) + gunrunner2 = stcSvc.spawnObject('gunrunner', 'tatooine', long(0), float(2823), float(7), float(-4284), float(0), float(0), float(0), float(0), 45) + gunrunner3 = stcSvc.spawnObject('gunrunner', 'tatooine', long(0), float(2806), float(7), float(-4253), float(0), float(0), float(0), float(0), 45) + gunrunner4 = stcSvc.spawnObject('gunrunner', 'tatooine', long(0), float(2798), float(7), float(-4292), float(0), float(0), float(0), float(0), 45) + gunrunner5 = stcSvc.spawnObject('gunrunner', 'tatooine', long(0), float(2848), float(7), float(-4316), float(0), float(0), float(0), float(0), 45) + gunrunner6 = stcSvc.spawnObject('gunrunner', 'tatooine', long(0), float(2862), float(7), float(-4289), float(0), float(0), float(0), float(0), 45) + gunrunner7 = stcSvc.spawnObject('gunrunner', 'tatooine', long(0), float(2842), float(7), float(-4299), float(0), float(0), float(0), float(0), 45) + gunrunner8 = stcSvc.spawnObject('gunrunner', 'tatooine', long(0), float(2839), float(7), float(-4283), float(0), float(0), float(0), float(0), 45) + gunrunner9 = stcSvc.spawnObject('gunrunner', 'tatooine', long(0), float(2799), float(6), float(-4277), float(0), float(0), float(0), float(0), 45) + gunrunner10 = stcSvc.spawnObject('gunrunner', 'tatooine', long(0), float(2744), float(7), float(-4279), float(0), float(0), float(0), float(0), 45) + gunrunner11 = stcSvc.spawnObject('gunrunner', 'tatooine', long(0), float(2794), float(7), float(-4301), float(0), float(0), float(0), float(0), 45) + + # gunrunner sentry + gunrunner_sentry = stcSvc.spawnObject('gunrunner_sentry', 'tatooine', long(0), float(2830), float(8), float(-4270), float(0), float(0), float(0), float(0), 45) + gunrunner_sentry1 = stcSvc.spawnObject('gunrunner_sentry', 'tatooine', long(0), float(2851), float(10), float(-4261), float(0), float(0), float(0), float(0), 45) + gunrunner_sentry2 = stcSvc.spawnObject('gunrunner_sentry', 'tatooine', long(0), float(2824), float(6), float(-4297), float(0), float(0), float(0), float(0), 45) + gunrunner_sentry3 = stcSvc.spawnObject('gunrunner_sentry', 'tatooine', long(0), float(2833), float(10), float(-4252), float(0), float(0), float(0), float(0), 45) + gunrunner_sentry4 = stcSvc.spawnObject('gunrunner_sentry', 'tatooine', long(0), float(2830), float(6), float(-4308), float(0), float(0), float(0), float(0), 45) + + + return diff --git a/scripts/static_spawns/tatooine/mos_eisley_kreetles.py b/scripts/static_spawns/tatooine/mos_eisley_kreetles.py new file mode 100644 index 00000000..ba3f62e0 --- /dev/null +++ b/scripts/static_spawns/tatooine/mos_eisley_kreetles.py @@ -0,0 +1,38 @@ +import sys +# Project SWG: MosEisley Kreetles: Static Spawns +# (C)2014 ProjectSWG + + + +from resources.datatables import Options +from resources.datatables import State + +def addPlanetSpawns(core, planet): + + + stcSvc = core.staticService + objSvc = core.objectService + + # Carrion Kreetles + carrion_kreetle1 = stcSvc.spawnObject('carrion_kreetle', 'tatooine', long(0), float(3551), float(4), float(-5064), float(0), float(0), float(0), float(0), 30) + carrion_kreetle11 = stcSvc.spawnObject('carrion_kreetle', 'tatooine', long(0), float(3545), float(4), float(-5055), float(0), float(0), float(0), float(0), 30) + carrion_kreetle12 = stcSvc.spawnObject('carrion_kreetle', 'tatooine', long(0), float(3540), float(4), float(-5050), float(0), float(0), float(0), float(0), 30) + carrion_kreetle13 = stcSvc.spawnObject('carrion_kreetle', 'tatooine', long(0), float(3533), float(4), float(-5070), float(0), float(0), float(0), float(0), 30) + carrion_kreetle14 = stcSvc.spawnObject('carrion_kreetle', 'tatooine', long(0), float(3555), float(4), float(-5072), float(0), float(0), float(0), float(0), 30) + + + carrion_kreetle2 = stcSvc.spawnObject('carrion_kreetle', 'tatooine', long(0), float(3233), float(8), float(-4457), float(0), float(0), float(0), float(0), 30) + carrion_kreetle21 = stcSvc.spawnObject('carrion_kreetle', 'tatooine', long(0), float(3223), float(8), float(-4447), float(0), float(0), float(0), float(0), 30) + carrion_kreetle22 = stcSvc.spawnObject('carrion_kreetle', 'tatooine', long(0), float(3213), float(8), float(-4455), float(0), float(0), float(0), float(0), 30) + carrion_kreetle23 = stcSvc.spawnObject('carrion_kreetle', 'tatooine', long(0), float(3235), float(8), float(-4440), float(0), float(0), float(0), float(0), 30) + carrion_kreetle24 = stcSvc.spawnObject('carrion_kreetle', 'tatooine', long(0), float(3245), float(8), float(-4460), float(0), float(0), float(0), float(0), 30) + + + carrion_kreetle3 = stcSvc.spawnObject('carrion_kreetle', 'tatooine', long(0), float(3147), float(4), float(-4846), float(0), float(0), float(0), float(0), 30) + carrion_kreetle31 = stcSvc.spawnObject('carrion_kreetle', 'tatooine', long(0), float(3137), float(4), float(-4856), float(0), float(0), float(0), float(0), 30) + carrion_kreetle32 = stcSvc.spawnObject('carrion_kreetle', 'tatooine', long(0), float(3127), float(4), float(-4836), float(0), float(0), float(0), float(0), 30) + carrion_kreetle35 = stcSvc.spawnObject('carrion_kreetle', 'tatooine', long(0), float(3145), float(4), float(-4852), float(0), float(0), float(0), float(0), 30) + carrion_kreetle36 = stcSvc.spawnObject('carrion_kreetle', 'tatooine', long(0), float(3135), float(4), float(-4838), float(0), float(0), float(0), float(0), 30) + + + return \ No newline at end of file diff --git a/scripts/static_spawns/tatooine/mos_eisley_mites.py b/scripts/static_spawns/tatooine/mos_eisley_mites.py new file mode 100644 index 00000000..74e6d37c --- /dev/null +++ b/scripts/static_spawns/tatooine/mos_eisley_mites.py @@ -0,0 +1,62 @@ +import sys +# Project SWG: MosEisley mites: Static Spawns +# (C)2014 ProjectSWG + + + +from resources.datatables import Options +from resources.datatables import State + +def addPlanetSpawns(core, planet): + + + stcSvc = core.staticService + objSvc = core.objectService + + + # Mound Mites + mound_mite1 = stcSvc.spawnObject('mound_mite', 'tatooine', long(0), float(3785), float(57), float(-5057), float(0), float(0), float(0), float(0), 30) + mound_mite11 = stcSvc.spawnObject('mound_mite', 'tatooine', long(0), float(3775), float(55), float(-5067), float(0), float(0), float(0), float(0), 30) + mound_mite12 = stcSvc.spawnObject('mound_mite', 'tatooine', long(0), float(3765), float(53), float(-5077), float(0), float(0), float(0), float(0), 30) + mound_mite13 = stcSvc.spawnObject('mound_mite', 'tatooine', long(0), float(3795), float(56), float(-5047), float(0), float(0), float(0), float(0), 30) + mound_mite14 = stcSvc.spawnObject('mound_mite', 'tatooine', long(0), float(3805), float(53), float(-5037), float(0), float(0), float(0), float(0), 30) + mound_mite15 = stcSvc.spawnObject('mound_mite', 'tatooine', long(0), float(3780), float(58), float(-5050), float(0), float(0), float(0), float(0), 30) + mound_mite16 = stcSvc.spawnObject('mound_mite', 'tatooine', long(0), float(3790), float(55), float(-5040), float(0), float(0), float(0), float(0), 30) + + # Mound Mites + mound_mite2 = stcSvc.spawnObject('mound_mite', 'tatooine', long(0), float(3560), float(63), float(-4339), float(0), float(0), float(0), float(0), 30) + mound_mite21 = stcSvc.spawnObject('mound_mite', 'tatooine', long(0), float(3550), float(63), float(-4349), float(0), float(0), float(0), float(0), 30) + mound_mite22 = stcSvc.spawnObject('mound_mite', 'tatooine', long(0), float(3540), float(63), float(-4359), float(0), float(0), float(0), float(0), 30) + mound_mite23 = stcSvc.spawnObject('mound_mite', 'tatooine', long(0), float(3570), float(63), float(-4329), float(0), float(0), float(0), float(0), 30) + mound_mite24 = stcSvc.spawnObject('mound_mite', 'tatooine', long(0), float(3580), float(63), float(-4319), float(0), float(0), float(0), float(0), 30) + mound_mite25 = stcSvc.spawnObject('mound_mite', 'tatooine', long(0), float(3555), float(63), float(-4345), float(0), float(0), float(0), float(0), 30) + mound_mite26 = stcSvc.spawnObject('mound_mite', 'tatooine', long(0), float(3565), float(63), float(-4325), float(0), float(0), float(0), float(0), 30) + + + # Legacy RockMites + + rockmite = stcSvc.spawnObject('rockmite', 'tatooine', long(0), float(3140), float(5), float(-4907), float(0), float(0), float(0), float(0), 30) + rockmite1 = stcSvc.spawnObject('rockmite', 'tatooine', long(0), float(3150), float(5), float(-4917), float(0), float(0), float(0), float(0), 30) + rockmite2 = stcSvc.spawnObject('rockmite', 'tatooine', long(0), float(3160), float(5), float(-4927), float(0), float(0), float(0), float(0), 30) + rockmite3 = stcSvc.spawnObject('rockmite', 'tatooine', long(0), float(3130), float(5), float(-4897), float(0), float(0), float(0), float(0), 30) + rockmite4 = stcSvc.spawnObject('rockmite', 'tatooine', long(0), float(3120), float(5), float(-4887), float(0), float(0), float(0), float(0), 30) + rockmite5 = stcSvc.spawnObject('rockmite', 'tatooine', long(0), float(3145), float(5), float(-4900), float(0), float(0), float(0), float(0), 30) + rockmite6 = stcSvc.spawnObject('rockmite', 'tatooine', long(0), float(3155), float(5), float(-4908), float(0), float(0), float(0), float(0), 30) + + # Legacy RockMites + rockmite2 = stcSvc.spawnObject('rockmite', 'tatooine', long(0), float(3710), float(5), float(-4652), float(0), float(0), float(0), float(0), 30) + rockmite21 = stcSvc.spawnObject('rockmite', 'tatooine', long(0), float(3724), float(5), float(-4661), float(0), float(0), float(0), float(0), 30) + rockmite22 = stcSvc.spawnObject('rockmite', 'tatooine', long(0), float(3733), float(5), float(-4659), float(0), float(0), float(0), float(0), 30) + rockmite23 = stcSvc.spawnObject('rockmite', 'tatooine', long(0), float(3747), float(5), float(-4655), float(0), float(0), float(0), float(0), 30) + rockmite24 = stcSvc.spawnObject('rockmite', 'tatooine', long(0), float(3752), float(5), float(-4645), float(0), float(0), float(0), float(0), 30) + rockmite25 = stcSvc.spawnObject('rockmite', 'tatooine', long(0), float(3761), float(5), float(-4644), float(0), float(0), float(0), float(0), 30) + rockmite26 = stcSvc.spawnObject('rockmite', 'tatooine', long(0), float(3762), float(5), float(-4654), float(0), float(0), float(0), float(0), 30) + rockmite27 = stcSvc.spawnObject('rockmite', 'tatooine', long(0), float(3732), float(5), float(-4664), float(0), float(0), float(0), float(0), 30) + rockmite28 = stcSvc.spawnObject('rockmite', 'tatooine', long(0), float(3741), float(5), float(-4663), float(0), float(0), float(0), float(0), 30) + rockmite29 = stcSvc.spawnObject('rockmite', 'tatooine', long(0), float(3752), float(5), float(-4659), float(0), float(0), float(0), float(0), 30) + rockmite210 = stcSvc.spawnObject('rockmite', 'tatooine', long(0), float(3769), float(5), float(-4650), float(0), float(0), float(0), float(0), 30) + rockmite211 = stcSvc.spawnObject('rockmite', 'tatooine', long(0), float(3778), float(5), float(-4647), float(0), float(0), float(0), float(0), 30) + + + + return \ No newline at end of file diff --git a/scripts/static_spawns/tatooine/mos_eisley_scavenger.py b/scripts/static_spawns/tatooine/mos_eisley_scavenger.py new file mode 100644 index 00000000..0de1c0b5 --- /dev/null +++ b/scripts/static_spawns/tatooine/mos_eisley_scavenger.py @@ -0,0 +1,35 @@ +import sys +# Project SWG: Mos Eisley scavenger: Static Spawns +# (C)2014 ProjectSWG + + + +from resources.datatables import Options +from resources.datatables import State + +def addPlanetSpawns(core, planet): + + + stcSvc = core.staticService + objSvc = core.objectService + + + #Enforcers + + scavenger = stcSvc.spawnObject('scavenger', 'tatooine', long(0), float(3102), float(9), float(-4951), float(0), float(0), float(0), float(0), 30) + scavenger1 = stcSvc.spawnObject('scavenger', 'tatooine', long(0), float(3110), float(8), float(-4952), float(0), float(0), float(0), float(0), 30) + scavenger2 = stcSvc.spawnObject('scavenger', 'tatooine', long(0), float(3109), float(7), float(-4961), float(0), float(0), float(0), float(0), 30) + scavenger3 = stcSvc.spawnObject('scavenger', 'tatooine', long(0), float(3096), float(9), float(-4938), float(0), float(0), float(0), float(0), 30) + scavenger4 = stcSvc.spawnObject('scavenger', 'tatooine', long(0), float(3080), float(11), float(-4942), float(0), float(0), float(0), float(0), 30) + scavenger5 = stcSvc.spawnObject('scavenger', 'tatooine', long(0), float(3089), float(10), float(-4961), float(0), float(0), float(0), float(0), 30) + scavenger6 = stcSvc.spawnObject('scavenger', 'tatooine', long(0), float(3106), float(7), float(-4969), float(0), float(0), float(0), float(0), 30) + scavenger7 = stcSvc.spawnObject('scavenger', 'tatooine', long(0), float(3100), float(8), float(-4973), float(0), float(0), float(0), float(0), 30) + scavenger8 = stcSvc.spawnObject('scavenger', 'tatooine', long(0), float(3067), float(9), float(-4932), float(0), float(0), float(0), float(0), 30) + scavenger9 = stcSvc.spawnObject('scavenger', 'tatooine', long(0), float(3061), float(6), float(-4951), float(0), float(0), float(0), float(0), 30) + scavenger10 = stcSvc.spawnObject('scavenger', 'tatooine', long(0), float(3077), float(3), float(-4961), float(0), float(0), float(0), float(0), 30) + scavenger11 = stcSvc.spawnObject('scavenger', 'tatooine', long(0), float(3071), float(3), float(-4971), float(0), float(0), float(0), float(0), 30) + scavenger12 = stcSvc.spawnObject('scavenger', 'tatooine', long(0), float(3047), float(7), float(-4957), float(0), float(0), float(0), float(0), 30) + + + return + diff --git a/scripts/static_spawns/tatooine/mos_eisley_shinn_bunker.py b/scripts/static_spawns/tatooine/mos_eisley_shinn_bunker.py new file mode 100644 index 00000000..4add2ca5 --- /dev/null +++ b/scripts/static_spawns/tatooine/mos_eisley_shinn_bunker.py @@ -0,0 +1,67 @@ +import sys +# Project SWG: Mos Eisley Shinn bunker: Static Spawns +# (C)2014 ProjectSWG + + + +from resources.datatables import Options +from resources.datatables import State + +def addPlanetSpawns(core, planet): + + + stcSvc = core.staticService + objSvc = core.objectService + + building = core.objectService.getObject(long(-466404038086555772)) + + # Shinn Mugger outisde + + shinn_mugger = stcSvc.spawnObject('shinn_mugger', 'tatooine', long(0), float(3410), float(8), float(-5461), float(0), float(0), float(0), float(0), 30) + shinn_mugger1 = stcSvc.spawnObject('shinn_mugger', 'tatooine', long(0), float(3432), float(9), float(-5445), float(0), float(0), float(0), float(0), 30) + shinn_mugger2 = stcSvc.spawnObject('shinn_mugger', 'tatooine', long(0), float(3464), float(10), float(-5430), float(0), float(0), float(0), float(0), 30) + shinn_mugger3 = stcSvc.spawnObject('shinn_mugger', 'tatooine', long(0), float(3457), float(12), float(-5419), float(0), float(0), float(0), float(0), 30) + shinn_mugger4 = stcSvc.spawnObject('shinn_mugger', 'tatooine', long(0), float(3431), float(6), float(-5427), float(0), float(0), float(0), float(0), 30) + shinn_mugger5 = stcSvc.spawnObject('shinn_mugger', 'tatooine', long(0), float(3405), float(6), float(-5434), float(0), float(0), float(0), float(0), 30) + shinn_mugger6 = stcSvc.spawnObject('shinn_mugger', 'tatooine', long(0), float(3398), float(5), float(-5459), float(0), float(0), float(0), float(0), 30) + shinn_mugger7 = stcSvc.spawnObject('shinn_mugger', 'tatooine', long(0), float(3394), float(7), float(-5483), float(0), float(0), float(0), float(0), 30) + shinn_mugger8 = stcSvc.spawnObject('shinn_mugger', 'tatooine', long(0), float(3417), float(8), float(-5491), float(0), float(0), float(0), float(0), 30) + shinn_mugger9 = stcSvc.spawnObject('shinn_mugger', 'tatooine', long(0), float(3439), float(9), float(-5482), float(0), float(0), float(0), float(0), 30) + shinn_mugger10 = stcSvc.spawnObject('shinn_mugger', 'tatooine', long(0), float(3447), float(9), float(-5462), float(0), float(0), float(0), float(0), 30) + shinn_mugger11 = stcSvc.spawnObject('shinn_mugger', 'tatooine', long(0), float(3429), float(7), float(-5473), float(0), float(0), float(0), float(0), 30) + shinn_mugger12 = stcSvc.spawnObject('shinn_mugger', 'tatooine', long(0), float(3449), float(10), float(-5504), float(0), float(0), float(0), float(0), 30) + shinn_mugger13 = stcSvc.spawnObject('shinn_mugger', 'tatooine', long(0), float(3415), float(7), float(-5501), float(0), float(0), float(0), float(0), 30) + shinn_mugger14 = stcSvc.spawnObject('shinn_mugger', 'tatooine', long(0), float(3392), float(7), float(-5489), float(0), float(0), float(0), float(0), 30) + shinn_mugger15 = stcSvc.spawnObject('shinn_mugger', 'tatooine', long(0), float(3380), float(5), float(-5465), float(0), float(0), float(0), float(0), 30) + shinn_mugger16 = stcSvc.spawnObject('shinn_mugger', 'tatooine', long(0), float(3394), float(4), float(-5456), float(0), float(0), float(0), float(0), 30) + + + #shinn Guards outside bunker + shinn_guard_o1 = stcSvc.spawnObject('shinn_guard', 'tatooine', long(0), float(3417), float(7), float(-5461), float(0), float(0), float(0), float(0), 30) + shinn_guard_o2 = stcSvc.spawnObject('shinn_guard', 'tatooine', long(0), float(3423), float(7), float(-5461), float(0), float(0), float(0), float(0), 30) + + # Shinn Guards in Bunker + shinn_guard = stcSvc.spawnObject('shinn_guard', 'tatooine', building.getCellByCellNumber(long(1)), float(-3.3), float(0.3), float(3.6), float(0), float(0), float(0), float(0), 30) + shinn_guard1 = stcSvc.spawnObject('shinn_guard', 'tatooine', building.getCellByCellNumber(long(3)), float(2.9), float(0.3), float(-4.0), float(0), float(0), float(0), float(0), 30) + shinn_guard2 = stcSvc.spawnObject('shinn_guard', 'tatooine', building.getCellByCellNumber(long(4)), float(3.8), float(-3.3), float(4.8), float(0), float(0), float(0), float(0), 30) + shinn_guard3 = stcSvc.spawnObject('shinn_guard', 'tatooine', building.getCellByCellNumber(long(5)), float(-4.4), float(-10.3), float(-6.1), float(0), float(0), float(0), float(0), 30) + shinn_guard4 = stcSvc.spawnObject('shinn_guard', 'tatooine', building.getCellByCellNumber(long(7)), float(5.3), float(-13.8), float(6.6), float(0), float(0), float(0), float(0), 30) + shinn_guard5 = stcSvc.spawnObject('shinn_guard', 'tatooine', building.getCellByCellNumber(long(7)), float(-2.1), float(-13.8), float(6.8), float(0), float(0), float(0), float(0), 30) + shinn_guard6 = stcSvc.spawnObject('shinn_guard', 'tatooine', building.getCellByCellNumber(long(7)), float(-6.8), float(-13.8), float(6.7), float(0), float(0), float(0), float(0), 30) + shinn_guard7 = stcSvc.spawnObject('shinn_guard', 'tatooine', building.getCellByCellNumber(long(8)), float(1.5), float(-20.8), float(-3.5), float(0), float(0), float(0), float(0), 30) + shinn_guard8 = stcSvc.spawnObject('shinn_guard', 'tatooine', building.getCellByCellNumber(long(9)), float(-1.0), float(-20.7), float(11.0), float(0), float(0), float(0), float(0), 30) + shinn_guard9 = stcSvc.spawnObject('shinn_guard', 'tatooine', building.getCellByCellNumber(long(9)), float(3.6), float(-20.7), float(11.4), float(0), float(0), float(0), float(0), 30) + shinn_guard10 = stcSvc.spawnObject('shinn_guard', 'tatooine', building.getCellByCellNumber(long(9)), float(1.6), float(-20.7), float(4.7), float(0), float(0), float(0), float(0), 30) + shinn_guard11 = stcSvc.spawnObject('shinn_guard', 'tatooine', building.getCellByCellNumber(long(10)), float(-1.6), float(-20.8), float(23.4), float(0), float(0), float(0), float(0), 30) + shinn_guard12 = stcSvc.spawnObject('shinn_guard', 'tatooine', building.getCellByCellNumber(long(10)), float(4.6), float(-20.8), float(23.4), float(0), float(0), float(0), float(0), 30) + + #temp until cellbycellname is fixed + + + + # Vaigonn Shinn + vaigonn_shinn = stcSvc.spawnObject('vaigon_shinn', 'tatooine', building.getCellByCellNumber(long(10)), float(1.7), float(-20.8), float(29.7), float(-1), float(0), float(0), float(0), 30) + + return + + diff --git a/scripts/static_spawns/tatooine/mos_eisley_swoop_gang.py b/scripts/static_spawns/tatooine/mos_eisley_swoop_gang.py new file mode 100644 index 00000000..734e756d --- /dev/null +++ b/scripts/static_spawns/tatooine/mos_eisley_swoop_gang.py @@ -0,0 +1,41 @@ +import sys +# Project SWG: Mos Eisley Swoop gang: Static Spawns +# (C)2014 ProjectSWG + + + +from resources.datatables import Options +from resources.datatables import State + +def addPlanetSpawns(core, planet): + + + stcSvc = core.staticService + objSvc = core.objectService + + + #Enforcers + + swoop_gang_enforcer = stcSvc.spawnObject('swoop_gang_enforcer', 'tatooine', long(0), float(3183), float(5), float(-4786), float(0), float(0), float(0), float(0), 30) + swoop_gang_enforcer1 = stcSvc.spawnObject('swoop_gang_enforcer', 'tatooine', long(0), float(3208), float(5), float(-4824), float(0), float(0), float(0), float(0), 30) + + #Punk + + swoop_gang_punk = stcSvc.spawnObject('swoop_gang_punk', 'tatooine', long(0), float(3194), float(5), float(-4839), float(0), float(0), float(0), float(0), 30) + swoop_gang_punk1 = stcSvc.spawnObject('swoop_gang_punk', 'tatooine', long(0), float(3167), float(5), float(-4795), float(0), float(0), float(0), float(0), 30) + swoop_gang_punk2 = stcSvc.spawnObject('swoop_gang_punk', 'tatooine', long(0), float(3207), float(5), float(-4808), float(0), float(0), float(0), float(0), 30) + swoop_gang_punk3 = stcSvc.spawnObject('swoop_gang_punk', 'tatooine', long(0), float(3149), float(5), float(-4816), float(0), float(0), float(0), float(0), 30) + + #Rogue + + swoop_gang_rogue = stcSvc.spawnObject('swoop_gang_rogue', 'tatooine', long(0), float(3151), float(5), float(-4802), float(0), float(0), float(0), float(0), 30) + swoop_gang_rogue1 = stcSvc.spawnObject('swoop_gang_rogue', 'tatooine', long(0), float(3199), float(5), float(-4799), float(0), float(0), float(0), float(0), 30) + swoop_gang_rogue2 = stcSvc.spawnObject('swoop_gang_rogue', 'tatooine', long(0), float(3180), float(5), float(-4811), float(0), float(0), float(0), float(0), 30) + #thug + + swoop_gang_thug = stcSvc.spawnObject('swoop_gang_thug', 'tatooine', long(0), float(3220), float(5), float(-4800), float(0), float(0), float(0), float(0), 30) + swoop_gang_thug1 = stcSvc.spawnObject('swoop_gang_thug', 'tatooine', long(0), float(3169), float(5), float(-4823), float(0), float(0), float(0), float(0), 30) + swoop_gang_thug2 = stcSvc.spawnObject('swoop_gang_thug', 'tatooine', long(0), float(3168), float(5), float(-4773), float(0), float(0), float(0), float(0), 30) + + return + diff --git a/scripts/static_spawns/tatooine/mos_eisley_tempest_rills.py b/scripts/static_spawns/tatooine/mos_eisley_tempest_rills.py new file mode 100644 index 00000000..e44369e0 --- /dev/null +++ b/scripts/static_spawns/tatooine/mos_eisley_tempest_rills.py @@ -0,0 +1,44 @@ +import sys +# Project SWG: MosEisley Tempest Rills: Static Spawns +# (C)2014 ProjectSWG + + + +from resources.datatables import Options +from resources.datatables import State + +def addPlanetSpawns(core, planet): + + + stcSvc = core.staticService + objSvc = core.objectService + + # Tempest rills + tempest_rill1 = stcSvc.spawnObject('tempest_rill', 'tatooine', long(0), float(3716), float(5), float(-4602), float(0), float(0), float(0), float(0), 30) + tempest_rill2 = stcSvc.spawnObject('tempest_rill', 'tatooine', long(0), float(3701), float(5), float(-4649), float(0), float(0), float(0), float(0), 30) + tempest_rill3 = stcSvc.spawnObject('tempest_rill', 'tatooine', long(0), float(3741), float(5), float(-4651), float(0), float(0), float(0), float(0), 30) + tempest_rill4 = stcSvc.spawnObject('tempest_rill', 'tatooine', long(0), float(3668), float(5), float(-4597), float(0), float(0), float(0), float(0), 30) + tempest_rill5 = stcSvc.spawnObject('tempest_rill', 'tatooine', long(0), float(3695), float(5), float(-4613), float(0), float(0), float(0), float(0), 30) + tempest_rill6 = stcSvc.spawnObject('tempest_rill', 'tatooine', long(0), float(3678), float(5), float(-4613), float(0), float(0), float(0), float(0), 30) + tempest_rill7 = stcSvc.spawnObject('tempest_rill', 'tatooine', long(0), float(3718), float(5), float(-4651), float(0), float(0), float(0), float(0), 30) + tempest_rill8 = stcSvc.spawnObject('tempest_rill', 'tatooine', long(0), float(3737), float(5), float(-4633), float(0), float(0), float(0), float(0), 30) + tempest_rill9 = stcSvc.spawnObject('tempest_rill', 'tatooine', long(0), float(3692), float(5), float(-4621), float(0), float(0), float(0), float(0), 30) + tempest_rill10 = stcSvc.spawnObject('tempest_rill', 'tatooine', long(0), float(3695), float(5), float(-4646), float(0), float(0), float(0), float(0), 30) + tempest_rill11 = stcSvc.spawnObject('tempest_rill', 'tatooine', long(0), float(3795), float(5), float(-4647), float(0), float(0), float(0), float(0), 30) + tempest_rill12 = stcSvc.spawnObject('tempest_rill', 'tatooine', long(0), float(3716), float(5), float(-4613), float(0), float(0), float(0), float(0), 30) + tempest_rill13 = stcSvc.spawnObject('tempest_rill', 'tatooine', long(0), float(3704), float(5), float(-4624), float(0), float(0), float(0), float(0), 30) + tempest_rill14 = stcSvc.spawnObject('tempest_rill', 'tatooine', long(0), float(3687), float(5), float(-4600), float(0), float(0), float(0), float(0), 30) + + + + # Tempest rills + tempest_rill4 = stcSvc.spawnObject('tempest_rill', 'tatooine', long(0), float(3875), float(48), float(-5068), float(0), float(0), float(0), float(0), 30) + tempest_rill41 = stcSvc.spawnObject('tempest_rill', 'tatooine', long(0), float(3855), float(45), float(-5048), float(0), float(0), float(0), float(0), 30) + tempest_rill42 = stcSvc.spawnObject('tempest_rill', 'tatooine', long(0), float(3865), float(45), float(-5058), float(0), float(0), float(0), float(0), 30) + tempest_rill43 = stcSvc.spawnObject('tempest_rill', 'tatooine', long(0), float(3885), float(56), float(-5088), float(0), float(0), float(0), float(0), 30) + tempest_rill44 = stcSvc.spawnObject('tempest_rill', 'tatooine', long(0), float(3892), float(58), float(-5078), float(0), float(0), float(0), float(0), 30) + tempest_rill45 = stcSvc.spawnObject('tempest_rill', 'tatooine', long(0), float(3860), float(44), float(-5043), float(0), float(0), float(0), float(0), 30) + + + return + diff --git a/scripts/static_spawns/tatooine/mos_eisley_toggi_bok.py b/scripts/static_spawns/tatooine/mos_eisley_toggi_bok.py new file mode 100644 index 00000000..6c172aa7 --- /dev/null +++ b/scripts/static_spawns/tatooine/mos_eisley_toggi_bok.py @@ -0,0 +1,39 @@ +import sys +# Project SWG: Mos Eisley Toogi Bok's place: Static Spawns +# (C)2014 ProjectSWG + + + +from resources.datatables import Options +from resources.datatables import State + +def addPlanetSpawns(core, planet): + + + stcSvc = core.staticService + objSvc = core.objectService + + + # Thiefs + + thiefs = stcSvc.spawnObject('thief', 'tatooine', long(0), float(2780), float(6), float(-4579), float(0), float(0), float(0), float(0), 30) + thiefs1 = stcSvc.spawnObject('thief', 'tatooine', long(0), float(2781), float(6), float(-4604), float(0), float(0), float(0), float(0), 30) + thiefs2 = stcSvc.spawnObject('thief', 'tatooine', long(0), float(2732), float(9), float(-4619), float(0), float(0), float(0), float(0), 30) + thiefs3 = stcSvc.spawnObject('thief', 'tatooine', long(0), float(2717), float(11), float(-4594), float(0), float(0), float(0), float(0), 30) + thiefs4 = stcSvc.spawnObject('thief', 'tatooine', long(0), float(2733), float(7), float(-4563), float(0), float(0), float(0), float(0), 30) + thiefs5 = stcSvc.spawnObject('thief', 'tatooine', long(0), float(2762), float(7), float(-4535), float(0), float(0), float(0), float(0), 30) + thiefs6 = stcSvc.spawnObject('thief', 'tatooine', long(0), float(2793), float(7), float(-4554), float(0), float(0), float(0), float(0), 30) + thiefs7 = stcSvc.spawnObject('thief', 'tatooine', long(0), float(2771), float(6), float(-4594), float(0), float(0), float(0), float(0), 30) + thiefs8 = stcSvc.spawnObject('thief', 'tatooine', long(0), float(2763), float(7), float(-4623), float(0), float(0), float(0), float(0), 30) + thiefs9 = stcSvc.spawnObject('thief', 'tatooine', long(0), float(2809), float(8), float(-4562), float(0), float(0), float(0), float(0), 30) + thiefs10 = stcSvc.spawnObject('thief', 'tatooine', long(0), float(2807), float(7), float(-4592), float(0), float(0), float(0), float(0), 30) + thiefs11 = stcSvc.spawnObject('thief', 'tatooine', long(0), float(2793), float(6), float(-4622), float(0), float(0), float(0), float(0), 30) + thiefs12 = stcSvc.spawnObject('thief', 'tatooine', long(0), float(2748), float(7), float(-4593), float(0), float(0), float(0), float(0), 30) + thiefs13 = stcSvc.spawnObject('thief', 'tatooine', long(0), float(2708), float(11), float(-4566), float(0), float(0), float(0), float(0), 30) + thiefs14 = stcSvc.spawnObject('thief', 'tatooine', long(0), float(2742), float(9), float(-4541), float(0), float(0), float(0), float(0), 30) + thiefs15 = stcSvc.spawnObject('thief', 'tatooine', long(0), float(2786), float(7), float(-4535), float(0), float(0), float(0), float(0), 30) + thiefs16 = stcSvc.spawnObject('thief', 'tatooine', long(0), float(2803), float(6), float(-4578), float(0), float(0), float(0), float(0), 30) + thiefs17 = stcSvc.spawnObject('thief', 'tatooine', long(0), float(2800), float(6), float(-4619), float(0), float(0), float(0), float(0), 30) + + return + diff --git a/scripts/static_spawns/tatooine/mos_eisley_tusken_soldiers.py b/scripts/static_spawns/tatooine/mos_eisley_tusken_soldiers.py new file mode 100644 index 00000000..98e25c41 --- /dev/null +++ b/scripts/static_spawns/tatooine/mos_eisley_tusken_soldiers.py @@ -0,0 +1,51 @@ +import sys +# Project SWG: Moseisley Tusken soldiers: Static Spawns +# (C)2014 ProjectSWG + + + +from resources.datatables import Options +from resources.datatables import State + +def addPlanetSpawns(core, planet): + + + stcSvc = core.staticService + objSvc = core.objectService + + # Tusken Solders + soldiers = stcSvc.spawnObject('tusken_soldier', 'tatooine', long(0), float(4168), float(8), float(-4735), float(0), float(0), float(0), float(0), 45) + soldiers1 = stcSvc.spawnObject('tusken_soldier', 'tatooine', long(0), float(4170), float(8), float(-4731), float(0), float(0), float(0), float(0), 45) + soldiers11 = stcSvc.spawnObject('tusken_soldier', 'tatooine', long(0), float(4172), float(8), float(-4727), float(0), float(0), float(0), float(0), 45) + soldiers12 = stcSvc.spawnObject('tusken_soldier', 'tatooine', long(0), float(4174), float(8), float(-4723), float(0), float(0), float(0), float(0), 45) + soldiers13 = stcSvc.spawnObject('tusken_soldier', 'tatooine', long(0), float(4176), float(8), float(-4719), float(0), float(0), float(0), float(0), 45) + soldiers14 = stcSvc.spawnObject('tusken_soldier', 'tatooine', long(0), float(4178), float(8), float(-4739), float(0), float(0), float(0), float(0), 45) + soldiers15 = stcSvc.spawnObject('tusken_soldier', 'tatooine', long(0), float(4176), float(8), float(-4743), float(0), float(0), float(0), float(0), 45) + + + soldiers2 = stcSvc.spawnObject('tusken_soldier', 'tatooine', long(0), float(4162), float(8), float(-4735), float(0), float(0), float(0), float(0), 45) + soldiers25 = stcSvc.spawnObject('tusken_soldier', 'tatooine', long(0), float(4168), float(8), float(-4739), float(0), float(0), float(0), float(0), 45) + soldiers26 = stcSvc.spawnObject('tusken_soldier', 'tatooine', long(0), float(4166), float(8), float(-4743), float(0), float(0), float(0), float(0), 45) + soldiers27 = stcSvc.spawnObject('tusken_soldier', 'tatooine', long(0), float(4164), float(8), float(-4747), float(0), float(0), float(0), float(0), 45) + soldiers28 = stcSvc.spawnObject('tusken_soldier', 'tatooine', long(0), float(4162), float(8), float(-4751), float(0), float(0), float(0), float(0), 45) + soldiers29 = stcSvc.spawnObject('tusken_soldier', 'tatooine', long(0), float(4160), float(8), float(-4756), float(0), float(0), float(0), float(0), 45) + + + soldiers3 = stcSvc.spawnObject('tusken_soldier', 'tatooine', long(0), float(4158), float(8), float(-4735), float(0), float(0), float(0), float(0), 45) + soldiers31 = stcSvc.spawnObject('tusken_soldier', 'tatooine', long(0), float(4160), float(8), float(-4731), float(0), float(0), float(0), float(0), 45) + soldiers32 = stcSvc.spawnObject('tusken_soldier', 'tatooine', long(0), float(4162), float(8), float(-4727), float(0), float(0), float(0), float(0), 45) + soldiers33 = stcSvc.spawnObject('tusken_soldier', 'tatooine', long(0), float(4164), float(8), float(-4723), float(0), float(0), float(0), float(0), 45) + soldiers38 = stcSvc.spawnObject('tusken_soldier', 'tatooine', long(0), float(4158), float(8), float(-4751), float(0), float(0), float(0), float(0), 45) + soldiers39 = stcSvc.spawnObject('tusken_soldier', 'tatooine', long(0), float(4156), float(8), float(-4756), float(0), float(0), float(0), float(0), 45) + + soldiers4 = stcSvc.spawnObject('tusken_soldier', 'tatooine', long(0), float(4154), float(8), float(-4735), float(0), float(0), float(0), float(0), 45) + soldiers41 = stcSvc.spawnObject('tusken_soldier', 'tatooine', long(0), float(4156), float(8), float(-4731), float(0), float(0), float(0), float(0), 45) + soldiers42 = stcSvc.spawnObject('tusken_soldier', 'tatooine', long(0), float(4158), float(8), float(-4727), float(0), float(0), float(0), float(0), 45) + soldiers47 = stcSvc.spawnObject('tusken_soldier', 'tatooine', long(0), float(4152), float(8), float(-4747), float(0), float(0), float(0), float(0), 45) + soldiers48 = stcSvc.spawnObject('tusken_soldier', 'tatooine', long(0), float(4156), float(8), float(-4751), float(0), float(0), float(0), float(0), 45) + soldiers49 = stcSvc.spawnObject('tusken_soldier', 'tatooine', long(0), float(4158), float(8), float(-4756), float(0), float(0), float(0), float(0), 45) + + + + return + diff --git a/scripts/static_spawns/tatooine/mos_eisley_tusken_warriors.py b/scripts/static_spawns/tatooine/mos_eisley_tusken_warriors.py new file mode 100644 index 00000000..c051b473 --- /dev/null +++ b/scripts/static_spawns/tatooine/mos_eisley_tusken_warriors.py @@ -0,0 +1,27 @@ +import sys +# Project SWG: Moseisley Tusken warriors: Static Spawns +# (C)2014 ProjectSWG + + + +from resources.datatables import Options +from resources.datatables import State + +def addPlanetSpawns(core, planet): + + + stcSvc = core.staticService + objSvc = core.objectService + + # Tusken Warriors + warrior = stcSvc.spawnObject('tusken_warrior', 'tatooine', long(0), float(4288), float(8), float(-4729), float(0), float(0), float(0), float(0), 45) + warrior1 = stcSvc.spawnObject('tusken_warrior', 'tatooine', long(0), float(4290), float(8), float(-4725), float(0), float(0), float(0), float(0), 45) + warrior2 = stcSvc.spawnObject('tusken_warrior', 'tatooine', long(0), float(4292), float(8), float(-4721), float(0), float(0), float(0), float(0), 45) + warrior3 = stcSvc.spawnObject('tusken_warrior', 'tatooine', long(0), float(4290), float(8), float(-4717), float(0), float(0), float(0), float(0), 45) + warrior4 = stcSvc.spawnObject('tusken_warrior', 'tatooine', long(0), float(4288), float(8), float(-4713), float(0), float(0), float(0), float(0), 45) + warrior5 = stcSvc.spawnObject('tusken_warrior', 'tatooine', long(0), float(4290), float(8), float(-4733), float(0), float(0), float(0), float(0), 45) + warrior6 = stcSvc.spawnObject('tusken_warrior', 'tatooine', long(0), float(4292), float(8), float(-4737), float(0), float(0), float(0), float(0), 45) + warrior8 = stcSvc.spawnObject('tusken_warrior', 'tatooine', long(0), float(4290), float(8), float(-4741), float(0), float(0), float(0), float(0), 45) + warrior9 = stcSvc.spawnObject('tusken_warrior', 'tatooine', long(0), float(4288), float(8), float(-4745), float(0), float(0), float(0), float(0), 45) + warrior0 = stcSvc.spawnObject('tusken_warrior', 'tatooine', long(0), float(4286), float(8), float(-4749), float(0), float(0), float(0), float(0), 45) + \ No newline at end of file diff --git a/scripts/static_spawns/tatooine/mos_eisley_tusken_zealot.py b/scripts/static_spawns/tatooine/mos_eisley_tusken_zealot.py new file mode 100644 index 00000000..007ebb35 --- /dev/null +++ b/scripts/static_spawns/tatooine/mos_eisley_tusken_zealot.py @@ -0,0 +1,80 @@ +import sys +# Project SWG: Tusken ZElaots: Static Spawns +# (C)2014 ProjectSWG + + + +from resources.datatables import Options +from resources.datatables import State + +def addPlanetSpawns(core, planet): + + + stcSvc = core.staticService + objSvc = core.objectService + + # Outside of Tusken camp + zealot = stcSvc.spawnObject('tusken_zealot', 'tatooine', long(0), float(4005), float(5), float(-4846), float(0), float(0), float(0), float(0), 45) + zealot1 = stcSvc.spawnObject('tusken_zealot', 'tatooine', long(0), float(4009), float(5), float(-4851), float(0), float(0), float(0), float(0), 45) + zealot2 = stcSvc.spawnObject('tusken_zealot', 'tatooine', long(0), float(4009), float(5), float(-4852), float(0), float(0), float(0), float(0), 45) + + # Outside of Tusken camp pt2 + + zealot3 = stcSvc.spawnObject('tusken_zealot', 'tatooine', long(0), float(4051), float(5), float(-4859), float(0), float(0), float(0), float(0), 45) + zealot4 = stcSvc.spawnObject('tusken_zealot', 'tatooine', long(0), float(4050), float(5), float(-4859), float(0), float(0), float(0), float(0), 45) + zealot5 = stcSvc.spawnObject('tusken_zealot', 'tatooine', long(0), float(4050), float(5), float(-4858), float(0), float(0), float(0), float(0), 45) + + # inside camp pt1 (behind the camp) + + zealot5 = stcSvc.spawnObject('tusken_zealot', 'tatooine', long(0), float(4076), float(5), float(-4812), float(0), float(0), float(0), float(0), 45) + zealot6 = stcSvc.spawnObject('tusken_zealot', 'tatooine', long(0), float(4075), float(5), float(-4812), float(0), float(0), float(0), float(0), 45) + zealot7 = stcSvc.spawnObject('tusken_zealot', 'tatooine', long(0), float(4074), float(5), float(-4812), float(0), float(0), float(0), float(0), 45) + + # inside camp p2 (coming from starport) + + zealot8 = stcSvc.spawnObject('tusken_zealot', 'tatooine', long(0), float(3991), float(5), float(-4794), float(0), float(0), float(0), float(0), 45) + zealot9 = stcSvc.spawnObject('tusken_zealot', 'tatooine', long(0), float(3995), float(5), float(-4788), float(0), float(0), float(0), float(0), 45) + zealot10 = stcSvc.spawnObject('tusken_zealot', 'tatooine', long(0), float(3993), float(5), float(-4794), float(0), float(0), float(0), float(0), 45) + zealot11 = stcSvc.spawnObject('tusken_zealot', 'tatooine', long(0), float(3992), float(5), float(-4812), float(0), float(0), float(0), float(0), 45) + zealot12 = stcSvc.spawnObject('tusken_zealot', 'tatooine', long(0), float(3997), float(5), float(-4812), float(0), float(0), float(0), float(0), 45) + zealot12 = stcSvc.spawnObject('tusken_zealot', 'tatooine', long(0), float(4010), float(5), float(-4811), float(0), float(0), float(0), float(0), 45) + zealot13 = stcSvc.spawnObject('tusken_zealot', 'tatooine', long(0), float(4014), float(5), float(-4811), float(0), float(0), float(0), float(0), 45) + zealot14 = stcSvc.spawnObject('tusken_zealot', 'tatooine', long(0), float(4010), float(5), float(-4795), float(0), float(0), float(0), float(0), 45) + zealot15 = stcSvc.spawnObject('tusken_zealot', 'tatooine', long(0), float(4013), float(5), float(-4793), float(0), float(0), float(0), float(0), 45) + zealot16 = stcSvc.spawnObject('tusken_zealot', 'tatooine', long(0), float(4005), float(5), float(-4783), float(0), float(0), float(0), float(0), 45) + + # inside camp pt3 (2nd from starport + + zealot17 = stcSvc.spawnObject('tusken_zealot', 'tatooine', long(0), float(4009), float(5), float(-4758), float(0), float(0), float(0), float(0), 45) + zealot18 = stcSvc.spawnObject('tusken_zealot', 'tatooine', long(0), float(4010), float(5), float(-4759), float(0), float(0), float(0), float(0), 45) + zealot19 = stcSvc.spawnObject('tusken_zealot', 'tatooine', long(0), float(4028), float(5), float(-4767), float(0), float(0), float(0), float(0), 45) + zealot20 = stcSvc.spawnObject('tusken_zealot', 'tatooine', long(0), float(4020), float(5), float(-4766), float(0), float(0), float(0), float(0), 45) + zealot21 = stcSvc.spawnObject('tusken_zealot', 'tatooine', long(0), float(4038), float(5), float(-4736), float(0), float(0), float(0), float(0), 45) + zealot22 = stcSvc.spawnObject('tusken_zealot', 'tatooine', long(0), float(4033), float(5), float(-4743), float(0), float(0), float(0), float(0), 45) + zealot23 = stcSvc.spawnObject('tusken_zealot', 'tatooine', long(0), float(4048), float(5), float(-4767), float(0), float(0), float(0), float(0), 45) + zealot24 = stcSvc.spawnObject('tusken_zealot', 'tatooine', long(0), float(4039), float(5), float(-4767), float(0), float(0), float(0), float(0), 45) + zealot25 = stcSvc.spawnObject('tusken_zealot', 'tatooine', long(0), float(4056), float(5), float(-4787), float(0), float(0), float(0), float(0), 45) + zealot26 = stcSvc.spawnObject('tusken_zealot', 'tatooine', long(0), float(4047), float(5), float(-4787), float(0), float(0), float(0), float(0), 45) + zealot27 = stcSvc.spawnObject('tusken_zealot', 'tatooine', long(0), float(4044), float(5), float(-4807), float(0), float(0), float(0), float(0), 45) + zealot28 = stcSvc.spawnObject('tusken_zealot', 'tatooine', long(0), float(4049), float(5), float(-4807), float(0), float(0), float(0), float(0), 45) + zealot29 = stcSvc.spawnObject('tusken_zealot', 'tatooine', long(0), float(4065), float(5), float(-4774), float(0), float(0), float(0), float(0), 45) + zealot30 = stcSvc.spawnObject('tusken_zealot', 'tatooine', long(0), float(4063), float(5), float(-4767), float(0), float(0), float(0), float(0), 45) + zealot31 = stcSvc.spawnObject('tusken_zealot', 'tatooine', long(0), float(4074), float(5), float(-4755), float(0), float(0), float(0), float(0), 45) + zealot32 = stcSvc.spawnObject('tusken_zealot', 'tatooine', long(0), float(4065), float(5), float(-4755), float(0), float(0), float(0), float(0), 45) + zealot33 = stcSvc.spawnObject('tusken_zealot', 'tatooine', long(0), float(4065), float(5), float(-4743), float(0), float(0), float(0), float(0), 45) + zealot34 = stcSvc.spawnObject('tusken_zealot', 'tatooine', long(0), float(4070), float(5), float(-4743), float(0), float(0), float(0), float(0), 45) + zealot35 = stcSvc.spawnObject('tusken_zealot', 'tatooine', long(0), float(4094), float(5), float(-4747), float(0), float(0), float(0), float(0), 45) + zealot36 = stcSvc.spawnObject('tusken_zealot', 'tatooine', long(0), float(4102), float(5), float(-4753), float(0), float(0), float(0), float(0), 45) + zealot37 = stcSvc.spawnObject('tusken_zealot', 'tatooine', long(0), float(4093), float(5), float(-4771), float(0), float(0), float(0), float(0), 45) + zealot38 = stcSvc.spawnObject('tusken_zealot', 'tatooine', long(0), float(4080), float(5), float(-4766), float(0), float(0), float(0), float(0), 45) + zealot39 = stcSvc.spawnObject('tusken_zealot', 'tatooine', long(0), float(4083), float(5), float(-4787), float(0), float(0), float(0), float(0), 45) + zealot40 = stcSvc.spawnObject('tusken_zealot', 'tatooine', long(0), float(4094), float(5), float(-4783), float(0), float(0), float(0), float(0), 45) + zealot41 = stcSvc.spawnObject('tusken_zealot', 'tatooine', long(0), float(4084), float(5), float(-4801), float(0), float(0), float(0), float(0), 45) + + # inside camp pt4 terrace of the building + + zealot42 = stcSvc.spawnObject('tusken_zealot', 'tatooine', long(0), float(4081), float(8), float(-4752), float(0), float(0), float(0), float(0), 45) + zealot43 = stcSvc.spawnObject('tusken_zealot', 'tatooine', long(0), float(4078), float(8), float(-4759), float(0), float(0), float(0), float(0), 45) + zealot44 = stcSvc.spawnObject('tusken_zealot', 'tatooine', long(0), float(4086), float(8), float(-4762), float(0), float(0), float(0), float(0), 45) + + return diff --git a/scripts/static_spawns/tatooine/mos_eisley_water_thiefs.py b/scripts/static_spawns/tatooine/mos_eisley_water_thiefs.py new file mode 100644 index 00000000..b96e0594 --- /dev/null +++ b/scripts/static_spawns/tatooine/mos_eisley_water_thiefs.py @@ -0,0 +1,28 @@ +import sys +# Project SWG: water thief: Static Spawns +# (C)2014 ProjectSWG + + + +from resources.datatables import Options +from resources.datatables import State + +def addPlanetSpawns(core, planet): + + + stcSvc = core.staticService + objSvc = core.objectService + + # Outside of Tusken camp + water_thief = stcSvc.spawnObject('water_thief', 'tatooine', long(0), float(3079), float(7), float(-4370), float(0), float(0), float(0), float(0), 45) + water_thief1 = stcSvc.spawnObject('water_thief', 'tatooine', long(0), float(3075), float(8), float(-4350), float(0), float(0), float(0), float(0), 45) + water_thief2 = stcSvc.spawnObject('water_thief', 'tatooine', long(0), float(3097), float(8), float(-4350), float(0), float(0), float(0), float(0), 45) + water_thief3 = stcSvc.spawnObject('water_thief', 'tatooine', long(0), float(3094), float(6), float(-4373), float(0), float(0), float(0), float(0), 45) + water_thief4 = stcSvc.spawnObject('water_thief', 'tatooine', long(0), float(3065), float(5), float(-4377), float(0), float(0), float(0), float(0), 45) + water_thief5 = stcSvc.spawnObject('water_thief', 'tatooine', long(0), float(3057), float(6), float(-4359), float(0), float(0), float(0), float(0), 45) + water_thief6 = stcSvc.spawnObject('water_thief', 'tatooine', long(0), float(3106), float(9), float(-4350), float(0), float(0), float(0), float(0), 45) + water_thief7 = stcSvc.spawnObject('water_thief', 'tatooine', long(0), float(3086), float(9), float(-4342), float(0), float(0), float(0), float(0), 45) + water_thief8 = stcSvc.spawnObject('water_thief', 'tatooine', long(0), float(3065), float(8), float(-4348), float(0), float(0), float(0), float(0), 45) + water_thief9 = stcSvc.spawnObject('water_thief', 'tatooine', long(0), float(3054), float(5), float(-4378), float(0), float(0), float(0), float(0), 45) + + return diff --git a/scripts/static_spawns/tatooine/mos_eisley_womprats.py b/scripts/static_spawns/tatooine/mos_eisley_womprats.py new file mode 100644 index 00000000..a7bdb444 --- /dev/null +++ b/scripts/static_spawns/tatooine/mos_eisley_womprats.py @@ -0,0 +1,55 @@ +import sys +# Project SWG: MosEisley Rat Spawn: Static Spawns +# (C)2014 ProjectSWG + + + +from resources.datatables import Options +from resources.datatables import State + +def addPlanetSpawns(core, planet): + + + stcSvc = core.staticService + objSvc = core.objectService + + + # City Sewer Swamprats + city_sewer = stcSvc.spawnObject('city_sewer_swamprat', 'tatooine', long(0), float(3216), float(8), float(-4465), float(0), float(0), float(0), float(0), 30) + city_sewer1 = stcSvc.spawnObject('city_sewer_swamprat', 'tatooine', long(0), float(3212), float(8), float(-4465), float(0), float(0), float(0), float(0), 30) + city_sewer2 = stcSvc.spawnObject('city_sewer_swamprat', 'tatooine', long(0), float(3208), float(8), float(-4467), float(0), float(0), float(0), float(0), 30) + city_sewer3 = stcSvc.spawnObject('city_sewer_swamprat', 'tatooine', long(0), float(3218), float(8), float(-4463), float(0), float(0), float(0), float(0), 30) + city_sewer4 = stcSvc.spawnObject('city_sewer_swamprat', 'tatooine', long(0), float(3220), float(8), float(-4462), float(0), float(0), float(0), float(0), 30) + city_sewer5 = stcSvc.spawnObject('city_sewer_swamprat', 'tatooine', long(0), float(3224), float(8), float(-4469), float(0), float(0), float(0), float(0), 30) + city_sewer6 = stcSvc.spawnObject('city_sewer_swamprat', 'tatooine', long(0), float(3218), float(8), float(-4467), float(0), float(0), float(0), float(0), 30) + + + + # Sickly Womprats + sickly_womprat = stcSvc.spawnObject('sickly_womprat', 'tatooine', long(0), float(3115), float(9), float(-4758), float(0), float(0), float(0), float(0), 30) + sickly_womprat1 = stcSvc.spawnObject('sickly_womprat', 'tatooine', long(0), float(3111), float(9), float(-4758), float(0), float(0), float(0), float(0), 30) + sickly_womprat2 = stcSvc.spawnObject('sickly_womprat', 'tatooine', long(0), float(3103), float(9), float(-4758), float(0), float(0), float(0), float(0), 30) + sickly_womprat3 = stcSvc.spawnObject('sickly_womprat', 'tatooine', long(0), float(3115), float(9), float(-4754), float(0), float(0), float(0), float(0), 30) + sickly_womprat4 = stcSvc.spawnObject('sickly_womprat', 'tatooine', long(0), float(3115), float(9), float(-4750), float(0), float(0), float(0), float(0), 30) + sickly_womprat5 = stcSvc.spawnObject('sickly_womprat', 'tatooine', long(0), float(3117), float(9), float(-4760), float(0), float(0), float(0), float(0), 30) + sickly_womprat6 = stcSvc.spawnObject('sickly_womprat', 'tatooine', long(0), float(3121), float(9), float(-4766), float(0), float(0), float(0), float(0), 30) + + # Normal Womprats + womprat = stcSvc.spawnObject('womprat', 'tatooine', long(0), float(3587), float(56), float(-4354), float(0), float(0), float(0), float(0), 30) + womprat1 = stcSvc.spawnObject('womprat', 'tatooine', long(0), float(3583), float(56), float(-4354), float(0), float(0), float(0), float(0), 30) + womprat2 = stcSvc.spawnObject('womprat', 'tatooine', long(0), float(3579), float(56), float(-4354), float(0), float(0), float(0), float(0), 30) + womprat3 = stcSvc.spawnObject('womprat', 'tatooine', long(0), float(3587), float(56), float(-4350), float(0), float(0), float(0), float(0), 30) + womprat4 = stcSvc.spawnObject('womprat', 'tatooine', long(0), float(3587), float(56), float(-4348), float(0), float(0), float(0), float(0), 30) + womprat5 = stcSvc.spawnObject('womprat', 'tatooine', long(0), float(3587), float(56), float(-4358), float(0), float(0), float(0), float(0), 30) + womprat6 = stcSvc.spawnObject('womprat', 'tatooine', long(0), float(3590), float(56), float(-4360), float(0), float(0), float(0), float(0), 30) + + + womprat2 = stcSvc.spawnObject('womprat', 'tatooine', long(0), float(3841), float(49), float(-5072), float(0), float(0), float(0), float(0), 30) + womprat21 = stcSvc.spawnObject('womprat', 'tatooine', long(0), float(3832), float(49), float(-5072), float(0), float(0), float(0), float(0), 30) + womprat22 = stcSvc.spawnObject('womprat', 'tatooine', long(0), float(3823), float(49), float(-5072), float(0), float(0), float(0), float(0), 30) + womprat23 = stcSvc.spawnObject('womprat', 'tatooine', long(0), float(3841), float(49), float(-5068), float(0), float(0), float(0), float(0), 30) + womprat24 = stcSvc.spawnObject('womprat', 'tatooine', long(0), float(3841), float(49), float(-5060), float(0), float(0), float(0), float(0), 30) + womprat25 = stcSvc.spawnObject('womprat', 'tatooine', long(0), float(3841), float(49), float(-5056), float(0), float(0), float(0), float(0), 30) + womprat26 = stcSvc.spawnObject('womprat', 'tatooine', long(0), float(3839), float(49), float(-5082), float(0), float(0), float(0), float(0), 30) + + return diff --git a/scripts/static_spawns/tatooine/mos_eisley_worrts.py b/scripts/static_spawns/tatooine/mos_eisley_worrts.py new file mode 100644 index 00000000..f6402cf8 --- /dev/null +++ b/scripts/static_spawns/tatooine/mos_eisley_worrts.py @@ -0,0 +1,33 @@ +import sys +# Project SWG: MosEisley Worrts: Static Spawns +# (C)2014 ProjectSWG + + + +from resources.datatables import Options +from resources.datatables import State + +def addPlanetSpawns(core, planet): + + + stcSvc = core.staticService + objSvc = core.objectService + + # Tame Worrts + tame_worrt1 = stcSvc.spawnObject('tame_worrt', 'tatooine', long(0), float(3153), float(4), float(-4945), float(0), float(0), float(0), float(0), 30) + tame_worrt11 = stcSvc.spawnObject('tame_worrt', 'tatooine', long(0), float(3143), float(4), float(-4935), float(0), float(0), float(0), float(0), 30) + tame_worrt12 = stcSvc.spawnObject('tame_worrt', 'tatooine', long(0), float(3123), float(4), float(-4925), float(0), float(0), float(0), float(0), 30) + tame_worrt13 = stcSvc.spawnObject('tame_worrt', 'tatooine', long(0), float(3163), float(4), float(-4955), float(0), float(0), float(0), float(0), 30) + tame_worrt14 = stcSvc.spawnObject('tame_worrt', 'tatooine', long(0), float(3173), float(4), float(-4965), float(0), float(0), float(0), float(0), 30) + tame_worrt15 = stcSvc.spawnObject('tame_worrt', 'tatooine', long(0), float(3145), float(4), float(-4950), float(0), float(0), float(0), float(0), 30) + + # Tame Worrts + tame_worrt2 = stcSvc.spawnObject('tame_worrt', 'tatooine', long(0), float(3125), float(4), float(-4726), float(0), float(0), float(0), float(0), 30) + tame_worrt21 = stcSvc.spawnObject('tame_worrt', 'tatooine', long(0), float(3115), float(4), float(-4716), float(0), float(0), float(0), float(0), 30) + tame_worrt22 = stcSvc.spawnObject('tame_worrt', 'tatooine', long(0), float(3105), float(4), float(-4706), float(0), float(0), float(0), float(0), 30) + tame_worrt23 = stcSvc.spawnObject('tame_worrt', 'tatooine', long(0), float(3135), float(4), float(-4736), float(0), float(0), float(0), float(0), 30) + tame_worrt24 = stcSvc.spawnObject('tame_worrt', 'tatooine', long(0), float(3145), float(4), float(-4746), float(0), float(0), float(0), float(0), 30) + tame_worrt25 = stcSvc.spawnObject('tame_worrt', 'tatooine', long(0), float(3120), float(4), float(-4721), float(0), float(0), float(0), float(0), 30) + + + return \ No newline at end of file diff --git a/scripts/static_spawns/tatooine/mos_entha.py b/scripts/static_spawns/tatooine/mos_entha.py new file mode 100644 index 00000000..4686d285 --- /dev/null +++ b/scripts/static_spawns/tatooine/mos_entha.py @@ -0,0 +1,30 @@ +import sys +# Project SWG: Mos Entha: Static Spawns +# (C)2014 ProjectSWG + + + +from resources.datatables import Options +from resources.datatables import State + +def addPlanetSpawns(core, planet): + + + stcSvc = core.staticService + objSvc = core.objectService + + # TODO Check all NPCs for personalized scripting, change format. + + #Outside + ankwee = stcSvc.spawnObject('object/mobile/shared_dressed_tatooine_entha_ankwee.iff', 'tatooine', long(0), float(1351), float(5.0), float(3108), float(0.42), float(0.91)) + ankwee.setCustomName2('An\'kwee') + ankwee.setOptionsBitmask(256) + + #Junkdealer + stcSvc.spawnObject('object/mobile/shared_junk_dealer_m_01.iff', 'tatooine', long(0), float(1271), float(7.7), float(2919), float(0), float(0)) + stcSvc.spawnObject('object/mobile/shared_junk_dealer_m_01.iff', 'tatooine', long(0), float(1271), float(7.7), float(2960), float(1), float(0)) + stcSvc.spawnObject('object/mobile/shared_junk_dealer_m_01.iff', 'tatooine', long(0), float(1396), float(7), float(3026), float(0), float(0)) + stcSvc.spawnObject('object/mobile/shared_junk_dealer_m_01.iff', 'tatooine', long(0), float(1471), float(7), float(3325), float(0), float(1)) + stcSvc.spawnObject('object/mobile/shared_junk_dealer_m_01.iff', 'tatooine', long(0), float(1463), float(7), float(3126), float(0.71), float(-0.71)) + return + diff --git a/scripts/static_spawns/tatooine/mos_espa.py b/scripts/static_spawns/tatooine/mos_espa.py new file mode 100644 index 00000000..666d8b1b --- /dev/null +++ b/scripts/static_spawns/tatooine/mos_espa.py @@ -0,0 +1,76 @@ +import sys +# Project SWG: Mos Espa: Static Spawns +# (C)2014 ProjectSWG + + + +from resources.datatables import Options +from resources.datatables import State + +def addPlanetSpawns(core, planet): + + + stcSvc = core.staticService + objSvc = core.objectService + + #Wattos shop + building = core.objectService.getObject(long(-466404040703268293)) + + + # TODO Check all NPCs for personalized scripting, change format. + + # Cantina Interior + dalaSocuna = stcSvc.spawnObject('object/mobile/shared_space_rebel_tier1_tatooine_socuna.iff', 'tatooine', long(1256068), float(-28.4), float(-0.5), float(9.4), float(0.33), float(0.94)) + #dalaSocuna.setCustomName2('Commander Da\'la Socuna') + #dalaSocuna.setOptionsBitmask(256) + + #Watto's Shop ****TODO: Get Proper cells for Watto's Shop once Buildout structures are spawning as intended again. + + watto = stcSvc.spawnObject('object/mobile/shared_watto.iff', 'tatooine', building.getCellByCellNumber(2), float(4.7), float(-0.5), float(2.4), float(-0.71), float(0), float(0.70), float(0)) + #watto.setCustomName2('Watto') + #watto.setOptionsBitmask(256) + + #Exterior Uninteractable NPCs + commoner18 = stcSvc.spawnObject('object/mobile/shared_dressed_commoner_naboo_zabrak_female_02.iff', 'tatooine', long(0), float(-2915.3), float(5.0), float(2148.5), float(0), float(0)) + commoner18.setCustomName2('a Commoner') + commoner18.setOptionsBitmask(256) + + jawa10 = stcSvc.spawnObject('object/mobile/shared_jawa.iff', 'tatooine', long(0), float(-2966.3), float(5.0), float(2196.9), float(0), float(0)) + jawa10.setCustomName2('a Jawa') + jawa10.setOptionsBitmask(256) + + commoner19 = stcSvc.spawnObject('object/mobile/shared_dressed_commoner_naboo_human_male_06.iff', 'tatooine', long(0), float(-2960.4), float(5.0), float(2271.3), float(0), float(0)) + commoner19.setCustomName2('a Commoner') + commoner19.setOptionsBitmask(256) + + commoner20 = stcSvc.spawnObject('object/mobile/shared_dressed_commoner_tatooine_devaronian_male_01.iff', 'tatooine', long(0), float(-2934.3), float(5.0), float(2298.9), float(0.71), float(0.71)) + commoner20.setCustomName2('a Commoner') + commoner20.setOptionsBitmask(256) + + commoner21 = stcSvc.spawnObject('object/mobile/shared_dressed_noble_human_female_01.iff', 'tatooine', long(0), float(-2897.7), float(5.0), float(2345.4), float(0.71), float(0.71)) + commoner21.setCustomName2('a Commoner') + commoner21.setOptionsBitmask(256) + + commoner22 = stcSvc.spawnObject('object/mobile/shared_dressed_commoner_fat_twilek_male_01.iff', 'tatooine', long(0), float(-2763.8), float(5.0), float(2305.2), float(0.71), float(0.71)) + commoner22.setCustomName2('a Commoner') + commoner22.setOptionsBitmask(256) + + jawa11 = stcSvc.spawnObject('object/mobile/shared_jawa.iff', 'tatooine', long(0), float(-2936.8), float(5.0), float(2078.4), float(0.95105), float(0.3090)) + jawa11.setCustomName2('a Jawa') + jawa11.setOptionsBitmask(256) + + businessman4 = stcSvc.spawnObject('object/mobile/shared_dressed_commoner_tatooine_trandoshan_male_02.iff', 'tatooine', long(0), float(-2914.2), float(5.0), float(2022.4), float(0), float(0)) + businessman4.setCustomName2('a Businessman') + businessman4.setOptionsBitmask(256) + + commoner23 = stcSvc.spawnObject('object/mobile/shared_dressed_commoner_naboo_moncal_male_01.iff', 'tatooine', long(0), float(-2904.1), float(5.0), float(1965.3), float(0.71), float(0.71)) + commoner23.setCustomName2('a Commoner') + commoner23.setOptionsBitmask(256) + + #Junkdealer will be added as soon as i can find coords + stcSvc.spawnObject('object/mobile/shared_junk_dealer_m_03.iff', 'tatooine', long(0), float(-3060.50), float(5), float(2181.71), float(0), float(1)) + stcSvc.spawnObject('object/mobile/shared_junk_dealer_m_03.iff', 'tatooine', long(0), float(-2924.53), float(5), float(2173.97), float(0), float(1)) + + + return + diff --git a/scripts/static_spawns/tatooine/mos_taike.py b/scripts/static_spawns/tatooine/mos_taike.py new file mode 100644 index 00000000..e3e78bf7 --- /dev/null +++ b/scripts/static_spawns/tatooine/mos_taike.py @@ -0,0 +1,22 @@ +import sys +# Project SWG: Mos Taike: Static Spawns +# (C)2014 ProjectSWG + + + +from resources.datatables import Options +from resources.datatables import State + +def addPlanetSpawns(core, planet): + + + stcSvc = core.staticService + objSvc = core.objectService + + # TODO Check all NPCs for personalized scripting, change format. + + + #Junkdealer + stcSvc.spawnObject('object/mobile/shared_junk_dealer_m_01.iff', 'tatooine', long(0), float(3902), float(33), float(2362), float(0), float(0)) + return + diff --git a/scripts/static_spawns/tatooine/tatooine.py b/scripts/static_spawns/tatooine/tatooine.py new file mode 100644 index 00000000..9a45d308 --- /dev/null +++ b/scripts/static_spawns/tatooine/tatooine.py @@ -0,0 +1,21 @@ +import sys +from resources.datatables import Options +from resources.datatables import State + +def addPlanetSpawns(core, planet): +######################################################## +# DO NOT ADD ANYTHING ELSE TO THIS SCRIPT, PLEASE USE THE +# SUBFOLDERS FOR EACH PLANET AND CREATE NEW SCRIPTS FOR +# EACH AREA OF A PLANET. - LEVARRIS +######################################################## + stcSvc = core.staticService + # Blue Frog: Uncomment only when needed for testing. + stcSvc.spawnObject('object/tangible/terminal/shared_terminal_character_builder.iff', 'tatooine', long(0), float(3525), float(4), float(-4801), float(0.70), float(0.71)) + +######################################################## +# DO NOT ADD ANYTHING ELSE TO THIS SCRIPT, PLEASE USE THE +# SUBFOLDERS FOR EACH PLANET AND CREATE NEW SCRIPTS FOR +# EACH AREA OF A PLANET. - LEVARRIS +######################################################## + return + diff --git a/scripts/static_spawns/tatooine/wayfar.py b/scripts/static_spawns/tatooine/wayfar.py new file mode 100644 index 00000000..4864ed87 --- /dev/null +++ b/scripts/static_spawns/tatooine/wayfar.py @@ -0,0 +1,23 @@ +import sys +# Project SWG: Wayfar: Static Spawns +# (C)2014 ProjectSWG + + + +from resources.datatables import Options +from resources.datatables import State + +def addPlanetSpawns(core, planet): + + + stcSvc = core.staticService + objSvc = core.objectService + + # TODO Check all NPCs for personalized scripting, change format. + + + #Junkdealer + stcSvc.spawnObject('object/mobile/shared_junk_dealer_m_01.iff', 'tatooine', long(0), float(-5242), float(75), float(-6495), float(0), float(0)) + stcSvc.spawnObject('object/mobile/shared_junk_dealer_m_01.iff', 'tatooine', long(0), float(-5129), float(75), float(-6584), float(0), float(0)) + return + diff --git a/scripts/static_spawns/yavin4/placeholder.txt b/scripts/static_spawns/yavin4/placeholder.txt new file mode 100644 index 00000000..e69de29b diff --git a/scripts/static_travel_points.py b/scripts/static_travel_points.py index e6d0987b..b1814ec9 100644 --- a/scripts/static_travel_points.py +++ b/scripts/static_travel_points.py @@ -21,39 +21,52 @@ def addPoints(core, planet): if planet.getName() == 'tatooine': tatooinePoints(core, planet) if planet.getName() == 'yavin4': - yavin4Points(core, planet) + yavin4Points(core, planet) + if planet.getName() == 'kashyyyk_main': + kashyyyk_mainPoints(core, planet) + if planet.getName() == 'mustafar': + mustafarPoints(core, planet) return def corelliaPoints(core, planet): trvSvc = core.travelService - + + trvSvc.addTravelPoint(planet, "Coronet Shuttle A", -25, 28, -4409) + trvSvc.addTravelPoint(planet, "Coronet Shuttle B", -329, 28, -4641) + trvSvc.addTravelPoint(planet, "Vreni Island Shuttle", -5551, 15, -6059) + trvSvc.addTravelPoint(planet, "Tyrena Shuttle A", -5005, 21, -2386) + trvSvc.addTravelPoint(planet, "Tyrena Shuttle B", -5600, 21, -2790) + trvSvc.addTravelPoint(planet, "Doaba Guerfel Shuttleport", 3085, 280, 4993) + trvSvc.addTravelPoint(planet, "Kor Vella Shuttleport", -3775, 86, 3234) + trvSvc.addTravelPoint(planet, "Bela Vistal Shuttleport A", 6644, 330, -5922) + trvSvc.addTravelPoint(planet, "Bela Vistal Shuttleport B", 6930, 330, -5534) trvSvc.addTravelPoint(planet, "Coronet Starport", -51, 28, -4735) trvSvc.addTravelPoint(planet, "Tyrena Starport", -4975, 21, -2230) trvSvc.addTravelPoint(planet, "Kor Vella Starport", -3136, 31, 2894) - trvSvc.addTravelPoint(planet, "Doaba Guerful Starport", 3377, 308, 5605) + trvSvc.addTravelPoint(planet, "Doaba Guerfel Starport", 3377, 308, 5605) return def dantooinePoints(core, planet): trvSvc = core.travelService - - trvSvc.addTravelPoint(planet, "Coronet Starport", -51, 28, -4735) - trvSvc.addTravelPoint(planet, "Tyrena Starport", -4975, 21, -2230) - trvSvc.addTravelPoint(planet, "Kor Vella Starport", -3136, 31, 2894) - trvSvc.addTravelPoint(planet, "Doaba Guerful Starport", 3377, 308, 5605) + + trvSvc.addTravelPoint(planet, "Mining Outpost", -635, 3, 2507) + trvSvc.addTravelPoint(planet, "Imperial Outpost", -4208, 3, -2350) + trvSvc.addTravelPoint(planet, "Agro Outpost", 1569, 4, -6415) return def dathomirPoints(core, planet): trvSvc = core.travelService - trvSvc.addTravelPoint(planet, "Science Outpost", -76, 18, -1586) - trvSvc.addTravelPoint(planet, "Trade Outpost", -592, 6, 3087) + trvSvc.addTravelPoint(planet, "Science Outpost", -49, 18, -1584) + trvSvc.addTravelPoint(planet, "Trade Outpost", 618, 6, 3092) + trvSvc.addTravelPoint(planet, "Quarantine Zone", -5691, 511, -6467) return def endorPoints(core, planet): trvSvc = core.travelService - trvSvc.addTravelPoint(planet, "Smuggler Outpost", -978, 73, 1554) - trvSvc.addTravelPoint(planet, "Research Outpost", 3222, 24, -3482) + trvSvc.addTravelPoint(planet, "Smuggler Outpost", -950, 73, 1553) + trvSvc.addTravelPoint(planet, "Research Outpost", 3201, 24, -3499) return def lokPoints(core, planet): @@ -66,23 +79,38 @@ def nabooPoints(core, planet): trvSvc = core.travelService trvSvc.addTravelPoint(planet, "Kaadara Starport", 5295, -192, 6664) + trvSvc.addTravelPoint(planet, "Kaadara Shuttleport", 5123, -192, 6616) + trvSvc.addTravelPoint(planet, "Dee'ja Peak Shuttleport", 5331, 327, -1576) + trvSvc.addTravelPoint(planet, "Moenia Shuttleport", 4961, 3, -4892) + trvSvc.addTravelPoint(planet, "Lake Retreat Shuttleport", -5494, -150, -21) + trvSvc.addTravelPoint(planet, "Keren Shuttleport", 2021, 19, 2525) + trvSvc.addTravelPoint(planet, "Keren Shuttleport South", 1567, 25, 2837) trvSvc.addTravelPoint(planet, "Keren Starport", 1352, 13, 2768) trvSvc.addTravelPoint(planet, "Moenia Starport", 4728, 4, -4650) + trvSvc.addTravelPoint(planet, "Theed Shuttle A", -5856, 19, 4172) + trvSvc.addTravelPoint(planet, "Theed Shuttle B", -5005, 19, 4072) + trvSvc.addTravelPoint(planet, "Theed Shuttle C", -5411, 19, 4332) + trvSvc.addTravelPoint(planet, "Theed Spaceport", -4858, 5, 4164) return def roriPoints(core, planet): trvSvc = core.travelService - trvSvc.addTravelPoint(planet, "Narmle Starport", -5472, 80, 2161) + trvSvc.addTravelPoint(planet, "Narmle Starport", -5374, 80, -2188) + trvSvc.addTravelPoint(planet, "Narmle Shuttleport", -5255, 80, -2161) trvSvc.addTravelPoint(planet, "Rebel Outpost", 3672, 96, -6421) + trvSvc.addTravelPoint(planet, "Restuss Starport", 5281, 80, 6171) + trvSvc.addTravelPoint(planet, "Restuss Shuttleport", 5398, 80, 6195) return def talusPoints(core, planet): trvSvc = core.travelService - trvSvc.addTravelPoint(planet, "Dearic Starport", 245, 6, -2931) - trvSvc.addTravelPoint(planet, "Nashal Starport", 4480, 2, 6365) - trvSvc.addTravelPoint(planet, "Imperial Outpost", -2212, 20, 2302) + trvSvc.addTravelPoint(planet, "Dearic Starport", 263, 6, -2952) + trvSvc.addTravelPoint(planet, "Dearic Shuttleport", 699, 6, -3041) + trvSvc.addTravelPoint(planet, "Nashal Starport", 4453, 2, 5354) + trvSvc.addTravelPoint(planet, "Nashal Shuttleport", 4334, 9, 5431) + trvSvc.addTravelPoint(planet, "Imperial Outpost", -2226, 20, 2319) return def tatooinePoints(core, planet): @@ -92,12 +120,33 @@ def tatooinePoints(core, planet): trvSvc.addTravelPoint(planet, "Mos Eisley Starport", 3619, 5, -4801) trvSvc.addTravelPoint(planet, "Mos Espa Starport", -2829, 5, 2080) trvSvc.addTravelPoint(planet, "Mos Entha Starport", 1238, 7, 3062) + trvSvc.addTravelPoint(planet, "Anchorhead Shuttle", 48, 52, -5319) + trvSvc.addTravelPoint(planet, "Mos Entha Shuttleport A", 1731, 7, 3205) + trvSvc.addTravelPoint(planet, "Mos Entha Shuttleport B", 1396, 7, 3487) + trvSvc.addTravelPoint(planet, "Mos Espa Shuttle West", -3132, 5, 2172) + trvSvc.addTravelPoint(planet, "Mos Espa Shuttle East", -2799, 5, 2163) + trvSvc.addTravelPoint(planet, "Mos Espa Shuttle South", -2892, 5, 1914) + trvSvc.addTravelPoint(planet, "Mos Eisley Shuttleport", 3434, 5, -4659) + trvSvc.addTravelPoint(planet, "Bestine Shuttleport", -1071, 12, -3566) + trvSvc.addTravelPoint(planet, "Wayfar Shuttleport", -5089, 75, -6594) return def yavin4Points(core, planet): trvSvc = core.travelService - trvSvc.addTravelPoint(planet, "Imperial Base", 4033, 37, -6234) - trvSvc.addTravelPoint(planet, "Labor Outpost", -6939, 73, -5706) - trvSvc.addTravelPoint(planet, "Mining Outpost", -277, 35, 4879) - return \ No newline at end of file + trvSvc.addTravelPoint(planet, "Imperial Base", 4054, 37, -6216) + trvSvc.addTravelPoint(planet, "Labor Outpost", -6921, 73, -5726) + trvSvc.addTravelPoint(planet, "Mining Outpost", -267, 35, 4896) + return + +def kashyyyk_mainPoints(core, planet): + trvSvc = core.travelService + + trvSvc.addTravelPoint(planet, "Kachirho Starport", -688, 19, -165) + return + +def mustafarPoints(core, planet): + trvSvc = core.travelService + + trvSvc.addTravelPoint(planet, "Mensix Mining Facility", 405, 230, -1352) + return diff --git a/scripts/weather.py b/scripts/weather.py new file mode 100644 index 00000000..397986ae --- /dev/null +++ b/scripts/weather.py @@ -0,0 +1,16 @@ +import sys + +def init(core): + weatherSvc = core.weatherService + weatherSvc.addPlanetSettings('tatooine', 75, 0) + weatherSvc.addPlanetSettings('naboo', 85, 0) + weatherSvc.addPlanetSettings('corellia', 85, 1) + weatherSvc.addPlanetSettings('dantooine', 80, 1) + weatherSvc.addPlanetSettings('rori', 75, 2) + weatherSvc.addPlanetSettings('talus', 75, 2) + weatherSvc.addPlanetSettings('lok', 75, 2) + weatherSvc.addPlanetSettings('dathomir', 50, 3) + weatherSvc.addPlanetSettings('endor', 80, 0) + weatherSvc.addPlanetSettings('yavin4', 65, 2) + weatherSvc.addPlanetSettings('kashyyyk_main', 80, 0) + diff --git a/src/main/NGECore.java b/src/main/NGECore.java index 77a22c65..95a4ecb7 100644 --- a/src/main/NGECore.java +++ b/src/main/NGECore.java @@ -21,44 +21,89 @@ ******************************************************************************/ package main; +import java.io.BufferedReader; +import java.io.File; +import java.io.FileNotFoundException; +import java.io.FileReader; import java.io.IOException; import java.sql.PreparedStatement; import java.sql.SQLException; +import java.util.ArrayList; import java.util.HashMap; +import java.util.Iterator; +import java.util.List; import java.util.Map; import java.util.Vector; import java.util.concurrent.ConcurrentHashMap; +import java.util.concurrent.ExecutorService; +import java.util.concurrent.Executors; +import java.util.concurrent.LinkedBlockingQueue; +import java.util.concurrent.ThreadPoolExecutor; +import java.util.concurrent.TimeUnit; +import org.apache.mina.core.service.IoHandler; +import org.apache.mina.core.session.IoSession; +import com.sleepycat.je.Transaction; +import com.sleepycat.persist.EntityCursor; - - +import protocol.swg.chat.ChatSystemMessage; +import net.engio.mbassy.bus.config.BusConfiguration; +import resources.common.BountyListItem; import resources.common.RadialOptions; import resources.common.ThreadMonitor; import resources.objects.creature.CreatureObject; +import resources.objects.guild.GuildObject; +import resources.objects.resource.GalacticResource; +import resources.objects.resource.ResourceRoot; import services.AttributeService; import services.BuffService; import services.CharacterService; import services.ConnectionService; -import services.EquipmentService; +import services.ConversationService; +import services.DevService; +import services.EntertainmentService; import services.GroupService; +import services.housing.HousingService; +import services.InstanceService; import services.LoginService; +import services.LootService; import services.PlayerService; import services.ScriptService; import services.SimulationService; import services.SkillModService; import services.SkillService; import services.StaticService; +import services.SurveyService; import services.TerrainService; +import services.WeatherService; +import services.ai.AIService; +import services.bazaar.AuctionItem; +import services.bazaar.BazaarService; +import services.chat.ChatRoom; import services.chat.ChatService; +import services.chat.Mail; +import services.collections.CollectionService; import services.combat.CombatService; import services.command.CombatCommand; import services.command.CommandService; +import services.equipment.EquipmentService; +import services.gcw.FactionService; import services.gcw.GCWService; -import services.guild.GuildService; +import services.GuildService; +import services.LoginService; import services.map.MapService; +import services.mission.MissionService; +import services.object.DuplicateId; +import services.object.ObjectId; import services.object.ObjectService; import services.object.UpdateService; +import services.pet.MountService; +import services.playercities.PlayerCityService; +import services.resources.HarvesterService; +import services.resources.ResourceService; +import services.retro.RetroService; +import services.spawn.SpawnService; import services.sui.SUIService; import services.trade.TradeService; import services.travel.TravelService; @@ -76,12 +121,16 @@ import engine.resources.common.CRC; import engine.resources.common.PHPBB3Auth; import engine.resources.config.Config; import engine.resources.config.DefaultConfig; +import engine.resources.container.Traverser; import engine.resources.database.DatabaseConnection; +import engine.resources.database.ODBCursor; import engine.resources.database.ObjectDatabase; import engine.resources.objects.SWGObject; import engine.resources.scene.Point3D; import engine.resources.scene.Quaternion; +import engine.resources.service.InteractiveJythonAcceptor; import engine.resources.service.NetworkDispatch; +import engine.servers.InteractiveJythonServer; import engine.servers.MINAServer; import engine.servers.PingServer; @@ -90,13 +139,15 @@ import engine.servers.PingServer; public class NGECore { public static boolean didServerCrash = false; - + private static NGECore instance; private Config config = null; - + private String motd = ""; + private volatile boolean isShuttingDown = false; + private long galacticTime = System.currentTimeMillis(); - private ConcurrentHashMap clients = new ConcurrentHashMap(); + private ConcurrentHashMap clients = new ConcurrentHashMap(); // Database @@ -105,9 +156,11 @@ public class NGECore { // Services public LoginService loginService; + public RetroService retroService; public ConnectionService connectionService; public CommandService commandService; public CharacterService characterService; + public FactionService factionService; public ObjectService objectService; public MapService mapService; public UpdateService updateService; @@ -129,6 +182,24 @@ public class NGECore { public SkillModService skillModService; public EquipmentService equipmentService; public TravelService travelService; + public CollectionService collectionService; + public EntertainmentService entertainmentService; + public WeatherService weatherService; + public SpawnService spawnService; + public AIService aiService; + public MissionService missionService; + public InstanceService instanceService; + public DevService devService; + public SurveyService surveyService; + public ResourceService resourceService; + public ConversationService conversationService; + public BazaarService bazaarService; + public HousingService housingService; + public LootService lootService; + public HarvesterService harvesterService; + public MountService mountService; + public PlayerCityService playerCityService; + // Login Server public NetworkDispatch loginDispatch; @@ -137,9 +208,27 @@ public class NGECore { // Zone Server public NetworkDispatch zoneDispatch; private MINAServer zoneServer; + + // Interactive Jython Console + public InteractiveJythonAcceptor jythonAcceptor; + private InteractiveJythonServer jythonServer; - private ObjectDatabase creatureODB; private ObjectDatabase mailODB; + private ObjectDatabase guildODB; + private ObjectDatabase objectIdODB; + private ObjectDatabase duplicateIdODB; + private ObjectDatabase chatRoomODB; + + private BusConfiguration eventBusConfig = BusConfiguration.Default(1, new ThreadPoolExecutor(1, 4, 1, TimeUnit.MINUTES, new LinkedBlockingQueue())); + + private ObjectDatabase auctionODB; + private ObjectDatabase resourcesODB; + private ObjectDatabase resourceRootsODB; + private ObjectDatabase resourceHistoryODB; + private ObjectDatabase swgObjectODB; + private ObjectDatabase bountiesODB; + + public static boolean PACKET_DEBUG = false; public NGECore() { @@ -148,7 +237,6 @@ public class NGECore { public void start() { instance = this; - final ThreadMonitor deadlockDetector = new ThreadMonitor(); Thread deadlockMonitor = new Thread(new Runnable() { @Override @@ -167,22 +255,66 @@ public class NGECore { if (!(config.loadConfigFile())) { config = DefaultConfig.getConfig(); } + + Config options = new Config(); + options.setFilePath("options.cfg"); + boolean optionsConfigLoaded = options.loadConfigFile(); + + if (optionsConfigLoaded && options.getInt("CLEAN.ODB.FOLDERS") > 0) { + File baseFolder = new File("./odb"); + + if (baseFolder.isDirectory()) { + for (File odbFolder : baseFolder.listFiles()) { + if (odbFolder.isDirectory()) { + for (File file : odbFolder.listFiles()) { + if (!file.isDirectory() && !file.getName().equals("placeholder.txt")) { file.delete(); } + } + } + } + } + System.out.println("Cleaned ODB Folders."); + } + + try(BufferedReader br = new BufferedReader(new FileReader("./motd.txt"))) { + for(String line; (line = br.readLine()) != null;) { + motd += line; + } + } catch (IOException e1) { e1.printStackTrace(); } + // Database databaseConnection = new DatabaseConnection(); databaseConnection.connect(config.getString("DB.URL"), config.getString("DB.NAME"), config.getString("DB.USER"), config.getString("DB.PASS"), "postgresql"); - - databaseConnection2 = new DatabaseConnection(); - setGalaxyStatus(1); - creatureODB = new ObjectDatabase("creature", true, false, true); - mailODB = new ObjectDatabase("mails", true, false, true); + String db2Url = config.getString("DB2.URL"); + if (db2Url == null || db2Url.matches("^\\s*$")) { + databaseConnection2 = null; + } else { + databaseConnection2 = new DatabaseConnection(); + databaseConnection2.connect(config.getString("DB2.URL"), config.getString("DB2.NAME"), config.getString("DB2.USER"), config.getString("DB2.PASS"), "mysql"); + } + + setGalaxyStatus(1); + swgObjectODB = new ObjectDatabase("swgobjects", true, true, true, SWGObject.class); + mailODB = new ObjectDatabase("mails", true, true, true, Mail.class); + guildODB = new ObjectDatabase("guild", true, true, true, GuildObject.class); + objectIdODB = new ObjectDatabase("oids", true, true, true, ObjectId.class); + duplicateIdODB = new ObjectDatabase("doids", true, true, true, DuplicateId.class); + chatRoomODB = new ObjectDatabase("chatRooms", true, true, true, ChatRoom.class); + resourcesODB = new ObjectDatabase("resources", true, true, true, GalacticResource.class); + resourceRootsODB = new ObjectDatabase("resourceroots", true, true, true, ResourceRoot.class); + resourceHistoryODB = new ObjectDatabase("resourcehistory", true, true, true, GalacticResource.class); + auctionODB = new ObjectDatabase("auction", true, true, true, AuctionItem.class); + bountiesODB = new ObjectDatabase("bounties", true, true, true, BountyListItem.class); + // Services loginService = new LoginService(this); + retroService = new RetroService(this); connectionService = new ConnectionService(this); characterService = new CharacterService(this); mapService = new MapService(this); travelService = new TravelService(this); - + + factionService = new FactionService(this); objectService = new ObjectService(this); terrainService = new TerrainService(this); updateService = new UpdateService(this); @@ -198,7 +330,36 @@ public class NGECore { skillService = new SkillService(this); skillModService = new SkillModService(this); equipmentService = new EquipmentService(this); + entertainmentService = new EntertainmentService(this); + devService = new DevService(this); + conversationService = new ConversationService(this); + bazaarService = new BazaarService(this); + housingService = new HousingService(this); + lootService = new LootService(this); + harvesterService = new HarvesterService(this); + mountService = new MountService(this); + playerCityService = new PlayerCityService(this); + staticService = new StaticService(this); + if (config.keyExists("JYTHONCONSOLE.PORT")) { + int jythonPort = config.getInt("JYTHONCONSOLE.PORT"); + if (jythonPort > 0) { + + System.out.println("Starting InteractiveJythonServer on Port " + jythonPort); + jythonAcceptor = new InteractiveJythonAcceptor(); + jythonServer = new InteractiveJythonServer((IoHandler) jythonAcceptor, jythonPort, this); + jythonAcceptor.setServer(jythonServer); + jythonServer.start(); + } + } + spawnService = new SpawnService(this); + aiService = new AIService(this); + missionService = new MissionService(this); + + if (optionsConfigLoaded && options.getInt("LOAD.RESOURCE.SYSTEM") == 1) { + surveyService = new SurveyService(this); + resourceService = new ResourceService(this); + } // Ping Server try { @@ -217,8 +378,10 @@ public class NGECore { // Zone Server zoneDispatch = new NetworkDispatch(this, true); + zoneDispatch.addService(retroService); zoneDispatch.addService(connectionService); zoneDispatch.addService(characterService); + zoneDispatch.addService(factionService); zoneDispatch.addService(objectService); zoneDispatch.addService(commandService); zoneDispatch.addService(chatService); @@ -226,12 +389,26 @@ public class NGECore { zoneDispatch.addService(mapService); zoneDispatch.addService(travelService); zoneDispatch.addService(playerService); - + zoneDispatch.addService(buffService); + zoneDispatch.addService(entertainmentService); + zoneDispatch.addService(missionService); + zoneDispatch.addService(bazaarService); + zoneDispatch.addService(lootService); + zoneDispatch.addService(mountService); + zoneDispatch.addService(housingService); + zoneDispatch.addService(playerCityService); + zoneDispatch.addService(staticService); + + if (optionsConfigLoaded && options.getInt("LOAD.RESOURCE.SYSTEM") == 1) { + zoneDispatch.addService(surveyService); + zoneDispatch.addService(resourceService); + } + zoneServer = new MINAServer(zoneDispatch, config.getInt("ZONE.PORT")); zoneServer.start(); - staticService = new StaticService(this); - // Planets + //Start terrainList + // Original Planets terrainService.addPlanet(1, "tatooine", "terrain/tatooine.trn", true); terrainService.addPlanet(2, "naboo", "terrain/naboo.trn", true); terrainService.addPlanet(3, "corellia", "terrain/corellia.trn", true); @@ -244,38 +421,132 @@ public class NGECore { terrainService.addPlanet(10, "dathomir", "terrain/dathomir.trn", true); terrainService.addPlanet(11, "mustafar", "terrain/mustafar.trn", true); terrainService.addPlanet(12, "kashyyyk_main", "terrain/kashyyyk_main.trn", true); - terrainService.loadSnapShotObjects(); + //Dungeon Terrains + // TODO: Fix BufferUnderFlow Errors on loaded of dungeon instances. + terrainService.addPlanet(13, "kashyyyk_dead_forest", "terrain/kashyyyk_dead_forest.trn", true); + terrainService.addPlanet(14, "kashyyyk_hunting", "terrain/kashyyyk_hunting.trn", true); + terrainService.addPlanet(15, "kashyyyk_north_dungeons", "terrain/kashyyyk_north_dungeons.trn", true); + terrainService.addPlanet(16, "kashyyyk_rryatt_trail", "terrain/kashyyyk_rryatt_trail.trn", true); + terrainService.addPlanet(17, "kashyyyk_south_dungeons", "terrain/kashyyyk_south_dungeons.trn", true); + terrainService.addPlanet(18, "adventure1", "terrain/adventure1.trn", true); + terrainService.addPlanet(19, "adventure2", "terrain/adventure2.trn", true); + terrainService.addPlanet(20, "dungeon1", "terrain/dungeon1.trn", true); + //Space Zones + // NOTE: Commented out for now until space is implemented. No need to be loaded into memory when space is not implemented. + /*terrainService.addPlanet(21, "space_corellia", "terrain/space_corellia.trn", true); + terrainService.addPlanet(22, "space_corellia_2", "terrain/space_corellia_2.trn", true); + terrainService.addPlanet(23, "space_dantooine", "terrain/space_dantooine.trn", true); + terrainService.addPlanet(24, "space_dathomir", "terrain/space_dathomir.trn", true); + terrainService.addPlanet(25, "space_endor", "terrain/space_endor.trn", true); + terrainService.addPlanet(26, "space_env", "terrain/space_env.trn", true); + terrainService.addPlanet(27, "space_halos", "terrain/space_halos.trn", true); + terrainService.addPlanet(28, "space_heavy1", "terrain/space_heavy1.trn", true); + terrainService.addPlanet(29, "space_kashyyyk", "terrain/space_kashyyyk.trn", true); + terrainService.addPlanet(30, "space_light1", "terrain/space_light1.trn", true); + terrainService.addPlanet(31, "space_lok", "terrain/space_lok.trn", true); + terrainService.addPlanet(32, "space_naboo", "terrain/space_naboo.trn", true); + terrainService.addPlanet(33, "space_naboo_2", "terrain/space_naboo_2.trn", true); + terrainService.addPlanet(34, "space_nova_orion", "terrain/space_nova_orion.trn", true); + terrainService.addPlanet(35, "space_npe_falcon", "terrain/space_npe_falcon.trn", true); // TODO: New Player Tutorial + terrainService.addPlanet(36, "space_npe_falcon_2", "terrain/space_npe_falcon_2.trn", true); // TODO: New Player Tutorial + terrainService.addPlanet(37, "space_ord_mantell", "terrain/space_ord_mantell.trn", true); + terrainService.addPlanet(38, "space_ord_mantell_2", "terrain/space_ord_mantell_2.trn", true); + terrainService.addPlanet(39, "space_ord_mantell_3", "terrain/space_ord_mantell_3.trn", true); + terrainService.addPlanet(40, "space_ord_mantell_4", "terrain/space_ord_mantell_4.trn", true); + terrainService.addPlanet(41, "space_ord_mantell_5", "terrain/space_ord_mantell_5.trn", true); + terrainService.addPlanet(42, "space_ord_mantell_6", "terrain/space_ord_mantell_6.trn", true); + terrainService.addPlanet(43, "space_tatooine", "terrain/space_tatooine.trn", true); + terrainService.addPlanet(44, "space_tatooine_2", "terrain/space_tatooine_2.trn", true); + terrainService.addPlanet(45, "space_yavin4", "terrain/space_yavin4.trn", true);*/ + //PSWG New Content Terrains (WARNING Keep commented out unless you have the current build of kaas!) + + //terrainService.addPlanet(46, "kaas", "terrain/kaas.trn", true); + + //end terrainList - // Zone services that need to be loaded after the above - simulationService = new SimulationService(this); - zoneDispatch.addService(simulationService); + chatService.loadChatRooms(); + spawnService = new SpawnService(this); + terrainService.loadClientPois(); // Travel Points travelService.loadTravelPoints(); + simulationService = new SimulationService(this); - // Static Spawns - staticService.spawnStatics(); + + if (optionsConfigLoaded && options.getInt("LOAD.RESOURCE.SYSTEM") > 0) { + resourceService.loadResourceRoots(); + resourceService.loadResources(); + } + + terrainService.loadSnapShotObjects(); + objectService.loadServerTemplates(); + objectService.loadBuildings(); + harvesterService.loadHarvesters(); + + simulationService.insertSnapShotObjects(); + simulationService.insertPersistentBuildings(); + // Zone services that need to be loaded after the above + zoneDispatch.addService(simulationService); guildService = new GuildService(this); zoneDispatch.addService(guildService); gcwService = new GCWService(this); zoneDispatch.addService(gcwService); + + collectionService = new CollectionService(this); + zoneDispatch.addService(collectionService); tradeService = new TradeService(this); zoneDispatch.addService(tradeService); zoneDispatch.addService(skillService); - travelService.startShuttleSchedule(); + instanceService = new InstanceService(this); + zoneDispatch.addService(instanceService); + + weatherService = new WeatherService(this); + weatherService.loadPlanetSettings(); + + spawnService.loadMobileTemplates(); + spawnService.loadLairTemplates(); + spawnService.loadLairGroups(); + spawnService.loadDynamicGroups();; + spawnService.loadSpawnAreas(); + + staticService.spawnStatics(); + + equipmentService.loadBonusSets(); + + retroService.run(); didServerCrash = false; System.out.println("Started Server."); + cleanupCreatureODB(); setGalaxyStatus(2); } - + private void cleanupCreatureODB() { + ODBCursor cursor = swgObjectODB.getCursor(); + + List deletedObjects = new ArrayList(); + + while(cursor.hasNext()) { + Object next = cursor.next(); + if (next == null) continue; + SWGObject creature = (SWGObject) next; + if(!characterService.playerExists(creature.getObjectID()) && creature instanceof CreatureObject) + deletedObjects.add((CreatureObject) creature); + } + cursor.close(); + + for(CreatureObject creature : deletedObjects) { + swgObjectODB.remove(creature.getObjectID()); + } + + System.out.println("Deleted " + deletedObjects.size() + " creatures."); + } public void stop() { System.out.println("Stopping Servers and Connections."); @@ -347,6 +618,10 @@ public class NGECore { return config; } + public String getGalaxyName() { + return config.getString("GALAXY_NAME"); + } + public DatabaseConnection getDatabase1() { return databaseConnection; } @@ -355,17 +630,53 @@ public class NGECore { return databaseConnection2; } - public ObjectDatabase getCreatureODB() { - return creatureODB; + public ObjectDatabase getSWGObjectODB() { + return swgObjectODB; } public ObjectDatabase getMailODB() { return mailODB; } + public ObjectDatabase getGuildODB() { + return guildODB; + } + + public ObjectDatabase getObjectIdODB() { + return objectIdODB; + } + + public ObjectDatabase getDuplicateIdODB() { + return duplicateIdODB; + } + + public ObjectDatabase getChatRoomODB() { + return chatRoomODB; + } + + public ObjectDatabase getBountiesODB() { + return bountiesODB; + } + + public ObjectDatabase getResourcesODB() { + return resourcesODB; + } + + public ObjectDatabase getResourceRootsODB() { + return resourceRootsODB; + } + + public ObjectDatabase getResourceHistoryODB() { + return resourceHistoryODB; + } + + public ObjectDatabase getAuctionODB() { + return auctionODB; + } + public int getActiveClients() { int connections = 0; - for (Map.Entry c : clients.entrySet()) { + for (Map.Entry c : clients.entrySet()) { if(c.getValue().getSession() != null) { if (c.getValue().getSession().isConnected()) { connections++; @@ -377,7 +688,7 @@ public class NGECore { public int getActiveZoneClients() { int connections = 0; - for (Map.Entry c : clients.entrySet()) { + for (Map.Entry c : clients.entrySet()) { if(c.getValue().getSession() != null) { if (c.getValue().getSession().isConnected() && c.getValue().getParent() != null) { connections++; @@ -388,23 +699,23 @@ public class NGECore { } - public Client getClient(int connectionID) { - return clients.get(connectionID); + public Client getClient(IoSession session) { + return clients.get(session); } - public ConcurrentHashMap getActiveConnectionsMap() { + public ConcurrentHashMap getActiveConnectionsMap() { return clients; } /* * --------------- Other methods for services --------------- */ - public void addClient(Integer connectionID, Client client) { - clients.put(connectionID, client); + public void addClient(IoSession session, Client client) { + clients.put(session, client); } - public void removeClient(Integer connectionID) { - clients.remove(connectionID); + public void removeClient(IoSession session) { + clients.remove(session); } // for python scripts @@ -415,5 +726,69 @@ public class NGECore { public static NGECore getInstance() { return instance; } + + public BusConfiguration getEventBusConfig() { + return eventBusConfig; + } + + public void initiateShutdown() { + if(isShuttingDown) + return; + try { + + for(int minutes = 15; minutes > 1; minutes--) { + chatService.broadcastGalaxy("The server will be shutting down soon. Please find a safe place to logout. (" + minutes + " minutes left)"); + Thread.sleep(60000); + } + setGalaxyStatus(3); + chatService.broadcastGalaxy("The server will be shutting down soon. Please find a safe place to logout. (" + 1 + " minutes left)"); + Thread.sleep(30000); + chatService.broadcastGalaxy("You will be disconnected in 30 seconds so the server can perform a final save before shutting down. Please find a safe place to logout now."); + Thread.sleep(20000); + chatService.broadcastGalaxy("You will be disconnected in 10 seconds so the server can perform a final save before shutting down. Please find a safe place to logout now."); + Thread.sleep(10000); + chatService.broadcastGalaxy("You will now be disconnected so the server can perform a final save before shutting down."); + + synchronized(getActiveConnectionsMap()) { + for(Client client : getActiveConnectionsMap().values()) { + client.getSession().close(true); + connectionService.disconnect(client); + } + } + + System.exit(0); + + } catch (InterruptedException e) { + e.printStackTrace(); + } + + + + } + + public long getGalacticTime() { + return System.currentTimeMillis() - galacticTime; + } + + public void closeODBs() { + swgObjectODB.close(); + mailODB.close(); + guildODB.close(); + chatRoomODB.close(); + resourcesODB.close(); + resourceRootsODB.close(); + resourceHistoryODB.close(); + objectIdODB.close(); + duplicateIdODB.close(); + auctionODB.close(); + } + + public String getMotd() { + return motd; + } + + public void setMotd(String motd) { + this.motd = motd; + } } diff --git a/src/protocol/Message.java b/src/protocol/Message.java index 5085a975..9792eaec 100644 --- a/src/protocol/Message.java +++ b/src/protocol/Message.java @@ -103,6 +103,7 @@ public abstract class Message { } + //TODO: Verify if character position is set correctly after reading a UTF-16 string buffer.position(bufferPosition + length); return result; @@ -146,8 +147,8 @@ public abstract class Message { return result.array(); } - - + + //FIXME: this is redundant and was also bugged. At some point, get rid of the redundant functions. /** * Reads the next string in. It gets the length of the * string from the short/int at the beginning of it @@ -161,7 +162,7 @@ public abstract class Message { if (charset.equals("US-ASCII") || charset.equals("UTF-8")) { length = bb.getShort(); } else { - length = bb.getInt(); + length = bb.getInt() * 2; } if (length > bb.remaining()) return ""; @@ -201,4 +202,4 @@ public abstract class Message { return getNextString(buffer, "UTF-16LE"); } -} +} diff --git a/src/protocol/swg/AddIgnoreMessage.java b/src/protocol/swg/AddIgnoreMessage.java new file mode 100644 index 00000000..eeca8600 --- /dev/null +++ b/src/protocol/swg/AddIgnoreMessage.java @@ -0,0 +1,72 @@ +/******************************************************************************* + * Copyright (c) 2013 + * + * This File is part of NGECore2. + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see . + * + * Using NGEngine to work with NGECore2 is making a combined work based on NGEngine. + * Therefore all terms and conditions of the GNU Lesser General Public License cover the combination. + ******************************************************************************/ +package protocol.swg; + +import java.nio.ByteOrder; + +import main.NGECore; + +import org.apache.mina.core.buffer.IoBuffer; + +import engine.resources.config.Config; +import engine.resources.objects.SWGObject; + +public class AddIgnoreMessage extends SWGMessage { + + private SWGObject player; + private boolean type; + private String ignoreName; + + public AddIgnoreMessage(SWGObject obj, String name, boolean type) { + this.player = obj; + this.ignoreName = name; + this.type = type; + } + + @Override + public void deserialize(IoBuffer data) { + + } + + @Override + public IoBuffer serialize() { + Config config = NGECore.getInstance().getConfig(); + String server = config.getProperty("GALAXY_NAME"); + + IoBuffer result = IoBuffer.allocate(34 + server.length() + ignoreName.length()).order(ByteOrder.LITTLE_ENDIAN); + + result.putShort((short) 6); + result.putInt(0x70E9DA0F); + result.putLong(player.getObjectId()); + + result.put(getAsciiString("SWG")); + result.put(getAsciiString(server)); + result.put(getAsciiString(ignoreName)); + + result.putInt(0); + result.put((byte) ((type) ? 1 : 0)); // add = T, remove = F + result.putInt(0); + + return result.flip(); + } + +} diff --git a/src/protocol/swg/AttributeListMessage.java b/src/protocol/swg/AttributeListMessage.java index da681a16..55721a52 100644 --- a/src/protocol/swg/AttributeListMessage.java +++ b/src/protocol/swg/AttributeListMessage.java @@ -22,7 +22,6 @@ package protocol.swg; import java.nio.ByteOrder; -import java.util.Map.Entry; import org.apache.mina.core.buffer.IoBuffer; import org.apache.mina.core.buffer.SimpleBufferAllocator; @@ -47,7 +46,7 @@ public class AttributeListMessage extends SWGMessage { @Override public IoBuffer serialize() { - IoBuffer result = bufferPool.allocate(100, false).order(ByteOrder.LITTLE_ENDIAN); + final IoBuffer result = bufferPool.allocate(100, false).order(ByteOrder.LITTLE_ENDIAN); result.setAutoExpand(true); result.putShort((short) 5); @@ -58,17 +57,16 @@ public class AttributeListMessage extends SWGMessage { synchronized(target.getMutex()) { result.putInt(target.getAttributes().size()); - - for(Entry e : target.getAttributes().entrySet()) { - result.put(getAsciiString(e.getKey())); - result.put(getUnicodeString(e.getValue())); - } + target.getAttributes().forEach((key, value) -> { + result.put(getAsciiString(key)); + result.put(getUnicodeString(value)); + }); } result.putInt(0); int size = result.position(); - result = bufferPool.allocate(size, false).put(result.array(), 0, size); + IoBuffer result2 = bufferPool.allocate(size, false).put(result.array(), 0, size); - return result.flip(); + return result2.flip(); } diff --git a/src/protocol/swg/CharacterSheetResponseMessage.java b/src/protocol/swg/CharacterSheetResponseMessage.java new file mode 100644 index 00000000..bdb6531d --- /dev/null +++ b/src/protocol/swg/CharacterSheetResponseMessage.java @@ -0,0 +1,109 @@ +/******************************************************************************* + * Copyright (c) 2013 + * + * This File is part of NGECore2. + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see . + * + * Using NGEngine to work with NGECore2 is making a combined work based on NGEngine. + * Therefore all terms and conditions of the GNU Lesser General Public License cover the combination. + ******************************************************************************/ +package protocol.swg; + +import java.nio.ByteOrder; + +import main.NGECore; + +import org.apache.mina.core.buffer.IoBuffer; + +import resources.objects.creature.CreatureObject; +import resources.objects.player.PlayerObject; +import engine.resources.common.CRC; +import engine.resources.objects.SWGObject; +import engine.resources.scene.Point3D; + +public class CharacterSheetResponseMessage extends SWGMessage { + + private PlayerObject player; + public CharacterSheetResponseMessage(PlayerObject player) { + this.player = player; + } + + @Override + public void deserialize(IoBuffer data) { + + } + + @Override + public IoBuffer serialize() { + CreatureObject creature = (CreatureObject) player.getContainer(); + + if (creature != null && player != null) { + + SWGObject desCloner = null; + if (player.getBindLocation() != 0) + desCloner = NGECore.getInstance().objectService.getObject(player.getBindLocation()); + + String clonerPlanet = ""; + String spouse = ""; + + if (desCloner != null) + clonerPlanet = desCloner.getPlanet().getName(); + + if (player.getSpouseName() != null) + spouse = player.getSpouseName(); + + IoBuffer buffer = IoBuffer.allocate(82 + clonerPlanet.length() + (spouse.length() * 2)).order(ByteOrder.LITTLE_ENDIAN); + + buffer.putShort((short) 12); + buffer.putInt(CRC.StringtoCRC("CharacterSheetResponseMessage")); + + buffer.putInt(0); + buffer.putInt(0); + + if (desCloner != null) { + Point3D loc = desCloner.getPosition(); + buffer.putFloat(loc.x); // bind x + buffer.putFloat(loc.y); // bind z + buffer.putFloat(loc.z); // bind y + buffer.put(getAsciiString(clonerPlanet)); // bind planet + } else { + buffer.putFloat(0); // bind x + buffer.putFloat(0); // bind z + buffer.putFloat(0); // bind y + buffer.put(getAsciiString("")); // bind planet + } + + buffer.putFloat(0); // bank x + buffer.putFloat(0); // bank z + buffer.putFloat(0); // bank y + buffer.put(getAsciiString("tatooine")); + + buffer.putFloat(0); // home x + buffer.putFloat(0); // home z + buffer.putFloat(0); // home y + buffer.put(getAsciiString("")); // home planet + + buffer.put(getAsciiString("")); // Name of city player resides in + + buffer.put(getUnicodeString(spouse)); + + buffer.putInt(creature.getPlayerObject().getLotsRemaining()); // lots remaining + + return buffer.flip(); + } + return null; + } + +} diff --git a/src/protocol/swg/ChatOnAddFriend.java b/src/protocol/swg/ChatOnAddFriend.java deleted file mode 100644 index be805945..00000000 --- a/src/protocol/swg/ChatOnAddFriend.java +++ /dev/null @@ -1,25 +0,0 @@ -package protocol.swg; - -import java.nio.ByteOrder; - -import org.apache.mina.core.buffer.IoBuffer; - -public class ChatOnAddFriend extends SWGMessage { - - @Override - public void deserialize(IoBuffer data) { - - } - - @Override - public IoBuffer serialize() { - IoBuffer result = IoBuffer.allocate(20).order(ByteOrder.LITTLE_ENDIAN); - - result.putShort((short) 0x03); - result.putInt(0x2B2A0D94); - result.putLong(0); - result.flip(); - return result; - } - -} diff --git a/src/protocol/swg/ChatOnChangeFriendStatus.java b/src/protocol/swg/ChatOnChangeFriendStatus.java deleted file mode 100644 index 5eeb3f33..00000000 --- a/src/protocol/swg/ChatOnChangeFriendStatus.java +++ /dev/null @@ -1,53 +0,0 @@ -package protocol.swg; - -import java.nio.ByteOrder; - -import main.NGECore; - -import org.apache.mina.core.buffer.IoBuffer; - -import engine.resources.config.Config; -import engine.resources.config.DefaultConfig; - -public class ChatOnChangeFriendStatus extends SWGMessage { - - private String name; - private int type; - private long playerID; - - // Adds or Removes a friend, not to be confused with online/offline status - public ChatOnChangeFriendStatus(long playerID, String name, int type) { - this.name = name; - this.type = type; - this.playerID = playerID; - } - @Override - public void deserialize(IoBuffer data) { - - } - - @Override - public IoBuffer serialize() { - Config config = new Config(); - config.setFilePath("nge.cfg"); - if (!(config.loadConfigFile())) { - config = DefaultConfig.getConfig(); - } - String server = config.getString("GALAXY_NAME"); - IoBuffer result = IoBuffer.allocate(100 + this.name.length() + server.length()).order(ByteOrder.LITTLE_ENDIAN); - result.putShort((short)0x06); - result.putInt(0x54336726); - result.putLong(playerID); - - result.put(getAsciiString("SWG")); - result.put(getAsciiString(server)); - result.put(getAsciiString(name)); - result.putInt(0); - result.putInt(type); - result.put((byte) 0); - result.flip(); - //System.out.println("ChatOnChangeFriendStatus: " + result.getHexDump()); - return result; - } - -} diff --git a/src/protocol/swg/ChatSystemMessage.java b/src/protocol/swg/ChatSystemMessage.java deleted file mode 100644 index e12aa1f4..00000000 --- a/src/protocol/swg/ChatSystemMessage.java +++ /dev/null @@ -1,91 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2013 - * - * This File is part of NGECore2. - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with this program. If not, see . - * - * Using NGEngine to work with NGECore2 is making a combined work based on NGEngine. - * Therefore all terms and conditions of the GNU Lesser General Public License cover the combination. - ******************************************************************************/ -package protocol.swg; - -import java.nio.ByteOrder; - -import org.apache.mina.core.buffer.IoBuffer; - -import resources.common.Opcodes; - -public class ChatSystemMessage extends SWGMessage{ - - private String stfFilename; - private String stfName; - private int stat; - private String message; - private byte displayType; - - public ChatSystemMessage(String message, byte displayType) { - this.message = message; - this.displayType = displayType; - } - - public ChatSystemMessage(String stfFilename, String stfName, int stat, byte displayType) { - this.stfFilename = stfFilename; - this.stfName = stfName; - this.stat = stat; - this.displayType = displayType; - } - - public void deserialize(IoBuffer data) { - - } - - public IoBuffer serialize() { - if (message != null) { - IoBuffer result = IoBuffer.allocate(15 + message.length() * 2).order(ByteOrder.LITTLE_ENDIAN); - result.putShort((short) 2); - result.putInt(Opcodes.ChatSystemMessage); - result.put(displayType); // 0x00 = Chat and Screen // 0x02 = Chat only - result.put(getUnicodeString(message)); - result.putInt(0); - return result.flip(); - } else { - IoBuffer result = IoBuffer.allocate(99 + stfFilename.length() + stfName.length()).order(ByteOrder.LITTLE_ENDIAN); - result.putShort((short) 4); - result.putInt(Opcodes.ChatSystemMessage); - result.put((byte) 0); //result.put((byte) displayType); // 0x00 = Chat and Screen // 0x02 = Chat only - result.putInt(0); - result.putInt(54); - result.putShort((short) 0); - result.put((byte) 1); - result.putInt(-1); - result.put(getAsciiString(stfFilename)); - result.putInt(0); - result.put(getAsciiString(stfName)); - result.putInt(0); - result.putLong(0); - result.putLong(0); - result.putLong(0); - result.putLong(0); - result.putLong(0); - result.putLong(0); - result.putLong(0); - result.putInt(stat); - result.putInt(0); - result.put((byte) 0); - return result.flip(); - } - } - -} diff --git a/src/protocol/swg/ClientPermissionsMessage.java b/src/protocol/swg/ClientPermissionsMessage.java index b2f7dc22..8a2ba6de 100644 --- a/src/protocol/swg/ClientPermissionsMessage.java +++ b/src/protocol/swg/ClientPermissionsMessage.java @@ -28,11 +28,14 @@ import org.apache.mina.core.buffer.IoBuffer; public class ClientPermissionsMessage extends SWGMessage { - public ClientPermissionsMessage() { + private int characterSlotsOpen; + + public ClientPermissionsMessage(int characterSlotsOpen) { + if(characterSlotsOpen < 0) + characterSlotsOpen = 0; + this.characterSlotsOpen = characterSlotsOpen; operandCount = 5; opcode = 0xE00730E5; - - data = new byte[] { (byte)0x01, (byte)0x01, (byte)0x00, (byte)0x01 }; } public void deserialize(IoBuffer data) { @@ -44,9 +47,11 @@ public class ClientPermissionsMessage extends SWGMessage { result.putShort(operandCount); result.putInt(opcode); - result.put(data); - result.flip(); + result.put((byte) 1); + result.put((byte) characterSlotsOpen); + result.put((byte) 0); + result.put((byte) 1); - return result; + return result.flip(); } } diff --git a/src/protocol/swg/ClientVerifyAndLockNameRequest.java b/src/protocol/swg/ClientVerifyAndLockNameRequest.java index 7d9c9722..ea0011f5 100644 --- a/src/protocol/swg/ClientVerifyAndLockNameRequest.java +++ b/src/protocol/swg/ClientVerifyAndLockNameRequest.java @@ -38,8 +38,8 @@ public class ClientVerifyAndLockNameRequest extends SWGMessage { public void deserialize(IoBuffer buffer) { buffer.position(6); // Skips SOE and SWG opcodes raceTemplate = getNextAsciiString(buffer); - name = getNextUnicodeString(buffer);; - + name = getNextUnicodeString(buffer); + System.out.println("msg: " + name); // Gets the first and last names String [] splitName = name.split(" "); firstName = splitName[0]; diff --git a/src/protocol/swg/CollectionServerFirstListRequest.java b/src/protocol/swg/CollectionServerFirstListRequest.java new file mode 100644 index 00000000..cc053664 --- /dev/null +++ b/src/protocol/swg/CollectionServerFirstListRequest.java @@ -0,0 +1,53 @@ +/******************************************************************************* + * Copyright (c) 2013 + * + * This File is part of NGECore2. + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see . + * + * Using NGEngine to work with NGECore2 is making a combined work based on NGEngine. + * Therefore all terms and conditions of the GNU Lesser General Public License cover the combination. + ******************************************************************************/ +package protocol.swg; + +import org.apache.mina.core.buffer.IoBuffer; + +public class CollectionServerFirstListRequest extends SWGMessage { + + private String server; + + public CollectionServerFirstListRequest() { + } + + @Override + public void deserialize(IoBuffer data) { + data.getShort(); + data.getInt(); + setServer(getAsciiString(data)); + } + + public String getServer() { + return server; + } + + @Override + public IoBuffer serialize() { + return null; + } + + public void setServer(String server) { + this.server = server; + } + +} diff --git a/src/protocol/swg/CollectionServerFirstListResponse.java b/src/protocol/swg/CollectionServerFirstListResponse.java new file mode 100644 index 00000000..0373dc5a --- /dev/null +++ b/src/protocol/swg/CollectionServerFirstListResponse.java @@ -0,0 +1,73 @@ +/******************************************************************************* + * Copyright (c) 2013 + * + * This File is part of NGECore2. + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see . + * + * Using NGEngine to work with NGECore2 is making a combined work based on NGEngine. + * Therefore all terms and conditions of the GNU Lesser General Public License cover the combination. + ******************************************************************************/ +package protocol.swg; + +import java.nio.ByteOrder; +import java.util.Map; +import java.util.Map.Entry; + +import org.apache.mina.core.buffer.IoBuffer; + +import services.collections.ServerFirst; +import engine.resources.common.CRC; + +public class CollectionServerFirstListResponse extends SWGMessage { + + private Map sfList; + private String server; + + public CollectionServerFirstListResponse(String server, Map serverFirstList){ + this.sfList = serverFirstList; + this.server = server; + } + + @Override + public void deserialize(IoBuffer data) { + + } + + @Override + public IoBuffer serialize() { + IoBuffer buffer; + + int size = 0; + + synchronized (sfList) { + for (Entry entry : sfList.entrySet()) { + size += entry.getValue().getBytes().length; + } + + buffer = IoBuffer.allocate(12 + server.length() + size).order(ByteOrder.LITTLE_ENDIAN); + buffer.putShort((short) 2); + buffer.putInt(CRC.StringtoCRC("CollectionServerFirstListResponse")); + + buffer.put(getAsciiString(server)); + buffer.putInt(sfList.size()); + + for (Entry entry : sfList.entrySet()) { + buffer.put(entry.getValue().getBytes()); + + } + return buffer.flip(); + } + } +} diff --git a/src/protocol/swg/CommPlayerMessage.java b/src/protocol/swg/CommPlayerMessage.java new file mode 100644 index 00000000..9acde60c --- /dev/null +++ b/src/protocol/swg/CommPlayerMessage.java @@ -0,0 +1,81 @@ +/******************************************************************************* + * Copyright (c) 2013 + * + * This File is part of NGECore2. + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see . + * + * Using NGEngine to work with NGECore2 is making a combined work based on NGEngine. + * Therefore all terms and conditions of the GNU Lesser General Public License cover the combination. + ******************************************************************************/ +package protocol.swg; + +import java.nio.ByteOrder; + +import org.apache.mina.core.buffer.IoBuffer; + +import engine.resources.common.CRC; +import resources.common.OutOfBand; + +public class CommPlayerMessage extends SWGMessage { + + private long objectId; + private String model; + private OutOfBand outOfBand; + private int time; + + public CommPlayerMessage(long objectId, OutOfBand outOfBand) { + this.objectId = objectId; + this.outOfBand = outOfBand; + } + + @Override + public void deserialize(IoBuffer data) { + + } + + @Override + public IoBuffer serialize() { + IoBuffer buffer = IoBuffer.allocate(50).order(ByteOrder.LITTLE_ENDIAN); + buffer.setAutoExpand(true); + + buffer.putShort((short) 2); + buffer.putInt(0x594AD258); + buffer.put((byte) 0); // aurebesh borders on comm, space version? Can cause crashes + buffer.putLong(objectId); + buffer.put(outOfBand.serialize().array()); + // Officer Supply Drop: 0x3E894347 + // Rebel Faction Dude: 0x528CB3D7 + if (model == null) + buffer.putInt(0x3E894347); + else + buffer.putInt(CRC.StringtoCRC(model)); + buffer.putInt(0); // sound + buffer.putShort((short) 0); // unk + if (time == 0) + buffer.putShort((short) 16576); + else + buffer.putShort((short) time); + buffer.flip(); + return buffer; + } + + public void setModel(String model) { + this.model = model; + } + + public void setTime(int time) { + this.time = time; + } +} diff --git a/src/protocol/swg/CreateClientPathMessage.java b/src/protocol/swg/CreateClientPathMessage.java new file mode 100644 index 00000000..930f9eb2 --- /dev/null +++ b/src/protocol/swg/CreateClientPathMessage.java @@ -0,0 +1,65 @@ +/******************************************************************************* + * Copyright (c) 2013 + * + * This File is part of NGECore2. + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see . + * + * Using NGEngine to work with NGECore2 is making a combined work based on NGEngine. + * Therefore all terms and conditions of the GNU Lesser General Public License cover the combination. + ******************************************************************************/ +package protocol.swg; + +import java.nio.ByteOrder; +import java.util.List; + +import org.apache.mina.core.buffer.IoBuffer; + +import engine.resources.common.CRC; +import engine.resources.common.StringUtilities; +import engine.resources.scene.Point3D; + +public class CreateClientPathMessage extends SWGMessage { + + private List coordinates; + + public CreateClientPathMessage(List coordinates) { + this.coordinates = coordinates; + } + + @Override + public void deserialize(IoBuffer data) { + + } + + @Override + public IoBuffer serialize() { + IoBuffer buffer = IoBuffer.allocate((coordinates.size() * 12) + 10).order(ByteOrder.LITTLE_ENDIAN); + + buffer.putShort((short) 2); + buffer.putInt(CRC.StringtoCRC("CreateClientPathMessage")); + + buffer.putInt(coordinates.size()); + for(Point3D point : coordinates) { + buffer.putFloat(point.x); + buffer.putFloat(point.z); + buffer.putFloat(point.y); + } + + buffer.flip(); + StringUtilities.printBytes(buffer.array()); + return buffer; + } + +} diff --git a/src/protocol/swg/EnterStructurePlacementModeMessage.java b/src/protocol/swg/EnterStructurePlacementModeMessage.java new file mode 100644 index 00000000..b46ed3db --- /dev/null +++ b/src/protocol/swg/EnterStructurePlacementModeMessage.java @@ -0,0 +1,60 @@ +/******************************************************************************* + * Copyright (c) 2013 + * + * This File is part of NGECore2. + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see . + * + * Using NGEngine to work with NGECore2 is making a combined work based on NGEngine. + * Therefore all terms and conditions of the GNU Lesser General Public License cover the combination. + ******************************************************************************/ +package protocol.swg; + +import java.nio.ByteOrder; + +import main.NGECore; + +import org.apache.mina.core.buffer.IoBuffer; + +import services.travel.TravelPoint; +import engine.resources.objects.SWGObject; + +@SuppressWarnings("unused") +public class EnterStructurePlacementModeMessage extends SWGMessage { + + private SWGObject deed; + private String structureTemplate; + + public EnterStructurePlacementModeMessage(SWGObject deed, String structureTemplate) { + this.deed = deed; + this.structureTemplate = structureTemplate; + deed.setAttachment("structureTemplate", structureTemplate); + } + + @Override + public void deserialize(IoBuffer data) { + + } + + @Override + public IoBuffer serialize() { + IoBuffer result = IoBuffer.allocate(16 + structureTemplate.length()).order(ByteOrder.LITTLE_ENDIAN); + result.putShort((short) 3); + result.putInt(0xE8A54DC1); + result.putLong(deed.getObjectID()); + result.put(getAsciiString(structureTemplate)); + return result.flip(); + } + +} \ No newline at end of file diff --git a/src/protocol/swg/EnterTicketPurchaseModeMessage.java b/src/protocol/swg/EnterTicketPurchaseModeMessage.java index 05d53ad5..d160f215 100644 --- a/src/protocol/swg/EnterTicketPurchaseModeMessage.java +++ b/src/protocol/swg/EnterTicketPurchaseModeMessage.java @@ -30,6 +30,7 @@ import org.apache.mina.core.buffer.IoBuffer; import services.travel.TravelPoint; import engine.resources.objects.SWGObject; +@SuppressWarnings("unused") public class EnterTicketPurchaseModeMessage extends SWGMessage { private String planetName; @@ -51,8 +52,7 @@ public class EnterTicketPurchaseModeMessage extends SWGMessage { public IoBuffer serialize() { final NGECore core = NGECore.getInstance(); TravelPoint nearestPoint = core.travelService.getNearestTravelPoint(player); - - IoBuffer result = IoBuffer.allocate(20 + planetName.length() + nearestPoint.getName().length()).order(ByteOrder.LITTLE_ENDIAN); + IoBuffer result = IoBuffer.allocate(11 + planetName.length() + nearestPoint.getName().length()).order(ByteOrder.LITTLE_ENDIAN); result.putShort((short) 3); result.putInt(0x904DAE1A); @@ -60,6 +60,8 @@ public class EnterTicketPurchaseModeMessage extends SWGMessage { result.put(getAsciiString(planetName)); result.put(getAsciiString(nearestPoint.getName())); + result.put((byte) 0); + return result.flip(); } diff --git a/src/protocol/swg/FactionResponseMessage.java b/src/protocol/swg/FactionResponseMessage.java new file mode 100644 index 00000000..fe3b8bbb --- /dev/null +++ b/src/protocol/swg/FactionResponseMessage.java @@ -0,0 +1,83 @@ +/******************************************************************************* + * Copyright (c) 2013 + * + * This File is part of NGECore2. + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see . + * + * Using NGEngine to work with NGECore2 is making a combined work based on NGEngine. + * Therefore all terms and conditions of the GNU Lesser General Public License cover the combination. + ******************************************************************************/ +package protocol.swg; + +import java.nio.ByteOrder; +import java.util.Map; +import java.util.TreeMap; + +import org.apache.mina.core.buffer.IoBuffer; + +import resources.common.Opcodes; + +public class FactionResponseMessage extends SWGMessage { + + private Map factionStandingMap; + private int factionRank = 0; + private int rebelPoints = 0; + private int imperialPoints = 0; + + public FactionResponseMessage(Map factionStandingMap, int factionRank) { + this.factionStandingMap = new TreeMap(); + this.factionStandingMap.putAll(factionStandingMap); + this.factionRank = factionRank; + + if (this.factionStandingMap.containsKey("rebel")) { + this.rebelPoints = this.factionStandingMap.get("rebel"); + } + + if (this.factionStandingMap.containsKey("imperial")) { + this.imperialPoints = this.factionStandingMap.get("imperial"); + } + } + + public void deserialize(IoBuffer data) { + + } + + public IoBuffer serialize() { + int size = 26 + (factionStandingMap.size() * 4); + + for (String faction : factionStandingMap.keySet()) { + size += (2 + faction.length()); + } + + IoBuffer result = IoBuffer.allocate(size, false).order(ByteOrder.LITTLE_ENDIAN); + result.setAutoExpand(true); + result.putShort((short) 2); + result.putInt(Opcodes.FactionResponseMessage); + result.putInt(factionRank); + result.putInt(rebelPoints); + result.putInt(imperialPoints); + result.putInt(factionStandingMap.size()); + for (String faction : factionStandingMap.keySet()) { + result.put(getAsciiString(faction)); + } + result.putInt(factionStandingMap.size()); + for (Integer points : factionStandingMap.values()) { + result.putFloat((float) points); + } + result.flip(); + return result; + } + +} diff --git a/src/protocol/swg/GuildRequestMessage.java b/src/protocol/swg/GuildRequestMessage.java new file mode 100644 index 00000000..d9f1f368 --- /dev/null +++ b/src/protocol/swg/GuildRequestMessage.java @@ -0,0 +1,31 @@ +package protocol.swg; + +import org.apache.mina.core.buffer.IoBuffer; + +public class GuildRequestMessage extends SWGMessage { + + private long characterId; + + public GuildRequestMessage() { + } + + @Override + public void deserialize(IoBuffer data) { + //data.getShort(); + setCharacterId(data.getLong()); + } + + @Override + public IoBuffer serialize() { + return null; + } + + public long getCharacterId() { + return characterId; + } + + public void setCharacterId(long characterId) { + this.characterId = characterId; + } + +} diff --git a/src/protocol/swg/GuildResponseMessage.java b/src/protocol/swg/GuildResponseMessage.java new file mode 100644 index 00000000..f98e6713 --- /dev/null +++ b/src/protocol/swg/GuildResponseMessage.java @@ -0,0 +1,56 @@ +/******************************************************************************* + * Copyright (c) 2013 + * + * This File is part of NGECore2. + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see . + * + * Using NGEngine to work with NGECore2 is making a combined work based on NGEngine. + * Therefore all terms and conditions of the GNU Lesser General Public License cover the combination. + ******************************************************************************/ +package protocol.swg; + +import java.nio.ByteOrder; + +import org.apache.mina.core.buffer.IoBuffer; + +public class GuildResponseMessage extends SWGMessage { + + private long player; + private String guildName; + + public GuildResponseMessage(long player, String guild) { + this.player = player; + this.guildName = guild; + } + + @Override + public void deserialize(IoBuffer data) { + + + } + + @Override + public IoBuffer serialize() { + IoBuffer buffer = IoBuffer.allocate(18 + guildName.length()).order(ByteOrder.LITTLE_ENDIAN); + + buffer.putShort((short) 4); + buffer.putInt(0x32263F20); + + buffer.putLong(player); + buffer.put(getAsciiString(guildName)); + + return buffer.flip(); + } +} diff --git a/src/protocol/swg/LoginClusterStatus.java b/src/protocol/swg/LoginClusterStatus.java index 30028b44..725a8c8b 100644 --- a/src/protocol/swg/LoginClusterStatus.java +++ b/src/protocol/swg/LoginClusterStatus.java @@ -26,6 +26,8 @@ import java.util.TimeZone; import org.apache.mina.core.buffer.IoBuffer; +import engine.clients.Client; + public class LoginClusterStatus extends SWGMessage { private byte[] servers; @@ -46,7 +48,7 @@ public class LoginClusterStatus extends SWGMessage { result.flip(); return result; } - public void addServer(int galaxyID, String serverIP, int serverPort, int pingPort, int maxCharacters, int status, int recommended, int population) { + public void addServer(int galaxyID, String serverIP, int serverPort, int pingPort, int maxCharacters, int status, int recommended, int population, Client client) { IoBuffer result = IoBuffer.allocate(39 + serverIP.length()).order(ByteOrder.LITTLE_ENDIAN); int populationStatus = 0; @@ -64,6 +66,8 @@ public class LoginClusterStatus extends SWGMessage { populationStatus = 6; status = 3; } + if(status == 3 && client.isGM()) + status = 2; result.putInt(populationStatus); // 0 = very light, 1 = light, 2 = medium , 3 = heavy, 4 = very heavy, 5 = extremely heavy, 6 = full result.putInt(maxCharacters); //result.putInt(0xFFFF8F80); // Distance? diff --git a/src/protocol/swg/ObjControllerMessage.java b/src/protocol/swg/ObjControllerMessage.java index e307d7c2..cb1ff04b 100644 --- a/src/protocol/swg/ObjControllerMessage.java +++ b/src/protocol/swg/ObjControllerMessage.java @@ -26,6 +26,7 @@ import java.nio.ByteOrder; import org.apache.mina.core.buffer.IoBuffer; + import protocol.swg.objectControllerObjects.CommandEnqueue; import protocol.swg.objectControllerObjects.DataTransform; import protocol.swg.objectControllerObjects.DataTransformWithParent; @@ -52,6 +53,29 @@ public class ObjControllerMessage extends SWGMessage { public static final int OBJECT_MENU_RESPONSE = 0x0147; public static final int SHOW_FLY_TEXT = 0x01BD; public static final int START_TASK = 0x448; + public static final int ANIMATION = 0x00F2; + public static final int BUFF_BUILDER_CHANGE = 0x025A; + public static final int BUFF_BUILDER_END = 0x025B; + public static final int BUFF_BUILDER_START = 0x025C; + public static final int UI_PLAY_EFFECT = 0x0401; + public static final int SHOW_LOOT_BOX = 0x04BC; + public static final int IMAGE_DESIGN_START = 0x023A; + public static final int IMAGE_DESIGN_CHANGE = 0x0238; + public static final int IMAGE_DESIGN_END = 0x0239; + public static final int START_CONVERSATION = 0x00DD; + public static final int STOP_CONVERSATION = 0x00DE; + public static final int CONVERSATION_MESSAGE = 0x00DF; + public static final int CONVERSATION_OPTIONS = 0x00E0; + public static final int DRAFT_SCHEMATICS = 0x0102; + public static final int DRAFT_SLOTS = 0x0103; + public static final int CRAFT_EXPERIMENT = 0x0106; + public static final int CRAFT_ACKNOWLEDGE = 0x010C; + public static final int CRAFT_CUSTOMIZATION = 0x015A; + public static final int NEXT_CRAFTING_STAGE_RESULT = 0x01BE; + public static final int DRAFT_SLOTS_QUERY_RESPONSE = 0x01BF; + public static final int RESOURCE_WEIGHTS = 0x0207; + public static final int MISSION_ACCEPT_RESPONSE = 0x00FA; + public static final int MISSION_ABORT_RESPONSE = 0x0142; public ObjControllerMessage() { @@ -69,13 +93,14 @@ public class ObjControllerMessage extends SWGMessage { } public IoBuffer serialize() { - IoBuffer buffer = IoBuffer.allocate(1024).order(ByteOrder.LITTLE_ENDIAN); - + //IoBuffer buffer = IoBuffer.allocate(1024).order(ByteOrder.LITTLE_ENDIAN); -> java.nio.BufferOverflowException + IoBuffer buffer = IoBuffer.allocate(10).order(ByteOrder.LITTLE_ENDIAN); + buffer.setAutoExpand(true); buffer.putShort((short)5); buffer.putInt(0x80CE5E46); buffer.putInt(update); buffer.put(objControllerObject.serialize()); - + //System.out.println("OBJMSG: " + StringUtilities.bytesToHex(buffer.flip().array())); int size = buffer.position(); return IoBuffer.allocate(size).put(buffer.array(), 0, size).flip(); } diff --git a/src/protocol/swg/ObjectMenuSelect.java b/src/protocol/swg/ObjectMenuSelectMessage.java similarity index 89% rename from src/protocol/swg/ObjectMenuSelect.java rename to src/protocol/swg/ObjectMenuSelectMessage.java index f3bd2f50..c24d00d2 100644 --- a/src/protocol/swg/ObjectMenuSelect.java +++ b/src/protocol/swg/ObjectMenuSelectMessage.java @@ -23,9 +23,9 @@ package protocol.swg; import org.apache.mina.core.buffer.IoBuffer; -public class ObjectMenuSelect extends SWGMessage { +public class ObjectMenuSelectMessage extends SWGMessage { - private byte selection; + private short selection; private long objectId; @Override @@ -34,7 +34,7 @@ public class ObjectMenuSelect extends SWGMessage { buffer.getShort(); buffer.getInt(); setObjectId(buffer.getLong()); - setSelection(buffer.get()); + setSelection(buffer.getShort()); } @@ -44,11 +44,11 @@ public class ObjectMenuSelect extends SWGMessage { return null; } - public byte getSelection() { + public short getSelection() { return selection; } - public void setSelection(byte selection) { + public void setSelection(short selection) { this.selection = selection; } diff --git a/src/protocol/swg/OkMessage.java b/src/protocol/swg/OkMessage.java new file mode 100644 index 00000000..a5bc1276 --- /dev/null +++ b/src/protocol/swg/OkMessage.java @@ -0,0 +1,29 @@ +package protocol.swg; + +import java.nio.ByteOrder; + +import org.apache.mina.core.buffer.IoBuffer; + +import engine.resources.common.StringUtilities; + +public class OkMessage extends SWGMessage { + + public OkMessage() { + + } + + @Override + public void deserialize(IoBuffer data) { + + } + + @Override + public IoBuffer serialize() { + IoBuffer buffer = IoBuffer.allocate(6).order(ByteOrder.LITTLE_ENDIAN); + buffer.putShort((short) 1); + buffer.putInt(0xA16CF9AF); + System.out.println(StringUtilities.bytesToHex(buffer.array())); + return buffer.flip(); + } + +} diff --git a/src/protocol/swg/ParametersMessage.java b/src/protocol/swg/ParametersMessage.java index fbc87a36..0d4abb53 100644 --- a/src/protocol/swg/ParametersMessage.java +++ b/src/protocol/swg/ParametersMessage.java @@ -40,7 +40,7 @@ public class ParametersMessage extends SWGMessage { IoBuffer packet = IoBuffer.allocate(10).order(ByteOrder.LITTLE_ENDIAN); packet.putShort((short) 2); - packet.putInt(0x7102B15F); + packet.putInt(0x487652DA); packet.putInt(0x00000384); return packet.flip(); diff --git a/src/protocol/swg/PlanetTravelPointListRequest.java b/src/protocol/swg/PlanetTravelPointListRequest.java index 181bd631..fa62c567 100644 --- a/src/protocol/swg/PlanetTravelPointListRequest.java +++ b/src/protocol/swg/PlanetTravelPointListRequest.java @@ -21,17 +21,10 @@ ******************************************************************************/ package protocol.swg; -import java.util.List; - -import main.NGECore; - import org.apache.mina.core.buffer.IoBuffer; -import engine.resources.scene.Planet; - public class PlanetTravelPointListRequest extends SWGMessage{ - private NGECore core; private long objectId; private String planet; diff --git a/src/protocol/swg/PlanetTravelPointListResponse.java b/src/protocol/swg/PlanetTravelPointListResponse.java index 131551fd..4bd409b9 100644 --- a/src/protocol/swg/PlanetTravelPointListResponse.java +++ b/src/protocol/swg/PlanetTravelPointListResponse.java @@ -35,12 +35,10 @@ public class PlanetTravelPointListResponse extends SWGMessage { private String planetString; private Vector travelPoints; - private List planetList; - public PlanetTravelPointListResponse(String planetString, Vector travelPoints, List planetList) { + public PlanetTravelPointListResponse(String planetString, Vector travelPoints) { this.planetString = planetString; this.travelPoints = travelPoints; - this.planetList = planetList; } @Override @@ -50,11 +48,11 @@ public class PlanetTravelPointListResponse extends SWGMessage { @Override public IoBuffer serialize() { - IoBuffer result = IoBuffer.allocate(travelPoints.size() * 2).order(ByteOrder.LITTLE_ENDIAN); + IoBuffer result = IoBuffer.allocate(100).order(ByteOrder.LITTLE_ENDIAN); result.setAutoExpand(true); - result.putShort((short) 6); //2 - result.putInt(0x4D32541F); //4 + result.putShort((short) 6); + result.putInt(0x4D32541F); result.put(getAsciiString(planetString)); @@ -81,8 +79,9 @@ public class PlanetTravelPointListResponse extends SWGMessage { for (TravelPoint point : travelPoints) { result.put((byte) 1); // isReachable } - result.flip(); - return result; + int size = result.position(); + result = IoBuffer.allocate(size).put(result.array(), 0, size); + return result.flip(); } } diff --git a/src/protocol/swg/PlayClientEffectObjectMessage.java b/src/protocol/swg/PlayClientEffectObjectMessage.java index 5e9dead4..ad94129f 100644 --- a/src/protocol/swg/PlayClientEffectObjectMessage.java +++ b/src/protocol/swg/PlayClientEffectObjectMessage.java @@ -36,7 +36,6 @@ public class PlayClientEffectObjectMessage extends SWGMessage { this.effectFile = effectFile; this.objectId = objectId; this.commandString = commandString; - } @Override @@ -47,9 +46,18 @@ public class PlayClientEffectObjectMessage extends SWGMessage { result.putShort((short) 5); result.putInt(0x8855434A); result.put(getAsciiString(effectFile)); - result.putShort((short) 0); - result.putLong(objectId); - result.put(getAsciiString(commandString)); + + if(!effectFile.startsWith("clienteffect/holoemote_")) + { + result.putShort((short) 0); // Because waverunner is a dweeb + result.putLong(objectId); + result.put(getAsciiString(commandString)); + } + else + { + result.put(getAsciiString(commandString)); + result.putLong(objectId); + } return result.flip(); diff --git a/src/protocol/swg/PlayClientEffectObjectTransformMessage.java b/src/protocol/swg/PlayClientEffectObjectTransformMessage.java new file mode 100644 index 00000000..e5a0e7d4 --- /dev/null +++ b/src/protocol/swg/PlayClientEffectObjectTransformMessage.java @@ -0,0 +1,90 @@ +/******************************************************************************* + * Copyright (c) 2013 + * + * This File is part of NGECore2. + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see . + * + * Using NGEngine to work with NGECore2 is making a combined work based on NGEngine. + * Therefore all terms and conditions of the GNU Lesser General Public License cover the combination. + ******************************************************************************/ +package protocol.swg; + +import java.nio.ByteOrder; + +import org.apache.mina.core.buffer.IoBuffer; +import org.apache.mina.core.buffer.SimpleBufferAllocator; + +import engine.resources.scene.Point3D; +import engine.resources.scene.Quaternion; + +public class PlayClientEffectObjectTransformMessage extends SWGMessage { + + private long objectId; + private String effectFile; + private String commandString; + private Point3D effectorPosition; + private Quaternion effectorOrientation; + public SimpleBufferAllocator bufferPool = new SimpleBufferAllocator(); + + public PlayClientEffectObjectTransformMessage(String effectFile, long objectId, String commandString, Point3D effectorPosition, Quaternion effectorOrientation) { + + this.effectFile = effectFile; + this.objectId = objectId; + this.commandString = commandString; + this.effectorPosition = effectorPosition; + this.effectorOrientation = effectorOrientation; + } + + @Override + public IoBuffer serialize() { + + IoBuffer result = bufferPool.allocate(100, false).order(ByteOrder.LITTLE_ENDIAN); + result.setAutoExpand(true); + result.putShort((short) 5); + result.putInt(0x4F5E09B6); + result.put(getAsciiString(effectFile)); + result.putFloat(effectorOrientation.w); // qw + result.putFloat(effectorOrientation.x); // qx + result.putFloat(effectorOrientation.y); // qy + result.putFloat(effectorOrientation.z); // qz + result.putFloat(effectorPosition.x); // pos.x + result.putFloat(effectorPosition.y); // pos.y + result.putFloat(effectorPosition.z); // pos.z + result.putLong(objectId); + result.put(getAsciiString(commandString)); + + int size = result.position(); + result.flip(); + result = bufferPool.allocate(size, false).put(result.array(), 0, size); + + return IoBuffer.allocate(size).put(result.array(), 0, size).flip(); + } + + /* + 00 09 54 6C 05 00 B6 09-5E 4F 1B 00 61 70 70 65 + 61 72 61 6E 63 65 2F 70-74 5F 6C 6F 6F 74 5F 64 + 69 73 63 2E 70 72 74 00-00 00 00 00 00 00 00 00 + 00 00 00 00 00 80 3F 00-00 00 00 24 F8 AA 3F 00 + 00 00 00 3B 54 E1 3E 33-00 00 00 06 00 6C 6F 6F + 74 4D 65 01 EB 3C + */ + + @Override + public void deserialize(IoBuffer data) { + // TODO Auto-generated method stub + + } + +} diff --git a/src/protocol/swg/PlayerMoneyResponse.java b/src/protocol/swg/PlayerMoneyResponse.java new file mode 100644 index 00000000..0438dd02 --- /dev/null +++ b/src/protocol/swg/PlayerMoneyResponse.java @@ -0,0 +1,57 @@ +/******************************************************************************* + * Copyright (c) 2013 + * + * This File is part of NGECore2. + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see . + * + * Using NGEngine to work with NGECore2 is making a combined work based on NGEngine. + * Therefore all terms and conditions of the GNU Lesser General Public License cover the combination. + ******************************************************************************/ +package protocol.swg; + +import java.nio.ByteOrder; + +import org.apache.mina.core.buffer.IoBuffer; + +public class PlayerMoneyResponse extends SWGMessage { + + int cash; + int bank; + + public PlayerMoneyResponse(int cash, int bank) { + this.cash = cash; + this.bank = bank; + } + + @Override + public void deserialize(IoBuffer data) { + + } + + @Override + public IoBuffer serialize() { + IoBuffer buffer = IoBuffer.allocate(14).order(ByteOrder.LITTLE_ENDIAN); + + buffer.putShort((short) 3); + buffer.putInt(0x367E737E); + + buffer.putInt(bank); + buffer.putInt(cash); + + buffer.flip(); + return buffer; + } + +} diff --git a/src/protocol/swg/ResourceListForSurveyMessage.java b/src/protocol/swg/ResourceListForSurveyMessage.java new file mode 100644 index 00000000..e1c9c886 --- /dev/null +++ b/src/protocol/swg/ResourceListForSurveyMessage.java @@ -0,0 +1,119 @@ +/******************************************************************************* + * Copyright (c) 2013 + * + * This File is part of NGECore2. + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see . + * + * Using NGEngine to work with NGECore2 is making a combined work based on NGEngine. + * Therefore all terms and conditions of the GNU Lesser General Public License cover the combination. + ******************************************************************************/ +package protocol.swg; + +import java.io.UnsupportedEncodingException; +import java.nio.ByteOrder; +import java.util.ArrayList; +import java.util.List; +import java.util.Vector; + +import main.NGECore; + +import org.apache.mina.core.buffer.IoBuffer; +import protocol.swg.SWGMessage; +import resources.objects.creature.CreatureObject; +import resources.objects.resource.GalacticResource; +import resources.objects.tangible.TangibleObject; + +public class ResourceListForSurveyMessage extends SWGMessage { + + private TangibleObject tool; + private List resourceList; + + public ResourceListForSurveyMessage(TangibleObject tool, List resourceList) { + this.tool = tool; + this.resourceList = resourceList; + } + + public ResourceListForSurveyMessage(NGECore core, TangibleObject tool, CreatureObject surveyor) { + this.tool = tool; + this.resourceList = new ArrayList(); + byte generalType = 0; + String toolName = tool.getDetailName(); + if (toolName.equals("survey_tool_mineral")) + generalType = (byte) 0; + if (toolName.equals("survey_tool_inorganic")) + generalType = (byte) 1; + if (toolName.equals("survey_tool_organic") || toolName.equals("survey_tool_lumber")) + generalType = (byte) 2; + if (toolName.equals("survey_tool_gas")) + generalType = (byte) 3; + if (toolName.equals("survey_tool_moisture")) + generalType = (byte) 4; + if (toolName.equals("survey_tool_solar")) + generalType = (byte) 5; + if (toolName.equals("survey_tool_wind")) + generalType = (byte) 6; + if (toolName.equals("survey_tool_liquid")) + generalType = (byte) 7; + + Vector planetVector = core.resourceService.getSpawnedResourcesByPlanetAndType(surveyor.getPlanetId(),generalType); + + resourceList = new ArrayList(planetVector); + + } + + public void deserialize(IoBuffer data) { + + } + + public IoBuffer serialize() { + IoBuffer result = IoBuffer.allocate(10).order(ByteOrder.LITTLE_ENDIAN); + result.setAutoExpand(true); + result.putShort((short)4); + result.putInt(0x8A64B1D5); + result.putInt(resourceList.size()); + GalacticResource resourceElement = null; + for (int i = 0; i < resourceList.size(); i++) { + resourceElement = resourceList.get(i); + try { + result.putShort((short)resourceElement.getName().length()); // CStringesque length ahead + result.put(resourceElement.getName().getBytes("US-ASCII")); + result.putLong(resourceElement.getId()); + result.putShort((short)resourceElement.getFileName().length()); + result.put(resourceElement.getFileName().getBytes("US-ASCII")); + } catch (UnsupportedEncodingException e) { + e.printStackTrace(); + e.getMessage(); + e.getCause(); + } + } + if (resourceElement != null) { + try { + result.putShort((short)resourceElement.getCategory().length()); + result.put(resourceElement.getCategory().getBytes("US-ASCII")); + } catch (UnsupportedEncodingException e) { + e.printStackTrace(); + } + } else { + result.putShort((short)0); + } + + result.putLong(tool.getObjectID()); + + int size = result.position(); + result.flip(); + tools.CharonPacketUtils.printAnalysis(IoBuffer.allocate(size).put(result.array(), 0, size).flip()); + return IoBuffer.allocate(size).put(result.array(), 0, size).flip(); + } +} diff --git a/src/protocol/swg/SWGMessageFactory.java b/src/protocol/swg/SWGMessageFactory.java index fc5bd8c3..640b019e 100644 --- a/src/protocol/swg/SWGMessageFactory.java +++ b/src/protocol/swg/SWGMessageFactory.java @@ -24,6 +24,7 @@ package protocol.swg; import java.nio.ByteBuffer; import protocol.Message; +import protocol.swg.chat.ChatInstantMessageToCharacter; public class SWGMessageFactory { diff --git a/src/protocol/swg/SceneDestroyObject.java b/src/protocol/swg/SceneDestroyObject.java index e5fbfd02..2048f614 100644 --- a/src/protocol/swg/SceneDestroyObject.java +++ b/src/protocol/swg/SceneDestroyObject.java @@ -45,6 +45,7 @@ public class SceneDestroyObject extends SWGMessage { result.putInt(0x4D45D504); result.putLong(objectId); + result.put((byte) 0); // unk return result.flip(); } } diff --git a/src/protocol/swg/ServerWeatherMessage.java b/src/protocol/swg/ServerWeatherMessage.java index dfe21b2d..e8dc0955 100644 --- a/src/protocol/swg/ServerWeatherMessage.java +++ b/src/protocol/swg/ServerWeatherMessage.java @@ -45,7 +45,7 @@ public class ServerWeatherMessage extends SWGMessage { } public IoBuffer serialize() { - IoBuffer result = IoBuffer.allocate(26).order(ByteOrder.LITTLE_ENDIAN);; + IoBuffer result = IoBuffer.allocate(22).order(ByteOrder.LITTLE_ENDIAN); result.putShort((short)3); result.putInt(0x486356EA); @@ -54,6 +54,6 @@ public class ServerWeatherMessage extends SWGMessage { result.putFloat(cloudY); result.putFloat(cloudZ); - return result; + return result.flip(); } } diff --git a/src/protocol/swg/SetWaypointColor.java b/src/protocol/swg/SetWaypointColor.java new file mode 100644 index 00000000..f7a418d9 --- /dev/null +++ b/src/protocol/swg/SetWaypointColor.java @@ -0,0 +1,73 @@ +/******************************************************************************* + * Copyright (c) 2013 + * + * This File is part of NGECore2. + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see . + * + * Using NGEngine to work with NGECore2 is making a combined work based on NGEngine. + * Therefore all terms and conditions of the GNU Lesser General Public License cover the combination. + ******************************************************************************/ +package protocol.swg; + +import java.io.UnsupportedEncodingException; +import java.nio.ByteBuffer; + +import org.apache.mina.core.buffer.IoBuffer; + +public class SetWaypointColor extends SWGMessage { + + private long objectId; + private String color; + + public SetWaypointColor() { + + } + + @Override + public void deserialize(IoBuffer data) { + //data.getShort(); + //data.getInt(); + objectId = data.getLong(); + short size = data.getShort(); + try { + color = new String(ByteBuffer.allocate(size).put(data.array(), data.position(), size).array(), "US-ASCII"); + } catch (UnsupportedEncodingException e) { + e.printStackTrace(); + } + } + + @Override + public IoBuffer serialize() { + + return null; + } + + public long getObjectId() { + return objectId; + } + + public void setObjectId(long objectId) { + this.objectId = objectId; + } + + public String getColor() { + return color; + } + + public void setColor(String color) { + this.color = color; + } + +} diff --git a/src/protocol/swg/ShowBackpack.java b/src/protocol/swg/ShowBackpack.java new file mode 100644 index 00000000..04ba5b3b --- /dev/null +++ b/src/protocol/swg/ShowBackpack.java @@ -0,0 +1,60 @@ +/******************************************************************************* + * Copyright (c) 2013 + * + * This File is part of NGECore2. + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see . + * + * Using NGEngine to work with NGECore2 is making a combined work based on NGEngine. + * Therefore all terms and conditions of the GNU Lesser General Public License cover the combination. + ******************************************************************************/ +package protocol.swg; + +import org.apache.mina.core.buffer.IoBuffer; + +public class ShowBackpack extends SWGMessage { + + private long objectId; + private boolean showBackpack; + + public ShowBackpack() { } + + @Override + public void deserialize(IoBuffer data) { + setObjectId(data.getLong()); + setShowBackpack((data.get() == 1) ? true : false); + } + + public long getObjectId() { + return objectId; + } + + public boolean isShowBackpack() { + return showBackpack; + } + + @Override + public IoBuffer serialize() { + return null; + } + + public void setObjectId(long objectId) { + this.objectId = objectId; + } + + public void setShowBackpack(boolean showBackpack) { + this.showBackpack = showBackpack; + } + +} diff --git a/src/protocol/swg/ShowHelmet.java b/src/protocol/swg/ShowHelmet.java new file mode 100644 index 00000000..4c5c2ecb --- /dev/null +++ b/src/protocol/swg/ShowHelmet.java @@ -0,0 +1,60 @@ +/******************************************************************************* + * Copyright (c) 2013 + * + * This File is part of NGECore2. + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see . + * + * Using NGEngine to work with NGECore2 is making a combined work based on NGEngine. + * Therefore all terms and conditions of the GNU Lesser General Public License cover the combination. + ******************************************************************************/ +package protocol.swg; + +import org.apache.mina.core.buffer.IoBuffer; + +public class ShowHelmet extends SWGMessage { + + private long objectId; + private boolean showHelmet; + + public ShowHelmet() { } + + @Override + public void deserialize(IoBuffer data) { + setObjectId(data.getLong()); + setShowHelmet((data.get() == 1) ? true : false); + } + + public long getObjectId() { + return objectId; + } + + public boolean isShowHelmet() { + return showHelmet; + } + + @Override + public IoBuffer serialize() { + return null; + } + + public void setObjectId(long objectId) { + this.objectId = objectId; + } + + public void setShowHelmet(boolean showHelmet) { + this.showHelmet = showHelmet; + } + +} diff --git a/src/protocol/swg/SurveyMapUpdateMessage.java b/src/protocol/swg/SurveyMapUpdateMessage.java new file mode 100644 index 00000000..21a2728f --- /dev/null +++ b/src/protocol/swg/SurveyMapUpdateMessage.java @@ -0,0 +1,96 @@ +/******************************************************************************* + * Copyright (c) 2013 + * + * This File is part of NGECore2. + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see . + * + * Using NGEngine to work with NGECore2 is making a combined work based on NGEngine. + * Therefore all terms and conditions of the GNU Lesser General Public License cover the combination. + ******************************************************************************/ +package protocol.swg; + +import java.nio.ByteOrder; +import java.util.Vector; + +import org.apache.mina.core.buffer.IoBuffer; + +import protocol.swg.SWGMessage; +import resources.objects.resource.ResourceConcentration; + +public class SurveyMapUpdateMessage extends SWGMessage { + + private IoBuffer buffer; + private float highestConcentration; + float highestX; + float highestZ; + + public SurveyMapUpdateMessage(Vector concentrationMap, int pointsAmount) { + //this.buffer = buffer; + + this.buffer = IoBuffer.allocate(10).order(ByteOrder.LITTLE_ENDIAN); + buffer.setAutoExpand(true); + buffer.putInt(pointsAmount); + highestX = 0; + highestZ = 0; + highestConcentration = 0; + for (int i = 0; i < pointsAmount; i++) { + ResourceConcentration cursorConcentration = concentrationMap.get(i); + float concentration = 0.01f*cursorConcentration.getConcentration(); // percentage + float markerX = cursorConcentration.getCoordsX(); + float markerZ = cursorConcentration.getCoordsZ(); +// System.out.println("markerX " + markerX); +// System.out.println("markerZ " + markerZ); +// System.out.println("concentration " + concentration); + buffer.putFloat(markerX); + buffer.putFloat(0); + buffer.putFloat(markerZ); + buffer.putFloat(concentration); + if (highestConcentration + * + * This File is part of NGECore2. + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see . + * + * Using NGEngine to work with NGECore2 is making a combined work based on NGEngine. + * Therefore all terms and conditions of the GNU Lesser General Public License cover the combination. + ******************************************************************************/ +package protocol.swg; + +import java.nio.ByteOrder; + +import org.apache.mina.core.buffer.IoBuffer; + +public class UnknownAbilityPacket extends SWGMessage { + + private String ability; + + public UnknownAbilityPacket(String ability) { + this.ability = ability; + } + + @Override + public void deserialize(IoBuffer data) { + // TODO Auto-generated method stub + } + + @Override + public IoBuffer serialize() { + IoBuffer buffer = IoBuffer.allocate(8 + ability.length()).order(ByteOrder.LITTLE_ENDIAN); + buffer.putShort((short) 2); + buffer.putInt(0xE67E3875); + buffer.put(getAsciiString(ability)); + return buffer.flip(); + } + +} diff --git a/src/protocol/swg/UpdateCellPermissionMessage.java b/src/protocol/swg/UpdateCellPermissionMessage.java index fe35f240..943eb532 100644 --- a/src/protocol/swg/UpdateCellPermissionMessage.java +++ b/src/protocol/swg/UpdateCellPermissionMessage.java @@ -42,13 +42,13 @@ public class UpdateCellPermissionMessage extends SWGMessage { } public IoBuffer serialize() { - IoBuffer result = IoBuffer.allocate(128).order(ByteOrder.LITTLE_ENDIAN); + IoBuffer result = IoBuffer.allocate(15).order(ByteOrder.LITTLE_ENDIAN); result.putShort((short)3); result.putInt(0xF612499C); result.put(permission); result.putLong(cellId); - return result; + return result.flip(); } } diff --git a/src/protocol/swg/auctionManagerClientListener/AcceptAuctionResponseMessage.java b/src/protocol/swg/auctionManagerClientListener/AcceptAuctionResponseMessage.java new file mode 100644 index 00000000..49aae248 --- /dev/null +++ b/src/protocol/swg/auctionManagerClientListener/AcceptAuctionResponseMessage.java @@ -0,0 +1,55 @@ +/******************************************************************************* + * Copyright (c) 2013 + * + * This File is part of NGECore2. + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see . + * + * Using NGEngine to work with NGECore2 is making a combined work based on NGEngine. + * Therefore all terms and conditions of the GNU Lesser General Public License cover the combination. + ******************************************************************************/ +package protocol.swg.auctionManagerClientListener; + +import java.nio.ByteOrder; + +import org.apache.mina.core.buffer.IoBuffer; + +import protocol.swg.SWGMessage; + +public class AcceptAuctionResponseMessage extends SWGMessage { + + private long itemId; + private int error; + + public AcceptAuctionResponseMessage(long itemId, int error) { + this.itemId = itemId; + this.error = error; + } + + @Override + public void deserialize(IoBuffer data) { + + } + + @Override + public IoBuffer serialize() { + IoBuffer result = IoBuffer.allocate(18).order(ByteOrder.LITTLE_ENDIAN); + result.putShort((short) 3); + result.putInt(0xC58A446E); + result.putLong(itemId); + result.putInt(error); + return result.flip(); + } + +} diff --git a/src/protocol/swg/auctionManagerClientListener/AuctionItemDescriptionMessage.java b/src/protocol/swg/auctionManagerClientListener/AuctionItemDescriptionMessage.java new file mode 100644 index 00000000..bdb7e95e --- /dev/null +++ b/src/protocol/swg/auctionManagerClientListener/AuctionItemDescriptionMessage.java @@ -0,0 +1,59 @@ +/******************************************************************************* + * Copyright (c) 2013 + * + * This File is part of NGECore2. + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see . + * + * Using NGEngine to work with NGECore2 is making a combined work based on NGEngine. + * Therefore all terms and conditions of the GNU Lesser General Public License cover the combination. + ******************************************************************************/ +package protocol.swg.auctionManagerClientListener; + +import java.nio.ByteOrder; + +import org.apache.mina.core.buffer.IoBuffer; + +import protocol.swg.SWGMessage; + +public class AuctionItemDescriptionMessage extends SWGMessage { + + private long itemId; + private String description; + + public AuctionItemDescriptionMessage(long itemId, String description) { + this.itemId = itemId; + this.description = description; + } + + + @Override + public void deserialize(IoBuffer data) { + // TODO Auto-generated method stub + + } + + @Override + public IoBuffer serialize() { + IoBuffer result = IoBuffer.allocate(26 + (description.length() * 2)).order(ByteOrder.LITTLE_ENDIAN); + result.putShort((short) 2); + result.putInt(0xFE0E644B); + result.putLong(itemId); + result.put(getUnicodeString(description)); + result.putInt(0); + result.putInt(0); + return result.flip(); + } + +} diff --git a/src/protocol/swg/auctionManagerClientListener/AuctionQueryHeadersMessage.java b/src/protocol/swg/auctionManagerClientListener/AuctionQueryHeadersMessage.java new file mode 100644 index 00000000..b92f96c3 --- /dev/null +++ b/src/protocol/swg/auctionManagerClientListener/AuctionQueryHeadersMessage.java @@ -0,0 +1,185 @@ +/******************************************************************************* + * Copyright (c) 2013 + * + * This File is part of NGECore2. + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see . + * + * Using NGEngine to work with NGECore2 is making a combined work based on NGEngine. + * Therefore all terms and conditions of the GNU Lesser General Public License cover the combination. + ******************************************************************************/ +package protocol.swg.auctionManagerClientListener; + +import java.io.UnsupportedEncodingException; +import java.nio.ByteBuffer; + +import org.apache.mina.core.buffer.IoBuffer; + +import protocol.swg.SWGMessage; + +public class AuctionQueryHeadersMessage extends SWGMessage { + + private int range; + private int counter; + private int screen; + private int category; + private int itemTypeCRC; + private String searchString; + private int unkInt; + private int minPrice; + private int maxPrice; + private byte includeEntranceFee; + private long vendorId; + private byte vendorFlag; + private short offset; + + @Override + public void deserialize(IoBuffer data) { + data.skip(6); + setRange(data.getInt()); + setCounter(data.getInt()); + setScreen(data.getInt()); + setCategory(data.getInt()); + setItemTypeCRC(data.getInt()); + data.get(); // unk + int size = data.getInt(); + try { + setSearchString(new String(ByteBuffer.allocate(size * 2).put(data.array(), data.position(), size * 2).array(), "UTF-16LE")); + } catch (UnsupportedEncodingException e) { + e.printStackTrace(); + } + data.position(data.position() + size * 2); + + setUnkInt(data.getInt()); + setMinPrice(data.getInt()); + setMaxPrice(data.getInt()); + setIncludeEntranceFee(data.get()); + data.skip(5); // unk + setVendorId(data.getLong()); + setVendorFlag(data.get()); + setOffset(data.getShort()); + + } + + @Override + public IoBuffer serialize() { + // TODO Auto-generated method stub + return null; + } + + public int getRange() { + return range; + } + + public void setRange(int range) { + this.range = range; + } + + public int getCounter() { + return counter; + } + + public void setCounter(int counter) { + this.counter = counter; + } + + public int getScreen() { + return screen; + } + + public void setScreen(int screen) { + this.screen = screen; + } + + public int getCategory() { + return category; + } + + public void setCategory(int category) { + this.category = category; + } + + public int getItemTypeCRC() { + return itemTypeCRC; + } + + public void setItemTypeCRC(int itemTypeCRC) { + this.itemTypeCRC = itemTypeCRC; + } + + public String getSearchString() { + return searchString; + } + + public void setSearchString(String searchString) { + this.searchString = searchString; + } + + public int getUnkInt() { + return unkInt; + } + + public void setUnkInt(int unkInt) { + this.unkInt = unkInt; + } + + public int getMinPrice() { + return minPrice; + } + + public void setMinPrice(int minPrice) { + this.minPrice = minPrice; + } + + public int getMaxPrice() { + return maxPrice; + } + + public void setMaxPrice(int maxPrice) { + this.maxPrice = maxPrice; + } + + public byte getIncludeEntranceFee() { + return includeEntranceFee; + } + + public void setIncludeEntranceFee(byte includeEntranceFee) { + this.includeEntranceFee = includeEntranceFee; + } + + public long getVendorId() { + return vendorId; + } + + public void setVendorId(long vendorId) { + this.vendorId = vendorId; + } + + public byte getVendorFlag() { + return vendorFlag; + } + + public void setVendorFlag(byte vendorFlag) { + this.vendorFlag = vendorFlag; + } + + public short getOffset() { + return offset; + } + + public void setOffset(short offset) { + this.offset = offset; + } + +} diff --git a/src/protocol/swg/auctionManagerClientListener/AuctionQueryHeadersResponseMessage.java b/src/protocol/swg/auctionManagerClientListener/AuctionQueryHeadersResponseMessage.java new file mode 100644 index 00000000..a6327d7a --- /dev/null +++ b/src/protocol/swg/auctionManagerClientListener/AuctionQueryHeadersResponseMessage.java @@ -0,0 +1,198 @@ +/******************************************************************************* + * Copyright (c) 2013 + * + * This File is part of NGECore2. + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see . + * + * Using NGEngine to work with NGECore2 is making a combined work based on NGEngine. + * Therefore all terms and conditions of the GNU Lesser General Public License cover the combination. + ******************************************************************************/ +package protocol.swg.auctionManagerClientListener; + +import java.nio.ByteOrder; +import java.util.LinkedHashSet; + +import org.apache.mina.core.buffer.IoBuffer; + +import protocol.swg.SWGMessage; +import services.bazaar.AuctionItem; + +public class AuctionQueryHeadersResponseMessage extends SWGMessage { + + private int screen; + private int counter; + private LinkedHashSet locationList = new LinkedHashSet(); + private LinkedHashSet itemList = new LinkedHashSet(); + private long playerId; + private short offset; + private boolean continues; + + public AuctionQueryHeadersResponseMessage(long playerId, int screen, int counter, short offset, boolean continues) { + this.playerId = playerId; + this.screen = screen; + this.counter = counter; + this.offset = offset; + this.continues = continues; + } + + @Override + public void deserialize(IoBuffer data) { + // TODO Auto-generated method stub + + } + + public void addItem(AuctionItem item) { + locationList.add(item.getVuid()); + locationList.add(item.getOwnerName()); + + if(item.isAuction() && item.getStatus() == AuctionItem.FORSALE) + locationList.add(item.getBidderName()); + else + locationList.add(""); + + itemList.add(item); + } + + @Override + public IoBuffer serialize() { + final IoBuffer result = IoBuffer.allocate(100).order(ByteOrder.LITTLE_ENDIAN); + result.setAutoExpand(true); + + result.putShort((short) 8); + result.putInt(0xFA500E52); + result.putInt(counter); + result.putInt(screen); + + result.putInt(locationList.size()); + + for(String str : locationList) { + result.put(getAsciiString(str)); + } + + result.putInt(itemList.size()); + + for(AuctionItem item : itemList) { + result.put(getUnicodeString(item.getItemName())); + //System.out.println(item.getItemName()); + } + + result.putInt(itemList.size()); + + int i = 0; + for(AuctionItem item : itemList) { + + result.putLong(item.getObjectId()); + result.put((byte) i); + result.putInt(item.getPrice()); + result.putInt((int) ((item.getExpireTime() - System.currentTimeMillis()) / 1000)); + result.putInt(item.getPrice()); // if != price then auction instead of instant sale + //result.putInt(0); + result.putShort((short) getStringIndex(item.getVuid())); + result.putLong(item.getOwnerId()); + result.putShort((short) getStringIndex(item.getOwnerName())); + /*result.putInt(0); + result.put((byte) 0); + result.putShort((short) getStringIndex(item.getOwnerName())); + result.put((byte) 0);*/ + result.putLong(0); + result.putInt(0); // unk seen as 2 mostly, doesnt seem to have any effect + result.putInt(0); + result.putShort((short) 0); + result.putInt(item.getItemType()); // gameObjectType/category bitmask + + result.putInt(0); + int options = 0; + + if(item.getOwnerId() == playerId && (item.getStatus() == AuctionItem.OFFERED || item.getStatus() == AuctionItem.FORSALE)) + options |= 0x800; + + result.putInt(item.getAuctionOptions() | options); + result.putInt(0); + + + /*result.put((byte) 0); + result.putInt(CRC.StringtoCRC(item.getItem().getTemplate())); + result.putShort((short) 0); + result.put((byte) 0); + result.put((byte) 1); + result.putInt(0); + result.putInt(0); + result.put((byte) 0); + result.putInt(2); + result.putInt(0); + result.putShort((short) 0); + result.putInt(item.getItemType()); + result.putInt(0); + result.putInt(0); + result.putInt(0);*/ + +/* + result.put((byte) (item.isAuction() ? 0 : 1)); + result.putShort((short) getStringIndex(item.getVuid())); + result.putLong(item.getOwnerId()); + result.putShort((short) getStringIndex(item.getOwnerName())); + + if(item.isAuction() && item.getStatus() == AuctionItem.FORSALE) { + result.putLong(item.getBuyerId()); + result.putShort((short) getStringIndex(item.getBidderName())); + } else { + result.putLong(0); + result.putShort((short) getStringIndex("")); + } + + result.putInt(item.getProxyBid()); + result.putInt(item.getPrice()); + result.putInt(item.getItemType()); + + int options = 0; + + if(item.getOwnerId() == playerId && (item.getStatus() == AuctionItem.OFFERED || item.getStatus() == AuctionItem.FORSALE)) + options |= 0x800; + + result.putInt(item.getAuctionOptions() | options); + result.putInt(0); + */ + i++; + + } + + result.putShort(offset); + + if(continues) + result.put((byte) 1); + else + result.put((byte) 0); + + int size = result.position(); + IoBuffer result2 = IoBuffer.allocate(size).put(result.array(), 0, size); + + return result2.flip(); + } + + private int getStringIndex(String str) { + int i = 0; + for(String string : locationList) { + if(str.equals(string)) + return i; + i++; + } + return i; + } + + public void setContinues(boolean continues) { + this.continues = continues; + } + +} diff --git a/src/protocol/swg/auctionManagerClientListener/BidAuctionMessage.java b/src/protocol/swg/auctionManagerClientListener/BidAuctionMessage.java new file mode 100644 index 00000000..b065b56e --- /dev/null +++ b/src/protocol/swg/auctionManagerClientListener/BidAuctionMessage.java @@ -0,0 +1,83 @@ +/******************************************************************************* + * Copyright (c) 2013 + * + * This File is part of NGECore2. + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see . + * + * Using NGEngine to work with NGECore2 is making a combined work based on NGEngine. + * Therefore all terms and conditions of the GNU Lesser General Public License cover the combination. + ******************************************************************************/ +package protocol.swg.auctionManagerClientListener; + +import org.apache.mina.core.buffer.IoBuffer; + +import protocol.swg.SWGMessage; + +public class BidAuctionMessage extends SWGMessage { + + private long auctionId; + private long vendorId; + private int myPrice; + private int proxyPrice; + + + @Override + public void deserialize(IoBuffer data) { + data.skip(6); + setAuctionId(data.getLong()); + setVendorId(data.getLong()); + setMyPrice(data.getInt()); + setProxyPrice(data.getInt()); + } + + @Override + public IoBuffer serialize() { + // TODO Auto-generated method stub + return null; + } + + public long getAuctionId() { + return auctionId; + } + + public void setAuctionId(long auctionId) { + this.auctionId = auctionId; + } + + public int getMyPrice() { + return myPrice; + } + + public void setMyPrice(int myPrice) { + this.myPrice = myPrice; + } + + public int getProxyPrice() { + return proxyPrice; + } + + public void setProxyPrice(int proxyPrice) { + this.proxyPrice = proxyPrice; + } + + public long getVendorId() { + return vendorId; + } + + public void setVendorId(long vendorId) { + this.vendorId = vendorId; + } + +} diff --git a/src/protocol/swg/auctionManagerClientListener/BidAuctionResponseMessage.java b/src/protocol/swg/auctionManagerClientListener/BidAuctionResponseMessage.java new file mode 100644 index 00000000..06eff2f5 --- /dev/null +++ b/src/protocol/swg/auctionManagerClientListener/BidAuctionResponseMessage.java @@ -0,0 +1,71 @@ +/******************************************************************************* + * Copyright (c) 2013 + * + * This File is part of NGECore2. + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see . + * + * Using NGEngine to work with NGECore2 is making a combined work based on NGEngine. + * Therefore all terms and conditions of the GNU Lesser General Public License cover the combination. + ******************************************************************************/ +package protocol.swg.auctionManagerClientListener; + +import java.nio.ByteOrder; + +import org.apache.mina.core.buffer.IoBuffer; + +import protocol.swg.SWGMessage; + +public class BidAuctionResponseMessage extends SWGMessage { + + private long objectId; + private int status; + + public static final int SUCCESS = 0; + public static final int INVALIDAUCTIONER = 1; + public static final int INVALIDITEM = 2; + public static final int INVALIDPRICE = 4; + public static final int NOTENOUGHCREDITS = 9; + public static final int PURCHASEFAILED = 10; + public static final int PURCHASEREJECTED = 11; + public static final int PRICETOOHIGH = 13; + public static final int PRICEOVERFLOW = 14; + + public BidAuctionResponseMessage(long objectId, int status) { + this.objectId = objectId; + this.status = status; + } + + @Override + public void deserialize(IoBuffer data) { + // TODO Auto-generated method stub + + } + + @Override + public IoBuffer serialize() { + IoBuffer result = IoBuffer.allocate(18).order(ByteOrder.LITTLE_ENDIAN); + result.putShort((short) 3); + result.putInt(0x8FCBEF4A); + result.putLong(objectId); + result.putInt(status); + return result.flip(); + } + + public void setStatus(int status) { + this.status = status; + } + + +} diff --git a/src/protocol/swg/auctionManagerClientListener/CancelLiveAuctionMessage.java b/src/protocol/swg/auctionManagerClientListener/CancelLiveAuctionMessage.java new file mode 100644 index 00000000..cc3705a1 --- /dev/null +++ b/src/protocol/swg/auctionManagerClientListener/CancelLiveAuctionMessage.java @@ -0,0 +1,52 @@ +/******************************************************************************* + * Copyright (c) 2013 + * + * This File is part of NGECore2. + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see . + * + * Using NGEngine to work with NGECore2 is making a combined work based on NGEngine. + * Therefore all terms and conditions of the GNU Lesser General Public License cover the combination. + ******************************************************************************/ +package protocol.swg.auctionManagerClientListener; + +import org.apache.mina.core.buffer.IoBuffer; + +import protocol.swg.SWGMessage; + +public class CancelLiveAuctionMessage extends SWGMessage { + + private long objectId; + + @Override + public void deserialize(IoBuffer data) { + data.skip(6); + setObjectId(data.getLong()); + } + + @Override + public IoBuffer serialize() { + // TODO Auto-generated method stub + return null; + } + + public long getObjectId() { + return objectId; + } + + public void setObjectId(long objectId) { + this.objectId = objectId; + } + +} diff --git a/src/protocol/swg/auctionManagerClientListener/CancelLiveAuctionResponseMessage.java b/src/protocol/swg/auctionManagerClientListener/CancelLiveAuctionResponseMessage.java new file mode 100644 index 00000000..55e1ce02 --- /dev/null +++ b/src/protocol/swg/auctionManagerClientListener/CancelLiveAuctionResponseMessage.java @@ -0,0 +1,68 @@ +/******************************************************************************* + * Copyright (c) 2013 + * + * This File is part of NGECore2. + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see . + * + * Using NGEngine to work with NGECore2 is making a combined work based on NGEngine. + * Therefore all terms and conditions of the GNU Lesser General Public License cover the combination. + ******************************************************************************/ +package protocol.swg.auctionManagerClientListener; + +import java.nio.ByteOrder; + +import org.apache.mina.core.buffer.IoBuffer; + +import protocol.swg.SWGMessage; + +public class CancelLiveAuctionResponseMessage extends SWGMessage { + + public static final int SUCCESS = 0; + public static final int NOTALLOWED = 1; + public static final int INVALIDITEM = 2; + public static final int NOTOWNER = 8; + public static final int ALREADYCOMPLETED = 15; + private long itemId; + private int status; + + public CancelLiveAuctionResponseMessage(long itemId, int status) { + this.itemId = itemId; + this.status = status; + } + + + @Override + public void deserialize(IoBuffer data) { + // TODO Auto-generated method stub + + } + + @Override + public IoBuffer serialize() { + IoBuffer result = IoBuffer.allocate(19).order(ByteOrder.LITTLE_ENDIAN); + result.putShort((short) 4); + result.putInt(0x7DA2246C); + result.putLong(itemId); + result.putInt(status); + result.put((byte) 0); // unk + return result.flip(); + } + + public void setStatus(int status) { + this.status = status; + } + + +} diff --git a/src/protocol/swg/auctionManagerClientListener/CommoditiesItemTypeListResponse.java b/src/protocol/swg/auctionManagerClientListener/CommoditiesItemTypeListResponse.java new file mode 100644 index 00000000..a49dfa93 --- /dev/null +++ b/src/protocol/swg/auctionManagerClientListener/CommoditiesItemTypeListResponse.java @@ -0,0 +1,96 @@ +/******************************************************************************* + * Copyright (c) 2013 + * + * This File is part of NGECore2. + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see . + * + * Using NGEngine to work with NGECore2 is making a combined work based on NGEngine. + * Therefore all terms and conditions of the GNU Lesser General Public License cover the combination. + ******************************************************************************/ +package protocol.swg.auctionManagerClientListener; + +import java.nio.ByteOrder; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.Map.Entry; + +import main.NGECore; + +import org.apache.mina.core.buffer.IoBuffer; +import org.apache.mina.core.buffer.SimpleBufferAllocator; + +import protocol.swg.SWGMessage; +import services.bazaar.AuctionItem; + +public class CommoditiesItemTypeListResponse extends SWGMessage { + + private Map> itemList = new HashMap>(); + private static SimpleBufferAllocator bufferPool = new SimpleBufferAllocator(); + + public void addItem(AuctionItem item) { + if(itemList.get(item.getItemType()) == null) + itemList.put(item.getItemType(), new ArrayList()); + itemList.get(item.getItemType()).add(item); + } + + @Override + public void deserialize(IoBuffer data) { + // TODO Auto-generated method stub + + } + /** + * Struct of category lists: + * int numberofcategories + * + * int category + * number of items in category + * + * int server crc (w/o shared_) + * int category + * astring stf filename + * int spacer + * astring stf name + * + */ + + @Override + public IoBuffer serialize() { + String galaxy = NGECore.getInstance().getGalaxyName(); + IoBuffer result = bufferPool.allocate(14 + galaxy.length(), false).order(ByteOrder.LITTLE_ENDIAN); + result.setAutoExpand(true); + result.putShort((short) 2); + result.putInt(0xD4E937FC); + result.put(getAsciiString(galaxy + "." + Integer.toString(itemList.size()))); + result.putInt(itemList.size()); + + for(Entry> e : itemList.entrySet()) { + result.putInt(e.getKey()); + result.putInt(e.getValue().size()); + for(AuctionItem item : e.getValue()) { + result.putInt(item.getItemTypeCRC()); + result.putInt(item.getItemType()); + result.put(item.getItem().getObjectName().getBytes()); + } + } + + int size = result.position(); + IoBuffer result2 = IoBuffer.allocate(size).put(result.array(), 0, size); + + return result2.flip(); + } + +} diff --git a/src/protocol/swg/auctionManagerClientListener/CommoditiesResourceTypeListResponse.java b/src/protocol/swg/auctionManagerClientListener/CommoditiesResourceTypeListResponse.java new file mode 100644 index 00000000..f898ade4 --- /dev/null +++ b/src/protocol/swg/auctionManagerClientListener/CommoditiesResourceTypeListResponse.java @@ -0,0 +1,69 @@ +/******************************************************************************* + * Copyright (c) 2013 + * + * This File is part of NGECore2. + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see . + * + * Using NGEngine to work with NGECore2 is making a combined work based on NGEngine. + * Therefore all terms and conditions of the GNU Lesser General Public License cover the combination. + ******************************************************************************/ +package protocol.swg.auctionManagerClientListener; + +import java.nio.ByteOrder; +import java.util.Vector; + +import main.NGECore; + +import org.apache.mina.core.buffer.IoBuffer; + +import protocol.swg.SWGMessage; + +public class CommoditiesResourceTypeListResponse extends SWGMessage { + + private Vector resNames; + + public CommoditiesResourceTypeListResponse(Vector resNames) { + this.resNames = resNames; + } + + @Override + public void deserialize(IoBuffer data) { + // TODO Auto-generated method stub + + } + + @Override + public IoBuffer serialize() { + String galaxyName = NGECore.getInstance().getGalaxyName(); + final IoBuffer result = IoBuffer.allocate(100).order(ByteOrder.LITTLE_ENDIAN); + result.setAutoExpand(true); + + result.putShort((short) 2); + result.putInt(0x5EDD19CB); + + result.put(getAsciiString(galaxyName + "." + String.valueOf(resNames.size()))); + result.putInt(479); + result.putLong(0); + + // wrong struct, TODO: research + resNames.forEach(s -> result.put(getAsciiString(s))); + + int size = result.position(); + IoBuffer result2 = IoBuffer.allocate(size).put(result.array(), 0, size); + + return result2.flip(); + } + +} diff --git a/src/protocol/swg/auctionManagerClientListener/CreateAuctionMessage.java b/src/protocol/swg/auctionManagerClientListener/CreateAuctionMessage.java new file mode 100644 index 00000000..33a57339 --- /dev/null +++ b/src/protocol/swg/auctionManagerClientListener/CreateAuctionMessage.java @@ -0,0 +1,114 @@ +/******************************************************************************* + * Copyright (c) 2013 + * + * This File is part of NGECore2. + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see . + * + * Using NGEngine to work with NGECore2 is making a combined work based on NGEngine. + * Therefore all terms and conditions of the GNU Lesser General Public License cover the combination. + ******************************************************************************/ +package protocol.swg.auctionManagerClientListener; + +import java.io.UnsupportedEncodingException; +import java.nio.ByteBuffer; + +import org.apache.mina.core.buffer.IoBuffer; + +import protocol.swg.SWGMessage; + +public class CreateAuctionMessage extends SWGMessage { + + private long objectId; + private long vendorId; + private int price; + private int duration; + private String description; + private byte premium; + + @Override + public void deserialize(IoBuffer data) { + data.skip(6); + setObjectId(data.getLong()); + int size = data.getInt(); + try { + setDescription(new String(ByteBuffer.allocate(size * 2).put(data.array(), data.position(), size * 2).array(), "UTF-16LE")); + } catch (UnsupportedEncodingException e) { + e.printStackTrace(); + } + data.position(data.position() + size * 2); + + setVendorId(data.getLong()); + setPrice(data.getInt()); + setDuration(data.getInt()); // in minutes + setPremium(data.get()); + } + + @Override + public IoBuffer serialize() { + // TODO Auto-generated method stub + return null; + } + + public long getObjectId() { + return objectId; + } + + public void setObjectId(long objectId) { + this.objectId = objectId; + } + + public long getVendorId() { + return vendorId; + } + + public void setVendorId(long vendorId) { + this.vendorId = vendorId; + } + + public int getPrice() { + return price; + } + + public void setPrice(int price) { + this.price = price; + } + + public int getDuration() { + return duration; + } + + public void setDuration(int duration) { + this.duration = duration; + } + + public String getDescription() { + return description; + } + + public void setDescription(String description) { + this.description = description; + } + + public boolean getPremium() { + if(premium == 1) + return true; + return false; + } + + public void setPremium(byte premium) { + this.premium = premium; + } + +} diff --git a/src/protocol/swg/auctionManagerClientListener/CreateAuctionResponseMessage.java b/src/protocol/swg/auctionManagerClientListener/CreateAuctionResponseMessage.java new file mode 100644 index 00000000..8a067dff --- /dev/null +++ b/src/protocol/swg/auctionManagerClientListener/CreateAuctionResponseMessage.java @@ -0,0 +1,77 @@ +/******************************************************************************* + * Copyright (c) 2013 + * + * This File is part of NGECore2. + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see . + * + * Using NGEngine to work with NGECore2 is making a combined work based on NGEngine. + * Therefore all terms and conditions of the GNU Lesser General Public License cover the combination. + ******************************************************************************/ +package protocol.swg.auctionManagerClientListener; + +import java.nio.ByteOrder; + +import org.apache.mina.core.buffer.IoBuffer; + +import protocol.swg.SWGMessage; + +public class CreateAuctionResponseMessage extends SWGMessage { + + public static final int SUCCESS = 0; + public static final int INVALIDAUCTIONER = 1; + public static final int INVALIDITEM = 2; + public static final int BADVENDOR = 3; + public static final int INVALIDPRICE = 4; + public static final int INVALIDDURATION = 5; + public static final int ALREADYFORSALE = 6; + public static final int UNKERROR = 6; + public static final int DONTOWNITEM = 8; + public static final int NOTENOUGHCREDITS = 9; + public static final int TOOMANYITEMS = 13; + public static final int PRICETOOHIGH = 14; + public static final int CANTSELLTRADINGITEM = 19; + public static final int VENDORFULL = 25; + + private long objectId; + private int status; + + public CreateAuctionResponseMessage(long objectId, int status) { + this.objectId = objectId; + this.status = status; + } + + + @Override + public void deserialize(IoBuffer data) { + // TODO Auto-generated method stub + + } + + @Override + public IoBuffer serialize() { + IoBuffer result = IoBuffer.allocate(20).order(ByteOrder.LITTLE_ENDIAN); + result.putShort((short) 4); + result.putInt(0x0E61CC92); + result.putLong(objectId); + result.putInt(status); + result.putShort((short) 0); + return result.flip(); + } + + public void setStatus(int status) { + this.status = status; + } + +} diff --git a/src/protocol/swg/auctionManagerClientListener/CreateImmediateAuctionMessage.java b/src/protocol/swg/auctionManagerClientListener/CreateImmediateAuctionMessage.java new file mode 100644 index 00000000..0546f41e --- /dev/null +++ b/src/protocol/swg/auctionManagerClientListener/CreateImmediateAuctionMessage.java @@ -0,0 +1,113 @@ +/******************************************************************************* + * Copyright (c) 2013 + * + * This File is part of NGECore2. + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see . + * + * Using NGEngine to work with NGECore2 is making a combined work based on NGEngine. + * Therefore all terms and conditions of the GNU Lesser General Public License cover the combination. + ******************************************************************************/ +package protocol.swg.auctionManagerClientListener; + +import java.io.UnsupportedEncodingException; +import java.nio.ByteBuffer; + +import org.apache.mina.core.buffer.IoBuffer; + +import protocol.swg.SWGMessage; + +public class CreateImmediateAuctionMessage extends SWGMessage { + + private long objectId; + private long vendorId; + private int price; + private int duration; + private String description; + private byte premium; + + @Override + public void deserialize(IoBuffer data) { + data.skip(6); + setObjectId(data.getLong()); + setVendorId(data.getLong()); + setPrice(data.getInt()); + setDuration(data.getInt()); // in minutes + int size = data.getInt(); + try { + setDescription(new String(ByteBuffer.allocate(size * 2).put(data.array(), data.position(), size * 2).array(), "UTF-16LE")); + } catch (UnsupportedEncodingException e) { + e.printStackTrace(); + } + data.position(data.position() + size * 2); + setPremium(data.get()); + } + + @Override + public IoBuffer serialize() { + // TODO Auto-generated method stub + return null; + } + + public long getObjectId() { + return objectId; + } + + public void setObjectId(long objectId) { + this.objectId = objectId; + } + + public long getVendorId() { + return vendorId; + } + + public void setVendorId(long vendorId) { + this.vendorId = vendorId; + } + + public int getPrice() { + return price; + } + + public void setPrice(int price) { + this.price = price; + } + + public int getDuration() { + return duration; + } + + public void setDuration(int duration) { + this.duration = duration; + } + + public String getDescription() { + return description; + } + + public void setDescription(String description) { + this.description = description; + } + + public boolean getPremium() { + if(premium == 1) + return true; + return false; + } + + public void setPremium(byte premium) { + this.premium = premium; + } + +} diff --git a/src/protocol/swg/auctionManagerClientListener/GetAuctionDetails.java b/src/protocol/swg/auctionManagerClientListener/GetAuctionDetails.java new file mode 100644 index 00000000..946c0a06 --- /dev/null +++ b/src/protocol/swg/auctionManagerClientListener/GetAuctionDetails.java @@ -0,0 +1,52 @@ +/******************************************************************************* + * Copyright (c) 2013 + * + * This File is part of NGECore2. + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see . + * + * Using NGEngine to work with NGECore2 is making a combined work based on NGEngine. + * Therefore all terms and conditions of the GNU Lesser General Public License cover the combination. + ******************************************************************************/ +package protocol.swg.auctionManagerClientListener; + +import org.apache.mina.core.buffer.IoBuffer; + +import protocol.swg.SWGMessage; + +public class GetAuctionDetails extends SWGMessage { + + private long objectId; + + @Override + public void deserialize(IoBuffer data) { + data.skip(6); + setObjectId(data.getLong()); + } + + @Override + public IoBuffer serialize() { + // TODO Auto-generated method stub + return null; + } + + public long getObjectId() { + return objectId; + } + + public void setObjectId(long objectId) { + this.objectId = objectId; + } + +} diff --git a/src/protocol/swg/auctionManagerClientListener/GetAuctionDetailsResponse.java b/src/protocol/swg/auctionManagerClientListener/GetAuctionDetailsResponse.java new file mode 100644 index 00000000..e4aaac6c --- /dev/null +++ b/src/protocol/swg/auctionManagerClientListener/GetAuctionDetailsResponse.java @@ -0,0 +1,74 @@ +/******************************************************************************* + * Copyright (c) 2013 + * + * This File is part of NGECore2. + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see . + * + * Using NGEngine to work with NGECore2 is making a combined work based on NGEngine. + * Therefore all terms and conditions of the GNU Lesser General Public License cover the combination. + ******************************************************************************/ +package protocol.swg.auctionManagerClientListener; + +import java.nio.ByteOrder; + +import org.apache.mina.core.buffer.IoBuffer; + +import protocol.swg.SWGMessage; +import resources.objects.tangible.TangibleObject; +import services.bazaar.AuctionItem; + +public class GetAuctionDetailsResponse extends SWGMessage { + + private AuctionItem target; + + public GetAuctionDetailsResponse(AuctionItem target) { + this.target = target; + } + + @Override + public void deserialize(IoBuffer data) { + // TODO Auto-generated method stub + + } + + @Override + public IoBuffer serialize() { + final IoBuffer result = IoBuffer.allocate(100).order(ByteOrder.LITTLE_ENDIAN); + result.setAutoExpand(true); + + result.putShort((short) 2); + result.putInt(0xFE0E644B); + result.putLong(target.getObjectId()); + result.put(getUnicodeString(target.getItemDescription())); + result.putInt(target.getItem().getAttributes().size()); + target.getItem().getAttributes().forEach((key, value) -> { + result.put(getAsciiString(key)); + result.put(getUnicodeString(value)); + }); + result.put(getAsciiString(target.getItem().getTemplate())); + if(((TangibleObject) target.getItem()).getCustomization() != null) { + result.putShort((short) ((TangibleObject) target.getItem()).getCustomization().length); + result.put(((TangibleObject) target.getItem()).getCustomization()); + } else + result.putShort((short) 0); + + + int size = result.position(); + IoBuffer result2 = IoBuffer.allocate(size).put(result.array(), 0, size); + + return result2.flip(); + } + +} diff --git a/src/protocol/swg/auctionManagerClientListener/IsVendorOwnerMessage.java b/src/protocol/swg/auctionManagerClientListener/IsVendorOwnerMessage.java new file mode 100644 index 00000000..35b3b498 --- /dev/null +++ b/src/protocol/swg/auctionManagerClientListener/IsVendorOwnerMessage.java @@ -0,0 +1,52 @@ +/******************************************************************************* + * Copyright (c) 2013 + * + * This File is part of NGECore2. + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see . + * + * Using NGEngine to work with NGECore2 is making a combined work based on NGEngine. + * Therefore all terms and conditions of the GNU Lesser General Public License cover the combination. + ******************************************************************************/ +package protocol.swg.auctionManagerClientListener; + +import org.apache.mina.core.buffer.IoBuffer; + +import protocol.swg.SWGMessage; + +public class IsVendorOwnerMessage extends SWGMessage { + + private long terminalId; + + @Override + public void deserialize(IoBuffer data) { + data.skip(6); + setTerminalId(data.getLong()); + } + + @Override + public IoBuffer serialize() { + // TODO Auto-generated method stub + return null; + } + + public long getTerminalId() { + return terminalId; + } + + public void setTerminalId(long terminalId) { + this.terminalId = terminalId; + } + +} diff --git a/src/protocol/swg/auctionManagerClientListener/IsVendorOwnerResponseMessage.java b/src/protocol/swg/auctionManagerClientListener/IsVendorOwnerResponseMessage.java new file mode 100644 index 00000000..cfc73637 --- /dev/null +++ b/src/protocol/swg/auctionManagerClientListener/IsVendorOwnerResponseMessage.java @@ -0,0 +1,63 @@ +/******************************************************************************* + * Copyright (c) 2013 + * + * This File is part of NGECore2. + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see . + * + * Using NGEngine to work with NGECore2 is making a combined work based on NGEngine. + * Therefore all terms and conditions of the GNU Lesser General Public License cover the combination. + ******************************************************************************/ +package protocol.swg.auctionManagerClientListener; + +import java.nio.ByteOrder; + +import org.apache.mina.core.buffer.IoBuffer; + +import protocol.swg.SWGMessage; + +public class IsVendorOwnerResponseMessage extends SWGMessage { + + private int permission; + private int errorCode; + private long terminalId; + private String terminalString; + + public IsVendorOwnerResponseMessage(int permission, int errorCode, long terminalId, String terminalString) { + this.permission = permission; + this.errorCode = errorCode; + this.terminalId = terminalId; + this.terminalString = terminalString; + } + + @Override + public void deserialize(IoBuffer data) { + // TODO Auto-generated method stub + + } + + @Override + public IoBuffer serialize() { + IoBuffer result = IoBuffer.allocate(26 + terminalString.length()).order(ByteOrder.LITTLE_ENDIAN); + result.putShort((short) 6); + result.putInt(0xCE04173E); + result.putInt(permission); + result.putInt(errorCode); + result.putLong(terminalId); + result.put(getAsciiString(terminalString)); + result.putShort((short) 0x64); // unk + return result.flip(); + } + +} diff --git a/src/protocol/swg/auctionManagerClientListener/RetrieveAuctionItemMessage.java b/src/protocol/swg/auctionManagerClientListener/RetrieveAuctionItemMessage.java new file mode 100644 index 00000000..af2f0c0c --- /dev/null +++ b/src/protocol/swg/auctionManagerClientListener/RetrieveAuctionItemMessage.java @@ -0,0 +1,62 @@ +/******************************************************************************* + * Copyright (c) 2013 + * + * This File is part of NGECore2. + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see . + * + * Using NGEngine to work with NGECore2 is making a combined work based on NGEngine. + * Therefore all terms and conditions of the GNU Lesser General Public License cover the combination. + ******************************************************************************/ +package protocol.swg.auctionManagerClientListener; + +import org.apache.mina.core.buffer.IoBuffer; + +import protocol.swg.SWGMessage; + +public class RetrieveAuctionItemMessage extends SWGMessage { + + private long objectId; + private long vendorId; + + @Override + public void deserialize(IoBuffer data) { + data.skip(6); + setObjectId(data.getLong()); + setVendorId(data.getLong()); + } + + @Override + public IoBuffer serialize() { + // TODO Auto-generated method stub + return null; + } + + public long getObjectId() { + return objectId; + } + + public void setObjectId(long objectId) { + this.objectId = objectId; + } + + public long getVendorId() { + return vendorId; + } + + public void setVendorId(long vendorId) { + this.vendorId = vendorId; + } + +} diff --git a/src/protocol/swg/auctionManagerClientListener/RetrieveAuctionItemResponseMessage.java b/src/protocol/swg/auctionManagerClientListener/RetrieveAuctionItemResponseMessage.java new file mode 100644 index 00000000..ad9093da --- /dev/null +++ b/src/protocol/swg/auctionManagerClientListener/RetrieveAuctionItemResponseMessage.java @@ -0,0 +1,67 @@ +/******************************************************************************* + * Copyright (c) 2013 + * + * This File is part of NGECore2. + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see . + * + * Using NGEngine to work with NGECore2 is making a combined work based on NGEngine. + * Therefore all terms and conditions of the GNU Lesser General Public License cover the combination. + ******************************************************************************/ +package protocol.swg.auctionManagerClientListener; + +import java.nio.ByteOrder; + +import org.apache.mina.core.buffer.IoBuffer; + +import protocol.swg.SWGMessage; + +public class RetrieveAuctionItemResponseMessage extends SWGMessage { + + private long objectId; + private int status; + + public static final int SUCCESS = 0; + public static final int NOTALLOWED = 1; + public static final int FULLINVENTORY = 12; + public static final int TOOFAR = 0x100; + public static final int DONTRETRIEVE = 0x200; + + public RetrieveAuctionItemResponseMessage(long objectId, int status) { + this.objectId = objectId; + this.status = status; + } + + @Override + public void deserialize(IoBuffer data) { + // TODO Auto-generated method stub + + } + + @Override + public IoBuffer serialize() { + IoBuffer result = IoBuffer.allocate(18).order(ByteOrder.LITTLE_ENDIAN); + result.putShort((short) 3); + result.putInt(0x9499EF8C); + result.putLong(objectId); + result.putInt(status); + return result.flip(); + } + + public void setStatus(int status) { + this.status = status; + } + + +} diff --git a/src/protocol/swg/chat/ChatCreateRoom.java b/src/protocol/swg/chat/ChatCreateRoom.java new file mode 100644 index 00000000..841c1614 --- /dev/null +++ b/src/protocol/swg/chat/ChatCreateRoom.java @@ -0,0 +1,69 @@ +/******************************************************************************* + * Copyright (c) 2013 + * + * This File is part of NGECore2. + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see . + * + * Using NGEngine to work with NGECore2 is making a combined work based on NGEngine. + * Therefore all terms and conditions of the GNU Lesser General Public License cover the combination. + ******************************************************************************/ +package protocol.swg.chat; + +import org.apache.mina.core.buffer.IoBuffer; + +import protocol.swg.SWGMessage; + + +public class ChatCreateRoom extends SWGMessage { + + private String address, title; + private boolean privacy, moderatorOnly; + private int request; + + public ChatCreateRoom() { } + @Override + public void deserialize(IoBuffer data) { + + this.privacy = (boolean) ((data.get() == 1) ? false : true); + this.moderatorOnly = (boolean) ((data.get() == 1) ? true : false); + data.getShort(); // unk + this.address = getAsciiString(data); + this.title = getAsciiString(data); + this.request = data.getInt(); + } + + @Override + public IoBuffer serialize() { + return null; + } + + public String getAddress() { + return address; + } + public String getTitle() { + return title; + } + public boolean isPrivacy() { + return privacy; + } + public boolean isModeratorOnly() { + return moderatorOnly; + } + + public int getRequest() { + return request; + } + +} diff --git a/src/protocol/swg/ChatDeletePersistentMessage.java b/src/protocol/swg/chat/ChatDeletePersistentMessage.java similarity index 96% rename from src/protocol/swg/ChatDeletePersistentMessage.java rename to src/protocol/swg/chat/ChatDeletePersistentMessage.java index 1e812255..3f0d1b70 100644 --- a/src/protocol/swg/ChatDeletePersistentMessage.java +++ b/src/protocol/swg/chat/ChatDeletePersistentMessage.java @@ -19,10 +19,12 @@ * Using NGEngine to work with NGECore2 is making a combined work based on NGEngine. * Therefore all terms and conditions of the GNU Lesser General Public License cover the combination. ******************************************************************************/ -package protocol.swg; +package protocol.swg.chat; import org.apache.mina.core.buffer.IoBuffer; +import protocol.swg.SWGMessage; + public class ChatDeletePersistentMessage extends SWGMessage { diff --git a/src/protocol/swg/chat/ChatEnterRoomById.java b/src/protocol/swg/chat/ChatEnterRoomById.java new file mode 100644 index 00000000..2e2ec8e5 --- /dev/null +++ b/src/protocol/swg/chat/ChatEnterRoomById.java @@ -0,0 +1,62 @@ +/******************************************************************************* + * Copyright (c) 2013 + * + * This File is part of NGECore2. + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see . + * + * Using NGEngine to work with NGECore2 is making a combined work based on NGEngine. + * Therefore all terms and conditions of the GNU Lesser General Public License cover the combination. + ******************************************************************************/ +package protocol.swg.chat; + +import org.apache.mina.core.buffer.IoBuffer; + +import protocol.swg.SWGMessage; + +public class ChatEnterRoomById extends SWGMessage { + + private int roomId; + private int requestId; + private String roomName; + + public ChatEnterRoomById() { } + + @Override + public void deserialize(IoBuffer data) { + data.getShort(); + data.getInt(); + + this.requestId = data.getInt(); + this.roomId = data.getInt(); + this.roomName = getAsciiString(data); + } + + @Override + public IoBuffer serialize() { + return null; + } + + public int getRequestId() { + return requestId; + } + + public int getRoomId() { + return roomId; + } + + public String getRoomname() { + return roomName; + } +} diff --git a/src/protocol/swg/ChatFriendsListUpdate.java b/src/protocol/swg/chat/ChatFriendsListUpdate.java similarity index 75% rename from src/protocol/swg/ChatFriendsListUpdate.java rename to src/protocol/swg/chat/ChatFriendsListUpdate.java index b804c17b..f3a17a34 100644 --- a/src/protocol/swg/ChatFriendsListUpdate.java +++ b/src/protocol/swg/chat/ChatFriendsListUpdate.java @@ -1,4 +1,4 @@ -package protocol.swg; +package protocol.swg.chat; import java.nio.ByteOrder; @@ -6,8 +6,7 @@ import main.NGECore; import org.apache.mina.core.buffer.IoBuffer; -import engine.resources.config.Config; -import engine.resources.config.DefaultConfig; +import protocol.swg.SWGMessage; public class ChatFriendsListUpdate extends SWGMessage { @@ -29,12 +28,8 @@ public class ChatFriendsListUpdate extends SWGMessage { @Override public IoBuffer serialize() { - Config config = new Config(); - config.setFilePath("nge.cfg"); - if (!(config.loadConfigFile())) { - config = DefaultConfig.getConfig(); - } - String serverName = config.getString("GALAXY_NAME"); + + String serverName = NGECore.getInstance().getConfig().getString("GALAXY_NAME"); IoBuffer result = IoBuffer.allocate(50 + friendName.length()).order(ByteOrder.LITTLE_ENDIAN); result.putShort((short) 3); diff --git a/src/protocol/swg/ChatInstantMessageToCharacter.java b/src/protocol/swg/chat/ChatInstantMessageToCharacter.java similarity index 98% rename from src/protocol/swg/ChatInstantMessageToCharacter.java rename to src/protocol/swg/chat/ChatInstantMessageToCharacter.java index 1d0efccd..8a1414f9 100644 --- a/src/protocol/swg/ChatInstantMessageToCharacter.java +++ b/src/protocol/swg/chat/ChatInstantMessageToCharacter.java @@ -19,13 +19,15 @@ * Using NGEngine to work with NGECore2 is making a combined work based on NGEngine. * Therefore all terms and conditions of the GNU Lesser General Public License cover the combination. ******************************************************************************/ -package protocol.swg; +package protocol.swg.chat; import java.io.UnsupportedEncodingException; import java.nio.ByteBuffer; import org.apache.mina.core.buffer.IoBuffer; +import protocol.swg.SWGMessage; + @SuppressWarnings("unused") public class ChatInstantMessageToCharacter extends SWGMessage { diff --git a/src/protocol/swg/ChatInstantMessagetoClient.java b/src/protocol/swg/chat/ChatInstantMessagetoClient.java similarity index 97% rename from src/protocol/swg/ChatInstantMessagetoClient.java rename to src/protocol/swg/chat/ChatInstantMessagetoClient.java index f87c0da8..f11903fc 100644 --- a/src/protocol/swg/ChatInstantMessagetoClient.java +++ b/src/protocol/swg/chat/ChatInstantMessagetoClient.java @@ -19,12 +19,14 @@ * Using NGEngine to work with NGECore2 is making a combined work based on NGEngine. * Therefore all terms and conditions of the GNU Lesser General Public License cover the combination. ******************************************************************************/ -package protocol.swg; +package protocol.swg.chat; import java.nio.ByteOrder; import org.apache.mina.core.buffer.IoBuffer; +import protocol.swg.SWGMessage; + public class ChatInstantMessagetoClient extends SWGMessage{ diff --git a/src/protocol/swg/chat/ChatOnAddFriend.java b/src/protocol/swg/chat/ChatOnAddFriend.java new file mode 100644 index 00000000..44b0b8ac --- /dev/null +++ b/src/protocol/swg/chat/ChatOnAddFriend.java @@ -0,0 +1,48 @@ +/******************************************************************************* + * Copyright (c) 2013 + * + * This File is part of NGECore2. + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see . + * + * Using NGEngine to work with NGECore2 is making a combined work based on NGEngine. + * Therefore all terms and conditions of the GNU Lesser General Public License cover the combination. + ******************************************************************************/ +package protocol.swg.chat; + +import java.nio.ByteOrder; + +import org.apache.mina.core.buffer.IoBuffer; + +import protocol.swg.SWGMessage; + +public class ChatOnAddFriend extends SWGMessage { + + @Override + public void deserialize(IoBuffer data) { + + } + + @Override + public IoBuffer serialize() { + IoBuffer result = IoBuffer.allocate(20).order(ByteOrder.LITTLE_ENDIAN); + + result.putShort((short) 0x03); + result.putInt(0x2B2A0D94); + result.putLong(0); + result.flip(); + return result; + } + +} diff --git a/src/protocol/swg/chat/ChatOnChangeFriendStatus.java b/src/protocol/swg/chat/ChatOnChangeFriendStatus.java new file mode 100644 index 00000000..1c770233 --- /dev/null +++ b/src/protocol/swg/chat/ChatOnChangeFriendStatus.java @@ -0,0 +1,71 @@ +/******************************************************************************* + * Copyright (c) 2013 + * + * This File is part of NGECore2. + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see . + * + * Using NGEngine to work with NGECore2 is making a combined work based on NGEngine. + * Therefore all terms and conditions of the GNU Lesser General Public License cover the combination. + ******************************************************************************/ +package protocol.swg.chat; + +import java.nio.ByteOrder; + +import main.NGECore; + +import org.apache.mina.core.buffer.IoBuffer; + +import protocol.swg.SWGMessage; +import engine.resources.config.Config; + +public class ChatOnChangeFriendStatus extends SWGMessage { + + private String name; + private int type; + private long playerID; + + // Adds or Removes a friend, not to be confused with online/offline status + public ChatOnChangeFriendStatus(long playerID, String name, int type) { + this.name = name; + this.type = type; + this.playerID = playerID; + } + @Override + public void deserialize(IoBuffer data) { + + } + + @Override + public IoBuffer serialize() { + Config config = NGECore.getInstance().getConfig(); + String server = config.getString("GALAXY_NAME"); + + IoBuffer result = IoBuffer.allocate(100 + this.name.length() + server.length()).order(ByteOrder.LITTLE_ENDIAN); + result.putShort((short)0x06); + result.putInt(0x54336726); + result.putLong(playerID); + + result.put(getAsciiString("SWG")); + result.put(getAsciiString(server)); + result.put(getAsciiString(name)); + result.putInt(0); + result.putInt(type); + result.put((byte) 0); + result.flip(); + //System.out.println("ChatOnChangeFriendStatus: " + result.getHexDump()); + return result; + } + +} diff --git a/src/protocol/swg/chat/ChatOnConnectAvatar.java b/src/protocol/swg/chat/ChatOnConnectAvatar.java new file mode 100644 index 00000000..faebcf9d --- /dev/null +++ b/src/protocol/swg/chat/ChatOnConnectAvatar.java @@ -0,0 +1,48 @@ +/******************************************************************************* + * Copyright (c) 2013 + * + * This File is part of NGECore2. + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see . + * + * Using NGEngine to work with NGECore2 is making a combined work based on NGEngine. + * Therefore all terms and conditions of the GNU Lesser General Public License cover the combination. + ******************************************************************************/ +package protocol.swg.chat; + +import java.nio.ByteOrder; + +import org.apache.mina.core.buffer.IoBuffer; + +import protocol.swg.SWGMessage; + +public class ChatOnConnectAvatar extends SWGMessage { + + public ChatOnConnectAvatar() { } + + @Override + public void deserialize(IoBuffer data) { + } + + @Override + public IoBuffer serialize() { + IoBuffer buffer = IoBuffer.allocate(6).order(ByteOrder.LITTLE_ENDIAN); + + buffer.putShort((short) 1); + buffer.putInt(0xD72FE9BE); + + return buffer.flip(); + } + +} diff --git a/src/protocol/swg/chat/ChatOnCreateRoom.java b/src/protocol/swg/chat/ChatOnCreateRoom.java new file mode 100644 index 00000000..fc690fae --- /dev/null +++ b/src/protocol/swg/chat/ChatOnCreateRoom.java @@ -0,0 +1,94 @@ +/******************************************************************************* + * Copyright (c) 2013 + * + * This File is part of NGECore2. + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see . + * + * Using NGEngine to work with NGECore2 is making a combined work based on NGEngine. + * Therefore all terms and conditions of the GNU Lesser General Public License cover the combination. + ******************************************************************************/ +package protocol.swg.chat; + +import java.nio.ByteOrder; + +import main.NGECore; + +import org.apache.mina.core.buffer.IoBuffer; + +import protocol.swg.SWGMessage; +import services.chat.ChatRoom; + +public class ChatOnCreateRoom extends SWGMessage { + + private ChatRoom room; + private int error; + private int requestId; + + public ChatOnCreateRoom(ChatRoom room, int error, int requestId) { + this.room = room; + this.error = error; + this.requestId = requestId; + } + + @Override + public void deserialize(IoBuffer data) { + + } + + @Override + public IoBuffer serialize() { + String server = NGECore.getInstance().getGalaxyName(); + IoBuffer data = IoBuffer.allocate(100).order(ByteOrder.LITTLE_ENDIAN); + data.setAutoExpand(true); + + data.putShort((short) 4); + data.putInt(0x35D7CC9F); + + data.putInt(error); + data.putInt(room.getRoomId()); + data.putInt(room.isPrivateRoom() ? 0 : 1); + data.put((byte) (room.isModeratorsOnly() ? 1 : 0)); + data.put(getAsciiString(room.getRoomAddress())); + data.put(getAsciiString("SWG")); + data.put(getAsciiString(server)); + data.put(getAsciiString(room.getCreator())); + data.put(getAsciiString("SWG")); + data.put(getAsciiString(server)); + data.put(getAsciiString(room.getOwner())); + data.put(getUnicodeString(room.getDescription())); + + data.putInt(0); + /*if (room.getModeratorList().size() > 0) { + for (CreatureObject creo : room.getModeratorList()) { + data.put(getAsciiString("SWG")); + data.put(getAsciiString(server)); + data.put(getAsciiString(creo.getCustomName())); + } + }*/ + + data.putInt(0); + /*if (room.getUserList().size() > 0) { + for (CreatureObject creo : room.getUserList()) { + data.put(getAsciiString("SWG")); + data.put(getAsciiString(server)); + data.put(getAsciiString(creo.getCustomName())); + } + }*/ + + data.putInt(requestId); + return data.flip(); + } + +} diff --git a/src/protocol/swg/chat/ChatOnEnteredRoom.java b/src/protocol/swg/chat/ChatOnEnteredRoom.java new file mode 100644 index 00000000..fe82b29c --- /dev/null +++ b/src/protocol/swg/chat/ChatOnEnteredRoom.java @@ -0,0 +1,73 @@ +/******************************************************************************* + * Copyright (c) 2013 + * + * This File is part of NGECore2. + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see . + * + * Using NGEngine to work with NGECore2 is making a combined work based on NGEngine. + * Therefore all terms and conditions of the GNU Lesser General Public License cover the combination. + ******************************************************************************/ +package protocol.swg.chat; + +import java.nio.ByteOrder; + +import main.NGECore; + +import org.apache.mina.core.buffer.IoBuffer; + +import protocol.swg.SWGMessage; +import engine.resources.common.CRC; +import resources.common.Opcodes; + +public class ChatOnEnteredRoom extends SWGMessage { + + private String characterName; + private int success; + private int roomId; + private boolean join; + + public ChatOnEnteredRoom(String characterName, int success, int roomId, boolean join) { + this.characterName = characterName; + this.success = success; + this.roomId = roomId; + this.join = join; + } + + @Override + public void deserialize(IoBuffer data) { + + } + + @Override + public IoBuffer serialize() { + String galaxy = NGECore.getInstance().getGalaxyName(); + IoBuffer buffer = IoBuffer.allocate(27 + galaxy.length() + characterName.length()).order(ByteOrder.LITTLE_ENDIAN); + buffer.putShort((short) 5); + if (join) + buffer.putInt(Opcodes.ChatOnEnteredRoom); + else + buffer.putInt(CRC.StringtoCRC("ChatOnLeaveRoom")); + buffer.put(getAsciiString("SWG")); + buffer.put(getAsciiString(galaxy)); + buffer.put(getAsciiString(characterName.toLowerCase())); + buffer.putInt(success); + buffer.putInt(roomId); + buffer.putInt(0); + return buffer.flip(); + } + + public static final int JOIN_SUCCESS = 0; + public static final int JOIN_FAIL_NO_INVITE = 0x10; +} diff --git a/src/protocol/swg/ChatOnGetFriendsList.java b/src/protocol/swg/chat/ChatOnGetFriendsList.java similarity index 73% rename from src/protocol/swg/ChatOnGetFriendsList.java rename to src/protocol/swg/chat/ChatOnGetFriendsList.java index 6ee5fea6..14d5ac8f 100644 --- a/src/protocol/swg/ChatOnGetFriendsList.java +++ b/src/protocol/swg/chat/ChatOnGetFriendsList.java @@ -1,14 +1,16 @@ -package protocol.swg; +package protocol.swg.chat; import java.nio.ByteOrder; import java.util.List; +import main.NGECore; + import org.apache.mina.core.buffer.IoBuffer; -import engine.resources.config.Config; -import engine.resources.config.DefaultConfig; +import protocol.swg.SWGMessage; import resources.objects.player.PlayerObject; +// This is possibly unused public class ChatOnGetFriendsList extends SWGMessage { private List friendList; @@ -24,17 +26,11 @@ public class ChatOnGetFriendsList extends SWGMessage { } @Override public void deserialize(IoBuffer data) { - // XXX Auto-generated method stub - + } @Override public IoBuffer serialize() { - Config config = new Config(); - config.setFilePath("nge.cfg"); - if (!(config.loadConfigFile())) { - config = DefaultConfig.getConfig(); - } IoBuffer buffer = IoBuffer.allocate(200).order(ByteOrder.LITTLE_ENDIAN); @@ -47,7 +43,7 @@ public class ChatOnGetFriendsList extends SWGMessage { for (String friend : player.getFriendList()) { buffer.put(getAsciiString("SWG")); - buffer.put(getAsciiString(config.getString("GALAXY_NAME"))); + buffer.put(getAsciiString(NGECore.getInstance().getConfig().getString("GALAXY_NAME"))); int friendIndex = friendList.indexOf(friend); @@ -56,7 +52,6 @@ public class ChatOnGetFriendsList extends SWGMessage { int size = buffer.position(); buffer = IoBuffer.allocate(size).put(buffer.array(), 0, size); buffer.flip(); - //System.out.println("ChatOnGetFriendsList: " + buffer.getHexDump()); return buffer; } diff --git a/src/protocol/swg/chat/ChatOnLeaveRoom.java b/src/protocol/swg/chat/ChatOnLeaveRoom.java new file mode 100644 index 00000000..b9c2c0ba --- /dev/null +++ b/src/protocol/swg/chat/ChatOnLeaveRoom.java @@ -0,0 +1,124 @@ +/******************************************************************************* + * Copyright (c) 2013 + * + * This File is part of NGECore2. + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see . + * + * Using NGEngine to work with NGECore2 is making a combined work based on NGEngine. + * Therefore all terms and conditions of the GNU Lesser General Public License cover the combination. + ******************************************************************************/ +package protocol.swg.chat; + +import java.nio.ByteOrder; + +import org.apache.mina.core.buffer.IoBuffer; + +import protocol.swg.SWGMessage; + +public class ChatOnLeaveRoom extends SWGMessage { + + private String server; + private String character; + private String channelAddress; + private int errorId; + private int channelId; + private int requestId; + + public ChatOnLeaveRoom() { } + + public ChatOnLeaveRoom(String server, String character) { + this.server = server; + this.character = character; + this.errorId = 0; + this.requestId = 0; + } + + @Override + public void deserialize(IoBuffer data) { + data.getShort(); + data.getInt(); + getAsciiString(data); + getAsciiString(data); + character = getAsciiString(data); + channelAddress = getAsciiString(data); + } + + @Override + public IoBuffer serialize() { + IoBuffer buffer = IoBuffer.allocate(28 + server.length() + character.length()).order(ByteOrder.LITTLE_ENDIAN); + + buffer.putShort((short) 5); + buffer.putInt(0x60B5098B); + + buffer.put(getAsciiString("SWG")); + buffer.put(getAsciiString(server)); + buffer.put(getAsciiString(character)); + + buffer.putInt(errorId); + buffer.putInt(channelId); + buffer.putInt(requestId); + + return buffer.flip(); + } + + public String getServer() { + return server; + } + + public void setServer(String server) { + this.server = server; + } + + public String getCharacter() { + return character; + } + + public void setCharacter(String character) { + this.character = character; + } + + public String getChannelAddress() { + return channelAddress; + } + + public void setChannelAddress(String channelAddress) { + this.channelAddress = channelAddress; + } + + public int getErrorId() { + return errorId; + } + + public void setErrorId(int errorId) { + this.errorId = errorId; + } + + public int getChannelId() { + return channelId; + } + + public void setChannelId(int channelId) { + this.channelId = channelId; + } + + public int getRequestId() { + return requestId; + } + + public void setRequestId(int requestId) { + this.requestId = requestId; + } + +} diff --git a/src/protocol/swg/ChatOnSendInstantMessage.java b/src/protocol/swg/chat/ChatOnSendInstantMessage.java similarity index 96% rename from src/protocol/swg/ChatOnSendInstantMessage.java rename to src/protocol/swg/chat/ChatOnSendInstantMessage.java index 9bcb41da..f1be9e0a 100644 --- a/src/protocol/swg/ChatOnSendInstantMessage.java +++ b/src/protocol/swg/chat/ChatOnSendInstantMessage.java @@ -19,12 +19,14 @@ * Using NGEngine to work with NGECore2 is making a combined work based on NGEngine. * Therefore all terms and conditions of the GNU Lesser General Public License cover the combination. ******************************************************************************/ -package protocol.swg; +package protocol.swg.chat; import java.nio.ByteOrder; import org.apache.mina.core.buffer.IoBuffer; +import protocol.swg.SWGMessage; + public class ChatOnSendInstantMessage extends SWGMessage { private int errorType; diff --git a/src/protocol/swg/ChatOnSendPersistentMessage.java b/src/protocol/swg/chat/ChatOnSendPersistentMessage.java similarity index 96% rename from src/protocol/swg/ChatOnSendPersistentMessage.java rename to src/protocol/swg/chat/ChatOnSendPersistentMessage.java index 3d8a3a48..9dc28eff 100644 --- a/src/protocol/swg/ChatOnSendPersistentMessage.java +++ b/src/protocol/swg/chat/ChatOnSendPersistentMessage.java @@ -19,12 +19,14 @@ * Using NGEngine to work with NGECore2 is making a combined work based on NGEngine. * Therefore all terms and conditions of the GNU Lesser General Public License cover the combination. ******************************************************************************/ -package protocol.swg; +package protocol.swg.chat; import java.nio.ByteOrder; import org.apache.mina.core.buffer.IoBuffer; +import protocol.swg.SWGMessage; + public class ChatOnSendPersistentMessage extends SWGMessage { diff --git a/src/protocol/swg/chat/ChatOnSendRoomMessage.java b/src/protocol/swg/chat/ChatOnSendRoomMessage.java new file mode 100644 index 00000000..21d03390 --- /dev/null +++ b/src/protocol/swg/chat/ChatOnSendRoomMessage.java @@ -0,0 +1,58 @@ +/******************************************************************************* + * Copyright (c) 2013 + * + * This File is part of NGECore2. + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see . + * + * Using NGEngine to work with NGECore2 is making a combined work based on NGEngine. + * Therefore all terms and conditions of the GNU Lesser General Public License cover the combination. + ******************************************************************************/ +package protocol.swg.chat; + +import java.nio.ByteOrder; + +import org.apache.mina.core.buffer.IoBuffer; + +import protocol.swg.SWGMessage; + +public class ChatOnSendRoomMessage extends SWGMessage { + + private int errorCode; + private int msgId; + + public ChatOnSendRoomMessage(int errorCode, int msgId) { + this.errorCode = errorCode; + this.msgId = msgId; + } + + @Override + public void deserialize(IoBuffer data) { + } + + @Override + public IoBuffer serialize() { + IoBuffer buffer = IoBuffer.allocate(14).order(ByteOrder.LITTLE_ENDIAN); + buffer.putShort((short) 3); + buffer.putInt(0xE7B61633); + buffer.putInt(errorCode); + buffer.putInt(msgId); // msg id + return buffer.flip(); + } + + public static final int SUCCESS = 0; + public static final int FAILED_MODERATOR = 9; + public static final int FAILED_LENGTH = 16; + +} diff --git a/src/protocol/swg/ChatPersistentMessageToClient.java b/src/protocol/swg/chat/ChatPersistentMessageToClient.java similarity index 67% rename from src/protocol/swg/ChatPersistentMessageToClient.java rename to src/protocol/swg/chat/ChatPersistentMessageToClient.java index 3db681b6..6571d02d 100644 --- a/src/protocol/swg/ChatPersistentMessageToClient.java +++ b/src/protocol/swg/chat/ChatPersistentMessageToClient.java @@ -19,11 +19,16 @@ * Using NGEngine to work with NGECore2 is making a combined work based on NGEngine. * Therefore all terms and conditions of the GNU Lesser General Public License cover the combination. ******************************************************************************/ -package protocol.swg; +package protocol.swg.chat; import java.nio.ByteOrder; import java.util.List; + import org.apache.mina.core.buffer.IoBuffer; + +import engine.resources.common.StringUtilities; +import protocol.swg.SWGMessage; +import resources.common.ProsePackage; import services.chat.WaypointAttachment; @@ -37,9 +42,10 @@ public class ChatPersistentMessageToClient extends SWGMessage { private String subject; private byte status; private int timestamp; - private List attachments; + private List waypointAttachments; + private List proseAttachments; - public ChatPersistentMessageToClient(String sender, String galaxyName, int mailId, byte requestTypeFlag, String message, String subject, byte status, int timestamp, List attachments) { + public ChatPersistentMessageToClient(String sender, String galaxyName, int mailId, byte requestTypeFlag, String message, String subject, byte status, int timestamp, List waypointAttachments, List proseAttachments) { this.sender = sender; this.galaxyName = galaxyName; @@ -49,7 +55,8 @@ public class ChatPersistentMessageToClient extends SWGMessage { this.subject = subject; this.status = status; this.timestamp = timestamp; - this.attachments = attachments; + this.waypointAttachments = waypointAttachments; + this.proseAttachments = proseAttachments; } @@ -79,15 +86,18 @@ public class ChatPersistentMessageToClient extends SWGMessage { result.put(getUnicodeString(subject)); - if(requestTypeFlag == 1 || attachments.size() == 0) + if(requestTypeFlag == 1 || (waypointAttachments.size() == 0 && proseAttachments.size() == 0)) result.putInt(0); - else if(requestTypeFlag == 0 && attachments.size() > 0){ + else if(requestTypeFlag == 0 && (waypointAttachments.size() > 0 || proseAttachments.size() > 0)){ int position = result.position(); result.putInt(0); - for(WaypointAttachment attachment : attachments) { + for(WaypointAttachment attachment : waypointAttachments) { + result.putShort((short) 0); + result.put((byte) 4); + result.putInt(0xFFFFFFFD); result.putInt(0); result.putFloat(attachment.positionX); result.putFloat(attachment.positionY); @@ -98,16 +108,38 @@ public class ChatPersistentMessageToClient extends SWGMessage { result.putLong(attachment.cellID); result.put(attachment.color); result.put((byte) (attachment.active ? 1 : 0)); + result.put((byte) 0); } + for(ProsePackage prose : proseAttachments) { + + result.putShort((short) 0); + result.put((byte) 1); + result.putInt(0xFFFFFFFF); + result.put(prose.getStf().getBytes()); + result.putLong(prose.getTuObjectId()); + result.put(prose.getTuStf().getBytes()); + result.put(getUnicodeString(prose.getTuCustomString())); + result.putLong(prose.getTtObjectId()); + result.put(prose.getTtStf().getBytes()); + result.put(getUnicodeString(prose.getTtCustomString())); + result.putLong(prose.getToObjectId()); + result.put(prose.getToStf().getBytes()); + result.put(getUnicodeString(prose.getToCustomString())); + result.putInt(prose.getDiInteger()); + result.putFloat(prose.getDfFloat()); + result.put((byte) 0); + + } + result.putInt(position, (result.position() - position - 4) / 2); } result.put(status); result.putInt(timestamp); - result.putInt(0); + //result.putInt(0); int size = result.position(); result = IoBuffer.allocate(size).put(result.array(), 0, size); diff --git a/src/protocol/swg/ChatPersistentMessageToServer.java b/src/protocol/swg/chat/ChatPersistentMessageToServer.java similarity index 97% rename from src/protocol/swg/ChatPersistentMessageToServer.java rename to src/protocol/swg/chat/ChatPersistentMessageToServer.java index a8602f83..bed5888d 100644 --- a/src/protocol/swg/ChatPersistentMessageToServer.java +++ b/src/protocol/swg/chat/ChatPersistentMessageToServer.java @@ -19,13 +19,16 @@ * Using NGEngine to work with NGECore2 is making a combined work based on NGEngine. * Therefore all terms and conditions of the GNU Lesser General Public License cover the combination. ******************************************************************************/ -package protocol.swg; +package protocol.swg.chat; import java.io.UnsupportedEncodingException; import java.nio.ByteBuffer; import java.util.ArrayList; import java.util.List; + import org.apache.mina.core.buffer.IoBuffer; + +import protocol.swg.SWGMessage; import services.chat.WaypointAttachment; @@ -89,7 +92,7 @@ public class ChatPersistentMessageToServer extends SWGMessage { waypoint.active = false; waypointAttachments.add(waypoint); - System.out.println(waypoint.name); + //System.out.println(waypoint.name); if(appendByte > 0) buffer.get(); diff --git a/src/protocol/swg/chat/ChatQueryRoom.java b/src/protocol/swg/chat/ChatQueryRoom.java new file mode 100644 index 00000000..25e94d27 --- /dev/null +++ b/src/protocol/swg/chat/ChatQueryRoom.java @@ -0,0 +1,130 @@ +/******************************************************************************* + * Copyright (c) 2013 + * + * This File is part of NGECore2. + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see . + * + * Using NGEngine to work with NGECore2 is making a combined work based on NGEngine. + * Therefore all terms and conditions of the GNU Lesser General Public License cover the combination. + ******************************************************************************/ +package protocol.swg.chat; + +import java.nio.ByteOrder; +import java.util.Vector; + +import main.NGECore; + +import org.apache.mina.core.buffer.IoBuffer; + +import protocol.swg.SWGMessage; +import services.chat.ChatRoom; + +public class ChatQueryRoom extends SWGMessage { + + private ChatRoom room; + private String roomAddress; + private int requestId; + + public ChatQueryRoom() { } + public ChatQueryRoom(ChatRoom room, int requestId) { + this.room = room; + this.requestId = requestId; + } + + @Override + public void deserialize(IoBuffer data) { + data.getShort(); + data.getInt(); + requestId = data.getInt(); + roomAddress = getAsciiString(data); + } + + @Override + public IoBuffer serialize() { + String server = NGECore.getInstance().getGalaxyName(); + IoBuffer buffer = IoBuffer.allocate(100).order(ByteOrder.LITTLE_ENDIAN); + buffer.setAutoExpand(true); + + buffer.putShort((short) 7); + buffer.putInt(0xC4DE864E); + + Vector users = room.getUserList(); + + buffer.putInt(users.size()); + if (users.size() > 0) { + for (String str : users) { + buffer.put(getAsciiString("SWG")); + buffer.put(getAsciiString(server)); + buffer.put(getAsciiString(str)); + } + } + + buffer.putInt(0); // TODO: Invited list for chat rooms + + Vector moderators = room.getModeratorList(); + + buffer.putInt(moderators.size()); + if (moderators.size() > 0) { + for (String str : moderators) { + buffer.put(getAsciiString("SWG")); + buffer.put(getAsciiString(server)); + buffer.put(getAsciiString(str)); + } + } + + Vector banned = room.getBanList(); + buffer.putInt(banned.size()); + if (banned.size() > 0) { + for (String str : banned) { + buffer.put(getAsciiString("SWG")); + buffer.put(getAsciiString(server)); + buffer.put(getAsciiString(str)); + } + } + + buffer.putInt(requestId); + buffer.putInt(room.getRoomId()); + buffer.putInt(room.isPrivateRoom() ? 0 : 1); + buffer.put((byte) (room.isModeratorsOnly() ? 1 : 0)); + + buffer.put(getAsciiString(room.getRoomAddress())); + + buffer.put(getAsciiString("SWG")); + buffer.put(getAsciiString(server)); + buffer.put(getAsciiString(room.getOwner())); + + buffer.put(getAsciiString("SWG")); + buffer.put(getAsciiString(server)); + buffer.put(getAsciiString(room.getCreator())); + + buffer.put(getUnicodeString(room.getDescription())); + + buffer.putInt(0); // moderator list + buffer.putInt(0); // user list + return buffer.flip(); + } + public String getRoomAddress() { + return roomAddress; + } + public void setRoomAddress(String roomAddress) { + this.roomAddress = roomAddress; + } + public int getRequestId() { + return requestId; + } + public void setRequestId(int requestId) { + this.requestId = requestId; + } +} diff --git a/src/protocol/swg/ChatRequestPersistentMessage.java b/src/protocol/swg/chat/ChatRequestPersistentMessage.java similarity index 96% rename from src/protocol/swg/ChatRequestPersistentMessage.java rename to src/protocol/swg/chat/ChatRequestPersistentMessage.java index d52b4afd..dd9ec88f 100644 --- a/src/protocol/swg/ChatRequestPersistentMessage.java +++ b/src/protocol/swg/chat/ChatRequestPersistentMessage.java @@ -19,10 +19,12 @@ * Using NGEngine to work with NGECore2 is making a combined work based on NGEngine. * Therefore all terms and conditions of the GNU Lesser General Public License cover the combination. ******************************************************************************/ -package protocol.swg; +package protocol.swg.chat; import org.apache.mina.core.buffer.IoBuffer; +import protocol.swg.SWGMessage; + public class ChatRequestPersistentMessage extends SWGMessage { diff --git a/src/protocol/swg/chat/ChatRoomList.java b/src/protocol/swg/chat/ChatRoomList.java new file mode 100644 index 00000000..3021f72f --- /dev/null +++ b/src/protocol/swg/chat/ChatRoomList.java @@ -0,0 +1,102 @@ +/******************************************************************************* + * Copyright (c) 2013 + * + * This File is part of NGECore2. + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see . + * + * Using NGEngine to work with NGECore2 is making a combined work based on NGEngine. + * Therefore all terms and conditions of the GNU Lesser General Public License cover the combination. + ******************************************************************************/ +package protocol.swg.chat; + +import java.nio.ByteOrder; +import java.util.concurrent.ConcurrentHashMap; + +import main.NGECore; + +import org.apache.mina.core.buffer.IoBuffer; + +import protocol.swg.SWGMessage; +import services.chat.ChatRoom; + +public class ChatRoomList extends SWGMessage { + + private ConcurrentHashMap chatRooms; + private ChatRoom room; + + public ChatRoomList(ConcurrentHashMap chatRooms) { + this.chatRooms = chatRooms; + } + + public ChatRoomList(ChatRoom room) { + this.room = room; + } + + @Override + public void deserialize(IoBuffer data) { + + } + + @Override + public IoBuffer serialize() { + String server = NGECore.getInstance().getGalaxyName(); + IoBuffer buffer = IoBuffer.allocate(53).order(ByteOrder.LITTLE_ENDIAN); + buffer.setAutoExpand(true); + + buffer.putShort((short) 2); + buffer.putInt(0x70DEB197); + + if (room != null) { + buffer.putInt(1); + + buffer.putInt(room.getRoomId()); + buffer.putInt((int) ((room.isPrivateRoom() ? 1 : 0))); + buffer.put((byte) ((room.isModeratorsOnly() ? 1 : 0))); + buffer.put(getAsciiString(room.getRoomAddress())); + buffer.put(getAsciiString("SWG")); + buffer.put(getAsciiString(server)); + buffer.put(getAsciiString(room.getOwner())); + buffer.put(getAsciiString("SWG")); + buffer.put(getAsciiString(server)); + buffer.put(getAsciiString(room.getCreator())); + buffer.put(getUnicodeString(room.getDescription())); + buffer.putInt(0); // moderator list (not used by client) + buffer.putInt(0); // user list (not used by client) + } else { + buffer.putInt(chatRooms.size()); + chatRooms.forEach((key, value) -> { + if (value.isVisible()) { + buffer.putInt(value.getRoomId()); + buffer.putInt((int) ((value.isPrivateRoom() ? 1 : 0))); + buffer.put((byte) ((value.isModeratorsOnly() ? 1 : 0))); + buffer.put(getAsciiString(value.getRoomAddress())); + buffer.put(getAsciiString("SWG")); + buffer.put(getAsciiString(server)); + buffer.put(getAsciiString(value.getOwner())); + buffer.put(getAsciiString("SWG")); + buffer.put(getAsciiString(server)); + buffer.put(getAsciiString(value.getCreator())); + buffer.put(getUnicodeString(value.getDescription())); + buffer.putInt(0); // moderator list (not used by client) + buffer.putInt(0); // user list (not used by client) + } + }); + } + buffer.flip(); + //StringUtilities.printBytes(buffer.array()); + return buffer; + } + +} diff --git a/src/protocol/swg/chat/ChatRoomMessage.java b/src/protocol/swg/chat/ChatRoomMessage.java new file mode 100644 index 00000000..616d019d --- /dev/null +++ b/src/protocol/swg/chat/ChatRoomMessage.java @@ -0,0 +1,65 @@ +/******************************************************************************* + * Copyright (c) 2013 + * + * This File is part of NGECore2. + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see . + * + * Using NGEngine to work with NGECore2 is making a combined work based on NGEngine. + * Therefore all terms and conditions of the GNU Lesser General Public License cover the combination. + ******************************************************************************/ +package protocol.swg.chat; + +import java.nio.ByteOrder; + +import main.NGECore; + +import org.apache.mina.core.buffer.IoBuffer; + +import protocol.swg.SWGMessage; + +public class ChatRoomMessage extends SWGMessage { + + private String character; + private String message; + private int roomId; + + public ChatRoomMessage(int roomId, String player, String message) { + this.roomId = roomId; + this.character = player; + this.message = message; + } + + @Override + public void deserialize(IoBuffer data) { + } + + @Override + public IoBuffer serialize() { + String server = NGECore.getInstance().getGalaxyName(); + + IoBuffer buffer = IoBuffer.allocate(27 + server.length() + character.length() + (message.length() * 2)).order(ByteOrder.LITTLE_ENDIAN); + + buffer.putShort((short) 5); + buffer.putInt(0xCD4CE444); + buffer.put(getAsciiString("SWG")); + buffer.put(getAsciiString(server)); + buffer.put(getAsciiString(character)); + buffer.putInt(roomId); + buffer.put(getUnicodeString(message)); + buffer.putInt(0); // out of band package ? + return buffer.flip(); + } + +} diff --git a/src/protocol/swg/chat/ChatSendToRoom.java b/src/protocol/swg/chat/ChatSendToRoom.java new file mode 100644 index 00000000..68e0ced2 --- /dev/null +++ b/src/protocol/swg/chat/ChatSendToRoom.java @@ -0,0 +1,84 @@ +/******************************************************************************* + * Copyright (c) 2013 + * + * This File is part of NGECore2. + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see . + * + * Using NGEngine to work with NGECore2 is making a combined work based on NGEngine. + * Therefore all terms and conditions of the GNU Lesser General Public License cover the combination. + ******************************************************************************/ +package protocol.swg.chat; + +import java.io.UnsupportedEncodingException; +import java.nio.ByteBuffer; + +import org.apache.mina.core.buffer.IoBuffer; + +import protocol.swg.SWGMessage; + +public class ChatSendToRoom extends SWGMessage { + + private String message; + private int roomId; + private int msgId; + + public ChatSendToRoom() { } + + @Override + public void deserialize(IoBuffer data) { + try { + data.getShort(); + data.getInt(); + int size = data.getInt(); + message = new String(ByteBuffer.allocate(size * 2).put(data.array(), data.position(), size * 2).array(), "UTF-16LE"); + data.position(data.position() + size * 2); + data.getInt(); + setRoomId(data.getInt()); + setMsgId(data.getInt()); + } catch (UnsupportedEncodingException e) { + e.printStackTrace(); + } + } + + @Override + public IoBuffer serialize() { + return null; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public int getRoomId() { + return roomId; + } + + public void setRoomId(int roomId) { + this.roomId = roomId; + } + + public int getMsgId() { + return msgId; + } + + public void setMsgId(int msgId) { + this.msgId = msgId; + } + +} diff --git a/src/protocol/swg/chat/ChatServerStatus.java b/src/protocol/swg/chat/ChatServerStatus.java new file mode 100644 index 00000000..2de0db65 --- /dev/null +++ b/src/protocol/swg/chat/ChatServerStatus.java @@ -0,0 +1,46 @@ +/******************************************************************************* + * Copyright (c) 2013 + * + * This File is part of NGECore2. + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see . + * + * Using NGEngine to work with NGECore2 is making a combined work based on NGEngine. + * Therefore all terms and conditions of the GNU Lesser General Public License cover the combination. + ******************************************************************************/ +package protocol.swg.chat; + +import java.nio.ByteOrder; + +import org.apache.mina.core.buffer.IoBuffer; + +import protocol.swg.SWGMessage; + +public class ChatServerStatus extends SWGMessage { + + public ChatServerStatus() { } + + @Override + public void deserialize(IoBuffer data) { + } + + @Override + public IoBuffer serialize() { + IoBuffer buffer = IoBuffer.allocate(7).order(ByteOrder.LITTLE_ENDIAN); + buffer.putShort((short) 2); + buffer.putInt(0x7102B15F); + buffer.put((byte) 1); + return buffer.flip(); + } +} diff --git a/src/protocol/swg/chat/ChatSystemMessage.java b/src/protocol/swg/chat/ChatSystemMessage.java new file mode 100644 index 00000000..277eb596 --- /dev/null +++ b/src/protocol/swg/chat/ChatSystemMessage.java @@ -0,0 +1,59 @@ +/******************************************************************************* + * Copyright (c) 2013 + * + * This File is part of NGECore2. + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see . + * + * Using NGEngine to work with NGECore2 is making a combined work based on NGEngine. + * Therefore all terms and conditions of the GNU Lesser General Public License cover the combination. + ******************************************************************************/ +package protocol.swg.chat; + +import java.nio.ByteOrder; + +import org.apache.mina.core.buffer.IoBuffer; + +import protocol.swg.SWGMessage; +import resources.common.Opcodes; +import resources.common.OutOfBand; + +public class ChatSystemMessage extends SWGMessage { + + private String message; + private byte displayType; + private OutOfBand outOfBand; + + public ChatSystemMessage(String message, OutOfBand outOfBand, byte displayType) { + this.message = message; + this.displayType = displayType; + this.outOfBand = outOfBand; + } + + public void deserialize(IoBuffer data) { + + } + + public IoBuffer serialize() { + IoBuffer outOfBandBuffer = outOfBand.serialize(); + IoBuffer result = IoBuffer.allocate(7 + getUnicodeString(message).length + outOfBandBuffer.array().length).order(ByteOrder.LITTLE_ENDIAN); + result.putShort((short) 2); + result.putInt(Opcodes.ChatSystemMessage); + result.put(displayType); + result.put(getUnicodeString(message)); + result.put(outOfBandBuffer.array()); + return result.flip(); + } + +} diff --git a/src/protocol/swg/chat/VoiceChatStatus.java b/src/protocol/swg/chat/VoiceChatStatus.java new file mode 100644 index 00000000..97936a19 --- /dev/null +++ b/src/protocol/swg/chat/VoiceChatStatus.java @@ -0,0 +1,47 @@ +/******************************************************************************* + * Copyright (c) 2013 + * + * This File is part of NGECore2. + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see . + * + * Using NGEngine to work with NGECore2 is making a combined work based on NGEngine. + * Therefore all terms and conditions of the GNU Lesser General Public License cover the combination. + ******************************************************************************/ +package protocol.swg.chat; + +import java.nio.ByteOrder; + +import org.apache.mina.core.buffer.IoBuffer; + +import protocol.swg.SWGMessage; + +public class VoiceChatStatus extends SWGMessage { + + public VoiceChatStatus() { } + + @Override + public void deserialize(IoBuffer data) { + } + + @Override + public IoBuffer serialize() { + IoBuffer buffer = IoBuffer.allocate(10).order(ByteOrder.LITTLE_ENDIAN); + buffer.putShort((short) 2); + buffer.putInt(0x9E601905); + buffer.putInt(1); + return buffer.flip(); + } + +} diff --git a/src/protocol/swg/objectControllerObjects/Animation.java b/src/protocol/swg/objectControllerObjects/Animation.java new file mode 100644 index 00000000..957cf7d2 --- /dev/null +++ b/src/protocol/swg/objectControllerObjects/Animation.java @@ -0,0 +1,74 @@ +/******************************************************************************* + * Copyright (c) 2013 + * + * This File is part of NGECore2. + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see . + * + * Using NGEngine to work with NGECore2 is making a combined work based on NGEngine. + * Therefore all terms and conditions of the GNU Lesser General Public License cover the combination. + ******************************************************************************/ +package protocol.swg.objectControllerObjects; + +import java.nio.ByteOrder; + +import org.apache.mina.core.buffer.IoBuffer; + +import protocol.swg.ObjControllerMessage; + +public class Animation extends ObjControllerObject { + + private long objectId; + private String animation; + + public Animation(long objectId, String animation) { + this.objectId = objectId; + this.animation = animation; + } + + @Override + public void deserialize(IoBuffer data) { + + } + + @Override + public IoBuffer serialize() { + IoBuffer result = IoBuffer.allocate(20 + animation.length()).order(ByteOrder.LITTLE_ENDIAN); + + result.putInt(ObjControllerMessage.ANIMATION); + + result.putLong(objectId); // person performing animation's id + result.putInt(0); // seems to be just a place holder + result.put(getAsciiString(animation)); // animation name ex: tumble_to_standing + + return result.flip(); + } + + public long getObjectId() { + return objectId; + } + + public void setObjectId(long objectId) { + this.objectId = objectId; + } + + public String getAnimation() { + return animation; + } + + public void setAnimation(String animation) { + this.animation = animation; + } + +} diff --git a/src/protocol/swg/objectControllerObjects/BiographyUpdate.java b/src/protocol/swg/objectControllerObjects/BiographyUpdate.java new file mode 100644 index 00000000..290d4580 --- /dev/null +++ b/src/protocol/swg/objectControllerObjects/BiographyUpdate.java @@ -0,0 +1,61 @@ +/******************************************************************************* + * Copyright (c) 2013 + * + * This File is part of NGECore2. + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see . + * + * Using NGEngine to work with NGECore2 is making a combined work based on NGEngine. + * Therefore all terms and conditions of the GNU Lesser General Public License cover the combination. + ******************************************************************************/ +package protocol.swg.objectControllerObjects; + +import java.nio.ByteOrder; + +import org.apache.mina.core.buffer.IoBuffer; + +public class BiographyUpdate extends ObjControllerObject { + + private long objectId; + private long targetObjectId; + + private String biography; + + public BiographyUpdate(long objectId, long targetObjectId, String biography) { + this.objectId = objectId; + this.biography = biography; + this.targetObjectId = targetObjectId; + } + + @Override + public void deserialize(IoBuffer data) { + + + } + + @Override + public IoBuffer serialize() { + IoBuffer buffer = IoBuffer.allocate(28 + (biography.length() * 2)).order(ByteOrder.LITTLE_ENDIAN); + + buffer.putInt(0x000001DB); + buffer.putLong(objectId); // requester + buffer.putInt(0); + buffer.putLong(targetObjectId); + buffer.put(getUnicodeString(biography)); + + return buffer.flip(); + } + + +} diff --git a/src/protocol/swg/objectControllerObjects/BuffBuilderChangeMessage.java b/src/protocol/swg/objectControllerObjects/BuffBuilderChangeMessage.java new file mode 100644 index 00000000..0c5740fd --- /dev/null +++ b/src/protocol/swg/objectControllerObjects/BuffBuilderChangeMessage.java @@ -0,0 +1,162 @@ +package protocol.swg.objectControllerObjects; + +import java.nio.ByteOrder; +import java.util.Vector; + +import org.apache.mina.core.buffer.IoBuffer; + +import protocol.swg.ObjControllerMessage; +import resources.buffs.BuffItem; + +public class BuffBuilderChangeMessage extends ObjControllerObject { + + private boolean accepted; + private int buffCost; + + private long bufferId; + private int buffRecipientAccepted; + private long buffRecipientId; + + private long objectId; + private Vector statBuffs = new Vector(); + + private int time; + + public BuffBuilderChangeMessage() { + + } + + public BuffBuilderChangeMessage(long objectId, long bufferId, long buffRecipientId, Vector statBuffs) { + this.objectId = objectId; + this.bufferId = bufferId; + this.buffRecipientId = buffRecipientId; + this.statBuffs = statBuffs; + } + + + @Override + public void deserialize(IoBuffer data) { + setObjectId(data.getLong()); + data.getInt(); + setBufferId(data.getLong()); + setBuffRecipientId(data.getLong()); + setTime(data.getInt()); + setBuffCost(data.getInt()); + + byte value = data.get(); + if (value == (byte) 0) + setAccepted(false); + else if (value == (byte) 1) + setAccepted(true); + + setBuffRecipientAccepted(data.getInt()); + + int statSize = data.getInt(); + for (int i = 0; i < statSize; i++) { + BuffItem item = new BuffItem(); + + item.setSkillName(getAsciiString(data)); + item.setInvested(data.getInt()); + item.setEntertainerBonus(data.getInt()); + + statBuffs.add(item); + } + } + + public boolean getAccepted() { + return accepted; + } + + public int getBuffCost() { + return buffCost; + } + + public long getBufferId() { + return bufferId; + } + + public int getBuffRecipientAccepted() { + return buffRecipientAccepted; + } + + public long getBuffRecipientId() { + return buffRecipientId; + } + + public long getObjectId() { + return objectId; + } + + public Vector getStatBuffs() { + return statBuffs; + } + + public int getTime() { + return time; + } + + @Override + public IoBuffer serialize() { + IoBuffer result = IoBuffer.allocate(65 + statBuffs.size()).order(ByteOrder.LITTLE_ENDIAN); + result.setAutoExpand(true); + + result.putInt(ObjControllerMessage.BUFF_BUILDER_CHANGE); + result.putLong(objectId); + + result.putInt(0); + + result.putLong(bufferId); + result.putLong(buffRecipientId); + + result.putInt(time); + result.putInt(buffCost); + + result.put((byte) ((accepted) ? 1 : 0)); + result.putInt(buffRecipientAccepted); + + result.putInt(statBuffs.size()); + + if (!statBuffs.isEmpty()) { + for (BuffItem item : statBuffs) { + result.put(getAsciiString(item.getSkillName())); + result.putInt(item.getInvested()); + result.putInt(item.getEntertainerBonus()); + } + } + + return result.flip(); + } + + public void setAccepted(boolean accepted) { + this.accepted = accepted; + } + + public void setBuffCost(int buffCost) { + this.buffCost = buffCost; + } + + public void setBufferId(long bufferId) { + this.bufferId = bufferId; + } + + public void setBuffRecipientAccepted(int buffRecipientAccepted) { + this.buffRecipientAccepted = buffRecipientAccepted; + } + + public void setBuffRecipientId(long buffRecipientId) { + this.buffRecipientId = buffRecipientId; + } + + public void setObjectId(long objectId) { + this.objectId = objectId; + } + + public void setStatBuffs(Vector statBuffs) { + this.statBuffs = statBuffs; + } + + public void setTime(int time) { + this.time = time; + } + +} diff --git a/src/protocol/swg/objectControllerObjects/BuffBuilderEndMessage.java b/src/protocol/swg/objectControllerObjects/BuffBuilderEndMessage.java new file mode 100644 index 00000000..b4aa5cd1 --- /dev/null +++ b/src/protocol/swg/objectControllerObjects/BuffBuilderEndMessage.java @@ -0,0 +1,197 @@ +/******************************************************************************* + * Copyright (c) 2013 + * + * This File is part of NGECore2. + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see . + * + * Using NGEngine to work with NGECore2 is making a combined work based on NGEngine. + * Therefore all terms and conditions of the GNU Lesser General Public License cover the combination. + ******************************************************************************/ +package protocol.swg.objectControllerObjects; + +import java.nio.ByteOrder; +import java.util.Vector; + +import org.apache.mina.core.buffer.IoBuffer; + +import protocol.swg.ObjControllerMessage; +import resources.buffs.BuffItem; + +public class BuffBuilderEndMessage extends ObjControllerObject { + + private boolean accepted; + private int buffCost; + + private long bufferId; + private int buffRecipientAccepted; + private long buffRecipientId; + + private long objectId; + private Vector statBuffs = new Vector(); + + private int time; + + public BuffBuilderEndMessage() { + + } + + public BuffBuilderEndMessage(BuffBuilderEndMessage endMessage) { + this.buffCost = endMessage.getBuffCost(); + this.time = endMessage.getTime(); + this.accepted = endMessage.getAccepted(); + this.buffRecipientAccepted = endMessage.getBuffRecipientAccepted(); + this.statBuffs = endMessage.getStatBuffs(); + } + + public BuffBuilderEndMessage(BuffBuilderChangeMessage changeMessage) { + this.buffRecipientId = changeMessage.getBuffRecipientId(); + this.bufferId = changeMessage.getBufferId(); + this.buffCost = changeMessage.getBuffCost(); + this.time = changeMessage.getTime(); + this.accepted = changeMessage.getAccepted(); + this.buffRecipientAccepted = changeMessage.getBuffRecipientAccepted(); + this.statBuffs = changeMessage.getStatBuffs(); + } + @Override + public void deserialize(IoBuffer data) { + setObjectId(data.getLong()); + data.getInt(); + setBufferId(data.getLong()); + setBuffRecipientId(data.getLong()); + setTime(data.getInt()); + setBuffCost(data.getInt()); + + byte value = data.get(); + if (value == (byte) 0) + setAccepted(false); + else if (value == (byte) 1) + setAccepted(true); + + setBuffRecipientAccepted(data.getInt()); + + int statSize = data.getInt(); + for (int i = 0; i < statSize; i++) { + BuffItem item = new BuffItem(); + + String statName = getAsciiString(data); + item.setSkillName(statName); + + int investedPoints = data.getInt(); + item.setInvested(investedPoints); + + int entBonus = data.getInt(); + item.setEntertainerBonus(entBonus); + + statBuffs.add(item); + } + } + + public boolean getAccepted() { + return accepted; + } + + public int getBuffCost() { + return buffCost; + } + + public long getBufferId() { + return bufferId; + } + + public int getBuffRecipientAccepted() { + return buffRecipientAccepted; + } + + public long getBuffRecipientId() { + return buffRecipientId; + } + + public long getObjectId() { + return objectId; + } + + public Vector getStatBuffs() { + return statBuffs; + } + + public int getTime() { + return time; + } + + @Override + public IoBuffer serialize() { + IoBuffer result = IoBuffer.allocate(65 + statBuffs.size()).order(ByteOrder.LITTLE_ENDIAN); + result.setAutoExpand(true); + + result.putInt(ObjControllerMessage.BUFF_BUILDER_END); + result.putLong(objectId); + + result.putInt(0); + + result.putLong(bufferId); + result.putLong(buffRecipientId); + + result.putInt(time); + result.putInt(buffCost); + + result.put((byte) ((accepted) ? 1 : 0)); + result.putInt(buffRecipientAccepted); + + result.putInt(statBuffs.size()); + + if (!statBuffs.isEmpty()) { + for (BuffItem item : statBuffs) { + result.put(getAsciiString(item.getSkillName())); + result.putInt(item.getInvested()); + result.putInt(item.getEntertainerBonus()); + } + } + + return result.flip(); + } + + public void setAccepted(boolean accepted) { + this.accepted = accepted; + } + + public void setBuffCost(int buffCost) { + this.buffCost = buffCost; + } + + public void setBufferId(long bufferId) { + this.bufferId = bufferId; + } + + public void setBuffRecipientAccepted(int buffRecipientAccepted) { + this.buffRecipientAccepted = buffRecipientAccepted; + } + + public void setBuffRecipientId(long buffRecipientId) { + this.buffRecipientId = buffRecipientId; + } + + public void setObjectId(long objectId) { + this.objectId = objectId; + } + + public void setStatBuffs(Vector statBuffs) { + this.statBuffs = statBuffs; + } + + public void setTime(int time) { + this.time = time; + } + +} diff --git a/src/protocol/swg/objectControllerObjects/BuffBuilderStartMessage.java b/src/protocol/swg/objectControllerObjects/BuffBuilderStartMessage.java new file mode 100644 index 00000000..dd75d45c --- /dev/null +++ b/src/protocol/swg/objectControllerObjects/BuffBuilderStartMessage.java @@ -0,0 +1,59 @@ +package protocol.swg.objectControllerObjects; + +import java.nio.ByteOrder; + +import org.apache.mina.core.buffer.IoBuffer; + +import protocol.swg.ObjControllerMessage; + +public class BuffBuilderStartMessage extends ObjControllerObject { + + private long objectId; + private long recieverId; + private long bufferId; + + public BuffBuilderStartMessage(long objectId, long bufferId, long recieverId) { + this.objectId = objectId; + this.bufferId = bufferId; + this.recieverId = recieverId; + } + + @Override + public void deserialize(IoBuffer data) { + + } + + @Override + public IoBuffer serialize() { + IoBuffer result = IoBuffer.allocate(37).order(ByteOrder.LITTLE_ENDIAN); + + //0B 00 00-00 # flag (11) + result.putInt(ObjControllerMessage.BUFF_BUILDER_START); + + result.putLong(objectId); + result.putInt(0); // tick count + result.putLong(bufferId); + result.putLong(recieverId); + + + //System.out.println("BBMSG: " + result.flip().getHexDump()); + return result.flip(); + } + + public long getObjectId() { + return objectId; + } + + public void setObjectId(long objectId) { + this.objectId = objectId; + } + + public long getRecieverId() { + return recieverId; + } + + public void setRecieverId(long recieverId) { + this.recieverId = recieverId; + } + +} diff --git a/src/resources/objects/ListObject.java b/src/protocol/swg/objectControllerObjects/ChangeRoleIconChoice.java similarity index 59% rename from src/resources/objects/ListObject.java rename to src/protocol/swg/objectControllerObjects/ChangeRoleIconChoice.java index 815fe632..7a458ead 100644 --- a/src/resources/objects/ListObject.java +++ b/src/protocol/swg/objectControllerObjects/ChangeRoleIconChoice.java @@ -19,37 +19,35 @@ * Using NGEngine to work with NGECore2 is making a combined work based on NGEngine. * Therefore all terms and conditions of the GNU Lesser General Public License cover the combination. ******************************************************************************/ -package resources.objects; +package protocol.swg.objectControllerObjects; -import java.nio.ByteBuffer; +import org.apache.mina.core.buffer.IoBuffer; -import org.apache.mina.core.buffer.SimpleBufferAllocator; - - -import resources.common.StringUtilities; - - -public abstract class ListObject implements IListObject { +public class ChangeRoleIconChoice extends ObjControllerObject { - public ListObject() { } + private long objectId = 0; + private int icon = 0; - protected final Object objectMutex = new Object(); - public SimpleBufferAllocator bufferPool = new SimpleBufferAllocator(); - - protected String getAsciiString(ByteBuffer buffer) { - return StringUtilities.getAsciiString(buffer); + @Override + public IoBuffer serialize() { + return null; } - protected String getUnicodeString(ByteBuffer buffer) { - return StringUtilities.getUnicodeString(buffer); + @Override + public void deserialize(IoBuffer buffer) { + //System.out.println(Utilities.getHexString(buffer.array())); + objectId = buffer.getLong(); + buffer.skip(4); + if(buffer.hasRemaining()) + icon = buffer.getInt(); } - protected byte[] getAsciiString(String string) { - return StringUtilities.getAsciiString(string); + public long getObjectId() { + return objectId; } - protected byte[] getUnicodeString(String string) { - return StringUtilities.getUnicodeString(string); + public int getIcon() { + return icon; } } diff --git a/src/protocol/swg/objectControllerObjects/CombatSpam.java b/src/protocol/swg/objectControllerObjects/CombatSpam.java index 75eaf9cd..b6be2857 100644 --- a/src/protocol/swg/objectControllerObjects/CombatSpam.java +++ b/src/protocol/swg/objectControllerObjects/CombatSpam.java @@ -26,16 +26,17 @@ import java.nio.ByteOrder; import org.apache.mina.core.buffer.IoBuffer; import protocol.swg.ObjControllerMessage; -import services.combat.CombatService.HitType; +import resources.datatables.HitType; +@SuppressWarnings("unused") public class CombatSpam extends ObjControllerObject{ private long attackerId; private long defenderId; private int damage; - private String file; - private String text; - private byte colorFlag; + //private String file; + //private String text; + //private byte colorFlag; private boolean hit = true; private boolean critical = false; private boolean dodge = false; diff --git a/src/protocol/swg/objectControllerObjects/CommandEnqueue.java b/src/protocol/swg/objectControllerObjects/CommandEnqueue.java index 40b228a6..bb1705a4 100644 --- a/src/protocol/swg/objectControllerObjects/CommandEnqueue.java +++ b/src/protocol/swg/objectControllerObjects/CommandEnqueue.java @@ -39,6 +39,15 @@ public class CommandEnqueue extends ObjControllerObject { public static final int STAND = 0xA8A25C79; public static final int ATTACK = 0xA8FEF90A; public static final int TRANSFERITEM = 0x3CFB449D; + + //ent + // this really needed? + public static final int STARTDANCE = 0x7B1DCBE0; + public static final int STOPDANCE = 0xECC171CC; + public static final int FLOURISH = 0xC8998CE9; + public static final int FLO = 0x3B159B76; + public static final int BANDFLOURISH = 0xF4C60EC3; + public static final int BANDFLO = 0xDD3FB008; private int actionCounter; private int commandCRC; diff --git a/src/protocol/swg/objectControllerObjects/ImageDesignMessage.java b/src/protocol/swg/objectControllerObjects/ImageDesignMessage.java new file mode 100644 index 00000000..8c99498e --- /dev/null +++ b/src/protocol/swg/objectControllerObjects/ImageDesignMessage.java @@ -0,0 +1,361 @@ +/******************************************************************************* + * Copyright (c) 2013 + * + * This File is part of NGECore2. + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see . + * + * Using NGEngine to work with NGECore2 is making a combined work based on NGEngine. + * Therefore all terms and conditions of the GNU Lesser General Public License cover the combination. + ******************************************************************************/ +package protocol.swg.objectControllerObjects; + +import java.nio.ByteOrder; +import java.util.Vector; + +import org.apache.mina.core.buffer.IoBuffer; + +import protocol.swg.ObjControllerMessage; +import resources.common.IDAttribute; + +public class ImageDesignMessage extends ObjControllerObject { + + private long designerId; + private long targetId; + private long objectId; + private byte unkByte; + private String hair; + private String unk; + private int sessionId; + private int moneyDemanded; + private int moneyOffered; + private boolean designerCommited; + private boolean customerAccepted; + private byte flagStatMigration; + + private int bodyFormSkill1; + private int faceFormSkill1; + private int bodyFormSkill2; + private int faceFormSkill2; + + private String holoEmote; + + private Vector bodyAttributes; + private Vector colorAttributes; + + private boolean endMessage; + + public ImageDesignMessage() { } + + public ImageDesignMessage(long objectId, long designerId, long targetId) { + this.objectId = objectId; + this.designerId = designerId; + this.targetId = targetId; + } + + @Override + public void deserialize(IoBuffer data) { + + setObjectId(data.getLong()); + data.getInt(); + setDesignerId(data.getLong()); + setTargetId(data.getLong()); + data.getLong(); // tent id + + setUnkByte(data.get()); + setHair(getAsciiString(data)); + + setUnk(getAsciiString(data)); + data.getInt(); // timer + setSessionId(data.getInt()); + setMoneyDemanded(data.getInt()); + setMoneyOffered(data.getInt()); + setDesignerCommited((boolean) ((data.get() == 1) ? true : false)); + setCustomerAccepted((boolean) ((data.getInt() == 1) ? true : false)); + + setBodyFormSkill1(data.getInt()); + setFaceFormSkill1(data.getInt()); + + setBodyFormSkill2(data.getInt()); + setFaceFormSkill2(data.getInt()); + + int bodyAttributesSize = data.getInt(); + + if (bodyAttributesSize > 0) { + Vector bodyAttributes = new Vector(); + + for (int i = 0; i < bodyAttributesSize; i++) { + + IDAttribute atr = new IDAttribute(); + + atr.setName(getAsciiString(data)); + atr.setFloatValue(data.getFloat()); + + bodyAttributes.add(atr); + } + setBodyAttributes(bodyAttributes); + } + + int colorAttributesSize = data.getInt(); + + if (colorAttributesSize > 0) { + Vector colorAttributes = new Vector(); + + for (int i = 0; i < colorAttributesSize; i++) { + + IDAttribute atr = new IDAttribute(); + + atr.setName(getAsciiString(data)); + atr.setValue(data.getInt()); + + colorAttributes.add(atr); + } + setColorAttributes(colorAttributes); + } + + setHoloEmote(getAsciiString(data)); + } + + @Override + public IoBuffer serialize() { + IoBuffer buffer = IoBuffer.allocate(100).order(ByteOrder.LITTLE_ENDIAN); + buffer.setAutoExpand(true); + + if (endMessage) + buffer.putInt(ObjControllerMessage.IMAGE_DESIGN_END); + else + buffer.putInt(ObjControllerMessage.IMAGE_DESIGN_CHANGE); + + buffer.putLong(objectId); + buffer.putInt(0); + + buffer.putLong(designerId); + buffer.putLong(targetId); + buffer.putLong(0); // tent id + + buffer.put(unkByte); + if (hair != null) + buffer.put(getAsciiString(hair)); + else + buffer.putShort((short) 0); + + if (unk != null) + buffer.put(getAsciiString(unk)); + else + buffer.putShort((short) 0); + + buffer.putInt(0); // timer + + buffer.putInt(sessionId); + + buffer.putInt(moneyDemanded); + buffer.putInt(moneyOffered); + + buffer.put((byte) ((designerCommited) ? 1 : 0)); + buffer.putInt((int) ((customerAccepted) ? 1 : 0)); + + buffer.putInt(bodyFormSkill1); + buffer.putInt(faceFormSkill1); + buffer.putInt(bodyFormSkill2); + buffer.putInt(faceFormSkill2); + + if(bodyAttributes != null && bodyAttributes.size() > 0) { + buffer.putInt(bodyAttributes.size()); + for (IDAttribute atr : bodyAttributes) { + buffer.put(getAsciiString(atr.getName())); + buffer.putFloat(atr.getFloatValue()); + } + } else { + buffer.putInt(0); + } + + if (colorAttributes != null && colorAttributes.size() > 0) { + buffer.putInt(colorAttributes.size()); + for (IDAttribute atr : colorAttributes) { + buffer.put(getAsciiString(atr.getName())); + buffer.putInt(atr.getValue()); + } + } else { + buffer.putInt(0); + } + + if (holoEmote != null) + buffer.put(getAsciiString(holoEmote)); + else + buffer.putShort((short) 0); + + return buffer.flip(); + } + + public long getDesignerId() { + return designerId; + } + + public void setDesignerId(long designerId) { + this.designerId = designerId; + } + + public long getTargetId() { + return targetId; + } + + public void setTargetId(long targetId) { + this.targetId = targetId; + } + + public long getObjectId() { + return objectId; + } + + public void setObjectId(long objectId) { + this.objectId = objectId; + } + + public byte getUnkByte() { + return unkByte; + } + + public void setUnkByte(byte unkByte) { + this.unkByte = unkByte; + } + + public String getHair() { + return hair; + } + + public void setHair(String hair) { + this.hair = hair; + } + + public String getUnk() { + return unk; + } + + public void setUnk(String unk) { + this.unk = unk; + } + + public int getSessionId() { + return sessionId; + } + + public void setSessionId(int sessionId) { + this.sessionId = sessionId; + } + + public int getMoneyDemanded() { + return moneyDemanded; + } + + public void setMoneyDemanded(int moneyDemanded) { + this.moneyDemanded = moneyDemanded; + } + + public int getMoneyOffered() { + return moneyOffered; + } + + public void setMoneyOffered(int moneyOffered) { + this.moneyOffered = moneyOffered; + } + + public boolean isDesignerCommited() { + return designerCommited; + } + + public void setDesignerCommited(boolean designerCommited) { + this.designerCommited = designerCommited; + } + + public boolean isCustomerAccepted() { + return customerAccepted; + } + + public void setCustomerAccepted(boolean customerAccepted) { + this.customerAccepted = customerAccepted; + } + + public byte getFlagStatMigration() { + return flagStatMigration; + } + + public void setFlagStatMigration(byte flagStatMigration) { + this.flagStatMigration = flagStatMigration; + } + + public int getBodyFormSkill1() { + return bodyFormSkill1; + } + + public void setBodyFormSkill1(int bodyFormSkill1) { + this.bodyFormSkill1 = bodyFormSkill1; + } + + public int getFaceFormSkill1() { + return faceFormSkill1; + } + + public void setFaceFormSkill1(int faceFormSkill1) { + this.faceFormSkill1 = faceFormSkill1; + } + + public int getBodyFormSkill2() { + return bodyFormSkill2; + } + + public void setBodyFormSkill2(int bodyFormSkill2) { + this.bodyFormSkill2 = bodyFormSkill2; + } + + public int getFaceFormSkill2() { + return faceFormSkill2; + } + + public void setFaceFormSkill2(int faceFormSkill2) { + this.faceFormSkill2 = faceFormSkill2; + } + + public String getHoloEmote() { + return holoEmote; + } + + public void setHoloEmote(String holoEmote) { + this.holoEmote = holoEmote; + } + + public Vector getBodyAttributes() { + return bodyAttributes; + } + + public void setBodyAttributes(Vector bodyAttributes) { + this.bodyAttributes = bodyAttributes; + } + + public Vector getColorAttributes() { + return colorAttributes; + } + + public void setColorAttributes(Vector colorAttributes) { + this.colorAttributes = colorAttributes; + } + + public boolean isEndMessage() { + return endMessage; + } + + public void setEndMessage(boolean endMessage) { + this.endMessage = endMessage; + } + +} diff --git a/src/protocol/swg/objectControllerObjects/ImageDesignStartMessage.java b/src/protocol/swg/objectControllerObjects/ImageDesignStartMessage.java new file mode 100644 index 00000000..fdada211 --- /dev/null +++ b/src/protocol/swg/objectControllerObjects/ImageDesignStartMessage.java @@ -0,0 +1,61 @@ +/******************************************************************************* + * Copyright (c) 2013 + * + * This File is part of NGECore2. + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see . + * + * Using NGEngine to work with NGECore2 is making a combined work based on NGEngine. + * Therefore all terms and conditions of the GNU Lesser General Public License cover the combination. + ******************************************************************************/ +package protocol.swg.objectControllerObjects; + +import java.nio.ByteOrder; + +import org.apache.mina.core.buffer.IoBuffer; + +import protocol.swg.ObjControllerMessage; + +public class ImageDesignStartMessage extends ObjControllerObject { + + private long objectId; + private long designer; + private long target; + + public ImageDesignStartMessage(long objectId, long designer, long target) { + this.designer = designer; + this.target = target; + this.objectId = objectId; + } + + @Override + public void deserialize(IoBuffer data) { + } + + @Override + public IoBuffer serialize() { + IoBuffer buffer = IoBuffer.allocate(46).order(ByteOrder.LITTLE_ENDIAN); + + buffer.putInt(ObjControllerMessage.IMAGE_DESIGN_START); + buffer.putLong(objectId); + + buffer.putInt(0); + buffer.putLong(designer); + buffer.putLong(target); + buffer.putLong(0); + buffer.putShort((short) 0); + return buffer.flip(); + } + +} diff --git a/src/protocol/swg/objectControllerObjects/MissionAbort.java b/src/protocol/swg/objectControllerObjects/MissionAbort.java new file mode 100644 index 00000000..2195c511 --- /dev/null +++ b/src/protocol/swg/objectControllerObjects/MissionAbort.java @@ -0,0 +1,61 @@ +/******************************************************************************* + * Copyright (c) 2013 + * + * This File is part of NGECore2. + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see . + * + * Using NGEngine to work with NGECore2 is making a combined work based on NGEngine. + * Therefore all terms and conditions of the GNU Lesser General Public License cover the combination. + ******************************************************************************/ +package protocol.swg.objectControllerObjects; + +import java.nio.ByteOrder; + +import org.apache.mina.core.buffer.IoBuffer; + +import protocol.swg.ObjControllerMessage; + +public class MissionAbort extends ObjControllerObject { + private long characterId; + private long missionId; + + public MissionAbort() { } + + @Override + public void deserialize(IoBuffer data) { + setCharacterId(data.getLong()); + data.getInt(); + setMissionId(data.getLong()); + } + + @Override + public IoBuffer serialize() { + IoBuffer buffer = IoBuffer.allocate(32).order(ByteOrder.LITTLE_ENDIAN); + + buffer.putInt(ObjControllerMessage.MISSION_ABORT_RESPONSE); + buffer.putLong(characterId); + buffer.putInt(0); + buffer.putLong(missionId); + return null; + } + + public long getMissionId() { return missionId; } + + public void setMissionId(long missionId) { this.missionId = missionId; } + + public long getCharacterId() { return characterId; } + + public void setCharacterId(long characterId) { this.characterId = characterId; } +} diff --git a/src/protocol/swg/objectControllerObjects/MissionAcceptRequest.java b/src/protocol/swg/objectControllerObjects/MissionAcceptRequest.java new file mode 100644 index 00000000..403861d3 --- /dev/null +++ b/src/protocol/swg/objectControllerObjects/MissionAcceptRequest.java @@ -0,0 +1,71 @@ +/******************************************************************************* + * Copyright (c) 2013 + * + * This File is part of NGECore2. + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see . + * + * Using NGEngine to work with NGECore2 is making a combined work based on NGEngine. + * Therefore all terms and conditions of the GNU Lesser General Public License cover the combination. + ******************************************************************************/ +package protocol.swg.objectControllerObjects; + +import org.apache.mina.core.buffer.IoBuffer; + +public class MissionAcceptRequest extends ObjControllerObject { + + private long missionObjId; + private long terminalObjId; + private byte terminalType; + + public MissionAcceptRequest() { } + + @Override + public void deserialize(IoBuffer data) { + data.getLong(); + data.getInt(); + setMissionObjId(data.getLong()); + setTerminalObjId(data.getLong()); + setTerminalType(data.get()); + } + + @Override + public IoBuffer serialize() { + return null; + } + + public long getMissionObjId() { + return missionObjId; + } + + public void setMissionObjId(long misssionObjId) { + this.missionObjId = misssionObjId; + } + + public long getTerminalObjId() { + return terminalObjId; + } + + public void setTerminalObjId(long terminalObjId) { + this.terminalObjId = terminalObjId; + } + + public void setTerminalType(byte terminalType) { + this.terminalType = terminalType; + } + + public byte getTerminalType() { + return terminalType; + } +} diff --git a/src/protocol/swg/objectControllerObjects/MissionAcceptResponse.java b/src/protocol/swg/objectControllerObjects/MissionAcceptResponse.java new file mode 100644 index 00000000..faad427b --- /dev/null +++ b/src/protocol/swg/objectControllerObjects/MissionAcceptResponse.java @@ -0,0 +1,63 @@ +/******************************************************************************* + * Copyright (c) 2013 + * + * This File is part of NGECore2. + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see . + * + * Using NGEngine to work with NGECore2 is making a combined work based on NGEngine. + * Therefore all terms and conditions of the GNU Lesser General Public License cover the combination. + ******************************************************************************/ +package protocol.swg.objectControllerObjects; + +import java.nio.ByteOrder; + +import org.apache.mina.core.buffer.IoBuffer; + +import protocol.swg.ObjControllerMessage; + +public class MissionAcceptResponse extends ObjControllerObject { + + private long objectId; + private long missionObjId; + private byte terminalType; + private byte flag; + + public MissionAcceptResponse(long objectId, long missionObjId, byte terminalType, byte flag) { + this.objectId = objectId; + this.missionObjId = missionObjId; + this.terminalType = terminalType; + this.flag = flag; + } + + @Override + public void deserialize(IoBuffer data) { + } + + @Override + public IoBuffer serialize() { + IoBuffer buffer = IoBuffer.allocate(27).order(ByteOrder.LITTLE_ENDIAN); + + buffer.putInt(ObjControllerMessage.MISSION_ACCEPT_RESPONSE); + buffer.putLong(objectId); + buffer.putInt(0); + + buffer.putLong(missionObjId); + buffer.put(flag); + buffer.put(terminalType); + + return buffer.flip(); + } + +} diff --git a/src/protocol/swg/objectControllerObjects/MissionListRequest.java b/src/protocol/swg/objectControllerObjects/MissionListRequest.java new file mode 100644 index 00000000..6d1fa2f5 --- /dev/null +++ b/src/protocol/swg/objectControllerObjects/MissionListRequest.java @@ -0,0 +1,71 @@ +/******************************************************************************* + * Copyright (c) 2013 + * + * This File is part of NGECore2. + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see . + * + * Using NGEngine to work with NGECore2 is making a combined work based on NGEngine. + * Therefore all terms and conditions of the GNU Lesser General Public License cover the combination. + ******************************************************************************/ +package protocol.swg.objectControllerObjects; + +import org.apache.mina.core.buffer.IoBuffer; + +public class MissionListRequest extends ObjControllerObject { + + private long objectId; + private long terminalId; + private int tickCount; + + @Override + public void deserialize(IoBuffer data) { + //Console.println("MissionListRequest: " + StringUtilities.bytesToHex(data.array())); + setObjectId(data.getLong()); + data.getInt(); // unk + data.get(); // unk byte + setTickCount(data.get()); + setTerminalId(data.getLong()); + } + + @Override + public IoBuffer serialize() { + return null; + } + + public long getObjectId() { + return objectId; + } + + public void setObjectId(long objectId) { + this.objectId = objectId; + } + + public long getTerminalId() { + return terminalId; + } + + public void setTerminalId(long terminalId) { + this.terminalId = terminalId; + } + + public int getTickCount() { + return tickCount; + } + + public void setTickCount(int tickCount) { + this.tickCount = tickCount; + } + +} diff --git a/src/protocol/swg/objectControllerObjects/NpcConversationMessage.java b/src/protocol/swg/objectControllerObjects/NpcConversationMessage.java new file mode 100644 index 00000000..eceff19c --- /dev/null +++ b/src/protocol/swg/objectControllerObjects/NpcConversationMessage.java @@ -0,0 +1,58 @@ +/******************************************************************************* + * Copyright (c) 2013 + * + * This File is part of NGECore2. + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see . + * + * Using NGEngine to work with NGECore2 is making a combined work based on NGEngine. + * Therefore all terms and conditions of the GNU Lesser General Public License cover the combination. + ******************************************************************************/ +package protocol.swg.objectControllerObjects; + +import java.nio.ByteOrder; + +import org.apache.mina.core.buffer.IoBuffer; + +import protocol.swg.ObjControllerMessage; +import resources.common.OutOfBand; + +public class NpcConversationMessage extends ObjControllerObject { + + private long objectId; + private OutOfBand outOfBand; + + public NpcConversationMessage(long objectId, OutOfBand outOfBand) { + this.objectId = objectId; + this.outOfBand = outOfBand; + outOfBand.setHeaderBytes(2); + } + + @Override + public void deserialize(IoBuffer data) { + + } + + @Override + public IoBuffer serialize() { + IoBuffer outOfBandBuffer = outOfBand.serialize(); + IoBuffer buffer = IoBuffer.allocate(16 + outOfBandBuffer.array().length).order(ByteOrder.LITTLE_ENDIAN); + buffer.putInt(ObjControllerMessage.CONVERSATION_MESSAGE); + buffer.putLong(objectId); + buffer.putInt(0); + buffer.put(outOfBandBuffer.array()); + return buffer.flip(); + } + +} diff --git a/src/protocol/swg/objectControllerObjects/NpcConversationOptions.java b/src/protocol/swg/objectControllerObjects/NpcConversationOptions.java new file mode 100644 index 00000000..c9387ffa --- /dev/null +++ b/src/protocol/swg/objectControllerObjects/NpcConversationOptions.java @@ -0,0 +1,65 @@ +/******************************************************************************* + * Copyright (c) 2013 + * + * This File is part of NGECore2. + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see . + * + * Using NGEngine to work with NGECore2 is making a combined work based on NGEngine. + * Therefore all terms and conditions of the GNU Lesser General Public License cover the combination. + ******************************************************************************/ +package protocol.swg.objectControllerObjects; + +import java.nio.ByteOrder; +import java.util.Vector; + +import org.apache.mina.core.buffer.IoBuffer; + +import engine.resources.objects.Delta; +import protocol.swg.ObjControllerMessage; +import resources.common.ConversationOption; + +public class NpcConversationOptions extends ObjControllerObject { + + private long objectId; + private Vector conversationOptions = new Vector(); + + public NpcConversationOptions(long objectId) { + this.objectId = objectId; + } + + @Override + public void deserialize(IoBuffer data) { + } + + public void addOption(ConversationOption option) { + conversationOptions.add(option); + } + + @Override + public IoBuffer serialize() { + IoBuffer buffer = IoBuffer.allocate(17).order(ByteOrder.LITTLE_ENDIAN); + buffer.setAutoExpand(true); + buffer.putInt(ObjControllerMessage.CONVERSATION_OPTIONS); + buffer.putLong(objectId); + buffer.putInt(0); + buffer.put((byte) conversationOptions.size()); + for (ConversationOption option : conversationOptions) { + option.getOutOfBand().setHeaderBytes(2); + buffer.put(option.getOutOfBand().serialize().array()); + } + return Delta.resizeBuffer(buffer); + } + +} diff --git a/src/protocol/swg/objectControllerObjects/ObjectMenuRequest.java b/src/protocol/swg/objectControllerObjects/ObjectMenuRequest.java index 85a2d464..901314b9 100644 --- a/src/protocol/swg/objectControllerObjects/ObjectMenuRequest.java +++ b/src/protocol/swg/objectControllerObjects/ObjectMenuRequest.java @@ -47,11 +47,9 @@ public class ObjectMenuRequest extends ObjControllerObject { int listSize = buffer.getInt(); for(int i = 0; i < listSize; i++) { RadialOptions radial = new RadialOptions(); - if(buffer.get() == 0) // option # - return; + buffer.get(); radial.setParentId(buffer.get()); - radial.setOptionId(buffer.get()); - buffer.get(); + radial.setOptionId(buffer.getShort()); radial.setOptionType(buffer.get()); int size = buffer.getInt(); if(size > 0) { diff --git a/src/protocol/swg/objectControllerObjects/ObjectMenuResponse.java b/src/protocol/swg/objectControllerObjects/ObjectMenuResponse.java index b4450dc9..fd833068 100644 --- a/src/protocol/swg/objectControllerObjects/ObjectMenuResponse.java +++ b/src/protocol/swg/objectControllerObjects/ObjectMenuResponse.java @@ -59,41 +59,31 @@ public class ObjectMenuResponse extends ObjControllerObject { @Override public IoBuffer serialize() { + int size = 37; + byte counter = 0; - IoBuffer result = IoBuffer.allocate(100).order(ByteOrder.LITTLE_ENDIAN); - result.setAutoExpand(true); + for (RadialOptions radialOption : radialOptions) { + size += 5 + getUnicodeString(radialOption.getDescription()).length; + } + IoBuffer result = IoBuffer.allocate(size).order(ByteOrder.LITTLE_ENDIAN); result.putInt(ObjControllerMessage.OBJECT_MENU_RESPONSE); result.putLong(ownerId); result.putInt(0); result.putLong(targetId); result.putLong(ownerId); - - int size = radialOptions.size(); - result.putInt(size); - - if(size > 0) { - byte counter = 1; - for(RadialOptions radialOption : radialOptions) { - result.put(counter++); - result.put(radialOption.getParentId()); - result.putShort(radialOption.getOptionId()); - result.put(radialOption.getOptionType()); - - if(radialOption.getDescription().length() > 0) - result.put(getUnicodeString(radialOption.getDescription())); - else - result.putInt(0); - - } + result.putInt(radialOptions.size()); + for (RadialOptions radialOption : radialOptions) { + result.put(++counter); + result.put(radialOption.getParentId()); + result.putShort(radialOption.getOptionId()); + //result.put(radialOption.getOptionType()); + result.put((byte) 3); + result.put(getUnicodeString(radialOption.getDescription())); } - result.put(radialCount); - int packetSize = result.position(); - result = IoBuffer.allocate(packetSize).put(result.array(), 0, packetSize); return result.flip(); - } } diff --git a/src/protocol/swg/objectControllerObjects/Posture.java b/src/protocol/swg/objectControllerObjects/Posture.java index c08ffaad..905a66b3 100644 --- a/src/protocol/swg/objectControllerObjects/Posture.java +++ b/src/protocol/swg/objectControllerObjects/Posture.java @@ -47,9 +47,9 @@ public class Posture extends ObjControllerObject { result.putInt(ObjControllerMessage.POSTURE); result.putLong(objectId); - result.putInt(0); //unk + result.putInt(0); // tick count ? result.put((byte) posture); - result.put((byte) 0); + result.put((byte) 0); // seen also as 1 return result.flip(); } diff --git a/src/protocol/swg/objectControllerObjects/SecureTrade.java b/src/protocol/swg/objectControllerObjects/SecureTrade.java index e621072f..3f48253c 100644 --- a/src/protocol/swg/objectControllerObjects/SecureTrade.java +++ b/src/protocol/swg/objectControllerObjects/SecureTrade.java @@ -1,3 +1,24 @@ +/******************************************************************************* + * Copyright (c) 2013 + * + * This File is part of NGECore2. + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see . + * + * Using NGEngine to work with NGECore2 is making a combined work based on NGEngine. + * Therefore all terms and conditions of the GNU Lesser General Public License cover the combination. + ******************************************************************************/ package protocol.swg.objectControllerObjects; import java.nio.ByteOrder; @@ -27,8 +48,7 @@ public class SecureTrade extends ObjControllerObject{ @Override public IoBuffer serialize() { - IoBuffer result = IoBuffer.allocate(100).order(ByteOrder.LITTLE_ENDIAN); - result.setAutoExpand(true); + IoBuffer result = IoBuffer.allocate(40).order(ByteOrder.LITTLE_ENDIAN); result.putInt(ObjControllerMessage.SPACIAL_CHAT); result.putInt(1); diff --git a/src/protocol/swg/objectControllerObjects/SetProfessionTemplate.java b/src/protocol/swg/objectControllerObjects/SetProfessionTemplate.java new file mode 100644 index 00000000..f9c0bb77 --- /dev/null +++ b/src/protocol/swg/objectControllerObjects/SetProfessionTemplate.java @@ -0,0 +1,60 @@ +/******************************************************************************* + * Copyright (c) 2013 + * + * This File is part of NGECore2. + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see . + * + * Using NGEngine to work with NGECore2 is making a combined work based on NGEngine. + * Therefore all terms and conditions of the GNU Lesser General Public License cover the combination. + ******************************************************************************/ +package protocol.swg.objectControllerObjects; + +import java.io.UnsupportedEncodingException; +import java.nio.ByteBuffer; + +import org.apache.mina.core.buffer.IoBuffer; + +public class SetProfessionTemplate extends ObjControllerObject { + + private String profession; + + @Override + public void deserialize(IoBuffer data) { + data.getLong(); + data.getInt(); + short size = data.getShort(); + try { + profession = new String(ByteBuffer.allocate(size).put(data.array(), data.position(), size).array(), "US-ASCII"); + } catch (UnsupportedEncodingException e) { + e.printStackTrace(); + } + data.position(data.position() + size); + } + + @Override + public IoBuffer serialize() { + // TODO Auto-generated method stub + return null; + } + + public String getProfession() { + return profession; + } + + public void setProfession(String profession) { + this.profession = profession; + } + +} diff --git a/src/protocol/swg/objectControllerObjects/ShowFlyText.java b/src/protocol/swg/objectControllerObjects/ShowFlyText.java index b4f73d31..71b32631 100644 --- a/src/protocol/swg/objectControllerObjects/ShowFlyText.java +++ b/src/protocol/swg/objectControllerObjects/ShowFlyText.java @@ -25,49 +25,29 @@ import java.nio.ByteOrder; import org.apache.mina.core.buffer.IoBuffer; +import engine.resources.common.RGB; +import engine.resources.common.Stf; import protocol.swg.ObjControllerMessage; -import resources.common.RGB; +import resources.common.OutOfBand; public class ShowFlyText extends ObjControllerObject { - private long recieverId; + private long receiverId; private long objectId; - private int unknownInt1; - private short unknownShort1; - private byte unknownByte1; - private int unknownInt2; - private String stfFile; - private String stfString; - private short unknownShort2; + private Stf stf; + private OutOfBand outOfBand; private float scale; private RGB color; private int displayType; - private boolean alternativeStructure; - public ShowFlyText(long recieverId, long objectId, String stfFile, String stfString, float scale, RGB color, int displayType) { - this.recieverId = recieverId; + public ShowFlyText(long receiverId, long objectId, String stf, OutOfBand outOfBand, float scale, RGB color, int displayType) { + this.receiverId = receiverId; this.objectId = objectId; - this.stfFile = stfFile; - this.stfString = stfString; + this.stf = new Stf(stf); + this.outOfBand = outOfBand; this.scale = scale; this.color = color; this.displayType = displayType; - this.alternativeStructure = false; - } - - public ShowFlyText(long recieverId, long objectId, int unknownInt1, int unknownShort1, int unknownByte1, int unknownInt2, String stfFile, String stfString, int unknownShort2, float scale, RGB color, int displayType) { - this.recieverId = recieverId; - this.objectId = objectId; - this.unknownInt1 = unknownInt1; - this.unknownShort1 = (short) unknownShort1; - this.unknownByte1 = (byte) unknownByte1; - this.unknownInt2 = unknownInt2; - this.stfFile = stfFile; - this.stfString = stfString; - this.unknownShort2 = (short) unknownShort2; - this.scale = scale; - this.color = color; - this.alternativeStructure = true; } @Override @@ -78,51 +58,20 @@ public class ShowFlyText extends ObjControllerObject { @Override public IoBuffer serialize() { - if (!alternativeStructure) { - IoBuffer result = IoBuffer.allocate(47 + stfFile.length() + stfString.length()).order(ByteOrder.LITTLE_ENDIAN); - result.setAutoExpand(true); - result.putInt(ObjControllerMessage.SHOW_FLY_TEXT); - result.putLong(recieverId); - result.putInt(0); - result.putLong(objectId); - result.put(getAsciiString(stfFile)); - result.putInt(0); - result.put(getAsciiString(stfString)); - result.putInt(0); - result.putFloat(scale); - result.put(color.getBytes()); - result.putInt(displayType); - return result.flip(); - } else { - IoBuffer result = IoBuffer.allocate(124 + stfFile.length() + stfString.length()).order(ByteOrder.LITTLE_ENDIAN); - result.setAutoExpand(true); - result.putInt(ObjControllerMessage.SHOW_FLY_TEXT); - result.putLong(recieverId); - result.putInt(0); - result.putLong(objectId); - result.putLong(0); - result.putInt(unknownInt1); - result.putShort(unknownShort1); - result.put(unknownByte1); - result.putInt(unknownInt2); - result.put(getAsciiString(stfFile)); - result.putInt(0); - result.put(getAsciiString(stfString)); - result.putLong(0); - result.putLong(0); - result.putLong(0); - result.putLong(0); - result.putLong(0); - result.putLong(0); - result.putLong(0); - result.putInt(0); - result.putShort((short) unknownShort2); - result.putLong(0); - result.putFloat(scale); - result.put(color.getBytes()); - result.putInt(displayType); - return result.flip(); - } + IoBuffer outOfBandBuffer = outOfBand.serialize(); + IoBuffer result = IoBuffer.allocate(35 + outOfBandBuffer.array().length).order(ByteOrder.LITTLE_ENDIAN); + result.setAutoExpand(true); + result.putInt(ObjControllerMessage.SHOW_FLY_TEXT); + result.putLong(receiverId); + result.putInt(0); + result.putLong(objectId); + result.put(stf.getBytes()); + result.put(outOfBandBuffer.array()); + result.putFloat(scale); + result.put(color.getBytes()); + result.putInt(displayType); + result.flip(); + return result; } } diff --git a/src/protocol/swg/objectControllerObjects/ShowLootBox.java b/src/protocol/swg/objectControllerObjects/ShowLootBox.java new file mode 100644 index 00000000..c20121a3 --- /dev/null +++ b/src/protocol/swg/objectControllerObjects/ShowLootBox.java @@ -0,0 +1,80 @@ +/******************************************************************************* + * Copyright (c) 2013 + * + * This File is part of NGECore2. + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see . + * + * Using NGEngine to work with NGECore2 is making a combined work based on NGEngine. + * Therefore all terms and conditions of the GNU Lesser General Public License cover the combination. + ******************************************************************************/ +package protocol.swg.objectControllerObjects; + +import java.nio.ByteOrder; +import java.util.Vector; + +import org.apache.mina.core.buffer.IoBuffer; + +import engine.resources.objects.SWGObject; +import protocol.swg.ObjControllerMessage; + +public class ShowLootBox extends ObjControllerObject { + + private long playerId; + private Vector rewards; + private SWGObject reward; + + public ShowLootBox(long playerId, SWGObject reward) { + this.playerId = playerId; + this.reward = reward; + } + + public ShowLootBox(long playerId, Vector rewards) { + this.playerId = playerId; + this.rewards = rewards; + } + + @Override + public void deserialize(IoBuffer data) { + + } + + @Override + public IoBuffer serialize() { + IoBuffer buffer; + + if (rewards != null) + buffer = IoBuffer.allocate(20 + (rewards.size() * 8)).order(ByteOrder.LITTLE_ENDIAN); + + else + buffer = IoBuffer.allocate(28).order(ByteOrder.LITTLE_ENDIAN); + + buffer.putInt(ObjControllerMessage.SHOW_LOOT_BOX); + buffer.putLong(playerId); + + buffer.putInt(0); // 1 for a black background on icon, 0 or 2 for transparent (default) + + if (rewards == null) { + buffer.putInt(1); + buffer.putLong(reward.getObjectId()); + } else { + buffer.putInt(rewards.size()); + for(SWGObject obj : rewards) { + buffer.putLong(obj.getObjectID()); + } + } + return buffer.flip(); + } + +} diff --git a/src/protocol/swg/objectControllerObjects/SpatialChat.java b/src/protocol/swg/objectControllerObjects/SpatialChat.java index 1d2ac34e..bf86de8f 100644 --- a/src/protocol/swg/objectControllerObjects/SpatialChat.java +++ b/src/protocol/swg/objectControllerObjects/SpatialChat.java @@ -26,12 +26,12 @@ import java.nio.ByteOrder; import org.apache.mina.core.buffer.IoBuffer; import protocol.swg.ObjControllerMessage; +import resources.common.OutOfBand; @SuppressWarnings("unused") - public class SpatialChat extends ObjControllerObject { - private long audienceId; + private long destinationId; private long sourceId; private long targetId; private String chatMessage; @@ -40,15 +40,19 @@ public class SpatialChat extends ObjControllerObject { private short balloonType = 1; private short chatType; private short moodId; + private byte languageId = 1; + private OutOfBand outOfBand; - public SpatialChat(long sourceId, long targetId, String chatMessage, short chatType, short moodId) { + public SpatialChat(long destinationId, long sourceId, long targetId, String chatMessage, short chatType, short moodId, int languageId, OutOfBand outOfBand) { try { - this.audienceId = sourceId; + this.destinationId = destinationId; this.sourceId = sourceId; this.targetId = targetId; this.chatMessage = chatMessage; this.chatType = chatType; this.moodId = moodId; + this.languageId = (byte) languageId; + this.outOfBand = ((outOfBand == null) ? new OutOfBand() : outOfBand); /*String[] chatMessageParse = chatMessage.split(" ", 6); @@ -62,19 +66,20 @@ public class SpatialChat extends ObjControllerObject { } } - public void setDestinationId(long audienceId) { - this.audienceId = audienceId; + public void setDestinationId(long destinationId) { + this.destinationId = destinationId; } - + public void deserialize(IoBuffer data) { } public IoBuffer serialize() { - IoBuffer result = IoBuffer.allocate(55 + chatMessage.length() * 2).order(ByteOrder.LITTLE_ENDIAN); - + outOfBand.setHeaderBytes(2); + IoBuffer outOfBandBuffer = outOfBand.serialize(); + IoBuffer result = IoBuffer.allocate(51 + (chatMessage.length() * 2) + outOfBandBuffer.array().length).order(ByteOrder.LITTLE_ENDIAN); result.putInt(ObjControllerMessage.SPACIAL_CHAT); - result.putLong(audienceId); + result.putLong(destinationId); result.putInt(0); result.putLong(sourceId); result.putLong(targetId); @@ -83,11 +88,9 @@ public class SpatialChat extends ObjControllerObject { result.putShort((short) 0x32); result.putShort(chatType); result.putShort(moodId); - result.put((byte) 1); - + result.put(languageId); result.putInt(0); - result.putInt(0); - + result.put(outOfBandBuffer.array()); return result.flip(); } diff --git a/src/protocol/swg/objectControllerObjects/StartNpcConversation.java b/src/protocol/swg/objectControllerObjects/StartNpcConversation.java new file mode 100644 index 00000000..a696ca70 --- /dev/null +++ b/src/protocol/swg/objectControllerObjects/StartNpcConversation.java @@ -0,0 +1,62 @@ +/******************************************************************************* + * Copyright (c) 2013 + * + * This File is part of NGECore2. + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see . + * + * Using NGEngine to work with NGECore2 is making a combined work based on NGEngine. + * Therefore all terms and conditions of the GNU Lesser General Public License cover the combination. + ******************************************************************************/ +package protocol.swg.objectControllerObjects; + +import java.nio.ByteOrder; + +import org.apache.mina.core.buffer.IoBuffer; + +import protocol.swg.ObjControllerMessage; + +public class StartNpcConversation extends ObjControllerObject { + + private long npcId; + private long objectId; + + public StartNpcConversation(long objectId, long npcId) { + this.objectId = objectId; + this.npcId = npcId; + } + + @Override + public void deserialize(IoBuffer data) { + // TODO Auto-generated method stub + + } + + @Override + public IoBuffer serialize() { + IoBuffer buffer = IoBuffer.allocate(31).order(ByteOrder.LITTLE_ENDIAN); + + buffer.putInt(ObjControllerMessage.START_CONVERSATION); + buffer.putLong(objectId); + + buffer.putInt(0); + buffer.putLong(npcId); + buffer.putInt(0); + buffer.putShort((short) 0); + buffer.put((byte) 0); + + return buffer.flip(); + } + +} diff --git a/src/protocol/swg/objectControllerObjects/StopNpcConversation.java b/src/protocol/swg/objectControllerObjects/StopNpcConversation.java new file mode 100644 index 00000000..4690140d --- /dev/null +++ b/src/protocol/swg/objectControllerObjects/StopNpcConversation.java @@ -0,0 +1,66 @@ +/******************************************************************************* + * Copyright (c) 2013 + * + * This File is part of NGECore2. + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see . + * + * Using NGEngine to work with NGECore2 is making a combined work based on NGEngine. + * Therefore all terms and conditions of the GNU Lesser General Public License cover the combination. + ******************************************************************************/ +package protocol.swg.objectControllerObjects; + +import java.nio.ByteOrder; + +import org.apache.mina.core.buffer.IoBuffer; + +import protocol.swg.ObjControllerMessage; + +public class StopNpcConversation extends ObjControllerObject { + + private long npcId; + private long objectId; + private String stfFile; + private String stfLabel; + + public StopNpcConversation(long objectId, long npcId, String stfFile, String stfLabel) { + this.objectId = objectId; + this.npcId = npcId; + this.stfFile = stfFile; + this.stfLabel = stfLabel; + } + + @Override + public void deserialize(IoBuffer data) { + // TODO Auto-generated method stub + + } + + @Override + public IoBuffer serialize() { + IoBuffer buffer = IoBuffer.allocate(40 + stfFile.length() + stfLabel.length()).order(ByteOrder.LITTLE_ENDIAN); + + buffer.putInt(ObjControllerMessage.STOP_CONVERSATION); + buffer.putLong(objectId); + + buffer.putInt(0); + buffer.putLong(npcId); + buffer.put(getAsciiString(stfFile)); + buffer.putInt(0); + buffer.put(getAsciiString(stfLabel)); + buffer.putLong(0); + + return buffer.flip(); + } +} diff --git a/src/protocol/swg/objectControllerObjects/TargetUpdate.java b/src/protocol/swg/objectControllerObjects/TargetUpdate.java index bfac2b1b..bd01c8a8 100644 --- a/src/protocol/swg/objectControllerObjects/TargetUpdate.java +++ b/src/protocol/swg/objectControllerObjects/TargetUpdate.java @@ -39,7 +39,7 @@ public class TargetUpdate extends ObjControllerObject { @Override public IoBuffer serialize() { - // TODO Auto-generated method stub + return null; } diff --git a/src/protocol/swg/objectControllerObjects/UiPlayEffect.java b/src/protocol/swg/objectControllerObjects/UiPlayEffect.java new file mode 100644 index 00000000..a4b776fd --- /dev/null +++ b/src/protocol/swg/objectControllerObjects/UiPlayEffect.java @@ -0,0 +1,60 @@ +/******************************************************************************* + * Copyright (c) 2013 + * + * This File is part of NGECore2. + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see . + * + * Using NGEngine to work with NGECore2 is making a combined work based on NGEngine. + * Therefore all terms and conditions of the GNU Lesser General Public License cover the combination. + ******************************************************************************/ +package protocol.swg.objectControllerObjects; + +import java.nio.ByteOrder; + +import org.apache.mina.core.buffer.IoBuffer; + +import protocol.swg.ObjControllerMessage; + +public class UiPlayEffect extends ObjControllerObject { + + private long objectId; + private String uiString; + + public UiPlayEffect(long objectId, String uiString) { + this.uiString = uiString; + this.objectId = objectId; + } + + @Override + public void deserialize(IoBuffer data) { + // TODO Auto-generated method stub + + } + + @Override + public IoBuffer serialize() { + + IoBuffer result = IoBuffer.allocate(26 + uiString.length()).order(ByteOrder.LITTLE_ENDIAN); + + result.putInt(ObjControllerMessage.UI_PLAY_EFFECT); + result.putLong(objectId); + result.putInt(0); + result.putLong(objectId); + result.put(getAsciiString(uiString)); + + return result.flip(); + + } +} diff --git a/src/resources/objects/Buff.java b/src/resources/buffs/Buff.java similarity index 77% rename from src/resources/objects/Buff.java rename to src/resources/buffs/Buff.java index c7ee85de..d845d423 100644 --- a/src/resources/objects/Buff.java +++ b/src/resources/buffs/Buff.java @@ -19,8 +19,9 @@ * Using NGEngine to work with NGECore2 is making a combined work based on NGEngine. * Therefore all terms and conditions of the GNU Lesser General Public License cover the combination. ******************************************************************************/ -package resources.objects; +package resources.buffs; +import java.io.Serializable; import java.nio.ByteOrder; import java.util.concurrent.Executors; import java.util.concurrent.ScheduledFuture; @@ -34,24 +35,24 @@ import org.apache.mina.core.buffer.SimpleBufferAllocator; import resources.objects.creature.CreatureObject; import com.sleepycat.persist.model.NotPersistent; -import com.sleepycat.persist.model.Persistent; -import engine.clientdata.ClientFileManager; -import engine.clientdata.visitors.DatatableVisitor; import engine.resources.common.CRC; +import engine.resources.objects.IDelta; +import engine.resources.objects.SWGObject; -@Persistent(version=6) -public class Buff implements IListObject { +public class Buff implements IDelta, Serializable { + private static final long serialVersionUID = 1L; @NotPersistent - private SimpleBufferAllocator bufferPool = new SimpleBufferAllocator(); - private String group1; + private transient static SimpleBufferAllocator bufferPool = new SimpleBufferAllocator(); + private String group1, group2; private int priority; private float duration; private String buffName; private long ownerId; private String effect1Name, effect2Name, effect3Name, effect4Name, effect5Name; private float effect1Value, effect2Value, effect3Value, effect4Value, effect5Value; + private String callback; private String particleEffect; private boolean isDebuff; private boolean removeOnDeath; @@ -65,14 +66,46 @@ public class Buff implements IListObject { private int totalPlayTime; private byte decayCounter = 0; @NotPersistent - private ScheduledFuture removalTask; + private transient ScheduledFuture removalTask; private int stacks = 1; + private long groupBufferId; + private int buffCRC; - public Buff(String buffName, long ownerId) { + public Buff(Buff baseBuff, long ownerId) { + this.buffName = baseBuff.getBuffName(); + this.buffCRC = baseBuff.getBuffCRC(); + this.group1 = baseBuff.getGroup1(); + this.group2 = baseBuff.getGroup2(); + this.priority = baseBuff.getPriority(); + this.duration = baseBuff.getDuration(); + this.effect1Name = baseBuff.getEffect1Name(); + this.effect1Value = baseBuff.getEffect1Value(); + this.effect2Name = baseBuff.getEffect2Name(); + this.effect2Value = baseBuff.getEffect2Value(); + this.effect3Name = baseBuff.getEffect3Name(); + this.effect3Value = baseBuff.getEffect3Value(); + this.effect4Name = baseBuff.getEffect4Name(); + this.effect4Value = baseBuff.getEffect4Value(); + this.effect5Name = baseBuff.getEffect5Name(); + this.effect5Value = baseBuff.getEffect5Value(); + this.callback = baseBuff.getCallback(); + this.particleEffect = baseBuff.getParticleEffect(); + this.isDebuff = baseBuff.isDebuff(); + this.removeOnDeath = baseBuff.isRemoveOnDeath(); + this.isRemovableByPlayer = baseBuff.isRemovableByPlayer(); + this.maxStacks = baseBuff.getMaxStacks(); + this.isPersistent = baseBuff.isPersistent(); + this.removeOnRespec = baseBuff.isRemoveOnRespec(); + this.aiRemoveOnEndCombat = baseBuff.isAiRemoveOnEndCombat(); + this.decayOnPvPDeath = baseBuff.isDecayOnPvPDeath(); + } + + /*public Buff(String buffName, long ownerId) { this.buffName = buffName; this.ownerId = ownerId; - + this.buffCRC = CRC.StringtoCRC(buffName); + DatatableVisitor visitor; try { @@ -84,6 +117,7 @@ public class Buff implements IListObject { if(((String) visitor.getObject(i, 0)).equalsIgnoreCase(buffName)) { group1 = (String) visitor.getObject(i, 1); + group2 = (String) visitor.getObject(i, 2); priority = (int) visitor.getObject(i, 4); duration = (Float) visitor.getObject(i, 6); effect1Name = (String) visitor.getObject(i, 7); @@ -96,6 +130,7 @@ public class Buff implements IListObject { effect4Value = (Float) visitor.getObject(i, 14); effect5Name = (String) visitor.getObject(i, 15); effect5Value = (Float) visitor.getObject(i, 16); + callback = (String) visitor.getObject(i, 18); particleEffect = (String) visitor.getObject(i, 19); isDebuff = (Boolean) visitor.getObject(i, 22); removeOnDeath = (Integer) visitor.getObject(i, 25) != 0; @@ -113,14 +148,16 @@ public class Buff implements IListObject { } catch (InstantiationException | IllegalAccessException e) { e.printStackTrace(); } - - + }*/ + public Buff() { } + + @Override + public void init(SWGObject object) { + // TODO Auto-generated method stub } - public Buff() { } - @Override public byte[] getBytes() { @@ -153,7 +190,7 @@ public class Buff implements IListObject { this.group1 = group1; } - public float getPriority() { + public int getPriority() { return priority; } @@ -264,6 +301,14 @@ public class Buff implements IListObject { public void setEffect5Value(float effect5Value) { this.effect5Value = effect5Value; } + + public String getCallback() { + return callback; + } + + public void setCallback(String callback) { + this.callback = callback; + } public String getParticleEffect() { return particleEffect; @@ -416,5 +461,33 @@ public class Buff implements IListObject { public void setStacks(int stacks) { this.stacks = stacks; } + + public boolean isGroupBuff() { + return effect1Name == null ? false : effect1Name.equals("group"); + } + public long getGroupBufferId() { + return groupBufferId; + } + + public void setGroupBufferId(long groupBufferId) { + this.groupBufferId = groupBufferId; + } + + public String getGroup2() { + return group2; + } + + public void setGroup2(String group2) { + this.group2 = group2; + } + + public int getBuffCRC() { + return buffCRC; + } + + public void setBuffCRC(int buffCRC) { + this.buffCRC = buffCRC; + } + } diff --git a/src/resources/buffs/BuffItem.java b/src/resources/buffs/BuffItem.java new file mode 100644 index 00000000..0c46f9ce --- /dev/null +++ b/src/resources/buffs/BuffItem.java @@ -0,0 +1,75 @@ +/******************************************************************************* + * Copyright (c) 2013 + * + * This File is part of NGECore2. + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see . + * + * Using NGEngine to work with NGECore2 is making a combined work based on NGEngine. + * Therefore all terms and conditions of the GNU Lesser General Public License cover the combination. + ******************************************************************************/ +package resources.buffs; + +import java.io.Serializable; + +public class BuffItem implements Serializable { + + private static final long serialVersionUID = 1L; + private int affectAmount; + private int entertainerBonus; + private int invested; + private String skillName; + + public BuffItem() { + + } + + public BuffItem(String skillName, int invested, int entBonus) { + this.skillName = skillName; + this.invested = invested; + this.entertainerBonus = entBonus; + } + + public int getAffectAmount() { + return affectAmount; + } + + public int getEntertainerBonus() { + return entertainerBonus; + } + + public int getInvested() { + return invested; + } + + public String getSkillName() { + return skillName; + } + + public void setAffectAmount(int amount) { + this.affectAmount = amount; + } + + public void setEntertainerBonus(int entertainerBonus) { + this.entertainerBonus = entertainerBonus; + } + + public void setInvested(int invested) { + this.invested = invested; + } + + public void setSkillName(String skillName) { + this.skillName = skillName; + } +} diff --git a/src/resources/objects/DamageOverTime.java b/src/resources/buffs/DamageOverTime.java similarity index 93% rename from src/resources/objects/DamageOverTime.java rename to src/resources/buffs/DamageOverTime.java index ce367916..fcd91ad5 100644 --- a/src/resources/objects/DamageOverTime.java +++ b/src/resources/buffs/DamageOverTime.java @@ -19,22 +19,22 @@ * Using NGEngine to work with NGECore2 is making a combined work based on NGEngine. * Therefore all terms and conditions of the GNU Lesser General Public License cover the combination. ******************************************************************************/ -package resources.objects; +package resources.buffs; +import java.io.Serializable; import java.util.concurrent.ScheduledFuture; import com.sleepycat.persist.model.NotPersistent; -import com.sleepycat.persist.model.Persistent; -@Persistent(version=1) -public class DamageOverTime { +public class DamageOverTime implements Serializable { + private static final long serialVersionUID = 1L; private Buff buff; private String type; private int duration; private int intensity; @NotPersistent - private ScheduledFuture task; + private transient ScheduledFuture task; private long startTime; private String commandName; diff --git a/src/resources/common/AnimationType.java b/src/resources/common/AnimationType.java new file mode 100644 index 00000000..b0bd9a17 --- /dev/null +++ b/src/resources/common/AnimationType.java @@ -0,0 +1,35 @@ +package resources.common; + +public class AnimationType { + public static String Explain = "explain"; + public static String NodHeadOnce = "nod_head_once"; + public static String Bow = "bow"; + public static String Wave1 = "wave1"; + public static String Beckon = "beckon"; + public static String Dive = "dive"; + public static String HitLight = "get_hit_light"; + public static String HitLightHighCenter = "get_hit_light_high_center"; + public static String HitHighLightHighLeft = "get_hit_light_high_left"; + public static String HitLightHighRight = "get_hit_light_high_right"; + public static String HitLightLowLeft = "get_hit_light_low_left"; + public static String HitLightLowRight = "get_hit_light_low_right"; + public static String HitLightMidCenter = "get_hit_light_mid_center"; + public static String HitLightMidLeft = "get_hit_light_mid_left"; + public static String HitLightMidRight = "get_hit_light_mid_right"; + public static String HitMedium = "get_hit_medium"; + public static String HitMediumHighCenter = "get_hit_medium_high_center"; + public static String HitMediumHighLeft = "get_hit_medium_high_left"; + public static String HitMediumHighRight = "get_hit_medium_high_right"; + public static String HitMediumLowLeft = "get_hit_medium_low_left"; + public static String HitMediumLowRight = "get_hit_medium_low_right"; + public static String HitMediumMidCenter = "get_hit_medium_mid_center"; + public static String HitMediumMidLeft = "get_hit_medium_mid_left"; + public static String HitMediumMidRight = "get_hit_medium_mid_right"; + public static String HealOther = "heal_other"; + public static String HealSelf = "heal_self"; + public static String HurryToKneeling = "hurry_to_kneeling"; + public static String HurryToProne = "hurry_to_prone"; + public static String HurryToStanding = "hurry_to_standing"; + public static String Throw = "throw"; + public static String TumbleToStanding = "tumble_to_standing"; +} diff --git a/src/resources/common/BountyListItem.java b/src/resources/common/BountyListItem.java new file mode 100644 index 00000000..3b09ec0f --- /dev/null +++ b/src/resources/common/BountyListItem.java @@ -0,0 +1,135 @@ +/******************************************************************************* + * Copyright (c) 2013 + * + * This File is part of NGECore2. + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see . + * + * Using NGEngine to work with NGECore2 is making a combined work based on NGEngine. + * Therefore all terms and conditions of the GNU Lesser General Public License cover the combination. + ******************************************************************************/ +package resources.common; + +import java.io.Serializable; +import java.util.ArrayList; +import java.util.List; + +import com.sleepycat.persist.model.Entity; +import com.sleepycat.persist.model.PrimaryKey; + +@Entity(version=1) +public class BountyListItem implements Serializable { + + private static final long serialVersionUID = 1L; + @PrimaryKey + private long objectID; + private int creditReward; + private String profession; + private String faction; + private String name; + private List assignedHunters; + private List bountyPlacers; + private int failedAttempts; + + public BountyListItem() { } + + public BountyListItem(long objectID, int creditReward, String profession, String faction, String name) { + this.objectID = objectID; + this.creditReward = creditReward; + this.profession = profession; + this.faction = faction; + this.setName(name); + this.setAssignedHunters(new ArrayList(3)); + this.setBountyPlacers(new ArrayList()); + } + + public long getObjectID() { + return objectID; + } + public void setObjectID(long objectID) { + this.objectID = objectID; + } + public int getCreditReward() { + return creditReward; + } + public void setCreditReward(int creditReward) { + this.creditReward = creditReward; + } + public String getProfession() { + return profession; + } + public void setProfession(String profession) { + this.profession = profession; + } + + public String getFaction() { + return faction; + } + + public void setFaction(String faction) { + this.faction = faction; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public void addBounty(int amountToAdd) { + this.creditReward += amountToAdd; + } + + public void deductBounty(int amountToDeduct) { + this.creditReward = this.creditReward - amountToDeduct; + } + + public List getAssignedHunters() { + return assignedHunters; + } + + public void setAssignedHunters(List assignedHunters) { + this.assignedHunters = assignedHunters; + } + + public void addBountyHunter(long objectId) { + assignedHunters.add(objectId); + } + + public void removeBountyHunter(long objectId) { + assignedHunters.remove(objectId); + } + + public List getBountyPlacers() { + return bountyPlacers; + } + + public void setBountyPlacers(List bountyPlacers) { + this.bountyPlacers = bountyPlacers; + } + + public int getFailedAttempts() { + return failedAttempts; + } + + public void setFailedAttempts(int failedAttempts) { + this.failedAttempts = failedAttempts; + } + + public void incrementFailedAttempts() { + this.failedAttempts += 1; + } +} \ No newline at end of file diff --git a/src/resources/common/BuffBuilder.java b/src/resources/common/BuffBuilder.java new file mode 100644 index 00000000..83b2d9fb --- /dev/null +++ b/src/resources/common/BuffBuilder.java @@ -0,0 +1,92 @@ +/******************************************************************************* + * Copyright (c) 2013 + * + * This File is part of NGECore2. + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see . + * + * Using NGEngine to work with NGECore2 is making a combined work based on NGEngine. + * Therefore all terms and conditions of the GNU Lesser General Public License cover the combination. + ******************************************************************************/ +package resources.common; + +public class BuffBuilder { + private int affectAmount; + private String category; + private int cost; + private int maxTimesApplied; + private String requiredExpertise; + private String statAffects; + private String statName; + + public BuffBuilder() { + + } + + public int getAffectAmount() { + return affectAmount; + } + + public String getCategory() { + return category; + } + + public int getCost() { + return this.cost; + } + + public int getMaxTimesApplied() { + return maxTimesApplied; + } + + public String getRequiredExpertise() { + return requiredExpertise; + } + + public String getStatAffects() { + return statAffects; + } + + public String getStatName() { + return statName; + } + + public void setAffectAmount(int affectAmount) { + this.affectAmount = affectAmount; + } + + public void setCategory(String category) { + this.category = category; + } + + public void setCost(int cost) { + this.cost = cost; + } + + public void setMaxTimesApplied(int maxTimesApplied) { + this.maxTimesApplied = maxTimesApplied; + } + + public void setRequiredExpertise(String requiredExpertise) { + this.requiredExpertise = requiredExpertise; + } + + public void setStatAffects(String statAffects) { + this.statAffects = statAffects; + } + + public void setStatName(String statName) { + this.statName = statName; + } +} diff --git a/src/resources/common/Console.java b/src/resources/common/Console.java new file mode 100644 index 00000000..770eb5b2 --- /dev/null +++ b/src/resources/common/Console.java @@ -0,0 +1,38 @@ +/******************************************************************************* + * Copyright (c) 2013 + * + * This File is part of NGECore2. + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see . + * + * Using NGEngine to work with NGECore2 is making a combined work based on NGEngine. + * Therefore all terms and conditions of the GNU Lesser General Public License cover the combination. + ******************************************************************************/ +package resources.common; + +import java.util.Calendar; + +public class Console { + + public static void println(String string) { + Calendar cal = Calendar.getInstance(); + System.out.println(cal.getTime() + ": " + string); + } + + public static void print(String string) { + Calendar cal = Calendar.getInstance(); + System.out.print(cal.getTime() + ": " + string); + } + +} diff --git a/src/resources/common/ConversationOption.java b/src/resources/common/ConversationOption.java new file mode 100644 index 00000000..840fdcba --- /dev/null +++ b/src/resources/common/ConversationOption.java @@ -0,0 +1,50 @@ +/******************************************************************************* + * Copyright (c) 2013 + * + * This File is part of NGECore2. + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see . + * + * Using NGEngine to work with NGECore2 is making a combined work based on NGEngine. + * Therefore all terms and conditions of the GNU Lesser General Public License cover the combination. + ******************************************************************************/ +package resources.common; + +public class ConversationOption { + + private OutOfBand outOfBand; + private int index; + + public ConversationOption(OutOfBand outOfBand, int index) { + this.setOutOfBand(outOfBand); + this.setIndex(index); + } + + public OutOfBand getOutOfBand() { + return outOfBand; + } + + public void setOutOfBand(OutOfBand outOfBand) { + this.outOfBand = outOfBand; + } + + public int getIndex() { + return index; + } + + public void setIndex(int index) { + this.index = index; + } + +} diff --git a/src/resources/common/Forager.java b/src/resources/common/Forager.java new file mode 100644 index 00000000..71874a78 --- /dev/null +++ b/src/resources/common/Forager.java @@ -0,0 +1,515 @@ +/******************************************************************************* + * Copyright (c) 2013 + * + * This File is part of NGECore2. + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see . + * + * Using NGEngine to work with NGECore2 is making a combined work based on NGEngine. + * Therefore all terms and conditions of the GNU Lesser General Public License cover the combination. + ******************************************************************************/ +package resources.common; + +import java.util.ArrayList; +import java.util.List; +import java.util.Random; +import java.util.Vector; + +import engine.resources.objects.SWGObject; +import engine.resources.scene.Point3D; +import main.NGECore; +import resources.datatables.DisplayType; +import resources.datatables.Options; +import resources.loot.LootGroup; +import resources.objects.creature.CreatureObject; +import resources.objects.group.GroupObject; +import resources.objects.tangible.TangibleObject; +import services.ai.AIActor; + +/** + * @author Charon + */ + +public class Forager { + + public static final int LYASE_ENZYME = 0; + public static final int RARE_COMPONENT = 1; + public static final int INSECT_BAIT = 2; + public static final int GRUB_BAIT = 3; + public static final int WORM_BAIT = 4; + public static final int MYSTERIOUS_DATA_DISC = 5; + + private int[] mapPlanetIDs = new int[]{6,7,8}; + + // consider foraged food food/foraged + // tangible/item/treasure_map/shared_relic_buff_s01.iff + + public Forager(){ + + } + + public boolean handleForageResults(CreatureObject forager){ + // determine foraged object + SWGObject foragerInventory = forager.getSlottedObject("inventory"); + + + // you can use Kommerken Steak food which increases your + // foraging chance by 12% and gives you a + // 5% bonus chance of finding a treasure map. + + int randomForageRoll = new Random().nextInt(100); + int randomForageObjectRoll = new Random().nextInt(100); + int remainder = 0; + int forageResultChance = 100; + int kommerkenBonus = 0; + + int[] forageChances = new int[]{10,10,25,25,25,5}; + int[] forageChances2 = new int[]{12,10,21,23,24,10}; // Kommerken Steak + int[] forageChances3 = new int[]{20,9,22,22,22,5}; // if you got the pig + + + int chosenObject = 0; + +// if (forager.hasChuckedIn(KommerkenSteak)){ +// kommerkenBonus = 12; +// forageChances = forageChances2; +// } + +// if (forager.gotThePig(pig)){ +// forageChances = forageChances3; +//} + //forager.sendSystemMessage("randomForageRoll " + randomForageRoll,(byte) 0); + if (randomForageRoll=80){ + chosenObject = 6; + forager.sendSystemMessage("@skl_use:sys_forage_noroom",(byte) 0); + } + + // chosenObject = 5; // To test TMs + if(forager.getClient().isGM()) // Always yield a TM for testing + chosenObject = 5; + + //forager.sendSystemMessage("chosenObject " + chosenObject,(byte) 0); + switch (chosenObject) { + + case LYASE_ENZYME: String template = "object/tangible/loot/beast/shared_enzyme_2.iff"; + TangibleObject foragedObject = (TangibleObject) NGECore.getInstance().objectService.createObject(template, forager.getPlanet()); + // determine color here + foragedObject.setCustomizationVariable("/private/index_color_1", (byte) new Random().nextInt(10)); // edb_vial.pal + foragerInventory.add(foragedObject); + forager.sendSystemMessage("",(byte) 0); + break; + + case RARE_COMPONENT: template = "object/tangible/loot/beast/shared_enzyme_1.iff"; // for now, must find temp + foragedObject = (TangibleObject) NGECore.getInstance().objectService.createObject(template, forager.getPlanet()); + foragerInventory.add(foragedObject); + forager.sendSystemMessage("",(byte) 0); + break; + + case INSECT_BAIT: template = "object/tangible/fishing/bait/shared_bait_insect.iff"; + foragedObject = (TangibleObject) NGECore.getInstance().objectService.createObject(template, forager.getPlanet()); + foragerInventory.add(foragedObject); + forager.sendSystemMessage("",(byte) 0); + break; + + case GRUB_BAIT: template = "object/tangible/fishing/bait/shared_bait_grub.iff"; + foragedObject = (TangibleObject) NGECore.getInstance().objectService.createObject(template, forager.getPlanet()); + foragerInventory.add(foragedObject); + forager.sendSystemMessage("",(byte) 0); + break; + + case WORM_BAIT: template = "object/tangible/fishing/bait/shared_bait_worm.iff"; + foragedObject = (TangibleObject) NGECore.getInstance().objectService.createObject(template, forager.getPlanet()); + foragerInventory.add(foragedObject); + forager.sendSystemMessage("",(byte) 0); + break; + + case MYSTERIOUS_DATA_DISC: template = "object/tangible/loot/generic_usable/shared_datadisk_generic.iff"; + foragedObject = (TangibleObject) NGECore.getInstance().objectService.createObject(template, forager.getPlanet()); + foragedObject.setCustomName(getLevelDependentMapName(forager.getLevel())); + foragedObject.setAttachment("MapLevel", forager.getLevel()); + foragedObject.setAttachment("MapSTFName", getLevelDependentSTFName(forager.getLevel())); + int mapPlanetID = new Random().nextInt(mapPlanetIDs.length-1); + foragedObject.setAttachment("MapPlanet", mapPlanetIDs[mapPlanetID]); + //System.out.println("mapPlanetID " + mapPlanetIDs[mapPlanetID]); + foragedObject.setAttachment("radial_filename", "object/treasuremap"); + //foragedObject.setAttachment("radial_filename", "object/treasuremapExtract"); + foragerInventory.add(foragedObject); + forager.sendSystemMessage("",(byte) 0); + break; + + default: break; + ///object/tangible/treasure_map/shared_treasure_map_base.iff shared_treasure_map_quest.iff + } + + if (chosenObject<6) + forager.sendSystemMessage("@skl_use:sys_forage_success",(byte) 0); + + // spawn adversaries + int adversaryRoll = new Random().nextInt(100); + // A new buff is imaginable that would decrease the chance of running into adversaries here, just an idea + + if (chosenObject>6) + adversaryRoll=999; + + // adversaryRoll=999; // To test TMs + + if (adversaryRoll<14) { // 14 100 // To test TMs + int adversaryTypeRoll = new Random().nextInt(100); + if (adversaryTypeRoll<50){ + // wormie + spawnWormie(forager); + } else { + // goon + spawnGoon(forager); + } + } + + } else { + forager.sendSystemMessage("@skl_use:sys_forage_fail",(byte) 0); + + } + + return true; + } + + private String getLevelDependentMapName(int level){ + if (level>=1 && level<=10) + return "Mysterious Data Disk (Adventurer's Treasure)"; + if (level>=11 && level<=20) + return "Mysterious Data Disk (Villager's Hidden Savings)"; + if (level>=21 && level<=30) + return "A map to a Trader's Hidden Treasure"; + if (level>=31 && level<=40) + return "A map to a Bounty Hunter's Hidden Stash"; + if (level>=41 && level<=50) + return "A droid's data disk with map coordinates"; + if (level>=51 && level<=60) + return "A map to a Jedi Knight's body"; + if (level>=61 && level<=70) + return "A map to Jedi Artifacts"; + if (level>=71 && level<=80) + return "A map to a cursed item"; + if (level>=81 && level<=90) + return "Mysterious Data Disk (Mysterious Container) "; + return ""; + } + + private String getLevelDependentSTFName(int level){ + if (level>=1 && level<=10) + return "treasure_guard_adventurer"; + if (level>=11 && level<=20) + return "treasure_guard_villager"; + if (level>=21 && level<=30) + return "treasure_guard_trader"; + if (level>=31 && level<=40) + return "treasure_guard_bounty_hunter"; + if (level>=41 && level<=50) + return "treasure_guard_droid"; + if (level>=51 && level<=60) + return "treasure_guard_padawan"; + if (level>=61 && level<=70) + return "treasure_guard_jedi"; + if (level>=71 && level<=80) + return "treasure_guard_jedi_elder"; + if (level>=81 && level<=90) + return "treasure_guard_jedi_elite"; + return ""; + } + + + + + + + public void spawnWormie(CreatureObject forager){ + int level = forager.getLevel(); + String name = ""; + Point3D wormiePosition = SpawnPoint.getRandomPosition(forager.getPosition(), 1, 6, forager.getPlanetId()); + CreatureObject wormie = NGECore.getInstance().spawnService.spawnCreature("forage_worm", forager.getPlanet().getName(), 0L, wormiePosition.x, wormiePosition.y, wormiePosition.z, (short)level); + switch (wormie.getTemplate()) { + + case "object/mobile/shared_col_forage_aggravated_worm.iff": + name = "An Aggravated Worm"; + break; + + case "object/mobile/shared_col_forage_angry_worm.iff": + name = "An Angry Worm"; + break; + + case "object/mobile/shared_col_forage_brutal_worm.iff": + name = "A Brutal Worm"; + break; + + case "object/mobile/shared_col_forage_carnivorous_worm.iff": + name = "A Carnivorous Worm"; + break; + + case "object/mobile/shared_col_forage_ferocious_worm.iff": + name = "A Ferocious Worm"; + break; + + case "object/mobile/shared_col_forage_fierce_worm.iff": + name = "A Fierce Worm"; + break; + + case "object/mobile/shared_col_forage_hungry_worm.iff": + name = "A Hungry Worm"; + break; + + case "object/mobile/shared_col_forage_oozing_worm.iff": + name = "An Oozing Worm"; + break; + + case "object/mobile/shared_col_forage_savage_worm.iff": + name = "A Savage Worm"; + break; + + case "object/mobile/shared_col_forage_territorial_worm.iff": + name = "A Territorial Worm"; + break; + } + wormie.setCustomName(name); + wormie.setLevel(forager.getLevel()); + wormie.setOptions(Options.AGGRESSIVE, true); + wormie.setOptions(Options.ATTACKABLE, true); + AIActor actor = (AIActor) wormie.getAttachment("AI"); + actor.addDefender(forager); + } + + public void spawnGoon(CreatureObject forager){ + System.out.println("GOON"); + int level = forager.getLevel(); + String name = ""; + Point3D wormiePosition = SpawnPoint.getRandomPosition(forager.getPosition(), 1, 6, forager.getPlanetId()); + CreatureObject goon = NGECore.getInstance().spawnService.spawnCreature("forage_goon", forager.getPlanet().getName(), 0L, wormiePosition.x, wormiePosition.y, wormiePosition.z, (short)level); + // thief wookie criminal scavenger @forage_enemy:bark_thief + String barkString = ""; + + switch (goon.getTemplate()) { + + case "object/mobile/shared_dressed_criminal_assassin_human_female_01.iff": + name = "A criminal"; + barkString = "bark_criminal"; + break; + + case "object/mobile/shared_dressed_criminal_assassin_human_male_01.iff": + name = "A Scavenger"; + barkString = "bark_scavenger"; + break; + + case "object/mobile/shared_twilek_male.iff": + name = "A Thief"; + barkString = "bark_thief"; + break; + + case "object/mobile/shared_dressed_binayre_pirate_zabrak_male_01.iff": + name = "A Pirate"; + barkString = "bark_thief"; + break; + + case "object/mobile/shared_dressed_borvos_thug.iff": + name = "A Thug"; + barkString = "bark_criminal"; + break; + + case "object/mobile/shared_wookiee_male.iff": + name = "A Thug"; + barkString = "bark_wookiee"; + break; + + } + + goon.addObserver(forager); + goon.setCustomName(name); + goon.setLevel(forager.getLevel()); + goon.setOptions(Options.AGGRESSIVE, true); + goon.setOptions(Options.ATTACKABLE, true); + AIActor actor = (AIActor) goon.getAttachment("AI"); + actor.addDefender(forager); + forager.sendSystemMessage("@foraging/forage_enemy:" + barkString, DisplayType.Broadcast); + //OutOfBand oob = OutOfBand.ProsePackage("@foraging/forage_enemy:" + barkString)); + OutOfBand oob = OutOfBand.ProsePackage("@jawa_trader:cant_understand"); + forager.sendSystemMessage("@jawa_trader:cant_understand", DisplayType.Broadcast); + NGECore.getInstance().chatService.spatialChat(goon, forager, "", (short)0x0, (short)0x0, 1, oob); + } + + public void handleGuardSpawn(CreatureObject owner, TangibleObject map){ + System.err.println("handleGuardSpawn"); + short spawnLevel = (short) map.getAttachment("MapLevel"); + //Point3D exactTreasureLocation = (Point3D) map.getAttachment("MapExactLocation"); + Point3D exactTreasureLocation = owner.getPosition(); + + GroupObject extractorGroup = null; + if (owner.getGroupId()!=0) + extractorGroup = (GroupObject) NGECore.getInstance().objectService.getObject(owner.getGroupId()); + + int extractorGroupSize = 1; + if (extractorGroup!=null) + extractorGroupSize = extractorGroup.getMemberList().size(); + + int guardSpawnNumber = 2 + extractorGroupSize; + Vector guardList = new Vector(); + for (int i=0;i guardList = (Vector) treasureContainer.getAttachment("TreasureGuards"); + int aliveCount = 0; + for (CreatureObject guard:guardList){ + if (guard.getPosture()!=14 && guard.getPosture()!=15) + aliveCount++; + } + return aliveCount; + } + + + + public void configureTreasureLoot(TangibleObject treasureContainer, CreatureObject owner, short spawnLevel){ + List lootgroups = new ArrayList(); + + String levelRange = "61"; + + if (spawnLevel>60 && spawnLevel<=70){ + levelRange = "61"; + } + if (spawnLevel>70 && spawnLevel<=80){ + levelRange = "75"; + } + if (spawnLevel>80 && spawnLevel<=90){ + levelRange = "85"; + } + + + // PROFESSION BRACELETS HOUSE FURNITURE WEARABLE BACKPACKS +// String[] lootPoolNames = new String[]{"profession_bracelets_"+levelRange,"house_furniture","wearable_backpacks"}; +// double[] lootPoolChances = new double[]{60,30,10}; + String[] lootPoolNames = new String[]{"profession_bracelets_"+levelRange}; + double[] lootPoolChances = new double[]{100}; + double lootGroupChance = 80; + treasureContainer.addToLootGroups(lootPoolNames, lootPoolChances, lootGroupChance); + + // WEAPONSMITH COMPONENTS JEDI COMPONENTS GEM COLLECTION ITEMS TREASURE HUNTER COLLECTION ITEMS + //lootPoolNames = new String[]{"weaponsmith_components","jedi_components","gem_collection_items","treasure_hunter_collection_items"}; + //lootPoolChances = new double[]{15,25,30,30}; + lootPoolNames = new String[]{"jedi_components_treasure"}; + lootPoolChances = new double[]{100}; + lootGroupChance = 80; + treasureContainer.addToLootGroups(lootPoolNames, lootPoolChances, lootGroupChance); + + // COMMON LOOTS: +// Looted non-wearable Bounty Hunter armor pieces (Used to make Mandalorian armor at the Death Watch Bunker) +// Looted clothing (usually 20+) +// Looted armors (usually 20+) +// Looted weapons (700-800 DPS(Sometimes less, now includes the Nak'tra Crystal Rifle)) +// Advanced Agility Stim (CL80) +// Advanced Power Stim (CL80) +// Loot kits adhesives +// Various Schematics +// lootPoolNames = new String[]{"bh_armor_for_mando","advanced_stims_80","loot_kits_adhesives","various_schematics"}; +// lootPoolChances = new double[]{15,25,30,30}; +// lootGroupChance = 80; +// treasureContainer.addToLootGroups(lootPoolNames, lootPoolChances, lootGroupChance); +// + + //GEM COLLECTION ITEMS CONSUMABLE BUFF ITEMS + + // VERY RARE BUFF ITEMS + lootPoolNames = new String[]{"rare_buff_items"}; + lootPoolChances = new double[]{100}; + lootGroupChance = 0.1; + treasureContainer.addToLootGroups(lootPoolNames, lootPoolChances, lootGroupChance); + + // EXTRA + lootPoolNames = new String[]{"treasure_extra"}; + lootPoolChances = new double[]{100}; + lootGroupChance = 50; + treasureContainer.addToLootGroups(lootPoolNames, lootPoolChances, lootGroupChance); + + } + +} diff --git a/src/resources/common/IDAttribute.java b/src/resources/common/IDAttribute.java new file mode 100644 index 00000000..b17edf9d --- /dev/null +++ b/src/resources/common/IDAttribute.java @@ -0,0 +1,56 @@ +/******************************************************************************* + * Copyright (c) 2013 + * + * This File is part of NGECore2. + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see . + * + * Using NGEngine to work with NGECore2 is making a combined work based on NGEngine. + * Therefore all terms and conditions of the GNU Lesser General Public License cover the combination. + ******************************************************************************/ +package resources.common; + +public class IDAttribute { + + private float floatValue; + private String name; + private int value; + + public IDAttribute() { } + + public float getFloatValue() { + return floatValue; + } + + public String getName() { + return name; + } + + public int getValue() { + return value; + } + + public void setFloatValue(float floatValue) { + this.floatValue = floatValue; + } + + public void setName(String name) { + this.name = name; + } + + public void setValue(int value) { + this.value = value; + } + +} \ No newline at end of file diff --git a/src/resources/common/MathUtilities.java b/src/resources/common/MathUtilities.java new file mode 100644 index 00000000..8decf30b --- /dev/null +++ b/src/resources/common/MathUtilities.java @@ -0,0 +1,71 @@ +/******************************************************************************* + * Copyright (c) 2013 + * + * This File is part of NGECore2. + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see . + * + * Using NGEngine to work with NGECore2 is making a combined work based on NGEngine. + * Therefore all terms and conditions of the GNU Lesser General Public License cover the combination. + ******************************************************************************/ +package resources.common; + +import java.math.BigDecimal; + +import engine.resources.scene.*; + +public class MathUtilities { + + public static Quaternion rotateQuaternion(Quaternion quaternion, float radians, Point3D axis) { + + float sin = (float) Math.sin(radians / 2); + + Quaternion rotateQ = new Quaternion((float) Math.cos(radians / 2), axis.x * sin, axis.y * sin, axis.z * sin); + + return multiplyQuaternions(rotateQ, quaternion); + + } + + public static Quaternion multiplyQuaternions(Quaternion q1, Quaternion q2) { + + return new Quaternion(q1.w * q2.w - q1.x * q2.x - q1.y * q2.y - q1.z * q2.z, + q1.w * q2.x + q1.x * q2.w + q1.y * q2.z - q1.z * q2.y, + q1.w * q2.y + q1.y * q2.w + q1.z * q2.x - q1.x * q2.z, + q1.w * q2.z + q1.z * q2.w + q1.x * q2.y - q1.y * q2.x); + + } + + /** + * Converts seconds to a whole hour. + * @author Waverunner + * @param seconds + * @return hour(s) + */ + public static int secondsToWholeHours(int seconds) { + BigDecimal dec = new BigDecimal(seconds); + + return dec.divide(new BigDecimal(3600), BigDecimal.ROUND_FLOOR).intValue(); + } + + /** + * Converts seconds to minutes of the hour. + * @author Waverunner + * @param seconds + * @return hour(s) + */ + public static int secondsToHourMinutes(int seconds) { + BigDecimal dec = new BigDecimal(seconds); + return dec.remainder(new BigDecimal(3600)).divide(new BigDecimal(60), BigDecimal.ROUND_FLOOR).intValue(); + } +} diff --git a/src/resources/common/ObjControllerOpcodes.java b/src/resources/common/ObjControllerOpcodes.java index 21b58e82..c38a6071 100644 --- a/src/resources/common/ObjControllerOpcodes.java +++ b/src/resources/common/ObjControllerOpcodes.java @@ -26,8 +26,35 @@ public class ObjControllerOpcodes { public static final int DATA_TRANSFORM = 0x71000000; public static final int DATA_TRANSFORM_WITH_PARENT = 0xF1000000; public static final int COMMAND_QUEUE_ENQUEUE = 0x16010000; - public static final int TARGET_UPDATE = 0x26010000; + public static final int COMMAND_QUEUE_REMOVE = 0x17010000; + public static final int lookAtTarget = 0x26010000; + public static final int intendedTarget = 0xC5040000; public static final int OBJECT_MENU_REQUEST = 0x46010000; public static final int SECURE_TRADE = 0x15010000; + public static final int BUFF_BUILDER_CHANGE = 0x5A020000; + public static final int BUFF_BUILDER_END = 0x5B020000; + public static final int MISSION_LIST_REQUEST = 0xF5000000; + public static final int MISSION_GENERIC_REQUEST = 0xF9000000; + public static final int MISSION_ABORT = 0x42010000; + public static final int ChangeRoleIconChoice = 0x4D040000; + public static final int IMAGE_DESIGN_CHANGE = 0x38020000; + public static final int IMAGE_DESIGN_END = 0x39020000; + public static final int NPC_CONVERSATION_MESSAGE = 0xDF000000; + public static final int START_NPC_CONVERSATION = 0xDD000000; + public static final int STOP_NPC_CONVERSATION = 0xDE000000; + public static final int NPC_CONVERSATION_OPTIONS = 0xE0000000; + public static final int SET_PROFESSION_TEMPLATE = 0x5C040000; + public static final int RESOURCE_EMPTY_HOPPER = 0xED000000; + public static final int DRAFT_SCHEMATICS = 0x0102; + public static final int DRAFT_SLOTS = 0x0103; + public static final int CRAFT_EXPERIMENT = 0x0106; + public static final int CRAFT_FILLSLOT = 0x7010000; + public static final int CRAFT_EMPTYSLOT = 0x8010000; + public static final int CRAFT_ACKNOWLEDGE = 0x010C; + public static final int CRAFT_CUSTOMIZATION = 0x5a010000; + public static final int NEXT_CRAFTING_STAGE_RESULT = 0x01BE; + public static final int DRAFT_SLOTS_QUERY_RESPONSE = 0x01BF; + public static final int RESOURCE_WEIGHTS = 0x0207; + } diff --git a/src/resources/common/Opcodes.java b/src/resources/common/Opcodes.java index 405cd992..8a8cc6d8 100644 --- a/src/resources/common/Opcodes.java +++ b/src/resources/common/Opcodes.java @@ -25,12 +25,21 @@ import engine.resources.common.CRC; public class Opcodes { + public static int AuctionQueryHeadersMessage = CRC.StringtoCRC("AuctionQueryHeadersMessage"); + public static int CreateImmediateAuctionMessage = CRC.StringtoCRC("CreateImmediateAuctionMessage"); + public static int ChatLeaveRoom = 0x493E3FFA; + public static int ChatEnterRoomById = CRC.StringtoCRC("ChatEnterRoomById"); + public static int ChatSendToRoom = CRC.StringtoCRC("ChatSendToRoom"); public static int ChatDeletePersistentMessage = 0x8F251641; public static int ChatInstantMessageToCharacter = 0x84BB21F7; public static int ChatPersistentMessageToServer = 0x25A29FA6; public static int ChatRequestPersistentMessage = 0x07E3559F; + public static int ChatRequestRoomList = 0x4C3D2CFA; public static int ChatSystemMessage = CRC.StringtoCRC("ChatSystemMessage"); public static int ClientOpenContainerMessage = 0x2D2D6EE1; + public static int CommoditiesItemTypeListRequest = 0x48F493C5; + public static int CommoditiesResourceTypeListRequest = 0xCB1AE82D; + public static int NewbieTutorialResponse = 0xCA88FBAD; public static int CmdSceneReady = 0x43FD1C22; public static int ConnectPlayerMessage = 0x2E365218; public static int ClientCreateCharacter = 0xB97F3074; @@ -39,14 +48,16 @@ public class Opcodes { public static int ClientVerifyAndLockNameRequest = 0x9eb04b9f; public static int DeleteCharacterMessage = 0xE87AD031; public static int GetMapLocationsMessage = 0x1A7AB839; + public static int IsVendorOwnerMessage = CRC.StringtoCRC("IsVendorOwnerMessage"); public static int LagRequest = 0x31805EE0; public static int LoginClientId = 0x41131F96; public static int ObjControllerMessage = 0x80CE5E46; - public static int ObjectSelectMenuMessage = 0x7CA18726; + public static int ObjectMenuSelectMessage = 0x7CA18726; public static int RequestGalaxyLoopTimes = 0x7D842D68; public static int SelectCharacter = 0xB5098D76; public static int SuiEventNotification = 0x092D3564; - public static int DeltasMessage = 0x12862153; + public static int BaselinesMessage = CRC.StringtoCRC("BaselinesMessage"); + public static int DeltasMessage = CRC.StringtoCRC("DeltasMessage"); public static int ChatAddFriend = 0x6FE7BD90; public static int GcwRegionsReq = CRC.StringtoCRC("GcwRegionsReq"); public static int GcwRegionsRsp = CRC.StringtoCRC("GcwRegionsRsp"); @@ -55,5 +66,30 @@ public class Opcodes { public static int ClientMfdStatusUpdateMessage = CRC.StringtoCRC("ClientMdfStatusUpdateMessage"); public static int PlayMusicMessage = CRC.StringtoCRC("PlayMusicMessage"); public static int PlanetTravelPointListRequest = 0x96405D4D; - + public static int FactionRequestMessage = CRC.StringtoCRC("FactionRequestMessage"); + public static int FactionResponseMessage = CRC.StringtoCRC("FactionResponseMessage"); + public static int SetWaypointColor = CRC.StringtoCRC("SetWaypointColor"); + public static int GuildRequestMessage = CRC.StringtoCRC("GuildRequestMessage"); + public static int PlayerMoneyRequest = CRC.StringtoCRC("PlayerMoneyRequest"); + public static int LagReport = CRC.StringtoCRC("LagReport"); + public static int GetSpecificMapLocationsMessage = CRC.StringtoCRC("GetSpecificMapLocationsMessage"); + public static int SetCombatSpamFilter = CRC.StringtoCRC("SetCombatSpamFilter"); + public static int SetCombatSpamRangeFilter = CRC.StringtoCRC("SetCombatSpamRangeFilter"); + public static int SetLfgInterests = CRC.StringtoCRC("SetLfgInterests"); + public static int SetFurnitureRoationDegree = CRC.StringtoCRC("SetFurnitureRotationDegree"); + public static int SetJediSlotInfo = CRC.StringtoCRC("SetJediSlotInfo"); + public static int CollectionServerFirstListRequest = CRC.StringtoCRC("CollectionServerFirstListRequest"); + public static int ShowHelmet = CRC.StringtoCRC("ShowHelmet"); + public static int ShowBackpack = CRC.StringtoCRC("ShowBackpack"); + public static int CreateAuctionMessage = CRC.StringtoCRC("CreateAuctionMessage"); + public static int ChatOnEnteredRoom = CRC.StringtoCRC("ChatOnEnteredRoom"); + public static int ChatCreateRoom = CRC.StringtoCRC("ChatCreateRoom"); + public static int ChatQueryRoom = 0x9CF2B192; + public static int Unknown = 0x173B91C2; // packet sent to server on every character load-in + public static int GetAuctionDetails = CRC.StringtoCRC("GetAuctionDetails"); + public static int CancelLiveAuctionMessage = CRC.StringtoCRC("CancelLiveAuctionMessage"); + public static int BidAuctionMessage = CRC.StringtoCRC("BidAuctionMessage"); + public static int RetrieveAuctionItemMessage = CRC.StringtoCRC("RetrieveAuctionItemMessage"); + + } diff --git a/src/resources/common/OutOfBand.java b/src/resources/common/OutOfBand.java new file mode 100644 index 00000000..ed4909f8 --- /dev/null +++ b/src/resources/common/OutOfBand.java @@ -0,0 +1,133 @@ +/******************************************************************************* + * Copyright (c) 2013 + * + * This File is part of NGECore2. + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see . + * + * Using NGEngine to work with NGECore2 is making a combined work based on NGEngine. + * Therefore all terms and conditions of the GNU Lesser General Public License cover the combination. + ******************************************************************************/ +package resources.common; + +import java.nio.ByteOrder; +import java.util.Vector; + +import org.apache.mina.core.buffer.IoBuffer; + +import engine.resources.common.StringUtilities; +import engine.resources.objects.Delta; + +public class OutOfBand { + + private Vector prosePackages = new Vector(); + private int headerBytes = 0; + + public OutOfBand(Vector prosePackages) { + setProsePackages(prosePackages); + } + + public OutOfBand(ProsePackage prosePackage) { + addProsePackage(prosePackage); + } + + public OutOfBand() { + + } + + public static OutOfBand ProsePackage(Object ... objects) { + return new OutOfBand(new ProsePackage(objects)); + } + + public void addProsePackage(ProsePackage prosePackage) { + prosePackages.add(prosePackage); + } + + public IoBuffer serialize() { + IoBuffer buffer = IoBuffer.allocate(50).order(ByteOrder.LITTLE_ENDIAN); + buffer.setAutoExpand(true); + + // The short that was here is only in conversation OutOfBands. + // Count doesn't seem to be count. It seems to be indicating if there's an extra byte. + + for (ProsePackage prosePackage : prosePackages) { + buffer.put((byte) 1); + buffer.putInt(-1); + buffer.put(prosePackage.getStf().getBytes()); + + buffer.putLong(prosePackage.getTuObjectId()); + buffer.put(prosePackage.getTuStf().getBytes()); + buffer.put(StringUtilities.getUnicodeString(prosePackage.getTuCustomString())); + + buffer.putLong(prosePackage.getTtObjectId()); + buffer.put(prosePackage.getTtStf().getBytes()); + buffer.put(StringUtilities.getUnicodeString(prosePackage.getTtCustomString())); + + buffer.putLong(prosePackage.getToObjectId()); + buffer.put(prosePackage.getToStf().getBytes()); + buffer.put(StringUtilities.getUnicodeString(prosePackage.getToCustomString())); + + buffer.putInt(prosePackage.getDiInteger()); + buffer.putFloat(prosePackage.getDfFloat()); + + buffer.put((byte) 0); + } + + int size = buffer.position(); + + if (size > 0) { + if ((size % 2) == 1) { + size++; + buffer.put((byte) 0); + buffer = Delta.createBuffer(size + 2).putShort((short) 1).put(buffer.flip().array(), 0, size); + } else { + buffer = Delta.createBuffer(size + 2).putShort((short) 0).put(buffer.flip().array(), 0, size); + } + + size += 2; + } else { + return Delta.createBuffer(4).putInt(size); + } + + if (headerBytes > 0) { + IoBuffer result = Delta.createBuffer(size + headerBytes); + + for (int i = 0; i < headerBytes; i++) { + result.put((byte) 0); + } + + buffer = result.put(buffer.flip().array(), 0, size); + size += headerBytes; + } + + return Delta.resizeBuffer(Delta.createBuffer(size + 4).putInt(size / 2).put(buffer.flip().array())); + } + + /* + * No idea what the extra short in conversation OutOfBands is. + * It's not in any of the other packets that use OutOfBand. + */ + public void setHeaderBytes(int headerBytes) { + this.headerBytes = headerBytes; + } + + public Vector getProsePackages() { + return prosePackages; + } + + public void setProsePackages(Vector prosePackages) { + this.prosePackages = prosePackages; + } + +} diff --git a/src/resources/common/Performance.java b/src/resources/common/Performance.java new file mode 100644 index 00000000..4179f4be --- /dev/null +++ b/src/resources/common/Performance.java @@ -0,0 +1,275 @@ +/******************************************************************************* + * Copyright (c) 2013 + * + * This File is part of NGECore2. + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see . + * + * Using NGEngine to work with NGECore2 is making a combined work based on NGEngine. + * Therefore all terms and conditions of the GNU Lesser General Public License cover the combination. + ******************************************************************************/ +package resources.common; + +public class Performance { + + + private String performanceName; + private int instrumentAudioId; + private String requiredSong; + private String requiredInstrument; + private String requiredDance; + private int danceVisualId; + private int actionPointsPerLoop; + private float loopDuration; + private int type; + private int baseXp; + private int flourishXpMod; + private int healMindWound; + private int healShockWound; + private String requiredSkillMod; + private int requiredSkillModValue; + private String mainloop; + private String flourish1; + private String flourish2; + private String flourish3; + private String flourish4; + private String flourish5; + private String flourish6; + private String flourish7; + private String flourish8; + private String intro; + private String outro; + private int lineNumber; + + public Performance() { + + } + + public int getBaseXp() { + return baseXp; + } + + public void setBaseXp(int baseXp) { + this.baseXp = baseXp; + } + + public String getPerformanceName() { + return performanceName; + } + + public void setPerformanceName(String performanceName) { + this.performanceName = performanceName; + } + + public int getInstrumentAudioId() { + return instrumentAudioId; + } + + public void setInstrumentAudioId(int instrumentAudioId) { + this.instrumentAudioId = instrumentAudioId; + } + + public int getRequiredSkillModValue() { + return requiredSkillModValue; + } + + public void setRequiredSkillModValue(int requiredSkillModValue) { + this.requiredSkillModValue = requiredSkillModValue; + } + + public String getRequiredSong() { + return requiredSong; + } + + public void setRequiredSong(String requiredSong) { + this.requiredSong = requiredSong; + } + + public String getRequiredInstrument() { + return requiredInstrument; + } + + public void setRequiredInstrument(String requiredInstrument) { + this.requiredInstrument = requiredInstrument; + } + + public String getRequiredDance() { + return requiredDance; + } + + public void setRequiredDance(String requiredDance) { + this.requiredDance = requiredDance; + } + + public int getDanceVisualId() { + return danceVisualId; + } + + public void setDanceVisualId(int danceVisualId) { + this.danceVisualId = danceVisualId; + } + + public int getActionPointsPerLoop() { + return actionPointsPerLoop; + } + + public void setActionPointsPerLoop(int actionPointsPerLoop) { + this.actionPointsPerLoop = actionPointsPerLoop; + } + + public float getLoopDuration() { + return loopDuration; + } + + public void setLoopDuration(float loopDuration) { + this.loopDuration = loopDuration; + } + + public int getType() { + return type; + } + + public void setType(int type) { + this.type = type; + } + + public int getFlourishXpMod() { + return flourishXpMod; + } + + public void setFlourishXpMod(int flourishXpMod) { + this.flourishXpMod = flourishXpMod; + } + + public int getHealMindWound() { + return healMindWound; + } + + public void setHealMindWound(int healMindWound) { + this.healMindWound = healMindWound; + } + + public int getHealShockWound() { + return healShockWound; + } + + public int getLineNumber() { + return lineNumber; + } + + public void setHealShockWound(int healShockWound) { + this.healShockWound = healShockWound; + } + + public String getRequiredSkillMod() { + return requiredSkillMod; + } + + public void setRequiredSkillMod(String requiredSkillMod) { + this.requiredSkillMod = requiredSkillMod; + } + + public String getMainloop() { + return mainloop; + } + + public void setMainloop(String mainloop) { + this.mainloop = mainloop; + } + + public String getFlourish1() { + return flourish1; + } + + public void setFlourish1(String flourish1) { + this.flourish1 = flourish1; + } + + public String getFlourish2() { + return flourish2; + } + + public void setFlourish2(String flourish2) { + this.flourish2 = flourish2; + } + + public String getFlourish3() { + return flourish3; + } + + public void setFlourish3(String flourish3) { + this.flourish3 = flourish3; + } + + public String getFlourish4() { + return flourish4; + } + + public void setFlourish4(String flourish4) { + this.flourish4 = flourish4; + } + + public String getFlourish5() { + return flourish5; + } + + public void setFlourish5(String flourish5) { + this.flourish5 = flourish5; + } + + public String getFlourish6() { + return flourish6; + } + + public void setFlourish6(String flourish6) { + this.flourish6 = flourish6; + } + + public String getFlourish7() { + return flourish7; + } + + public void setFlourish7(String flourish7) { + this.flourish7 = flourish7; + } + + public String getFlourish8() { + return flourish8; + } + + public void setFlourish8(String flourish8) { + this.flourish8 = flourish8; + } + + public String getIntro() { + return intro; + } + + public void setIntro(String intro) { + this.intro = intro; + } + + public String getOutro() { + return outro; + } + + public void setOutro(String outro) { + this.outro = outro; + } + + public void setLineNumber(int lineNumber) { + this.lineNumber = lineNumber; + } + +} diff --git a/src/resources/common/PerformanceEffect.java b/src/resources/common/PerformanceEffect.java new file mode 100644 index 00000000..09afddd0 --- /dev/null +++ b/src/resources/common/PerformanceEffect.java @@ -0,0 +1,108 @@ +/******************************************************************************* + * Copyright (c) 2013 + * + * This File is part of NGECore2. + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see . + * + * Using NGEngine to work with NGECore2 is making a combined work based on NGEngine. + * Therefore all terms and conditions of the GNU Lesser General Public License cover the combination. + ******************************************************************************/ +package resources.common; + +public class PerformanceEffect { + + private int effectActionCost; + private float effectDuration; + private String name; + private String performanceType; + private boolean requiredPerforming; + private int requiredSkillModValue; + private int targetType; + private boolean music; + private boolean dance; + + public PerformanceEffect() { } + + public int getEffectActionCost() { + return effectActionCost; + } + public float getEffectDuration() { + return effectDuration; + } + public String getName() { + return name; + } + public int getRequiredSkillModValue() { + return requiredSkillModValue; + } + public int getTargetType() { + return targetType; + } + public String getPerformanceType() { + return performanceType; + } + public boolean isRequiredPerforming() { + return requiredPerforming; + } + public void setEffectActionCost(int effectActionCost) { + this.effectActionCost = effectActionCost; + } + public void setEffectDuration(float effectDuration) { + this.effectDuration = effectDuration; + } + public void setName(String name) { + this.name = name; + } + public void setPerformanceType(String performanceType) { + this.performanceType = performanceType; + + if (performanceType.contains(",")) { + String[] array = performanceType.split(","); + if(array.length < 2) + return; + + this.dance = true; + this.music = true; + } + else if (performanceType.equals("music")) { this.music = true; } + else if (performanceType.equals("dance")) { this.dance = true; } + } + public void setRequiredPerforming(boolean requiredPerforming) { + this.requiredPerforming = requiredPerforming; + } + public void setRequiredSkillModValue(int requiredSkillModValue) { + this.requiredSkillModValue = requiredSkillModValue; + } + public void setTargetType(int targetType) { + this.targetType = targetType; + } + + public boolean isMusic() { + return music; + } + + public void setMusic(boolean music) { + this.music = music; + } + + public boolean isDance() { + return dance; + } + + public void setDance(boolean dance) { + this.dance = dance; + } + +} diff --git a/src/resources/common/ProsePackage.java b/src/resources/common/ProsePackage.java new file mode 100644 index 00000000..bdb10e5f --- /dev/null +++ b/src/resources/common/ProsePackage.java @@ -0,0 +1,224 @@ +/******************************************************************************* + * Copyright (c) 2013 + * + * This File is part of NGECore2. + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see . + * + * Using NGEngine to work with NGECore2 is making a combined work based on NGEngine. + * Therefore all terms and conditions of the GNU Lesser General Public License cover the combination. + ******************************************************************************/ +package resources.common; + +import java.io.Serializable; + +import engine.resources.common.Stf; + +public class ProsePackage implements Serializable { + + /* + * TU = Text User + * TT = Text Target + * TO = Text Object + * DI = Decimal Integer + * DF = Decimal Float + */ + + private static final long serialVersionUID = 1L; + + private Stf stf = new Stf(); + + private long tuObjectId = 0; + private Stf tuStf = new Stf(); + private String tuCustomString = ""; + + private long ttObjectId = 0; + private Stf ttStf = new Stf(); + private String ttCustomString = ""; + + private long toObjectId = 0; + private Stf toStf = new Stf(); + private String toCustomString = ""; + + private int diInteger = 0; + private float dfFloat = 0; + + /* + * Any parameters can be entered. + * + * Any integers set diInteger + * Any floats set dfFloat + * Any "@stfFile:label" sets the default stf + * "TU" followed by objectId, "@stfFile:label" or customString + * "TT" followed by objectId, "@stfFile:label" or customString + * "TO" followed by objectId, "@stfFile:label" or customString + */ + public ProsePackage(Object ... objects) { + for (Object object: objects) { + if (object instanceof Object[]) { + objects = (Object[]) object; + break; + } + } + + for (int i = 0; i < objects.length; i++) { + Object object = objects[i]; + + if (object instanceof String) { + String string = (String) object; + + if ((i + 1) < objects.length) { + long objectId = 0; + Stf stf = null; + String customString = null; + + if (objects[i + 1] instanceof Long) { + objectId = (Long) objects[i + 1]; + } else if (objects[i + 1] instanceof String) { + String str = (String) objects[i + 1]; + + if (str.startsWith("@") && str.contains(":") && !str.contains(" ")) { + stf = new Stf(str); + } else { + customString = str; + } + } + + switch (string.toUpperCase()) { + case "TU": + tuObjectId = (objectId == 0) ? tuObjectId : objectId; + tuStf = (stf == null) ? tuStf : stf; + tuCustomString = (customString == null) ? tuCustomString : customString; + continue; + case "TT": + ttObjectId = (objectId == 0) ? ttObjectId : objectId; + ttStf = (stf == null) ? ttStf : stf; + ttCustomString = (customString == null) ? ttCustomString : customString; + continue; + case "TO": + toObjectId = (objectId == 0) ? toObjectId : objectId; + toStf = (stf == null) ? toStf : stf; + toCustomString = (customString == null) ? toCustomString : customString; + continue; + default: + // + } + } + + stf.setString((String) object); + } else if (object instanceof Integer) { + diInteger = (Integer) object; + } else if (object instanceof Float) { + dfFloat = (Float) object; + } + } + } + + public Stf getStf() { + return stf; + } + + public void setStf(Stf stf) { + this.stf = stf; + } + + public long getTuObjectId() { + return tuObjectId; + } + + public void setTuObjectId(long tuObjectId) { + this.tuObjectId = tuObjectId; + } + + public Stf getTuStf() { + return tuStf; + } + + public void setTuStf(Stf tuStf) { + this.tuStf = tuStf; + } + + public String getTuCustomString() { + return tuCustomString; + } + + public void setTuCustomString(String tuCustomString) { + this.tuCustomString = tuCustomString; + } + + public long getTtObjectId() { + return ttObjectId; + } + + public void setTtObjectId(long ttObjectId) { + this.ttObjectId = ttObjectId; + } + + public Stf getTtStf() { + return ttStf; + } + + public void setTtStf(Stf ttStf) { + this.ttStf = ttStf; + } + + public String getTtCustomString() { + return ttCustomString; + } + + public void setTtCustomString(String ttCustomString) { + this.ttCustomString = ttCustomString; + } + + public long getToObjectId() { + return toObjectId; + } + + public void setToObjectId(long toObjectId) { + this.toObjectId = toObjectId; + } + + public Stf getToStf() { + return toStf; + } + + public void setToStf(Stf toStf) { + this.toStf = toStf; + } + + public String getToCustomString() { + return toCustomString; + } + + public void setToCustomString(String toCustomString) { + this.toCustomString = toCustomString; + } + + public int getDiInteger() { + return diInteger; + } + + public void setDiInteger(int diInteger) { + this.diInteger = diInteger; + } + + public float getDfFloat() { + return dfFloat; + } + + public void setDfFloat(float dfFloat) { + this.dfFloat = dfFloat; + } + +} diff --git a/src/resources/common/RGB.java b/src/resources/common/RGB.java deleted file mode 100644 index d5d62dde..00000000 --- a/src/resources/common/RGB.java +++ /dev/null @@ -1,37 +0,0 @@ -package resources.common; - -import resources.objects.ListObject; - -public class RGB extends ListObject { - - private byte red, green, blue; - - public RGB(byte red, byte green, byte blue) { - this.red = red; - this.green = green; - this.blue = blue; - } - - public RGB(int red, int green, int blue) { - this.red = (byte) red; - this.green = (byte) green; - this.blue = (byte) blue; - } - - public byte getRed() { - return red; - } - - public byte getGreen() { - return green; - } - - public byte getBlue() { - return blue; - } - - public byte[] getBytes() { - return new byte[] { red, green, blue }; - } - -} diff --git a/src/resources/common/SpawnPoint.java b/src/resources/common/SpawnPoint.java index 2068dbb4..f0fac9af 100644 --- a/src/resources/common/SpawnPoint.java +++ b/src/resources/common/SpawnPoint.java @@ -21,6 +21,10 @@ ******************************************************************************/ package resources.common; +import java.util.Random; + +import main.NGECore; + import com.sleepycat.persist.model.Persistent; import engine.resources.scene.Point3D; @@ -79,5 +83,30 @@ public class SpawnPoint { public void setCellNumber(int cellNumber) { this.cellNumber = cellNumber; } + + public Point3D getRandomPosition(float minDistance, float maxDistance) { + + Random random = new Random(); + float distance = random.nextInt((int) (maxDistance - minDistance) + 1) + minDistance; + float angle = (float) (random.nextInt(360) * (Math.PI / 180)); + float x = (float) (position.x + distance * Math.cos(angle)); + float z = (float) (position.z + distance * Math.sin(angle)); + + return new Point3D(x, 0, z); + + } + + public static Point3D getRandomPosition(Point3D position, float minDistance, float maxDistance, int planetId) { + + Random random = new Random(); + float distance = random.nextInt((int) (maxDistance - minDistance) + 1) + minDistance; + float angle = (float) (random.nextInt(360) * (Math.PI / 180)); + float x = (float) (position.x + distance * Math.cos(angle)); + float z = (float) (position.z + distance * Math.sin(angle)); + + return new Point3D(x, NGECore.getInstance().terrainService.getHeight(planetId, x, z), z); + + } + } diff --git a/src/resources/common/StringUtilities.java b/src/resources/common/StringUtilities.java deleted file mode 100644 index c553f47d..00000000 --- a/src/resources/common/StringUtilities.java +++ /dev/null @@ -1,107 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2013 - * - * This File is part of NGECore2. - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with this program. If not, see . - * - * Using NGEngine to work with NGECore2 is making a combined work based on NGEngine. - * Therefore all terms and conditions of the GNU Lesser General Public License cover the combination. - ******************************************************************************/ -package resources.common; - -import java.io.UnsupportedEncodingException; -import java.nio.ByteBuffer; -import java.nio.ByteOrder; - -public class StringUtilities { - - final protected static char[] hexArray = {'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'}; - - public static String getAsciiString(ByteBuffer buffer) { - return getString(buffer, "US-ASCII"); - } - - public static String getUnicodeString(ByteBuffer buffer) { - return getString(buffer, "UTF-16LE"); - } - - public static byte[] getAsciiString(String string) { - return getString(string, "US-ASCII"); - } - - public static byte[] getUnicodeString(String string) { - return getString(string, "UTF-16LE"); - } - - private static String getString(ByteBuffer buffer, String charFormat) { - String result; - int length; - - if (charFormat == "UTF-16LE") { - length = buffer.order(ByteOrder.LITTLE_ENDIAN).getInt(); - } else { - length = buffer.order(ByteOrder.LITTLE_ENDIAN).getShort(); - } - - int bufferPosition = buffer.position(); - - try { - result = new String(buffer.array(), bufferPosition, length, charFormat); - } catch (UnsupportedEncodingException e) { - e.printStackTrace(); - return ""; - } - - buffer.position(bufferPosition + length); - - return result; - } - - private static byte[] getString(String string, String charFormat) { - ByteBuffer result; - int length = 2 + string.length(); - - if (charFormat == "UTF-16LE") { - result = ByteBuffer.allocate(length * 2).order(ByteOrder.LITTLE_ENDIAN); - result.putInt(string.length()); - } else { - result = ByteBuffer.allocate(length).order(ByteOrder.LITTLE_ENDIAN); - result.putShort((short)string.length()); - } - - try { - result.put(string.getBytes(charFormat)); - } catch (UnsupportedEncodingException e) { - e.printStackTrace(); - return new byte[] { }; - } - - return result.array(); - } - - public static String bytesToHex(byte[] bytes) { - char[] hexChars = new char[bytes.length * 2]; - int v; - - for ( int j = 0; j < bytes.length; j++ ) { - v = bytes[j] & 0xFF; - hexChars[j * 2] = hexArray[v >>> 4]; - hexChars[j * 2 + 1] = hexArray[v & 0x0F]; - } - - return new String(hexChars); - } - -} diff --git a/src/resources/common/ThreadMonitor.java b/src/resources/common/ThreadMonitor.java index 43adcb64..bf5c2cb8 100644 --- a/src/resources/common/ThreadMonitor.java +++ b/src/resources/common/ThreadMonitor.java @@ -21,25 +21,18 @@ ******************************************************************************/ package resources.common; -import static java.lang.management.ManagementFactory.THREAD_MXBEAN_NAME; import static java.lang.management.ManagementFactory.getThreadMXBean; -import static java.lang.management.ManagementFactory.newPlatformMXBeanProxy; import java.io.IOException; import java.lang.management.LockInfo; import java.lang.management.MonitorInfo; import java.lang.management.ThreadInfo; import java.lang.management.ThreadMXBean; -import java.util.concurrent.BrokenBarrierException; -import java.util.concurrent.CyclicBarrier; -import java.util.concurrent.locks.Lock; -import java.util.concurrent.locks.ReentrantLock; import javax.management.InstanceNotFoundException; import javax.management.IntrospectionException; import javax.management.MBeanOperationInfo; import javax.management.MBeanServerConnection; -import javax.management.MalformedObjectNameException; import javax.management.ObjectName; import javax.management.ReflectionException; @@ -141,7 +134,8 @@ public class ThreadMonitor { } } - private void printMonitorInfo(ThreadInfo ti, MonitorInfo[] monitors) { + @SuppressWarnings("unused") + private void printMonitorInfo(ThreadInfo ti, MonitorInfo[] monitors) { System.out.println(INDENT + "Locked monitors: count = " + monitors.length); for (MonitorInfo mi : monitors) { System.out.println(INDENT + " - " + mi + " locked at "); @@ -193,7 +187,8 @@ public class ThreadMonitor { return true; } - private void parseMBeanInfo() throws IOException { + @SuppressWarnings("unused") + private void parseMBeanInfo() throws IOException { try { MBeanOperationInfo[] mopis = server.getMBeanInfo(objname).getOperations(); diff --git a/src/resources/common/collidables/AbstractCollidable.java b/src/resources/common/collidables/AbstractCollidable.java new file mode 100644 index 00000000..b7f9a157 --- /dev/null +++ b/src/resources/common/collidables/AbstractCollidable.java @@ -0,0 +1,112 @@ +/******************************************************************************* + * Copyright (c) 2013 + * + * This File is part of NGECore2. + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see . + * + * Using NGEngine to work with NGECore2 is making a combined work based on NGEngine. + * Therefore all terms and conditions of the GNU Lesser General Public License cover the combination. + ******************************************************************************/ +package resources.common.collidables; + +import java.util.Vector; + +import main.NGECore; +import net.engio.mbassy.bus.SyncMessageBus; + +import org.python.core.Py; +import org.python.core.PyObject; + +import engine.resources.common.Event; +import engine.resources.objects.SWGObject; +import engine.resources.scene.Planet; +import engine.resources.scene.Point3D; + +public abstract class AbstractCollidable { + + private PyObject callback; + public Vector collidedObjects = new Vector(); + private Planet planet; + private SyncMessageBus eventBus = new SyncMessageBus(NGECore.getInstance().getEventBusConfig()); + + public abstract boolean doesCollide(SWGObject obj); + public abstract boolean doesCollide(Point3D position); + + public PyObject getCallback() { + return callback; + } + + public void setCallback(PyObject callback) { + this.callback = callback; + } + + public void addCollidedObject(SWGObject obj) { + collidedObjects.add(obj); + EnterEvent event = new EnterEvent(); + event.object = obj; + eventBus.publish(event); + } + + public void removeCollidedObject(SWGObject obj) { + if(!collidedObjects.contains(obj)) + return; + collidedObjects.remove(obj); + ExitEvent event = new ExitEvent(); + event.object = obj; + eventBus.publish(event); + } + + public boolean isInCollisionList(SWGObject obj) { + return collidedObjects.contains(obj); + } + + public void doCollisionCheck(SWGObject obj) { + // check if already collided + if(isInCollisionList(obj) && doesCollide(obj)) { + return; + } else if(isInCollisionList(obj) && !doesCollide(obj)) { + removeCollidedObject(obj); + } else if(doesCollide(obj) && !isInCollisionList(obj)) { + addCollidedObject(obj); + if(getCallback() != null) + getCallback().__call__(Py.java2py(NGECore.getInstance()), Py.java2py(obj), Py.java2py(this)); + } + } + + public Planet getPlanet() { + return planet; + } + + public void setPlanet(Planet planet) { + this.planet = planet; + } + + public SyncMessageBus getEventBus() { + return eventBus; + } + + public class EnterEvent implements Event { + public SWGObject object; + } + + public class ExitEvent implements Event { + public SWGObject object; + } + + public abstract Point3D getRandomPosition(Point3D origin, float minDistance, float maxDistance); + public abstract Point3D getRandomPosition(); + + +} diff --git a/src/resources/objects/IListObject.java b/src/resources/common/collidables/CollidableBox.java similarity index 88% rename from src/resources/objects/IListObject.java rename to src/resources/common/collidables/CollidableBox.java index 12b36650..4fd64080 100644 --- a/src/resources/objects/IListObject.java +++ b/src/resources/common/collidables/CollidableBox.java @@ -19,13 +19,10 @@ * Using NGEngine to work with NGECore2 is making a combined work based on NGEngine. * Therefore all terms and conditions of the GNU Lesser General Public License cover the combination. ******************************************************************************/ -package resources.objects; +package resources.common.collidables; -import com.sleepycat.persist.model.Persistent; +public class CollidableBox { + + -@Persistent -public interface IListObject { - - public byte[] getBytes(); - } diff --git a/src/resources/common/collidables/CollidableCircle.java b/src/resources/common/collidables/CollidableCircle.java new file mode 100644 index 00000000..fef3eacc --- /dev/null +++ b/src/resources/common/collidables/CollidableCircle.java @@ -0,0 +1,107 @@ +/******************************************************************************* + * Copyright (c) 2013 + * + * This File is part of NGECore2. + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see . + * + * Using NGEngine to work with NGECore2 is making a combined work based on NGEngine. + * Therefore all terms and conditions of the GNU Lesser General Public License cover the combination. + ******************************************************************************/ +package resources.common.collidables; + +import java.util.Random; + +import engine.resources.objects.SWGObject; +import engine.resources.scene.Planet; +import engine.resources.scene.Point3D; + +public class CollidableCircle extends AbstractCollidable { + + private Point3D center; + private float radius; + // for bh traps + private boolean useYAxis = false; + + public CollidableCircle(Point3D center, float radius, Planet planet) { + this.setCenter(center); + this.setRadius(radius); + this.setPlanet(planet); + } + + public Point3D getCenter() { + return center; + } + + public void setCenter(Point3D center) { + this.center = center; + } + + public float getRadius() { + return radius; + } + + public void setRadius(float radius) { + this.radius = radius; + } + + public boolean isUseYAxis() { + return useYAxis; + } + + public void setUseYAxis(boolean useYAxis) { + this.useYAxis = useYAxis; + } + + @Override + public boolean doesCollide(SWGObject obj) { + Point3D objectPos = obj.getWorldPosition(); + if(useYAxis) { + return center.getDistance(objectPos) <= radius && objectPos.y == center.y; + } else { + return center.getDistance(objectPos) <= radius; + } + } + + @Override + public boolean doesCollide(Point3D position) { + if(useYAxis) { + return center.getDistance(position) <= radius && position.y == center.y; + } else { + return center.getDistance(position) <= radius; + } + } + + @Override + public Point3D getRandomPosition(Point3D origin, float minDistance, float maxDistance) { + + Random random = new Random(); + float distance = random.nextInt((int) (maxDistance - minDistance) + 1) + minDistance; + float angle = (float) (random.nextInt(360) * (Math.PI / 180)); + + return new Point3D((float) (origin.x + distance * Math.cos(angle)), 0, (float) (origin.z + distance * Math.sin(angle))); + + } + + @Override + public Point3D getRandomPosition() { + + Random random = new Random(); + float distance = random.nextInt((int) radius); + float angle = (float) (random.nextInt(360) * (Math.PI / 180)); + + return new Point3D((float) (center.x + distance * Math.cos(angle)), 0, (float) (center.z + distance * Math.sin(angle))); + + } +} diff --git a/src/resources/craft/DraftSchematic.java b/src/resources/craft/DraftSchematic.java new file mode 100644 index 00000000..9f203e2f --- /dev/null +++ b/src/resources/craft/DraftSchematic.java @@ -0,0 +1,87 @@ +/******************************************************************************* + * Copyright (c) 2013 + * + * This File is part of NGECore2. + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see . + * + * Using NGEngine to work with NGECore2 is making a combined work based on NGEngine. + * Therefore all terms and conditions of the GNU Lesser General Public License cover the combination. + ******************************************************************************/ +package resources.craft; + +import java.io.Serializable; + +import org.apache.mina.core.buffer.IoBuffer; + +import engine.resources.objects.Delta; + +public class DraftSchematic extends Delta implements Serializable { + + private static final long serialVersionUID = 1L; + + private int serverSchematicCrc = 0; + private int schematicCrc = 0; + private int amount = 1; + + public DraftSchematic(int serverSchematicCrc, int schematicCrc, int amount) { + this.serverSchematicCrc = serverSchematicCrc; + this.schematicCrc = schematicCrc; + this.amount = amount; + } + + public DraftSchematic(int serverSchematicCrc, int schematicCrc) { + this.serverSchematicCrc = serverSchematicCrc; + this.schematicCrc = schematicCrc; + } + + public DraftSchematic() { + + } + + public int getServerSchematicCrc() { + synchronized(objectMutex) { + return serverSchematicCrc; + } + } + + public int getSchematicCrc() { + synchronized(objectMutex) { + return schematicCrc; + } + } + + public int getAmount() { + synchronized(objectMutex) { + return amount; + } + } + + public void setAmount(int amount) { + synchronized(objectMutex) { + this.amount = amount; + } + } + + public byte[] getBytes() { + synchronized(objectMutex) { + IoBuffer buffer = createBuffer(12); + buffer.putInt(serverSchematicCrc); + buffer.putInt(schematicCrc); + buffer.putInt(amount); + return buffer.array(); + } + } + +} diff --git a/src/resources/datatables/Citizenship.java b/src/resources/datatables/Citizenship.java new file mode 100644 index 00000000..ced0f364 --- /dev/null +++ b/src/resources/datatables/Citizenship.java @@ -0,0 +1,31 @@ +/******************************************************************************* + * Copyright (c) 2013 + * + * This File is part of NGECore2. + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see . + * + * Using NGEngine to work with NGECore2 is making a combined work based on NGEngine. + * Therefore all terms and conditions of the GNU Lesser General Public License cover the combination. + ******************************************************************************/ +package resources.datatables; + +public class Citizenship { + + public static final byte Homeless = 0; + public static final byte Citizen = 1; + public static final byte Militia = 2; + public static final byte Mayor = 3; + +} diff --git a/src/resources/datatables/Difficulty.java b/src/resources/datatables/Difficulty.java new file mode 100644 index 00000000..ddb2f458 --- /dev/null +++ b/src/resources/datatables/Difficulty.java @@ -0,0 +1,30 @@ +/******************************************************************************* + * Copyright (c) 2013 + * + * This File is part of NGECore2. + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see . + * + * Using NGEngine to work with NGECore2 is making a combined work based on NGEngine. + * Therefore all terms and conditions of the GNU Lesser General Public License cover the combination. + ******************************************************************************/ +package resources.datatables; + +public class Difficulty { + + public static byte NORMAL = 0; // Normal + public static byte ELITE = 1; // Elite + public static byte BOSS = 2; // Gold elite + +} diff --git a/src/resources/datatables/DisplayType.java b/src/resources/datatables/DisplayType.java new file mode 100644 index 00000000..437a0df4 --- /dev/null +++ b/src/resources/datatables/DisplayType.java @@ -0,0 +1,45 @@ +/******************************************************************************* + * Copyright (c) 2013 + * + * This File is part of NGECore2. + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see . + * + * Using NGEngine to work with NGECore2 is making a combined work based on NGEngine. + * Therefore all terms and conditions of the GNU Lesser General Public License cover the combination. + ******************************************************************************/ +package resources.datatables; + +public class DisplayType { + + // System + public static byte Broadcast = 0; // Level up. combatspam/skill_up + public static byte Screen = 1; // Screen? XP gain + public static byte Chat = 2; + //public static byte Overhead = 3; // Flytext? Seen on ent duration + //public static byte Combat = 4; // CombatSpam? + //public static byte Combat = 5; // Seen in combat flytext + //public static byte Combat = 11; // Seen when blocking + + // Flytext + //public static byte Broadcast = 0; // Level up. combatspam/skill_up + //public static byte Screen = 1; // Screen? XP gain + //public static byte Chat = 2; + //public static byte Overhead = 3; // Flytext? Seen on ent duration + //public static byte Combat = 4; // CombatSpam? + //public static byte Combat = 5; // Seen in combat flytext + //public static byte Combat = 11; // Seen when blocking + +} + diff --git a/src/resources/datatables/Elemental.java b/src/resources/datatables/Elemental.java new file mode 100644 index 00000000..007f04c0 --- /dev/null +++ b/src/resources/datatables/Elemental.java @@ -0,0 +1,91 @@ +/******************************************************************************* + * Copyright (c) 2013 + * + * This File is part of NGECore2. + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see . + * + * Using NGEngine to work with NGECore2 is making a combined work based on NGEngine. + * Therefore all terms and conditions of the GNU Lesser General Public License cover the combination. + ******************************************************************************/ +package resources.datatables; + +public enum Elemental { + + KINETIC(1), ENERGY(2), BLAST(4), STUN(8), HEAT(32), COLD(64), ACID(128), ELECTRICITY(256); + + private int element; + + private Elemental(int element) { + this.element = element; + } + + @Override + public String toString() { + switch(this) { + case KINETIC: + return "kinetic"; + case ENERGY: + return "energy"; + case BLAST: + return "blast"; + case STUN: + return "stun"; + case HEAT: + return "heat"; + case COLD: + return "cold"; + case ACID: + return "acid"; + case ELECTRICITY: + return "electricity"; + } + return null; + } + + public int getValue() { + return element; + } + + public static int getElementalNum(String element) { + switch(element) { + case "kinetic": + return 1; + case "energy": + return 2; + case "blast": + return 4; + case "stun": + return 8; + case "heat": + return 32; + case "cold": + return 64; + case "acid": + return 128; + case "electricity": + return 256; + } + return 0; + } + + public static String getElementalName(int elementalType) { + for (Elemental element : Elemental.values()) { + if (element.getValue() == elementalType) { + return element.toString(); + } + } + return null; + } +} \ No newline at end of file diff --git a/src/resources/common/FactionStatus.java b/src/resources/datatables/FactionStatus.java similarity index 88% rename from src/resources/common/FactionStatus.java rename to src/resources/datatables/FactionStatus.java index 95a24034..2cae4212 100644 --- a/src/resources/common/FactionStatus.java +++ b/src/resources/datatables/FactionStatus.java @@ -19,12 +19,12 @@ * Using NGEngine to work with NGECore2 is making a combined work based on NGEngine. * Therefore all terms and conditions of the GNU Lesser General Public License cover the combination. ******************************************************************************/ -package resources.common; +package resources.datatables; public class FactionStatus { - public static int OnLeave = 0; - public static int Combatant = 1; - public static int SpecialForces = 2; + public static final int OnLeave = 0; + public static final int Combatant = 1; + public static final int SpecialForces = 2; } diff --git a/src/resources/common/Factions.java b/src/resources/datatables/Factions.java similarity index 97% rename from src/resources/common/Factions.java rename to src/resources/datatables/Factions.java index f748524b..4c70d5e4 100644 --- a/src/resources/common/Factions.java +++ b/src/resources/datatables/Factions.java @@ -19,7 +19,7 @@ * Using NGEngine to work with NGECore2 is making a combined work based on NGEngine. * Therefore all terms and conditions of the GNU Lesser General Public License cover the combination. ******************************************************************************/ -package resources.common; +package resources.datatables; import engine.resources.common.CRC; diff --git a/src/resources/datatables/GcwType.java b/src/resources/datatables/GcwType.java new file mode 100644 index 00000000..30664208 --- /dev/null +++ b/src/resources/datatables/GcwType.java @@ -0,0 +1,31 @@ +/******************************************************************************* + * Copyright (c) 2013 + * + * This File is part of NGECore2. + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see . + * + * Using NGEngine to work with NGECore2 is making a combined work based on NGEngine. + * Therefore all terms and conditions of the GNU Lesser General Public License cover the combination. + ******************************************************************************/ +package resources.datatables; + +public class GcwType { + + public static final byte Generic = 0; + public static final byte Enemy = 1; + public static final byte Player = 2; + public static final byte Zone = 3; + +} diff --git a/src/resources/datatables/HitType.java b/src/resources/datatables/HitType.java new file mode 100644 index 00000000..a0736a2e --- /dev/null +++ b/src/resources/datatables/HitType.java @@ -0,0 +1,35 @@ +/******************************************************************************* + * Copyright (c) 2013 + * + * This File is part of NGECore2. + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see . + * + * Using NGEngine to work with NGECore2 is making a combined work based on NGEngine. + * Therefore all terms and conditions of the GNU Lesser General Public License cover the combination. + ******************************************************************************/ +package resources.datatables; + +public class HitType { + public static final byte MISS = 0; + public static final byte DODGE = 1; + public static final byte PARRY = 2; + public static final byte STRIKETHROUGH = 3; + public static final byte CRITICAL = 4; + public static final byte PUNISHING = 5; + public static final byte HIT = 6; + public static final byte BLOCK = 7; + public static final byte EVASION = 8; + public static final byte GLANCE = 9; +} diff --git a/src/resources/datatables/LightsaberColors.java b/src/resources/datatables/LightsaberColors.java new file mode 100644 index 00000000..e8adbba9 --- /dev/null +++ b/src/resources/datatables/LightsaberColors.java @@ -0,0 +1,84 @@ +/******************************************************************************* + * Copyright (c) 2013 + * + * This File is part of NGECore2. + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see . + * + * Using NGEngine to work with NGECore2 is making a combined work based on NGEngine. + * Therefore all terms and conditions of the GNU Lesser General Public License cover the combination. + ******************************************************************************/ +package resources.datatables; + +import org.python.google.common.collect.BiMap; +import org.python.google.common.collect.HashBiMap; + +public final class LightsaberColors { + + public static BiMap map = HashBiMap.create(); + + static + { + // Basic color crystals with the basic lightsaber shader + map.put("Red", 0); + map.put("Dark Red", 1); + map.put("Light Green", 2); + map.put("Dark Green", 3); + map.put("Blue", 4); + map.put("Dark Blue", 5); + map.put("Yellow", 6); + map.put("Dark Yellow", 7); + map.put("Light Purple", 8); + map.put("Dark Purple", 9); + map.put("Orange", 10); + map.put("Brown", 11); + map.put("Allya's Exile", 12); + map.put("Kun's Blood", 13); + map.put("Bondara's Folly", 14); + map.put("Ulic's Redemption", 15); + map.put("Bane's Heart", 16); + map.put("Gallia's Intuition", 17); + map.put("Prowess of Plo Koon", 18); + map.put("B'Nar's Sacrifice", 19); + map.put("Windu's Guile", 20); + map.put("Mundi's Response", 21); + map.put("Strength of Luminaria", 22); + map.put("Baaa's Wisdom", 23); + map.put("Quintessence of the Force", 24); + map.put("Dawn of Dagobah", 25); + map.put("Horn's Future", 26); + map.put("Allya's Redemption", 27); + map.put("Kenobi's Legacy", 28); + map.put("Sunrider's Destiny", 29); + map.put("Kit's Ferocity", 30); + map.put("Cunning of Tyranus", 31); + + // Special crystals that have seperate shaders - the 256 is for a hacky way to set blade type and color without more code + map.put("Lava", 256 + 1); + map.put("Permafrost", 256 + 2); + map.put("Blackwing Bezoar", 256 + 3); + } + + public static int getByName(String colorName) + { + return map.get(colorName); + } + + public static String get(int index) + { + return map.inverse().get(index); + } + + +} diff --git a/src/resources/datatables/Locomotion.java b/src/resources/datatables/Locomotion.java new file mode 100644 index 00000000..eceec58d --- /dev/null +++ b/src/resources/datatables/Locomotion.java @@ -0,0 +1,50 @@ +/******************************************************************************* + * Copyright (c) 2013 + * + * This File is part of NGECore2. + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see . + * + * Using NGEngine to work with NGECore2 is making a combined work based on NGEngine. + * Therefore all terms and conditions of the GNU Lesser General Public License cover the combination. + ******************************************************************************/ +package resources.datatables; + +public class Locomotion { + + public static final byte Invalid = -1; + public static final byte Standing = 0; + public static final byte Sneaking = 1; + public static final byte Walking = 2; + public static final byte Running = 3; + public static final byte Kneeling = 4; + public static final byte CrouchSneaking = 5; + public static final byte CrouchWalking = 6; + public static final byte Prone = 7; + public static final byte Crawling = 8; + public static final byte ClimbingStationary = 9; + public static final byte Climbing = 10; + public static final byte Hovering = 11; // + public static final byte Flying = 12; + public static final byte LyingDown = 13; + public static final byte Sitting = 14; + public static final byte SkillAnimating = 15; + public static final byte DrivingVehicle = 16; + public static final byte RidingCreature = 17; + public static final byte KnockedDown = 18; + public static final byte Incapacitated = 19; + public static final byte Dead = 20; + public static final byte Blocking = 21; + +} diff --git a/src/resources/datatables/MilkState.java b/src/resources/datatables/MilkState.java new file mode 100644 index 00000000..002b6e7c --- /dev/null +++ b/src/resources/datatables/MilkState.java @@ -0,0 +1,28 @@ +/******************************************************************************* + * Copyright (c) 2013 + * + * This File is part of NGECore2. + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see . + * + * Using NGEngine to work with NGECore2 is making a combined work based on NGEngine. + * Therefore all terms and conditions of the GNU Lesser General Public License cover the combination. + ******************************************************************************/ +package resources.datatables; + +public class MilkState { + public static final byte NOTYETMILKED = 0; + public static final byte MILKINGINPROGRESS = 1; + public static final byte MILKED = 2; +} diff --git a/src/resources/datatables/Options.java b/src/resources/datatables/Options.java new file mode 100644 index 00000000..b3ee62a3 --- /dev/null +++ b/src/resources/datatables/Options.java @@ -0,0 +1,54 @@ +/******************************************************************************* + * Copyright (c) 2013 + * + * This File is part of NGECore2. + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see . + * + * Using NGEngine to work with NGECore2 is making a combined work based on NGEngine. + * Therefore all terms and conditions of the GNU Lesser General Public License cover the combination. + ******************************************************************************/ +package resources.datatables; + +public class Options { + + // Any uncommented ones are confirmed correct for NGE with detailed analysis + + public static int NONE = 0; // HAM is visible, but health is grey without the Attackable flag + public static int SPACE_ATTACKABLE = 1; // Ships that are attackable in space. Includes everything except stations and asteroids so far + public static int USABLE = 2; // Vendors, collections (hand icon) + public static int INSURED = 4; // Unused in NGE + public static int CONVERSABLE = 8; // Conversable on ground / commable in space + //public static int FOLLOWINGWAYPOINT = 16; // Uncertain, could be "frozen" flag or "alert" flag or other. Seen on rare occasions on NPCs + public static int SOCKETED = 32; // Object has sockets + public static int AGGRESSIVE = 64; // Always aggressive no matter what regardless of faction standing. + public static int ATTACKABLE = 128; // Attackable + public static int INVULNERABLE = 256; // No HAM + public static int DISABLED = 512; // Disabled Vehicle + //public static int CRAFTED = 1024; // Wearable TANO objects. Isn't used for WEAOs (weapons), it's just for identifying if a TANO is a wearable probably as that's where this is seen. Also seen on naboo small house deed however... Could also be "crafted items" + public static int QUEST = 2048; // Quest icon + public static int MOUNT = 4096; // Vehicle and creature mounts + public static int SERIAL = 8192; // Has serial number + //public static int UNKNOWN = 16384; // Seen being requested by the client in objcontroller 0x02AB but probably not relevant + public static int PILOT = 32768; // Pilot trainers, chassis dealers + //public static int UNKNOWN = 65536; + //public static int UNKNOWN = 131072; + //public static int UNKNOWN = 262144; + //public static int UNKNOWN = 524288; + //public static int UNKNOWN = 1048576; + //public static int UNKNOWN = 2097152; + //public static int UNKNOWN = 4194304; + public static int STARTER_SHIP = 8388508; // Seen on player scyk fighters, but no others. Could also mean SPACE_OVERT + +} diff --git a/src/resources/datatables/PlayerFlags.java b/src/resources/datatables/PlayerFlags.java new file mode 100644 index 00000000..309f465e --- /dev/null +++ b/src/resources/datatables/PlayerFlags.java @@ -0,0 +1,32 @@ +/******************************************************************************* + * Copyright (c) 2013 + * + * This File is part of NGECore2. + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see . + * + * Using NGEngine to work with NGECore2 is making a combined work based on NGEngine. + * Therefore all terms and conditions of the GNU Lesser General Public License cover the combination. + ******************************************************************************/ +package resources.datatables; + +public class PlayerFlags { + public static final int LFG = 0x01; + public static final int HELPER = 0x02; + public static final int ROLEPLAYER = 0x04; + public static final int AFK = 0x80; + public static final int LD = 0x0100; + public static final int FACTIONRANK = 0x0200; + +} diff --git a/src/resources/datatables/Posture.java b/src/resources/datatables/Posture.java new file mode 100644 index 00000000..d64cba45 --- /dev/null +++ b/src/resources/datatables/Posture.java @@ -0,0 +1,44 @@ +/******************************************************************************* + * Copyright (c) 2013 + * + * This File is part of NGECore2. + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see . + * + * Using NGEngine to work with NGECore2 is making a combined work based on NGEngine. + * Therefore all terms and conditions of the GNU Lesser General Public License cover the combination. + ******************************************************************************/ +package resources.datatables; + +public class Posture { + + // Posture.iff + public static final byte Invalid = -1; + public static final byte Upright = 0; + public static final byte Crouched = 1; + public static final byte Prone = 2; + public static final byte Sneaking = 3; + public static final byte Blocking = 4; + public static final byte Climbing = 5; + public static final byte Flying = 6; + public static final byte LyingDown = 7; + public static final byte Sitting = 8; + public static final byte SkillAnimating = 9; + public static final byte DrivingVehicle = 10; + public static final byte RidingCreature = 11; + public static final byte KnockedDown = 12; + public static final byte Incapacitated = 13; + public static final byte Dead = 14; + +} diff --git a/src/resources/datatables/Professions.java b/src/resources/datatables/Professions.java new file mode 100644 index 00000000..0c6b76e1 --- /dev/null +++ b/src/resources/datatables/Professions.java @@ -0,0 +1,50 @@ +/******************************************************************************* + * Copyright (c) 2013 + * + * This File is part of NGECore2. + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see . + * + * Using NGEngine to work with NGECore2 is making a combined work based on NGEngine. + * Therefore all terms and conditions of the GNU Lesser General Public License cover the combination. + ******************************************************************************/ +package resources.datatables; + +import java.util.HashMap; +import java.util.Map; + +public final class Professions { + + private static Map map = new HashMap(); + + static { + map.put("trader_0a", 0); + map.put("trader_0b", 0); + map.put("trader_0c", 0); + map.put("trader_0d", 0); + map.put("entertainer_1a", 5); + map.put("medic_1a", 10); + map.put("officer_1a", 15); + map.put("bounty_hunter_1a", 20); + map.put("smuggler_1a", 25); + map.put("commando_1a", 30); + map.put("spy_1a", 35); + map.put("force_sensitive_1a", 40); + } + + public static int get(String profession) { + return map.get(profession); + } + +} diff --git a/src/resources/common/PvpStatus.java b/src/resources/datatables/PvpStatus.java similarity index 91% rename from src/resources/common/PvpStatus.java rename to src/resources/datatables/PvpStatus.java index 18365a58..f2bb3350 100644 --- a/src/resources/common/PvpStatus.java +++ b/src/resources/datatables/PvpStatus.java @@ -19,10 +19,11 @@ * Using NGEngine to work with NGECore2 is making a combined work based on NGEngine. * Therefore all terms and conditions of the GNU Lesser General Public License cover the combination. ******************************************************************************/ -package resources.common; +package resources.datatables; public class PvpStatus { + public static int None = 0; public static int Attackable = 1; public static int Aggressive = 2; public static int Overt = 4; @@ -30,7 +31,7 @@ public class PvpStatus { public static int Player = 16; public static int Enemy = 32; public static int GoingOvert = 64; - public static int GoingCombatant = 128; - public static int Dueling = 256; + public static int GoingCovert = 128; + public static int Self = 256; } diff --git a/src/resources/datatables/State.java b/src/resources/datatables/State.java new file mode 100644 index 00000000..dafd0c64 --- /dev/null +++ b/src/resources/datatables/State.java @@ -0,0 +1,69 @@ +/******************************************************************************* + * Copyright (c) 2013 + * + * This File is part of NGECore2. + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see . + * + * Using NGEngine to work with NGECore2 is making a combined work based on NGEngine. + * Therefore all terms and conditions of the GNU Lesser General Public License cover the combination. + ******************************************************************************/ +package resources.datatables; + +public class State { + + public static long Invalid = 0x00L; + public static long Cover = 0x1L; + public static long Combat = 0x2L; + public static long Peace = 0x4L; + public static long Aiming = 0x8L; + public static long Alert = 0x10L; + public static long Berserk = 0x20L; + public static long FeignDeath = 0x40L; + public static long CombatAttitudeEvasive = 0x80L; + public static long CombatAttitudeNormal = 0x100L; + public static long CombatAttitudeAggressive = 0x200L; + public static long Tumbling = 0x400L; + public static long Rallied = 0x800L; + public static long Stunned = 0x1000L; + public static long Blinded = 0x2000L; + public static long Dizzy = 0x4000L; + public static long Intimidated = 0x8000L; + public static long Immobilized = 0x10000L; + public static long Frozen = 0x20000L; + public static long Swimming = 0x40000L; + public static long SittingOnChair = 0x80000L; + public static long Crafting = 0x100000L; + public static long GlowingJedi = 0x200000L; + public static long MaskScent = 0x400000L; + public static long Poisoned = 0x800000L; + public static long Bleeding = 0x1000000L; + public static long Diseased = 0x2000000L; + public static long OnFire = 0x4000000L; + public static long RidingMount = 0x8000000L; + public static long MountedCreature = 0x10000000L; + public static long PilotingShip = 0x20000000L; + public static long ShipOperations = 0x40000000L; + public static long ShipGunner = 0x80000000L; + public static long ShipInterior = 0x100000000L; + public static long PilotingPobShip = 0x200000000L; + public static long PerformingDeathBlow = 0x400000000L; + public static long Disguised = 0x800000000L; + public static long ElectricBurned = 0x1000000000L; + public static long ColdBurned = 0x2000000000L; + public static long AcidBurned = 0x4000000000L; + public static long EnergyBurned = 0x8000000000L; + public static long KineticBurned = 0x10000000000L; + +} diff --git a/src/resources/common/StateStatus.java b/src/resources/datatables/StateStatus.java similarity index 57% rename from src/resources/common/StateStatus.java rename to src/resources/datatables/StateStatus.java index e4039a46..e805f7cb 100644 --- a/src/resources/common/StateStatus.java +++ b/src/resources/datatables/StateStatus.java @@ -1,4 +1,25 @@ -package resources.common; +/******************************************************************************* + * Copyright (c) 2013 + * + * This File is part of NGECore2. + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see . + * + * Using NGEngine to work with NGECore2 is making a combined work based on NGEngine. + * Therefore all terms and conditions of the GNU Lesser General Public License cover the combination. + ******************************************************************************/ +package resources.datatables; public class StateStatus { // States.iff diff --git a/src/resources/datatables/WeaponType.java b/src/resources/datatables/WeaponType.java new file mode 100644 index 00000000..187332a4 --- /dev/null +++ b/src/resources/datatables/WeaponType.java @@ -0,0 +1,40 @@ +/******************************************************************************* + * Copyright (c) 2013 + * + * This File is part of NGECore2. + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see . + * + * Using NGEngine to work with NGECore2 is making a combined work based on NGEngine. + * Therefore all terms and conditions of the GNU Lesser General Public License cover the combination. + ******************************************************************************/ +package resources.datatables; + +public class WeaponType { + + public static final int RIFLE = 0; + public static final int CARBINE = 1; + public static final int PISTOL = 2; + public static final int ONEHANDEDMELEE = 4; + public static final int TWOHANDEDMELEE = 5; + public static final int UNARMED = 6; + public static final int POLEARMMELEE = 7; + public static final int THROWN = 8; + public static final int ONEHANDEDSABER = 9; + public static final int TWOHANDEDSABER = 10; + public static final int POLEARMSABER = 11; + public static final int HEAVYWEAPON = 12; + public static final int FLAMETHROWER = 13; + +} diff --git a/src/resources/gcw/CurrentServerGCWZoneHistory.java b/src/resources/gcw/CurrentServerGCWZoneHistory.java index f56ed235..b98bba3b 100644 --- a/src/resources/gcw/CurrentServerGCWZoneHistory.java +++ b/src/resources/gcw/CurrentServerGCWZoneHistory.java @@ -21,17 +21,15 @@ ******************************************************************************/ package resources.gcw; -import java.nio.ByteOrder; +import java.io.Serializable; import org.apache.mina.core.buffer.IoBuffer; -import com.sleepycat.persist.model.Persistent; +import engine.resources.objects.Delta; -import resources.objects.ListObject; - -@Persistent -public class CurrentServerGCWZoneHistory extends ListObject implements Cloneable { +public class CurrentServerGCWZoneHistory extends Delta implements Cloneable, Serializable { + private static final long serialVersionUID = 1L; private int lastUpdateTime; private int percent; @@ -40,6 +38,10 @@ public class CurrentServerGCWZoneHistory extends ListObject implements Cloneable this.lastUpdateTime = zone.getLastUpdateTime(); } + public CurrentServerGCWZoneHistory() { + + } + public int getLastUpdateTime() { synchronized(objectMutex) { return lastUpdateTime; @@ -54,7 +56,7 @@ public class CurrentServerGCWZoneHistory extends ListObject implements Cloneable public byte[] getBytes() { synchronized(objectMutex) { - IoBuffer buffer = bufferPool.allocate((8), false).order(ByteOrder.LITTLE_ENDIAN); + IoBuffer buffer = createBuffer(8); buffer.putInt(lastUpdateTime); buffer.putInt(percent); return buffer.array(); diff --git a/src/resources/gcw/CurrentServerGCWZonePercent.java b/src/resources/gcw/CurrentServerGCWZonePercent.java index ad9c3895..8829b1b3 100644 --- a/src/resources/gcw/CurrentServerGCWZonePercent.java +++ b/src/resources/gcw/CurrentServerGCWZonePercent.java @@ -21,21 +21,18 @@ ******************************************************************************/ package resources.gcw; +import java.io.Serializable; import java.math.BigDecimal; import java.math.MathContext; -import java.nio.ByteOrder; import org.apache.mina.core.buffer.IoBuffer; -import com.sleepycat.persist.model.Persistent; - +import engine.resources.objects.Delta; import engine.resources.scene.Point2D; -import resources.objects.ListObject; - -@Persistent -public class CurrentServerGCWZonePercent extends ListObject implements Cloneable { +public class CurrentServerGCWZonePercent extends Delta implements Cloneable, Serializable { + private static final long serialVersionUID = 1L; private Point2D position; private float radius = 0; private BigDecimal weight; @@ -53,6 +50,10 @@ public class CurrentServerGCWZonePercent extends ListObject implements Cloneable this.percent = new BigDecimal("50.0", MathContext.DECIMAL128); } + public CurrentServerGCWZonePercent() { + + } + public Point2D getPosition() { synchronized(objectMutex) { return position.clone(); @@ -148,7 +149,7 @@ public class CurrentServerGCWZonePercent extends ListObject implements Cloneable public byte[] getBytes() { synchronized(objectMutex) { - IoBuffer buffer = bufferPool.allocate(4, false).order(ByteOrder.LITTLE_ENDIAN); + IoBuffer buffer = createBuffer(4); buffer.putInt(percent.intValue()); return buffer.array(); } diff --git a/src/resources/gcw/OtherServerGCWZonePercent.java b/src/resources/gcw/OtherServerGCWZonePercent.java index 6b4d410d..d97bf098 100644 --- a/src/resources/gcw/OtherServerGCWZonePercent.java +++ b/src/resources/gcw/OtherServerGCWZonePercent.java @@ -21,17 +21,15 @@ ******************************************************************************/ package resources.gcw; -import java.nio.ByteOrder; +import java.io.Serializable; import org.apache.mina.core.buffer.IoBuffer; -import com.sleepycat.persist.model.Persistent; +import engine.resources.objects.Delta; -import resources.objects.ListObject; - -@Persistent -public class OtherServerGCWZonePercent extends ListObject implements Cloneable { +public class OtherServerGCWZonePercent extends Delta implements Cloneable, Serializable { + private static final long serialVersionUID = 1L; private String zone = ""; private int percent = 50; @@ -39,6 +37,10 @@ public class OtherServerGCWZonePercent extends ListObject implements Cloneable { this.zone = zone; } + public OtherServerGCWZonePercent() { + + } + public String getZone() { synchronized(objectMutex) { return zone; @@ -60,7 +62,7 @@ public class OtherServerGCWZonePercent extends ListObject implements Cloneable { public byte[] getBytes() { synchronized(objectMutex) { - IoBuffer buffer = bufferPool.allocate((2 + zone.length() + 4), false).order(ByteOrder.LITTLE_ENDIAN); + IoBuffer buffer = createBuffer((2 + zone.length() + 4)); buffer.put(getAsciiString(zone)); buffer.putInt(percent); return buffer.array(); diff --git a/src/resources/gcw/RegionDefender.java b/src/resources/gcw/RegionDefender.java new file mode 100644 index 00000000..e72d1877 --- /dev/null +++ b/src/resources/gcw/RegionDefender.java @@ -0,0 +1,98 @@ +/******************************************************************************* + * Copyright (c) 2013 + * + * This File is part of NGECore2. + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see . + * + * Using NGEngine to work with NGECore2 is making a combined work based on NGEngine. + * Therefore all terms and conditions of the GNU Lesser General Public License cover the combination. + ******************************************************************************/ +package resources.gcw; + +import org.apache.mina.core.buffer.IoBuffer; + +import engine.resources.common.AString; +import engine.resources.objects.Baseline; +import engine.resources.objects.Delta; + +public class RegionDefender extends Delta { + + private static final long serialVersionUID = 1L; + + private AString region; + private byte byte1 = 0; + private byte byte2 = 0; + + public RegionDefender(String region, byte byte1, byte byte2) { + this.region = new AString(region); + this.byte1 = byte1; + this.byte2 = byte2; + } + + public RegionDefender(String region) { + this.region = new AString(region); + } + + public RegionDefender() { + this.region = new AString(); + } + + public String getRegion() { + synchronized(objectMutex) { + return region.get(); + } + } + + public void setRegion(String region) { + synchronized(objectMutex) { + this.region = new AString(region); + } + } + + public byte getByte1() { + synchronized(objectMutex) { + return byte1; + } + } + + public void setByte1(byte byte1) { + synchronized(objectMutex) { + this.byte1 = byte1; + } + } + + public byte getByte2() { + synchronized(objectMutex) { + return byte2; + } + } + + public void setByte2(byte byte2) { + synchronized(objectMutex) { + this.byte2 = byte2; + } + } + + public byte[] getBytes() { + synchronized(objectMutex) { + IoBuffer buffer = Baseline.createBuffer(region.getBytes().length + 2); + buffer.put(region.getBytes()); + buffer.put(byte1); + buffer.put(byte2); + return buffer.array(); + } + } + +} diff --git a/src/resources/guild/Guild.java b/src/resources/guild/Guild.java index 2a900945..4ea74669 100644 --- a/src/resources/guild/Guild.java +++ b/src/resources/guild/Guild.java @@ -21,91 +21,136 @@ ******************************************************************************/ package resources.guild; -import java.nio.ByteOrder; -import java.util.List; +import java.util.Date; +import java.util.HashMap; +import java.util.Map; -import org.apache.mina.core.buffer.IoBuffer; - -import resources.objects.ListObject; +import main.NGECore; +import services.chat.Mail; import engine.resources.objects.SWGObject; -public class Guild extends ListObject { +public class Guild { private int id; + private int chatRoomId; private String abbreviation; private String name; - private SWGObject leader; - private List members; + private long leader; + private String leaderName; + private Map members = new HashMap(); + private Map sponsoredPlayers = new HashMap(); + private String motd = ""; public Guild(int id, String abbreviation, String name, SWGObject leader) { this.id = id; this.abbreviation = abbreviation; this.name = name; - this.leader = leader; - this.members.add(leader); + this.leader = leader.getObjectID(); + this.leaderName = leader.getCustomName(); + } + + public Guild() { } + + public GuildMember addMember(long objID) { + GuildMember member = new GuildMember(objID); + members.put(objID, member); + return member; + } + + public void sendGuildMail(String sender, String subject, String message) { + NGECore core = NGECore.getInstance(); + Date date = new Date(); + members.forEach((id, member) -> { + Mail guildMail = new Mail(); + guildMail.setMailId(core.chatService.generateMailId()); + guildMail.setTimeStamp((int) date.getTime()); + guildMail.setRecieverId(id); + guildMail.setStatus(Mail.NEW); + guildMail.setMessage(message); + guildMail.setSubject(subject); + guildMail.setSenderName(sender); + core.chatService.storePersistentMessage(guildMail); + + if (core.objectService.getObject(id) != null) { + core.chatService.sendPersistentMessageHeader(core.objectService.getObject(id).getClient(), guildMail); + } + }); } public int getId() { - synchronized(objectMutex) { - return id; - } + return id; } public void setId(int id) { - synchronized(objectMutex) { - this.id = id; - } + this.id = id; } + public int getChatRoomId() { + return chatRoomId; + } + + public void setChatRoomId(int chatRoomId) { + this.chatRoomId = chatRoomId; + } + public String getAbbreviation() { - synchronized(objectMutex) { - return abbreviation; - } + return abbreviation; } public void setAbbreviation(String abbreviation) { - synchronized(objectMutex) { - this.abbreviation = abbreviation; - } + this.abbreviation = abbreviation; } public String getName() { - synchronized(objectMutex) { - return name; - } + return name; } public void setName(String name) { - synchronized(objectMutex) { - this.name = name; - } + this.name = name; } public String getString() { - synchronized(objectMutex) { - return (Integer.toString(id) + ":" + abbreviation); - } + return (Integer.toString(getId()) + ":" + getAbbreviation()); } - public SWGObject getLeader() { + public long getLeader() { return leader; } - public void setLeader(SWGObject leader) { + public void setLeader(long leader) { this.leader = leader; } - public List getMembers() { + public String getMotd() { + return motd; + } + + public void setMotd(String motd) { + this.motd = motd; + } + + public Map getMembers() { return members; } - public byte[] getBytes() { - synchronized(objectMutex) { - IoBuffer buffer = bufferPool.allocate((getString().length() + 2), false).order(ByteOrder.LITTLE_ENDIAN); - buffer.put(getAsciiString(getString())); - return buffer.array(); - } + public String getLeaderName() { + return leaderName; } + public void setLeaderName(String leaderName) { + this.leaderName = leaderName; + } + + public Map getSponsoredPlayers() { + return sponsoredPlayers; + } + + public void setSponsoredPlayers(Map sponsoredPlayers) { + this.sponsoredPlayers = sponsoredPlayers; + } + + public GuildMember getMember(long objectID) { + return members.get(objectID); + } } diff --git a/src/resources/guild/GuildMember.java b/src/resources/guild/GuildMember.java new file mode 100644 index 00000000..c8188cd1 --- /dev/null +++ b/src/resources/guild/GuildMember.java @@ -0,0 +1,332 @@ +/******************************************************************************* + * Copyright (c) 2013 + * + * This File is part of NGECore2. + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see . + * + * Using NGEngine to work with NGECore2 is making a combined work based on NGEngine. + * Therefore all terms and conditions of the GNU Lesser General Public License cover the combination. + ******************************************************************************/ +package resources.guild; + +import java.util.HashMap; +import java.util.Map; +import java.util.Vector; + +public class GuildMember { + private long objectId; + private long joinTime; + private String profession = ""; + private short level; + private String rank = ""; + private String name = ""; + private String title = ""; + // TODO: These might have to be moved to a new GuildRank class depending on how permissions worked for NGE + //this works for now... Lack of NGE Guild Rank guides makes re-creation difficult (Ranks introduced Game Update 8: http://swg.wikia.com/wiki/Game_Update_8) + + private Vector permissions = new Vector(); + private boolean mailPermission = false; + private boolean sponsorPermission = false; + private boolean titlePermission = false; + private boolean kickPermission = false; + private boolean acceptPermission = false; + private boolean warPermission = false; + private boolean changeNamePermission = false; + private boolean disbandPermission = false; + private boolean rankPermission = false; + + private boolean warExcluded = false; + private boolean warExclusive = false; + + public GuildMember() { } + + public GuildMember(long objectId) { + this.objectId = objectId; + this.joinTime = System.currentTimeMillis(); + } + + public void removeAllPermissions() { + setMailPermission(false); + setSponsorPermission(false); + setTitlePermission(false); + setKickPermission(false); + setAcceptPermission(false); + setWarPermission(false); + setChangeNamePermission(false); + setDisbandPermission(false); + setRankPermission(false); + } + + public void giveAllPermissions() { + setMailPermission(true); + setSponsorPermission(true); + setTitlePermission(true); + setKickPermission(true); + setAcceptPermission(true); + setWarPermission(true); + setChangeNamePermission(true); + setDisbandPermission(true); + setRankPermission(true); + } + + public long getObjectId() { + return objectId; + } + public void setObjectId(long objectId) { + this.objectId = objectId; + } + public long getJoinTime() { + return joinTime; + } + + public void setJoinTime(long joinTime) { + this.joinTime = joinTime; + } + + public boolean hasMailPermission() { + return mailPermission; + } + public void setMailPermission(boolean mailPermission) { + if (mailPermission) + permissions.add("Mail"); + else + permissions.remove("Mail"); + + this.mailPermission = mailPermission; + } + + public boolean hasSponsorPermission() { + return sponsorPermission; + } + public void setSponsorPermission(boolean sponsorPermission) { + if (sponsorPermission) + permissions.add("Sponsor"); + else + permissions.remove("Sponsor"); + + this.sponsorPermission = sponsorPermission; + } + public boolean hasTitlePermission() { + return titlePermission; + } + public void setTitlePermission(boolean titlePermission) { + if (titlePermission) + permissions.add("Title"); + else + permissions.remove("Title"); + + this.titlePermission = titlePermission; + } + public boolean hasKickPermission() { + return kickPermission; + } + public void setKickPermission(boolean kickPermission) { + if (kickPermission) + permissions.add("Kick"); + else + permissions.remove("Kick"); + + this.kickPermission = kickPermission; + } + public boolean hasAcceptPermission() { + return acceptPermission; + } + public void setAcceptPermission(boolean acceptPermission) { + if (acceptPermission) + permissions.add("Accept"); + else + permissions.remove("Accept"); + + this.acceptPermission = acceptPermission; + } + public boolean hasWarPermission() { + return warPermission; + } + public void setWarPermission(boolean warPermission) { + if (warPermission) + permissions.add("War"); + else + permissions.remove("War"); + + this.warPermission = warPermission; + } + public boolean hasChangeNamePermission() { + return changeNamePermission; + } + public void setChangeNamePermission(boolean changeNamePermission) { + if (changeNamePermission) + permissions.add("Change Guild Name"); + else + permissions.remove("Change Guild Name"); + + this.changeNamePermission = changeNamePermission; + } + public boolean hasDisbandPermission() { + return disbandPermission; + } + public void setDisbandPermission(boolean disbandPermission) { + if (disbandPermission) + permissions.add("Disband"); + else + permissions.remove("Disband"); + + this.disbandPermission = disbandPermission; + } + + public boolean hasRankPermission() { + return rankPermission; + } + + public void setRankPermission(boolean rankPermission) { + if (rankPermission) + permissions.add("Rank"); + else + permissions.remove("Rank"); + this.rankPermission = rankPermission; + } + + public boolean isWarExcluded() { + return warExcluded; + } + + public void setWarExcluded(boolean warExcluded) { + if (warExcluded) + permissions.add("War Excluded"); + else + permissions.remove("War Excluded"); + this.warExcluded = warExcluded; + } + + public boolean isWarExclusive() { + return warExclusive; + } + + public void setWarExclusive(boolean warExclusive) { + if (warExclusive) + permissions.add("War Exclusive"); + else + permissions.remove("War Exclusive"); + this.warExclusive = warExclusive; + } + + public String getProfession() { + return profession; + } + + public void setProfession(String profession) { + this.profession = profession; + } + + public short getLevel() { + return level; + } + + public void setLevel(short level) { + this.level = level; + } + + public String getRank() { + return rank; + } + + public void setRank(String rank) { + this.rank = rank; + } + + public String getTitle() { + return title; + } + + public void setTitle(String title) { + this.title = title; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public Map getAllPermissions(GuildMember requester) { + Map permissions = new HashMap(); + + // Only allows requester to change permissions that they have (Ex. Can't change sponsor permission on a member if they don't have that permission) + // War Excluded and War Exclusive did not follow that rule + if (requester.getObjectId() != getObjectId()) { + if (requester.hasMailPermission()) { + if (hasMailPermission()) permissions.put((long) 1, "@guild:permission_mail_yes"); + else permissions.put((long) 1, "@guild:permission_mail_no"); + } + + if (requester.hasSponsorPermission()) { + if (hasSponsorPermission()) permissions.put((long) 2, "@guild:permission_sponsor_yes"); + else permissions.put((long) 2, "@guild:permission_sponsor_no"); + } + + if (requester.hasTitlePermission()) { + if (hasTitlePermission()) permissions.put((long) 3, "@guild:permission_title_yes"); + else permissions.put((long) 3, "@guild:permission_title_no"); + } + + if (requester.hasAcceptPermission()) { + if (hasAcceptPermission()) permissions.put((long) 4, "@guild:permission_accept_yes"); + else permissions.put((long) 4, "@guild:permission_accept_no"); + } + + if (requester.hasKickPermission()) { + if (hasKickPermission()) permissions.put((long) 5, "@guild:permission_kick_yes"); + else permissions.put((long) 5, "@guild:permission_kick_no"); + } + + if (requester.hasWarPermission()) { + if (hasWarPermission()) permissions.put((long) 6, "@guild:permission_war_yes"); + else permissions.put((long) 6, "@guild:permission_war_no"); + } + + if (requester.hasChangeNamePermission()) { + if (hasChangeNamePermission()) permissions.put((long) 7, "@guild:permission_namechange_yes"); + else permissions.put((long) 7, "@guild:permission_namechange_no"); + } + + if (requester.hasDisbandPermission()) { + if (hasDisbandPermission()) permissions.put((long) 8, "@guild:permission_disband_yes"); + else permissions.put((long) 8, "@guild:permission_disband_no"); + } + + if (requester.hasRankPermission()) { + if (hasRankPermission()) permissions.put((long) 9, "@guild:permission_rank_yes"); + else permissions.put((long) 9, "@guild:permission_rank_no"); + } + } + if (requester.hasWarPermission() || (requester.getObjectId() == getObjectId())) { + if (isWarExcluded()) permissions.put((long) 10, "+ War Excluded"); + else permissions.put((long) 10, "- War Excluded"); + + if (isWarExclusive()) permissions.put((long) 11, "+ War Exclusive"); + else permissions.put((long) 11, "- War Exclusive"); + } + return permissions; + } + + public Vector getPermissions() { + return permissions; + } + + public void setPermissions(Vector permissions) { + this.permissions = permissions; + } +} diff --git a/src/resources/harvest/SurveyTool.java b/src/resources/harvest/SurveyTool.java new file mode 100644 index 00000000..f23be1d2 --- /dev/null +++ b/src/resources/harvest/SurveyTool.java @@ -0,0 +1,333 @@ +/******************************************************************************* + * Copyright (c) 2013 + * + * This File is part of NGECore2. + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see . + * + * Using NGEngine to work with NGECore2 is making a combined work based on NGEngine. + * Therefore all terms and conditions of the GNU Lesser General Public License cover the combination. + ******************************************************************************/ +package resources.harvest; + +import java.io.Serializable; +import java.util.Vector; + +import main.NGECore; + +import engine.resources.scene.Planet; +import engine.resources.scene.Point3D; +import engine.resources.scene.Quaternion; +import resources.objects.creature.CreatureObject; +import resources.objects.resource.GalacticResource; +import resources.objects.resource.ResourceConcentration; +import resources.objects.tangible.TangibleObject; + +/** + * @author Charon + */ +public class SurveyTool extends TangibleObject implements Serializable { + + private static final long serialVersionUID = 1L; + private byte toolType=0; + private long surveyResourceID; + private long userID=0; + private Long tanoID=0L; + private byte SurveyRangeSetting=0; + + private transient String surveyEffectString=""; + private transient String sampleEffectString=""; + private transient boolean currentlySurveying=false; + private transient boolean currentlySampling=false; + private transient boolean currentlyCoolingDown=false; + private transient boolean exceptionalState=false; + private transient boolean recoveryMode=false; + private transient Long lastSurveyTime=0L; + private transient Long lastSampleTime=0L; + private transient Long recoveryTime=10L; + + public static byte MineralSurveyDevice = 1; + public static byte ChemicalSurveyDevice = 2; + public static byte FloraSurveyTool = 3; + public static byte GasPocketSurveyDevice = 4; + public static byte WaterSurveyDevice = 5; + public static byte WindCurrentSurveyingTool = 6; + public static byte AmbientSolarEnergySurveyingTool = 7; + public static byte CompleteResourceSurveyDevice = 8; + + public SurveyTool() { + super(); + this.exceptionalState = false; + } + + @Override + public void initAfterDBLoad() { + super.init(); + this.exceptionalState = false; + surveyEffectString = ""; + sampleEffectString = ""; + defendersList = new Vector(); + } + + public SurveyTool(long objectID, Planet planet, Point3D position, Quaternion orientation, String template) { + super(objectID, planet, position, orientation, template); + surveyEffectString = ""; + sampleEffectString = ""; + this.tanoID = objectID; + this.exceptionalState = false; + this.recoveryMode = false; + switch (template) { + case "object/tangible/survey_tool/shared_survey_tool_mineral.iff" : + toolType = 1; + surveyEffectString = "clienteffect/survey_tool_mineral.cef"; + sampleEffectString = "clienteffect/survey_sample_mineral.cef"; + break; + case "object/tangible/survey_tool/shared_survey_tool_inorganic.iff" : + toolType = 2; + surveyEffectString = "clienteffect/survey_tool_lumber.cef"; + sampleEffectString = "clienteffect/survey_sample_lumber.cef"; + break; + case "object/tangible/survey_tool/shared_survey_tool_lumber.iff" : + toolType = 3; + surveyEffectString = "clienteffect/survey_tool_lumber.cef"; + sampleEffectString = "clienteffect/survey_sample_lumber.cef"; + break; + case "object/tangible/survey_tool/shared_survey_tool_gas.iff" : + toolType = 4; + surveyEffectString = "clienteffect/survey_tool_gas.cef"; + sampleEffectString = "clienteffect/survey_sample_gas.cef"; + break; + case "object/tangible/survey_tool/shared_survey_tool_moisture.iff" : + toolType = 5; + surveyEffectString = "clienteffect/survey_tool_liquid.cef"; + sampleEffectString = "clienteffect/survey_sample_liquid.cef"; + break; + case "object/tangible/survey_tool/shared_survey_tool_wind.iff" : + toolType = 6; + surveyEffectString = "clienteffect/survey_tool_gas.cef"; + sampleEffectString = "clienteffect/survey_sample_gas.cef"; + break; + case "object/tangible/survey_tool/shared_survey_tool_solar.iff" : + toolType = 7; + surveyEffectString = "clienteffect/survey_tool_moisture.cef"; + sampleEffectString = "clienteffect/survey_sample_moisture.cef"; + break; + case "object/tangible/survey_tool/shared_survey_tool_all.iff" : + toolType = 8; + surveyEffectString = "clienteffect/survey_tool_liquid.cef"; + sampleEffectString = "clienteffect/survey_sample_liquid.cef"; + break; + default: toolType = -1; + } + } + + public SurveyTool(String template, Long tanoID) { + super(); + surveyEffectString = ""; + sampleEffectString = ""; + this.tanoID = tanoID; + this.exceptionalState = false; + switch (template) { + case "object/tangible/survey_tool/shared_survey_tool_mineral.iff" : + toolType = 1; + surveyEffectString = "clienteffect/survey_tool_mineral.cef"; + sampleEffectString = "clienteffect/survey_sample_mineral.cef"; + break; + case "object/tangible/survey_tool/shared_survey_tool_inorganic.iff" : + toolType = 2; + surveyEffectString = "clienteffect/survey_tool_lumber.cef"; + sampleEffectString = "clienteffect/survey_sample_lumber.cef"; + break; + case "object/tangible/survey_tool/shared_survey_tool_lumber.iff" : + toolType = 3; + surveyEffectString = "clienteffect/survey_tool_lumber.cef"; + sampleEffectString = "clienteffect/survey_sample_lumber.cef"; + break; + case "object/tangible/survey_tool/shared_survey_tool_gas.iff" : + toolType = 4; + surveyEffectString = "clienteffect/survey_tool_gas.cef"; + sampleEffectString = "clienteffect/survey_sample_gas.cef"; + break; + case "object/tangible/survey_tool/shared_survey_tool_moisture.iff" : + toolType = 5; + surveyEffectString = "clienteffect/survey_tool_liquid.cef"; + sampleEffectString = "clienteffect/survey_sample_liquid.cef"; + break; + case "object/tangible/survey_tool/shared_survey_tool_wind.iff" : + toolType = 6; + surveyEffectString = "clienteffect/survey_tool_gas.cef"; + sampleEffectString = "clienteffect/survey_sample_gas.cef"; + break; + case "object/tangible/survey_tool/shared_survey_tool_solar.iff" : + toolType = 7; + surveyEffectString = "clienteffect/survey_tool_moisture.cef"; + sampleEffectString = "clienteffect/survey_sample_moisture.cef"; + break; + case "object/tangible/survey_tool/shared_survey_tool_all.iff" : + toolType = 8; + surveyEffectString = "clienteffect/survey_tool_liquid.cef"; + sampleEffectString = "clienteffect/survey_sample_liquid.cef"; + break; + default: toolType = -1; + } + + } + + public void setToolType(byte toolType) { + this.toolType = toolType; + } + + public byte getToolType() { + return this.toolType; + } + + public String getSurveyEffectString() { + return surveyEffectString; + } + + public String getSampleEffectString() { + return sampleEffectString; + } + + public void setCurrentlySurveying(boolean toggle){ + this.currentlySurveying=toggle; + } + + public boolean getCurrentlySurveying(){ + return this.currentlySurveying; + } + + public void setCurrentlySampling(boolean toggle){ + this.currentlySampling=toggle; + } + + public boolean getCurrentlySampling(){ + return this.currentlySampling; + } + + public void setLastSurveyTime(Long time){ + this.lastSurveyTime = time; + } + + public Long getLastSurveyTime(){ + return this.lastSurveyTime; + } + + public void setLastSampleTime(Long time){ + this.lastSampleTime = time; + } + + public Long getLastSampleTime(){ + return this.lastSampleTime; + } + + public void setSurveyResourceID(long surveyResourceID){ + this.surveyResourceID = surveyResourceID; + } + + public long getSurveyResourceID(){ + return this.surveyResourceID; + } + + public boolean getCurrentlyCoolingDown() { + return currentlyCoolingDown; + } + + public void setCurrentlyCoolingDown(boolean currentlyCoolingDown) { + this.currentlyCoolingDown = currentlyCoolingDown; + } + + public Long getRecoveryTime() { + return recoveryTime; + } + + public void setRecoveryTime(Long recoveryTime) { + this.recoveryTime = recoveryTime; + } + + public long getUserID() { + return userID; + } + + public void setUserID(long userID) { + this.userID = userID; + } + + public Long getTanoID() { + return tanoID; + } + + public void setTanoID(Long tanoID) { + this.tanoID = tanoID; + } + + public boolean isExceptionalState() { + return exceptionalState; + } + + public void setExceptionalState(boolean exceptionalState) { + this.exceptionalState = exceptionalState; + } + + public boolean isRecoveryMode() { + return this.recoveryMode; + } + + public void setRecoveryMode(boolean recoveryMode) { + this.recoveryMode = recoveryMode; + } + + public byte getSurveyRangeSetting() { + return SurveyRangeSetting; + } + + public void setSurveyRangeSetting(byte surveyRangeSetting) { + SurveyRangeSetting = surveyRangeSetting; + } + + public void sendConstructSurveyMapMessage(){ + float surveyRadius = 64.0f; + int surveyToolRangeSetting = this.getSurveyRangeSetting(); + //surveyToolRangeSetting = 4; + int divisor = 0; + if (surveyToolRangeSetting==0) { + divisor = 2; + surveyRadius = 64.0f; + } else if (surveyToolRangeSetting==1) { + divisor = 3; + surveyRadius = 128.0f; + } else if (surveyToolRangeSetting==2) { + divisor = 3; + surveyRadius = 192.0f; + } else if (surveyToolRangeSetting==3) { + divisor = 4; + surveyRadius = 256.0f; + } else if (surveyToolRangeSetting==4) { + divisor = 4; + surveyRadius = 320.0f; + } else { + divisor = 5; + surveyRadius = 3072.0f; + } + + float differential = surveyRadius / (float) divisor; + GalacticResource resourceToSurvey = (GalacticResource) NGECore.getInstance().objectService.getObject(this.getSurveyResourceID()); + CreatureObject user = (CreatureObject) NGECore.getInstance().objectService.getObject(this.getUserID()); + if (resourceToSurvey==null || user==null) + return; + Vector concentrationMap = resourceToSurvey.buildConcentrationsCollection(user.getPosition(),resourceToSurvey, surveyRadius, differential, user.getPlanetId()); + resourceToSurvey.constructSurveyMapMessage(user, concentrationMap, surveyRadius); + //this.getUser().sendSystemMessage("Distance to nearest Deposit : " + this.getSurveyResource().getHelperMinDist(), (byte) 0); + } +} \ No newline at end of file diff --git a/src/resources/objects/MultimapProxy.java b/src/resources/loot/LootDrop.java similarity index 53% rename from src/resources/objects/MultimapProxy.java rename to src/resources/loot/LootDrop.java index 67ab5944..efd455ba 100644 --- a/src/resources/objects/MultimapProxy.java +++ b/src/resources/loot/LootDrop.java @@ -19,50 +19,33 @@ * Using NGEngine to work with NGECore2 is making a combined work based on NGEngine. * Therefore all terms and conditions of the GNU Lesser General Public License cover the combination. ******************************************************************************/ -package resources.objects; +package resources.loot; import java.util.ArrayList; import java.util.List; -import java.util.Map.Entry; -import org.python.google.common.collect.ArrayListMultimap; -import org.python.google.common.collect.Multimap; - -import com.sleepycat.persist.model.Persistent; -import com.sleepycat.persist.model.PersistentProxy; - -@Persistent(proxyFor=Multimap.class) -public class MultimapProxy implements PersistentProxy> { +public class LootDrop { - private int size = 0; - private K[] keys; - private V[] values; + private List elements = new ArrayList(); + private String droppedItemTemplate; - private MultimapProxy() { } - - public void initializeProxy(Multimap object) { - List keyList = new ArrayList(); - List valueList = new ArrayList(); + public LootDrop(){ - for (Entry entry : object.entries()) { - keyList.add(entry.getKey()); - valueList.add(entry.getValue()); - } - - size = object.entries().size(); - - keys = keyList.toArray(keys); - values = valueList.toArray(values); } - public Multimap convertProxy() { - Multimap map = ArrayListMultimap.create(); - - for (int i = 0; i < size; i++) { - map.put(keys[i], values[i]); - } - - return map; + public void addElement(String element){ + elements.add(element); } + public List getElements(){ + return elements; + } + + public String getDroppedItemTemplate() { + return droppedItemTemplate; + } + + public void setDroppedItemTemplate(String droppedItemTemplate) { + this.droppedItemTemplate = droppedItemTemplate; + } } diff --git a/src/resources/loot/LootGroup.java b/src/resources/loot/LootGroup.java new file mode 100644 index 00000000..94ad4ef7 --- /dev/null +++ b/src/resources/loot/LootGroup.java @@ -0,0 +1,65 @@ +/******************************************************************************* + * Copyright (c) 2013 + * + * This File is part of NGECore2. + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see . + * + * Using NGEngine to work with NGECore2 is making a combined work based on NGEngine. + * Therefore all terms and conditions of the GNU Lesser General Public License cover the combination. + ******************************************************************************/ +package resources.loot; + +import java.io.Serializable; + +/** + * @author Charon + */ + +public class LootGroup implements Serializable { + + private static final long serialVersionUID = 1L; + + private String[] lootPoolNames; + private double[] lootPoolChances; + private double lootGroupChance; + + public LootGroup(){ + + } + + public LootGroup(String[] lootPoolNames, double[] lootPoolChances, double lootGroupChance){ + this.lootPoolNames = lootPoolNames; + this.lootPoolChances = lootPoolChances; + this.lootGroupChance = lootGroupChance; + } + + public void addLootData(String[] lootPoolNames, double[] lootPoolChances, double lootGroupChance){ + this.lootPoolNames = lootPoolNames; + this.lootPoolChances = lootPoolChances; + this.lootGroupChance = lootGroupChance; + } + + public String[] getLootPoolNames() { + return lootPoolNames; + } + + public double[] getLootPoolChances() { + return lootPoolChances; + } + + public double getLootGroupChance() { + return lootGroupChance; + } +} diff --git a/src/resources/loot/LootPool.java b/src/resources/loot/LootPool.java new file mode 100644 index 00000000..83576a16 --- /dev/null +++ b/src/resources/loot/LootPool.java @@ -0,0 +1,33 @@ +/******************************************************************************* + * Copyright (c) 2013 + * + * This File is part of NGECore2. + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see . + * + * Using NGEngine to work with NGECore2 is making a combined work based on NGEngine. + * Therefore all terms and conditions of the GNU Lesser General Public License cover the combination. + ******************************************************************************/ +package resources.loot; + +/** + * @author Charon + */ + +public class LootPool { + + public LootPool(){ + + } +} diff --git a/src/resources/loot/LootRollSession.java b/src/resources/loot/LootRollSession.java new file mode 100644 index 00000000..b20f1030 --- /dev/null +++ b/src/resources/loot/LootRollSession.java @@ -0,0 +1,192 @@ +/******************************************************************************* + * Copyright (c) 2013 + * + * This File is part of NGECore2. + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see . + * + * Using NGEngine to work with NGECore2 is making a combined work based on NGEngine. + * Therefore all terms and conditions of the GNU Lesser General Public License cover the combination. + ******************************************************************************/ +package resources.loot; + +import java.util.ArrayList; +import java.util.List; + +import engine.resources.scene.Planet; +import main.NGECore; +import resources.objects.creature.CreatureObject; +import resources.objects.group.GroupObject; +import resources.objects.tangible.TangibleObject; + +/** + * @author Charon + */ + +public class LootRollSession { + + private String SessionID; // leaderName-SystemTime + private boolean sessionValid; + private GroupObject playerGroup; + private CreatureObject requester; + private List droppedItems; + private Planet sessionPlanet; + private List errorMessages; + private int sessionLootMode; + private boolean allowRareLoot; + private boolean increasedRLSChance; + private int lootedObjectLevel=0; + private int lootedObjectDifficulty=0; + + public LootRollSession() + { + droppedItems = new ArrayList(); + errorMessages = new ArrayList(); + } + + public LootRollSession(CreatureObject requester, TangibleObject lootedObject){ + + long requesterGroupId = requester.getGroupId(); + if (requesterGroupId>0){ + this.playerGroup = (GroupObject) NGECore.getInstance().objectService.getObject(requesterGroupId); + this.SessionID = playerGroup.getGroupLeader().getCustomName()+"-"+System.currentTimeMillis(); + + } else { + this.SessionID = requester.getCustomName()+"-"+System.currentTimeMillis(); + } + + if (lootedObject instanceof CreatureObject){ + CreatureObject lootedCreature = (CreatureObject)lootedObject; + lootedObjectLevel = lootedCreature.getLevel(); + lootedObjectDifficulty = lootedCreature.getDifficulty(); + // Exclude rare loot depending on creature level + // For groups maybe average CL? + if (requester.getLevel()-lootedCreature.getLevel()<=6){ + this.setAllowRareLoot(true); + } + } + + // Group situation + if (this.getPlayerGroup()!=null){ + if (this.getPlayerGroup().getMemberList().size()>=4) + this.setIncreasedRLSChance(true); + } + + // Possible AFKer check here + + + droppedItems = new ArrayList(); + errorMessages = new ArrayList(); + sessionPlanet = requester.getPlanet(); + this.requester = requester; + allowRareLoot = false; + } + + public List getDroppedItems() { + return droppedItems; + } + + public void addDroppedItem(TangibleObject droppedItem) { + this.droppedItems.add(droppedItem); + } + + public String getSessionID() { + return SessionID; + } + + public void setSessionID(String sessionID) { + SessionID = sessionID; + } + + public void generateSessionID(String sessionID) { + SessionID = sessionID; + } + + public Planet getSessionPlanet() { + return sessionPlanet; + } + + public void setSessionPlanet(Planet planet) + { + this.sessionPlanet = planet; + } + + public List getErrorMessages() { + return errorMessages; + } + + public void addErrorMessage(String errorMessage) { + this.errorMessages.add(errorMessage); + } + + public int getSessionLootMode() { + return sessionLootMode; + } + + public void setSessionLootMode(int sessionLootMode) { + this.sessionLootMode = sessionLootMode; + } + + public boolean isAllowRareLoot() { + return allowRareLoot; + } + + public void setAllowRareLoot(boolean allowRareLoot) { + this.allowRareLoot = allowRareLoot; + } + + public GroupObject getPlayerGroup() { + return playerGroup; + } + + public boolean isIncreasedRLSChance() { + return increasedRLSChance; + } + + public void setIncreasedRLSChance(boolean increasedRLSChance) { + this.increasedRLSChance = increasedRLSChance; + } + + public boolean isSessionValid() { + return sessionValid; + } + + public void setSessionValid(boolean sessionValid) { + this.sessionValid = sessionValid; + } + + public CreatureObject getRequester() { + return requester; + } + + public void setRequester(CreatureObject requester) { + this.requester = requester; + } + + public int getLootedObjectLevel() { + return lootedObjectLevel; + } + + public void setLootedObjectLevel(int lootedObjectLevel) { + this.lootedObjectLevel = lootedObjectLevel; + } + + public int getLootedObjectDifficulty() { + return lootedObjectDifficulty; + } + + public void setLootedObjectDifficulty(int lootedObjectDifficulty) { + this.lootedObjectDifficulty = lootedObjectDifficulty; + } +} diff --git a/src/resources/objectives/BountyMissionObjective.java b/src/resources/objectives/BountyMissionObjective.java new file mode 100644 index 00000000..a2d81812 --- /dev/null +++ b/src/resources/objectives/BountyMissionObjective.java @@ -0,0 +1,389 @@ +/******************************************************************************* + * Copyright (c) 2013 + * + * This File is part of NGECore2. + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see . + * + * Using NGEngine to work with NGECore2 is making a combined work based on NGEngine. + * Therefore all terms and conditions of the GNU Lesser General Public License cover the combination. + ******************************************************************************/ +package resources.objectives; + +import java.util.Random; +import java.util.concurrent.Executors; +import java.util.concurrent.ScheduledFuture; +import java.util.concurrent.TimeUnit; +import java.util.concurrent.atomic.AtomicInteger; + +import protocol.swg.CommPlayerMessage; +import protocol.swg.PlayClientEffectLocMessage; +import engine.resources.common.CRC; +import engine.resources.container.Traverser; +import engine.resources.objects.SWGObject; +import engine.resources.scene.Point3D; +import engine.resources.scene.Quaternion; +import main.NGECore; +import resources.common.BountyListItem; +import resources.common.OutOfBand; +import resources.common.SpawnPoint; +import resources.datatables.DisplayType; +import resources.objects.creature.CreatureObject; +import resources.objects.mission.MissionObject; +import resources.objects.waypoint.WaypointObject; +import services.chat.Mail; +import services.mission.MissionObjective; + +public class BountyMissionObjective extends MissionObjective { + + private static final long serialVersionUID = 1L; + + private Point3D lastKnownLocation; + private String lastKnownPlanet; + private ScheduledFuture seekerUpdates; + private ScheduledFuture probeSummonTask; + private long markObjId; + + private boolean seekerActive = false; + private String seekerPlanet = ""; + private boolean arakydActive = false; + + private Point3D arakydLandingLocation; + + ////// Droids in the world - Set Posture to 8 to launch them. ////// + // Seeker Droids: object/creature/npc/droid/crafted/shared_probe_droid_advanced.iff + // Arakyd Droids: object/creature/npc/droid/shared_imperial_probot_bounty.iff + + ///// Inventory form ///// + // Seeker Droids: object/tangible/mission/shared_mission_bounty_droid_seeker.iff + // Arakyd Droids: object/tangible/mission/shared_mission_bounty_droid_probot.iff + public BountyMissionObjective(MissionObject parent) { + super(parent); + } + + @Override + public void activate(NGECore core, CreatureObject player) { + if (isActivated()) + return; + + BountyListItem bountyTarget = core.missionService.getBountyListItem(getMissionObject().getBountyMarkId()); + + if (bountyTarget == null) { + core.missionService.handleMissionAbort(player, getMissionObject()); + player.sendSystemMessage("@bountyhunter:null_mission", DisplayType.Broadcast); + return; + } + + bountyTarget.addBountyHunter(player.getObjectID()); + + setMarkObjId(bountyTarget.getObjectID()); + + String message = "@mission/mission_bounty_informant:target_hard_" + Integer.toString(new Random().nextInt(4) + 1); + + CommPlayerMessage comm = new CommPlayerMessage(player.getObjectId(), OutOfBand.ProsePackage(message)); + comm.setTime(2000); + switch (bountyTarget.getFaction()) { + case "neutral": + comm.setModel("object/mobile/shared_dressed_assassin_mission_giver_0" + Integer.toString(new Random().nextInt(2) + 1) + ".iff"); + break; + case "rebel": + comm.setModel("object/mobile/shared_dressed_assassin_mission_giver_imp_hum_m_0" + Integer.toString(new Random().nextInt(2) + 1) + ".iff"); + break; + case "imperial": + comm.setModel("object/mobile/shared_dressed_assassin_mission_giver_reb_0" + Integer.toString(new Random().nextInt(2) + 1) + ".iff"); + break; + } //Could also be: object/mobile/shared_bounty_guild_bounty_check.iff || object/mobile/shared_bounty_check_fugitive_x.iff + + player.getClient().getSession().write(comm.serialize()); + + player.getPlayerObject().setBountyMissionId(getMissionObject().getObjectId()); + + player.updatePvpStatus(); + } + + + @Override + public void complete(NGECore core, CreatureObject player) { + BountyListItem bounty = core.missionService.getBountyListItem(markObjId); + + if (bounty == null) + return; + + int reward = getMissionObject().getCreditReward(); + + if (bounty.getCreditReward() - reward == 0) + player.addBankCredits(reward); + else + player.addBankCredits(bounty.getCreditReward()); + + bounty.removeBountyHunter(player.getObjectId()); + + notifyBountyPlacers(core, player, bounty); + + clearActiveMissions(core, bounty); + + core.missionService.removeBounty(markObjId); + + player.getPlayerObject().setBountyMissionId(0); + player.updatePvpStatus(); + + cancelLocationUpdates(); + core.missionService.handleMissionAbort(player, getMissionObject(), true); // Do not call abort method + } + + @Override + public void abort(NGECore core, CreatureObject player) { + cancelLocationUpdates(); + + BountyListItem bounty = core.missionService.getBountyListItem(markObjId); + + if (bounty == null) + return; + + bounty.removeBountyHunter(player.getObjectId()); + player.getPlayerObject().setBountyMissionId(0); + player.updatePvpStatus(); + } + + @Override + public void update(NGECore core, CreatureObject player) { + + } + + public void notifyBountyPlacers(NGECore core, CreatureObject player, BountyListItem bounty) { + + String message = "Dear Sir or Madam,\nThe Galactic Bounty Network wishes to inform you that the bounty that you placed on the head of "+ bounty.getName() + + " has been claimed by the bounty hunter, " + player.getCustomName() + ".\nThank you for your patronage, and have a nice day."; + + bounty.getBountyPlacers().forEach(id -> { + Mail bountyMail = new Mail(); + bountyMail.setMailId(core.chatService.generateMailId()); + bountyMail.setTimeStamp((int) (new java.util.Date().getTime() / 1000)); + bountyMail.setRecieverId(id); + bountyMail.setSubject("Bounty Claim Notification"); + bountyMail.setSenderName("Galactic Bounty Network"); + bountyMail.setMessage(message); + bountyMail.setStatus(Mail.NEW); + + core.chatService.storePersistentMessage(bountyMail); + + SWGObject obj = core.objectService.getObject(id); + if (obj != null) + core.chatService.sendPersistentMessageHeader(obj.getClient(), bountyMail); + }); + } + + public void clearActiveMissions(NGECore core, BountyListItem bounty) { + bounty.getAssignedHunters().forEach(id -> { + + CreatureObject hunter = (CreatureObject) core.objectService.getObject(id); + + if (hunter != null) { + hunter.sendSystemMessage(OutOfBand.ProsePackage("@bounty_hunter:bounty_failed_hunter", "TT", getMissionObject().getGrandparent().getObjectId()), DisplayType.Broadcast); + hunter.getSlottedObject("datapad").viewChildren(hunter, true, false, new Traverser() { + @Override + public void process(SWGObject item) { + if (item instanceof MissionObject) { + MissionObject mission = (MissionObject) item; + if (mission.getMissionType().equals("bounty")) { + core.missionService.handleMissionAbort(hunter, mission); + } + } + } + }); + } + }); + } + + public void checkBountyActiveStatus(NGECore core) { + BountyListItem bountyTarget = core.missionService.getBountyListItem(getMissionObject().getBountyMarkId()); + CreatureObject player = (CreatureObject) getMissionObject().getGrandparent(); + + if (bountyTarget == null || !bountyTarget.getAssignedHunters().contains(player.getObjectId())) { + player.sendSystemMessage("@bounty_hunter:bounty_incomplete", DisplayType.Broadcast); + core.missionService.handleMissionAbort(player, getMissionObject(), true); + } + } + + public void handleProbeDroidSummon(NGECore core, final CreatureObject actor) { + + actor.sendSystemMessage("@mission/mission_generic:probe_droid_launch_prep", DisplayType.Broadcast); + AtomicInteger countDown = new AtomicInteger(); + + ScheduledFuture summon = Executors.newScheduledThreadPool(1).scheduleAtFixedRate(new Runnable() { + + @Override + public void run() { + switch(countDown.incrementAndGet()) { + case 15: + actor.sendSystemMessage("@mission/mission_generic:probe_droid_arrival_5", DisplayType.Broadcast); + break; + case 16: + actor.sendSystemMessage("@mission/mission_generic:probe_droid_arrival_4", DisplayType.Broadcast); + break; + case 17: + actor.sendSystemMessage("@mission/mission_generic:probe_droid_arrival_3", DisplayType.Broadcast); + break; + case 18: + actor.sendSystemMessage("@mission/mission_generic:probe_droid_arrival_2", DisplayType.Broadcast); + break; + case 19: + actor.sendSystemMessage("@mission/mission_generic:probe_droid_arrival_1", DisplayType.Broadcast); + arakydLandingLocation = SpawnPoint.getRandomPosition(actor.getPosition(), 50, 120, actor.getPlanetId()); + PlayClientEffectLocMessage effectMsg = new PlayClientEffectLocMessage("clienteffect/probot_delivery.cef", actor.getPlanet().getName(), arakydLandingLocation); + actor.getClient().getSession().write(effectMsg.serialize()); + break; + case 20: + break; + case 23: + Quaternion ori = actor.getOrientation(); + + CreatureObject probe = (CreatureObject) NGECore.getInstance().staticService.spawnObject("object/creature/npc/droid/shared_imperial_probot_bounty.iff", + actor.getPlanet().getName(), 0, arakydLandingLocation.x, arakydLandingLocation.y, arakydLandingLocation.z, ori.y, ori.w); + + // TODO: Move probe to the player. + + probe.setAttachment("probotRequester", actor.getObjectID()); + probe.setAttachment("attachedMission", getMissionObject().getObjectID()); + actor.sendSystemMessage("@mission/mission_generic:probe_droid_arrival", DisplayType.Broadcast); + probeSummonTask.cancel(false); + break; + } + } + }, 1, 1, TimeUnit.SECONDS); + + probeSummonTask = summon; + + } + + public void beginSeekerUpdates(NGECore core, CreatureObject actor) { + + if (!seekerActive) { + setSeekerActive(true); + setSeekerPlanet(actor.getPlanet().getName()); + + AtomicInteger updates = new AtomicInteger(); + ScheduledFuture updater = Executors.newScheduledThreadPool(1).scheduleAtFixedRate(new Runnable() { + + @Override + public void run() { + + MissionObject mission = getMissionObject(); + SWGObject target = core.objectService.getObject(markObjId); + + if (target == null) { + actor.sendSystemMessage("@mission/mission_generic:player_target_inactive", DisplayType.Broadcast); + cancelLocationUpdates(); + return; + } else if (target.getPlanet().getName() != getSeekerPlanet()) { + actor.sendSystemMessage("@mission/mission_generic:target_not_on_planet", DisplayType.Broadcast); + cancelLocationUpdates(); + return; + } else { + + if (updates.get() >= 6) { + actor.sendSystemMessage("@mission/mission_generic:target_track_lost", DisplayType.Broadcast); + cancelLocationUpdates(); + return; + } + + WaypointObject missionWp = mission.getAttachedWaypoint(); + + if (missionWp == null) { + WaypointObject waypoint = (WaypointObject) NGECore.getInstance().objectService.createObject("object/waypoint/shared_waypoint.iff", target.getPlanet(), + target.getWorldPosition().x, target.getWorldPosition().z, target.getWorldPosition().y); + waypoint.setActive(true); + waypoint.setColor(WaypointObject.ORANGE); + waypoint.setName(getMissionObject().getMissionTargetName()); + waypoint.setPlanetCRC(CRC.StringtoCRC(target.getPlanet().getName())); + waypoint.setStringAttribute("", ""); + getMissionObject().setAttachedWaypoint(waypoint); + } else { + missionWp.setPosition(target.getWorldPosition()); + mission.setAttachedWaypoint(missionWp); + } + actor.sendSystemMessage("@mission/mission_generic:target_location_updated_ground", DisplayType.Broadcast); + actor.sendSystemMessage("@mission/mission_generic:target_continue_tracking", DisplayType.Broadcast); + updates.getAndIncrement(); + } + } + }, 60, 15, TimeUnit.SECONDS); + + seekerUpdates = updater; + } + } + + public void beginArakydUpdate(final CreatureObject actor) { + arakydActive = true; + Executors.newScheduledThreadPool(1).schedule(() -> { + + int number = new Random().nextInt(100); + + // Effectively a 16% chance of failing. The failure type is calculated by subtracting 10 from the number received. + if (number <= 16 && number != 0) { actor.sendSystemMessage("@mission/mission_generic:target_not_found_" + String.valueOf(10 - number), (byte) 0); return; } + + SWGObject target = NGECore.getInstance().objectService.getObject(markObjId); + if (target == null) { actor.sendSystemMessage("@mission/mission_generic:player_target_inactive", DisplayType.Broadcast); } + + WaypointObject waypoint = (WaypointObject) NGECore.getInstance().objectService.createObject("object/waypoint/shared_waypoint.iff", target.getPlanet(), + target.getWorldPosition().x, target.getWorldPosition().z, target.getWorldPosition().y); + waypoint.setActive(true); + waypoint.setColor(WaypointObject.ORANGE); + waypoint.setName(getMissionObject().getMissionTargetName()); + waypoint.setPlanetCRC(CRC.StringtoCRC(target.getPlanet().getName())); + waypoint.setStringAttribute("", ""); + getMissionObject().setAttachedWaypoint(waypoint); + + actor.sendSystemMessage("@mission/mission_generic:target_location_updated_ground", DisplayType.Broadcast); + actor.sendSystemMessage("@mission/mission_generic:target_located_" + target.getPlanet().getName(), DisplayType.Broadcast); + + }, 180, TimeUnit.SECONDS); + } + + public void cancelLocationUpdates() { + if (seekerUpdates != null) + seekerUpdates.cancel(true); + if (probeSummonTask != null) + probeSummonTask.cancel(true); + + setSeekerActive(false); + setSeekerPlanet(""); + setArakydActive(false); + } + + public Point3D getLastKnownLocation() { return lastKnownLocation; } + + public void setLastKnownLocation(Point3D lastKnownLocation) { this.lastKnownLocation = lastKnownLocation; } + + public long getMarkObjId() { return markObjId; } + + public void setMarkObjId(long markObjId) { this.markObjId = markObjId; } + + public String getLastKnownPlanet() { return lastKnownPlanet; } + + public void setLastKnownPlanet(String lastKnownPlanet) { this.lastKnownPlanet = lastKnownPlanet; } + + public boolean isSeekerActive() { return seekerActive; } + + public void setSeekerActive(boolean seekerActive) { this.seekerActive = seekerActive; } + + public boolean isArakydActive() { return arakydActive; } + + public void setArakydActive(boolean araykdActive) { this.arakydActive = araykdActive; } + + public String getSeekerPlanet() { return seekerPlanet; } + + public void setSeekerPlanet(String seekerPlanet) { this.seekerPlanet = seekerPlanet; } + +} diff --git a/src/resources/objectives/DeliveryMissionObjective.java b/src/resources/objectives/DeliveryMissionObjective.java new file mode 100644 index 00000000..96f9b583 --- /dev/null +++ b/src/resources/objectives/DeliveryMissionObjective.java @@ -0,0 +1,185 @@ +/******************************************************************************* + * Copyright (c) 2013 + * + * This File is part of NGECore2. + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see . + * + * Using NGEngine to work with NGECore2 is making a combined work based on NGEngine. + * Therefore all terms and conditions of the GNU Lesser General Public License cover the combination. + ******************************************************************************/ +package resources.objectives; + +import engine.resources.scene.Point3D; +import main.NGECore; +import resources.common.OutOfBand; +import resources.datatables.DisplayType; +import resources.objects.creature.CreatureObject; +import resources.objects.mission.MissionObject; +import resources.objects.tangible.TangibleObject; +import resources.objects.waypoint.WaypointObject; +import services.mission.MissionObjective; + +public class DeliveryMissionObjective extends MissionObjective { + + private static final long serialVersionUID = 1L; + + private TangibleObject deliveryObject; + private CreatureObject missionGiver; + private CreatureObject dropOffNpc; + + public DeliveryMissionObjective(MissionObject parent) { + super(parent); + } + + @Override + public void activate(NGECore core, CreatureObject player) { + + if (isActivated()) + return; + + String template = "object/mobile/shared_dressed_commoner_tatooine_sullustan_male_06.iff"; + + Point3D startLoc = parent.getStartLocation(); + Point3D destination = parent.getDestination(); + + // TODO: Randomize this process. + CreatureObject missionGiver = (CreatureObject) core.staticService.spawnObject(template, parent.getPlanet().name, 0, startLoc.x, startLoc.y, startLoc.z, 0, 1); + if (missionGiver == null) + return; + + missionGiver.setCustomName("a commoner"); + missionGiver.setAttachment("conversationFile", "missions/deliver"); + missionGiver.setAttachment("radial_filename", "object/conversation"); + missionGiver.setAttachment("assignedMission", getMissionObject().getObjectId()); + missionGiver.setOptionsBitmask(264); + setMissionGiver(missionGiver); + + CreatureObject dropOffNpc = (CreatureObject) core.staticService.spawnObject(template, parent.getPlanet().name, 0, destination.x, destination.y, destination.z, 0, 1); + if (dropOffNpc == null) + return; + + dropOffNpc.setCustomName("a commoner"); + dropOffNpc.setAttachment("conversationFile", "missions/deliver"); + dropOffNpc.setAttachment("radial_filename", "object/conversation"); + dropOffNpc.setAttachment("assignedMission", getMissionObject().getObjectId()); + dropOffNpc.setOptionsBitmask(264); + setDropOffNpc(dropOffNpc); + + if (getObjectivePhase() == 0) { + WaypointObject waypoint = (WaypointObject) core.objectService.createObject("object/waypoint/shared_waypoint.iff", parent.getPlanet()); + waypoint.setPosition(startLoc); + waypoint.setName("@mission/" + parent.getMissionTitle() + ":" + "m" + parent.getMissionId() + "t"); + waypoint.setColor(WaypointObject.ORANGE); + waypoint.setActive(true); + getMissionObject().setAttachedWaypoint(waypoint); + } else if (getObjectivePhase() == 1) { + WaypointObject waypoint = (WaypointObject) core.objectService.createObject("object/waypoint/shared_waypoint.iff", parent.getPlanet()); + waypoint.setPosition(parent.getDestination()); + waypoint.setName("@mission/" + parent.getMissionTitle() + ":" + "m" + parent.getMissionId() + "t"); + waypoint.setColor(WaypointObject.ORANGE); + waypoint.setActive(true); + getMissionObject().setAttachedWaypoint(waypoint); + } + + setActive(true); + } + + @Override + public void complete(NGECore core, CreatureObject player) { + + int reward = getMissionObject().getCreditReward(); + + player.addBankCredits(reward); + + player.sendSystemMessage(OutOfBand.ProsePackage("@mission/mission_generic:success_w_amount", reward), DisplayType.Broadcast); + + abort(core, player); + + core.objectService.destroyObject(getMissionObject()); + } + + @Override + public void abort(NGECore core, CreatureObject player) { + if (deliveryObject != null) + core.objectService.destroyObject(deliveryObject.getObjectId()); + + if (missionGiver != null) + core.objectService.destroyObject(missionGiver, 360); + + if (dropOffNpc != null) + core.objectService.destroyObject(dropOffNpc, 360); + } + + @Override + public void update(NGECore core, CreatureObject player) { + + setObjectivePhase(getObjectivePhase() + 1); + + switch(getObjectivePhase()) { + case 1: + WaypointObject waypoint = (WaypointObject) core.objectService.createObject("object/waypoint/shared_waypoint.iff", parent.getPlanet()); + waypoint.setPosition(parent.getDestination()); + waypoint.setName("@mission/" + parent.getMissionTitle() + ":" + "m" + parent.getMissionId() + "t"); + waypoint.setColor(WaypointObject.ORANGE); + waypoint.setActive(true); + getMissionObject().setMissionTargetName("Dropoff Location"); + getMissionObject().setAttachedWaypoint(waypoint); + System.out.println("Waypoint set to " + parent.getDestination().x + " and " + parent.getDestination().z); + break; + case 2: + WaypointObject returnWp = (WaypointObject) core.objectService.createObject("object/waypoint/shared_waypoint.iff", parent.getPlanet()); + returnWp.setPosition(parent.getStartLocation()); + returnWp.setName("@mission/" + parent.getMissionTitle() + ":" + "m" + parent.getMissionId() + "t"); + returnWp.setColor(WaypointObject.ORANGE); + returnWp.setActive(true); + getMissionObject().setMissionTargetName("Return"); + getMissionObject().setAttachedWaypoint(returnWp); + break; + } + } + + public boolean createDeliveryItem(NGECore core, CreatureObject player) { + + if (player == null) + return false; + + TangibleObject inventory = (TangibleObject) player.getSlottedObject("inventory"); + + if (inventory == null) + return false; + + TangibleObject deliveryObject = (TangibleObject) core.objectService.createObject("object/tangible/mission/shared_mission_datadisk.iff", getMissionObject().getGrandparent().getPlanet()); + + if (deliveryObject != null && inventory.add(deliveryObject)) { + setDeliveryObject(deliveryObject); + return true; + } + else + return false; + } + + public TangibleObject getDeliveryObject() { return deliveryObject; } + + public void setDeliveryObject(TangibleObject object) { this.deliveryObject = object; } + + public CreatureObject getMissionGiver() { return missionGiver; } + + public void setMissionGiver(CreatureObject missionGiver) { this.missionGiver = missionGiver; } + + public CreatureObject getDropOffNpc() { return dropOffNpc; } + + public void setDropOffNpc(CreatureObject dropOffNpc) { this.dropOffNpc = dropOffNpc; } + +} diff --git a/src/resources/objectives/DestroyMissionObjective.java b/src/resources/objectives/DestroyMissionObjective.java new file mode 100644 index 00000000..442e4384 --- /dev/null +++ b/src/resources/objectives/DestroyMissionObjective.java @@ -0,0 +1,62 @@ +/******************************************************************************* + * Copyright (c) 2013 + * + * This File is part of NGECore2. + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see . + * + * Using NGEngine to work with NGECore2 is making a combined work based on NGEngine. + * Therefore all terms and conditions of the GNU Lesser General Public License cover the combination. + ******************************************************************************/ +package resources.objectives; + +import main.NGECore; +import resources.objects.creature.CreatureObject; +import resources.objects.mission.MissionObject; +import services.mission.MissionObjective; + +public class DestroyMissionObjective extends MissionObjective { + + private static final long serialVersionUID = 1L; + + public DestroyMissionObjective(MissionObject parent) { + super(parent); + } + + @Override + public void activate(NGECore core, CreatureObject player) { + // TODO Auto-generated method stub + + } + + @Override + public void complete(NGECore core, CreatureObject player) { + // TODO Auto-generated method stub + + } + + @Override + public void abort(NGECore core, CreatureObject player) { + // TODO Auto-generated method stub + + } + + @Override + public void update(NGECore core, CreatureObject player) { + // TODO Auto-generated method stub + + } + + +} diff --git a/src/resources/objectives/SurveyMissionObjective.java b/src/resources/objectives/SurveyMissionObjective.java new file mode 100644 index 00000000..025b15bf --- /dev/null +++ b/src/resources/objectives/SurveyMissionObjective.java @@ -0,0 +1,83 @@ +/******************************************************************************* + * Copyright (c) 2013 + * + * This File is part of NGECore2. + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see . + * + * Using NGEngine to work with NGECore2 is making a combined work based on NGEngine. + * Therefore all terms and conditions of the GNU Lesser General Public License cover the combination. + ******************************************************************************/ +package resources.objectives; + +import java.util.concurrent.atomic.AtomicInteger; + +import engine.resources.scene.Point3D; +import main.NGECore; +import resources.datatables.DisplayType; +import resources.objects.creature.CreatureObject; +import resources.objects.mission.MissionObject; +import services.mission.MissionObjective; + +public class SurveyMissionObjective extends MissionObjective{ + + private static final long serialVersionUID = 1L; + + private String resourceFamily; + private Point3D pickupLocation; + private String pickupPlanet; + private int surveyMissionNum; + + public SurveyMissionObjective(MissionObject parent) { + super(parent); + } + + @Override + public void activate(NGECore core, CreatureObject player) { + pickupPlanet = player.getPlanet().getName(); + pickupLocation = player.getPosition(); + resourceFamily = getMissionObject().getMissionTargetName(); + + // This way will allow 2 survey missions at a time. + AtomicInteger number = new AtomicInteger(); + player.getSlottedObject("datapad").viewChildren(player, true, false, (obj) -> { + if (obj instanceof MissionObject && ((MissionObject) obj).getMissionType().equals("survey")) { number.getAndIncrement(); } + }); + player.setAttachment("surveyMission" + Integer.valueOf(number.get()), getMissionObject().getObjectID()); + surveyMissionNum = number.get(); + + player.sendSystemMessage("@mission/mission_generic:survey_start", DisplayType.Broadcast); + } + + @Override + public void complete(NGECore core, CreatureObject player) { + player.addBankCredits(getMissionObject().getCreditReward()); + player.setAttachment("surveyMission" + Integer.valueOf(surveyMissionNum), 0); + } + + @Override + public void abort(NGECore core, CreatureObject player) { + player.setAttachment("surveyMission" + Integer.valueOf(surveyMissionNum), 0); + } + + @Override + public void update(NGECore core, CreatureObject player) { + } + + public String getResourceFamily() { return resourceFamily; } + + public Point3D getPickupLocation() { return pickupLocation; } + + public String getPickupPlanet() { return pickupPlanet; } +} diff --git a/src/resources/objects/ObjectMessageBuilder.java b/src/resources/objects/ObjectMessageBuilder.java index b422edd9..20a294c8 100644 --- a/src/resources/objects/ObjectMessageBuilder.java +++ b/src/resources/objects/ObjectMessageBuilder.java @@ -24,25 +24,112 @@ package resources.objects; import java.io.UnsupportedEncodingException; import java.nio.ByteBuffer; import java.nio.ByteOrder; +import java.util.Map; import org.apache.mina.core.buffer.IoBuffer; import org.apache.mina.core.buffer.SimpleBufferAllocator; -import com.sleepycat.persist.model.NotPersistent; -import com.sleepycat.persist.model.Persistent; - import resources.common.Opcodes; - +import engine.resources.common.StringUtilities; +import engine.resources.objects.Baseline; +import engine.resources.objects.Builder; import engine.resources.objects.SWGObject; -@Persistent -public abstract class ObjectMessageBuilder { +public class ObjectMessageBuilder { + protected SWGObject object; - public SWGObject object; - @NotPersistent - public SimpleBufferAllocator bufferPool = new SimpleBufferAllocator(); + public ObjectMessageBuilder(SWGObject object) { + this.object = object; + } + + public ObjectMessageBuilder() { + } + + public void buildBaseline1(Map baselineBuilders, Map deltaBuilders) { + /* + baselineBuilders.put(5, new Builder { + public byte[] build() { + IoBuffer = Baseline.createBuffer(2); + buffer.putShort((short) 27); + return buffer.array(); + } + }); + + deltaBuilders.put(7, new Builder { + public byte[] build() { + IoBuffer = Baseline.createBuffer(4); + buffer.putInt(27); + return buffer.array(); + } + }); + */ + } + + public void buildBaseline3(Map baselineBuilders, Map deltaBuilders) { + + } + + public void buildBaseline4(Map baselineBuilders, Map deltaBuilders) { + + } + + public void buildBaseline6(Map baselineBuilders, Map deltaBuilders) { + + } + + public void buildBaseline7(Map baselineBuilders, Map deltaBuilders) { + + } + + public void buildBaseline8(Map baselineBuilders, Map deltaBuilders) { + + } + + public void buildBaseline9(Map baselineBuilders, Map deltaBuilders) { + + } + + public IoBuffer createBuffer(int size, boolean autoSize) { + return createBuffer(size).setAutoExpand(autoSize); + } + + public IoBuffer createBuffer(int size) { + return Baseline.createBuffer(size); + } + + protected byte getBoolean(boolean variable) { + return Baseline.getBoolean(variable); + } + + protected String getAsciiString(ByteBuffer buffer) { + return StringUtilities.getAsciiString(buffer); + } + + protected String getUnicodeString(ByteBuffer buffer) { + return StringUtilities.getUnicodeString(buffer); + } + + protected byte[] getAsciiString(String string) { + return StringUtilities.getAsciiString(string); + } + + protected byte[] getUnicodeString(String string) { + return StringUtilities.getUnicodeString(string); + } + + // Temporary for compatibility + public SimpleBufferAllocator bufferPool = new SimpleBufferAllocator(); + + public SWGObject getObject() { + return object; + } + + public void setObject(SWGObject object) { + this.object = object; + } + public IoBuffer createBaseline(String objectType, byte viewType, IoBuffer data, int size) { IoBuffer buffer = bufferPool.allocate(23 + size, false).order(ByteOrder.LITTLE_ENDIAN); @@ -63,7 +150,7 @@ public abstract class ObjectMessageBuilder { } public IoBuffer createDelta(String objectType, byte viewType, short updateCount, short updateType, IoBuffer data, int size) { - IoBuffer buffer = bufferPool.allocate(27 + size, false).order(ByteOrder.LITTLE_ENDIAN); + IoBuffer buffer = bufferPool.allocate(23 + size, false).order(ByteOrder.LITTLE_ENDIAN); buffer.putShort((short) 5); buffer.putInt(Opcodes.DeltasMessage); @@ -83,92 +170,11 @@ public abstract class ObjectMessageBuilder { return buffer; } - public IoBuffer createDelta(String objectType, byte viewType, short updateCount, IoBuffer data, int size) { - IoBuffer buffer = bufferPool.allocate(25 + size, false).order(ByteOrder.LITTLE_ENDIAN); - - buffer.putShort((short) 5); - buffer.putInt(Opcodes.DeltasMessage); - buffer.putLong(object.getObjectID()); - try { - buffer.put(reverse(objectType).getBytes("US-ASCII")); - } catch (UnsupportedEncodingException e) { - e.printStackTrace(); - } - buffer.put(viewType); - buffer.putInt(size); - buffer.putShort(updateCount); - buffer.put(data); - buffer.flip(); - - return buffer; - } - - public IoBuffer createDeltaObject(short updateType, IoBuffer data, int size) { - IoBuffer buffer = bufferPool.allocate(2 + size, false).order(ByteOrder.LITTLE_ENDIAN); - - buffer.putShort(updateType); - buffer.put(data.array()); - - return buffer; - } - - public SWGObject getObject() { return object; } - public void setObject(SWGObject object) { this.object = object; } - - public abstract void sendListDelta(byte viewType, short updateType, IoBuffer buffer); - - public abstract void sendBaselines(); - private String reverse(String reverseString) { if (reverseString.length() <= 1) return reverseString; return reverse(reverseString.substring(1, reverseString.length())) + reverseString.charAt(0); } - - protected String getAsciiString(ByteBuffer buffer) { return getString(buffer, "US-ASCII"); } - protected String getUnicodeString(ByteBuffer buffer) { return getString(buffer, "UTF-16LE"); } - protected byte[] getAsciiString(String string) { return getString(string, "US-ASCII"); } - protected byte[] getUnicodeString(String string) { return getString(string, "UTF-16LE"); } - private String getString(ByteBuffer buffer, String charFormat) { - String result; - int length; - if (charFormat == "UTF-16LE") - length = buffer.order(ByteOrder.LITTLE_ENDIAN).getInt(); - else - length = buffer.order(ByteOrder.LITTLE_ENDIAN).getShort(); - - int bufferPosition = buffer.position(); - try { - result = new String(buffer.array(), bufferPosition, length, charFormat); - } catch (UnsupportedEncodingException e) { - e.printStackTrace(); - return ""; - } - buffer.position(bufferPosition + length); - - return result; - } - - private byte[] getString(String string, String charFormat) { - ByteBuffer result; - int length = 2 + string.length(); - if (charFormat == "UTF-16LE") { - result = ByteBuffer.allocate(length * 2).order(ByteOrder.LITTLE_ENDIAN); - result.putInt(string.length()); - } - else { - result = ByteBuffer.allocate(length).order(ByteOrder.LITTLE_ENDIAN); - result.putShort((short)string.length()); - } - try { - result.put(string.getBytes(charFormat)); - } catch (UnsupportedEncodingException e) { - e.printStackTrace(); - return new byte[] { }; - } - return result.array(); - } - } diff --git a/src/resources/objects/SWGList.java b/src/resources/objects/SWGList.java index cbef0018..781a676d 100644 --- a/src/resources/objects/SWGList.java +++ b/src/resources/objects/SWGList.java @@ -21,62 +21,87 @@ ******************************************************************************/ package resources.objects; -import java.nio.ByteOrder; +import java.io.Serializable; import java.util.ArrayList; import java.util.Collection; +import java.util.Comparator; import java.util.Iterator; import java.util.List; import java.util.ListIterator; +import java.util.Spliterator; +import java.util.concurrent.CopyOnWriteArrayList; +import java.util.function.Consumer; +import java.util.function.Predicate; +import java.util.function.UnaryOperator; +import java.util.stream.Stream; import org.apache.mina.core.buffer.IoBuffer; +import org.python.google.common.collect.Lists; -import com.sleepycat.persist.model.NotPersistent; -import com.sleepycat.persist.model.Persistent; +import engine.resources.objects.Baseline; +import engine.resources.objects.Delta; +import engine.resources.objects.IDelta; +import engine.resources.objects.SWGObject; -/* A SWGList element MUST implement IListObject, or it will refuse to work with it */ +/* A SWGList element should extend Delta or implement IDelta */ -@Persistent -public class SWGList implements List { +public class SWGList implements List, Serializable { - private List list = new ArrayList(); - @NotPersistent - private int updateCounter = 1; - private ObjectMessageBuilder messageBuilder; + private static final long serialVersionUID = 1L; + + private List list = new CopyOnWriteArrayList(); + private transient int updateCounter = 0; private byte viewType; private short updateType; - @NotPersistent - protected final Object objectMutex = new Object(); + private boolean addByte; + protected transient Object objectMutex = new Object(); + private transient SWGObject object; public SWGList() { } - public SWGList(ObjectMessageBuilder messageBuilder, int viewType, int updateType) { - this.messageBuilder = messageBuilder; + public SWGList(SWGObject object, int viewType, int updateType, boolean addByte) { this.viewType = (byte) viewType; this.updateType = (short) updateType; + this.addByte = addByte; + this.object = object; } - @Override + public void init(SWGObject object) { + objectMutex = new Object(); + updateCounter = 0; + this.object = object; + + for (Object item : list) { + try { + if (item instanceof IDelta) { + item.getClass().getMethod("init", new Class[] { SWGObject.class }).invoke(item, new Object[] { object }); + } + } catch (Exception e) { + e.printStackTrace(); + } + } + } + public boolean add(E e) { synchronized(objectMutex) { - if (list.add(e) && e instanceof IListObject) { - queue(item(1, list.lastIndexOf(e), ((IListObject) e).getBytes(), true, true)); + if (valid(e) && list.add(e)) { + queue(item(1, list.lastIndexOf(e), Baseline.toBytes(e), true, true)); return true; - } + } + return false; } } - @Override public void add(int index, E element) { synchronized(objectMutex) { - if (element instanceof IListObject) { + if (valid(element)) { list.add(index, element); - queue(item(1, index, ((IListObject) element).getBytes(), true, true)); + queue(item(1, index, Baseline.toBytes(element), true, true)); } } } - @Override public boolean addAll(Collection c) { synchronized(objectMutex) { if (!c.isEmpty()) { @@ -84,9 +109,9 @@ public class SWGList implements List { boolean success = false; for (E element : c) { - if (element instanceof IListObject) { + if (valid(element)) { if (list.add(element)) { - buffer.add(item(1, list.lastIndexOf(element), ((IListObject) element).getBytes(), true, true)); + buffer.add(item(1, list.lastIndexOf(element), Baseline.toBytes(element), true, true)); success = true; } } else { @@ -105,16 +130,15 @@ public class SWGList implements List { } } - @Override public boolean addAll(int index, Collection c) { synchronized(objectMutex) { if (!c.isEmpty()) { List buffer = new ArrayList(); for (E element : c) { - if (element instanceof IListObject) { + if (valid(element)) { list.add(index, element); - buffer.add(item(1, index, ((IListObject) element).getBytes(), true, true)); + buffer.add(item(1, index, Baseline.toBytes(element), true, true)); index++; } else { return false; @@ -130,7 +154,6 @@ public class SWGList implements List { } } - @Override public void clear() { synchronized(objectMutex) { list.clear(); @@ -138,21 +161,22 @@ public class SWGList implements List { } } - @Override public boolean contains(Object o) { synchronized(objectMutex) { return list.contains(o); } } - @Override public boolean containsAll(Collection c) { synchronized(objectMutex) { return list.containsAll(c); } } - @Override + public void forEach(Consumer action) { + list.forEach(action); + } + public E get(int index) { synchronized(objectMutex) { return list.get(index); @@ -163,49 +187,48 @@ public class SWGList implements List { return list; } - @Override public int indexOf(Object o) { synchronized(objectMutex) { return list.indexOf(o); } } - @Override public boolean isEmpty() { synchronized(objectMutex) { return list.isEmpty(); } } - @Override public Iterator iterator() { synchronized(objectMutex) { return list.iterator(); } } - @Override public int lastIndexOf(Object o) { synchronized(objectMutex) { return list.lastIndexOf(o); } } - @Override public ListIterator listIterator() { synchronized(objectMutex) { return list.listIterator(); } } - @Override public ListIterator listIterator(int index) { synchronized(objectMutex) { return listIterator(index); } } - @Override + public Stream parallelStream() { + synchronized(objectMutex) { + return list.parallelStream(); + } + } + public boolean remove(Object o) { synchronized(objectMutex) { int index = list.indexOf(o); @@ -219,7 +242,6 @@ public class SWGList implements List { } } - @Override public E remove(int index) { synchronized(objectMutex) { E element = list.remove(index); @@ -230,7 +252,6 @@ public class SWGList implements List { } } - @Override public boolean removeAll(Collection c) { synchronized(objectMutex) { if (!c.isEmpty()) { @@ -258,20 +279,34 @@ public class SWGList implements List { } } - @Override + public void replaceAll(UnaryOperator operator) { + System.err.println("SWGList::sort: Not currently supported."); + } + public boolean retainAll(Collection c) { synchronized(objectMutex) { return list.retainAll(c); } } - @Override + public List reverseGet() { + synchronized(objectMutex) { + return Lists.reverse(list); + } + } + + public boolean removeIf(Predicate filter) { + synchronized(objectMutex) { + return false; + } + } + public E set(int index, E element) { synchronized(objectMutex) { - if (element instanceof IListObject) { + if (valid(element)) { E previousElement = list.set(index, element); - queue(item(2, index, ((IListObject) element).getBytes(), true, true)); + queue(item(2, index, Baseline.toBytes(element), true, true)); return previousElement; } @@ -286,10 +321,10 @@ public class SWGList implements List { if (!list.isEmpty()) { for (E element : list) { - if (element instanceof IListObject) { - IoBuffer buffer = messageBuilder.bufferPool.allocate((newListData.length + ((IListObject) element).getBytes().length), false).order(ByteOrder.LITTLE_ENDIAN); + if (valid(element)) { + IoBuffer buffer = Delta.createBuffer((newListData.length + Baseline.toBytes(element).length)); buffer.put(newListData); - buffer.put(((IListObject) element).getBytes()); + buffer.put(Baseline.toBytes(element)); newListData = buffer.array(); } else { return false; @@ -308,28 +343,42 @@ public class SWGList implements List { } } - @Override public int size() { synchronized(objectMutex) { return list.size(); } } - @Override + public void sort(Comparator c) { + synchronized(objectMutex) { + System.err.println("SWGList::sort: Not supported."); + } + } + + public Spliterator spliterator() { + synchronized(objectMutex) { + return list.spliterator(); + } + } + + public Stream stream() { + synchronized(objectMutex) { + return list.stream(); + } + } + public List subList(int fromIndex, int toIndex) { synchronized(objectMutex) { return list.subList(fromIndex, toIndex); } } - @Override public Object[] toArray() { synchronized(objectMutex) { return list.toArray(); } } - @Override public T[] toArray(T[] a) { synchronized(objectMutex) { return list.toArray(a); @@ -337,32 +386,74 @@ public class SWGList implements List { } public int getUpdateCounter() { - return updateCounter; + synchronized(objectMutex) { + return updateCounter; + } } public Object getMutex() { return objectMutex; } + public byte[] getBytes() { + synchronized(objectMutex) { + byte[] objects = { }; + int size = 0; + + for (Object o : list) { + byte[] object = Baseline.toBytes(o); + size += object.length; + + IoBuffer buffer = Delta.createBuffer(size); + buffer.put(objects); + if (addByte) buffer.put((byte) 0); + buffer.put(object); + buffer.flip(); + + objects = buffer.array(); + } + + IoBuffer buffer = Delta.createBuffer(8 + size); + buffer.putInt(list.size()); + buffer.putInt(updateCounter); + buffer.put(objects); + buffer.flip(); + + return buffer.array(); + } + } + + private boolean valid(Object o) { + if (o instanceof String || o instanceof Byte || o instanceof Short || + o instanceof Integer || o instanceof Float || o instanceof Long || + o instanceof IDelta) { + return true; + } else { + return false; + } + } + private byte[] item(int type, int index, byte[] data, boolean useIndex, boolean useData) { int size = 1 + ((useIndex) ? 2 : 0) + ((useData) ? data.length : 0); - - IoBuffer buffer = messageBuilder.bufferPool.allocate((size), false).order(ByteOrder.LITTLE_ENDIAN); + + IoBuffer buffer = Delta.createBuffer(size); buffer.put((byte) type); if (useIndex) buffer.putShort((short) index); if (useData) buffer.put(data); - + buffer.flip(); + updateCounter++; - + return buffer.array(); } private void queue(byte[] data) { - IoBuffer buffer = messageBuilder.bufferPool.allocate((data.length + 8), false).order(ByteOrder.LITTLE_ENDIAN); + IoBuffer buffer = Delta.createBuffer((data.length + 8)); buffer.putInt(1); buffer.putInt(updateCounter); buffer.put(data); - messageBuilder.sendListDelta(viewType, updateType, buffer); + buffer.flip(); + object.sendListDelta(viewType, updateType, buffer); } private void queue(List data) { @@ -372,12 +463,13 @@ public class SWGList implements List { size += queued.length; } - IoBuffer buffer = messageBuilder.bufferPool.allocate((size + 8), false).order(ByteOrder.LITTLE_ENDIAN); + IoBuffer buffer = Delta.createBuffer((size + 8)); buffer.putInt(data.size()); buffer.putInt(updateCounter); for (byte[] queued : data) buffer.put(queued); + buffer.flip(); - messageBuilder.sendListDelta(viewType, updateType, buffer); + object.sendListDelta(viewType, updateType, buffer); } } diff --git a/src/resources/objects/SWGMap.java b/src/resources/objects/SWGMap.java index d3485f93..7c4ecda8 100644 --- a/src/resources/objects/SWGMap.java +++ b/src/resources/objects/SWGMap.java @@ -21,57 +21,96 @@ ******************************************************************************/ package resources.objects; -import java.nio.ByteOrder; +import java.io.Serializable; import java.util.ArrayList; import java.util.Collection; import java.util.List; import java.util.Map; import java.util.Set; import java.util.TreeMap; -import java.util.Map.Entry; +import java.util.function.BiConsumer; +import java.util.function.BiFunction; +import java.util.function.Function; import org.apache.mina.core.buffer.IoBuffer; -import resources.common.StringUtilities; - -import com.sleepycat.persist.model.NotPersistent; import com.sleepycat.persist.model.Persistent; -@SuppressWarnings("unused") +import engine.resources.objects.Baseline; +import engine.resources.objects.Delta; +import engine.resources.objects.IDelta; +import engine.resources.objects.SWGObject; + +/* A SWGMap element should extend Delta or implement IDelta */ @Persistent -public class SWGMap implements Map { +public class SWGMap implements Map, Serializable { + private static final long serialVersionUID = 1L; private Map map = new TreeMap(); - @NotPersistent - private int updateCounter = 0; - private ObjectMessageBuilder messageBuilder; + private transient int updateCounter = 0; private byte viewType; private short updateType; - @NotPersistent - protected final Object objectMutex = new Object(); + private boolean addByte; + protected transient Object objectMutex = new Object(); + private transient SWGObject object; public SWGMap() { } - public SWGMap(ObjectMessageBuilder messageBuilder, int viewType, int updateType) { - this.messageBuilder = messageBuilder; + public SWGMap(SWGObject object, int viewType, int updateType, boolean addByte) { this.viewType = (byte) viewType; this.updateType = (short) updateType; + this.addByte = addByte; + this.object = object; } public SWGMap(Map m) { if (m instanceof SWGMap) { - this.messageBuilder = ((SWGMap) m).messageBuilder; + this.object = ((SWGMap) m).object; this.viewType = ((SWGMap) m).viewType; this.updateType = ((SWGMap) m).updateType; map.putAll(m); } } + public void init(SWGObject object) { + objectMutex = new Object(); + updateCounter = 0; + this.object = object; + + for (Object item : map.values()) { + try { + if (item instanceof IDelta) { + item.getClass().getMethod("init", new Class[] { SWGObject.class }).invoke(item, new Object[] { object }); + } + } catch (Exception e) { + e.printStackTrace(); + } + } + } + public void clear() { throw new UnsupportedOperationException(); } + public V computeIfAbsent(K key, Function mappingFunction) { + synchronized(objectMutex) { + return map.computeIfAbsent(key, mappingFunction); + } + } + + public V computeIfPresent(K key, BiFunction remappingFunction) { + synchronized(objectMutex) { + return map.computeIfPresent(key, remappingFunction); + } + } + + public V compute(K key, BiFunction remappingFunction) { + synchronized(objectMutex) { + return map.compute(key, remappingFunction); + } + } + public boolean containsKey(Object key) { synchronized(objectMutex) { return map.containsKey(key); @@ -90,12 +129,22 @@ public class SWGMap implements Map { } } + public void forEach(BiConsumer action) { + map.forEach(action); + } + public V get(Object key) { synchronized(objectMutex) { return map.get(key); } } + public V getOrDefault(Object key, V defaultValue) { + synchronized(objectMutex) { + return map.getOrDefault(key, defaultValue); + } + } + public boolean isEmpty() { synchronized(objectMutex) { return map.isEmpty(); @@ -108,21 +157,26 @@ public class SWGMap implements Map { } } + public V merge(K key, V value, BiFunction remappingFunction) { + System.err.println("SWGMap::merge: Not implemented."); + return null; + } + public V put(K key, V value) { synchronized(objectMutex) { - if ((key instanceof String || key instanceof Byte || key instanceof Short || - key instanceof Integer || key instanceof Float ||key instanceof Long) && - value instanceof IListObject) { + if (valid(key) && valid(value)) { if (map.containsKey(key)) { V oldValue = map.put(key, value); - queue(item(2, (String) key, ((IListObject) value).getBytes(), true, true)); + if (oldValue != null) { + queue(item(2, key, Baseline.toBytes(value), true, true)); + } return oldValue; } else { V oldValue = map.put(key, value); - queue(item(0, (String) key, ((IListObject) value).getBytes(), true, true)); + queue(item(0, key, Baseline.toBytes(value), true, true)); return oldValue; } @@ -140,16 +194,20 @@ public class SWGMap implements Map { K key = entry.getKey(); V value = entry.getValue(); - if (key instanceof String || key instanceof Byte || key instanceof Short || - key instanceof Integer || key instanceof Float || key instanceof Long || - value instanceof IListObject) { - if (map.containsKey(key)) { - if (map.put(key, value) != null) { - buffer.add(item(2, (String) key, ((IListObject) value).getBytes(), true, true)); + if (valid(key) && valid(value)) + { + if (map.containsKey(key)) + { + if (map.put(key, value) != null) + { + buffer.add(item(2, key, Baseline.toBytes(value), true, true)); } - } else { - if (map.put(key, value) != null) { - buffer.add(item(0, (String) key, ((IListObject) value).getBytes(), true, true)); + } + else + { + if(map.put(key, value) == null) + { + buffer.add(item(0, key, Baseline.toBytes(value), true, true)); } } } @@ -161,13 +219,22 @@ public class SWGMap implements Map { } } + public V putIfAbsent(K key, V value) { + if (!map.containsKey(key)) { + return put(key, value); + } + + return null; + } + public V remove(Object key) { synchronized(objectMutex) { - if (key instanceof String || key instanceof Byte || key instanceof Short || - key instanceof Integer || key instanceof Float || key instanceof Long) { + if (valid(key)) { V value = map.remove(key); - queue(item(1, key, ((IListObject) map.get(key)).getBytes(), true, true)); + if (value != null) { + queue(item(1, key, Baseline.toBytes(value), true, true)); + } return value; } @@ -176,6 +243,47 @@ public class SWGMap implements Map { } } + public boolean remove(Object key, Object value) { + synchronized(objectMutex) { + if (valid(key) && valid(value)) { + boolean removed = map.remove(key, value); + + if (removed) { + queue(item(1, key, Baseline.toBytes(value), true, true)); + } + + return removed; + } + + return false; + } + } + + public V replace(K key, V value) { + synchronized(objectMutex) { + if (map.containsKey(key)) { + return put(key, value); + } + + return null; + } + } + + public boolean replace(K key, V oldValue, V newValue) { + synchronized(objectMutex) { + if (map.containsKey(key) && map.containsValue(oldValue)) { + put(key, newValue); + return true; + } + + return false; + } + } + + public void replaceAll(BiFunction function) { + System.err.println("SWGMap::replaceAll: Not implemented."); + } + public int size() { synchronized(objectMutex) { return map.size(); @@ -198,47 +306,71 @@ public class SWGMap implements Map { return objectMutex; } + public byte[] getBytes() { + synchronized(objectMutex) { + byte[] objects = { }; + int size = 0; + + for (Entry entry : map.entrySet()) { + byte[] key = Baseline.toBytes(entry.getKey()); + byte[] value = Baseline.toBytes(entry.getValue()); + size += ((addByte) ? 1 : 0) + key.length + value.length; + + IoBuffer buffer = Baseline.createBuffer(size); + buffer.put(objects); + if (addByte) buffer.put((byte) 0); + buffer.put(key); + buffer.put(value); + buffer.flip(); + + objects = buffer.array(); + } + + IoBuffer buffer = Baseline.createBuffer(8 + size); + buffer.putInt(map.size()); + buffer.putInt(updateCounter); + buffer.put(objects); + buffer.flip(); + + return buffer.array(); + } + } + + private boolean valid(Object o) { + if (o instanceof String || o instanceof Byte || o instanceof Short || + o instanceof Integer || o instanceof Float || o instanceof Long || + o instanceof IDelta) { + return true; + } else { + return false; + } + } + private byte[] item(int type, Object index, byte[] data, boolean useIndex, boolean useData) { - if (useIndex && !(index instanceof Byte) && !(index instanceof Short) - && !(index instanceof Integer) && !(index instanceof Float) - && !(index instanceof Long) && !(index instanceof String)) { + if (useIndex && ((index instanceof IDelta) && !valid(index))) { throw new IllegalArgumentException(); } - int size = 1 + ((useIndex) ? (2 + index.toString().getBytes().length) : 0) + ((useData) ? data.length : 0); - - IoBuffer buffer = messageBuilder.bufferPool.allocate((size), false).order(ByteOrder.LITTLE_ENDIAN); + int size = 1 + ((useIndex) ? (Baseline.toBytes(index).length) : 0) + ((useData) ? data.length : 0); + + IoBuffer buffer = Delta.createBuffer(size); buffer.put((byte) type); - if (useIndex) { - if (index instanceof String) { - buffer.put(StringUtilities.getAsciiString((String) index)); - } else if (index instanceof Byte) { - buffer.put(((Byte) index).byteValue()); - } else if (index instanceof Short) { - buffer.putShort(((Short) index).shortValue()); - } else if (index instanceof Integer) { - buffer.putInt(((Integer) index).intValue()); - } else if (index instanceof Float) { - buffer.putFloat(((Float) index).floatValue()); - } else if (index instanceof Long) { - buffer.putLong(((Long) index).longValue()); - } else { - throw new IllegalArgumentException(); - } - } - if (useData) buffer.put(data); - - updateCounter++; - - return buffer.array(); + if (useIndex) buffer.put(Baseline.toBytes(index)); + if (useData) buffer.put(data); + buffer.flip(); + + updateCounter++; + + return buffer.array(); } - + private void queue(byte[] data) { - IoBuffer buffer = messageBuilder.bufferPool.allocate((data.length + 8), false).order(ByteOrder.LITTLE_ENDIAN); + IoBuffer buffer = Delta.createBuffer(data.length + 8); buffer.putInt(1); buffer.putInt(updateCounter); buffer.put(data); - messageBuilder.sendListDelta(viewType, updateType, buffer); + buffer.flip(); + object.sendListDelta(viewType, updateType, buffer); } private void queue(List data) { @@ -248,12 +380,13 @@ public class SWGMap implements Map { size += queued.length; } - IoBuffer buffer = messageBuilder.bufferPool.allocate((size + 8), false).order(ByteOrder.LITTLE_ENDIAN); + IoBuffer buffer = Delta.createBuffer((size + 8)); buffer.putInt(data.size()); buffer.putInt(updateCounter); for (byte[] queued : data) buffer.put(queued); + buffer.flip(); - messageBuilder.sendListDelta(viewType, updateType, buffer); + object.sendListDelta(viewType, updateType, buffer); } } diff --git a/src/resources/objects/SWGMultiMap.java b/src/resources/objects/SWGMultiMap.java index a73157fe..f0bb5083 100644 --- a/src/resources/objects/SWGMultiMap.java +++ b/src/resources/objects/SWGMultiMap.java @@ -21,59 +21,69 @@ ******************************************************************************/ package resources.objects; -import java.nio.ByteOrder; +import java.io.Serializable; import java.util.ArrayList; import java.util.Collection; -import java.util.Comparator; import java.util.List; import java.util.Map; import java.util.Map.Entry; import java.util.Set; -import java.util.TreeMap; import org.apache.mina.core.buffer.IoBuffer; import org.python.google.common.collect.ArrayListMultimap; import org.python.google.common.collect.Multimap; import org.python.google.common.collect.Multiset; -import org.python.google.common.collect.Ordering; -import org.python.google.common.collect.TreeMultimap; -import resources.common.StringUtilities; +import engine.resources.objects.Baseline; +import engine.resources.objects.Delta; +import engine.resources.objects.IDelta; +import engine.resources.objects.SWGObject; -import com.sleepycat.persist.model.NotPersistent; -import com.sleepycat.persist.model.Persistent; - -@SuppressWarnings("unused") - -@Persistent -public class SWGMultiMap implements Multimap { +public class SWGMultiMap implements Multimap, Serializable { + private static final long serialVersionUID = 1L; private Multimap map = ArrayListMultimap.create(); - @NotPersistent - private int updateCounter = 0; - private ObjectMessageBuilder messageBuilder; + private transient int updateCounter = 0; private byte viewType; private short updateType; - @NotPersistent - protected final Object objectMutex = new Object(); + private boolean addByte; + protected transient Object objectMutex = new Object(); + private transient SWGObject object; public SWGMultiMap() { } - public SWGMultiMap(ObjectMessageBuilder messageBuilder, int viewType, int updateType) { - this.messageBuilder = messageBuilder; + public SWGMultiMap(SWGObject object, int viewType, int updateType, boolean addByte) { this.viewType = (byte) viewType; this.updateType = (short) updateType; + this.addByte = addByte; + this.object = object; } public SWGMultiMap(Multimap m) { if (m instanceof SWGMultiMap) { - this.messageBuilder = ((SWGMultiMap) m).messageBuilder; + this.object = ((SWGMultiMap) m).object; this.viewType = ((SWGMultiMap) m).viewType; this.updateType = ((SWGMultiMap) m).updateType; map.putAll(m); } } + public void init(SWGObject object) { + objectMutex = new Object(); + updateCounter = 0; + this.object = object; + + for (Object item : map.values()) { + try { + if (item instanceof IDelta) { + item.getClass().getMethod("init", new Class[] { SWGObject.class }).invoke(item, new Object[] { object }); + } + } catch (Exception e) { + e.printStackTrace(); + } + } + } + public Map> asMap() { synchronized(objectMutex) { return map.asMap(); @@ -134,11 +144,9 @@ public class SWGMultiMap implements Multimap { public boolean put(K key, V value) { synchronized(objectMutex) { - if (key instanceof String || key instanceof Byte || key instanceof Short || - key instanceof Integer || key instanceof Float || key instanceof Long || - value instanceof IListObject) { + if (valid(key) && valid(value)) { if (map.put(key, value)) { - queue(item(0, (String) key, ((IListObject) value).getBytes(), true, true)); + queue(item(0, key, Baseline.toBytes(value), true, true)); return true; } } @@ -149,14 +157,13 @@ public class SWGMultiMap implements Multimap { public boolean putAll(K key, Iterable values) { synchronized(objectMutex) { - if (key instanceof String || key instanceof Byte || key instanceof Short || - key instanceof Integer || key instanceof Float || key instanceof Long) { + if (valid(key)) { List buffer = new ArrayList(); for (V value : values) { - if (value instanceof IListObject) { + if (valid(value)) { if (map.put(key, value)) { - buffer.add(item(0, (String) key, ((IListObject) value).getBytes(), true, true)); + buffer.add(item(0, key, Baseline.toBytes(value), true, true)); } } } @@ -179,11 +186,9 @@ public class SWGMultiMap implements Multimap { K key = entry.getKey(); V value = entry.getValue(); - if (key instanceof String || key instanceof Byte || key instanceof Short || - key instanceof Integer || key instanceof Float || key instanceof Long || - value instanceof IListObject) { + if (valid(key) && valid(value)) { if (this.map.put(key, value)) { - buffer.add(item(0, (String) key, ((IListObject) value).getBytes(), true, true)); + buffer.add(item(0, key, Baseline.toBytes(value), true, true)); } } } @@ -197,13 +202,11 @@ public class SWGMultiMap implements Multimap { } } - @SuppressWarnings("unchecked") public boolean remove(Object key, Object value) { synchronized(objectMutex) { - if (key instanceof String || key instanceof Byte || key instanceof Short || - key instanceof Integer || key instanceof Float || key instanceof Long) { + if (valid(key)) { if (map.remove(key, value)) { - queue(item(1, (String) key, ((IListObject) map.get((K) key)).getBytes(), true, true)); + queue(item(1, key, Baseline.toBytes(value), true, true)); return true; } @@ -216,14 +219,13 @@ public class SWGMultiMap implements Multimap { @SuppressWarnings("unchecked") public Collection removeAll(Object key) { synchronized(objectMutex) { - if (key instanceof String || key instanceof Byte || key instanceof Short || - key instanceof Integer || key instanceof Float || key instanceof Long) { + if (valid(key)) { Collection collection = map.get((K) key); List buffer = new ArrayList(); for (V value : map.get((K) key)) { if (map.remove(key, value)) { - buffer.add(item(1, (String) key, ((IListObject) map.get((K) key)).getBytes(), true, true)); + buffer.add(item(1, key, Baseline.toBytes(value), true, true)); } } @@ -239,15 +241,14 @@ public class SWGMultiMap implements Multimap { public Collection replaceValues(K key, Iterable values) { synchronized(objectMutex) { - if (key instanceof String || key instanceof Byte || key instanceof Short || - key instanceof Integer || key instanceof Float || key instanceof Long) { + if (valid(key)) { if (map.containsKey(key)) { List buffer = new ArrayList(); for (V value : values) { - if (value instanceof IListObject) { + if (valid(value)) { if (!map.get(key).contains(value)) { - buffer.add(item(2, (String) key, ((IListObject) value).getBytes(), true, true)); + buffer.add(item(2, key, Baseline.toBytes(value), true, true)); } } else { return null; @@ -287,6 +288,46 @@ public class SWGMultiMap implements Multimap { return objectMutex; } + public byte[] getBytes() { + synchronized(objectMutex) { + byte[] objects = { }; + int size = 0; + + for (Entry entry : map.entries()) { + byte[] key = Baseline.toBytes(entry.getKey()); + byte[] value = Baseline.toBytes(entry.getValue()); + size += ((addByte) ? 1 : 0) + key.length + value.length; + + IoBuffer buffer = Baseline.createBuffer(size); + buffer.put(objects); + if (addByte) buffer.put((byte) 0); + buffer.put(key); + buffer.put(value); + buffer.flip(); + + objects = buffer.array(); + } + + IoBuffer buffer = Baseline.createBuffer(8 + size); + buffer.putInt(map.size()); + buffer.putInt(updateCounter); + buffer.put(objects); + buffer.flip(); + + return buffer.array(); + } + } + + private boolean valid(Object o) { + if (o instanceof String || o instanceof Byte || o instanceof Short || + o instanceof Integer || o instanceof Float || o instanceof Long || + o instanceof IDelta) { + return true; + } else { + return false; + } + } + private byte[] item(int type, Object index, byte[] data, boolean useIndex, boolean useData) { if (useIndex && !(index instanceof Byte) && !(index instanceof Short) && !(index instanceof Integer) && !(index instanceof Float) @@ -294,28 +335,13 @@ public class SWGMultiMap implements Multimap { throw new IllegalArgumentException(); } - int size = 1 + ((useIndex) ? (2 + index.toString().getBytes().length) : 0) + ((useData) ? data.length : 0); + int size = 1 + ((useIndex) ? (2 + Baseline.toBytes(index).length) : 0) + ((useData) ? data.length : 0); - IoBuffer buffer = messageBuilder.bufferPool.allocate((size), false).order(ByteOrder.LITTLE_ENDIAN); + IoBuffer buffer = Delta.createBuffer(size); buffer.put((byte) type); - if (useIndex) { - if (index instanceof String) { - buffer.put(StringUtilities.getAsciiString((String) index)); - } else if (index instanceof Byte) { - buffer.put(((Byte) index).byteValue()); - } else if (index instanceof Short) { - buffer.putShort(((Short) index).shortValue()); - } else if (index instanceof Integer) { - buffer.putInt(((Integer) index).intValue()); - } else if (index instanceof Float) { - buffer.putFloat(((Float) index).floatValue()); - } else if (index instanceof Long) { - buffer.putLong(((Long) index).longValue()); - } else { - throw new IllegalArgumentException(); - } - } + if (useIndex) buffer.put(Baseline.toBytes(index)); if (useData) buffer.put(data); + buffer.flip(); updateCounter++; @@ -323,11 +349,12 @@ public class SWGMultiMap implements Multimap { } private void queue(byte[] data) { - IoBuffer buffer = messageBuilder.bufferPool.allocate((data.length + 8), false).order(ByteOrder.LITTLE_ENDIAN); + IoBuffer buffer = Delta.createBuffer((data.length + 8)); buffer.putInt(1); buffer.putInt(updateCounter); buffer.put(data); - messageBuilder.sendListDelta(viewType, updateType, buffer); + buffer.flip(); + object.sendListDelta(viewType, updateType, buffer); } private void queue(List data) { @@ -337,12 +364,13 @@ public class SWGMultiMap implements Multimap { size += queued.length; } - IoBuffer buffer = messageBuilder.bufferPool.allocate((size + 8), false).order(ByteOrder.LITTLE_ENDIAN); + IoBuffer buffer = Delta.createBuffer((size + 8)); buffer.putInt(data.size()); buffer.putInt(updateCounter); for (byte[] queued : data) buffer.put(queued); + buffer.flip(); - messageBuilder.sendListDelta(viewType, updateType, buffer); + object.sendListDelta(viewType, updateType, buffer); } } diff --git a/src/resources/objects/SWGSet.java b/src/resources/objects/SWGSet.java new file mode 100644 index 00000000..fae6145c --- /dev/null +++ b/src/resources/objects/SWGSet.java @@ -0,0 +1,294 @@ +/******************************************************************************* + * Copyright (c) 2013 + * + * This File is part of NGECore2. + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see . + * + * Using NGEngine to work with NGECore2 is making a combined work based on NGEngine. + * Therefore all terms and conditions of the GNU Lesser General Public License cover the combination. + ******************************************************************************/ +package resources.objects; + +import java.io.Serializable; +import java.util.ArrayList; +import java.util.Collection; +import java.util.Iterator; +import java.util.List; +import java.util.Set; +import java.util.TreeSet; + +import org.apache.mina.core.buffer.IoBuffer; + +import engine.resources.objects.Baseline; +import engine.resources.objects.Delta; +import engine.resources.objects.IDelta; +import engine.resources.objects.SWGObject; + +/* A SWGSet element should extend Delta or implement IDelta */ + +public class SWGSet implements Set, Serializable { + + private static final long serialVersionUID = 1L; + private TreeSet set = new TreeSet(); + private transient int updateCounter = 0; + private byte viewType; + private short updateType; + private boolean addByte; + protected transient Object objectMutex = new Object(); + private transient SWGObject object; + + public SWGSet() { } + + public SWGSet(SWGObject object, int viewType, int updateType, boolean addByte) { + this.viewType = (byte) viewType; + this.updateType = (short) updateType; + this.addByte = addByte; + this.object = object; + } + + public SWGSet(Set s) { + if (s instanceof SWGSet) { + this.object = ((SWGSet) s).object; + this.viewType = ((SWGSet) s).viewType; + this.updateType = ((SWGSet) s).updateType; + set.addAll(s); + } + } + + public void init(SWGObject object) { + objectMutex = new Object(); + updateCounter = 0; + this.object = object; + + for (Object item : set) { + try { + if (item instanceof IDelta) { + item.getClass().getMethod("init", new Class[] { SWGObject.class }).invoke(item, new Object[] { object }); + } + } catch (Exception e) { + e.printStackTrace(); + } + } + } + + public boolean add(E e) { + synchronized(objectMutex) { + if (valid(e)) { + if (set.add(e)) { + queue(item(1, e, null, true, false)); + return true; + } + } + + return false; + } + } + + public boolean addAll(Collection c) { + synchronized(objectMutex) { + List buffer = new ArrayList(); + + for (E e : c) { + if (valid(e) && set.add(e)) { + buffer.add(item(1, e, null, true, false)); + } + } + + if (buffer.size() > 0) { + queue(buffer); + return true; + } else { + return false; + } + } + } + + public void clear() { + synchronized(objectMutex) { + set.clear(); + queue(item(2, null, null, false, false)); + } + } + + public boolean contains(Object o) { + synchronized(objectMutex) { + return set.contains(o); + } + } + + public boolean containsAll(Collection c) { + synchronized(objectMutex) { + return set.containsAll(c); + } + } + + public boolean isEmpty() { + synchronized(objectMutex) { + return set.isEmpty(); + } + } + + public Iterator iterator() { + synchronized(objectMutex) { + return set.iterator(); + } + } + + public boolean remove(Object e) { + synchronized(objectMutex) { + if (valid(e) && set.remove(e)) { + queue(item(0, e, null, true, false)); + return true; + } + + return false; + } + } + + public boolean removeAll(Collection c) { + synchronized(objectMutex) { + List buffer = new ArrayList(); + + for (Object o : c) { + if (valid(o) && set.remove(o)) { + buffer.add(item(0, o, null, true, false)); + } + } + + if (buffer.size() > 0) { + queue(buffer); + return true; + } else { + return false; + } + } + } + + public boolean retainAll(Collection c) { + synchronized(objectMutex) { + return set.retainAll(c); + } + } + + public int size() { + synchronized(objectMutex) { + return set.size(); + } + } + + public Object[] toArray() { + synchronized(objectMutex) { + return set.toArray(); + } + } + + public T[] toArray(T[] a) { + synchronized(objectMutex) { + return set.toArray(a); + } + } + + public int getUpdateCounter() { + synchronized(objectMutex) { + return updateCounter; + } + } + + public Object getMutex() { + return objectMutex; + } + + public byte[] getBytes() { + synchronized(objectMutex) { + byte[] objects = { }; + int size = 0; + + for (Object o : set) { + byte[] object = Baseline.toBytes(o); + size += object.length; + + IoBuffer buffer = Delta.createBuffer(size); + buffer.put(objects); + if (addByte) buffer.put((byte) 0); + buffer.put(object); + buffer.flip(); + + objects = buffer.array(); + } + + IoBuffer buffer = Delta.createBuffer(8 + size); + buffer.putInt(set.size()); + buffer.putInt(updateCounter); + buffer.put(objects); + buffer.flip(); + + return buffer.array(); + } + } + + private boolean valid(Object o) { + if (o instanceof String || o instanceof Byte || o instanceof Short || + o instanceof Integer || o instanceof Float || o instanceof Long || + o instanceof IDelta) { + return true; + } else { + return false; + } + } + + private byte[] item(int type, Object index, byte[] data, boolean useIndex, boolean useData) { + if (useIndex && !valid(index)) { + throw new IllegalArgumentException(); + } + + int size = 1 + ((useIndex) ? Baseline.toBytes(index).length : 0) + ((useData) ? data.length : 0); + + IoBuffer buffer = Delta.createBuffer(size); + buffer.put((byte) type); + if (useIndex) buffer.put(Baseline.toBytes(index)); + if (useData) buffer.put(data); + buffer.flip(); + + updateCounter++; + + return buffer.array(); + } + + private void queue(byte[] data) { + IoBuffer buffer = Delta.createBuffer(data.length + 8); + buffer.putInt(1); + buffer.putInt(updateCounter); + buffer.put(data); + buffer.flip(); + object.sendListDelta(viewType, updateType, buffer); + } + + private void queue(List data) { + int size = 0; + + for (byte[] queued : data) { + size += queued.length; + } + + IoBuffer buffer = Delta.createBuffer(size + 8); + buffer.putInt(data.size()); + buffer.putInt(updateCounter); + for (byte[] queued : data) buffer.put(queued); + buffer.flip(); + + object.sendListDelta(viewType, updateType, buffer); + } + +} diff --git a/src/resources/objects/building/BuildingMessageBuilder.java b/src/resources/objects/building/BuildingMessageBuilder.java index 224e0a8d..ab612ca9 100644 --- a/src/resources/objects/building/BuildingMessageBuilder.java +++ b/src/resources/objects/building/BuildingMessageBuilder.java @@ -21,6 +21,63 @@ ******************************************************************************/ package resources.objects.building; -public class BuildingMessageBuilder { +import java.nio.ByteOrder; +import java.util.Map; +import java.util.Vector; +import org.apache.mina.core.buffer.IoBuffer; + +import engine.resources.objects.Builder; +import resources.objects.tangible.TangibleMessageBuilder; + +public class BuildingMessageBuilder extends TangibleMessageBuilder { + + public BuildingMessageBuilder(BuildingObject object) { + super(object); + } + + public BuildingMessageBuilder() { + super(); + } + + @Override + public void buildBaseline3(Map baselineBuilders, Map deltaBuilders) { + super.buildBaseline3(baselineBuilders, deltaBuilders); + } + + @Override + public void buildBaseline6(Map baselineBuilders, Map deltaBuilders) { + super.buildBaseline6(baselineBuilders, deltaBuilders); + } + + @Override + public void buildBaseline8(Map baselineBuilders, Map deltaBuilders) { + super.buildBaseline8(baselineBuilders, deltaBuilders); + } + + @Override + public void buildBaseline9(Map baselineBuilders, Map deltaBuilders) { + super.buildBaseline9(baselineBuilders, deltaBuilders); + } + + public IoBuffer buildPermissionListCreate(Vector permissionList, String listName) { + IoBuffer buffer = IoBuffer.allocate(10).order(ByteOrder.LITTLE_ENDIAN); + buffer.setAutoExpand(true); + int listSize = permissionList.size(); + buffer.putShort((short)4); + buffer.putInt(0x52F364B8); + buffer.putInt(listSize); + for (String name : permissionList){ + buffer.put(getUnicodeString(name)); + } + //buffer.putInt(0x61); + buffer.putInt(0); + //buffer.putShort((short)0); + buffer.put(getUnicodeString(listName)); + int size = buffer.position(); + buffer.flip(); + tools.CharonPacketUtils.printAnalysis(IoBuffer.allocate(size).put(buffer.array(), 0, size).flip()); + return IoBuffer.allocate(size).put(buffer.array(), 0, size).flip(); + } + } diff --git a/src/resources/objects/building/BuildingObject.java b/src/resources/objects/building/BuildingObject.java index a1267703..f3dc4d31 100644 --- a/src/resources/objects/building/BuildingObject.java +++ b/src/resources/objects/building/BuildingObject.java @@ -21,57 +21,358 @@ ******************************************************************************/ package resources.objects.building; - - +import java.io.Serializable; +import java.util.Map; +import java.util.Vector; import java.util.concurrent.atomic.AtomicReference; +import org.apache.mina.core.buffer.IoBuffer; + +import main.NGECore; +import resources.common.OutOfBand; +import resources.datatables.DisplayType; +import resources.datatables.Options; +import resources.objects.ObjectMessageBuilder; import resources.objects.cell.CellObject; - -import com.sleepycat.persist.model.Entity; - +import resources.objects.creature.CreatureObject; +import resources.objects.tangible.TangibleObject; +import engine.clientdata.ClientFileManager; +import engine.clientdata.visitors.PortalVisitor; import engine.clients.Client; -import engine.resources.container.Traverser; +import engine.resources.objects.Baseline; +import engine.resources.objects.IPersistent; import engine.resources.objects.SWGObject; import engine.resources.scene.Planet; import engine.resources.scene.Point3D; import engine.resources.scene.Quaternion; -@Entity -public class BuildingObject extends SWGObject { +public class BuildingObject extends TangibleObject implements IPersistent, Serializable { + + private static final long serialVersionUID = 1L; + + private transient BuildingMessageBuilder messageBuilder; + + private Vector entryList = new Vector(); + private Vector banList = new Vector(); + + public static final byte PRIVATE = (byte) 0; + public static final byte PUBLIC = (byte) 1; + + public BuildingObject(long objectID, Planet planet, Point3D position, Quaternion orientation, String Template) { + super(objectID, planet, position, orientation, Template); + getBaseline(3).set("volume", 255); + setOptionsBitmask(Options.INVULNERABLE); + setConditionDamage(100); + setMaximumCondition(4320); + setStaticObject(true); + } public BuildingObject() { super(); + getBaseline(3).set("volume", 255); + setOptionsBitmask(Options.INVULNERABLE); + setConditionDamage(100); + setMaximumCondition(4320); + setStaticObject(true); } - - public BuildingObject(long objectID, Planet planet, Point3D position, Quaternion orientation, String Template) { - super(objectID, planet, position, orientation, Template); - } - + @Override - public void sendBaselines(Client client) { - // TODO Auto-generated method stub + public void initAfterDBLoad() { + super.init(); + defendersList = new Vector(); + getBaseline(3).set("volume", 255); + setOptionsBitmask(Options.INVULNERABLE); + setConditionDamage(100); + setMaximumCondition(4320); + } + + @Override + public Baseline getOtherVariables() { + Baseline baseline = super.getOtherVariables(); + baseline.put("maintenanceAmount", (float) 0); + baseline.put("baseMaintenanceRate", 0); + baseline.put("deedTemplate", ""); + baseline.put("residency", false); + baseline.put("privacy", (byte) 0); + baseline.put("maximumStorageCapacity", (short) 0); + return baseline; + } + + @Override + public Baseline getBaseline3() { + Baseline baseline = super.getBaseline3(); + return baseline; + } + + @Override + public Baseline getBaseline6() { + Baseline baseline = super.getBaseline6(); + return baseline; + } + + @Override + public Baseline getBaseline8() { + Baseline baseline = super.getBaseline8(); + return baseline; + } + + @Override + public Baseline getBaseline9() { + Baseline baseline = super.getBaseline9(); + return baseline; + } + + public Vector getCells() { + final Vector cells = new Vector(); + this.viewChildren(this, true, false, (obj) -> { + if (obj instanceof CellObject) { + cells.add((CellObject) obj); + } + }); + + return cells; } public CellObject getCellByCellNumber(final int cellNumber) { - final AtomicReference ref = new AtomicReference(); - this.viewChildren(this, true, false, new Traverser() { - - @Override - public void process(SWGObject obj) { - - if(obj instanceof CellObject && ((CellObject) obj).getCellNumber() == cellNumber) + synchronized(objectMutex) { + this.viewChildren(this, true, false, (obj) -> { + if (obj instanceof CellObject && ((CellObject) obj).getCellNumber() == cellNumber) { ref.set((CellObject) obj); - - } - - }); + } + }); + } return ref.get(); - } - + + public CellObject getCellByCellName(String cellName) { + Map attributes = getTemplateData().getAttributes(); + + if (attributes.containsKey("portalLayoutFilename") && ((String) attributes.get("portalLayoutFilename")).length() > 0) { + String portalLayoutFilename = (String) attributes.get("portalLayoutFilename"); + + try { + PortalVisitor portal = ClientFileManager.loadFile(portalLayoutFilename, PortalVisitor.class); + + for (int i = 1; i <= portal.cellCount; i++) { + if (cellName.equals(portal.cells.get(i).name)) { + return getCellByCellNumber(i); + } + } + } catch (InstantiationException | IllegalAccessException e) { + e.printStackTrace(); + } + } + + return null; + } + + public int getCellNumberByObjectId(long objectId) { + Vector cells = getCells(); + + for (CellObject cell : cells) { + if (cell.getObjectID() == objectId) { + return cell.getCellNumber(); + } + } + + return 0; + } + + public float getMaintenanceAmount() { + return (float) otherVariables.get("maintenanceAmount"); + } + + public void setMaintenanceAmount(float maintenanceAmount) { + otherVariables.set("maintenanceAmount", maintenanceAmount); + } + + public int getBMR() { + return (int) otherVariables.get("baseMaintenanceRate"); + } + + public void setBMR(int BMR) { + otherVariables.set("baseMaintenanceRate", BMR); + } + + public String getDeedTemplate(){ + return (String) otherVariables.get("deedTemplate"); + } + + public void setDeedTemplate(String deedTemplate){ + otherVariables.set("deedTemplate", deedTemplate); + } + + public String getBuildingName() { + return getCustomName(); + } + + public void setBuildingName(String buildingName, CreatureObject owner) { + setCustomName(buildingName); + ((CreatureObject) owner).sendSystemMessage("Structure renamed.", DisplayType.Broadcast); + SWGObject sign = (SWGObject) getAttachment("sign"); + if(sign != null) + sign.setCustomName(buildingName); + } + + public boolean getResidency(){ + return (boolean) otherVariables.get("residency"); + } + + public void setResidency(CreatureObject owner){ + owner.sendSystemMessage("@player_structure:declared_residency", (byte) 1); + otherVariables.set("residency", true); + } + + public byte getPrivacy() { + return (byte) otherVariables.get("privacy"); + } + + public String getPrivacyString() { + switch (getPrivacy()) { + case PRIVATE: + return "private"; + case PUBLIC: + return "public"; + default: + return "42"; + } + } + + public void setPrivacy(byte privacy) { + otherVariables.set("residency", privacy); + } + + public Vector getItemsList() { + Vector items = new Vector(); + + getCells().forEach(c -> c.viewChildren(c, true, false, (item) -> { + if(!(item instanceof CreatureObject) && item.getTemplate() != "object/tangible/terminal/shared_terminal_player_structure.iff" + && item.getTemplate() != "object/tangible/terminal/shared_terminal_city.iff" + && item.getTemplate() != "object/tangible/terminal/shared_terminal_city_vote.iff") { + items.add((TangibleObject) item); + } + })); + + return items; + } + + public short getMaximumStorageCapacity() { + return (byte) otherVariables.get("maximumStorageCapacity"); + } + + public void setMaximumStorageCapacity(short maximumStorageCapacity) { + otherVariables.set("maximumStorageCapacity", maximumStorageCapacity); + } + + public void setPermissionEntry(String name, CreatureObject owner){ + Vector entryListFirstNames = new Vector(); + + for (long oid : entryList) { + String firstName = NGECore.getInstance().characterService.getPlayerFirstName(oid); + entryListFirstNames.add(firstName); + } + + owner.getClient().getSession().write(messageBuilder.buildPermissionListCreate(entryListFirstNames, name)); + } + + public void setPermissionBan(String name, CreatureObject owner){ + Vector banListFirstNames = new Vector(); + + for (long oid : banList) { + String firstName = NGECore.getInstance().characterService.getPlayerFirstName(oid); + banListFirstNames.add(firstName); + } + + owner.getClient().getSession().write(messageBuilder.buildPermissionListCreate(banListFirstNames, name)); + } + + public void addPlayerToEntryList(CreatureObject owner, long oid, String firstName){ + if (!entryList.contains(oid)){ + SWGObject obj = NGECore.getInstance().objectService.getObject(oid); + entryList.add(oid); + owner.sendSystemMessage(OutOfBand.ProsePackage("@player_structure:player_added", "TO", NGECore.getInstance().objectService.getObject(oid).getCustomName()), DisplayType.Screen); + if(getObservers().contains(obj.getClient())) + updateCellPermissions(obj); + } + } + + public void removePlayerFromEntryList(CreatureObject owner, long oid, String firstName){ + if (entryList.contains(oid)){ + SWGObject obj = NGECore.getInstance().objectService.getObject(oid); + entryList.remove(oid); + owner.sendSystemMessage(OutOfBand.ProsePackage("@player_structure:player_removed", "TO", NGECore.getInstance().objectService.getObject(oid).getCustomName()), DisplayType.Screen); + if(getObservers().contains(obj.getClient())) // TODO: eject player + updateCellPermissions(obj); + } + } + + public void addPlayerToBanList(CreatureObject owner, long oid, String firstName){ + if (!banList.contains(oid)){ + SWGObject obj = NGECore.getInstance().objectService.getObject(oid); + banList.add(oid); + owner.sendSystemMessage(OutOfBand.ProsePackage("@player_structure:player_added", "TO", NGECore.getInstance().objectService.getObject(oid).getCustomName()), DisplayType.Screen); + if(getObservers().contains(obj.getClient())) // TODO: eject player + updateCellPermissions(obj); + } + } + + public void removePlayerFromBanList(CreatureObject owner, long oid, String firstName){ + if (banList.contains(oid)){ + SWGObject obj = NGECore.getInstance().objectService.getObject(oid); + banList.remove(oid); + owner.sendSystemMessage(OutOfBand.ProsePackage("@player_structure:player_removed", "TO", NGECore.getInstance().objectService.getObject(oid).getCustomName()), DisplayType.Screen); + if(getObservers().contains(obj.getClient())) + updateCellPermissions(obj); + } + } + + @Override + public void notifyClients(IoBuffer buffer, boolean notifySelf) { + notifyObservers(buffer, false); + } + + @Override + public ObjectMessageBuilder getMessageBuilder() { + synchronized(objectMutex) { + if (messageBuilder == null) { + messageBuilder = new BuildingMessageBuilder(this); + } + + return messageBuilder; + } + } + + @Override + public void sendBaselines(Client destination) { + if (destination != null && destination.getSession() != null) { + destination.getSession().write(getBaseline(3).getBaseline()); + destination.getSession().write(getBaseline(6).getBaseline()); + + Client parent = ((getGrandparent() == null) ? null : getGrandparent().getClient()); + + if (parent != null && destination == parent) { + destination.getSession().write(getBaseline(8).getBaseline()); + destination.getSession().write(getBaseline(9).getBaseline()); + } + } + } + + public void sendListDelta(byte viewType, short updateType, IoBuffer buffer) { + super.sendListDelta(viewType, updateType, buffer); + } + + public boolean canEnter(SWGObject object) { + return (getPrivacy() == PRIVATE && entryList.contains(object.getObjectID())) || !banList.contains(object.getObjectID()); + } + + public void updateCellPermissions(SWGObject obj) { + if(obj.getClient() == null) + return; + viewChildren(this, true, false, (cell) -> ((CellObject) cell).sendPermissionMessage(obj.getClient())); + } } diff --git a/src/resources/objects/cell/CellMessageBuilder.java b/src/resources/objects/cell/CellMessageBuilder.java index 63f5592b..89c28951 100644 --- a/src/resources/objects/cell/CellMessageBuilder.java +++ b/src/resources/objects/cell/CellMessageBuilder.java @@ -21,6 +21,90 @@ ******************************************************************************/ package resources.objects.cell; -public class CellMessageBuilder { +import java.nio.ByteOrder; +import java.util.Map; +import org.apache.mina.core.buffer.IoBuffer; + +import resources.objects.ObjectMessageBuilder; +import engine.resources.objects.Builder; + +public class CellMessageBuilder extends ObjectMessageBuilder { + + public CellMessageBuilder(CellObject object) { + super(object); + } + + public CellMessageBuilder() { + super(); + } + + public IoBuffer buildBaseline3() { + + CellObject cell = (CellObject) object; + IoBuffer buffer = bufferPool.allocate(27, false).order(ByteOrder.LITTLE_ENDIAN); + + buffer.putShort((short) 6); + buffer.putFloat(0); + buffer.putShort((short) 0); + + buffer.putInt(0); + buffer.putShort((short) 0); + + buffer.putInt(0); + buffer.putInt(0); + buffer.put((byte) 1); + buffer.putInt(cell.getCellNumber()); + + int size = buffer.position(); + + buffer.flip(); + buffer = createBaseline("SCLT", (byte) 3, buffer, size); + + return buffer; + + } + + public IoBuffer buildBaseline6() { + + IoBuffer buffer = bufferPool.allocate(30, false).order(ByteOrder.LITTLE_ENDIAN); + + buffer.putShort((short) 4); + buffer.putInt(0x43); + buffer.putInt(0); + buffer.putInt(0); + buffer.putInt(0); + buffer.putInt(0); + buffer.putInt(0); + buffer.putInt(0); + + int size = buffer.position(); + + buffer.flip(); + buffer = createBaseline("SCLT", (byte) 6, buffer, size); + + return buffer; + + } + + @Override + public void buildBaseline3(Map baselineBuilders, Map deltaBuilders) { + super.buildBaseline3(deltaBuilders, deltaBuilders); + } + + @Override + public void buildBaseline6(Map baselineBuilders, Map deltaBuilders) { + super.buildBaseline6(deltaBuilders, deltaBuilders); + } + + @Override + public void buildBaseline8(Map baselineBuilders, Map deltaBuilders) { + super.buildBaseline8(deltaBuilders, deltaBuilders); + } + + @Override + public void buildBaseline9(Map baselineBuilders, Map deltaBuilders) { + super.buildBaseline9(deltaBuilders, deltaBuilders); + } + } diff --git a/src/resources/objects/cell/CellObject.java b/src/resources/objects/cell/CellObject.java index a32e33b1..9c25167b 100644 --- a/src/resources/objects/cell/CellObject.java +++ b/src/resources/objects/cell/CellObject.java @@ -21,8 +21,15 @@ ******************************************************************************/ package resources.objects.cell; +import java.io.Serializable; +import org.apache.mina.core.buffer.IoBuffer; +import protocol.swg.UpdateCellPermissionMessage; +import resources.objects.ObjectMessageBuilder; +import resources.objects.building.BuildingObject; + +import com.sleepycat.persist.model.NotPersistent; import com.sleepycat.persist.model.Persistent; import engine.clients.Client; @@ -31,22 +38,28 @@ import engine.resources.scene.Planet; import engine.resources.scene.Point3D; import engine.resources.scene.Quaternion; -@Persistent -public class CellObject extends SWGObject { +@Persistent(version=0) +public class CellObject extends SWGObject implements Serializable { + private static final long serialVersionUID = 1L; private int cellNumber = 0; + @NotPersistent + private transient CellMessageBuilder messageBuilder; public CellObject() { super(); + messageBuilder = new CellMessageBuilder(this); } public CellObject(long objectID, Planet planet, int cellNumber) { - super(objectID, planet, new Point3D(0, 0, 0), new Quaternion(0, 0, 0, 1), "object/cell/shared_cell.iff"); + super(objectID, planet, new Point3D(0, 0, 0), new Quaternion(1, 0, 0, 0), "object/cell/shared_cell.iff"); setCellNumber(cellNumber); + messageBuilder = new CellMessageBuilder(this); } public CellObject(long objectID, Planet planet) { - super(objectID, planet, new Point3D(0, 0, 0), new Quaternion(0, 0, 0, 1), "object/cell/shared_cell.iff"); + super(objectID, planet, new Point3D(0, 0, 0), new Quaternion(1, 0, 0, 0), "object/cell/shared_cell.iff"); + messageBuilder = new CellMessageBuilder(this); } public int getCellNumber() { @@ -62,10 +75,45 @@ public class CellObject extends SWGObject { } @Override - public void sendBaselines(Client client) { + public void sendBaselines(Client destination) { + + if(destination == null || destination.getSession() == null) { + System.out.println("NULL session"); + return; + } + + destination.getSession().write(messageBuilder.buildBaseline3()); + destination.getSession().write(messageBuilder.buildBaseline6()); + sendPermissionMessage(destination); + + } + + public void sendPermissionMessage(Client destination) { + + if(destination == null || destination.getSession() == null) { + System.out.println("NULL session"); + return; + } + + byte canEnter = (byte) (((BuildingObject) getContainer()).canEnter(destination.parent) ? 1 : 0); + destination.getSession().write(new UpdateCellPermissionMessage(canEnter, getObjectID()).serialize()); + + } + + @Override + public void initAfterDBLoad() { + super.init(); + messageBuilder = new CellMessageBuilder(this); + } + + public ObjectMessageBuilder getMessageBuilder() { + return messageBuilder; + } + + @Override + public void sendListDelta(byte viewType, short updateType, IoBuffer buffer) { // TODO Auto-generated method stub } - - + } diff --git a/src/resources/objects/craft/DraftSchematic.java b/src/resources/objects/craft/DraftSchematic.java new file mode 100644 index 00000000..0539eba4 --- /dev/null +++ b/src/resources/objects/craft/DraftSchematic.java @@ -0,0 +1,69 @@ +/******************************************************************************* + * Copyright (c) 2013 + * + * This File is part of NGECore2. + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see . + * + * Using NGEngine to work with NGECore2 is making a combined work based on NGEngine. + * Therefore all terms and conditions of the GNU Lesser General Public License cover the combination. + ******************************************************************************/ +package resources.objects.craft; + +import java.io.Serializable; + +import org.apache.mina.core.buffer.IoBuffer; + +import resources.objects.ObjectMessageBuilder; + +import com.sleepycat.persist.model.Persistent; + +import engine.clients.Client; +import engine.resources.objects.SWGObject; +import engine.resources.scene.Planet; +import engine.resources.scene.Point3D; +import engine.resources.scene.Quaternion; + +@Persistent +public class DraftSchematic extends SWGObject implements Serializable { + + private static final long serialVersionUID = 1L; + private transient ObjectMessageBuilder messageBuilder = null; + + public DraftSchematic(long objectID, Planet planet, String template, Point3D position, Quaternion orientation){ + super(objectID, planet, position, orientation, template); + } + + @Override + public void sendBaselines(Client arg0) { + // TODO Auto-generated method stub + + } + + @Override + public void initAfterDBLoad() { + super.init(); + } + + public ObjectMessageBuilder getMessageBuilder() { + return messageBuilder; + } + + @Override + public void sendListDelta(byte viewType, short updateType, IoBuffer buffer) { + // TODO Auto-generated method stub + + } + +} diff --git a/src/resources/objects/creature/CreatureMessageBuilder.java b/src/resources/objects/creature/CreatureMessageBuilder.java index 15acbd30..b8f2113b 100644 --- a/src/resources/objects/creature/CreatureMessageBuilder.java +++ b/src/resources/objects/creature/CreatureMessageBuilder.java @@ -22,33 +22,33 @@ package resources.objects.creature; import java.nio.ByteOrder; +import java.util.Map; +import java.util.Map.Entry; +import main.NGECore; import org.apache.mina.core.buffer.IoBuffer; -import com.sleepycat.persist.model.Persistent; - import engine.resources.common.CRC; -import resources.objects.Buff; -import resources.objects.ObjectMessageBuilder; +import resources.buffs.Buff; +import engine.resources.objects.Builder; import engine.resources.objects.SWGObject; -import engine.resources.objects.SkillMod; - import resources.objects.player.PlayerObject; +import resources.objects.tangible.TangibleMessageBuilder; import resources.objects.tangible.TangibleObject; import resources.objects.weapon.WeaponObject; +import resources.skills.SkillMod; -@Persistent -public class CreatureMessageBuilder extends ObjectMessageBuilder { - - public CreatureMessageBuilder() { } +public class CreatureMessageBuilder extends TangibleMessageBuilder { - public CreatureMessageBuilder(CreatureObject creatureObject) { - - setObject(creatureObject); - + public CreatureMessageBuilder(CreatureObject object) { + super(object); } - + + public CreatureMessageBuilder() { + super(); + } + public IoBuffer buildBaseline1() { CreatureObject creature = (CreatureObject) object; IoBuffer buffer = bufferPool.allocate(26, false).order(ByteOrder.LITTLE_ENDIAN); @@ -58,7 +58,7 @@ public class CreatureMessageBuilder extends ObjectMessageBuilder { buffer.putInt(creature.getCashCredits()); buffer.putInt(6); // Base HAM List - so leveling knows the base HAM, before equipment etc - buffer.putInt(6); + buffer.putInt(0); buffer.putInt(creature.getHealth()); buffer.putInt(0); buffer.putInt(creature.getAction()); @@ -72,7 +72,7 @@ public class CreatureMessageBuilder extends ObjectMessageBuilder { } else { buffer.putInt(creature.getSkills().size()); buffer.putInt(creature.getSkillsUpdateCounter()); - for(String skill : creature.getSkills().get()) + for(String skill : creature.getSkills()) buffer.put(getAsciiString(skill)); } int size = buffer.position(); @@ -89,22 +89,26 @@ public class CreatureMessageBuilder extends ObjectMessageBuilder { CreatureObject creature = (CreatureObject) object; IoBuffer buffer = bufferPool.allocate(100, false).order(ByteOrder.LITTLE_ENDIAN); buffer.setAutoExpand(true); + + if(creature.getStfName() == null || creature.getStfFilename() == null) { + creature.setStfName(""); + creature.setStfFilename(""); + } buffer.putShort((short) 19); // Object Count + + // BaseObject buffer.putFloat(1); buffer.put(getAsciiString(creature.getStfFilename())); buffer.putInt(0); buffer.put(getAsciiString(creature.getStfName())); if (creature.getCustomName() == null) { creature.setCustomName(""); }//Not all CreatureObjects have CustomName (Shuttles) buffer.put(getUnicodeString(creature.getCustomName())); - buffer.putInt(0x000F4240); // unk - String factionCRC = creature.getFaction(); - if(factionCRC == null) - buffer.putInt(0); - else if(factionCRC.equals("neutral")) - buffer.putInt(0); - else - buffer.putInt(CRC.StringtoCRC(factionCRC)); + // buffer.putInt(0x000F4240); // volume + buffer.putInt(1); + + // TangibleObject + buffer.putInt(CRC.StringtoCRC(creature.getFaction())); buffer.putInt(creature.getFactionStatus()); @@ -116,23 +120,26 @@ public class CreatureMessageBuilder extends ObjectMessageBuilder { buffer.putShort((short) customizationData.length); buffer.put(customizationData); } - buffer.putInt(1); + //buffer.putInt(1); buffer.putInt(0); // TANO Data buffer.putInt(0); - buffer.putInt(0x80); // 0x80 = Player, 0x08 = Quest NPC, + buffer.putInt(creature.getOptionsBitmask()); // 0x80 = Player, 0x08 = Quest NPC, + //buffer.putInt(0x80); buffer.putInt(creature.getIncapTimer()); buffer.putInt(0); buffer.putInt(0x3A98); buffer.put((byte) 1); + + // CreatureObject + buffer.put((byte) creature.getPosture()); buffer.put((byte) 0); - buffer.put((byte) 1); buffer.putLong(creature.getOwnerId()); float height = creature.getHeight(); - if (height < 0.7 || height > 1.5) - height = 1; + //if (height < 0.7 || height > 1.5) + // height = 1; buffer.putFloat(height); buffer.putInt(0); // battle fatigue buffer.putLong(creature.getStateBitmask()); @@ -157,23 +164,21 @@ public class CreatureMessageBuilder extends ObjectMessageBuilder { buffer.putInt(0); // HAM Encumberance List unused in NGE buffer.putInt(0); - if(creature.getSkillMods().isEmpty()) { - buffer.putInt(0); - buffer.putInt(0); - } else { - buffer.putInt(creature.getSkillMods().size()); - buffer.putInt(creature.getSkillModsUpdateCounter()); - - for(SkillMod skillMod : creature.getSkillMods().get()) { - buffer.put((byte) 0); - buffer.put(getAsciiString(skillMod.getSkillModString())); - buffer.putInt(skillMod.getBase()); - buffer.putInt(skillMod.getModifier()); - } + buffer.putInt(creature.getSkillMods().size()); + buffer.putInt(creature.getSkillMods().getUpdateCounter()); + for (Entry skillMod : creature.getSkillMods().entrySet()) { + buffer.put((byte) 0); + buffer.put(getAsciiString(skillMod.getKey())); + buffer.put(skillMod.getValue().getBytes()); } + buffer.putFloat(creature.getSpeedMultiplierBase()); buffer.putFloat(creature.getSpeedMultiplierMod()); - buffer.putLong(0); // unk + + if(creature.getPerformanceListenee() != null) + buffer.putLong(creature.getPerformanceListenee().getObjectId()); + else + buffer.putLong(0); buffer.putFloat(creature.getRunSpeed()); @@ -186,21 +191,8 @@ public class CreatureMessageBuilder extends ObjectMessageBuilder { buffer.putInt(0); // MissionCritical objects todo later buffer.putInt(0); - - if(creature.getAbilities().isEmpty()) { - buffer.putInt(0); - buffer.putInt(creature.getAbilitiesUpdateCounter()); - } else { - buffer.putInt(creature.getAbilities().size()); - buffer.putInt(creature.getAbilitiesUpdateCounter()); - - for(String ability : creature.getAbilities().get()) { - buffer.put((byte) 0); - buffer.put(getAsciiString(ability)); - buffer.putInt(1); - } - } - buffer.putInt(0); // unk + buffer.put(creature.getAbilities().getBytes()); + buffer.putInt(creature.getXpBarValue()); // xp bar value int size = buffer.position(); buffer = bufferPool.allocate(size, false).put(buffer.array(), 0, size); @@ -217,27 +209,32 @@ public class CreatureMessageBuilder extends ObjectMessageBuilder { IoBuffer buffer = bufferPool.allocate(100, false).order(ByteOrder.LITTLE_ENDIAN); buffer.setAutoExpand(true); buffer.putShort((short) 0x23); - buffer.putInt(0x4E); - buffer.putInt(0); // defenders list unused in NGE - buffer.putInt(0); + // BaseObject + buffer.putInt(0x43); // serverId + buffer.putShort((short) 0); // detaiLStfFilename + buffer.putInt(0); // detailStfSpacer + buffer.putShort((short) 0); // detailStfName + + // TangibleObject buffer.put(creature.getCombatFlag()); - - buffer.putLong(0); - buffer.putLong(0); - buffer.putLong(0); // Vehicle vars or TANO 6 vars TODO: research - buffer.putLong(0); - buffer.putInt(0); + + buffer.putLong(0); //Set cloakViewers (set of objectIds of who can see a cloaked spy) + buffer.putInt(0); //Int + buffer.putLong(0); //List + buffer.putLong(0); //List + buffer.putLong(0); //List buffer.putShort(creature.getLevel()); - //buffer.putShort((short) 90); buffer.putInt(creature.getGrantedHealth()); // From player_level.iff. Ranges from 0-2000 as you level, consistent with that table. + //0A if(creature.getCurrentAnimation() == null || creature.getCurrentAnimation().length() == 0) buffer.putShort((short) 0); else buffer.put(getAsciiString(creature.getCurrentAnimation())); + if(creature.getMoodAnimation() == null || creature.getMoodAnimation().length() == 0) buffer.put(getAsciiString("neutral")); else @@ -251,22 +248,26 @@ public class CreatureMessageBuilder extends ObjectMessageBuilder { buffer.putShort((short) 0); else buffer.put(getAsciiString(creature.getInviteSenderName())); - + buffer.putLong(creature.getInviteCounter()); buffer.putInt(creature.getGuildId()); - buffer.putLong(creature.getTargetId()); + + buffer.putLong(creature.getLookAtTarget()); // lookAtTarget 0x10 + buffer.putLong(creature.getIntendedTarget()); // intendedTarget 0x11 buffer.put(creature.getMoodId()); buffer.putInt(creature.getPerformanceCounter()); - buffer.putInt(creature.getPerformanceId()); - - buffer.putInt(0); // unks - buffer.putInt(0); + /* + * minor dilemma: performance ID is needed for XP calculation, but it can't be sent + * in the CREO, otherwise the evul note bubbles appear + */ + buffer.putInt((creature.getPerformanceType()) ? 0 : creature.getPerformanceId()); buffer.putInt(6); // Current HAM buffer.putInt(creature.getHamListCounter()); buffer.putInt(creature.getHealth()); + //1A buffer.putInt(0); buffer.putInt(creature.getAction()); buffer.putInt(0); @@ -274,7 +275,7 @@ public class CreatureMessageBuilder extends ObjectMessageBuilder { buffer.putInt(0); buffer.putInt(6); // Max HAM - buffer.putInt(0); + buffer.putInt(creature.getMaxHAMListCounter()); buffer.putInt(creature.getMaxHealth()); buffer.putInt(0); @@ -286,14 +287,21 @@ public class CreatureMessageBuilder extends ObjectMessageBuilder { if(creature.getEquipmentList().isEmpty()) { buffer.putInt(0); - buffer.putInt(0); + buffer.putInt(creature.getEquipmentListUpdateCounter()); } else { buffer.putInt(creature.getEquipmentList().size()); - buffer.putInt(0); + buffer.putInt(creature.getEquipmentListUpdateCounter()); - for(SWGObject obj : creature.getEquipmentList().get()) { + for(Long objId : creature.getEquipmentList().get()) { - if(obj instanceof TangibleObject) { + SWGObject obj = NGECore.getInstance().objectService.getObject(objId); + + if(obj == null) { + System.err.println("Cant find obj for obj id in equip list!!!"); + continue; + } + + if(obj instanceof TangibleObject && !(obj instanceof WeaponObject)) { TangibleObject tangible = (TangibleObject) obj; if(tangible.getCustomization() == null || tangible.getCustomization().length == 0) { buffer.putShort((short) 0); @@ -328,9 +336,9 @@ public class CreatureMessageBuilder extends ObjectMessageBuilder { } - buffer.putShort((short) 0); + buffer.putShort((short) 0); // costume //buffer.put(getAsciiString("appearance/gungan_m.sat")); - buffer.put((byte) 1); + buffer.put((byte) (creature.isInStealth() ? 0 : 1)); if(creature.getBuffList().isEmpty()) { buffer.putInt(0); @@ -350,11 +358,14 @@ public class CreatureMessageBuilder extends ObjectMessageBuilder { PlayerObject player = (PlayerObject) creature.getSlottedObject("ghost"); for(Buff buff : creature.getBuffList().get()) { - - buff.setTotalPlayTime((int) (player.getTotalPlayTime() + (System.currentTimeMillis() - player.getLastPlayTimeUpdate()) / 1000)); + + if(player != null) + buff.setTotalPlayTime((int) (player.getTotalPlayTime() + (System.currentTimeMillis() - player.getLastPlayTimeUpdate()) / 1000)); + else + buff.setTotalPlayTime(0); buffer.put((byte) 1); buffer.putInt(0); - buffer.putInt(CRC.StringtoCRC(buff.getBuffName())); + buffer.putInt(CRC.StringtoCRC(buff.getBuffName().toLowerCase())); if(buff.getDuration() > 0) { buffer.putInt((int) (buff.getTotalPlayTime() + buff.getRemainingDuration())); buffer.putInt(0); @@ -372,20 +383,35 @@ public class CreatureMessageBuilder extends ObjectMessageBuilder { buffer.putInt(1); } - - buffer.putShort((short) 0); - buffer.putInt(0xFFFFFFFF); - buffer.put((byte) 1); - buffer.putShort((short) 0); + + buffer.put((byte) (creature.isStationary() ? 1 : 0)); // if the server accepts transforms from the object + buffer.put(creature.getDifficulty()); + + if(creature.isHologram()) + buffer.putInt(0); + else + buffer.putInt(0xFFFFFFFF); + + buffer.put((byte) (creature.isRadarVisible() ? 1 : 0)); + buffer.put((byte) 0); // no effect for 1? + buffer.put((byte) 0); // no effect for 1? + if(creature.getAppearanceEquipmentList().isEmpty()) { buffer.putInt(0); - buffer.putInt(0); + buffer.putInt(creature.getAppearanceEquipmentListUpdateCounter()); } else { buffer.putInt(creature.getAppearanceEquipmentList().size()); - buffer.putInt(0); + buffer.putInt(creature.getAppearanceEquipmentListUpdateCounter()); - for(SWGObject obj : creature.getAppearanceEquipmentList().get()) { + for(Long objId : creature.getAppearanceEquipmentList().get()) { + + SWGObject obj = NGECore.getInstance().objectService.getObject(objId); + + if(obj == null) { + System.err.println("Cant find obj for obj id in equip list!!!"); + continue; + } if(obj instanceof TangibleObject) { TangibleObject tangible = (TangibleObject) obj; @@ -406,8 +432,7 @@ public class CreatureMessageBuilder extends ObjectMessageBuilder { } } - buffer.putInt(0); - buffer.putInt(0); + buffer.putLong(0); // unk long int size = buffer.position(); buffer = bufferPool.allocate(size, false).put(buffer.array(), 0, size); @@ -541,7 +566,7 @@ public class CreatureMessageBuilder extends ObjectMessageBuilder { } - public IoBuffer buildSpeedModDelta(float speed) { + public IoBuffer buildSpeedModBaseDelta(float speed) { IoBuffer buffer = bufferPool.allocate(4, false).order(ByteOrder.LITTLE_ENDIAN); buffer.putFloat(speed); @@ -552,6 +577,19 @@ public class CreatureMessageBuilder extends ObjectMessageBuilder { return buffer; } + + public IoBuffer buildSpeedModDelta(float speedModifier) { + + IoBuffer buffer = bufferPool.allocate(4, false).order(ByteOrder.LITTLE_ENDIAN); + buffer.putFloat(speedModifier); + int size = buffer.position(); + buffer.flip(); + buffer = createDelta("CREO", (byte) 4, (short) 1, (short) 5, buffer, size + 4); + + return buffer; + + } + public IoBuffer buildTurnRadiusDelta(float turnRadius) { @@ -586,6 +624,15 @@ public class CreatureMessageBuilder extends ObjectMessageBuilder { return buffer; } + public IoBuffer buildCurrentAnimationDelta(String currentAnimation) { + IoBuffer buffer = bufferPool.allocate(getAsciiString(currentAnimation).length, false).order(ByteOrder.LITTLE_ENDIAN); + buffer.put(getAsciiString(currentAnimation)); + int size = buffer.position(); + buffer.flip(); + buffer = createDelta("CREO", (byte) 6, (short) 1, (short) 10, buffer, size + 4); + return buffer; + } + public IoBuffer buildLevelDelta(short level) { IoBuffer buffer = bufferPool.allocate(2, false).order(ByteOrder.LITTLE_ENDIAN); @@ -622,6 +669,16 @@ public class CreatureMessageBuilder extends ObjectMessageBuilder { } + public IoBuffer buildGuildIdDelta(int guildId) { + IoBuffer buffer = bufferPool.allocate(4, false).order(ByteOrder.LITTLE_ENDIAN); + buffer.putInt(guildId); + int size = buffer.position(); + buffer.flip(); + buffer = createDelta("CREO", (byte) 6, (short) 1, (short) 0x0F, buffer, size + 4); + + return buffer; + } + public IoBuffer buildGroupInviteDelta(long inviteSenderId, String inviteSenderName, long inviteCounter) { IoBuffer buffer = bufferPool.allocate(18 + inviteSenderName.length(), false).order(ByteOrder.LITTLE_ENDIAN); @@ -636,16 +693,22 @@ public class CreatureMessageBuilder extends ObjectMessageBuilder { } - public IoBuffer buildTargetDelta(long targetId) { - + public IoBuffer buildLookAtTargetDelta(long targetId) { IoBuffer buffer = bufferPool.allocate(8, false).order(ByteOrder.LITTLE_ENDIAN); buffer.putLong(targetId); int size = buffer.position(); buffer.flip(); buffer = createDelta("CREO", (byte) 6, (short) 1, (short) 0x10, buffer, size + 4); - return buffer; - + } + + public IoBuffer buildIntendedTargetDelta(long targetId) { + IoBuffer buffer = bufferPool.allocate(8, false).order(ByteOrder.LITTLE_ENDIAN); + buffer.putLong(targetId); + int size = buffer.position(); + buffer.flip(); + buffer = createDelta("CREO", (byte) 6, (short) 1, (short) 0x11, buffer, size + 4); + return buffer; } public IoBuffer buildHealthDelta(int health) { @@ -684,7 +747,7 @@ public class CreatureMessageBuilder extends ObjectMessageBuilder { return buffer; - } + } public IoBuffer buildMaxHealthDelta(int health) { @@ -730,7 +793,10 @@ public class CreatureMessageBuilder extends ObjectMessageBuilder { IoBuffer buffer = bufferPool.allocate(37, false).order(ByteOrder.LITTLE_ENDIAN); buffer.putInt(1); buffer.putInt(creature.getBuffListCounter()); - buff.setTotalPlayTime((int) (player.getTotalPlayTime() + (System.currentTimeMillis() - player.getLastPlayTimeUpdate()) / 1000)); + if(player != null) + buff.setTotalPlayTime((int) (player.getTotalPlayTime() + (System.currentTimeMillis() - player.getLastPlayTimeUpdate()) / 1000)); + else + buff.setTotalPlayTime(0); buffer.put((byte) 0); buffer.put(buff.getBytes()); int size = buffer.position(); @@ -766,7 +832,10 @@ public class CreatureMessageBuilder extends ObjectMessageBuilder { IoBuffer buffer = bufferPool.allocate(37, false).order(ByteOrder.LITTLE_ENDIAN); buffer.putInt(1); buffer.putInt(creature.getBuffListCounter()); - buff.setTotalPlayTime((int) (player.getTotalPlayTime() + (System.currentTimeMillis() - player.getLastPlayTimeUpdate()) / 1000)); + if(player != null) + buff.setTotalPlayTime((int) (player.getTotalPlayTime() + (System.currentTimeMillis() - player.getLastPlayTimeUpdate()) / 1000)); + else + buff.setTotalPlayTime(0); buffer.put((byte) 2); buffer.put(buff.getBytes()); int size = buffer.position(); @@ -794,46 +863,6 @@ public class CreatureMessageBuilder extends ObjectMessageBuilder { } - public IoBuffer buildAddSkillModDelta(String name, int base) { - - CreatureObject creature = (CreatureObject) object; - - IoBuffer buffer = bufferPool.allocate(19 + name.length(), false).order(ByteOrder.LITTLE_ENDIAN); - buffer.putInt(1); - buffer.putInt(creature.getSkillModsUpdateCounter()); - buffer.put((byte) 0); - buffer.put(getAsciiString(name)); - buffer.putInt(base); - buffer.putInt(0); - - int size = buffer.position(); - buffer.flip(); - buffer = createDelta("CREO", (byte) 4, (short) 1, (short) 3, buffer, size + 4); - - return buffer; - - } - - public IoBuffer buildRemoveSkillModDelta(String name, int base) { - - CreatureObject creature = (CreatureObject) object; - - IoBuffer buffer = bufferPool.allocate(19 + name.length(), false).order(ByteOrder.LITTLE_ENDIAN); - buffer.putInt(1); - buffer.putInt(creature.getSkillModsUpdateCounter()); - buffer.put((byte) 1); - buffer.put(getAsciiString(name)); - buffer.putInt(base); - buffer.putInt(0); - - int size = buffer.position(); - buffer.flip(); - buffer = createDelta("CREO", (byte) 4, (short) 1, (short) 3, buffer, size + 4); - - return buffer; - - } - public IoBuffer buildAddSkillDelta(String name) { CreatureObject creature = (CreatureObject) object; @@ -870,44 +899,6 @@ public class CreatureMessageBuilder extends ObjectMessageBuilder { } - public IoBuffer buildAddAbilityDelta(String name) { - - CreatureObject creature = (CreatureObject) object; - - IoBuffer buffer = bufferPool.allocate(15 + name.length(), false).order(ByteOrder.LITTLE_ENDIAN); - buffer.putInt(1); - buffer.putInt(creature.getAbilitiesUpdateCounter()); - buffer.put((byte) 0); - buffer.put(getAsciiString(name)); - buffer.putInt(1); - - int size = buffer.position(); - buffer.flip(); - buffer = createDelta("CREO", (byte) 4, (short) 1, (short) 0x0E, buffer, size + 4); - - return buffer; - - } - - public IoBuffer buildRemoveAbilityDelta(String name) { - - CreatureObject creature = (CreatureObject) object; - - IoBuffer buffer = bufferPool.allocate(15 + name.length(), false).order(ByteOrder.LITTLE_ENDIAN); - buffer.putInt(1); - buffer.putInt(creature.getAbilitiesUpdateCounter()); - buffer.put((byte) 1); - buffer.put(getAsciiString(name)); - buffer.putInt(1); - - int size = buffer.position(); - buffer.flip(); - buffer = createDelta("CREO", (byte) 4, (short) 1, (short) 0x0E, buffer, size + 4); - - return buffer; - - } - public IoBuffer buildResetHAMListDelta() { CreatureObject creature = (CreatureObject) object; @@ -956,15 +947,238 @@ public class CreatureMessageBuilder extends ObjectMessageBuilder { } - @Override - public void sendListDelta(byte viewType, short updateType, IoBuffer buffer) { - // TODO Auto-generated method stub + public IoBuffer buildCustomNameDelta(String customName) { + IoBuffer buffer = bufferPool.allocate(getUnicodeString(customName).length, false).order(ByteOrder.LITTLE_ENDIAN); + buffer.put(getUnicodeString(customName)); + int size = buffer.position(); + buffer.flip(); + buffer = createDelta("CREO", (byte) 3, (short) 1, (short) 2, buffer, size + 4); + return buffer; } - @Override - public void sendBaselines() { + public IoBuffer buildMoodAnimationDelta(String moodAnimation) { + IoBuffer buffer = bufferPool.allocate(getAsciiString(moodAnimation).length, false).order(ByteOrder.LITTLE_ENDIAN); + buffer.put(getAsciiString(moodAnimation)); + int size = buffer.position(); + buffer.flip(); + buffer = createDelta("CREO", (byte) 6, (short) 1, (short) 0x0B, buffer, size + 4); + return buffer; } + public IoBuffer buildListenToId(long creatureObjectId) { + IoBuffer buffer = bufferPool.allocate(8, false).order(ByteOrder.LITTLE_ENDIAN); + buffer.putLong(creatureObjectId); + int size = buffer.position(); + buffer.flip(); + buffer = createDelta("CREO", (byte) 4, (short) 1, (short) 0x09, buffer, size + 4); + return buffer; + } + + public IoBuffer buildPerformanceId(int performanceId) { + IoBuffer buffer = bufferPool.allocate(4, false).order(ByteOrder.LITTLE_ENDIAN); + buffer.putInt(performanceId); + int size = buffer.position(); + buffer.flip(); + buffer = createDelta("CREO", (byte) 6, (short) 1, (short) 0x14, buffer, size + 4); + return buffer; + } + + public IoBuffer buildPerformanceCounter(int performanceCounter) { + IoBuffer buffer = bufferPool.allocate(4, false).order(ByteOrder.LITTLE_ENDIAN); + buffer.putInt(performanceCounter); + int size = buffer.position(); + buffer.flip(); + buffer = createDelta("CREO", (byte) 6, (short) 1, (short) 0x13, buffer, size + 4); + return buffer; + } + + public IoBuffer buildStartPerformance(boolean doStart) { + IoBuffer buffer = bufferPool.allocate(1, false).order(ByteOrder.LITTLE_ENDIAN); + buffer.put((byte) ((doStart) ? 1 : 0)); + int size = buffer.position(); + buffer.flip(); + buffer = createDelta("CREO", (byte) 6, (short) 1, (short) 0x1B, buffer, size + 4); + return buffer; + } + + + public IoBuffer buildDifficultyDelta(byte difficulty) { + IoBuffer buffer = bufferPool.allocate(1, false).order(ByteOrder.LITTLE_ENDIAN); + buffer.put(difficulty); + int size = buffer.position(); + buffer.flip(); + buffer = createDelta("CREO", (byte) 6, (short) 1, (short) 0x1C, buffer, size + 4); + return buffer; + } + + public IoBuffer buildAddEquipmentDelta(TangibleObject item) { + + CreatureObject creature = (CreatureObject) object; + + IoBuffer buffer = bufferPool.allocate(496, false).order(ByteOrder.LITTLE_ENDIAN); + buffer.putInt(1); + buffer.putInt(creature.getEquipmentListUpdateCounter()); + buffer.put((byte) 1); + buffer.putShort((short) creature.getEquipmentList().indexOf(item.getObjectId())); + if(item.getCustomization() == null || item.getCustomization().length == 0) { + buffer.putShort((short) 0); + } else { + buffer.putShort((short) item.getCustomization().length); + buffer.put(item.getCustomization()); + } + buffer.putInt(item.getArrangementId()); + buffer.putLong(item.getObjectID()); + buffer.putInt(CRC.StringtoCRC(item.getTemplate())); + if(item instanceof WeaponObject) { + WeaponObject weapon = (WeaponObject) item; + buffer.put((byte) 1); + buffer.put(weapon.getMessageBuilder().buildBaseline3()); + buffer.put(weapon.getMessageBuilder().buildBaseline6()); + } else { + buffer.put((byte) 0); + } + + int size = buffer.position(); + buffer = bufferPool.allocate(size, false).put(buffer.array(), 0, size); + buffer.flip(); + buffer = createDelta("CREO", (byte) 6, (short) 1, (short) 0x17, buffer, size + 4); + + return buffer; + + } + + public IoBuffer buildRemoveEquipmentDelta(TangibleObject item) { + + CreatureObject creature = (CreatureObject) object; + + IoBuffer buffer = bufferPool.allocate(11, false).order(ByteOrder.LITTLE_ENDIAN); + buffer.putInt(1); + buffer.putInt(creature.getEquipmentListUpdateCounter()); + buffer.put((byte) 0); + buffer.putShort((short) creature.getEquipmentList().indexOf(item.getObjectId())); + + int size = buffer.position(); + buffer.flip(); + buffer = createDelta("CREO", (byte) 6, (short) 1, (short) 0x17, buffer, size + 4); + + return buffer; + + } + + public IoBuffer buildAddAppearanceEquipmentDelta(TangibleObject item) { + + CreatureObject creature = (CreatureObject) object; + + IoBuffer buffer = bufferPool.allocate(100, false).order(ByteOrder.LITTLE_ENDIAN); + buffer.putInt(1); + buffer.putInt(creature.getAppearanceEquipmentListUpdateCounter()); + buffer.put((byte) 1); + buffer.putShort((short) creature.getAppearanceEquipmentList().indexOf(item)); + if(item.getCustomization() == null || item.getCustomization().length == 0) { + buffer.putShort((short) 0); + } else { + buffer.putShort((short) item.getCustomization().length); + buffer.put(item.getCustomization()); + } + buffer.putInt(item.getArrangementId()); + buffer.putLong(item.getObjectID()); + buffer.putInt(CRC.StringtoCRC(item.getTemplate())); + buffer.put((byte) 0); + + int size = buffer.position(); + buffer = bufferPool.allocate(size, false).put(buffer.array(), 0, size); + buffer.flip(); + buffer = createDelta("CREO", (byte) 6, (short) 1, (short) 0x21, buffer, size + 4); + + return buffer; + + } + + public IoBuffer buildRemoveAppearanceEquipmentDelta(TangibleObject item) { + + CreatureObject creature = (CreatureObject) object; + + IoBuffer buffer = bufferPool.allocate(11, false).order(ByteOrder.LITTLE_ENDIAN); + buffer.putInt(1); + buffer.putInt(creature.getAppearanceEquipmentListUpdateCounter()); + buffer.put((byte) 0); + buffer.putShort((short) creature.getAppearanceEquipmentList().indexOf(item)); + + int size = buffer.position(); + buffer.flip(); + buffer = createDelta("CREO", (byte) 6, (short) 1, (short) 0x21, buffer, size + 4); + + return buffer; + + } + + public IoBuffer buildXPBarDelta(int xpBarValue) { + IoBuffer buffer = bufferPool.allocate(4, false).order(ByteOrder.LITTLE_ENDIAN); + buffer.putInt(xpBarValue); + int size = buffer.position(); + buffer.flip(); + buffer = createDelta("CREO", (byte) 4, (short) 1, (short) 0x0F, buffer, size + 4); + return buffer; + } + + // TODO: This seems to be somehow related to chairs as well. + public IoBuffer buildOwnerIdDelta(long ownerId) { + IoBuffer buffer = bufferPool.allocate(8, false).order(ByteOrder.LITTLE_ENDIAN); + buffer.putLong(ownerId); + int size = buffer.position(); + buffer.flip(); + buffer = createDelta("CREO", (byte) 3, (short) 1, (short) 0x0F, buffer, size + 4); // This is the correct one + return buffer; + } + + public IoBuffer buildStealthFlagDelta(boolean flag) { + IoBuffer buffer = bufferPool.allocate(8, false).order(ByteOrder.LITTLE_ENDIAN); + buffer.put((byte) (flag ? 0 : 1)); + int size = buffer.position(); + buffer.flip(); + buffer = createDelta("CREO", (byte) 6, (short) 1, (short) 0x19, buffer, size + 4); + return buffer; + } + + public IoBuffer buildRadarVisibleFlagDelta(boolean flag) { + IoBuffer buffer = bufferPool.allocate(1, false).order(ByteOrder.LITTLE_ENDIAN); + buffer.put((byte) (flag ? 1 : 0)); + int size = buffer.position(); + buffer.flip(); + buffer = createDelta("CREO", (byte) 6, (short) 1, (short) 0x1E, buffer, size + 4); + return buffer; + } + + @Override + public void buildBaseline1(Map baselineBuilders, Map deltaBuilders) { + super.buildBaseline1(baselineBuilders, deltaBuilders); + } + + @Override + public void buildBaseline3(Map baselineBuilders, Map deltaBuilders) { + super.buildBaseline3(baselineBuilders, deltaBuilders); + } + + @Override + public void buildBaseline4(Map baselineBuilders, Map deltaBuilders) { + super.buildBaseline4(baselineBuilders, deltaBuilders); + } + + @Override + public void buildBaseline6(Map baselineBuilders, Map deltaBuilders) { + super.buildBaseline6(baselineBuilders, deltaBuilders); + } + + @Override + public void buildBaseline8(Map baselineBuilders, Map deltaBuilders) { + super.buildBaseline8(baselineBuilders, deltaBuilders); + } + + @Override + public void buildBaseline9(Map baselineBuilders, Map deltaBuilders) { + super.buildBaseline9(baselineBuilders, deltaBuilders); + } + } diff --git a/src/resources/objects/creature/CreatureObject.java b/src/resources/objects/creature/CreatureObject.java index b5863ba7..2c76eff7 100644 --- a/src/resources/objects/creature/CreatureObject.java +++ b/src/resources/objects/creature/CreatureObject.java @@ -21,56 +21,63 @@ ******************************************************************************/ package resources.objects.creature; +import java.io.Serializable; +import java.lang.System; import java.util.ArrayList; import java.util.Collections; +import java.util.Iterator; import java.util.List; +import java.util.Vector; +import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.ScheduledFuture; +import java.util.concurrent.atomic.LongAdder; import org.apache.mina.core.buffer.IoBuffer; -import protocol.swg.ChatSystemMessage; import protocol.swg.ObjControllerMessage; import protocol.swg.PlayMusicMessage; -import protocol.swg.UpdatePVPStatusMessage; import protocol.swg.UpdatePostureMessage; +import protocol.swg.UpdatePVPStatusMessage; +import protocol.swg.chat.ChatSystemMessage; +import protocol.swg.objectControllerObjects.Animation; import protocol.swg.objectControllerObjects.Posture; +import protocol.swg.objectControllerObjects.StartTask; -import com.sleepycat.je.Environment; -import com.sleepycat.je.Transaction; import com.sleepycat.persist.model.Entity; import com.sleepycat.persist.model.NotPersistent; +import main.NGECore; import engine.clients.Client; -import resources.objects.Buff; -import resources.objects.DamageOverTime; +import resources.buffs.Buff; +import resources.buffs.DamageOverTime; +import resources.common.OutOfBand; +import resources.objects.ObjectMessageBuilder; import resources.objects.SWGList; -import engine.resources.objects.IPersistent; -import engine.resources.objects.MissionCriticalObject; +import resources.objects.SWGMap; +import engine.resources.common.CRC; import engine.resources.objects.SWGObject; -import engine.resources.objects.SkillMod; import engine.resources.scene.Planet; import engine.resources.scene.Point3D; import engine.resources.scene.Quaternion; - +import resources.objects.player.PlayerObject; import resources.objects.tangible.TangibleObject; -import resources.objects.weapon.WeaponObject; +import resources.skills.SkillMod; +import services.command.BaseSWGCommand; -@Entity(version=2) -public class CreatureObject extends TangibleObject implements IPersistent { +@Entity(version=9) +public class CreatureObject extends TangibleObject implements Serializable { - @NotPersistent - private Transaction txn; + private static final long serialVersionUID = 1L; // CREO 1 private int bankCredits = 0; private int cashCredits = 0; - private SWGList skills; + private List skills; @NotPersistent - private int skillsUpdateCounter = 0; - + private transient int skillsUpdateCounter = 0; + // CREO 3 private byte posture = 0; - private int factionStatus = 0; private float height; private int battleFatigue = 0; private long stateBitmask = 0; @@ -79,29 +86,24 @@ public class CreatureObject extends TangibleObject implements IPersistent { // CREO 4 private float accelerationMultiplierBase = 1; private float accelerationMultiplierMod = 1; - private SWGList skillMods; - @NotPersistent - private int skillModsUpdateCounter = 0; + private SWGMap skillMods; private float speedMultiplierBase = 1; private float speedMultiplierMod = 1; - private long listenToId = 0; private float runSpeed = (float) 7.3; private float slopeModAngle = 1; private float slopeModPercent = 1; private float turnRadius = 1; - private float walkSpeed = (float) 2.75; - private float waterModPercent = 1; - private SWGList abilities; - private int abilitiesUpdateCounter = 0; - - private SWGList missionCriticalObjects; + private float walkSpeed = (float) 1.549; + private float waterModPercent = (float) 0.75; + private SWGMap abilities; + private int xpBarValue = 0; + + private SWGMap missionCriticalObjects; @NotPersistent - private int missionCriticalObjectsUpdateCounter = 0; - - + private transient int missionCriticalObjectsUpdateCounter = 0; + // CREO6 - private byte combatFlag = 0; - private short level = 90; + private short level = -1; private int grantedHealth = 0; private String currentAnimation; private String moodAnimation; @@ -111,50 +113,90 @@ public class CreatureObject extends TangibleObject implements IPersistent { private String inviteSenderName; private long inviteCounter = 0; private int guildId = 0; + private long lookAtTarget = 0; private long targetId = 0; private byte moodId = 0; private int performanceCounter = 0; private int performanceId = 0; + private boolean hologram = false; + private boolean performanceType = false; + private boolean acceptBandflourishes = true; + private boolean groupDance = true; + @NotPersistent + private transient CreatureObject performanceWatchee; + @NotPersistent + private transient CreatureObject performanceListenee; + @NotPersistent + private transient Vector performanceAudience = new Vector(); private int health = 1000; private int action = 300; @NotPersistent - private int HAMListCounter = 0; + private transient int HAMListCounter = 0; private int maxHealth = 1000; private int maxAction = 300; @NotPersistent - private int maxHAMListCounter = 0; + private transient int maxHAMListCounter = 0; - private SWGList equipmentList; + private SWGList equipmentList; @NotPersistent - private int equipmentListUpdateCounter = 0; + private transient int equipmentListUpdateCounter = 0; private SWGList buffList = new SWGList(); @NotPersistent - private int buffListUpdateCounter = 0; - private SWGList appearanceEquipmentList; + private transient int buffListUpdateCounter = 0; + private byte difficulty = 0; + private SWGList appearanceEquipmentList; @NotPersistent - private int appearanceEquipmentListUpdateCounter = 0; - + private transient int appearanceEquipmentListUpdateCounter = 0; + + private boolean inStealth = false; + private boolean radarVisible = true; // radar + private boolean stationary = false; + // non-baseline vars @NotPersistent - private List duelList = Collections.synchronizedList(new ArrayList()); + private transient List duelList = Collections.synchronizedList(new ArrayList()); @NotPersistent - private CreatureMessageBuilder messageBuilder; + private transient CreatureMessageBuilder messageBuilder; private SWGList dotList = new SWGList(); @NotPersistent - private ScheduledFuture incapTask; - + private transient ScheduledFuture incapTask; + @NotPersistent + private transient ScheduledFuture entertainerExperience; + @NotPersistent + private transient ScheduledFuture inspirationTick; + @NotPersistent + private transient ScheduledFuture spectatorTask; + + @NotPersistent + private transient int flourishCount = 0; + @NotPersistent + private transient boolean performingEffect; + @NotPersistent + private transient boolean performingFlourish; + private int coverCharge; + @NotPersistent + private transient TangibleObject conversingNpc; + @NotPersistent + private transient ConcurrentHashMap cooldowns = new ConcurrentHashMap(); + @NotPersistent + private transient long tefTime = 0; + @NotPersistent + private transient SWGObject useTarget; + + private byte locomotion = 0; public CreatureObject(long objectID, Planet planet, Point3D position, Quaternion orientation, String Template) { - super(objectID, planet, Template, position, orientation); + super(objectID, planet, position, orientation, Template); messageBuilder = new CreatureMessageBuilder(this); - skills = new SWGList(messageBuilder, 1, 3); - skillMods = new SWGList(messageBuilder, 4, 3); - abilities = new SWGList(messageBuilder, 4, 14); - missionCriticalObjects = new SWGList(messageBuilder, 4, 13); - equipmentList = new SWGList(messageBuilder, 6, 0x17); - buffList = new SWGList(messageBuilder, 6, 0x1A); - appearanceEquipmentList = new SWGList(messageBuilder, 6, 0x1F); + loadTemplateData(); + skills = new ArrayList(); + skillMods = new SWGMap(this, 4, 3, true); + abilities = new SWGMap(this, 4, 14, true); + missionCriticalObjects = new SWGMap(this, 4, 13, false); + equipmentList = new SWGList(this, 6, 23, false); + buffList = new SWGList(this, 6, 26, false); + appearanceEquipmentList = new SWGList(this, 6, 31, false); } public CreatureObject() { @@ -162,15 +204,47 @@ public class CreatureObject extends TangibleObject implements IPersistent { messageBuilder = new CreatureMessageBuilder(this); } - public Transaction getTransaction() { return txn; } - - public void createTransaction(Environment env) { txn = env.beginTransaction(null, null); } + @Override + public void initAfterDBLoad() { + super.init(); + defendersList = new Vector(); + duelList = Collections.synchronizedList(new ArrayList()); + cooldowns = new ConcurrentHashMap(); + performanceAudience = new Vector(); + messageBuilder = new CreatureMessageBuilder(this); + dotList.init(this); + buffList.init(this); + equipmentList.init(this); + appearanceEquipmentList.init(this); + missionCriticalObjects.init(this); + abilities.init(this); + skillMods.init(this); + } + private void loadTemplateData() { + + /*if(getTemplateData().getAttribute("scale") != null) + setHeight((float) getTemplateData().getAttribute("scale")); + if(getTemplateData().getAttribute("speed") != null) { + //System.out.println(getTemplateData().getAttribute("speed")); + setRunSpeed((float) getTemplateData().getAttribute("speed")); + } + if(getTemplateData().getAttribute("turnRate") != null) + setTurnRadius((float) getTemplateData().getAttribute("turnRate"));*/ + + } + public int getBankCredits() { synchronized(objectMutex) { return bankCredits; } } + + public boolean isPlayer() { + synchronized(objectMutex) { + return ( getSlottedObject("ghost") != null ); + } + } public void setBankCredits(int bankCredits) { synchronized(objectMutex) { @@ -180,13 +254,40 @@ public class CreatureObject extends TangibleObject implements IPersistent { getClient().getSession().write(messageBuilder.buildBankCreditsDelta(bankCredits)); } } + + public void addBankCredits(int amountToAdd) { + synchronized(objectMutex) { + this.bankCredits += amountToAdd; + } + if(getClient() != null && getClient().getSession() != null) { + getClient().getSession().write(messageBuilder.buildBankCreditsDelta(bankCredits)); + } + } public int getCashCredits() { synchronized(objectMutex) { return cashCredits; } } + + public void addCashCredits(int amountToAdd) { + synchronized(objectMutex) { + this.cashCredits += amountToAdd; + } + if(getClient() != null && getClient().getSession() != null) { + getClient().getSession().write(messageBuilder.buildCashCreditsDelta(cashCredits)); + } + } + public void deductCashCredits(int amountToDeduct) { + synchronized(objectMutex) { + this.cashCredits -= amountToDeduct; + } + if(getClient() != null && getClient().getSession() != null) { + getClient().getSession().write(messageBuilder.buildCashCreditsDelta(cashCredits)); + } + } + public void setCashCredits(int cashCredits) { synchronized(objectMutex) { this.cashCredits = cashCredits; @@ -196,12 +297,12 @@ public class CreatureObject extends TangibleObject implements IPersistent { } } - public SWGList getSkills() { + public List getSkills() { return skills; } public boolean hasSkill(String name) { - synchronized(objectMutex) { + /*synchronized(objectMutex) { for (String skill : skills) { if (skill.equals(name)) { return true; @@ -209,7 +310,8 @@ public class CreatureObject extends TangibleObject implements IPersistent { } return false; - } + }*/ + return skills.contains(name); } public short getSkillsUpdateCounter() { @@ -251,17 +353,25 @@ public class CreatureObject extends TangibleObject implements IPersistent { } } - - @Override - public void setOptionsBitmask(int optionBitmask) { + + public void setOptions(int options, boolean add) { synchronized(objectMutex) { - this.optionsBitmask = optionBitmask; + if (options != 0) { + if (add) { + addOption(options); + } else { + removeOption(options); + } + } } - - IoBuffer optionDelta = messageBuilder.buildOptionMaskDelta(optionBitmask); - - notifyObservers(optionDelta, true); - + } + + public void addOption(int option) { + setOptionsBitmask(getOptionsBitmask() | option); + } + + public void removeOption(int option) { + setOptionsBitmask(getOptionsBitmask() & ~option); } public byte getPosture() { @@ -272,45 +382,174 @@ public class CreatureObject extends TangibleObject implements IPersistent { public void setPosture(byte posture) { synchronized(objectMutex) { + switch (posture) { + case resources.datatables.Posture.Invalid: + locomotion = -1; + break; + case resources.datatables.Posture.Upright: + locomotion = 0; + break; + case resources.datatables.Posture.Crouched: + locomotion = 4; + break; + case resources.datatables.Posture.Prone: + locomotion = 7; + break; + case resources.datatables.Posture.Sneaking: + locomotion = 1; + break; + case resources.datatables.Posture.Blocking: + locomotion = 21; + break; + case resources.datatables.Posture.Climbing: + locomotion = 9; + break; + case resources.datatables.Posture.Flying: + locomotion = 12; + break; + case resources.datatables.Posture.LyingDown: + locomotion = 13; + break; + case resources.datatables.Posture.Sitting: + locomotion = 14; + break; + case resources.datatables.Posture.SkillAnimating: + locomotion = 15; + break; + case resources.datatables.Posture.DrivingVehicle: + locomotion = 16; + break; + case resources.datatables.Posture.RidingCreature: + locomotion = 17; + break; + case resources.datatables.Posture.KnockedDown: + locomotion = 18; + break; + case resources.datatables.Posture.Incapacitated: + locomotion = 19; + break; + case resources.datatables.Posture.Dead: + locomotion = 20; + break; + } + } + + synchronized(objectMutex) { + if (this.posture == resources.datatables.Posture.SkillAnimating) { + stopPerformance(); + } + + if (this.posture == posture) { + return; + } + this.posture = posture; } - IoBuffer postureDelta = messageBuilder.buildPostureDelta(posture); - Posture postureUpdate = new Posture(getObjectID(), posture); - ObjControllerMessage objController = new ObjControllerMessage(0x1B, postureUpdate); - notifyObservers(postureDelta, true); - notifyObservers(objController, true); + notifyObservers(messageBuilder.buildPostureDelta(posture), true); + notifyObservers(new ObjControllerMessage(0x1B, new Posture(getObjectID(), posture)), true); + } + + public byte getLocomotion() { + return locomotion; + } + + public void setLocomotion(byte locomotion) { + this.locomotion = locomotion; + } + + public void startPerformance() { + setStationary(true); + } + + public void stopPerformance() { + String type = ""; + + synchronized(objectMutex) { + // Some reason this prevents the animation for playing an instrument when stopping (unless that's what "" does) + setCurrentAnimation(getCurrentAnimation()); + + setPerformanceCounter(0); + setPerformanceId(0,true); + + type = (performanceType) ? "dance" : "music"; + + if (entertainerExperience != null) { + entertainerExperience.cancel(true); + entertainerExperience = null; + } + } + + sendSystemMessage("@performance:" + type + "_stop_self",(byte)0); + stopAudience(); + setStationary(false); + } + + public void stopAudience() { + synchronized(objectMutex) { + //String type = (performanceType) ? "dance" : "music"; + if (performanceAudience == null) { + return; + } + Iterator it = performanceAudience.iterator(); + while (it.hasNext()) { + CreatureObject next = it.next(); + if ((performanceType) && (next.getPerformanceWatchee() != this)) { continue; } + if ((!performanceType) && (next.getPerformanceListenee() != this)) { continue; } + if (performanceType) { next.setPerformanceWatchee(null); } + if (!performanceType) { next.setPerformanceListenee(null); } + //this may be a bit dodgy. + boolean isEntertained = next.getPerformanceListenee() != null && next.getPerformanceWatchee() != null; + if (!isEntertained) { + next.setMoodAnimation(""); + } + if (next == this) { continue; } + if(performanceType) { next.sendSystemMessage("You stop watching " + getCustomName() + ".",(byte)0); } + else { next.sendSystemMessage("You stop listening to " + getCustomName() + ".",(byte)0); } + next.getSpectatorTask().cancel(true); + } + } + } + public ScheduledFuture getEntertainerExperience() { + return entertainerExperience; } - @Override + public void setEntertainerExperience(ScheduledFuture entertainerExperience) { + this.entertainerExperience = entertainerExperience; + } + + public ScheduledFuture getInspirationTick() { + synchronized(objectMutex) { + return inspirationTick; + } + } + + public void setInspirationTick(ScheduledFuture inspirationTick) { + synchronized(objectMutex) { + this.inspirationTick = inspirationTick; + } + } + public void setFaction(String faction) { - synchronized(objectMutex) { - this.faction = faction; - } - - IoBuffer factionDelta = messageBuilder.buildFactionDelta(faction); - - notifyObservers(factionDelta, true); + super.setFaction(faction); - } - - public int getFactionStatus() { - synchronized(objectMutex) { - return factionStatus; + CreatureObject companion = NGECore.getInstance().mountService.getCompanion(this); + + if (companion != null) { + companion.setFaction(faction); } } - + public void setFactionStatus(int factionStatus) { - synchronized(objectMutex) { - this.factionStatus = factionStatus; + super.setFactionStatus(factionStatus); + + CreatureObject companion = NGECore.getInstance().mountService.getCompanion(this); + + if (companion != null) { + companion.setFactionStatus(factionStatus); } - - IoBuffer factionStatusDelta = messageBuilder.buildFactionStatusDelta(factionStatus); - - notifyObservers(factionStatusDelta, true); - } - + public float getHeight() { synchronized(objectMutex) { return height; @@ -356,7 +595,27 @@ public class CreatureObject extends TangibleObject implements IPersistent { notifyObservers(stateDelta, true); } - + + public void setState(long state, boolean add) { + synchronized(objectMutex) { + if (state != 0) { + if (add) { + state = (stateBitmask | state); + } else { + state = (stateBitmask & ~state); + } + } + } + + notifyObservers(messageBuilder.buildStateDelta(state), true); + } + + public boolean getState(long state) { + synchronized(objectMutex) { + return ((stateBitmask & state) == state); + } + } + public long getOwnerId() { synchronized(objectMutex) { return ownerId; @@ -367,6 +626,10 @@ public class CreatureObject extends TangibleObject implements IPersistent { synchronized(objectMutex) { this.ownerId = ownerId; } + + setStringAttribute("owner", NGECore.getInstance().objectService.getObject(ownerId).getCustomName()); + + notifyObservers(messageBuilder.buildOwnerIdDelta(ownerId), true); } public float getAccelerationMultiplierBase() { @@ -392,20 +655,13 @@ public class CreatureObject extends TangibleObject implements IPersistent { this.accelerationMultiplierMod = accelerationMultiplierMod; } } - - public SWGList getSkillMods() { + + public SWGMap getSkillMods() { return skillMods; } public SkillMod getSkillMod(String name) { - synchronized(skillMods.getMutex()) { - for(SkillMod skillMod : skillMods.get()) { - if(skillMod.getSkillModString().equals(name)) - return skillMod; - } - } - - return null; + return skillMods.get(name); } public int getSkillModBase(String name) { @@ -413,67 +669,15 @@ public class CreatureObject extends TangibleObject implements IPersistent { return ((skillMod == null) ? 0 : skillMod.getBase()); } - public void addSkillMod(String name, int base) { - if(getSkillMod(name) == null) { - SkillMod skillMod = new SkillMod(); - skillMod.setBase(base); - skillMod.setSkillModString(name); - skillMod.setModifier(0); - skillMods.add(skillMod); - } else { - SkillMod mod = getSkillMod(name); - mod.setBase(mod.getBase() + base); - if(getClient() != null) { - setSkillModsUpdateCounter((short) (getSkillModsUpdateCounter() + 1)); - getClient().getSession().write(messageBuilder.buildAddSkillModDelta(name, mod.getBase())); - } - } - + public int getSkillModModifier(String name) { + SkillMod skillMod = getSkillMod(name); + return ((skillMod == null) ? 0 : skillMod.getModifier()); } - public void deductSkillMod(String name, int base) { - - if(getSkillMod(name) == null) - return; - - SkillMod mod = getSkillMod(name); - mod.setBase(mod.getBase() - base); - - if(mod.getBase() <= 0) { - removeSkillMod(mod); - } else { - if(getClient() != null) { - setSkillModsUpdateCounter((short) (getSkillModsUpdateCounter() + 1)); - getClient().getSession().write(messageBuilder.buildAddSkillModDelta(name, mod.getBase())); - } - } - + public float getSkillModValue(String name, int divisor) { + SkillMod skillMod = getSkillMod(name); + return ((skillMod == null) ? 0.0f : skillMod.getValue(divisor)); } - - public void removeSkillMod(SkillMod mod) { - - skillMods.remove(mod); - - if(getClient() != null) { - setSkillModsUpdateCounter((short) (getSkillModsUpdateCounter() + 1)); - getClient().getSession().write(messageBuilder.buildRemoveSkillModDelta(mod.getSkillModString(), mod.getBase())); - } - - - } - - public short getSkillModsUpdateCounter() { - synchronized(objectMutex) { - return (short) skillModsUpdateCounter; - } - } - - public void setSkillModsUpdateCounter(short skillModsUpdateCounter) { - synchronized(objectMutex) { - this.skillModsUpdateCounter = skillModsUpdateCounter; - } - } - public float getSpeedMultiplierBase() { synchronized(objectMutex) { @@ -485,7 +689,7 @@ public class CreatureObject extends TangibleObject implements IPersistent { synchronized(objectMutex) { this.speedMultiplierBase = speedMultiplierBase; } - IoBuffer speedDelta = messageBuilder.buildSpeedModDelta(speedMultiplierBase); + IoBuffer speedDelta = messageBuilder.buildSpeedModBaseDelta(speedMultiplierBase); notifyObservers(speedDelta, true); @@ -501,18 +705,9 @@ public class CreatureObject extends TangibleObject implements IPersistent { synchronized(objectMutex) { this.speedMultiplierMod = speedMultiplierMod; } - } - - public long getListenToId() { - synchronized(objectMutex) { - return listenToId; - } - } - - public void setListenToId(long listenToId) { - synchronized(objectMutex) { - this.listenToId = listenToId; - } + IoBuffer speedDelta = messageBuilder.buildSpeedModDelta(speedMultiplierMod); + + notifyObservers(speedDelta, true); } public float getRunSpeed() { @@ -590,82 +785,35 @@ public class CreatureObject extends TangibleObject implements IPersistent { this.waterModPercent = waterModPercent; } } - - public SWGList getAbilities() { + + public SWGMap getAbilities() { return abilities; } public boolean hasAbility(String name) { - for (String ability : abilities) { - if (ability.equals(name)) { - return true; - } - } - - return false; + return abilities.containsKey(name); } - - public int getAbilitiesUpdateCounter() { - synchronized(objectMutex) { - return abilitiesUpdateCounter; - } - } - - public void setAbilitiesUpdateCounter(int abilitiesUpdateCounter) { - synchronized(objectMutex) { - this.abilitiesUpdateCounter = abilitiesUpdateCounter; - } - } - public void addAbility(String abilityName) { - - if(abilities.contains(abilityName)) + if (abilities.containsKey(abilityName)) { return; - - abilities.add(abilityName); - - if(getClient() != null) { - setAbilitiesUpdateCounter((short) (getAbilitiesUpdateCounter() + 1)); - getClient().getSession().write(messageBuilder.buildAddAbilityDelta(abilityName)); } - + + abilities.put(abilityName, 1); } public void removeAbility(String abilityName) { - - if(!abilities.contains(abilityName)) + if (!abilities.containsKey(abilityName)) { return; + } abilities.remove(abilityName); - - if(getClient() != null) { - setAbilitiesUpdateCounter((short) (getAbilitiesUpdateCounter() + 1)); - getClient().getSession().write(messageBuilder.buildRemoveAbilityDelta(abilityName)); - } - } - - - public SWGList getMissionCriticalObjects() { + + public SWGMap getMissionCriticalObjects() { return missionCriticalObjects; } - - public byte getCombatFlag() { - synchronized(objectMutex) { - return combatFlag; - } - } - - public void setCombatFlag(byte combatFlag) { - synchronized(objectMutex) { - this.combatFlag = combatFlag; - } - IoBuffer combatDelta = messageBuilder.buildCombatFlagDelta(combatFlag); - - notifyObservers(combatDelta, true); - } - + public short getLevel() { synchronized(objectMutex) { return level; @@ -707,6 +855,21 @@ public class CreatureObject extends TangibleObject implements IPersistent { synchronized(objectMutex) { this.currentAnimation = currentAnimation; } + Animation animation = new Animation(getObjectId(), currentAnimation); + ObjControllerMessage objController = new ObjControllerMessage(0x1B, animation); + + notifyObservers(objController, true); + + notifyObservers(messageBuilder.buildCurrentAnimationDelta(currentAnimation), true); + + } + + public void doSkillAnimation(String skillAnimation) { + Animation animation = new Animation(getObjectId(), skillAnimation); + ObjControllerMessage objController = new ObjControllerMessage(0x1B, animation); + + notifyObservers(objController, true); + } public String getMoodAnimation() { @@ -719,6 +882,8 @@ public class CreatureObject extends TangibleObject implements IPersistent { synchronized(objectMutex) { this.moodAnimation = moodAnimation; } + IoBuffer moodAnimationDelta = messageBuilder.buildMoodAnimationDelta(moodAnimation); + notifyObservers(moodAnimationDelta, true); } public long getWeaponId() { @@ -789,24 +954,60 @@ public class CreatureObject extends TangibleObject implements IPersistent { synchronized(objectMutex) { this.guildId = guildId; } + + IoBuffer guildIdDelta = messageBuilder.buildGuildIdDelta(guildId); + + notifyObservers(guildIdDelta, true); } - - public long getTargetId() { + + public long getLookAtTarget() { + synchronized(objectMutex) { + return lookAtTarget; + } + } + + public void setLookAtTarget(long lookAtTarget) { + synchronized(objectMutex) { + this.lookAtTarget = lookAtTarget; + } + + notifyObservers(messageBuilder.buildLookAtTargetDelta(lookAtTarget), true); + } + + public long getIntendedTarget() { synchronized(objectMutex) { return targetId; } } - - public void setTargetId(long targetId) { + + public void setIntendedTarget(long intendedTarget) { synchronized(objectMutex) { - this.targetId = targetId; + this.targetId = intendedTarget; } - IoBuffer targetDelta = messageBuilder.buildTargetDelta(targetId); - notifyObservers(targetDelta, false); - + notifyObservers(messageBuilder.buildIntendedTargetDelta(intendedTarget), true); } - + + public SWGObject getUseTarget() { + synchronized(objectMutex) { + return useTarget; + } + } + + public void setUseTarget(SWGObject useTarget) { + synchronized(objectMutex) { + this.useTarget = useTarget; + } + } + + public long getTargetId() { + return getIntendedTarget(); + } + + public void setTargetId(long targetId) { + setIntendedTarget(targetId); + } + public long getInviteCounter() { synchronized(objectMutex) { return inviteCounter; @@ -841,6 +1042,7 @@ public class CreatureObject extends TangibleObject implements IPersistent { synchronized(objectMutex) { this.performanceCounter = performanceCounter; } + getClient().getSession().write(messageBuilder.buildPerformanceCounter(performanceCounter)); } public int getPerformanceId() { @@ -849,13 +1051,22 @@ public class CreatureObject extends TangibleObject implements IPersistent { } } - public void setPerformanceId(int performanceId) { + public void setPerformanceId(int performanceId, boolean isDance) { synchronized(objectMutex) { this.performanceId = performanceId; } + getClient().getSession().write(messageBuilder.buildPerformanceId((isDance) ? 0 : performanceId)); } - public SWGList getEquipmentList() { + public boolean getAcceptBandflourishes() { + return acceptBandflourishes; + } + + public void setAcceptBandflourishes(boolean acceptBandflourishes) { + this.acceptBandflourishes = acceptBandflourishes; + } + + public SWGList getEquipmentList() { return equipmentList; } @@ -863,7 +1074,7 @@ public class CreatureObject extends TangibleObject implements IPersistent { return buffList; } - public SWGList getAppearanceEquipmentList() { + public SWGList getAppearanceEquipmentList() { return appearanceEquipmentList; } @@ -878,19 +1089,37 @@ public class CreatureObject extends TangibleObject implements IPersistent { } public void addObjectToEquipList(SWGObject object) { - if(object instanceof TangibleObject || object instanceof WeaponObject) { - equipmentList.add(object); + if(object instanceof TangibleObject) { + equipmentList.get().add(object.getObjectID()); + setEquipmentListUpdateCounter(getEquipmentListUpdateCounter() + 1); + notifyObservers(messageBuilder.buildAddEquipmentDelta((TangibleObject) object), true); } } public void removeObjectFromEquipList(SWGObject object) { - if(object instanceof TangibleObject || object instanceof WeaponObject) { - equipmentList.remove(object); + if(object instanceof TangibleObject && equipmentList.contains(object.getObjectID())) { + setEquipmentListUpdateCounter(getEquipmentListUpdateCounter() + 1); + notifyObservers(messageBuilder.buildRemoveEquipmentDelta((TangibleObject) object), true); + equipmentList.get().remove(object.getObjectID()); } } - - - @SuppressWarnings("unused") + + public void addObjectToAppearanceEquipList(SWGObject object) { + if(object instanceof TangibleObject) { + appearanceEquipmentList.get().add(object.getObjectID()); + setAppearanceEquipmentListUpdateCounter(getAppearanceEquipmentListUpdateCounter() + 1); + notifyObservers(messageBuilder.buildAddAppearanceEquipmentDelta((TangibleObject) object), true); + } + } + + public void removeObjectFromAppearanceEquipList(SWGObject object) { + if(object instanceof TangibleObject && appearanceEquipmentList.contains(object.getObjectID())) { + setAppearanceEquipmentListUpdateCounter(getAppearanceEquipmentListUpdateCounter() + 1); + notifyObservers(messageBuilder.buildRemoveAppearanceEquipmentDelta((TangibleObject) object), true); + appearanceEquipmentList.get().remove(object.getObjectID()); + } + } + @Override public void sendBaselines(Client destination) { @@ -907,55 +1136,27 @@ public class CreatureObject extends TangibleObject implements IPersistent { } //destination.getSession().write(messageBuilder.buildBaseline8()); //destination.getSession().write(messageBuilder.buildBaseline9()); - - UpdatePostureMessage upm = new UpdatePostureMessage(getObjectID(), (byte) 0); - //destination.getSession().write(upm.serialize()); - + if(destination != getClient()) { - UpdatePVPStatusMessage upvpm = new UpdatePVPStatusMessage(getObjectID()); - if (factionStatus == 1 && faction == "imperial") { - upvpm.setFaction(UpdatePVPStatusMessage.factionCRC.Imperial); - upvpm.setStatus(16); - } - - if (factionStatus == 1 && faction == "rebel") { - upvpm.setFaction(UpdatePVPStatusMessage.factionCRC.Rebel); - upvpm.setStatus(16); - } - - if (factionStatus == 2 && faction == "imperial") { - upvpm.setFaction(UpdatePVPStatusMessage.factionCRC.Imperial); - upvpm.setStatus(55); - } - if (factionStatus == 2 && faction == "rebel") { - upvpm.setFaction(UpdatePVPStatusMessage.factionCRC.Rebel); - upvpm.setStatus(55); - } - if(factionStatus == 0 && faction == "neutral") { - upvpm.setFaction(UpdatePVPStatusMessage.factionCRC.Neutral); - upvpm.setStatus(16); - } - else { - upvpm.setFaction(UpdatePVPStatusMessage.factionCRC.Neutral); - upvpm.setStatus(16); - } + UpdatePVPStatusMessage upvpm = new UpdatePVPStatusMessage(getObjectID(), NGECore.getInstance().factionService.calculatePvpStatus((CreatureObject) destination.getParent(), this), getFaction()); destination.getSession().write(upvpm.serialize()); + UpdatePostureMessage upm = new UpdatePostureMessage(getObjectID(), getPosture()); + destination.getSession().write(upm.serialize()); } } public void sendSystemMessage(String message, byte displayType) { - - if(getClient() != null && getClient().getSession() != null) { - ChatSystemMessage systemMsg = new ChatSystemMessage(message, displayType); - getClient().getSession().write(systemMsg.serialize()); - } - + sendSystemMessage(message, new OutOfBand(), displayType); } - public void sendSystemMessage(String stfFilename, String stfName, int stat, int displayType) { + public void sendSystemMessage(OutOfBand outOfBand, byte displayType) { + sendSystemMessage("", outOfBand, displayType); + } + + public void sendSystemMessage(String message, OutOfBand outOfBand, byte displayType) { if(getClient() != null && getClient().getSession() != null) { - ChatSystemMessage systemMsg = new ChatSystemMessage(stfFilename, stfName, stat, (byte) displayType); + ChatSystemMessage systemMsg = new ChatSystemMessage(message, outOfBand, displayType); getClient().getSession().write(systemMsg.serialize()); } @@ -1010,14 +1211,18 @@ public class CreatureObject extends TangibleObject implements IPersistent { IoBuffer delta; synchronized(objectMutex) { + if (this.health == health) return; if(health > maxHealth) - health = maxHealth; + { + setHealth(maxHealth); + return; + } setHamListCounter(getHamListCounter() + 1); delta = messageBuilder.buildHealthDelta(health); - notifyObservers(delta, true); this.health = health; } + notifyObservers(delta, true); } @@ -1028,15 +1233,21 @@ public class CreatureObject extends TangibleObject implements IPersistent { } public void setAction(int action) { + IoBuffer delta; synchronized(objectMutex) { + if (this.action == action) return; if(action > maxAction) - action = maxAction; + { + setAction(maxAction); + return; + } setHamListCounter(getHamListCounter() + 1); delta = messageBuilder.buildActionDelta(action); - notifyObservers(delta, true); this.action = action; - } + } + notifyObservers(delta, true); + } public int getHamListCounter() { @@ -1059,6 +1270,8 @@ public class CreatureObject extends TangibleObject implements IPersistent { public void setMaxHealth(int maxHealth) { synchronized(objectMutex) { + if(this.maxHealth == maxHealth) return; + this.maxHealth = maxHealth; setMaxHAMListCounter(getMaxHAMListCounter() + 1); if(maxHealth < getHealth()) @@ -1075,6 +1288,8 @@ public class CreatureObject extends TangibleObject implements IPersistent { public void setMaxAction(int maxAction) { synchronized(objectMutex) { + if(this.maxAction == maxAction) return; + this.maxAction = maxAction; setMaxHAMListCounter(getMaxHAMListCounter() + 1); if(maxAction < getAction()) @@ -1155,6 +1370,17 @@ public class CreatureObject extends TangibleObject implements IPersistent { return null; } + public Buff getBuffByCRC(int crc) { + synchronized(objectMutex) { + for (Buff buff : buffList.get()) { + if (buff.getBuffCRC() == crc) { + return buff; + } + } + } + return null; + } + public void updateGroupInviteInfo() { if(getClient() == null || getClient().getSession() == null) @@ -1171,6 +1397,13 @@ public class CreatureObject extends TangibleObject implements IPersistent { } } + public void updateHAMList() { + synchronized(objectMutex) { + setHamListCounter(getHamListCounter() + 1); + notifyObservers(messageBuilder.buildUpdateHAMListDelta(), true); + } + } + public SWGList getDotList() { return dotList; } @@ -1244,7 +1477,380 @@ public class CreatureObject extends TangibleObject implements IPersistent { } public void playMusic(String sndFile, long targetId, int repetitions, boolean flag) { - getClient().getSession().write(new PlayMusicMessage(sndFile, targetId, 1, false)); + getClient().getSession().write(new PlayMusicMessage(sndFile, targetId, 1, false).serialize()); } + public boolean getGroupDance() { + synchronized(objectMutex) { + return groupDance; + } + } + + public void setGroupDance(boolean groupDance) { + synchronized(objectMutex) { + this.groupDance = groupDance; + } + } + + public boolean toggleGroupDance() { + synchronized(objectMutex) { + groupDance = !groupDance; + return groupDance; + } + } + + public void addSpectator(CreatureObject audienceMember) { + synchronized(objectMutex) { + performanceAudience.add(audienceMember); + } + } + + public void removeSpectator(CreatureObject audienceMember) { + synchronized(objectMutex) { + if (performanceAudience == null) { return; } + if (audienceMember.getInspirationTick() != null) + audienceMember.getInspirationTick().cancel(true); + + if(performanceAudience.contains(audienceMember)) + performanceAudience.remove(audienceMember); + } + } + + public CreatureObject getPerformanceWatchee() { + synchronized(objectMutex) { + return performanceWatchee; + } + } + + public void setPerformanceWatchee(CreatureObject performanceWatchee) { + synchronized(objectMutex) { + this.performanceWatchee = performanceWatchee; + } + + //if(this.performanceListenee == null) + //getClient().getSession().write(messageBuilder.buildListenToId(0)); + } + + public CreatureObject getPerformanceListenee() { + synchronized(objectMutex) { + return performanceListenee; + } + } + + public void setPerformanceListenee(CreatureObject performanceListenee) { + synchronized(objectMutex) { + this.performanceListenee = performanceListenee; + } + if(getClient() != null) + getClient().getSession().write(messageBuilder.buildListenToId(performanceListenee.getObjectId())); + } + + public byte getDifficulty() { + synchronized(objectMutex) { + return difficulty; + } + } + + public void setDifficulty(byte difficulty) { + synchronized(objectMutex) { + this.difficulty = difficulty; + } + + notifyObservers(messageBuilder.buildDifficultyDelta(difficulty), true); + } + + public void setPerformanceType(boolean isDance) { + synchronized(objectMutex) { + this.performanceType = isDance; + } + } + + public boolean getPerformanceType() { + synchronized(objectMutex) { + return this.performanceType; + } + } + + public void setFlourishCount(int flourishCount) { + synchronized(objectMutex) { + this.flourishCount = flourishCount; + } + } + + public int getFlourishCount() { + synchronized(objectMutex) { + return this.flourishCount; + } + } + + public void incFlourishCount() { + synchronized(objectMutex) { + this.flourishCount++; + } + } + + public int getEquipmentListUpdateCounter() { + synchronized(objectMutex) { + return equipmentListUpdateCounter; + } + } + + public void setEquipmentListUpdateCounter(int equipmentListUpdateCounter) { + synchronized(objectMutex) { + this.equipmentListUpdateCounter = equipmentListUpdateCounter; + } + } + + public int getAppearanceEquipmentListUpdateCounter() { + synchronized(objectMutex) { + return appearanceEquipmentListUpdateCounter; + } + } + + public void setAppearanceEquipmentListUpdateCounter(int appearanceEquipmentListUpdateCounter) { + synchronized(objectMutex) { + this.appearanceEquipmentListUpdateCounter = appearanceEquipmentListUpdateCounter; + } + } + public int getXpBarValue() { + synchronized(objectMutex) { + return xpBarValue; + } + } + + public void setXpBarValue(int xpBarValue) { + synchronized(objectMutex) { + this.xpBarValue = xpBarValue; + } + getClient().getSession().write(messageBuilder.buildXPBarDelta(xpBarValue)); + } + + public ScheduledFuture getSpectatorTask() { + synchronized(objectMutex) { + return spectatorTask; + } + } + + public void setSpectatorTask(ScheduledFuture spectatorTask) { + synchronized(objectMutex) { + this.spectatorTask = spectatorTask; + } + } + + public boolean isPerformingEffect() { + synchronized(objectMutex) { + return performingEffect; + } + } + + public void setPerformingEffect(boolean hasEffect) { + synchronized(objectMutex) { + this.performingEffect = hasEffect; + } + } + + public void setHologram(boolean isHologram) { + synchronized(objectMutex) { + this.hologram = isHologram; + } + } + + public boolean isHologram() { + synchronized(objectMutex) { + return hologram; + } + } + + public int getCoverCharge() { + synchronized(objectMutex) { + return coverCharge; + } + } + + public void setCoverCharge(int coverCharge) { + synchronized (objectMutex) { + this.coverCharge = coverCharge; + } + } + + public boolean isPerformingFlourish() { + synchronized(objectMutex){ + return performingFlourish; + } + } + + public void setPerformingFlourish(boolean performingFlourish) { + synchronized(objectMutex) { + this.performingFlourish = performingFlourish; + } + } + + public boolean isInStealth() { + synchronized(objectMutex) { + return inStealth; + } + } + + public void setInStealth(boolean inStealth) { + synchronized(objectMutex) { + this.inStealth = inStealth; + } + + if (getClient() != null && getClient().getSession() != null) { + getClient().getSession().write(messageBuilder.buildStealthFlagDelta(inStealth)); + } + notifyObservers(messageBuilder.buildStealthFlagDelta(inStealth), false); + + } + + public boolean isRadarVisible() { + synchronized(objectMutex) { + return radarVisible; + } + } + + public void setRadarVisible(boolean radarVisible) { + synchronized(objectMutex) { + this.radarVisible = radarVisible; + } + notifyObservers(messageBuilder.buildRadarVisibleFlagDelta(radarVisible), false); + } + + public boolean isStationary() { + synchronized(objectMutex) { + return stationary; + } + } + + public void setStationary(boolean stationary) { + synchronized(objectMutex) { + this.stationary = stationary; + } + + notifyObservers(messageBuilder.buildStartPerformance(stationary), true); + } + + public TangibleObject getConversingNpc() { + synchronized(objectMutex) { + return conversingNpc; + } + } + + public void setConversingNpc(TangibleObject conversingNpc) { + synchronized(objectMutex) { + this.conversingNpc = conversingNpc; + } + } + + public void addCooldown(String cooldownGroup, float cooldownTime) { + if (cooldowns.containsKey(cooldownGroup)) { + cooldowns.remove(cooldownGroup); + } + + long duration = System.currentTimeMillis() + ((long) (cooldownTime * 1000F)); + + cooldowns.put(cooldownGroup, duration); + } + + public boolean hasCooldown(String cooldownGroup) { + if (cooldowns.containsKey(cooldownGroup)) { + if (System.currentTimeMillis() < cooldowns.get(cooldownGroup)) { + return true; + } else { + cooldowns.remove(cooldownGroup); + } + } + + return false; + } + + public boolean removeCooldown(int actionCounter, BaseSWGCommand command) { + if (cooldowns.containsKey(command.getCooldownGroup())) { + cooldowns.remove(command.getCooldownGroup()); + getClient().getSession().write(new ObjControllerMessage(0x0B, new StartTask(actionCounter, getObjectID(), command.getCommandCRC(), CRC.StringtoCRC(command.getCooldownGroup()), -1)).serialize()); + return true; + } + + return false; + } + + public long getRemainingCooldown(String cooldownGroup) { + if (cooldowns.containsKey(cooldownGroup)) { + if (System.currentTimeMillis() < cooldowns.get(cooldownGroup)) { + return (long) (cooldowns.get(cooldownGroup) - System.currentTimeMillis()); + } else { + cooldowns.remove(cooldownGroup); + } + } + + return 0L; + } + + public PlayerObject getPlayerObject() + { + return (PlayerObject) this.getSlottedObject("ghost"); + } + + //public float getCooldown(String cooldownGroup) { + //return ((float) getCooldown(cooldownGroup) / (float) 1000); + //} + + public long getTefTime() { + synchronized(objectMutex) { + return (((tefTime - System.currentTimeMillis()) > 0) ? (tefTime - System.currentTimeMillis()) : 0); + } + } + + public void setTefTime(long tefTime) { + synchronized(objectMutex) { + this.tefTime = tefTime + System.currentTimeMillis(); + } + } + + public int getInventoryItemCount() { + if(getSlottedObject("inventory") == null) + return 0; + LongAdder adder = new LongAdder(); + getSlottedObject("inventory").viewChildren(this, true, true, (obj) -> adder.increment()); + return adder.intValue(); + } + + public ObjectMessageBuilder getMessageBuilder() { + return messageBuilder; + } + + public void sendListDelta(byte viewType, short updateType, IoBuffer buffer) { + switch (viewType) { + case 4: { + switch (updateType) { + case 3: { + buffer = messageBuilder.createDelta("CREO", (byte) 4, (short) 1, (byte) 3, buffer, buffer.array().length + 4); + + if (getClient() != null && getClient().getSession() != null) { + getClient().getSession().write(buffer); + } + + break; + } + case 14: { + buffer = messageBuilder.createDelta("CREO", (byte) 4, (short) 1, (byte) 14, buffer, buffer.array().length + 4); + + if (getClient() != null && getClient().getSession() != null) { + getClient().getSession().write(buffer); + } + + break; + } + } + } + case 1: + case 3: + case 6: + case 8: + case 9: + default: { + return; + } + } + } } diff --git a/src/resources/objects/factorycrate/FactoryCrateMessageBuilder.java b/src/resources/objects/factorycrate/FactoryCrateMessageBuilder.java index dbb1e565..bcde4afc 100644 --- a/src/resources/objects/factorycrate/FactoryCrateMessageBuilder.java +++ b/src/resources/objects/factorycrate/FactoryCrateMessageBuilder.java @@ -21,6 +21,163 @@ ******************************************************************************/ package resources.objects.factorycrate; -public class FactoryCrateMessageBuilder { +import java.nio.ByteOrder; +import java.util.Map; +import org.apache.mina.core.buffer.IoBuffer; + +import engine.resources.objects.Builder; +import resources.objects.tangible.TangibleMessageBuilder; + +public class FactoryCrateMessageBuilder extends TangibleMessageBuilder{ + + public FactoryCrateMessageBuilder(FactoryCrateObject object) { + super(object); + } + + public FactoryCrateMessageBuilder() { + super(); + } + + public IoBuffer buildBaseline3() { + FactoryCrateObject factoryCrateObject = (FactoryCrateObject) object; + IoBuffer buffer = IoBuffer.allocate(10).order(ByteOrder.LITTLE_ENDIAN); + buffer.setAutoExpand(true); + + buffer.putShort((short)0x0D); + buffer.putFloat(1.0f); //op0 + buffer.put(getAsciiString("factory_n")); + buffer.putInt(0); + buffer.put(getAsciiString("food_crate")); + + if (factoryCrateObject.getCustomName().length()>0) + buffer.put(getUnicodeString(factoryCrateObject.getCustomName())); + else + buffer.putInt(0); + + buffer.putInt(1); + buffer.putShort((short)0); + + buffer.putInt(0); + buffer.putInt(0); + buffer.putInt(0); + buffer.putInt(0); + + buffer.putInt(0x2100); // optionsbitmask + buffer.putInt((int)factoryCrateObject.getQuantity()); // Quantity // op9 + buffer.putInt(0); + buffer.putInt(0x64); // condition maybe + + buffer.put((byte)1); + + int size = buffer.position(); + buffer = bufferPool.allocate(size, false).put(buffer.array(), 0, size); + + buffer.flip(); + buffer = createBaseline("TYCF", (byte) 3, buffer, size); + + return buffer; + +// 01 00 00 00 +// 00 00 +// 00 00 00 00 +// 00 00 00 00 +// 00 00 00 00 +// 00 00 00 00 +// 00 21 00 00 +// 2A 00 00 00 +// 00 00 00 00 +// 64 00 00 00 +// 01 + + } + + public IoBuffer buildBaseline6() { + FactoryCrateObject factoryCrateObject = (FactoryCrateObject) object; + IoBuffer buffer = IoBuffer.allocate(10).order(ByteOrder.LITTLE_ENDIAN); + buffer.setAutoExpand(true); + + buffer.putShort((short)6); + buffer.putInt(3); + + buffer.putInt(0); + buffer.putInt(0); + + buffer.putInt(0); + buffer.putInt(0); + buffer.putInt(0); + buffer.putInt(0); + buffer.putInt(0); + buffer.putInt(0); + buffer.putInt(0); + buffer.putInt(0); + buffer.putInt(0); + + buffer.put((byte)0); + + int size = buffer.position(); + buffer = bufferPool.allocate(size, false).put(buffer.array(), 0, size); + + buffer.flip(); + buffer = createBaseline("TYCF", (byte) 6, buffer, size); + + return buffer; + } + + + public IoBuffer buildBaseline8() { + IoBuffer buffer = IoBuffer.allocate(10).order(ByteOrder.LITTLE_ENDIAN); + buffer.setAutoExpand(true); + buffer.putShort((short)0); + int size = buffer.position(); + buffer = bufferPool.allocate(size, false).put(buffer.array(), 0, size); + buffer.flip(); + buffer = createBaseline("RCNO", (byte) 8, buffer, size); + return buffer; + } + + public IoBuffer buildBaseline9() { + IoBuffer buffer = IoBuffer.allocate(10).order(ByteOrder.LITTLE_ENDIAN); + buffer.setAutoExpand(true); + buffer.putShort((short)0); + int size = buffer.position(); + buffer = bufferPool.allocate(size, false).put(buffer.array(), 0, size); + buffer.flip(); + buffer = createBaseline("TYCF", (byte) 9, buffer, size); + return buffer; + } + + public IoBuffer buildDelta3() { + FactoryCrateObject factoryCrateObject = (FactoryCrateObject) object; + IoBuffer buffer = IoBuffer.allocate(10).order(ByteOrder.LITTLE_ENDIAN); + buffer.setAutoExpand(true); + + buffer.putInt(factoryCrateObject.getQuantity()); + int size = buffer.position(); + buffer.flip(); + buffer = createDelta("TYCF", (byte) 3, (short) 1, (short) 9, buffer, size + 4); + + return buffer; + } + + @Override + public void buildBaseline3(Map baselineBuilders, Map deltaBuilders) { + super.buildBaseline3(deltaBuilders, deltaBuilders); + } + + @Override + public void buildBaseline6(Map baselineBuilders, Map deltaBuilders) { + super.buildBaseline6(deltaBuilders, deltaBuilders); + } + + @Override + public void buildBaseline8(Map baselineBuilders, Map deltaBuilders) { + super.buildBaseline8(deltaBuilders, deltaBuilders); + } + + @Override + public void buildBaseline9(Map baselineBuilders, Map deltaBuilders) { + super.buildBaseline9(deltaBuilders, deltaBuilders); + } + } diff --git a/src/resources/objects/factorycrate/FactoryCrateObject.java b/src/resources/objects/factorycrate/FactoryCrateObject.java index 5c5737ad..b735ece8 100644 --- a/src/resources/objects/factorycrate/FactoryCrateObject.java +++ b/src/resources/objects/factorycrate/FactoryCrateObject.java @@ -21,6 +21,259 @@ ******************************************************************************/ package resources.objects.factorycrate; -public class FactoryCrateObject { +import java.io.Serializable; +import java.util.Map; +import java.util.Vector; -} +import main.NGECore; +import protocol.swg.SceneCreateObjectByCrc; +import protocol.swg.SceneDestroyObject; +import protocol.swg.SceneEndBaselines; +import protocol.swg.UpdateContainmentMessage; + +import com.sleepycat.persist.model.NotPersistent; +import com.sleepycat.persist.model.Persistent; + +import engine.clients.Client; +import engine.resources.common.CRC; +import engine.resources.objects.SWGObject; +import engine.resources.scene.Planet; +import engine.resources.scene.Point3D; +import engine.resources.scene.Quaternion; +import resources.objects.ObjectMessageBuilder; +import resources.objects.creature.CreatureObject; +import resources.objects.tangible.TangibleObject; + +@Persistent(version=0) +public class FactoryCrateObject extends TangibleObject implements Serializable { + + private static final long serialVersionUID = 1L; + + private Vector contents; + private byte capacity; + private byte contentObjectQuantity; + private int contentCRC; + private TangibleObject contentObjectType; + + @NotPersistent + private transient FactoryCrateMessageBuilder messageBuilder; + + public FactoryCrateObject() { + + } + + @Override + public void initAfterDBLoad() { + super.init(); + messageBuilder = new FactoryCrateMessageBuilder(this); + } + + + public FactoryCrateObject(long objectID, Planet planet, Point3D position, Quaternion orientation, String template) { + super(objectID, planet, position, orientation, template); + this.messageBuilder = new FactoryCrateMessageBuilder(this); + this.contents = new Vector(); + this.contentObjectQuantity = 0; + this.capacity = 25; + this.getAttributes().put("@obj_attr_n:condition", "100/100"); + this.getAttributes().put("@obj_attr_n:volume", "1"); + this.getAttributes().put("@obj_attr_n:quantity", "1"); + this.getAttributes().put("@obj_attr_n:factory_count", "1"); + this.getAttributes().put("@obj_attr_n:factory_attribs", "------------"); + this.getAttributes().put("@obj_attr_n:type", "@got_n:component"); + this.getAttributes().put("@obj_attr_n:serial_number", "123"); + + + } + + public boolean setContentType(TangibleObject contentObject) { + synchronized(objectMutex) { + this.contentObjectType = contentObject; + if (contentObject.getTemplate().length()>0) + this.contentCRC = CRC.StringtoCRC(contentObject.getTemplate()); + else + this.contentCRC = 0; + + Map contentAttributes = contentObject.getAttributes(); + for (Map.Entry entry : contentAttributes.entrySet()) + { + //if (!entry.getKey().equals(@obj_attr_n:condition)) + this.getAttributes().put(entry.getKey(), entry.getValue()); + } + + return true; + } + } + + public TangibleObject getContentType() { + return this.contentObjectType; + } + + public boolean setContentTypeAndQuantity(TangibleObject contentObject, int quantity) { + synchronized(objectMutex) { + this.contentObjectType = contentObject; + if (contentObject.getTemplate().length()>0) + this.contentCRC = CRC.StringtoCRC(contentObject.getTemplate()); + else{ + this.contentCRC = 0; + return false; // Does it make sense to continue anyway? + } + + Map contentAttributes = contentObject.getAttributes(); + for (Map.Entry entry : contentAttributes.entrySet()) + { + //if (!entry.getKey().equals(@obj_attr_n:condition)) + this.getAttributes().put(entry.getKey(), entry.getValue()); + System.out.println(entry.getKey() + " " + entry.getValue()); + } + if (quantity0){ + TangibleObject contentType = this.getContentType(); + if (contentType==null) + return; // Bad, crate had no content type set + TangibleObject contentItem = (TangibleObject) core.objectService.createObject(contentType.getTemplate(), player.getPlanet()); + contentItem.setOptions(resources.datatables.Options.SERIAL, true); + int crc = this.getContentCRC();//CRC.StringtoCRC("object/tangible/food/crafted/shared_drink_alcohol.iff"); + SceneCreateObjectByCrc createObjectMsg = new SceneCreateObjectByCrc(contentItem.getObjectID(), player.getOrientation().x, player.getOrientation().y, player.getOrientation().z, player.getOrientation().w, player.getPosition().x, player.getPosition().y, player.getPosition().z, crc, (byte) 0); + player.getClient().getSession().write(createObjectMsg.serialize()); + contentItem.sendBaselines(player.getClient()); // TANO 3,6,8,9 Baselines + SceneEndBaselines sceneEndBaselinesMsg = new SceneEndBaselines(contentItem.getObjectID()); + player.getClient().getSession().write(sceneEndBaselinesMsg.serialize()); + + long parentId = this.getParentId(); + SWGObject parentContainer = core.objectService.getObject(parentId); + if (parentContainer==null) + return; // crate has no parent, error + UpdateContainmentMessage updateContainmentMessage= new UpdateContainmentMessage(contentItem.getObjectID(), parentContainer.getObjectID(), -1); + player.getClient().getSession().write(updateContainmentMessage.serialize()); + + this.sendSetQuantity(player.getClient(),this.getQuantity()-1); + if (this.getQuantity()==0){ // Crate is empty now, delete it + parentContainer._remove(this); + SceneDestroyObject destroyObjectMsg = new SceneDestroyObject(this.getObjectID()); + player.getClient().getSession().write(destroyObjectMsg.serialize()); + core.objectService.destroyObject(this); + } + } else { // should give players the chance to clean faulty, empty crates from their containers + long parentId = this.getParentId(); + SWGObject parentContainer = core.objectService.getObject(parentId); + if (parentContainer==null) + return; // crate has no parent, error + parentContainer._remove(this); + SceneDestroyObject destroyObjectMsg = new SceneDestroyObject(this.getObjectID()); + player.getClient().getSession().write(destroyObjectMsg.serialize()); + core.objectService.destroyObject(this); + } + } + } + + public byte getQuantity() { + return contentObjectQuantity; + } + + public String getSerialNumber() { + if (!contents.isEmpty()) { + return contents.firstElement().getSerialNumber(); + } + return ""; + } + + public int getContentCRC() { + return contentCRC; + } + + public void setContentCRC(int contentCRC) { + synchronized(objectMutex) { + this.contentCRC = contentCRC; + } + } + + public void handleSplit(){ + + } + + public void sendAddItem(Client destination) { + destination.getSession().write(messageBuilder.buildDelta3()); + this.getAttributes().put("@obj_attr_n:factory_count", ""+this.getQuantity()); + this.getAttributes().put("@obj_attr_n:quantity", ""+this.getQuantity()); + //services.CharonPacketUtils.printAnalysis(messageBuilder.buildDelta3(),"FCYT3 Delta"); + } + + public void sendSetQuantity(Client destination,int quantity) { + contentObjectQuantity = (byte) quantity; + destination.getSession().write(messageBuilder.buildDelta3()); + this.getAttributes().put("@obj_attr_n:factory_count", ""+quantity); + this.getAttributes().put("@obj_attr_n:quantity", ""+this.getQuantity()); + //services.CharonPacketUtils.printAnalysis(messageBuilder.buildDelta3(),"FCYT3 Delta"); + } + + + @Override + public void sendBaselines(Client destination) { + + + if(destination == null || destination.getSession() == null) { + System.out.println("NULL destination"); + return; + } + + destination.getSession().write(messageBuilder.buildBaseline3()); + destination.getSession().write(messageBuilder.buildBaseline6()); + destination.getSession().write(messageBuilder.buildBaseline8()); + destination.getSession().write(messageBuilder.buildBaseline9()); + +// services.CharonPacketUtils.printAnalysis(messageBuilder.buildBaseline3(),"FCYT3 Baseline"); +// services.CharonPacketUtils.printAnalysis(messageBuilder.buildBaseline6(),"FCYT6 Baseline"); +// services.CharonPacketUtils.printAnalysis(messageBuilder.buildBaseline8(),"FCYT8 Baseline"); +// services.CharonPacketUtils.printAnalysis(messageBuilder.buildBaseline9(),"FCYT9 Baseline"); + } + + public void sendDelta3(Client destination) { + destination.getSession().write(messageBuilder.buildDelta3()); + this.getAttributes().put("@obj_attr_n:factory_count", ""+this.getQuantity()); + //services.CharonPacketUtils.printAnalysis(messageBuilder.buildDelta3(),"FCYT3 Delta"); + } + + public ObjectMessageBuilder getMessageBuilder() { + return messageBuilder; + } + +} \ No newline at end of file diff --git a/src/resources/objects/group/GroupMessageBuilder.java b/src/resources/objects/group/GroupMessageBuilder.java index a036ab85..2c407e36 100644 --- a/src/resources/objects/group/GroupMessageBuilder.java +++ b/src/resources/objects/group/GroupMessageBuilder.java @@ -22,16 +22,23 @@ package resources.objects.group; import java.nio.ByteOrder; +import java.util.Map; + import org.apache.mina.core.buffer.IoBuffer; + +import engine.resources.objects.Builder; import engine.resources.objects.SWGObject; -import resources.objects.ObjectMessageBuilder; +import resources.objects.universe.UniverseMessageBuilder; -public class GroupMessageBuilder extends ObjectMessageBuilder { +public class GroupMessageBuilder extends UniverseMessageBuilder { - public GroupMessageBuilder(GroupObject groupObject) { - setObject(groupObject); + public GroupMessageBuilder(GroupObject object) { + super(object); + } + + public GroupMessageBuilder() { + super(); } - public IoBuffer buildBaseline3() { @@ -83,7 +90,7 @@ public class GroupMessageBuilder extends ObjectMessageBuilder { buffer.setAutoExpand(true); buffer.putShort((short) 0x0B); // Obj Operand Count - buffer.putInt(0x45); + buffer.putInt(0x43); buffer.put(getAsciiString("string_id_table")); @@ -147,7 +154,7 @@ public class GroupMessageBuilder extends ObjectMessageBuilder { GroupObject group = (GroupObject) object; - IoBuffer buffer = bufferPool.allocate(15, false).order(ByteOrder.LITTLE_ENDIAN); + IoBuffer buffer = bufferPool.allocate(21 + member.getCustomName().length(), false).order(ByteOrder.LITTLE_ENDIAN); buffer.putInt(1); buffer.putInt(group.getMemberListUpdateCounter()); @@ -166,7 +173,7 @@ public class GroupMessageBuilder extends ObjectMessageBuilder { GroupObject group = (GroupObject) object; - IoBuffer buffer = bufferPool.allocate(15, false).order(ByteOrder.LITTLE_ENDIAN); + IoBuffer buffer = bufferPool.allocate(11, false).order(ByteOrder.LITTLE_ENDIAN); buffer.putInt(1); buffer.putInt(group.getMemberListUpdateCounter()); @@ -178,18 +185,15 @@ public class GroupMessageBuilder extends ObjectMessageBuilder { return buffer = createDelta("GRUP", (byte) 6, (short) 1, (short) 2, buffer, size + 4); } - - + @Override - public void sendListDelta(byte viewType, short updateType, IoBuffer buffer) { - // TODO Auto-generated method stub - + public void buildBaseline3(Map baselineBuilders, Map deltaBuilders) { + super.buildBaseline3(baselineBuilders, deltaBuilders); } - + @Override - public void sendBaselines() { - // TODO Auto-generated method stub - + public void buildBaseline6(Map baselineBuilders, Map deltaBuilders) { + super.buildBaseline6(baselineBuilders, deltaBuilders); } - + } diff --git a/src/resources/objects/group/GroupObject.java b/src/resources/objects/group/GroupObject.java index e87a0950..85535598 100644 --- a/src/resources/objects/group/GroupObject.java +++ b/src/resources/objects/group/GroupObject.java @@ -23,24 +23,32 @@ package resources.objects.group; import java.util.Vector; +import resources.objects.ObjectMessageBuilder; +import resources.objects.universe.UniverseObject; import engine.clients.Client; import engine.resources.objects.SWGObject; import engine.resources.scene.Point3D; import engine.resources.scene.Quaternion; - -public class GroupObject extends SWGObject { +public class GroupObject extends UniverseObject { + private static final long serialVersionUID = 1L; private Vector memberList = new Vector(); private int memberListUpdateCounter; private SWGObject groupLeader; private SWGObject lootMaster; private short groupLevel; private int lootMode; - private GroupMessageBuilder messageBuilder; + private transient GroupMessageBuilder messageBuilder; + private int chatRoomId; + + public static int FREE_FOR_ALL = 0; + public static int MASTER_LOOTER = 1; + public static int LOTTERY = 2; + public GroupObject(long objectId) { - super(objectId, null, new Point3D(0, 0, 0), new Quaternion(0, 0, 0, 1), "object/group/shared_group_object.iff"); + super(objectId, null, new Point3D(0, 0, 0), new Quaternion(1, 0, 0, 0), "object/group/shared_group_object.iff"); messageBuilder = new GroupMessageBuilder(this); } @@ -107,7 +115,19 @@ public class GroupObject extends SWGObject { this.lootMode = lootMode; } } - + + public int getChatRoomId() { + synchronized(objectMutex) { + return chatRoomId; + } + } + + public void setChatRoomId(int chatRoomId) { + synchronized(objectMutex) { + this.chatRoomId = chatRoomId; + } + } + public void addMember(SWGObject member) { if(memberList.size() >= 8 || member.getClient() == null) @@ -146,5 +166,9 @@ public class GroupObject extends SWGObject { destination.getSession().write(messageBuilder.buildBaseline6()); } - + + public ObjectMessageBuilder getMessageBuilder() { + return messageBuilder; + } + } diff --git a/src/resources/objects/guild/GuildMessageBuilder.java b/src/resources/objects/guild/GuildMessageBuilder.java index 487a30dc..65bc51c6 100644 --- a/src/resources/objects/guild/GuildMessageBuilder.java +++ b/src/resources/objects/guild/GuildMessageBuilder.java @@ -21,249 +21,29 @@ ******************************************************************************/ package resources.objects.guild; -import java.nio.ByteOrder; -import java.util.Map.Entry; +import java.util.Map; -import org.apache.mina.core.buffer.IoBuffer; +import engine.resources.objects.Builder; +import resources.objects.universe.UniverseMessageBuilder; -import engine.clients.Client; - -import resources.gcw.CurrentServerGCWZoneHistory; -import resources.gcw.CurrentServerGCWZonePercent; -import resources.gcw.OtherServerGCWZonePercent; -import resources.guild.Guild; -import resources.objects.ObjectMessageBuilder; - -public class GuildMessageBuilder extends ObjectMessageBuilder { +public class GuildMessageBuilder extends UniverseMessageBuilder { - public GuildMessageBuilder(GuildObject guildObject) { - setObject(guildObject); + public GuildMessageBuilder(GuildObject object) { + super(object); } - public IoBuffer buildBaseline3() { - GuildObject guilds = (GuildObject) object; - - IoBuffer buffer = bufferPool.allocate(((guilds.getGuildList().size() * 10) + 49), false).order(ByteOrder.LITTLE_ENDIAN); - buffer.putShort((short) 5); // Object Count - buffer.putFloat(guilds.getComplexity()); - buffer.put(getAsciiString(guilds.getSTFFile())); - buffer.putInt(guilds.getSTFSpacer()); - buffer.put(getAsciiString(guilds.getSTFName())); - buffer.put(getUnicodeString(guilds.getCustomName())); - buffer.putInt(guilds.getVolume()); - buffer.putInt(guilds.getGuildList().size()); - buffer.putInt(guilds.getGuildList().getUpdateCounter()); - for (Guild object : guilds.getGuildList().get()) { - buffer.put(getAsciiString(object.getString())); - } - - int size = buffer.position(); - buffer = bufferPool.allocate(size, false).put(buffer.array(), 0, size); - buffer.flip(); - buffer = createBaseline("GILD", (byte) 3, buffer, size); - - return buffer; - } - - public IoBuffer buildBaseline6() { - GuildObject guilds = (GuildObject) object; - - int capacity = 16 + getAsciiString(guilds.getSTFFile()).length; - for (Entry entry : guilds.getCurrentServerGCWZonePercentMap().entrySet()) capacity += (11 + entry.getKey().length() + entry.getValue().getBytes().length); - for (Entry entry : guilds.getCurrentServerGCWTotalPercentMap().entrySet()) capacity += (11 + entry.getKey().length() + entry.getValue().getBytes().length); - for (Entry entry : guilds.getCurrentServerGCWZoneHistoryMap().entries()) capacity += (11 + entry.getKey().length() + entry.getValue().getBytes().length); - for (Entry entry : guilds.getCurrentServerGCWTotalHistoryMap().entries()) capacity += (11 + entry.getKey().length() + entry.getValue().getBytes().length); - for (Entry entry : guilds.getOtherServerGCWZonePercentMap().entries()) capacity += (11 + entry.getKey().length() + entry.getValue().getBytes().length); - for (Entry entry : guilds.getOtherServerGCWTotalPercentMap().entries()) capacity += (11 + entry.getKey().length() + entry.getValue().getBytes().length); - - IoBuffer buffer = bufferPool.allocate(capacity, false).order(ByteOrder.LITTLE_ENDIAN); - buffer.putShort((short) 9); // Object Count - buffer.putInt(guilds.getServerId()); - buffer.put(getAsciiString(guilds.getSTFFile())); - buffer.putInt(guilds.getUnknown1()); - buffer.putShort(guilds.getUnknown2()); - buffer.putInt(guilds.getCurrentServerGCWZonePercentMap().size()); - buffer.putInt(guilds.getCurrentServerGCWZonePercentMap().getUpdateCounter()); - for (Entry entry : guilds.getCurrentServerGCWZonePercentMap().entrySet()) { - buffer.put((byte) 0); - buffer.put(getAsciiString(entry.getKey())); - buffer.put(entry.getValue().getBytes()); - } - buffer.putInt(guilds.getCurrentServerGCWTotalPercentMap().size()); - buffer.putInt(guilds.getCurrentServerGCWTotalPercentMap().getUpdateCounter()); - for (Entry entry : guilds.getCurrentServerGCWTotalPercentMap().entrySet()) { - buffer.put((byte) 0); - buffer.put(getAsciiString(entry.getKey())); - buffer.put(entry.getValue().getBytes()); - } - buffer.putInt(guilds.getCurrentServerGCWZoneHistoryMap().size()); - buffer.putInt(guilds.getCurrentServerGCWZoneHistoryMap().getUpdateCounter()); - for (Entry entry : guilds.getCurrentServerGCWZoneHistoryMap().entries()) { - buffer.put((byte) 0); - buffer.put(getAsciiString(entry.getKey())); - buffer.put(entry.getValue().getBytes()); - } - buffer.putInt(guilds.getCurrentServerGCWTotalHistoryMap().size()); - buffer.putInt(guilds.getCurrentServerGCWTotalHistoryMap().getUpdateCounter()); - for (Entry entry : guilds.getCurrentServerGCWTotalHistoryMap().entries()) { - buffer.put((byte) 0); - buffer.put(getAsciiString(entry.getKey())); - buffer.put(entry.getValue().getBytes()); - } - buffer.putInt(guilds.getOtherServerGCWZonePercentMap().size()); - buffer.putInt(guilds.getOtherServerGCWZonePercentMap().getUpdateCounter()); - for (Entry entry : guilds.getOtherServerGCWZonePercentMap().entries()) { - buffer.put((byte) 0); - buffer.put(getAsciiString(entry.getKey())); - buffer.put(entry.getValue().getBytes()); - } - buffer.putInt(guilds.getOtherServerGCWTotalPercentMap().size()); - buffer.putInt(guilds.getOtherServerGCWTotalPercentMap().getUpdateCounter()); - for (Entry entry : guilds.getOtherServerGCWTotalPercentMap().entries()) { - buffer.put((byte) 0); - buffer.put(getAsciiString(entry.getKey())); - buffer.put(entry.getValue().getBytes()); - } - buffer.putInt(guilds.getUnknown3()); - - int size = buffer.position(); - buffer = bufferPool.allocate(size, false).put(buffer.array(), 0, size); - buffer.flip(); - buffer = createBaseline("GILD", (byte) 6, buffer, size); - - return buffer; - } - - public IoBuffer buildComplexity(float complexity) { - IoBuffer buffer = bufferPool.allocate(4, false).order(ByteOrder.LITTLE_ENDIAN); - - buffer.putFloat(complexity); - int size = buffer.position(); - buffer.flip(); - buffer = createDelta("GILD", (byte) 3, (short) 1, (short) 0, buffer, size + 4); - - return buffer; - } - - public IoBuffer buildSTF(String STFFile, int STFSpacer, String STFName) { - IoBuffer buffer = bufferPool.allocate((STFFile.length() + STFName.length() + 8), false).order(ByteOrder.LITTLE_ENDIAN); - - buffer.put(getAsciiString(STFFile)); - buffer.putInt(STFSpacer); - buffer.put(getAsciiString(STFName)); - int size = buffer.position(); - buffer.flip(); - buffer = createDelta("GILD", (byte) 3, (short) 1, (short) 1, buffer, size + 4); - - return buffer; - } - - public IoBuffer buildCustomName(String customName) { - IoBuffer buffer = bufferPool.allocate((customName.length() + 4), false).order(ByteOrder.LITTLE_ENDIAN); - - buffer.put(getUnicodeString(customName)); - int size = buffer.position(); - buffer.flip(); - buffer = createDelta("GILD", (byte) 3, (short) 1, (short) 2, buffer, size + 4); - - return buffer; - } - - public IoBuffer buildVolume(int volume) { - IoBuffer buffer = bufferPool.allocate(4, false).order(ByteOrder.LITTLE_ENDIAN); - - buffer.putInt(volume); - int size = buffer.position(); - buffer.flip(); - buffer = createDelta("GILD", (byte) 3, (short) 1, (short) 3, buffer, size + 4); - - return buffer; - } - - public IoBuffer buildServerId(int serverId) { - IoBuffer buffer = bufferPool.allocate(4, false).order(ByteOrder.LITTLE_ENDIAN); - - buffer.putInt(serverId); - int size = buffer.position(); - buffer.flip(); - buffer = createDelta("GILD", (byte) 6, (short) 1, (short) 0, buffer, size + 4); - - return buffer; - } - - public IoBuffer buildUnknowns(int unknown1, short unknown2) { - IoBuffer buffer = bufferPool.allocate(6, false).order(ByteOrder.LITTLE_ENDIAN); - - buffer.putInt(unknown1); - buffer.putShort(unknown2); - int size = buffer.position(); - buffer.flip(); - buffer = createDelta("GILD", (byte) 6, (short) 1, (short) 1, buffer, size + 4); - - return buffer; - } - - public IoBuffer buildUnknown3(int unknown3) { - IoBuffer buffer = bufferPool.allocate(4, false).order(ByteOrder.LITTLE_ENDIAN); - - buffer.putInt(unknown3); - int size = buffer.position(); - buffer.flip(); - buffer = createDelta("GILD", (byte) 6, (short) 1, (short) 8, buffer, size + 4); - - return buffer; + public GuildMessageBuilder() { + super(); } @Override - public void sendListDelta(byte viewType, short updateType, IoBuffer buffer) { - - switch (viewType) { - case 3: - { - switch (updateType) { - case 4: - { - buffer = createDelta("GILD", (byte) 3, (short) 1, (short) 4, buffer.flip(), buffer.array().length + 4); - - for (Client client : ((GuildObject) object).core.getActiveConnectionsMap().values()) { - client.getSession().write(buffer); - } - - break; - } - } - } - case 6: - { - switch (updateType) { - case 2: - case 3: - case 4: - case 5: - case 6: - case 7: - { - buffer = createDelta("GILD", (byte) 6, (short) 1, (short) updateType, buffer.flip(), buffer.array().length + 4); - - for (Client client : ((GuildObject) object).core.getActiveConnectionsMap().values()) { - client.getSession().write(buffer); - } - - break; - } - default: - { - return; - } - } - } - } + public void buildBaseline3(Map baselineBuilders, Map deltaBuilders) { + super.buildBaseline3(baselineBuilders, deltaBuilders); } - + @Override - public void sendBaselines() { - // TODO Auto-generated method stub - + public void buildBaseline6(Map baselineBuilders, Map deltaBuilders) { + super.buildBaseline6(baselineBuilders, deltaBuilders); } } diff --git a/src/resources/objects/guild/GuildObject.java b/src/resources/objects/guild/GuildObject.java index 0107ff79..e14e3fb9 100644 --- a/src/resources/objects/guild/GuildObject.java +++ b/src/resources/objects/guild/GuildObject.java @@ -21,265 +21,176 @@ ******************************************************************************/ package resources.objects.guild; +import java.io.Serializable; +import java.util.HashMap; import java.util.Map; import java.util.TreeMap; import org.apache.mina.core.buffer.IoBuffer; import main.NGECore; - import resources.gcw.CurrentServerGCWZoneHistory; import resources.gcw.CurrentServerGCWZonePercent; import resources.gcw.OtherServerGCWZonePercent; import resources.guild.Guild; -import resources.objects.SWGList; +import resources.objects.ObjectMessageBuilder; import resources.objects.SWGMap; import resources.objects.SWGMultiMap; - -import com.sleepycat.je.Environment; -import com.sleepycat.je.Transaction; -import com.sleepycat.persist.model.Entity; -import com.sleepycat.persist.model.NotPersistent; - +import resources.objects.SWGSet; +import resources.objects.universe.UniverseObject; +import services.collections.ServerFirst; import engine.clients.Client; -import engine.resources.objects.IPersistent; -import engine.resources.objects.SWGObject; +import engine.resources.objects.Baseline; import engine.resources.scene.Planet; import engine.resources.scene.Point3D; import engine.resources.scene.Quaternion; -@Entity -public class GuildObject extends SWGObject implements IPersistent { +public class GuildObject extends UniverseObject implements Serializable { - protected NGECore core; - @NotPersistent - private GuildMessageBuilder messageBuilder = new GuildMessageBuilder(this); - - private Map> zoneMap = new TreeMap>(); - @NotPersistent - private Transaction txn; + private static final long serialVersionUID = 1L; - // GILD 3 - private float complexity = 0x803F0F00; - private String STFFile = "string_id_table"; - private int STFSpacer = 0; - private String STFName = ""; - private String customName = ""; - private int volume = 0; - private SWGList guildList = new SWGList(messageBuilder, 3, 4); - - // GILD 6 - private int serverId = 0x00000041; - //private String STFName = "string_id_table"; - private int unknown1 = 0; - private short unknown2 = 0; - private SWGMap currentServerGCWZonePercentMap = new SWGMap(messageBuilder, 6, 2); - private SWGMap currentServerGCWTotalPercentMap = new SWGMap(messageBuilder, 6, 3); - private SWGMultiMap currentServerGCWZoneHistoryMap = new SWGMultiMap(messageBuilder, 6, 4); - private SWGMultiMap currentServerGCWTotalHistoryMap = new SWGMultiMap(messageBuilder, 6, 5); - private SWGMultiMap otherServerGCWZonePercentMap = new SWGMultiMap(messageBuilder, 6, 6); - private SWGMultiMap otherServerGCWTotalPercentMap = new SWGMultiMap(messageBuilder, 6, 7); - private int unknown3 = 5; + private transient GuildMessageBuilder messageBuilder = new GuildMessageBuilder(this); public GuildObject(NGECore core, long objectID, Planet planet, Point3D position, Quaternion orientation, String Template) { super(objectID, planet, position, orientation, Template); - this.core = core; + otherVariables = getOtherVariables(); // FIXME temp } - public float getComplexity() { - synchronized(objectMutex) { - return complexity; - } + public GuildObject() { + super(); } - public void setComplexity(float complexity) { - synchronized(objectMutex) { - this.complexity = complexity; - } - - notifyAll(messageBuilder.buildComplexity(complexity)); + public void initAfterDBLoad() { + super.init(); } - public String getSTFFile() { - synchronized(objectMutex) { - return STFFile; - } + @Override + public Baseline getOtherVariables() { + Baseline baseline = super.getOtherVariables(); + baseline.put("nextInstanceId", (long) 0); + baseline.put("zoneMap", new TreeMap>()); + baseline.put("serverFirst", new HashMap()); + baseline.put("guilds", new TreeMap()); + return baseline; } - public void setSTFFile(String STFFile) { - synchronized(objectMutex) { - this.STFFile = STFFile; - } - - notifyAll(messageBuilder.buildSTF(STFFile, STFSpacer, STFName)); + @Override + public Baseline getBaseline3() { + Baseline baseline = super.getBaseline3(); + baseline.put("guildList", new SWGSet(this, 3, 4, false)); + return baseline; } - public int getSTFSpacer() { - synchronized(objectMutex) { - return STFSpacer; - } + @Override + public Baseline getBaseline6() { + Baseline baseline = super.getBaseline6(); + baseline.put("currentServerGCWZonePercentMap", new SWGMap(this, 6, 2, true)); + baseline.put("currentServerGCWTotalPercentMap", new SWGMap(this, 6, 3, true)); + baseline.put("currentServerGCWZoneHistoryMap", new SWGMultiMap(this, 6, 4, true)); + baseline.put("currentServerGCWTotalHistoryMap", new SWGMultiMap(this, 6, 5, true)); + baseline.put("otherServerGCWZonePercentMap", new SWGMultiMap(this, 6, 6, true)); + baseline.put("otherServerGCWTotalPercentMap", new SWGMultiMap(this, 6, 7, true)); + baseline.put("8", 5); + return baseline; } - public void setSTFSpacer(int STFSpacer) { - synchronized(objectMutex) { - this.STFSpacer = STFSpacer; - } - - notifyAll(messageBuilder.buildSTF(STFFile, STFSpacer, STFName)); - } - - public String getSTFName() { - synchronized(objectMutex) { - return STFName; - } - } - - public void setSTFName(String STFName) { - synchronized(objectMutex) { - this.STFName = STFName; - } - - notifyAll(messageBuilder.buildSTF(STFFile, STFSpacer, STFName)); - } - - public String getCustomName() { - synchronized(objectMutex) { - return customName; - } - } - - public void setCustomName(String customName) { - synchronized(objectMutex) { - this.customName = customName; - } - - notifyAll(messageBuilder.buildCustomName(customName)); - } - - public int getVolume() { - synchronized(objectMutex) { - return volume; - } - } - - public void setVolume(int volume) { - synchronized(objectMutex) { - this.volume = volume; - } - - notifyAll(messageBuilder.buildVolume(volume)); - } - - public SWGList getGuildList() { - return guildList; - } - - public int getServerId() { - synchronized(objectMutex) { - return serverId; - } - } - - public void setServerId(int serverId) { - synchronized(objectMutex) { - this.serverId = serverId; - } - - notifyAll(messageBuilder.buildServerId(serverId)); - } - - public int getUnknown1() { - synchronized(objectMutex) { - return unknown1; - } - } - - public void setUnknown1(int unknown1) { - synchronized(objectMutex) { - this.unknown1 = unknown1; - } - - notifyAll(messageBuilder.buildUnknowns(unknown1, unknown2)); - } - - public short getUnknown2() { - synchronized(objectMutex) { - return unknown2; - } - } - - public void setUnknown2(short unknown2) { - synchronized(objectMutex) { - this.unknown2 = unknown2; - } - - notifyAll(messageBuilder.buildUnknowns(unknown1, unknown2)); + @SuppressWarnings("unchecked") + public SWGSet getGuildList() { + return (SWGSet) getBaseline(3).get("guildList"); } + @SuppressWarnings("unchecked") public SWGMap getCurrentServerGCWZonePercentMap() { - return currentServerGCWZonePercentMap; + return (SWGMap) getBaseline(6).get("currentServerGCWZonePercentMap"); } + @SuppressWarnings("unchecked") public SWGMap getCurrentServerGCWTotalPercentMap() { - return currentServerGCWTotalPercentMap; + return (SWGMap) getBaseline(6).get("currentServerGCWTotalPercentMap"); } + @SuppressWarnings("unchecked") public SWGMultiMap getCurrentServerGCWZoneHistoryMap() { - return currentServerGCWZoneHistoryMap; + return (SWGMultiMap) getBaseline(6).get("currentServerGCWZoneHistoryMap"); } + @SuppressWarnings("unchecked") public SWGMultiMap getCurrentServerGCWTotalHistoryMap() { - return currentServerGCWTotalHistoryMap; + return (SWGMultiMap) getBaseline(6).get("currentServerGCWTotalHistoryMap"); } + @SuppressWarnings("unchecked") public SWGMultiMap getOtherServerGCWZonePercentMap() { - return otherServerGCWZonePercentMap; + return (SWGMultiMap) getBaseline(6).get("otherServerGCWZonePercentMap"); } + @SuppressWarnings("unchecked") public SWGMultiMap getOtherServerGCWTotalPercentMap() { - return otherServerGCWTotalPercentMap; - } - - public int getUnknown3() { - synchronized(objectMutex) { - return unknown3; - } - } - - public void setUnknown3(int unknown3) { - synchronized(objectMutex) { - this.unknown3 = unknown3; - } - - notifyAll(messageBuilder.buildUnknown3(unknown3)); + return (SWGMultiMap) getBaseline(6).get("otherServerGCWTotalPercentMap"); } + @SuppressWarnings("unchecked") public Map> getZoneMap() { + return (Map>) otherVariables.get("zoneMap"); + } + + @SuppressWarnings("unchecked") + public Map getServerFirst() { + return (Map) otherVariables.get("serverFirst"); + } + + public boolean addServerFirst(String collectionName, ServerFirst player) { synchronized(objectMutex) { - return zoneMap; + if (!getServerFirst().containsKey(collectionName)) { + getServerFirst().put(collectionName, player); + return true; + } + + return false; + } + } + + public long getNextInstanceId() { + synchronized(objectMutex) { + otherVariables.set("nextInstanceId", (long) (((long) otherVariables.get("nextInstanceId")) + 1L)); + return (long) otherVariables.get("nextInstanceId"); + } + } + + @SuppressWarnings("unchecked") + public TreeMap getGuilds() { + synchronized(objectMutex) { + return (TreeMap) otherVariables.get("guilds"); + } + } + + @Override + public void notifyClients(IoBuffer buffer, boolean notifySelf) { + notifyObservers(buffer, false); + } + + @Override + public ObjectMessageBuilder getMessageBuilder() { + synchronized(objectMutex) { + if (messageBuilder == null) { + messageBuilder = new GuildMessageBuilder(this); + } + + return messageBuilder; } } @Override public void sendBaselines(Client destination) { - destination.getSession().write(messageBuilder.buildBaseline3()); - destination.getSession().write(messageBuilder.buildBaseline6()); - } - - private void notifyAll(IoBuffer buffer) { - synchronized(core.getActiveConnectionsMap()) { - for (Client client : core.getActiveConnectionsMap().values()) { - client.getSession().write(buffer); - } + if (destination != null && destination.getSession() != null) { + destination.getSession().write(getBaseline(3).getBaseline()); + destination.getSession().write(getBaseline(6).getBaseline()); } } - public Transaction getTransaction() { - return txn; - } - - public void createTransaction(Environment env) { - txn = env.beginTransaction(null, null); + @Override + public void sendListDelta(byte viewType, short updateType, IoBuffer buffer) { + notifyClients(getBaseline(viewType).createDelta(updateType, buffer.array()), false); } } diff --git a/src/resources/objects/harvester/HarvesterMessageBuilder.java b/src/resources/objects/harvester/HarvesterMessageBuilder.java index 3b6c4602..81372b07 100644 --- a/src/resources/objects/harvester/HarvesterMessageBuilder.java +++ b/src/resources/objects/harvester/HarvesterMessageBuilder.java @@ -21,6 +21,817 @@ ******************************************************************************/ package resources.objects.harvester; -public class HarvesterMessageBuilder { +import java.nio.ByteOrder; +import java.util.Map; +import java.util.Vector; +import org.apache.mina.core.buffer.IoBuffer; + +import engine.resources.objects.Builder; +import engine.resources.objects.SWGObject; +import resources.objects.creature.CreatureObject; +import resources.objects.resource.GalacticResource; +import resources.objects.resource.ResourceContainerObject; +import resources.objects.tangible.TangibleMessageBuilder; + +public class HarvesterMessageBuilder extends TangibleMessageBuilder { + + public HarvesterMessageBuilder(HarvesterObject object) { + super(object); + } + + public HarvesterMessageBuilder() { + super(); + } + + public IoBuffer buildBaseline3() { + + HarvesterObject building = (HarvesterObject) object; + IoBuffer buffer = bufferPool.allocate(100, false).order(ByteOrder.LITTLE_ENDIAN); + buffer.setAutoExpand(true); + + buffer.putShort((short) 0x0D); + buffer.putFloat(building.getComplexity()); + buffer.put(getAsciiString(building.getStfFilename())); + buffer.putInt(0); + buffer.put(getAsciiString(building.getStfName())); + buffer.putInt(0); + buffer.putInt(0xFF); + //buffer.putInt(0x64); + buffer.putInt(0); + buffer.putInt(0); + buffer.putShort((short) 0); + + buffer.putInt(0); + buffer.putInt(0); + // buffer.putInt(16777216); + buffer.putInt(0x100); + buffer.putInt(0); + buffer.putInt(64); + buffer.putInt(0x201C); + buffer.put((byte) 1); + + int size = buffer.position(); + buffer = bufferPool.allocate(size, false).put(buffer.array(), 0, size); + + buffer.flip(); + buffer = createBaseline("BUIO", (byte) 3, buffer, size); + + return buffer; + + } + + public IoBuffer buildHINO3Delta(HarvesterObject harvester,byte state) { + IoBuffer buffer = IoBuffer.allocate(10).order(ByteOrder.LITTLE_ENDIAN); + buffer.setAutoExpand(true); + buffer.putShort((short)5); + buffer.putInt(0x12862153); + buffer.putLong(harvester.getObjectID()); + buffer.putInt(0x48494E4F); + buffer.put((byte)3); + buffer.putInt(0xB); + buffer.putShort((short)2); + buffer.putShort((short)8); + buffer.put((byte)1); + buffer.putShort((short)1); + buffer.put((byte)0); + buffer.putShort((short)0xD); + buffer.put(state); + int size = buffer.position(); + buffer.flip(); + tools.CharonPacketUtils.printAnalysis(IoBuffer.allocate(size).put(buffer.array(), 0, size).flip()); + return IoBuffer.allocate(size).put(buffer.array(), 0, size).flip(); + } +// 0000: 05 00 53 21 86 12 33 01 0E BE 41 00 00 00 4F 4E ..S!..3...A...ON +// 0010: 49 48 03 0B 00 00 00 02 00 08 00 01 01 00 00 0D IH.............. +// 0020: 00 01 + + + public IoBuffer buildHINO3Delta2(HarvesterObject harvester,byte state) { + IoBuffer buffer = IoBuffer.allocate(10).order(ByteOrder.LITTLE_ENDIAN); + buffer.setAutoExpand(true); + buffer.putShort((short)5); + buffer.putInt(0x12862153); + buffer.putLong(harvester.getObjectID()); + buffer.putInt(0x48494E4F); + buffer.put((byte)3); + buffer.putInt(0xB); + buffer.putShort((short)2); + buffer.putShort((short)8); + buffer.put((byte)0); + buffer.putShort((short)1); + buffer.put((byte)0); + buffer.putShort((short)0xD); + buffer.put(state); + int size = buffer.position(); + buffer.flip(); + tools.CharonPacketUtils.printAnalysis(IoBuffer.allocate(size).put(buffer.array(), 0, size).flip()); + return IoBuffer.allocate(size).put(buffer.array(), 0, size).flip(); + } + + + public IoBuffer buildBaseline6() { + + HarvesterObject building = (HarvesterObject) object; + IoBuffer buffer = bufferPool.allocate(100, false).order(ByteOrder.LITTLE_ENDIAN); + buffer.setAutoExpand(true); + + buffer.putShort((short) 8); + buffer.putInt(0x43); + + buffer.put(getAsciiString(building.getDetailFilename())); + buffer.putInt(0); + buffer.put(getAsciiString(building.getDetailName())); + buffer.putInt(0); + buffer.put((byte) 0); + buffer.putInt(0); + buffer.putInt(0); + buffer.putInt(0); + buffer.putInt(0); + buffer.putInt(0); + buffer.putInt(0); + buffer.putInt(0); + buffer.putInt(0); + + int size = buffer.position(); + buffer = bufferPool.allocate(size, false).put(buffer.array(), 0, size); + + buffer.flip(); + buffer = createBaseline("BUIO", (byte) 6, buffer, size); + + return buffer; + + } + + + public IoBuffer buildHINO7Delta(HarvesterObject harvester,byte state) { + + Vector outputHopperContent = harvester.getOutputHopperContent(); + int hopperContentSize = outputHopperContent.size(); + //int iHopperList = 1; + if (hopperContentSize==0) { + //iHopperList = 0; + } + //int sizeP = 30 + 15*hopperContentSize; + int sizeP = 30-2-4-4; + //System.out.println("sizeP " + sizeP); + IoBuffer buffer = IoBuffer.allocate(10).order(ByteOrder.LITTLE_ENDIAN); + buffer.setAutoExpand(true); + buffer.putShort((short)5); + buffer.putInt(0x12862153); + buffer.putLong(harvester.getObjectID()); + buffer.putInt(0x48494E4F); + buffer.put((byte)7); + buffer.putInt(sizeP); + // dOut.writeInt(0x2D); + buffer.putShort((short)5); + buffer.putShort((short)6); + buffer.put(state); + buffer.putShort((short)9); + buffer.putFloat(harvester.getActualExtractionRate()); + buffer.putShort((short)0x0C); + buffer.put(harvester.getUpdateCount()); +// buffer.putShort((short)0x0D); +// buffer.putInt(iHopperList); +// buffer.putInt(harvester.getResourceUpdateCount()); + int sumOfHopper = 0; + //int i = 0; + sumOfHopper = 0; + Vector outputHopper = harvester.getOutputHopperContent(); + for (ResourceContainerObject cont : outputHopper){ + sumOfHopper += cont.getStackCount(); + //i++; + } + + buffer.putShort((short)0x0A); + buffer.putInt(sumOfHopper); + int size = buffer.position(); + buffer.flip(); + tools.CharonPacketUtils.printAnalysis(IoBuffer.allocate(size).put(buffer.array(), 0, size).flip()); + return IoBuffer.allocate(size).put(buffer.array(), 0, size).flip(); + } + + public IoBuffer buildHINO7Delta2(HarvesterObject harvester,byte state) { + + Vector outputHopperContent = harvester.getOutputHopperContent(); + int hopperContentSize = outputHopperContent.size(); + int iHopperList = 1; + if (hopperContentSize==0) { + iHopperList = 0; + } + int sizeP = 30 + 15*hopperContentSize; + //System.out.println("sizeP " + sizeP); + IoBuffer buffer = IoBuffer.allocate(10).order(ByteOrder.LITTLE_ENDIAN); + buffer.setAutoExpand(true); + buffer.putShort((short)5); + buffer.putInt(0x12862153); + buffer.putLong(harvester.getObjectID()); + buffer.putInt(0x48494E4F); + buffer.put((byte)7); + buffer.putInt(sizeP); + // dOut.writeInt(0x2D); + buffer.putShort((short)5); + buffer.putShort((short)6); + buffer.put(state); + buffer.putShort((short)9); + buffer.putFloat(harvester.getActualExtractionRate()); + buffer.putShort((short)0x0C); + buffer.put(harvester.getUpdateCount()); + buffer.putShort((short)0x0D); + buffer.putInt(iHopperList); + buffer.putInt(harvester.getResourceUpdateCount()); + int sumOfHopper = 0; + + byte i = 0; + for (ResourceContainerObject container : outputHopperContent){ + buffer.putShort((short)harvester.getResourceUpdateCount()); + buffer.put(i); + buffer.putLong(container.getReferenceID()); + buffer.putInt(container.getStackCount()); + sumOfHopper += container.getStackCount(); + i++; + } + + buffer.putShort((short)0x0A); + buffer.putInt(sumOfHopper); + int size = buffer.position(); + buffer.flip(); + tools.CharonPacketUtils.printAnalysis(IoBuffer.allocate(size).put(buffer.array(), 0, size).flip()); + return IoBuffer.allocate(size).put(buffer.array(), 0, size).flip(); + } + + // 2 + 2 + 1 + 2 + 4 + 2 + 1 + 2 + 4 + 4 + (hoppersize* 2+1+8+4=15) + 2 + 4 + +// 0000: 05 00 53 21 86 12 33 01 0E BE 41 00 00 00 4F 4E ..S!..3...A...ON +// 0010: 49 48 07 2D 00 00 00 05 00 06 00 01 09 00 3F AE IH.-..........?. +// 0020: 2D 42 0C 00 02 0D 00 01 00 00 00 01 00 00 00 02 -B.............. +// 0030: 00 00 5E C8 62 AB 41 00 00 00 CC F1 0A 40 0A 00 ..^.b.A......@.. +// 0040: CC F1 0A 40 ...@ + + public IoBuffer buildHINO7EmptyHopperDelta(HarvesterObject harvester) { + + IoBuffer buffer = IoBuffer.allocate(10).order(ByteOrder.LITTLE_ENDIAN); + buffer.setAutoExpand(true); + buffer.putShort((short)5); + buffer.putInt(0x12862153); + buffer.putLong(harvester.getObjectID()); + buffer.putInt(0x48494E4F); + buffer.put((byte)7); + buffer.putInt(21); + buffer.putShort((short)3); + buffer.putShort((short)0x0C); + buffer.put((byte)harvester.getResourceUpdateCount()); + buffer.putShort((short)0x0D); + buffer.putInt(0); + buffer.putInt(harvester.getResourceUpdateCount()); + buffer.putShort((short)0x0A); + buffer.putFloat(harvester.getOutputHopperContent().size()); + + int size = buffer.position(); + buffer.flip(); + tools.CharonPacketUtils.printAnalysis(IoBuffer.allocate(size).put(buffer.array(), 0, size).flip()); + return IoBuffer.allocate(size).put(buffer.array(), 0, size).flip(); + } + + + public IoBuffer buildHINO7ExperimentalDelta(HarvesterObject harvester) { + + IoBuffer buffer = IoBuffer.allocate(10).order(ByteOrder.LITTLE_ENDIAN); + buffer.setAutoExpand(true); + buffer.putShort((short)5); + buffer.putInt(0x12862153); + buffer.putLong(harvester.getObjectID()); + buffer.putInt(0x48494E4F); + buffer.put((byte)7); + buffer.putInt(0x18); + buffer.putShort((short)3); + buffer.putShort((short)0x0C); + buffer.put((byte)harvester.getResourceUpdateCount()); + buffer.putShort((short)0x0D); + buffer.putInt(1); + buffer.putInt(0x1E); + buffer.put((byte)0); + buffer.putShort((short)0); + buffer.putInt(harvester.getResourceUpdateCount()); + buffer.putShort((short)0x0A); + buffer.putFloat(0); // since it's 0 outputhoppercontent + + int size = buffer.position(); + buffer.flip(); + tools.CharonPacketUtils.printAnalysis(IoBuffer.allocate(size).put(buffer.array(), 0, size).flip()); + return IoBuffer.allocate(size).put(buffer.array(), 0, size).flip(); + } + +// 0000: 05 00 53 21 86 12 53 D0 AC 41 3F 00 00 00 4F 4E ..S!..S..A?...ON +// 0010: 49 48 07 18 00 00 00 03 00 0C 00 25 0D 00 01 00 IH.........%.... +// 0020: 00 00 1E 00 00 00 00 00 00 0A 00 00 00 00 00 ............... + + + public IoBuffer buildHINO7ExperimentalDelta2(HarvesterObject harvester) { + + int iHopperList = 0; + if (harvester.getOutputHopperContent().size() >= 1) { + iHopperList = 1; + } + + IoBuffer buffer = IoBuffer.allocate(10).order(ByteOrder.LITTLE_ENDIAN); + buffer.setAutoExpand(true); + buffer.putShort((short)5); + buffer.putInt(0x12862153); + buffer.putLong(harvester.getObjectID()); + buffer.putInt(0x48494E4F); + buffer.put((byte)7); + + buffer.putInt(36); + buffer.putShort((short)3); + buffer.putShort((short)0x0C); + buffer.put(harvester.getUpdateCount()); + buffer.putShort((short)0x0D); + buffer.putInt(iHopperList); + buffer.putInt(harvester.getResourceUpdateCount()); + int i = 0; + int totalStackCount = 0; + Vector outputHopper = harvester.getOutputHopperContent(); + for (ResourceContainerObject cont : outputHopper){ + totalStackCount += cont.getStackCount(); + if (cont.getReferenceID() == harvester.getSelectedHarvestResource().getId()) { + buffer.put((byte)2); + buffer.putShort((short) i); + buffer.putLong(cont.getReferenceID()); + buffer.putFloat((float)cont.getStackCount()); + //System.out.println("TOTAL STACKCOUNT " + (float)cont.getStackCount()); + } + i++; + } + + buffer.putShort((short)0x0A); + buffer.putFloat((float)totalStackCount); + int size = buffer.position(); + buffer.flip(); + tools.CharonPacketUtils.printAnalysis(IoBuffer.allocate(size).put(buffer.array(), 0, size).flip()); + return IoBuffer.allocate(size).put(buffer.array(), 0, size).flip(); + } + + public IoBuffer buildHINO7ActivateDelta(HarvesterObject harvester) { + + int iHopperList = 0; + if (harvester.getOutputHopperContent().size() >= 1) { + iHopperList = 1; + } + int factor = 0; + Vector outputHopper = harvester.getOutputHopperContent(); + for (ResourceContainerObject cont : outputHopper){ + if (cont.getReferenceID() == harvester.getSelectedHarvestResource().getId()) { + factor = 1; + } + } + + byte iHopperUpdateCounter = harvester.getResourceUpdateCount(); + + IoBuffer buffer = IoBuffer.allocate(10).order(ByteOrder.LITTLE_ENDIAN); + buffer.setAutoExpand(true); + buffer.putShort((short)5); + buffer.putInt(0x12862153); + buffer.putLong(harvester.getObjectID()); + buffer.putInt(0x48494E4F); + buffer.put((byte)7); + buffer.putInt(5+19+(15*factor)); + buffer.putShort((short)5); + buffer.putShort((short)6); + buffer.put((byte)1); + // 2 + 4 + 4 + 2 + 4 + (15*h) = 16 + 2 + 1 = 19 + buffer.putShort((short)0x0C); + buffer.put(harvester.getUpdateCount()); + buffer.putShort((short)0x0D); + buffer.putInt(iHopperList); + buffer.putInt(iHopperUpdateCounter); + int totalStackCount = 0; + + int i = 0; + + for (ResourceContainerObject cont : outputHopper){ + totalStackCount += cont.getStackCount(); + if (cont.getReferenceID() == harvester.getSelectedHarvestResource().getId()) { + buffer.put((byte)2); + buffer.putShort((short) i); + buffer.putLong(cont.getReferenceID()); + buffer.putFloat((float)cont.getStackCount()); + } + i++; + } + + buffer.putShort((short)0x0A); + buffer.putFloat((float)totalStackCount); + + int size = buffer.position(); + buffer.flip(); + tools.CharonPacketUtils.printAnalysis(IoBuffer.allocate(size).put(buffer.array(), 0, size).flip()); + return IoBuffer.allocate(size).put(buffer.array(), 0, size).flip(); + } + + + public IoBuffer buildHINO7ActivateDelta2(HarvesterObject harvester) { + + //int iHopperList = 0; + if (harvester.getOutputHopperContent().size() >= 1) { + //iHopperList = 1; + } + + IoBuffer buffer = IoBuffer.allocate(10).order(ByteOrder.LITTLE_ENDIAN); + buffer.setAutoExpand(true); + buffer.putShort((short)5); + buffer.putInt(0x12862153); + buffer.putLong(harvester.getObjectID()); + buffer.putInt(0x48494E4F); + buffer.put((byte)7); + + buffer.putInt(11); + buffer.putShort((short)2); + buffer.putShort((short)6); + buffer.put((byte)1); + buffer.putShort((short)9); + buffer.putFloat(harvester.getActualExtractionRate()); + + int size = buffer.position(); + buffer.flip(); + tools.CharonPacketUtils.printAnalysis(IoBuffer.allocate(size).put(buffer.array(), 0, size).flip()); + return IoBuffer.allocate(size).put(buffer.array(), 0, size).flip(); + } +// +// 02 00 06 00 01 09 00 43 94 IH............C. +// 0020: 59 42 YB + + public IoBuffer buildHINO7ActivateDelta2old(HarvesterObject harvester) { + + //int iHopperList = 0; + if (harvester.getOutputHopperContent().size() >= 1) { + //iHopperList = 1; + } + + IoBuffer buffer = IoBuffer.allocate(10).order(ByteOrder.LITTLE_ENDIAN); + buffer.setAutoExpand(true); + buffer.putShort((short)5); + buffer.putInt(0x12862153); + buffer.putLong(harvester.getObjectID()); + buffer.putInt(0x48494E4F); + buffer.put((byte)7); + + buffer.putInt(5); + buffer.putShort((short)5); + buffer.putShort((short)6); + buffer.put((byte)1); + + int size = buffer.position(); + buffer.flip(); + tools.CharonPacketUtils.printAnalysis(IoBuffer.allocate(size).put(buffer.array(), 0, size).flip()); + return IoBuffer.allocate(size).put(buffer.array(), 0, size).flip(); + } + + public IoBuffer buildHINO7DeactivateDelta(HarvesterObject harvester) { + + IoBuffer buffer = IoBuffer.allocate(10).order(ByteOrder.LITTLE_ENDIAN); + buffer.setAutoExpand(true); + buffer.putShort((short)5); + buffer.putInt(0x12862153); + buffer.putLong(harvester.getObjectID()); + buffer.putInt(0x48494E4F); + buffer.put((byte)7); + + buffer.putInt(14); + buffer.putShort((short)5); + buffer.putShort((short)6); + buffer.put((byte)0); + buffer.putShort((short)9); + buffer.putFloat(0); + buffer.putShort((short)0xC); + buffer.put((byte)5); + + // new +// buffer.putShort((short)6); +// buffer.put((byte)0); +// buffer.putShort((short)9); +// buffer.put((byte)0); +// buffer.putShort((short)0xC); +// buffer.put((byte)5); + + // + + int size = buffer.position(); + buffer.flip(); + tools.CharonPacketUtils.printAnalysis(IoBuffer.allocate(size).put(buffer.array(), 0, size).flip()); + return IoBuffer.allocate(size).put(buffer.array(), 0, size).flip(); + } + + + public IoBuffer buildHINO7DeactivateDeltaold(HarvesterObject harvester) { + + IoBuffer buffer = IoBuffer.allocate(10).order(ByteOrder.LITTLE_ENDIAN); + buffer.setAutoExpand(true); + buffer.putShort((short)5); + buffer.putInt(0x12862153); + buffer.putLong(harvester.getObjectID()); + buffer.putInt(0x48494E4F); + buffer.put((byte)7); + + buffer.putInt(5); + buffer.putShort((short)5); + buffer.putShort((short)6); + buffer.put((byte)0); + + // new + buffer.putShort((short)6); + buffer.put((byte)0); + buffer.putShort((short)9); + buffer.put((byte)0); + buffer.putShort((short)0xC); + buffer.put((byte)5); + + // + + int size = buffer.position(); + buffer.flip(); + tools.CharonPacketUtils.printAnalysis(IoBuffer.allocate(size).put(buffer.array(), 0, size).flip()); + return IoBuffer.allocate(size).put(buffer.array(), 0, size).flip(); + } + + public IoBuffer buildHINO7ClearDelta(HarvesterObject harvester) { + + int iHopperList = 0; + if (harvester.getOutputHopperContent().size() >= 1) { + iHopperList = 1; + } + + IoBuffer buffer = IoBuffer.allocate(10).order(ByteOrder.LITTLE_ENDIAN); + buffer.setAutoExpand(true); + buffer.putShort((short)5); + buffer.putInt(0x12862153); + buffer.putLong(harvester.getObjectID()); + buffer.putInt(0x48494E4F); + buffer.put((byte)7); + + buffer.putInt(36); + buffer.putShort((short)3); + buffer.putShort((short)0x0C); + buffer.put(harvester.getUpdateCount()); + buffer.putShort((short)0x0D); + buffer.putInt(iHopperList); + buffer.putInt(harvester.getResourceUpdateCount()); + buffer.put((byte)4); + buffer.putShort((short)0x0A); + buffer.putFloat((float)0.0F); + int size = buffer.position(); + buffer.flip(); + tools.CharonPacketUtils.printAnalysis(IoBuffer.allocate(size).put(buffer.array(), 0, size).flip()); + return IoBuffer.allocate(size).put(buffer.array(), 0, size).flip(); + } + + + public IoBuffer buildDiscardResourceResponse(HarvesterObject harvester, byte actionMode, byte actionCounter,CreatureObject owner) { + + IoBuffer buffer = IoBuffer.allocate(10).order(ByteOrder.LITTLE_ENDIAN); + buffer.setAutoExpand(true); + buffer.putShort((short)5); + buffer.putInt(0x80CE5E46); + buffer.putInt(0x0B); + buffer.putInt(0xEE); + buffer.putLong(owner.getObjectID()); + buffer.putInt(0); + buffer.putInt(0xED); + buffer.put((byte)1); + buffer.put(actionCounter); + int size = buffer.position(); + buffer.flip(); + tools.CharonPacketUtils.printAnalysis(IoBuffer.allocate(size).put(buffer.array(), 0, size).flip()); + return IoBuffer.allocate(size).put(buffer.array(), 0, size).flip(); + } + +//0000: 05 00 46 5E CE 80 0B 00 00 00 EE 00 00 00 62 5F ..F^..........b_ +//0010: 02 15 00 00 01 00 00 00 00 00 ED 00 00 00 01 01 ................ +// ^^ weird but works, should be zero allowed too + + public IoBuffer buildBaseline8() { + IoBuffer buffer = bufferPool.allocate(2, false).order(ByteOrder.LITTLE_ENDIAN); + buffer.putShort((short) 0); + int size = buffer.position(); + buffer = IoBuffer.allocate(size).put(buffer.array(), 0, size); + buffer.flip(); + buffer = createBaseline("TANO", (byte) 8, buffer, size); + + return buffer; + } + + public IoBuffer buildBaseline9() { + IoBuffer buffer = bufferPool.allocate(2, false).order(ByteOrder.LITTLE_ENDIAN); + buffer.putShort((short) 0); + int size = buffer.position(); + buffer = IoBuffer.allocate(size).put(buffer.array(), 0, size); + buffer.flip(); + buffer = createBaseline("TANO", (byte) 9, buffer, size); + + return buffer; + } + + + public IoBuffer buildHINOBaseline7(HarvesterObject harvester,Vector vSRD) { + IoBuffer buffer = IoBuffer.allocate(10).order(ByteOrder.LITTLE_ENDIAN); + buffer.setAutoExpand(true); + int sizeP = 74; + + buffer.putShort((short)5); + buffer.putInt(0x68A75F0C); + buffer.putLong(harvester.getObjectID()); + buffer.putInt(0x4F4E4948); + buffer.put((byte)7); + + int iResourceCount = vSRD.size(); + Vector outputHopperContent = harvester.getOutputHopperContent(); + int hopperContentSize = outputHopperContent.size(); + float outputHopperCount = 0; + + //y = a + 4x + 16x + 12z = a + 20x + 12z + sizeP += (iResourceCount * 4); + sizeP += (iResourceCount * 16); + + sizeP += (hopperContentSize * 12); + + for (int i = 0; i < iResourceCount; i++) { + sizeP += vSRD.get(i).getName().length(); + sizeP += vSRD.get(i).getFileName().length(); + } + + buffer.putInt(sizeP); + + for (ResourceContainerObject container : outputHopperContent){ + outputHopperCount += container.getStackCount(); + } + + buffer.putShort((short)0x0F); + buffer.put((byte)1); + buffer.putInt(iResourceCount); + buffer.putInt(iResourceCount); + + for (int i = 0; i < iResourceCount; i++) { + buffer.putLong(vSRD.get(i).getId()); + } + buffer.putInt(iResourceCount); + + buffer.putInt(iResourceCount); + + for (int i = 0; i < iResourceCount; i++) { + buffer.putLong(vSRD.get(i).getId()); + } + + buffer.putInt(iResourceCount); + + buffer.putInt(iResourceCount); + + for (int i = 0; i < iResourceCount; i++) { + buffer.put(getAsciiString(vSRD.get(i).getName())); + } + + buffer.putInt(iResourceCount); + buffer.putInt(iResourceCount); + for (int i = 0; i < iResourceCount; i++) { + buffer.put(getAsciiString(vSRD.get(i).getFileName())); + + } + + if (harvester.getSelectedHarvestResource() != null) { + buffer.putLong(harvester.getSelectedHarvestResource().getId()); + } else { + buffer.putLong(0); + } + + buffer.put(harvester.isActivated() ? (byte)1 : (byte)0); + + buffer.putInt(harvester.getSpecRate()); // SPEC RATE buffer.putInt(harvester.getBER()); + + buffer.putFloat(harvester.getBER()); + + buffer.putFloat(harvester.getActualExtractionRate()); + buffer.putFloat(outputHopperCount); + buffer.putInt(harvester.getOutputHopperCapacity()); + buffer.put(harvester.getUpdateCount()); + buffer.putInt(hopperContentSize); + buffer.putInt(0); + for (ResourceContainerObject container : outputHopperContent){ + buffer.putLong(container.getReferenceID()); + buffer.putFloat(container.getStackCount()); + } + buffer.put(harvester.getStructuralCondition()); + int size = buffer.position(); + buffer.flip(); + tools.CharonPacketUtils.printAnalysis(IoBuffer.allocate(size).put(buffer.array(), 0, size).flip()); + return IoBuffer.allocate(size).put(buffer.array(), 0, size).flip(); + } + + public IoBuffer buildCustomNameDelta(HarvesterObject harvester, String customName) { + IoBuffer buffer = IoBuffer.allocate(10).order(ByteOrder.LITTLE_ENDIAN); + buffer.setAutoExpand(true); + int sizeP = 8; + sizeP += 2*customName.length(); + buffer.putShort((short)5); + buffer.putInt(0x12862153); + buffer.putLong(harvester.getObjectID()); + buffer.putInt(0x54414E4F); + buffer.put((byte)3); + buffer.putInt(sizeP); + buffer.putShort((short)1); + buffer.putShort((short)2); + buffer.put(getUnicodeString(customName)); + int size = buffer.position(); + buffer.flip(); + tools.CharonPacketUtils.printAnalysis(IoBuffer.allocate(size).put(buffer.array(), 0, size).flip()); + return IoBuffer.allocate(size).put(buffer.array(), 0, size).flip(); + } + + public IoBuffer buildPermissionListCreate(HarvesterObject harvester, Vector permissionList, String listName) { + IoBuffer buffer = IoBuffer.allocate(10).order(ByteOrder.LITTLE_ENDIAN); + buffer.setAutoExpand(true); + int listSize = permissionList.size(); + buffer.putShort((short)4); + buffer.putInt(0x52F364B8); + buffer.putInt(listSize); + for (String name : permissionList){ + buffer.put(getUnicodeString(name)); + } + //buffer.putInt(0x61); + buffer.putInt(0); + //buffer.putShort((short)0); + buffer.put(getUnicodeString(listName)); + int size = buffer.position(); + buffer.flip(); + tools.CharonPacketUtils.printAnalysis(IoBuffer.allocate(size).put(buffer.array(), 0, size).flip()); + return IoBuffer.allocate(size).put(buffer.array(), 0, size).flip(); + } + /* + 0000: 04 00 B8 64 F3 52 01 00 00 00 06 00 00 00 63 00 ...d.R........c. + 0010: 68 00 61 00 72 00 6F 00 6E 00 00 00 00 00 05 00 h.a.r.o.n....... + 0020: 00 00 41 00 44 00 4D 00 49 00 4E 00 ..A.D.M.I.N. + */ + + // Send this in response to the Radial Menu to manage harvesters, + // it is necessary to send this *before* the 07 Baseline! + //ResourceHarvesterActivatePageMessage (BD18C679) + public IoBuffer buildResourceHarvesterActivatePageMessage(HarvesterObject harvester) { + IoBuffer buffer = IoBuffer.allocate(10).order(ByteOrder.LITTLE_ENDIAN); + buffer.setAutoExpand(true); + buffer.putShort((short)2); + buffer.putInt(0xBD18C679); + buffer.putLong(harvester.getObjectID()); + int size = buffer.position(); + buffer.flip(); + tools.CharonPacketUtils.printAnalysis(IoBuffer.allocate(size).put(buffer.array(), 0, size).flip()); + return IoBuffer.allocate(size).put(buffer.array(), 0, size).flip(); + } + + public IoBuffer buildHarvesterGetResourceData(HarvesterObject harvester,SWGObject owner,Vector planetResources) { + IoBuffer buffer = IoBuffer.allocate(10).order(ByteOrder.LITTLE_ENDIAN); + buffer.setAutoExpand(true); + buffer.putShort((short)5); + buffer.putInt(0x80CE5E46); + buffer.putInt(0x0B); + buffer.putInt(0x000000EA); + buffer.putLong(owner.getObjectID()); + buffer.putInt(0); + buffer.putLong(harvester.getObjectID()); + if (planetResources == null || planetResources.isEmpty()) { + buffer.putInt(0); + } else { + buffer.putInt(planetResources.size()); + for (int i = 0; i < planetResources.size(); i++) { + float localConcentration = planetResources.get(i).deliverConcentrationForSurvey(owner.getPlanetId(), owner.getPosition().x, owner.getPosition().z); + buffer.putLong(planetResources.get(i).getId()); + buffer.put(getAsciiString(planetResources.get(i).getName())); + buffer.put(getAsciiString(planetResources.get(i).getFileName())); + buffer.put((byte)localConcentration); + } + } + + int size = buffer.position(); + buffer.flip(); + tools.CharonPacketUtils.printAnalysis(IoBuffer.allocate(size).put(buffer.array(), 0, size).flip()); + return IoBuffer.allocate(size).put(buffer.array(), 0, size).flip(); + } + + @Override + public void buildBaseline3(Map baselineBuilders, Map deltaBuilders) { + super.buildBaseline3(deltaBuilders, deltaBuilders); + } + + @Override + public void buildBaseline6(Map baselineBuilders, Map deltaBuilders) { + super.buildBaseline6(deltaBuilders, deltaBuilders); + } + + @Override + public void buildBaseline8(Map baselineBuilders, Map deltaBuilders) { + super.buildBaseline8(deltaBuilders, deltaBuilders); + } + + @Override + public void buildBaseline9(Map baselineBuilders, Map deltaBuilders) { + super.buildBaseline9(deltaBuilders, deltaBuilders); + } + } diff --git a/src/resources/objects/harvester/HarvesterObject.java b/src/resources/objects/harvester/HarvesterObject.java index 1f7c48eb..50f87e23 100644 --- a/src/resources/objects/harvester/HarvesterObject.java +++ b/src/resources/objects/harvester/HarvesterObject.java @@ -21,6 +21,407 @@ ******************************************************************************/ package resources.objects.harvester; -public class HarvesterObject { +import java.io.Serializable; +import java.util.Vector; +import main.NGECore; + +import com.sleepycat.persist.model.Persistent; + +import engine.clients.Client; +import engine.resources.scene.Planet; +import engine.resources.scene.Point3D; +import engine.resources.scene.Quaternion; +import resources.objects.ObjectMessageBuilder; +import resources.objects.creature.CreatureObject; +import resources.objects.installation.InstallationMessageBuilder; +import resources.objects.installation.InstallationObject; +import resources.objects.resource.GalacticResource; +import resources.objects.resource.ResourceContainerObject; +import resources.objects.tangible.TangibleObject; + +@Persistent(version=0) +public class HarvesterObject extends InstallationObject implements Serializable { + + private static final long serialVersionUID = 1L; + + private transient HarvesterMessageBuilder messageBuilder; + private transient InstallationMessageBuilder installationMessageBuilder; + + public final static byte HARVESTER_TYPE_MINERAL = 0; + public final static byte HARVESTER_TYPE_CHEMICAL = 1; + public final static byte HARVESTER_TYPE_FLORA = 2; + public final static byte HARVESTER_TYPE_GAS = 3; + public final static byte HARVESTER_TYPE_WATER = 4; + public final static byte HARVESTER_TYPE_SOLAR = 5; + public final static byte HARVESTER_TYPE_WIND = 6; + public final static byte HARVESTER_TYPE_FUSION = 7; + public final static byte HARVESTER_TYPE_GEO = 8; + + public String[] mineral_type_iff = new String[]{"object/installation/mining_ore/shared_mining_ore_harvester_style_1.iff", + "object/installation/mining_ore/shared_mining_ore_harvester_style_2.iff", + "object/installation/mining_ore/shared_mining_ore_harvester_heavy.iff", + "object/installation/mining_ore/shared_mining_ore_harvester_elite.iff"}; + + public String[] chemical_type_iff = new String[]{"object/installation/mining_liquid/shared_mining_liquid_harvester_style_1.iff", + "object/installation/mining_liquid/shared_mining_liquid_harvester_style_2.iff", + "object/installation/mining_liquid/shared_mining_liquid_harvester_style_3.iff", + "object/installation/mining_liquid/shared_mining_liquid_harvester_style_4.iff"}; + + public String[] flora_type_iff = new String[]{"object/installation/mining_organic/shared_mining_organic_flora_farm.iff", + "object/installation/mining_organic/shared_mining_organic_flora_farm_medium.iff", + "object/installation/mining_organic/shared_mining_organic_flora_farm_heavy.iff", + "object/installation/mining_organic/shared_mining_organic_flora_farm_elite.iff"}; + + public String[] water_type_iff = new String[]{"object/installation/mining_liquid/shared_mining_liquid_moisture_harvester.iff", + "object/installation/mining_liquid/shared_mining_liquid_moisture_harvester_medium.iff", + "object/installation/mining_liquid/shared_mining_liquid_moisture_harvester_heavy.iff", + "object/installation/mining_liquid/shared_mining_liquid_moisture_harvester_elite.iff"}; + + public String[] gas_type_iff = new String[]{"object/installation/mining_gas/shared_mining_gas_harvester_style_1.iff", + "object/installation/mining_gas/shared_mining_gas_harvester_style_2.iff", + "object/installation/mining_gas/shared_mining_gas_harvester_style_3.iff", + "object/installation/mining_gas/shared_mining_gas_harvester_style_4.iff"}; + + public String[] wind_type_iff = new String[]{"object/installation/generators/shared_power_generator_wind_style_1.iff"}; + + public String[] solar_type_iff = new String[]{"object/installation/generators/shared_power_generator_solar_style_1.iff"}; + + public String[] fusion_type_iff = new String[]{"object/installation/generators/shared_power_generator_fusion_style_1.iff"}; + + public String[] geo_type_iff = new String[]{"object/installation/generators/shared_power_generator_geothermal_style_1.iff"}; + + //for nothing "object/installation/generators/shared_power_generator_photo_bio_style_1.iff" + + + public byte harvester_type = 0; + public byte harvester_size = 0; + private Vector outputHopperContent = new Vector(); + private int outputHopperCapacity = 0; + private int BER = 0; + private float maintenanceAmount = 0; + private float powerLevel = 0; + private int powerCost = 0; + private int maintenanceCost = 0; + private byte structuralCondition = 100; + private boolean activated = false; + private boolean generator = false; + private GalacticResource selectedHarvestResource; + private float selectedResourceConcentration; + private byte updateCount; + private byte resourceUpdateCount; + private Vector adminList = new Vector(); + private Vector hopperList = new Vector(); + private long owner; + private float currentHarvestedCountFloat=0.0F; + private String deedTemplate; + + private int specRate; + + public HarvesterObject(long objectID, Planet planet, Point3D position, Quaternion orientation, String template) { + super(objectID, planet, position, orientation, template); + this.setConditionDamage(100); + messageBuilder = new HarvesterMessageBuilder(this); + installationMessageBuilder = new InstallationMessageBuilder((InstallationObject)this); + } + + public int getBER() { + return BER; + } + + @Override + public void initAfterDBLoad() { + super.init(); + messageBuilder = new HarvesterMessageBuilder(this); + installationMessageBuilder = new InstallationMessageBuilder((InstallationObject)this); + outputHopperContent.forEach(ResourceContainerObject::initAfterDBLoad); + if(selectedHarvestResource != null) + selectedHarvestResource.initAfterDBLoad(); + defendersList = new Vector(); + } + + + public void setBER(int baseExtractionRate) { + this.BER = baseExtractionRate; + } + + + public float getActualExtractionRate() { + //float resourceDraw = (getBER() * getSelectedResourceConcentration()) / 400; // /100 + float resourceDraw = 1.5F*(getBER() * getSelectedResourceConcentration()) / 100; + // BER * concentration * publish 27 bonus * profession buffs = AER + // 14* 0.83 * 1.5 * 1.05 = 18.3015 AER + return resourceDraw; + } + + public int getSpecRate() { + return specRate; + } + + public void setSpecRate(int specRate) { + this.specRate = specRate; + } + + + public GalacticResource getSelectedHarvestResource() { + return selectedHarvestResource; + } + + + public void setSelectedHarvestResource(GalacticResource selectedHarvestResource,CreatureObject owner) { + this.selectedHarvestResource = selectedHarvestResource; + setSelectedResourceConcentration(selectedHarvestResource.deliverConcentrationForSurvey(this.getPlanetId(), this.getPosition().x, this.getPosition().z)); + + owner.getClient().getSession().write(installationMessageBuilder.constructINSO7Var1((InstallationObject) this,selectedHarvestResource.getObjectId())); + owner.getClient().getSession().write(installationMessageBuilder.constructINSO7Var2((InstallationObject) this,selectedHarvestResource.getObjectId())); + } + + + public float getSelectedResourceConcentration() { + return selectedResourceConcentration; + } + + + private void setSelectedResourceConcentration(float selectedResourceConcentration) { + this.selectedResourceConcentration = selectedResourceConcentration; + } + + + public void activateHarvester(CreatureObject owner){ + activated = true; + this.setOwner(owner.getObjectID()); + owner.getClient().getSession().write(messageBuilder.buildHINO3Delta(this,(byte)1)); + owner.getClient().getSession().write(messageBuilder.buildHINO7ActivateDelta2(this)); + } + + + public void deactivateHarvester(CreatureObject owner){ + activated = false; + owner.getClient().getSession().write(messageBuilder.buildHINO3Delta2(this,(byte)0)); + owner.getClient().getSession().write(messageBuilder.buildHINO7DeactivateDelta(this)); + } + + + public boolean isActivated(){ + return this.activated; + } + + + public byte getHarvester_type() { + return harvester_type; + } + + + public void setHarvester_type(byte harvester_type) { + this.harvester_type = harvester_type; + } + + + public Vector getOutputHopperContent() { + return outputHopperContent; + } + + + public void setOutputHopperContent(Vector outputHopperContent) { + this.outputHopperContent = outputHopperContent; + } + + + public byte getStructuralCondition() { + return structuralCondition; + } + + + public void setStructuralCondition(byte structuralCondition) { + this.structuralCondition = structuralCondition; + } + + + public int getOutputHopperCapacity() { + return outputHopperCapacity; + } + + + public void setOutputHopperCapacity(int outputHopperCapacity) { + this.outputHopperCapacity = outputHopperCapacity; + } + + + public byte getUpdateCount() { + if (updateCount>254) updateCount = 0; + return updateCount++; + } + + public byte getResourceUpdateCount() { + if (resourceUpdateCount>254) resourceUpdateCount = 0; + return resourceUpdateCount++; + } + + + public void setUpdateCount(byte updateCount) { + this.updateCount = updateCount; + } + + + public Vector getAdminList() { + return adminList; + } + + + public void setAdminList(Vector adminList) { + this.adminList = adminList; + } + + + public Vector getHopperList() { + return hopperList; + } + + + public void setHopperList(Vector hopperList) { + this.hopperList = hopperList; + } + + + public float getPowerLevel() { + return powerLevel; + } + + + public void setPowerLevel(float energyLevel) { + this.powerLevel = energyLevel; + } + + + public float getMaintenanceAmount() { + return maintenanceAmount; + } + + + public void setMaintenanceAmount(float maintenanceAmount) { + this.maintenanceAmount = maintenanceAmount; + } + + public int getPowerCost() { + return powerCost; + } + + + public void setPowerCost(int powerCost) { + this.powerCost = powerCost; + } + + + public int getMaintenanceCost() { + return maintenanceCost; + } + + + public void setMaintenanceCost(int maintenanceCost) { + this.maintenanceCost = maintenanceCost; + } + + + public float getCurrentHarvestedCountFloat() { + return currentHarvestedCountFloat; + } + + + public void setCurrentHarvestedCountFloat(float currentHarvestedCountFloat) { + this.currentHarvestedCountFloat = currentHarvestedCountFloat; + } + + + public long getOwner() { + return owner; + } + + + public void setOwner(long owner) { + this.owner = owner; + } + + public void setDeedTemplate(String deedTemplate){ + this.deedTemplate = deedTemplate; + } + + public String getDeedTemplate(){ + return this.deedTemplate; + } + + + public boolean isGenerator() { + return generator; + } + + public void setGenerator(boolean generator) { + this.generator = generator; + } + + + public void setHarvesterName(String name,CreatureObject owner){ + owner.getClient().getSession().write(messageBuilder.buildCustomNameDelta(this,name)); + this.setCustomName(name); + ((CreatureObject)owner).sendSystemMessage("Structure renamed.", (byte) 0); + } + + public void setPermissionAdmin(String name,CreatureObject owner){ + Vector permissionList = this.getAdminList(); + owner.getClient().getSession().write(messageBuilder.buildPermissionListCreate(this, permissionList, name)); + } + + public void setPermissionHopper(String name,CreatureObject owner){ + Vector permissionList = this.getAdminList(); + owner.getClient().getSession().write(messageBuilder.buildPermissionListCreate(this, permissionList, name)); + } + + public void operateMachinery(CreatureObject owner){ + owner.getClient().getSession().write(messageBuilder.buildResourceHarvesterActivatePageMessage(this)); + // Assemble resources at that spot + // For later, it might be needed to also pass the template to differentiate liquid resources + Vector planetResourcesVector = NGECore.getInstance().resourceService.getSpawnedResourcesByPlanetAndHarvesterType(this.getPlanetId(),this.getHarvester_type()); + owner.getClient().getSession().write(messageBuilder.buildHarvesterGetResourceData(this, owner, planetResourcesVector)); + owner.getClient().getSession().write(messageBuilder.buildHINOBaseline7(this, planetResourcesVector)); + } + + public void deActivate(){ + NGECore.getInstance().objectService.getObject(owner).getClient().getSession().write(messageBuilder.buildResourceHarvesterActivatePageMessage(this)); + } + + public void placeHarvester(){ + NGECore.getInstance().objectService.getObject(owner).getClient().getSession().write(messageBuilder.buildResourceHarvesterActivatePageMessage(this)); + } + + public void createNewHopperContainer(){ + Vector planetResourcesVector = NGECore.getInstance().resourceService.getSpawnedResourcesByPlanetAndHarvesterType(this.getPlanetId(),this.getHarvester_type()); + NGECore.getInstance().objectService.getObject(owner).getClient().getSession().write(messageBuilder.buildHINOBaseline7(this, planetResourcesVector)); + NGECore.getInstance().objectService.getObject(owner).getClient().getSession().write(messageBuilder.buildHINO7Delta(this,(byte)1)); + } + + public void continueHopperContainer(){ + Vector planetResourcesVector = NGECore.getInstance().resourceService.getSpawnedResourcesByPlanetAndHarvesterType(this.getPlanetId(),this.getHarvester_type()); + NGECore.getInstance().objectService.getObject(owner).getClient().getSession().write(messageBuilder.buildHarvesterGetResourceData(this, NGECore.getInstance().objectService.getObject(owner), planetResourcesVector)); + NGECore.getInstance().objectService.getObject(owner).getClient().getSession().write(messageBuilder.buildHINOBaseline7(this, planetResourcesVector)); + } + + @Override + public void sendBaselines(Client destination) { + + + if(destination == null || destination.getSession() == null) { + System.out.println("NULL destination"); + return; + } + + destination.getSession().write(installationMessageBuilder.buildBaseline3(this)); + //destination.getSession().write(installationMessageBuilder.buildBaseline6(this)); + //destination.getSession().write(installationMessageBuilder.buildBaseline8()); + //destination.getSession().write(installationMessageBuilder.buildBaseline9()); + + } + + public ObjectMessageBuilder getMessageBuilder() { + return messageBuilder; + } + } diff --git a/src/resources/objects/installation/InstallationMessageBuilder.java b/src/resources/objects/installation/InstallationMessageBuilder.java index f7902d4e..d2b1f80c 100644 --- a/src/resources/objects/installation/InstallationMessageBuilder.java +++ b/src/resources/objects/installation/InstallationMessageBuilder.java @@ -21,6 +21,223 @@ ******************************************************************************/ package resources.objects.installation; -public class InstallationMessageBuilder { +import java.nio.ByteOrder; +import java.util.Map; +import org.apache.mina.core.buffer.IoBuffer; + +import engine.resources.objects.Builder; +import resources.objects.tangible.TangibleMessageBuilder; + +public class InstallationMessageBuilder extends TangibleMessageBuilder{ + + public InstallationMessageBuilder(InstallationObject object) { + super(object); + } + + public InstallationMessageBuilder() { + super(); + } + + public IoBuffer buildBaseline3(InstallationObject installationObject) { + IoBuffer buffer = bufferPool.allocate(10, false).order(ByteOrder.LITTLE_ENDIAN); + buffer.setAutoExpand(true); + int packSize = 66; + packSize += installationObject.getStfName().length(); + packSize += installationObject.getStfFilename().length(); + + buffer.putShort((short)5); + buffer.putInt(0x68A75F0C); + buffer.putLong(installationObject.getObjectID()); + buffer.putInt(0x494E534F); + buffer.put((byte)3); + buffer.putInt(packSize); + buffer.putShort((short) 0x05); + buffer.putFloat(installationObject.getComplexity()); + buffer.put(getAsciiString(installationObject.getStfFilename())); // installation_n + buffer.putInt(0); + buffer.put(getAsciiString(installationObject.getStfName())); + buffer.put(getUnicodeString(""));//buffer.put(getUnicodeString(installationObject.getCustomName())); + buffer.putInt(1);// int 1 // oper 3 + buffer.putShort((short)0); + + buffer.putInt(0); + buffer.putInt(0); + buffer.putLong(0); + + buffer.putInt(0); + buffer.putInt(0); + buffer.putInt(0); + buffer.putInt(0); + buffer.put((byte)1); + buffer.put((byte)0); + buffer.putFloat(0.0F); + buffer.putFloat(0.0F); + + int size = buffer.position(); + buffer.flip(); + tools.CharonPacketUtils.printAnalysis(IoBuffer.allocate(size).put(buffer.array(), 0, size).flip()); + return IoBuffer.allocate(size).put(buffer.array(), 0, size).flip(); + } + +// 0000: 05 00 0C 5F A7 68 82 EC 7D 16 00 00 02 00 4F 53 ..._.h..}.....OS +// 0010: 4E 49 06 0E 00 00 00 05 00 76 00 00 00 00 00 00 NI.......v...... +// 0020: 00 01 00 00 00 ..... + + public IoBuffer buildBaseline6(InstallationObject installationObject) { + IoBuffer buffer = bufferPool.allocate(10, false).order(ByteOrder.LITTLE_ENDIAN); + buffer.setAutoExpand(true); + int packSize = 14; + buffer.putShort((short)5); + buffer.putInt(0x68A75F0C); + buffer.putLong(installationObject.getObjectID()); + buffer.putInt(0x494E534F); + buffer.put((byte)6); + buffer.putInt(packSize); + buffer.putShort((short)5); + buffer.putInt(0x76); + buffer.putInt(0); + buffer.putInt(1); + + int size = buffer.position(); + buffer.flip(); + tools.CharonPacketUtils.printAnalysis(IoBuffer.allocate(size).put(buffer.array(), 0, size).flip()); + return IoBuffer.allocate(size).put(buffer.array(), 0, size).flip(); + } + + + public IoBuffer buildBaseline7() { + IoBuffer buffer = bufferPool.allocate(2, false).order(ByteOrder.LITTLE_ENDIAN); + buffer.putShort((short) 0); + int size = buffer.position(); + buffer = IoBuffer.allocate(size).put(buffer.array(), 0, size); + buffer.flip(); + buffer = createBaseline("INSO", (byte) 7, buffer, size); + + return buffer; + } + + public IoBuffer buildBaseline8() { + IoBuffer buffer = bufferPool.allocate(2, false).order(ByteOrder.LITTLE_ENDIAN); + buffer.putShort((short) 0); + int size = buffer.position(); + buffer = IoBuffer.allocate(size).put(buffer.array(), 0, size); + buffer.flip(); + buffer = createBaseline("INSO", (byte) 8, buffer, size); + + return buffer; + } + + public IoBuffer buildBaseline9() { + IoBuffer buffer = bufferPool.allocate(2, false).order(ByteOrder.LITTLE_ENDIAN); + buffer.putShort((short) 0); + int size = buffer.position(); + buffer = IoBuffer.allocate(size).put(buffer.array(), 0, size); + buffer.flip(); + buffer = createBaseline("INSO", (byte) 9, buffer, size); + + return buffer; + } + + public IoBuffer buildDelta3(InstallationObject installationObject,IoBuffer packet,int packSize) { + IoBuffer buffer = bufferPool.allocate(10, false).order(ByteOrder.LITTLE_ENDIAN); + buffer.setAutoExpand(true); + buffer.putShort((short)5); + buffer.putInt(0x12862153); + buffer.putLong(installationObject.getObjectID()); + buffer.putInt(0x494E534F); + buffer.put((byte)3); + buffer.putInt(packSize); + buffer.put(packet); + int size = buffer.position(); + buffer.flip(); + tools.CharonPacketUtils.printAnalysis(IoBuffer.allocate(size).put(buffer.array(), 0, size).flip()); + return IoBuffer.allocate(size).put(buffer.array(), 0, size).flip(); + } + + public IoBuffer buildDelta7(InstallationObject installationObject,IoBuffer packet,int packSize) { + IoBuffer buffer = bufferPool.allocate(10, false).order(ByteOrder.LITTLE_ENDIAN); + buffer.setAutoExpand(true); + buffer.putShort((short)5); + buffer.putInt(0x12862153); + buffer.putLong(installationObject.getObjectID()); + buffer.putInt(0x494E534F); + buffer.put((byte)7); + buffer.putInt(packSize); + buffer.put(packet); + int size = buffer.position(); + buffer.flip(); + tools.CharonPacketUtils.printAnalysis(IoBuffer.allocate(size).put(buffer.array(), 0, size).flip()); + return IoBuffer.allocate(size).put(buffer.array(), 0, size).flip(); + } + + public IoBuffer constructINSO7Var1(InstallationObject installationObject,long selectedResource) { + IoBuffer buffer = bufferPool.allocate(10, false).order(ByteOrder.LITTLE_ENDIAN); + //int hopperContentsSize = ((HarvesterObject)installationObject).getOutputHopperContent().size()+1; + //byte updateCounter = ((HarvesterObject)installationObject).getUpdateCount(); + + buffer.setAutoExpand(true); + buffer.putShort((short)2); // buffer.putShort((short)updateCounter); + buffer.putShort((short)0xC); + buffer.put((byte)1); + buffer.putShort((short)0xD); + + buffer.putInt(1);//buffer.putInt(hopperContentsSize); // works once with 1! HopperContentsSize->Number of resources in hopper + buffer.putInt(2); // UpdateCounter works once with 2! + buffer.put((byte)1); // subtype : ADD + buffer.putShort((short)0); // index was 0 buffer.putShort((short)(hopperContentsSize-1)); + buffer.putLong(selectedResource); + buffer.putFloat(0); + int size = buffer.position(); + buffer.flip(); + return buildDelta7(installationObject,IoBuffer.allocate(size).put(buffer.array(), 0, size).flip(),size); + } + +// 0000: 05 00 53 21 86 12 82 EC 7D 16 00 00 02 00 4F 53 ..S!....}.....OS +// 0010: 4E 49 07 1E 00 00 00 02 00 0C 00 01 0D 00 01 00 NI.............. +// 0020: 00 00 02 00 00 00 01 00 00 8A D3 79 16 00 00 0F ...........y.... +// 0030: 00 00 00 00 00 ..... + + public IoBuffer constructINSO7Var2(InstallationObject installationObject,long selectedResource) { + IoBuffer buffer = bufferPool.allocate(10, false).order(ByteOrder.LITTLE_ENDIAN); + buffer.setAutoExpand(true); + buffer.putShort((short)2); + buffer.putShort((short)0x9); + buffer.putFloat(0); + buffer.putShort((short)0x5); + buffer.putLong(selectedResource); + int size = buffer.position(); + buffer.flip(); + return buildDelta7(installationObject,IoBuffer.allocate(size).put(buffer.array(), 0, size).flip(),size); + } + +// 0000: 05 00 53 21 86 12 82 EC 7D 16 00 00 02 00 4F 53 ..S!....}.....OS +// 0010: 4E 49 07 12 00 00 00 02 00 09 00 00 00 00 00 05 NI.............. +// 0020: 00 8A D3 79 16 00 00 0F 00 ...y..... + + @Override + public void buildBaseline3(Map baselineBuilders, Map deltaBuilders) { + super.buildBaseline3(deltaBuilders, deltaBuilders); + } + + @Override + public void buildBaseline6(Map baselineBuilders, Map deltaBuilders) { + super.buildBaseline6(deltaBuilders, deltaBuilders); + } + + @Override + public void buildBaseline7(Map baselineBuilders, Map deltaBuilders) { + super.buildBaseline7(deltaBuilders, deltaBuilders); + } + + @Override + public void buildBaseline8(Map baselineBuilders, Map deltaBuilders) { + super.buildBaseline8(deltaBuilders, deltaBuilders); + } + + @Override + public void buildBaseline9(Map baselineBuilders, Map deltaBuilders) { + super.buildBaseline9(deltaBuilders, deltaBuilders); + } + } diff --git a/src/resources/objects/installation/InstallationObject.java b/src/resources/objects/installation/InstallationObject.java index 7b31ff63..b9cc98d6 100644 --- a/src/resources/objects/installation/InstallationObject.java +++ b/src/resources/objects/installation/InstallationObject.java @@ -21,6 +21,43 @@ ******************************************************************************/ package resources.objects.installation; -public class InstallationObject { +import java.io.Serializable; +import java.util.Vector; -} +import com.sleepycat.persist.model.Entity; + +import engine.clients.Client; +import engine.resources.scene.Planet; +import engine.resources.scene.Point3D; +import engine.resources.scene.Quaternion; +import resources.objects.ObjectMessageBuilder; +import resources.objects.tangible.TangibleObject; + +@Entity(version=0) +public class InstallationObject extends TangibleObject implements Serializable { + + private static final long serialVersionUID = 1L; + private transient InstallationMessageBuilder messageBuilder; + + public InstallationObject(long objectID, Planet planet, Point3D position, Quaternion orientation, String template) { + super(objectID, planet, position, orientation, template); + messageBuilder = new InstallationMessageBuilder(this); + } + + @Override + public void sendBaselines(Client destination) { + + } + + @Override + public void initAfterDBLoad() { + super.init(); + messageBuilder = new InstallationMessageBuilder(this); + defendersList = new Vector(); + } + + public ObjectMessageBuilder getMessageBuilder() { + return messageBuilder; + } + +} \ No newline at end of file diff --git a/src/resources/objects/intangible/IntangibleMessageBuilder.java b/src/resources/objects/intangible/IntangibleMessageBuilder.java index 1dd0af60..b6c572f8 100644 --- a/src/resources/objects/intangible/IntangibleMessageBuilder.java +++ b/src/resources/objects/intangible/IntangibleMessageBuilder.java @@ -21,6 +21,39 @@ ******************************************************************************/ package resources.objects.intangible; -public class IntangibleMessageBuilder { +import java.util.Map; +import resources.objects.ObjectMessageBuilder; +import engine.resources.objects.Builder; + +public class IntangibleMessageBuilder extends ObjectMessageBuilder { + + public IntangibleMessageBuilder(IntangibleObject object) { + super(object); + } + + public IntangibleMessageBuilder() { + super(); + } + + @Override + public void buildBaseline3(Map baselineBuilders, Map deltaBuilders) { + super.buildBaseline3(baselineBuilders, deltaBuilders); + } + + @Override + public void buildBaseline6(Map baselineBuilders, Map deltaBuilders) { + super.buildBaseline6(baselineBuilders, deltaBuilders); + } + + @Override + public void buildBaseline8(Map baselineBuilders, Map deltaBuilders) { + super.buildBaseline8(baselineBuilders, deltaBuilders); + } + + @Override + public void buildBaseline9(Map baselineBuilders, Map deltaBuilders) { + super.buildBaseline9(baselineBuilders, deltaBuilders); + } + } diff --git a/src/resources/objects/intangible/IntangibleObject.java b/src/resources/objects/intangible/IntangibleObject.java index 1d23fe40..df6843b3 100644 --- a/src/resources/objects/intangible/IntangibleObject.java +++ b/src/resources/objects/intangible/IntangibleObject.java @@ -21,45 +21,107 @@ ******************************************************************************/ package resources.objects.intangible; +import java.io.Serializable; +import org.apache.mina.core.buffer.IoBuffer; -import com.sleepycat.persist.model.Persistent; - +import resources.objects.ObjectMessageBuilder; import engine.clients.Client; +import engine.resources.objects.Baseline; import engine.resources.objects.SWGObject; import engine.resources.scene.Planet; import engine.resources.scene.Point3D; import engine.resources.scene.Quaternion; -@Persistent -public class IntangibleObject extends SWGObject { +public class IntangibleObject extends SWGObject implements Serializable { - private int genericInt; + private static final long serialVersionUID = 1L; + + private transient IntangibleMessageBuilder messageBuilder; + + public IntangibleObject(long objectID, Planet planet, Point3D position, Quaternion orientation, String Template) { + super(objectID, planet, position, orientation, Template); + } public IntangibleObject() { super(); } - - public IntangibleObject(long objectID, Planet planet, Point3D position, Quaternion orientation, String Template) { - super(objectID, planet, position, orientation, Template); + + public void initAfterDBLoad() { + super.init(); } - + + public Baseline getOtherVariables() { + Baseline baseline = super.getOtherVariables(); + return baseline; + } + + public Baseline getBaseline3() { + Baseline baseline = super.getBaseline3(); + baseline.put("genericInt", 0); + return baseline; + } + + public Baseline getBaseline6() { + Baseline baseline = super.getBaseline6(); + return baseline; + } + + public Baseline getBaseline8() { + Baseline baseline = super.getBaseline8(); + return baseline; + } + + public Baseline getBaseline9() { + Baseline baseline = super.getBaseline9(); + return baseline; + } + public int getGenericInt() { - synchronized(objectMutex) { - return genericInt; - } + return (int) getBaseline(3).get("genericInt"); } - + public void setGenericInt(int genericInt) { + notifyClients(getBaseline(3).set("genericInt", genericInt), true); + } + + public void incrementGenericInt(int increase) { + setGenericInt((getGenericInt() + increase)); + } + + public void decrementGenericInt(int decrease) { + setGenericInt((((getGenericInt() - decrease) < 1) ? 0 : (getGenericInt() - decrease))); + } + + public void notifyClients(IoBuffer buffer, boolean notifySelf) { + notifyObservers(buffer, notifySelf); + } + + public ObjectMessageBuilder getMessageBuilder() { synchronized(objectMutex) { - this.genericInt = genericInt; + if (messageBuilder == null) { + messageBuilder = new IntangibleMessageBuilder(this); + } + + return messageBuilder; } } - - @Override - public void sendBaselines(Client client) { - // TODO Auto-generated method stub + + public void sendBaselines(Client destination) { + if (destination != null && destination.getSession() != null) { + destination.getSession().write(getBaseline(3).getBaseline()); + destination.getSession().write(getBaseline(6).getBaseline()); + + // FIXME Check if destination has view permissions to this + if (this.getContainer() == destination.getParent() || this.getGrandparent() == destination.getParent()) { + destination.getSession().write(getBaseline(8).getBaseline()); + destination.getSession().write(getBaseline(9).getBaseline()); + } + } + } + + public void sendListDelta(byte viewType, short updateType, IoBuffer buffer) { } - + } diff --git a/src/resources/objects/manufacture/ManufactureSchematicMessageBuilder.java b/src/resources/objects/manufacture/ManufactureSchematicMessageBuilder.java new file mode 100644 index 00000000..ce90c1ab --- /dev/null +++ b/src/resources/objects/manufacture/ManufactureSchematicMessageBuilder.java @@ -0,0 +1,64 @@ +/******************************************************************************* + * Copyright (c) 2013 + * + * This File is part of NGECore2. + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see . + * + * Using NGEngine to work with NGECore2 is making a combined work based on NGEngine. + * Therefore all terms and conditions of the GNU Lesser General Public License cover the combination. + ******************************************************************************/ +package resources.objects.manufacture; + +import java.util.Map; + +import engine.resources.objects.Builder; +import resources.objects.intangible.IntangibleMessageBuilder; + +public class ManufactureSchematicMessageBuilder extends IntangibleMessageBuilder { + + public ManufactureSchematicMessageBuilder(ManufactureSchematicObject object) { + super(object); + } + + public ManufactureSchematicMessageBuilder() { + super(); + } + + @Override + public void buildBaseline3(Map baselineBuilders, Map deltaBuilders) { + super.buildBaseline3(baselineBuilders, deltaBuilders); + } + + @Override + public void buildBaseline6(Map baselineBuilders, Map deltaBuilders) { + super.buildBaseline6(baselineBuilders, deltaBuilders); + } + + @Override + public void buildBaseline7(Map baselineBuilders, Map deltaBuilders) { + super.buildBaseline7(baselineBuilders, deltaBuilders); + } + + @Override + public void buildBaseline8(Map baselineBuilders, Map deltaBuilders) { + super.buildBaseline8(baselineBuilders, deltaBuilders); + } + + @Override + public void buildBaseline9(Map baselineBuilders, Map deltaBuilders) { + super.buildBaseline9(baselineBuilders, deltaBuilders); + } + +} diff --git a/src/resources/objects/manufacture/ManufactureSchematicObject.java b/src/resources/objects/manufacture/ManufactureSchematicObject.java new file mode 100644 index 00000000..c2693da5 --- /dev/null +++ b/src/resources/objects/manufacture/ManufactureSchematicObject.java @@ -0,0 +1,56 @@ +/******************************************************************************* + * Copyright (c) 2013 + * + * This File is part of NGECore2. + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see . + * + * Using NGEngine to work with NGECore2 is making a combined work based on NGEngine. + * Therefore all terms and conditions of the GNU Lesser General Public License cover the combination. + ******************************************************************************/ +package resources.objects.manufacture; + +import java.io.Serializable; + +import resources.objects.ObjectMessageBuilder; +import resources.objects.intangible.IntangibleObject; + +import com.sleepycat.persist.model.Persistent; + +import engine.resources.scene.Planet; +import engine.resources.scene.Point3D; +import engine.resources.scene.Quaternion; + +@Persistent(version=0) +public class ManufactureSchematicObject extends IntangibleObject implements Serializable { + + private static final long serialVersionUID = 1L; + private transient ManufactureSchematicMessageBuilder messageBuilder; + + public ManufactureSchematicObject(long objectID, Planet planet, String template, Point3D position, Quaternion orientation) { + super(objectID, planet, position, orientation, template); + messageBuilder = new ManufactureSchematicMessageBuilder(this); + } + + @Override + public void initAfterDBLoad() { + super.init(); + messageBuilder = new ManufactureSchematicMessageBuilder(this); + } + + public ObjectMessageBuilder getMessageBuilder() { + return messageBuilder; + } + +} diff --git a/src/resources/objects/mission/MissionMessageBuilder.java b/src/resources/objects/mission/MissionMessageBuilder.java index 90c78dfe..22431c85 100644 --- a/src/resources/objects/mission/MissionMessageBuilder.java +++ b/src/resources/objects/mission/MissionMessageBuilder.java @@ -21,6 +21,402 @@ ******************************************************************************/ package resources.objects.mission; -public class MissionMessageBuilder { +import java.nio.ByteOrder; +import java.util.Map; +import org.apache.mina.core.buffer.IoBuffer; + +import engine.resources.common.CRC; +import engine.resources.objects.Builder; +import engine.resources.scene.Point3D; +import resources.objects.intangible.IntangibleMessageBuilder; +import resources.objects.waypoint.WaypointObject; + +public class MissionMessageBuilder extends IntangibleMessageBuilder { + + public MissionMessageBuilder(MissionObject object) { + super(object); + } + + public MissionMessageBuilder() { + super(); + } + + public IoBuffer buildBaseline3() { + MissionObject mission = (MissionObject) object; + IoBuffer buffer = IoBuffer.allocate(100, false).order(ByteOrder.LITTLE_ENDIAN); + buffer.setAutoExpand(true); + + buffer.putShort((short) 16); + + buffer.putFloat(object.getComplexity()); // mission complexity ?? + + buffer.put(getAsciiString(object.getStfFilename())); + buffer.putInt(0); + buffer.put(getAsciiString(object.getStfName())); + + if (mission.getCustomName() == null) { buffer.putInt(0); } + else { buffer.put(getUnicodeString(mission.getCustomName())); } + + buffer.putInt(object.getVolume()); // volume + + buffer.putInt(0); // unused + + buffer.putInt(mission.getMissionLevel()); + + if (mission.getStartLocation() != null) { + buffer.putFloat(mission.getStartLocation().x); + buffer.putFloat(0); + buffer.putFloat(mission.getStartLocation().z); + } else { + buffer.putFloat(0); + buffer.putFloat(0); + buffer.putFloat(0); + } + buffer.putLong(0); // Start Object ID + if (mission.getMissionStartPlanet() == null) + buffer.putInt(0); + else + buffer.putInt(CRC.StringtoCRC(mission.getMissionStartPlanet())); + + if (mission.getCreator() != null) + buffer.put(getUnicodeString(mission.getCreator())); + else + buffer.putInt(0); + + buffer.putInt(mission.getCreditReward()); + + if (mission.getDestination() != null) { + buffer.putFloat(mission.getDestination().x); + buffer.putFloat(0); + buffer.putFloat(mission.getDestination().z); + } else { + buffer.putFloat(0); + buffer.putFloat(0); + buffer.putFloat(0); + } + buffer.putLong(0); // Destination Object ID + if (mission.getMissionDestinationPlanet() == null) + buffer.putInt(0); + else + buffer.putInt(CRC.StringtoCRC(mission.getMissionDestinationPlanet())); + + buffer.putInt(mission.getMissionTemplateObject()); + + buffer.put(getAsciiString(mission.getMissionStf())); + buffer.putInt(0); + buffer.put(getAsciiString(mission.getMissionDescription())); + + buffer.put(getAsciiString(mission.getMissionStf())); + buffer.putInt(0); + buffer.put(getAsciiString(mission.getMissionTitle())); + + buffer.putInt(0); // refresh counter + + if(mission.getMissionType() == null) + buffer.putInt(0); + else + buffer.putInt(CRC.StringtoCRC(mission.getMissionType())); + + buffer.put(getAsciiString(mission.getMissionTargetName())); + + WaypointObject wp = mission.getAttachedWaypoint(); + + if (wp == null) { + buffer.putInt(0); // cell + buffer.putFloat(0); // x + buffer.putFloat(0); // z + buffer.putFloat(0); // y + buffer.putLong(0); // target id + buffer.putInt(0); // planet crc + buffer.putInt(0); // name + buffer.putLong(0); // waypoint id + buffer.put((byte) 0); // color + buffer.put((byte) 0x01); //active + } else { + buffer.putInt(wp.getCellId()); + buffer.putFloat(wp.getPosition().x); + buffer.putFloat(wp.getPosition().y); + buffer.putFloat(wp.getPosition().z); + buffer.putLong(0); + buffer.putInt(CRC.StringtoCRC(wp.getPlanet().name)); + buffer.put(getUnicodeString(wp.getName())); + buffer.putLong(wp.getObjectId()); + buffer.put(wp.getColor()); + buffer.put((byte) (wp.isActive() ? 1 : 0)); + } + + int size = buffer.position(); + buffer = bufferPool.allocate(size, false).put(buffer.array(), 0, size); + + buffer.flip(); + buffer = createBaseline("MISO", (byte) 3, buffer, size); + + //Console.println("MISO3 Bytes: " + StringUtilities.bytesToHex(buffer.array())); + return buffer; + } + + public IoBuffer buildBaseline6() { + + IoBuffer buffer = IoBuffer.allocate(18, false).order(ByteOrder.LITTLE_ENDIAN); + + buffer.putShort((short) 3); + buffer.putInt(76); // server id + buffer.putLong(0); // detail stf + buffer.putInt(0xFFFFFFFF); // unknown + + int size = buffer.position(); + buffer.flip(); + buffer = createBaseline("MISO", (byte) 6, buffer, size); + + return buffer; + } + + public IoBuffer buildBaseline8() { + IoBuffer buffer = IoBuffer.allocate(2, false).order(ByteOrder.LITTLE_ENDIAN); + + buffer.putShort((short) 0); // unknown + + int size = buffer.position(); + buffer.flip(); + buffer = createBaseline("MISO", (byte) 8, buffer, size); + + return buffer; + } + + public IoBuffer buildBaseline9() { + IoBuffer buffer = IoBuffer.allocate(2, false).order(ByteOrder.LITTLE_ENDIAN); + + buffer.putShort((short) 0); // unknown + + int size = buffer.position(); + buffer.flip(); + buffer = createBaseline("MISO", (byte) 9, buffer, size); + + return buffer; + } + + public IoBuffer buildStfDelta(String stfFile, String stfName) { + + IoBuffer buffer = IoBuffer.allocate(4 + stfFile.length() + stfName.length(), false).order(ByteOrder.LITTLE_ENDIAN); + + buffer.put(getAsciiString(stfFile)); + buffer.putInt(0); + buffer.put(getAsciiString(stfName)); + + int size = buffer.position(); + buffer.flip(); + buffer = createDelta("MISO", (byte) 3, (short) 1, (short) 0x01, buffer, size + 4); + + return buffer; + } + + public IoBuffer buildDifficultyLevelDelta(int difficulty) { + + IoBuffer buffer = IoBuffer.allocate(4, false).order(ByteOrder.LITTLE_ENDIAN); + + buffer.putInt(difficulty); + + int size = buffer.position(); + buffer.flip(); + buffer = createDelta("MISO", (byte) 3, (short) 1, (short) 0x05, buffer, size + 4); + + return buffer; + } + + public IoBuffer buildStartLocationDelta(Point3D startLocation, String planet) { + + IoBuffer buffer = IoBuffer.allocate(24, false).order(ByteOrder.LITTLE_ENDIAN); + + buffer.putFloat(startLocation.x); + buffer.putFloat(0); + buffer.putFloat(startLocation.z); + + buffer.putLong(0); + + if (planet == null) { + buffer.putInt(CRC.StringtoCRC(object.getPlanet().name)); + } else { + buffer.putInt(CRC.StringtoCRC(planet)); + } + int size = buffer.position(); + buffer.flip(); + buffer = createDelta("MISO", (byte) 3, (short) 1, (short) 0x06, buffer, size + 4); + + return buffer; + } + + public IoBuffer buildCreatorNameDelta(String creator) { + + IoBuffer buffer = IoBuffer.allocate(4 + (creator.length() * 2), false).order(ByteOrder.LITTLE_ENDIAN); + + buffer.put(getUnicodeString(creator)); + + int size = buffer.position(); + buffer.flip(); + buffer = createDelta("MISO", (byte) 3, (short) 1, (short) 0x07, buffer, size + 4); + + return buffer; + } + + public IoBuffer buildCreditsRewardDelta(int creds) { + + IoBuffer buffer = IoBuffer.allocate(4, false).order(ByteOrder.LITTLE_ENDIAN); + + buffer.putInt(creds); + + int size = buffer.position(); + buffer.flip(); + buffer = createDelta("MISO", (byte) 3, (short) 1, (short) 0x08, buffer, size + 4); + + return buffer; + } + + public IoBuffer buildDestinationDelta(Point3D destination, String planet) { + + IoBuffer buffer = IoBuffer.allocate(24, false).order(ByteOrder.LITTLE_ENDIAN); + + buffer.putFloat(destination.x); + buffer.putFloat(0); + buffer.putFloat(destination.z); + + buffer.putLong(0); // Destination Object ID + + if (planet == null) { + buffer.putInt(CRC.StringtoCRC(object.getPlanet().name)); + } else { + buffer.putInt(CRC.StringtoCRC(planet)); + } + + int size = buffer.position(); + buffer.flip(); + buffer = createDelta("MISO", (byte) 3, (short) 1, (short) 0x09, buffer, size + 4); + + return buffer; + } + + public IoBuffer buildTargetObjectIffDelta(int template) { + + IoBuffer buffer = IoBuffer.allocate(4, false).order(ByteOrder.LITTLE_ENDIAN); + + buffer.putInt(template); + + int size = buffer.position(); + buffer.flip(); + buffer = createDelta("MISO", (byte) 3, (short) 1, (short) 0x0A, buffer, size + 4); + + return buffer; + } + + public IoBuffer buildMissionDescriptionDelta(String stfFile, String descId) { + + IoBuffer buffer = IoBuffer.allocate(13 + stfFile.length() + descId.length(), false).order(ByteOrder.LITTLE_ENDIAN); + + buffer.put(getAsciiString(stfFile)); + buffer.putInt(0); + buffer.put(getAsciiString(descId)); + + int size = buffer.position(); + buffer.flip(); + buffer = createDelta("MISO", (byte) 3, (short) 1, (short) 0x0B, buffer, size + 4); + + return buffer; + } + + public IoBuffer buildMissionTitleDelta(String stfFile, String titleId) { + + IoBuffer buffer = IoBuffer.allocate(12 + stfFile.length() + titleId.length(), false).order(ByteOrder.LITTLE_ENDIAN); + + buffer.put(getAsciiString(stfFile)); + buffer.putInt(0); + buffer.put(getAsciiString(titleId)); + + int size = buffer.position(); + buffer.flip(); + buffer = createDelta("MISO", (byte) 3, (short) 1, (short) 0x0C, buffer, size + 4); + + return buffer; + } + + public IoBuffer buildRepeatCounterDelta(int counter) { + + IoBuffer buffer = IoBuffer.allocate(4, false).order(ByteOrder.LITTLE_ENDIAN); + + buffer.putInt(counter); + + int size = buffer.position(); + buffer.flip(); + buffer = createDelta("MISO", (byte) 3, (short) 1, (short) 0x0D, buffer, size + 4); + + return buffer; + } + + public IoBuffer buildMissionTypeDelta(String type) { + + IoBuffer buffer = IoBuffer.allocate(4, false).order(ByteOrder.LITTLE_ENDIAN); + + buffer.putInt(CRC.StringtoCRC(type)); + + int size = buffer.position(); + buffer.flip(); + buffer = createDelta("MISO", (byte) 3, (short) 1, (short) 0x0E, buffer, size + 4); + + return buffer; + } + + public IoBuffer buildTargetNameDelta(String targetName) { + + IoBuffer buffer = IoBuffer.allocate(4 + targetName.length(), false).order(ByteOrder.LITTLE_ENDIAN); + + buffer.put(getAsciiString(targetName)); + + int size = buffer.position(); + buffer.flip(); + buffer = createDelta("MISO", (byte) 3, (short) 1, (short) 0x0F, buffer, size + 4); + + return buffer; + } + + public IoBuffer buildWaypointDelta(WaypointObject wp) { + + IoBuffer buffer = IoBuffer.allocate(44 + (2 * wp.getName().length()), false).order(ByteOrder.LITTLE_ENDIAN); + + buffer.putInt(wp.getCellId()); + buffer.putFloat(wp.getPosition().x); + buffer.putFloat(wp.getPosition().y); + buffer.putFloat(wp.getPosition().z); + buffer.putLong(0); + buffer.putInt(CRC.StringtoCRC(wp.getPlanet().name)); + buffer.put(getUnicodeString(wp.getName())); + buffer.putLong(wp.getObjectId()); + buffer.put(wp.getColor()); + buffer.put((byte) (wp.isActive() ? 1 : 0)); + + int size = buffer.position(); + buffer.flip(); + buffer = createDelta("MISO", (byte) 3, (short) 1, (short) 0x10, buffer, size + 4); + + return buffer; + } + + @Override + public void buildBaseline3(Map baselineBuilders, Map deltaBuilders) { + super.buildBaseline3(baselineBuilders, deltaBuilders); + } + + @Override + public void buildBaseline6(Map baselineBuilders, Map deltaBuilders) { + super.buildBaseline6(baselineBuilders, deltaBuilders); + } + + @Override + public void buildBaseline8(Map baselineBuilders, Map deltaBuilders) { + super.buildBaseline8(baselineBuilders, deltaBuilders); + } + + @Override + public void buildBaseline9(Map baselineBuilders, Map deltaBuilders) { + super.buildBaseline9(baselineBuilders, deltaBuilders); + } + } diff --git a/src/resources/objects/mission/MissionObject.java b/src/resources/objects/mission/MissionObject.java index 57c7540e..e6640a05 100644 --- a/src/resources/objects/mission/MissionObject.java +++ b/src/resources/objects/mission/MissionObject.java @@ -21,6 +21,313 @@ ******************************************************************************/ package resources.objects.mission; -public class MissionObject { +import java.io.Serializable; +import com.sleepycat.persist.model.NotPersistent; +import com.sleepycat.persist.model.Persistent; + +import resources.objects.ObjectMessageBuilder; +import resources.objects.intangible.IntangibleObject; +import resources.objects.waypoint.WaypointObject; +import services.mission.MissionObjective; +import engine.clients.Client; +import engine.resources.scene.Planet; +import engine.resources.scene.Point3D; +import engine.resources.scene.Quaternion; + +@Persistent(version=1) +public class MissionObject extends IntangibleObject implements Serializable { + + private static final long serialVersionUID = 1L; + private Point3D destination; + private Point3D startLocation; + private String startPlanet = ""; + private int difficultyLevel = 0; // Difficulty level displayed in details + private String destinationPlanet = ""; + private int repeatCount = 0; // increases for each player using the mission; used for redisplaying on mission term too + private int reward = 0; + private String creator = ""; + private String description = ""; + private String title = ""; + private String missionTargetName = ""; // Target object I guess? + private int missionId = 0; + private String missionStf = ""; + private String type = ""; + private int missionTemplateObject = 0; + private WaypointObject attachedWaypoint; + + // Server variables + private MissionObjective objective; + private long bountyObjId; + + @NotPersistent + private transient MissionMessageBuilder messageBuilder = new MissionMessageBuilder(this); + + public MissionObject() { + super(); + } + + public MissionObject(long objectID, Planet planet, String template) { + super(objectID, planet, new Point3D(0, 0, 0), new Quaternion(1, 0, 0, 0), template); + } + + public String getMissionDestinationPlanet() { + synchronized(objectMutex) { + return destinationPlanet; + } + } + + @Override + public void initAfterDBLoad() { + super.init(); + messageBuilder = new MissionMessageBuilder(this); + if(attachedWaypoint != null) + attachedWaypoint.initAfterDBLoad(); + } + + public int getMissionLevel() { + synchronized(objectMutex) { + return difficultyLevel; + } + } + + public void setMissionLevel(int missionLevel) { + synchronized(objectMutex) { + this.difficultyLevel = missionLevel; + } + if (getGrandparent() != null && getGrandparent().getClient() != null && getGrandparent().getClient().getSession() != null) { + getGrandparent().getClient().getSession().write(messageBuilder.buildDifficultyLevelDelta(missionLevel)); + } + } + + public String getMissionStartPlanet() { + synchronized(objectMutex) { + return startPlanet; + } + } + + public int getMissionRepeatCounter() { + synchronized(objectMutex) { + return repeatCount; + } + } + + public void setRepeatCount(int missionRepeatCounter) { + synchronized(objectMutex) { + this.repeatCount = missionRepeatCounter; + } + if (getGrandparent() != null && getGrandparent().getClient() != null && getGrandparent().getClient().getSession() != null) { + getGrandparent().getClient().getSession().write(messageBuilder.buildRepeatCounterDelta(missionRepeatCounter)); + } + } + + public int getCreditReward() { + synchronized(objectMutex) { + return reward; + } + } + + public void setCreditReward(int missionCredits) { + synchronized(objectMutex) { + this.reward = missionCredits; + } + if (getGrandparent() != null && getGrandparent().getClient() != null && getGrandparent().getClient().getSession() != null) { + getGrandparent().getClient().getSession().write(messageBuilder.buildCreditsRewardDelta(missionCredits)); + } + } + + public String getCreator() { + synchronized(objectMutex) { + return creator; + } + } + + public void setCreator(String missionCreator) { + synchronized(objectMutex) { + this.creator = missionCreator; + } + if (getGrandparent() != null && getGrandparent().getClient() != null && getGrandparent().getClient().getSession() != null) { + getGrandparent().getClient().getSession().write(messageBuilder.buildCreatorNameDelta(missionCreator)); + } + } + + public String getMissionDescription() { + synchronized(objectMutex) { + return description; + } + } + + public void setMissionDescription(String missionDescription) { + synchronized(objectMutex) { + this.description = missionDescription; + } + if (getGrandparent() != null && getGrandparent().getClient() != null && getGrandparent().getClient().getSession() != null) { + getGrandparent().getClient().getSession().write(messageBuilder.buildMissionDescriptionDelta(missionStf, missionDescription)); + } + } + + public String getMissionTitle() { + synchronized(objectMutex) { + return title; + } + } + + public void setMissionTitle(String missionTitle) { + synchronized(objectMutex) { + this.title = missionTitle; + } + if (getGrandparent() != null && getGrandparent().getClient() != null && getGrandparent().getClient().getSession() != null) { + getGrandparent().getClient().getSession().write(messageBuilder.buildMissionTitleDelta(missionStf, missionTitle)); + } + } + + public String getMissionTargetName() { + synchronized(objectMutex) { + return missionTargetName; + } + } + + public void setMissionTargetName(String missionTargetName) { + synchronized(objectMutex) { + this.missionTargetName = missionTargetName; + } + if (getGrandparent() != null && getGrandparent().getClient() != null && getGrandparent().getClient().getSession() != null) { + getGrandparent().getClient().getSession().write(messageBuilder.buildTargetNameDelta(missionTargetName)); + } + } + + public WaypointObject getAttachedWaypoint() { + synchronized(objectMutex) { + return attachedWaypoint; + } + } + + public void setAttachedWaypoint(WaypointObject waypoint) { + synchronized(objectMutex) { + this.attachedWaypoint = waypoint; + } + + if (getGrandparent() != null && getGrandparent().getClient() != null && getGrandparent().getClient().getSession() != null) { + getGrandparent().getClient().getSession().write(messageBuilder.buildWaypointDelta(waypoint)); + } + } + + public int getMissionTemplateObject() { + synchronized(objectMutex) { + return missionTemplateObject; + } + } + + public void setMissionTemplateObject(int missionTemplateObject) { + synchronized(objectMutex) { + this.missionTemplateObject = missionTemplateObject; + } + if (getGrandparent() != null && getGrandparent().getClient() != null && getGrandparent().getClient().getSession() != null) { + getGrandparent().getClient().getSession().write(messageBuilder.buildTargetObjectIffDelta(missionTemplateObject)); + } + } + + public String getMissionType() { + synchronized(objectMutex) { + return type; + } + } + + public void setMissionType(String missionType) { + synchronized(objectMutex) { + this.type = missionType; + } + if (getGrandparent() != null && getGrandparent().getClient() != null && getGrandparent().getClient().getSession() != null) { + getGrandparent().getClient().getSession().write(messageBuilder.buildMissionTypeDelta(missionType)); + } + } + + public MissionObjective getObjective() { + synchronized(objectMutex) { + return objective; + } + } + + public void setObjective(MissionObjective objective) { + synchronized(objectMutex) { + this.objective = objective; + } + } + + public Point3D getStartLocation() { + synchronized(objectMutex) { + return startLocation; + } + } + + public Point3D getDestination() { + synchronized(objectMutex) { + return destination; + } + } + + public void setStartLocation(Point3D startLocation, String planet) { + synchronized(objectMutex) { + this.startLocation = startLocation; + this.startPlanet = planet; + } + + if (getGrandparent() != null && getGrandparent().getClient() != null && getGrandparent().getClient().getSession() != null) { + getGrandparent().getClient().getSession().write(messageBuilder.buildStartLocationDelta(startLocation, planet)); + } + } + + public void setDestination(Point3D destination, String planet) { + synchronized(objectMutex) { + this.destination = destination; + this.destinationPlanet = planet; + } + + if (getGrandparent() != null && getGrandparent().getClient() != null && getGrandparent().getClient().getSession() != null) { + getGrandparent().getClient().getSession().write(messageBuilder.buildDestinationDelta(destination, planet)); + } + } + + public int getMissionId() { + return missionId; + } + + public void setMissionId(int missionId) { + this.missionId = missionId; + } + + public long getBountyMarkId() { + return bountyObjId; + } + + public void setBountyMarkId(long bountyObjId) { + this.bountyObjId = bountyObjId; + } + + public String getMissionStf() { + return missionStf; + } + + public void setMissionStf(String missionStf) { + this.missionStf = missionStf; + } + + @Override + public void sendBaselines(Client destination) { + + if(destination == null || destination.getSession() == null) { + System.out.println("NULL session"); + return; + } + + destination.getSession().write(messageBuilder.buildBaseline3()); + destination.getSession().write(messageBuilder.buildBaseline6()); + destination.getSession().write(messageBuilder.buildBaseline8()); + destination.getSession().write(messageBuilder.buildBaseline9()); + } + + public ObjectMessageBuilder getMessageBuilder() { + return messageBuilder; + } + } diff --git a/src/resources/objects/player/PlayerMessageBuilder.java b/src/resources/objects/player/PlayerMessageBuilder.java index cb480a88..adc62e2b 100644 --- a/src/resources/objects/player/PlayerMessageBuilder.java +++ b/src/resources/objects/player/PlayerMessageBuilder.java @@ -21,597 +21,39 @@ ******************************************************************************/ package resources.objects.player; -import java.nio.ByteOrder; -import java.util.Map.Entry; +import java.util.Map; -import org.apache.mina.core.buffer.IoBuffer; +import engine.resources.objects.Builder; +import resources.objects.intangible.IntangibleMessageBuilder; -import engine.resources.common.CRC; - -import resources.objects.ObjectMessageBuilder; -import resources.objects.waypoint.WaypointObject; - -public class PlayerMessageBuilder extends ObjectMessageBuilder { +public class PlayerMessageBuilder extends IntangibleMessageBuilder { - public static final String SPY = "spy_1a"; - public static final String SMUGGLER = "smuggler_1a"; - public static final String OFFICER = "officer_1a"; - public static final String JEDI = "force_sensitive_1a"; - public static final String COMMANDO = "commando_1a"; - public static final String ENTERTAINER = "entertainer_1a"; - public static final String MEDIC = "medic_1a"; - public static final String BOUNTYHUNTER = "bounty_hunter_1a"; - - - public PlayerMessageBuilder(PlayerObject playerObject) { - setObject(playerObject); - } - - public IoBuffer buildBaseline3() { - - PlayerObject player = (PlayerObject) object; - - IoBuffer buffer = bufferPool.allocate(100, false).order(ByteOrder.LITTLE_ENDIAN); - buffer.setAutoExpand(true); - buffer.putShort((short) 0x14); - buffer.putFloat(1); - buffer.put(getAsciiString("string_id_table")); - buffer.putInt(0); // spacer - buffer.putShort((short) 0); - buffer.putInt(0); // custom name - buffer.putInt(0); // volume - buffer.putInt(0); // generic int - - buffer.putInt(4); // flag bitmask list size - buffer.putInt(0); - buffer.putInt(0); - buffer.putInt(0); - buffer.putInt(0); - - buffer.putInt(4); // profile bitmask list size - buffer.putInt(0); - buffer.putInt(0); - buffer.putInt(0); - buffer.putInt(0); - - if(player.getTitle() == null || player.getTitle().length() < 1) - buffer.putShort((short) 0); - else - buffer.put(getAsciiString(player.getTitle())); - - buffer.putInt(0); // born date? - - buffer.putInt(player.getTotalPlayTime()); // total play time? - - buffer.putInt(getProfData(player.getProfession())); // prof icon - - buffer.put(getAsciiString(player.getProfession())); - buffer.putInt(0); // unk - buffer.putInt(0); // unk - - byte[] data1 = new byte[] { - - 0x76, (byte) 0x0C, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0xCF, (byte) 0x07, (byte) 0x00, (byte) 0x00, (byte) 0x78, (byte) 0x3E, (byte) 0x00, (byte) 0x00, (byte) 0x0F, (byte) 0x00, (byte) 0x60, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x01, (byte) 0x00, (byte) 0x00, (byte) 0x41, (byte) 0x02, (byte) 0x88, (byte) 0x04, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x1F, (byte) 0x20, (byte) 0x00, (byte) 0x00, (byte) 0x10, (byte) 0x00, (byte) 0x80, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x80, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x20, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x84, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x04, (byte) 0x28, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x10, (byte) 0x00, (byte) 0x00, (byte) 0x40, (byte) 0x01, (byte) 0x03, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00 - }; - buffer.put(data1); - byte[] data2 = new byte[] { - - 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x40, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0xC0, (byte) 0x05, (byte) 0x04, (byte) 0x78, (byte) 0x34, (byte) 0x78, (byte) 0x78, (byte) 0x08, (byte) 0x08, (byte) 0x14, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x08, (byte) 0x00, (byte) 0x40, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x80, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x04, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x80, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x20, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x0A, (byte) 0x04, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x40, (byte) 0x04, (byte) 0x00, (byte) 0x20, (byte) 0x81, (byte) 0x0A, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x0B, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x60, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x01, (byte) 0x00, (byte) 0x80, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x10, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x03, (byte) 0xC0, (byte) 0xFF, (byte) 0xC7, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x30, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x20, (byte) 0x80, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00 - }; - buffer.put(data2); - byte[] data3 = new byte[] { - - 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x80, (byte) 0xCB, (byte) 0x32, (byte) 0x06, (byte) 0x18, (byte) 0x60, (byte) 0x0C, (byte) 0x30, (byte) 0x60, (byte) 0x2D, (byte) 0x00, (byte) 0x00, (byte) 0x02, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00 - }; - buffer.put(data3); - byte[] data4 = new byte[] { - - 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00 - }; - buffer.put(data4); - byte[] data5 = new byte[] { - - 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x80, (byte) 0x01, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x06, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0xC0, (byte) 0xFF, (byte) 0x1F, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0xD0, (byte) 0xD5, (byte) 0x68, (byte) 0x00, (byte) 0x1A, (byte) 0x46, (byte) 0x03, (byte) 0x00, (byte) 0x00, (byte) 0x30, (byte) 0x1A, (byte) 0x00, (byte) 0x00, (byte) 0x40, (byte) 0x03, (byte) 0xD0, (byte) 0x00, (byte) 0x34, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00 - }; - buffer.put(data5); - byte[] data6 = new byte[] { - - 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x01, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00 - }; - buffer.put(data6); - byte[] data7 = new byte[] { - - 0x00, (byte) 0x00, (byte) 0x04, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x80, (byte) 0xFF, (byte) 0x3F, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x10, (byte) 0x00, (byte) 0x00 - }; - buffer.put(data7); - - - int size = buffer.position(); - - buffer = bufferPool.allocate(size, false).put(buffer.array(), 0, size); - - - buffer.flip(); - buffer = createBaseline("PLAY", (byte) 3, buffer, size); - - return buffer; - + public PlayerMessageBuilder(PlayerObject object) { + super(object); } - public IoBuffer buildBaseline6() { - - PlayerObject player = (PlayerObject) object; - - IoBuffer buffer = bufferPool.allocate(100, false).order(ByteOrder.LITTLE_ENDIAN); - buffer.setAutoExpand(true); - buffer.putShort((short) 0x11); - buffer.putInt((short) 0x8A); - - buffer.put(getAsciiString("string_id_table")); - - buffer.put((byte) 0); // unk - buffer.putShort((short) 0); // unk - buffer.putInt(0); // unk - buffer.putInt(0); // unk - buffer.putInt(0); // unk - buffer.putInt(0); // unk - buffer.putInt(0); // unk - buffer.putInt(0); // unk - if(player.getHome() == null || player.getHome().length() < 1) { - buffer.putShort((short) 0); - } else { - buffer.put(getAsciiString(player.getHome())); - } - buffer.putInt(0); // unk - buffer.put((byte) 0); // unk - buffer.putInt(0); // unk - buffer.putInt(0); // unk - buffer.putInt(0); // unk - buffer.putInt(0); // unk - buffer.putInt(0); // unk - buffer.putInt(0); // unk - - int size = buffer.position(); - - buffer = bufferPool.allocate(size, false).put(buffer.array(), 0, size); - - - buffer.flip(); - buffer = createBaseline("PLAY", (byte) 6, buffer, size); - - return buffer; - + public PlayerMessageBuilder() { + super(); } - - public IoBuffer buildBaseline8() { - PlayerObject player = (PlayerObject) object; - - IoBuffer buffer = bufferPool.allocate(100, false).order(ByteOrder.LITTLE_ENDIAN); - buffer.setAutoExpand(true); - buffer.putShort((short) 0x09); - - if(player.getXpList().isEmpty()) { - buffer.putInt(0); - buffer.putInt(0); - } else { - buffer.putInt(player.getXpList().size()); - buffer.putInt(0); - - // no need for locking here, concurrent hash map iterator wont throw concurrency exceptions and multiple thread access at zone in is unlikely to occur for the PlayerObject - for(Entry entry : player.getXpList().entrySet()) { - - buffer.put((byte) 0); - buffer.put(getAsciiString(entry.getKey())); - buffer.putInt(entry.getValue()); - - } - - } - - if(player.getWaypoints().isEmpty()) { - buffer.putInt(0); - buffer.putInt(0); - } else { - buffer.putInt(player.getWaypoints().size()); - buffer.putInt(0); - - synchronized(player.getWaypoints()) { - - for(WaypointObject waypoint : player.getWaypoints()) { - - buffer.put((byte) 0); - buffer.putLong(waypoint.getObjectID()); - buffer.putInt(waypoint.getCellId()); - buffer.putFloat(waypoint.getPosition().x); - buffer.putFloat(waypoint.getPosition().y); - buffer.putFloat(waypoint.getPosition().z); - buffer.putLong(waypoint.getLocationNetworkId()); - buffer.putInt(waypoint.getPlanetCRC()); - buffer.put(getUnicodeString(waypoint.getName())); - buffer.putLong(waypoint.getObjectID()); - buffer.put(waypoint.getColor()); - buffer.put((byte) (waypoint.isActive() ? 1 : 0)); - - } - - } - } - - buffer.putInt(100); // Current force power ? - buffer.putInt(100); // Max force power ? - buffer.putInt(0); // Current FS Quest List size ? - buffer.putInt(0); // Current FS Quest List update counter ? - - buffer.putInt(0); // Completed FS Quest List size ? - buffer.putInt(0); // Completed FS Quest List update counter ? - - buffer.putInt(0); // Quest Journal List size ? - buffer.putInt(0); // Quest Journal List update counter ? - - buffer.putInt(0); // unk - - buffer.put(getAsciiString(player.getProfessionWheelPosition())); - int size = buffer.position(); - buffer = bufferPool.allocate(size, false).put(buffer.array(), 0, size); - - buffer.flip(); - buffer = createBaseline("PLAY", (byte) 8, buffer, size); + @Override + public void buildBaseline3(Map baselineBuilders, Map deltaBuilders) { + super.buildBaseline3(baselineBuilders, deltaBuilders); + } - return buffer; + @Override + public void buildBaseline6(Map baselineBuilders, Map deltaBuilders) { + super.buildBaseline6(baselineBuilders, deltaBuilders); + } + + @Override + public void buildBaseline8(Map baselineBuilders, Map deltaBuilders) { + super.buildBaseline8(baselineBuilders, deltaBuilders); + } + + @Override + public void buildBaseline9(Map baselineBuilders, Map deltaBuilders) { + super.buildBaseline9(baselineBuilders, deltaBuilders); + } -} - - public IoBuffer buildBaseline9() { - - PlayerObject player = (PlayerObject) object; - - IoBuffer buffer = bufferPool.allocate(100, false).order(ByteOrder.LITTLE_ENDIAN); - buffer.setAutoExpand(true); - - buffer.putShort((short) 0x1F); - - buffer.putInt(0); // ExperimentationFlag? - buffer.putInt(0); // CraftingStage? - - buffer.putLong(0); // Nearest Crafting Station id ? - - - buffer.putInt(0); // Draft Schematic List Size - buffer.putInt(0); // Draft Schematic List update counter - - buffer.putInt(0); // ExperimentationPoints? - buffer.putInt(0); // CraftingStage? - - buffer.putInt(8); // unk - - buffer.putInt(0); // unk - - if(player.getFriendList().isEmpty()) { - buffer.putInt(0); - buffer.putInt(0); - } else { - buffer.putInt(player.getFriendList().size()); - buffer.putInt(player.getFriendListUpdateCounter()); - - synchronized(player.getFriendList()) { - - for(String friend : player.getFriendList()) { - buffer.put(getAsciiString(friend)); - } - - } - } - - if(player.getIgnoreList().isEmpty()) { - buffer.putInt(0); - buffer.putInt(0); - } else { - buffer.putInt(player.getIgnoreList().size()); - buffer.putInt(player.getIgnoreListUpdateCounter()); - - synchronized(player.getIgnoreList()) { - - for(String ignored : player.getIgnoreList()) { - buffer.put(getAsciiString(ignored)); - } - - } - } - - buffer.putInt(1); - buffer.putInt(0); // Current stomach unused in NGE - buffer.putInt(0x64); // Max stomach unused in NGE - buffer.putInt(0); // Current drink unused in NGE - buffer.putInt(0x64); // Max drink unused in NGE - buffer.putInt(0); // Current consumable unused in NGE - buffer.putInt(0x64); // Max consumable unused in NGE - - buffer.putInt(0); - buffer.putInt(0); - - buffer.putInt(0); - buffer.putInt(3); - buffer.putInt(0); - buffer.putInt(0); - - buffer.putInt(0); - buffer.putInt(0); - buffer.putInt(0); - buffer.putInt(0); - buffer.putInt(0); - - buffer.putInt(0); - buffer.putInt(2); - buffer.putInt(0); - buffer.putInt(0); - buffer.putInt(0); - - buffer.putInt(0); - buffer.putInt(0); - buffer.putInt(0); - buffer.putInt(0); - buffer.putInt(0); - - buffer.putInt(4); // jedi state??? - buffer.putShort((short) 0); - int size = buffer.position(); - - buffer = bufferPool.allocate(size, false).put(buffer.array(), 0, size); - - - buffer.flip(); - buffer = createBaseline("PLAY", (byte) 9, buffer, size); - - return buffer; - - } - - public IoBuffer buildTitleDelta(String title) { - IoBuffer buffer = bufferPool.allocate(4 + getAsciiString(title).length, false).order(ByteOrder.LITTLE_ENDIAN); - buffer.put(getAsciiString(title)); - int size = buffer.position(); - buffer.flip(); - buffer = createDelta("PLAY", (byte) 3, (short) 1, (short) 0x07, buffer, size + 4); - return buffer; - - } - - public IoBuffer buildXPListDelta(String type, int amount, boolean alreadyExists) { - PlayerObject player = (PlayerObject) object; - player.setXpListUpdateCounter(player.getXpListUpdateCounter() + 1); - - // Some problem with createDelta() - IoBuffer result = bufferPool.allocate(42 + type.length(), false).order(ByteOrder.LITTLE_ENDIAN); - result.putShort((short) 5); - result.putInt(CRC.StringtoCRC("BaselinesMessage")); - result.putLong(object.getContainer().getObjectID()); - result.put("YALP".getBytes()); - result.put((byte) 8); - result.putInt(19 + type.length()); - result.putShort((short) 1); - result.putShort((short) 0); - result.putInt(1); - result.putInt(player.getXpListUpdateCounter()); - result.put((byte) ((alreadyExists) ? 2 : 0)); - result.putShort((short) type.length()); - result.put(type.getBytes()); - result.putInt(amount); - - return result.flip(); - } - - public IoBuffer buildWaypointAddDelta(WaypointObject waypoint) { - - PlayerObject player = (PlayerObject) object; - IoBuffer buffer = bufferPool.allocate(59 + waypoint.getName().length() * 2, false).order(ByteOrder.LITTLE_ENDIAN); - buffer.setAutoExpand(true); - - int nextCounter = player.getWaypointListUpdateCounter() + 1; - player.setWaypointListUpdateCounter(nextCounter); - buffer.putInt(1); - buffer.putInt(player.getWaypointListUpdateCounter()); - - buffer.put((byte) 0); // updateType (SubType) - - buffer.putLong(waypoint.getObjectID()); - buffer.putInt(waypoint.getCellId()); - - buffer.putFloat(waypoint.getPosition().x); - buffer.putFloat(waypoint.getPosition().y); - buffer.putFloat(waypoint.getPosition().z); - - buffer.putLong(0); // networklocationId - buffer.putInt(waypoint.getPlanetCRC()); - - buffer.put(getUnicodeString(waypoint.getName())); - buffer.putLong(waypoint.getObjectID()); - - buffer.put((byte) waypoint.getColor()); - - if (waypoint.isActive()) { buffer.put((byte) 1); } - else { buffer.put((byte) 0); } - - int size = buffer.position(); - buffer.flip(); - - buffer = createDelta("PLAY", (byte) 8, (short) 1, (short) 1, buffer, size + 4); - //System.out.println("WaypointAdd: " + buffer.getHexDump()); - return buffer; - - } - - public IoBuffer buildWaypointRemoveDelta(WaypointObject waypoint) { - - IoBuffer buffer = bufferPool.allocate(59 + waypoint.getName().length() * 2, false).order(ByteOrder.LITTLE_ENDIAN); - PlayerObject player = (PlayerObject) object; - - int nextCounter = player.getWaypointListUpdateCounter() + 1; - player.setWaypointListUpdateCounter(nextCounter); - - buffer.putInt(1); - buffer.putInt(player.getWaypointListUpdateCounter()); - - buffer.put((byte) 1); // updateType (SubType) - - buffer.putLong(waypoint.getObjectID()); - buffer.putInt(waypoint.getCellId()); - - buffer.putFloat(waypoint.getPosition().x); - buffer.putFloat(waypoint.getPosition().y); - buffer.putFloat(waypoint.getPosition().z); - - buffer.putLong(0); // networklocationId - buffer.putInt(waypoint.getPlanetCRC()); - - buffer.put(getUnicodeString(waypoint.getName())); - buffer.putLong(waypoint.getObjectID()); - - buffer.put((byte) waypoint.getColor()); - - if (waypoint.isActive()) { buffer.put((byte) 1); } - else { buffer.put((byte) 0); } - - int size = buffer.position(); - buffer.flip(); - - buffer = createDelta("PLAY", (byte) 8, (short) 1, (short) 1, buffer, size + 4); - - return buffer; - - } - - public IoBuffer buildWaypointUpdateDelta(WaypointObject waypoint) { - - IoBuffer buffer = bufferPool.allocate(59 + waypoint.getName().length() * 2, false).order(ByteOrder.LITTLE_ENDIAN); - PlayerObject player = (PlayerObject) object; - - int nextCounter = player.getWaypointListUpdateCounter() + 1; - player.setWaypointListUpdateCounter(nextCounter); - - buffer.putInt(1); - buffer.putInt(player.getWaypointListUpdateCounter()); - - buffer.put((byte) 2); // updateType (SubType) - - buffer.putLong(waypoint.getObjectID()); - buffer.putInt(waypoint.getCellId()); - - buffer.putFloat(waypoint.getPosition().x); - buffer.putFloat(waypoint.getPosition().y); - buffer.putFloat(waypoint.getPosition().z); - - buffer.putLong(0); // networklocationId << cluster system I guess? - buffer.putInt(waypoint.getPlanetCRC()); - - buffer.put(getUnicodeString(waypoint.getName())); - buffer.putLong(waypoint.getObjectID()); - - buffer.put((byte) waypoint.getColor()); - - if (waypoint.isActive()) { buffer.put((byte) 1); } - else { buffer.put((byte) 0); } // isActive. Activates automatically when created. - - int size = buffer.position(); - buffer.flip(); - - buffer = createDelta("PLAY", (byte) 8, (short) 1, (short) 1, buffer, size + 4); - - return buffer; - - } - - public IoBuffer buildTotalPlayTimeDelta(int totalPlayTime) { - - IoBuffer buffer = bufferPool.allocate(4, false).order(ByteOrder.LITTLE_ENDIAN); - buffer.putInt(totalPlayTime); - int size = buffer.position(); - buffer.flip(); - buffer = createDelta("PLAY", (byte) 3, (short) 1, (short) 0x09, buffer, size + 4); - - return buffer; - - } - - public IoBuffer buildFriendAddDelta(String friend) { - - IoBuffer buffer = bufferPool.allocate(13 + friend.length(), false).order(ByteOrder.LITTLE_ENDIAN); - PlayerObject player = (PlayerObject) object; - - buffer.putInt(1); - buffer.putInt(player.getFriendListUpdateCounter()); - - buffer.put((byte) 1); // updateType (SubType) - - buffer.putShort((short) player.getFriendList().indexOf(friend)); - buffer.put(getAsciiString(friend)); - - int size = buffer.position(); - buffer.flip(); - - buffer = createDelta("PLAY", (byte) 9, (short) 1, (short) 7, buffer, size + 4); - - return buffer; - - } - - public IoBuffer buildFriendRemoveDelta(String friend) { - - IoBuffer buffer = bufferPool.allocate(11, false).order(ByteOrder.LITTLE_ENDIAN); - PlayerObject player = (PlayerObject) object; - - buffer.putInt(1); - buffer.putInt(player.getFriendListUpdateCounter()); - - buffer.put((byte) 0); // updateType (SubType) - - buffer.putShort((short) player.getFriendList().indexOf(friend)); - - int size = buffer.position(); - buffer.flip(); - - buffer = createDelta("PLAY", (byte) 9, (short) 1, (short) 7, buffer, size + 4); - - return buffer; - - } - - public int getProfData(String profession) { - - switch (profession) { - - case SPY: - return 0x23; - case SMUGGLER: - return 0x19; - case OFFICER: - return 0x0F; - case JEDI: - return 0x28; - case COMMANDO: - return 0x1E; - case ENTERTAINER: - return 0x05; - case MEDIC: - return 0x0A; - case BOUNTYHUNTER: - return 0x14; - default: - return 0x00; - - } - } - - @Override - public void sendListDelta(byte viewType, short updateType, IoBuffer buffer) { - // TODO Auto-generated method stub - - } - - @Override - public void sendBaselines() { - // TODO Auto-generated method stub - - } - } diff --git a/src/resources/objects/player/PlayerObject.java b/src/resources/objects/player/PlayerObject.java index 4995dfb0..99072b9a 100644 --- a/src/resources/objects/player/PlayerObject.java +++ b/src/resources/objects/player/PlayerObject.java @@ -21,544 +21,997 @@ ******************************************************************************/ package resources.objects.player; +import java.io.Serializable; import java.util.ArrayList; -import java.util.HashMap; +import java.util.BitSet; import java.util.List; import java.util.Map; +import java.util.TreeMap; +import java.util.Vector; +import org.apache.mina.core.buffer.IoBuffer; + +import resources.craft.DraftSchematic; +import resources.datatables.Citizenship; +import resources.datatables.Professions; +import resources.gcw.RegionDefender; +import resources.harvest.SurveyTool; +import resources.objects.SWGList; +import resources.objects.SWGMap; +import resources.objects.SWGSet; +import resources.objects.intangible.IntangibleObject; +import resources.objects.resource.ResourceContainerObject; import resources.objects.waypoint.WaypointObject; - -import com.sleepycat.persist.model.NotPersistent; -import com.sleepycat.persist.model.Persistent; - +import resources.quest.Quest; import engine.clients.Client; -import engine.resources.objects.DraftSchematic; -import engine.resources.objects.Quest; -import engine.resources.objects.SWGObject; +import engine.resources.objects.Baseline; import engine.resources.scene.Planet; import engine.resources.scene.Point3D; import engine.resources.scene.Quaternion; -@Persistent -public class PlayerObject extends SWGObject { +public class PlayerObject extends IntangibleObject implements Serializable { - // PLAY 3 + private static final long serialVersionUID = 1L; - private String title; - private String profession; - private List flagsList = new ArrayList(); - private List profileList = new ArrayList(); - private int bornDate = 0; - private int totalPlayTime = 0; + private transient PlayerMessageBuilder messageBuilder; - // PLAY 6 + private transient long lastPlayTimeUpdate = System.currentTimeMillis(); - private String home; // Player City Name + private transient WaypointObject lastSurveyWaypoint; + private transient SurveyTool lastUsedSurveyTool; + private transient ResourceContainerObject recentContainer; - // PLAY 8 - - private Map xpList = new HashMap(); - @NotPersistent - private int xpListUpdateCounter = 0; - - private List waypoints = new ArrayList(); - @NotPersistent - private int waypointListUpdateCounter = 0; - - private int currentForcePower = 0; // unused in NGE - private int maxForcePower = 0; // unused in NGE - - private List currentFSQuestList = new ArrayList(); // unused in NGE - private List completedFSQuestList = new ArrayList(); // unused in NGE - - private List questJournal = new ArrayList(); - @NotPersistent - private int questJournalUpdateCounter = 0; - - private String professionWheelPosition; - - // PLAY 9 - - private int experimentationFlag = 0; - private int craftingStage = 0; - private long nearestCraftingStation = 0; - - private List draftSchematicList = new ArrayList(); - @NotPersistent - private int draftSchematicListUpdateCounter = 0; - - private int experimentationPoints = 0; - private int accomplishmentCounter = 0; - - private List friendList = new ArrayList(); - @NotPersistent - private int friendListUpdateCounter = 0; - private List ignoreList = new ArrayList(); - @NotPersistent - private int ignoreListUpdateCounter = 0; - - private int languageId = 0; // unused in NGE - private int currentStomach = 0; // unused in NGE - private int maxStomach = 0; // unused in NGE - private int currentDrink = 0; // unused in NGE - private int maxDrink = 0; // unused in NGE - private int currentConsumable = 0; // unused - private int maxConsumable = 0; // unused - - // TODO: research new NGE vars between maxConsumable and jediState - - private int jediState = 0; // unused in NGE - - @NotPersistent - private PlayerMessageBuilder messageBuilder; - - @NotPersistent - private long lastPlayTimeUpdate = System.currentTimeMillis(); - - - - public PlayerObject() { - super(); - messageBuilder = new PlayerMessageBuilder(this); - } + private transient boolean callingCompanion = false; + private long bountyMissionId; // Bad because you could have 2 missions public PlayerObject(long objectID, Planet planet) { super(objectID, planet, new Point3D(0, 0, 0), new Quaternion(1, 0, 0, 0), "object/player/shared_player.iff"); - messageBuilder = new PlayerMessageBuilder(this); - } - - public String getTitle() { - synchronized(objectMutex) { - return title; - } - } - - public void setTitle(String title) { - synchronized(objectMutex) { - this.title = title; - } - - notifyObservers(messageBuilder.buildTitleDelta(title), true); - } - - public String getProfession() { - synchronized(objectMutex) { - return profession; - } - } - - public void setProfession(String profession) { - synchronized(objectMutex) { - this.profession = profession; - } - } - - public List getFlagsList() { - return flagsList; - } - - public List getProfileList() { - return profileList; - } - - public int getBornDate() { - synchronized(objectMutex) { - return bornDate; - } - } - - public void setBornDate(int bornDate) { - synchronized(objectMutex) { - this.bornDate = bornDate; - } - } - - public int getTotalPlayTime() { - synchronized(objectMutex) { - return totalPlayTime; - } - } - - public void setTotalPlayTime(int totalPlayTime) { - synchronized(objectMutex) { - this.totalPlayTime = totalPlayTime; - } - getContainer().notifyObservers(messageBuilder.buildTotalPlayTimeDelta(totalPlayTime), true); - } - - public String getHome() { - synchronized(objectMutex) { - return home; - } - } - - public void setHome(String home) { - synchronized(objectMutex) { - this.home = home; - } - } - - public Map getXpList() { - return xpList; } - public int getXp(String type) { - synchronized(objectMutex) { - return ((!xpList.containsKey(type)) ? 0 : xpList.get(type)); - } + public PlayerObject() { + super(); } - // Temporary - public void setXp(String type, int amount) { - boolean xpExists; - - synchronized(objectMutex) { - xpExists = xpList.containsKey(type); - xpList.put(type, amount); - } - - if (getContainer() != null && getContainer().getClient() != null && getContainer().getClient().getSession() != null) { - getContainer().getClient().getSession().write(messageBuilder.buildXPListDelta(type, amount, xpExists)); - } - } - - public int getXpListUpdateCounter() { - synchronized(objectMutex) { - return xpListUpdateCounter; - } - } - - public void setXpListUpdateCounter(int xpListUpdateCounter) { - synchronized(objectMutex) { - this.xpListUpdateCounter = xpListUpdateCounter; - } - } - - public List getWaypoints() { - return waypoints; - } - - public int getWaypointListUpdateCounter() { - synchronized(objectMutex) { - return waypointListUpdateCounter; - } - } - - public void setWaypointListUpdateCounter(int count) { - synchronized(objectMutex){ - this.waypointListUpdateCounter = count; - } - } - - public void waypointUpdate(WaypointObject waypoint) { - synchronized(objectMutex) { - getContainer().getClient().getSession().write(messageBuilder.buildWaypointUpdateDelta(waypoint)); - } - } - - public void waypointRemove(WaypointObject waypoint) { - synchronized(objectMutex) { - getContainer().getClient().getSession().write(messageBuilder.buildWaypointRemoveDelta(waypoint)); - } - } - - public void waypointAdd(WaypointObject waypoint) { - synchronized(objectMutex) { - getContainer().getClient().getSession().write(messageBuilder.buildWaypointAddDelta(waypoint)); - } - } - - public WaypointObject getWaypointFromList(WaypointObject waypoint) { - synchronized(objectMutex) { - for(WaypointObject wp : waypoints) { - if(wp.getObjectID() == waypoint.getObjectID()) - return wp; - } - } - return null; - } - - public int getCurrentForcePower() { - synchronized(objectMutex) { - return currentForcePower; - } - } - - public void setCurrentForcePower(int currentForcePower) { - synchronized(objectMutex) { - this.currentForcePower = currentForcePower; - } - } - - public int getMaxForcePower() { - synchronized(objectMutex) { - return maxForcePower; - } - } - - public void setMaxForcePower(int maxForcePower) { - synchronized(objectMutex) { - this.maxForcePower = maxForcePower; - } - } - - public List getCurrentFSQuestList() { - return currentFSQuestList; - } - - public List getCompletedFSQuestList() { - return completedFSQuestList; - } - - public List getQuestJournal() { - return questJournal; - } - - public String getProfessionWheelPosition() { - synchronized(objectMutex) { - return professionWheelPosition; - } - } - - public void setProfessionWheelPosition(String professionWheelPosition) { - synchronized(objectMutex) { - this.professionWheelPosition = professionWheelPosition; - } - } - - public int getExperimentationFlag() { - synchronized(objectMutex) { - return experimentationFlag; - } - } - - public void setExperimentationFlag(int experimentationFlag) { - synchronized(objectMutex) { - this.experimentationFlag = experimentationFlag; - } - } - - public int getCraftingStage() { - synchronized(objectMutex) { - return craftingStage; - } - } - - public void setCraftingStage(int craftingStage) { - synchronized(objectMutex) { - this.craftingStage = craftingStage; - } - } - - public long getNearestCraftingStation() { - synchronized(objectMutex) { - return nearestCraftingStation; - } - } - - public void setNearestCraftingStation(long nearestCraftingStation) { - synchronized(objectMutex) { - this.nearestCraftingStation = nearestCraftingStation; - } - } - - public List getDraftSchematicList() { - return draftSchematicList; - } - - public int getExperimentationPoints() { - synchronized(objectMutex) { - return experimentationPoints; - } - } - - public void setExperimentationPoints(int experimentationPoints) { - synchronized(objectMutex) { - this.experimentationPoints = experimentationPoints; - } - } - - public int getAccomplishmentCounter() { - synchronized(objectMutex) { - return accomplishmentCounter; - } - } - - public void setAccomplishmentCounter(int accomplishmentCounter) { - synchronized(objectMutex) { - this.accomplishmentCounter = accomplishmentCounter; - } - } - - public List getFriendList() { - return friendList; - } - - public int getFriendListUpdateCounter() { - synchronized(objectMutex) { - return friendListUpdateCounter; - } - } - - public void setFriendListUpdateCounter(int friendListUpdateCounter) { - synchronized(objectMutex) { - this.friendListUpdateCounter = friendListUpdateCounter; - } - } - - public void friendAdd(String friend) { - synchronized(objectMutex) { - setFriendListUpdateCounter(getFriendListUpdateCounter() + 1); - getContainer().getClient().getSession().write(messageBuilder.buildFriendAddDelta(friend)); - } - } - - public void friendRemove(String friend) { - synchronized(objectMutex) { - setFriendListUpdateCounter(getFriendListUpdateCounter() + 1); - getContainer().getClient().getSession().write(messageBuilder.buildFriendRemoveDelta(friend)); - } - } - - public List getIgnoreList() { - return ignoreList; - } - - public int getIgnoreListUpdateCounter() { - synchronized(objectMutex) { - return ignoreListUpdateCounter; - } - } - - public void setIgnoreListUpdateCounter(int ignoreListUpdateCounter) { - synchronized(objectMutex) { - this.ignoreListUpdateCounter = ignoreListUpdateCounter; - } - } - - - public int getLanguageId() { - synchronized(objectMutex) { - return languageId; - } - } - - public void setLanguageId(int languageId) { - synchronized(objectMutex) { - this.languageId = languageId; - } - } - - public int getCurrentStomach() { - synchronized(objectMutex) { - return currentStomach; - } - } - - public void setCurrentStomach(int currentStomach) { - synchronized(objectMutex) { - this.currentStomach = currentStomach; - } - } - - public int getMaxStomach() { - synchronized(objectMutex) { - return maxStomach; - } - } - - public void setMaxStomach(int maxStomach) { - synchronized(objectMutex) { - this.maxStomach = maxStomach; - } - } - - public int getCurrentDrink() { - synchronized(objectMutex) { - return currentDrink; - } - } - - public void setCurrentDrink(int currentDrink) { - synchronized(objectMutex) { - this.currentDrink = currentDrink; - } - } - - public int getMaxDrink() { - synchronized(objectMutex) { - return maxDrink; - } - } - - public void setMaxDrink(int maxDrink) { - synchronized(objectMutex) { - this.maxDrink = maxDrink; - } - } - - public int getCurrentConsumable() { - synchronized(objectMutex) { - return currentConsumable; - } - } - - public void setCurrentConsumable(int currentConsumable) { - synchronized(objectMutex) { - this.currentConsumable = currentConsumable; - } - } - - public int getMaxConsumable() { - synchronized(objectMutex) { - return maxConsumable; - } - } - - public void setMaxConsumable(int maxConsumable) { - synchronized(objectMutex) { - this.maxConsumable = maxConsumable; - } - } - - public int getJediState() { - synchronized(objectMutex) { - return jediState; - } - } - - public void setJediState(int jediState) { - synchronized(objectMutex) { - this.jediState = jediState; - } - } - @Override - public void sendBaselines(Client destination) { - - if(destination == null || destination.getSession() == null) - return; - - //if(destination.getParent().getObjectID() == getParentId()) { // only send to self - destination.getSession().write(messageBuilder.buildBaseline3()); - destination.getSession().write(messageBuilder.buildBaseline6()); - destination.getSession().write(messageBuilder.buildBaseline8()); - destination.getSession().write(messageBuilder.buildBaseline9()); - //} - - + public void initAfterDBLoad() { + super.init(); + lastPlayTimeUpdate = System.currentTimeMillis(); } - + + @Override + public Baseline getOtherVariables() { + Baseline baseline = super.getOtherVariables(); + baseline.put("ownedVendors", new Vector()); + baseline.put("chatChannels", new ArrayList()); + baseline.put("factionStandingMap", new TreeMap()); + baseline.put("biography", ""); + baseline.put("titleList", new ArrayList()); + baseline.put("spouse", ""); + baseline.put("bindLocation", (long) 0); + baseline.put("lotsRemaining", 10); + baseline.put("holoEmote", ""); + baseline.put("holoEmoteUses", 0); + return baseline; + } + + @Override + public Baseline getBaseline3() { + Baseline baseline = super.getBaseline3(); + List flagsList = new ArrayList(); + flagsList.add(0); + flagsList.add(0); + flagsList.add(0); + flagsList.add(0); + baseline.put("flagsList", flagsList); + List profileFlagsList = new ArrayList(); + profileFlagsList.add(0); + profileFlagsList.add(0); + profileFlagsList.add(0); + profileFlagsList.add(0); + baseline.put("profileFlagsList", profileFlagsList); + baseline.put("title", ""); + baseline.put("bornDate", (int) (System.currentTimeMillis() / 1000L)); //Integer.parseInt(new SimpleDateFormat("yyyymmdd", Locale.ENGLISH).format(Calendar.getInstance().getTime()))); + baseline.put("totalPlayTime", 0); + baseline.put("professionIcon", 0); + baseline.put("profession", "trader_0a"); + baseline.put("gcwPoints", 0); + baseline.put("pvpKills", 0); + baseline.put("lifetimeGcwPoints", (long) 0); + baseline.put("lifetimePvpKills", 0); + baseline.put("collections", new BitSet()); + baseline.put("guildRanks", new BitSet()); //"17", new SWGList(this, 3, 17, false)); // Misc ints (2 ints in tutorial, 5 bytes other times...) + baseline.put("showHelmet", true); + baseline.put("showBackpack", true); + return baseline; + } + + @Override + public Baseline getBaseline6() { + Baseline baseline = super.getBaseline6(); + baseline.put("godLevel", (byte) 0); + baseline.put("currentRank", 0); + baseline.put("rankProgress", (float) 0); + baseline.put("highestRebelRank", 0); + baseline.put("highestImperialRank", 0); + baseline.put("nextUpdateTime", 0); + baseline.put("home", ""); + baseline.put("citizenship", Citizenship.Homeless); + baseline.put("cityRegionDefender", new RegionDefender()); + baseline.put("guildRegionDefender", new RegionDefender()); + baseline.put("12", 0); // General? + baseline.put("13", 0); // Guild Rank Title? + baseline.put("14", 0); // Citizen Rank Title? + baseline.put("15", 0); // All random guesses, always seem to be 0 + baseline.put("16", 0); + return baseline; + } + + @Override + public Baseline getBaseline8() { + Baseline baseline = super.getBaseline8(); + baseline.put("xpList", new SWGMap(this, 8, 0, true)); + baseline.put("waypoints", new SWGMap(this, 8, 1, true)); + baseline.put("currentForcePower", 100); + baseline.put("maxForcePower", 100); + baseline.put("currentFSQuestList", new SWGList(this, 8, 4, false)); + baseline.put("completedFSQuestList", new SWGList(this, 8, 5, false)); + baseline.put("questJournal", new SWGList(this, 8, 6, false)); + baseline.put("7", 0); + baseline.put("professionWheelPosition", ""); + return baseline; + } + + @Override + public Baseline getBaseline9() { + Baseline baseline = super.getBaseline9(); + baseline.put("experimentationFlag", 0); + baseline.put("craftingStage", 0); + baseline.put("nearestCraftingStation", (long) 0); + baseline.put("draftSchematicList", new SWGList(this, 9, 3, true)); + baseline.put("4", new SWGList(this, 9, 4, false)); // Might or might not be a list, but at the very least it's two 0 ints that are part of the same delta. + baseline.put("experimentationPoints", 0); + baseline.put("accomplishmentCounter", 0); + baseline.put("friendList", new SWGList(this, 9, 7, false)); + baseline.put("ignoreList", new SWGList(this, 9, 8, false)); + baseline.put("languageId", 0); + baseline.put("currentStomach", 0); + baseline.put("maxStomach", 100); + baseline.put("currentDrink", 0); + baseline.put("maxDrink", 100); + baseline.put("currentConsumable", 0); + baseline.put("maxConsumable", 100); + baseline.put("waypointList", new SWGMap(this, 9, 16, false)); + baseline.put("defendersList", new SWGSet(this, 9, 17, false)); + baseline.put("kills", 0); + baseline.put("19", 0); + baseline.put("pet", (long) 0); + baseline.put("petAbilities", new SWGSet(this, 9, 15, false)); + baseline.put("22", (long) 0); // Unknown type currently + baseline.put("23", (byte) 0); // Seen as 1 or 2 sometimes // Gets set to 0x02 sometimes + baseline.put("24", 0); // Seen as 4 + baseline.put("25", (long) 0); // Bitmask starts with 0x20 ends with 0x40 + baseline.put("26", (long) 0); // Changed from 6 bytes to 9 + baseline.put("27", (byte) 0); // Changed from 6 bytes to 9 + baseline.put("28", (long) 0); // Seen as 856 + baseline.put("29", (long) 0); // Seen as 8559 + baseline.put("residenceTime", 0); // Assumption. Date format of some sort. Seen as Saturday 28th May 2011 + return baseline; + } + + @SuppressWarnings("unchecked") + public List getFlagsList() { + return (List) getBaseline(3).get("flagsList"); + } + + public void setFlagsList(int flag1, int flag2, int flag3, int flag4) { + List flagsList = getFlagsList(); + flagsList.set(0, flag1); + flagsList.set(1, flag2); + flagsList.set(2, flag3); + flagsList.set(3, flag4); + notifyClients(getBaseline(3).set("flagsList", flagsList), true); + } + + public int getFlagBitmask() { + return getFlagsList().get(0); + } + + public void setFlagBitmask(int flagBitmask) { + getFlagsList().set(0, getFlagsList().get(0) | flagBitmask); + notifyClients(getBaseline(3).set("flagsList", getFlagsList()), true); + } + + public void clearFlagBitmask(int flagBitmask) { + getFlagsList().set(0, (getFlagsList().get(0) & ~flagBitmask)); + notifyClients(getBaseline(3).set("flagsList", getFlagsList()), true); + } + + public boolean isSet(int flags) { + return ((getFlagsList().get(0) & flags) == flags); + } + + public void toggleFlag(int flag) { + if ((getFlagsList().get(0) & flag) == flag) { + clearFlagBitmask(flag); + } else { + setFlagBitmask(flag); + } + } + + @SuppressWarnings("unchecked") + public List getProfileFlagsList() { + return (List) getBaseline(3).get("profileFlagsList"); + } + + @Deprecated + public List getProfileList() { + return getProfileFlagsList(); + } + + public void setProfileFlagsList(int flag1, int flag2, int flag3, int flag4) { + List profileFlagsList = getProfileFlagsList(); + profileFlagsList.set(0, flag1); + profileFlagsList.set(1, flag2); + profileFlagsList.set(2, flag3); + profileFlagsList.set(3, flag4); + notifyClients(getBaseline(3).set("profileFlagsList", profileFlagsList), true); + } + + public String getBiography() { + return (String) otherVariables.get("biography"); + } + + public void setBiography(String biography) { + otherVariables.set("biography", biography); + } + + public String getTitle() { + return (String) getBaseline(3).get("title"); + } + + public void setTitle(String title) { + if (!getTitleList().isEmpty() && getTitleList().contains(title)) { + notifyClients(getBaseline(3).set("title", title), true); + } + } + + @SuppressWarnings("unchecked") + public List getTitleList() { + return (List) otherVariables.get("titleList"); + } + + public void setTitleList(List titleList) { + otherVariables.set("titleList", titleList); + } + + public int getBornDate() { + return (int) getBaseline(3).get("bornDate"); + } + + public void setBornDate(int bornDate) { + getBaseline(3).set("bornDate", bornDate); + } + public long getLastPlayTimeUpdate() { synchronized(objectMutex) { return lastPlayTimeUpdate; } } - + public void setLastPlayTimeUpdate(long lastPlayTimeUpdate) { synchronized(objectMutex) { this.lastPlayTimeUpdate = lastPlayTimeUpdate; } } + public int getTotalPlayTime() { + return (int) getBaseline(3).get("totalPlayTime"); + } + + public void setTotalPlayTime(int totalPlayTime) { + if (getContainer() != null && getContainer().getClient() != null) { + getContainer().getClient().getSession().write(getBaseline(3).set("totalPlayTime", totalPlayTime)); + } + } + + public int getProfessionIcon() { + return (int) getBaseline(3).get("professionIcon"); + } + + public void setProfessionIcon(int professionIcon) { + notifyClients(getBaseline(3).set("professionIcon", professionIcon), true); + } + + public String getProfession() { + return (String) getBaseline(3).get("profession"); + } + + public void setProfession(String profession) { + notifyClients(getBaseline(3).set("profession", profession), true); + setProfessionIcon(Professions.get(profession)); + } + + public int getGcwPoints() { + return (int) getBaseline(3).get("gcwPoints"); + } + + public void setGcwPoints(int gcwPoints) { + notifyClients(getBaseline(3).set("gcwPoints", gcwPoints), true); + } + + public void resetGcwPoints() { + notifyClients(getBaseline(3).set("gcwPoints", 0), true); + } + + public int getPvpKills() { + return (int) getBaseline(3).get("pvpKills"); + } + + public void addPvpKill() { + IoBuffer buffer; + + synchronized(objectMutex) { + buffer = getBaseline(3).set("pvpKills", (((int) getBaseline(3).get("pvpKills")) + 1)); + } + + notifyClients(buffer, true); + } + + public void resetPvpKills() { + notifyClients(getBaseline(3).set("pvpKills", 0), true); + } + + public long getLifetimeGcwPoints() { + return (long) getBaseline(3).get("lifetimeGcwPoints"); + } + + public void addLifetimeGcwPoints(long gcwPoints) { + IoBuffer buffer; + + synchronized(objectMutex) { + buffer = getBaseline(3).set("lifetimeGcwPoints", (((long) getBaseline(3).get("lifetimeGcwPoints")) + gcwPoints)); + } + + notifyClients(buffer, true); + } + + public int getLifetimePvpKills() { + return (int) getBaseline(3).get("lifetimePvpKills"); + } + + public void addLifetimePvpKills(int pvpKills) { + IoBuffer buffer; + + synchronized(objectMutex) { + buffer = getBaseline(3).set("lifetimePvpKills", (((int) getBaseline(3).get("lifetimePvpKills")) + pvpKills)); + } + + notifyClients(buffer, true); + } + + public byte[] getCollections() { + return ((BitSet) getBaseline(3).get("collections")).toByteArray(); + } + + public void setCollections(byte[] collections) { + getBaseline(3).set("collections", BitSet.valueOf(collections)); + } + + public int getHighestSetBit() { + return ((BitSet) getBaseline(3).get("collections")).length(); + } + + public boolean getGuildRank(int slotIndex) { + return ((BitSet) getBaseline(3).get("guildRanks")).get(slotIndex); + } + + public void toggleGuildRank(int slotIndex) { + BitSet guildRanks = (BitSet) getBaseline(3).get("guildRanks"); + guildRanks.set(slotIndex, !guildRanks.get(slotIndex)); + getBaseline(3).set("guildRanks", guildRanks); + } + + public void clearGuildRanks() { + BitSet guildRanks = (BitSet) getBaseline(3).get("guildRanks"); + guildRanks.clear(); + getBaseline(3).set("guildRanks", guildRanks); + } + + public boolean isShowingHelmet() { + return (boolean) getBaseline(3).get("showHelmet"); + } + + public void setShowHelmet(boolean showHelmet) { + notifyClients(getBaseline(3).set("showHelmet", showHelmet), true); + } + + public boolean isShowingBackpack() { + return (boolean) getBaseline(3).get("showBackpack"); + } + + public void setShowBackpack(boolean showBackpack) { + notifyClients(getBaseline(3).set("showBackpack", showBackpack), true); + } + + public byte getGodLevel() { + return (byte) getBaseline(6).get("godLevel"); + } + + public void setGodLevel(int godLevel) { + notifyClients(getBaseline(6).set("godLevel", (byte) godLevel), true); + } + + public int getCurrentRank() { + synchronized(objectMutex) { + return (int) getBaseline(6).get("currentRank"); + } + } + + public void setCurrentRank(int currentRank) { + notifyClients(getBaseline(6).set("currentRank", currentRank), true); + } + + public float getRankProgress() { + return (float) getBaseline(6).get("rankProgress"); + } + + public void setRankProgress(float rankProgress) { + notifyClients(getBaseline(6).set("rankProgress", rankProgress), true); + } + + public int getHighestRebelRank() { + return (int) getBaseline(6).get("highestRebelRank"); + } + + public void setHighestRebelRank(int highestRebelRank) { + notifyClients(getBaseline(6).set("highestRebelRank", highestRebelRank), true); + } + + public int getHighestImperialRank() { + return (int) getBaseline(6).get("highestImperialRank"); + } + + public void setHighestImperialRank(int highestImperialRank) { + notifyClients(getBaseline(6).set("highestImperialRank", highestImperialRank), true); + } + + public int getNextUpdateTime() { + return (int) getBaseline(6).get("nextUpdateTime"); + } + + public void setNextUpdateTime(int nextUpdateTime) { + notifyClients(getBaseline(6).set("nextUpdateTime", nextUpdateTime), true); + } + + public String getHome() { + return (String) getBaseline(6).get("home"); + } + + public void setHome(String home) { + notifyClients(getBaseline(6).set("home", home), true); + } + + public byte getCitizenship() { + return (byte) getBaseline(6).get("citizenship"); + } + + public void setCitizenship(byte citizenship) { + notifyClients(getBaseline(6).set("citizenship", citizenship), true); + } + + public RegionDefender getCityRegionDefender() { + return (RegionDefender) getBaseline(6).get("cityRegionDefender"); + } + + public void setCityRegionDefender(RegionDefender cityRegionDefender) { + notifyClients(getBaseline(6).set("cityRegionDefender", cityRegionDefender), true); + } + + public RegionDefender getGuildRegionDefender() { + return (RegionDefender) getBaseline(6).get("guildRegionDefender"); + } + + public void setGuildRegionDefender(RegionDefender guildRegionDefender) { + notifyClients(getBaseline(6).set("guildRegionDefender", guildRegionDefender), true); + } + + @SuppressWarnings("unchecked") + public SWGMap getXpList() { + return (SWGMap) getBaseline(8).get("xpList"); + } + + public int getXp(String type) { + return ((!getXpList().containsKey(type)) ? 0 : getXpList().get(type)); + } + + public void setXp(String type, int amount) { + getXpList().put(type, amount); + } + + @SuppressWarnings("unchecked") + public SWGMap getWaypoints() { + return (SWGMap) getBaseline(8).get("waypoints"); + } + + public void waypointUpdate(WaypointObject waypoint) { + getWaypoints().put(waypoint.getObjectID(), waypoint); + } + + public void waypointRemove(WaypointObject waypoint) { + getWaypoints().remove(waypoint.getObjectID()); + } + + public void waypointAdd(WaypointObject waypoint) { + getWaypoints().put(waypoint.getObjectID(), waypoint); + } + + public WaypointObject getWaypointFromList(WaypointObject waypoint) { + synchronized(objectMutex) { + if (getWaypoints().containsKey(waypoint.getObjectID())) { + return getWaypoints().get(waypoint.getObjectID()); + } + } + + return null; + } + + public int getCurrentForcePower() { + return (int) getBaseline(8).get("currentForcePower"); + } + + public void setCurrentForcePower(int currentForcePower) { + if (getClient() != null) { + getClient().getSession().write(getBaseline(8).set("currentForcePower", currentForcePower)); + } + } + + public int getMaxForcePower() { + return (int) getBaseline(8).get("maxForcePower"); + } + + public void setMaxForcePower(int maxForcePower) { + if (getClient() != null) { + getClient().getSession().write(getBaseline(8).set("maxForcePower", maxForcePower)); + } + } + + @SuppressWarnings("unchecked") + public SWGList getCurrentFSQuestList() { + return (SWGList) getBaseline(8).get("currentFSQuestList"); + } + + @SuppressWarnings("unchecked") + public SWGList getCompletedFSQuestList() { + return (SWGList) getBaseline(8).get("completedFSQuestList"); + } + + @SuppressWarnings("unchecked") + public SWGList getQuestJournal() { + return (SWGList) getBaseline(8).get("questJournal"); + } + + public String getProfessionWheelPosition() { + return (String) getBaseline(8).get("professionWheelPosition"); + } + + public void setProfessionWheelPosition(String professionWheelPosition) { + if (getClient() != null) { + getClient().getSession().write(getBaseline(8).set("professionWheelPosition", professionWheelPosition)); + } + } + + public int getExperimentationFlag() { + return (int) getBaseline(9).get("experimentationFlag"); + } + + public void setExperimentationFlag(int experimentationFlag) { + if (getClient() != null) { + getClient().getSession().write(getBaseline(9).set("experimentationFlag", experimentationFlag)); + } + } + + public int getCraftingStage() { + return (int) getBaseline(9).get("craftingStage"); + } + + public void setCraftingStage(int craftingStage) { + if (getClient() != null) { + getClient().getSession().write(getBaseline(9).set("craftingStage", craftingStage)); + } + } + + public long getNearestCraftingStation() { + return (long) getBaseline(9).get("nearestCraftingStation"); + } + + public void setNearestCraftingStation(long nearestCraftingStation) { + if (getClient() != null) { + getClient().getSession().write(getBaseline(9).set("nearestCraftingStation", nearestCraftingStation)); + } + } + + @SuppressWarnings("unchecked") + public SWGList getDraftSchematicList() { + return (SWGList) getBaseline(9).get("draftSchematicList"); + } + + public int getExperimentationPoints() { + return (int) getBaseline(9).get("experimentationPoints"); + } + + public void setExperimentationPoints(int experimentationPoints) { + if (getClient() != null) { + getClient().getSession().write(getBaseline(9).set("experimentationPoints", experimentationPoints)); + } + } + + public int getAccomplishmentCounter() { + return (int) getBaseline(9).get("accomplishmentCounter"); + } + + public void setAccomplishmentCounter(int accomplishmentCounter) { + if (getClient() != null) { + getClient().getSession().write(getBaseline(9).set("accomplishmentCounter", accomplishmentCounter)); + } + } + + @SuppressWarnings("unchecked") + public SWGList getFriendList() { + return (SWGList) getBaseline(9).get("friendList"); + } + + public void friendAdd(String friend) { + getFriendList().add(friend); + } + + public void friendRemove(String friend) { + getFriendList().remove(friend); + } + + @SuppressWarnings("unchecked") + public SWGList getIgnoreList() { + return (SWGList) getBaseline(9).get("ignoreList"); + } + + public void ignoreAdd(String name) { + getIgnoreList().add(name); + } + + public void ignoreRemove(String name) { + getIgnoreList().remove(name); + } + + public int getLanguageId() { + return (int) getBaseline(9).get("languageId"); + } + + public void setLanguageId(int languageId) { + if (getClient() != null) { + getClient().getSession().write(getBaseline(9).set("languageId", languageId)); + } + } + + public int getCurrentStomach() { + return (int) getBaseline(9).get("currentStomach"); + } + + public void setCurrentStomach(int currentStomach) { + if (getClient() != null) { + getClient().getSession().write(getBaseline(9).set("currentStomach", currentStomach)); + } + } + + public int getMaxStomach() { + return (int) getBaseline(9).get("maxStomach"); + } + + public void setMaxStomach(int maxStomach) { + if (getClient() != null) { + getClient().getSession().write(getBaseline(9).set("maxStomach", maxStomach)); + } + } + + public int getCurrentDrink() { + return (int) getBaseline(9).get("currentDrink"); + } + + public void setCurrentDrink(int currentDrink) { + if (getClient() != null) { + getClient().getSession().write(getBaseline(9).set("currentDrink", currentDrink)); + } + } + + public int getMaxDrink() { + return (int) getBaseline(9).get("maxDrink"); + } + + public void setMaxDrink(int maxDrink) { + if (getClient() != null) { + getClient().getSession().write(getBaseline(9).set("maxDrink", maxDrink)); + } + } + + public int getCurrentConsumable() { + return (int) getBaseline(9).get("currentConsumable"); + } + + public void setCurrentConsumable(int currentConsumable) { + if (getClient() != null) { + getClient().getSession().write(getBaseline(9).set("currentConsumable", currentConsumable)); + } + } + + public int getMaxConsumable() { + return (int) getBaseline(9).get("maxConsumable"); + } + + public void setMaxConsumable(int maxConsumable) { + if (getClient() != null) { + getClient().getSession().write(getBaseline(9).set("maxConsumable", maxConsumable)); + } + } + + @SuppressWarnings("unchecked") + public SWGSet getDefendersList() { + return (SWGSet) getBaseline(8).get("defendersList"); + } + + public int getKills() { + return (int) getBaseline(9).get("kills"); + } + + public void setKills(int kills) { + if (getClient() != null) { + getClient().getSession().write(getBaseline(9).set("kills", kills)); + } + } + + public void addKills(int kills) { + setKills(getKills() + kills); + } + + public long getPet() { + return (long) getBaseline(9).get("pet"); + } + + public void setPet(long pet) { + if (getClient() != null) { + getClient().getSession().write(getBaseline(9).set("pet", pet)); + } + } + + @SuppressWarnings("unchecked") + public SWGSet getPetAbilities() { + return (SWGSet) getBaseline(8).get("petAbilities"); + } + + public int getJediState() { + return 0; + } + + public void setJediState(int jediState) { + + } + + @SuppressWarnings("unchecked") + public Map getFactionStandingMap() { + return (Map) otherVariables.get("factionStandingMap"); + } + + public int getFactionStanding(String faction) { + synchronized(objectMutex) { + return ((getFactionStandingMap().containsKey(faction)) ? getFactionStandingMap().get(faction) : 0); + } + } + + public void setFactionStanding(String faction, int factionStanding) { + synchronized(objectMutex) { + getFactionStandingMap().put(faction, ((factionStanding < -5000) ? -5000 : ((factionStanding > 5000) ? 5000 : factionStanding))); + } + } + + public void modifyFactionStanding(String faction, int modifier) { + synchronized(objectMutex) { + int factionStanding = (((getFactionStandingMap().containsKey(faction)) ? getFactionStandingMap().get(faction) : 0) + modifier); + getFactionStandingMap().put(faction, ((factionStanding < -5000) ? -5000 : ((factionStanding > 5000) ? 5000 : factionStanding))); + } + } + + public String getSpouseName() { + return (String) otherVariables.get("spouse"); + } + + public void setSpouseName(String spouse) { + otherVariables.set("spouse", spouse); + } + + public long getBindLocation() { + return (long) otherVariables.get("bindLocation"); + } + + public void setBindLocation(long bindLocation) { + otherVariables.set("bindLocation", bindLocation); + } + + public int getLotsRemaining() { + return (int) otherVariables.get("lotsRemaining"); + } + + public void setLotsRemaining(int lotsRemaining) { + otherVariables.set("lotsRemaining", lotsRemaining); + } + + public boolean addLots(int lots) { + otherVariables.set("lotsRemaining", getLotsRemaining() + lots); + return true; + } + + public boolean deductLots(int lots) { + if (getLotsRemaining() - lots >= 0) { + setLotsRemaining(getLotsRemaining() - lots); + return true; + } + + return false; + } + + public String getHoloEmote() { + return (String) otherVariables.get("holoEmote"); + } + + public void setHoloEmote(String holoEmote) { + otherVariables.set("holoEmote", holoEmote); + } + + public int getHoloEmoteUses() { + return (int) otherVariables.get("holoEmoteUses"); + } + + public void setHoloEmoteUses(int holoEmoteUses) { + otherVariables.set("holoEmoteUses", holoEmoteUses); + } + + public WaypointObject getLastSurveyWaypoint() { + return lastSurveyWaypoint; + } + + public void setLastSurveyWaypoint(WaypointObject lastSurveyWaypoint) { + this.lastSurveyWaypoint = lastSurveyWaypoint; + } + + public SurveyTool getLastUsedSurveyTool() { + synchronized(objectMutex) { + return lastUsedSurveyTool; + } + } + + public void setLastUsedSurveyTool(SurveyTool lastUsedSurveyTool) { + synchronized(objectMutex) { + this.lastUsedSurveyTool = lastUsedSurveyTool; + } + } + + public ResourceContainerObject getRecentContainer() { + synchronized(objectMutex) { + return recentContainer; + } + } + + public void setRecentContainer(ResourceContainerObject recentContainer) { + synchronized(objectMutex) { + this.recentContainer = recentContainer; + } + } + + @SuppressWarnings("unchecked") + public List getJoinedChatChannels() { + return (List) otherVariables.get("chatChannels"); + } + + public void addChannel(int roomId) { + getJoinedChatChannels().add((Integer) roomId); + } + + public void removeChannel(Integer roomId) { + if (getJoinedChatChannels().contains(roomId)) { + getJoinedChatChannels().remove(roomId); + } + } + + public boolean isMemberOfChannel(int roomId) { + if (getJoinedChatChannels().contains(roomId)) { + return true; + } + + return false; + } + + public boolean isCallingCompanion() { + synchronized(objectMutex) { + return callingCompanion; + } + } + + public void setCallingCompanion(boolean callingCompanion) { + synchronized(objectMutex) { + this.callingCompanion = callingCompanion; + } + } + + public long getBountyMissionId() { + synchronized(objectMutex) { + return bountyMissionId; + } + } + + public void setBountyMissionId(long bountyMissionId) { + synchronized(objectMutex) { + this.bountyMissionId = bountyMissionId; + } + } + + @SuppressWarnings("unchecked") + public Vector getOwnedVendors() { + return (Vector) otherVariables.get("ownedVendors"); + } + + public void addVendor(long vendorId) { + getOwnedVendors().add(vendorId); + } + + public void removeVendor(long vendorId) { + getOwnedVendors().remove(vendorId); + } + + public int getAmountOfVendors() { + return getOwnedVendors().size(); + } + + @Override + public void notifyClients(IoBuffer buffer, boolean notifySelf) { + if (getContainer() != null) { + getContainer().notifyObservers(buffer, notifySelf); + } + } + + @Override + public PlayerMessageBuilder getMessageBuilder() { + synchronized(objectMutex) { + if (messageBuilder == null) { + messageBuilder = new PlayerMessageBuilder(this); + } + + return messageBuilder; + } + } + + @Override + public void sendBaselines(Client destination) { + if (destination != null && destination.getSession() != null) { + destination.getSession().write(getBaseline(3).getBaseline()); + destination.getSession().write(getBaseline(6).getBaseline()); + if (destination.getParent().getObjectID() == getContainer().getObjectID()) { + destination.getSession().write(getBaseline(8).getBaseline()); + destination.getSession().write(getBaseline(9).getBaseline()); + } + } + } + + @Override + public void sendListDelta(byte viewType, short updateType, IoBuffer buffer) { + switch (viewType) { + case 3: + case 6: + if (getContainer() != null) { + getContainer().notifyObservers(getBaseline(viewType).createDelta(updateType, buffer.array()), true); + } + + break; + default: + if (getContainer() != null && getContainer().getClient() != null) { + getContainer().getClient().getSession().write(getBaseline(viewType).createDelta(updateType, buffer.array())); + } + } + } + } diff --git a/src/resources/objects/resource/GalacticResource.java b/src/resources/objects/resource/GalacticResource.java new file mode 100644 index 00000000..eff19d01 --- /dev/null +++ b/src/resources/objects/resource/GalacticResource.java @@ -0,0 +1,687 @@ +/******************************************************************************* + * Copyright (c) 2013 + * + * This File is part of NGECore2. + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see . + * + * Using NGEngine to work with NGECore2 is making a combined work based on NGEngine. + * Therefore all terms and conditions of the GNU Lesser General Public License cover the combination. + ******************************************************************************/ +package resources.objects.resource; + +import java.io.Serializable; +import java.util.List; +import java.util.Random; +import java.util.Vector; + +import org.apache.mina.core.buffer.IoBuffer; + +import main.NGECore; +import protocol.swg.SurveyMapUpdateMessage; +import resources.objects.creature.CreatureObject; +import resources.objects.player.PlayerObject; +import resources.objects.waypoint.WaypointObject; + +import com.sleepycat.persist.model.Entity; +import com.sleepycat.persist.model.NotPersistent; + +import engine.clients.Client; +import engine.resources.objects.SWGObject; +import engine.resources.scene.Planet; +import engine.resources.scene.Point3D; +import engine.resources.scene.Quaternion; + +/** + * @author Charon + */ + +@Entity(version=0) +public class GalacticResource extends SWGObject implements Serializable { + + private static final long serialVersionUID = 1L; + + private String name; + private String fileName; + private String category; + private Long id; // use server highest + + private long spawnTime; + private long vanishTime; + + + @NotPersistent + public transient static final int INT_COLDRESISTANCE = 0; + @NotPersistent + public transient static final int INT_CONDUCTIVITY = 1; + @NotPersistent + public transient static final int INT_DECAYRESISTANCE = 2; + @NotPersistent + public transient static final int INT_HEATRESISTANCE = 3; + @NotPersistent + public transient static final int INT_MALLEABILITY = 4; + @NotPersistent + public transient static final int INT_SHOCKRESISTANCE = 5; + @NotPersistent + public transient static final int INT_UNITTOUGHNESS = 6; + @NotPersistent + public transient static final int INT_ENTANGLERESISTANCE = 7; + @NotPersistent + public transient static final int INT_POTENTIALENERGY = 8; + @NotPersistent + public transient static final int INT_OVERALLQUALITY = 9; + @NotPersistent + public transient static final int INT_FLAVOR = 10; + + @NotPersistent + public transient static final String[] statNamesLookup = {"Cold Resistance", + "Conductivity", + "Decay Resistance", + "Heat Resistance", + "Malleability", + "Shock Resistance", + "Unit Toughness", + "Entangle Resistance", + "Potential Energy", + "Overall Quality", + "Flavor"}; + + + private byte poolNumber; + private String stfName; + private String iffName; + private int type; + private byte generalType; + private byte containerType; + private String resourceClass; + private String getresourceType; + + //@NotPersistent + Vector galacticDepositList = new Vector(); + + //@NotPersistent + Vector spawnedPlanetIDs = new Vector(); + + short[] resourceStats = new short[11]; + + @NotPersistent + private transient static int RES_CAT_HI = 1; // Up to 99%, easy to find spots over 90% + @NotPersistent + private transient static int RES_CAT_MID = 2; // Up to 90%, often have to settle at around 80% + @NotPersistent + private transient static int RES_CAT_LO = 3; // Up to 70%, often have to settle around 60% + @NotPersistent + private transient static int RES_CAT_CRE = 4; // Creature resource + + @NotPersistent // Direct Persistence Layer entity reference restriction + private transient ResourceRoot resourceRoot; + + private int resourceRootID; // This is for re-referencing the resourceRoot in the reloaded resourceRoot collection + // due to the DPL entity reference restriction + + @NotPersistent + private transient double minDist = 99999.0; + + + public GalacticResource(){ + super(); + } + + public GalacticResource(long objectID, Planet planet, Point3D position, Quaternion orientation, String template){ + super(objectID, planet, position, orientation, template); + this.id = objectID; + } + + public GalacticResource(long id){ + this.id = id; + } + + @Override + public void initAfterDBLoad() { + init(); + } + + public GalacticResource(String name, String fileName, String category){ + this.name = name; + this.fileName = fileName; + this.category = category; + //this.type = type; + long range = 1234567L; + Random r = new Random(); + this.id = (long)(r.nextDouble()*range); + } + + public Long getId(){ + return id; + } + + public void setId(Long Id){ + this.id = Id; + } + + public String getName(){ + return name; + } + + public void setName(String name){ + this.name = name; + } + + public String getFileName(){ + return fileName; + } + + public String getCategory(){ + return category; + } + + public byte getPoolNumber(){ + return poolNumber; + } + + public void setPoolNumber(byte poolNumber){ + this.poolNumber = poolNumber; + } + + public byte getGeneralType(){ + return generalType; + } + + public void setGeneralType(byte generalType){ + this.generalType = generalType; + } + + public boolean isSpawnedOn(int planetId){ + if (spawnedPlanetIDs.contains(planetId)) + return true; + return false; + } + + public void initializeNewGalaxyResource(Vector completeResourceNameHistory){ + galacticDepositList.clear(); + + constructResourceName(completeResourceNameHistory); + generateResourceType(); + generateResourceStats(); + generatePlanetarySpawns(); + generateSpawnTimes(); + setIffFileName(resourceRoot.getResourceFileName()); + this.category = resourceRoot.getResourceClass(); + this.setGeneralType(resourceRoot.getGeneralType()); + this.setResourceRootID(resourceRoot.getResourceRootID()); // FK + //setResourceContainerTemplateID(resourceRoot.getTemplateID()); + } + + public void generateResourceType(){ +// this.setResourceType(template.getResourceType()); +// this.setResourceClass(template.getResourceClass()); + } + + public void generateResourceStats(){ + // Generate the stats randomly, considering the caps + for (int k=0;k0) + randomStatValue = (short) (resourceRoot.getResourceMinCaps()[k] + new Random().nextInt(resourceRoot.getResourceMaxCaps()[k]-resourceRoot.getResourceMinCaps()[k])); + + resourceStats[k] = randomStatValue; + } + + } + + //Better not to make this publically available + private void setResourceStats(short[] statArray){ + this.resourceStats = statArray; + } + + public short[] getResourceStats(){ + return this.resourceStats; + } + + public void setResourceRoot(ResourceRoot root){ + this.resourceRoot = root; + } + + public ResourceRoot getResourceRoot(){ + return this.resourceRoot; + } + + public void setPlanetID(int planetID){ + spawnedPlanetIDs.add(planetID); + } + + public void generateSpawnTimes(){ + long minimumTime = resourceRoot.getMinimalLifeTime(); + long maximumTime = resourceRoot.getMaximalLifeTime(); + long randomTime = new Random(maximumTime).nextLong(); + this.spawnTime = System.currentTimeMillis(); + this.vanishTime = spawnTime + minimumTime + randomTime; + } + + public int[] generateRandomPlanetArray(){ + int planets = 6 + new Random().nextInt(2); + int[] outpool = new int[planets]; + int[] pool = new int[10]; // 10 Number of SWG planets + for (int i = 0; i < 10; i++) pool[i] = i+1; + for (int i = 0; i < planets; i++) outpool[i] = i+1; + shuffleArray(pool); + for (int i = 0; i < outpool.length; i++) + { + outpool[i]=pool[i]; + } + return outpool; + } + + public void shuffleArray(int[] ar) + { + Random rnd = new Random(); + for (int i = ar.length - 1; i > 0; i--) + { + int index = rnd.nextInt(i + 1); + int a = ar[index]; + ar[index] = ar[i]; + ar[i] = a; + } + } + + public void generatePlanetarySpawns(){ + // Generate a number of planets the resource will spawn on + int[] randomPlanetArray = generateRandomPlanetArray(); + if (poolNumber!=4){ + for (int i = 0; i < randomPlanetArray.length; i++){ + if (!spawnedPlanetIDs.contains(i)){ + PlanetDeposits planetDeposits = new PlanetDeposits(); + planetDeposits.setPlanetId(randomPlanetArray[i]); + spawnedPlanetIDs.add(randomPlanetArray[i]); + planetDeposits.addDeposits(generateDepositSpawns()); + galacticDepositList.add(planetDeposits); + } + } + } else { + PlanetDeposits planetDeposits = new PlanetDeposits(); + planetDeposits.setPlanetId(getAllSpawnedPlanetIds().get(0)); + planetDeposits.addDeposits(generateDepositSpawns()); + galacticDepositList.add(planetDeposits); + } + } + + public Vector generateDepositSpawns(){ + Vector depositList = new Vector(); + + // Calculate deposit positions + Random generator = new Random(); + int depositQuantity = 8 + generator.nextInt(24); + + // datatables/clientregion -> cities + + for (int i = 0; i < depositQuantity; i++) { + ResourceDeposit deposit = new ResourceDeposit(); + generator = new Random(); // Exclude mountains at the edge of the maps + int spawnCoordsX = generator.nextInt(15000) - 7500; + int spawnCoordsZ = generator.nextInt(15000) - 7500; + // check maybe for: if (!core.terrainService.isWater(player.getPlanetId(), spawnCoordsX, spawnCoordsZ)) ? + generator = new Random(); + int spawnConcentration = 30 + generator.nextInt(70); + generator = new Random(); + int spawnRadius = 360 + generator.nextInt(1200-360); + deposit.setSpawnRadius(spawnRadius); + deposit.setSpawnConcentration(spawnConcentration); + //System.out.println("spawnConcentration " + spawnConcentration); + deposit.setSpawnCoordinatesX(spawnCoordsX); + deposit.setSpawnCoordinatesZ(spawnCoordsZ); + depositList.add(deposit); + } + return depositList; + } + + public float deliverConcentrationForSurvey(int planetId, float coordsX, float coordsY) { + float measuredOutput = 0; + for (int i = 0; i < galacticDepositList.size(); i++) { + PlanetDeposits deposits = galacticDepositList.get(i); + if (deposits.getPlanetId()==planetId){ + List depositList = deposits.getDeposits(); + for (int j=0;jmeasuredOutput) { + measuredOutput=localConcentration; + } + } + } + } + } + + if (measuredOutput<=10.0f) + return 0; + //measuredOutput=80.0f; + return measuredOutput; + } + + public Vector buildConcentrationsCollection(Point3D measurePos, GalacticResource resource, float radius,float differential, int planetId){ + float leftXCoordinate = measurePos.x - (0.5f*radius); + float topZCoordinate = measurePos.z - (0.5f*radius); + float cursorX = leftXCoordinate; + float cursorZ = topZCoordinate; + int divisions=5; + if (radius<=192.0f){ + divisions = 4; + } + if (radius<=64.0f){ + divisions = 3; + } + + Vector concentrationsCollection = new Vector(); + for (int z=0;z concentrationMap, float radius){ + + int pointsAmount = 25; + if (radius<=64.0f) { + pointsAmount=9; + } else if (radius<=128.0) { + pointsAmount = 16; + } else if (radius<=192.0f) { + pointsAmount = 16; + } else if (radius<=256.0f) { + pointsAmount = 25; + } else if (radius>=256.0f) { + pointsAmount = 25; + } + + SurveyMapUpdateMessage smuMsg = new SurveyMapUpdateMessage(concentrationMap, pointsAmount); + crafter.getClient().getSession().write(smuMsg.serialize()); + tools.CharonPacketUtils.printAnalysis(smuMsg.serialize()); + + PlayerObject player = (PlayerObject) crafter.getSlottedObject("ghost"); + if (smuMsg.getHighestConcentration() > 0.10f){ + WaypointObject lastSurveyWaypoint = player.getLastSurveyWaypoint(); + WaypointObject surveyWaypoint = null; + if (lastSurveyWaypoint==null){ + surveyWaypoint = (WaypointObject) NGECore.getInstance().objectService.createObject("object/waypoint/shared_world_waypoint_blue.iff", crafter.getPlanet(), smuMsg.getHighestX(), 0 ,smuMsg.getHighestZ()); + surveyWaypoint.setName("Survey location"); + surveyWaypoint.setPlanetCRC(engine.resources.common.CRC.StringtoCRC(crafter.getPlanet().getName())); + surveyWaypoint.setPosition(new Point3D(smuMsg.getHighestX(),0, smuMsg.getHighestZ())); + player.waypointAdd(surveyWaypoint); + surveyWaypoint.setPosition(new Point3D(smuMsg.getHighestX(),0, smuMsg.getHighestZ())); + surveyWaypoint.setActive(true); + surveyWaypoint.setColor((byte)1); + surveyWaypoint.setStringAttribute("", ""); + player.waypointAdd(surveyWaypoint); + surveyWaypoint.setName("Survey location"); + surveyWaypoint.setPlanetCRC(engine.resources.common.CRC.StringtoCRC(crafter.getPlanet().getName())); + player.setLastSurveyWaypoint(surveyWaypoint); + } else { + surveyWaypoint = lastSurveyWaypoint; + surveyWaypoint.setPosition(new Point3D(smuMsg.getHighestX(),0, smuMsg.getHighestZ())); + player.waypointUpdate(surveyWaypoint); + } + crafter.sendSystemMessage("@survey:survey_waypoint", (byte) 0); + } + } + + // Redundant just for Testing !!! + public double getHelperMinDist(){ + return minDist; + } + + public void constructResourceName(Vector completeResourceNameHistory){ + // ToDo: This is where the database check for past names must be added + boolean check=true; + while(check) + { + this.name = NAME_SYLLABLE_1[(int) new Random().nextInt(NAME_SYLLABLE_1.length-1)] + + NAME_SYLLABLE_2[(int) new Random().nextInt(NAME_SYLLABLE_2.length-1)] + + NAME_SYLLABLE_3[(int) new Random().nextInt(NAME_SYLLABLE_3.length-1)]; + check = completeResourceNameHistory.contains(this.name); + } + } + + public Vector getGalacticDepositList(){ + return galacticDepositList; + } + + public Vector getAllSpawnedPlanetIds() { + return spawnedPlanetIDs; + } + + public void setIffFileName(String iffName) { + this.iffName = iffName; + this.fileName = iffName; + } + + public String getIffFileName() { + return this.fileName; + } + +// protected String getStfFileName() { +// return stfName; +// } +// +// protected void setSffFileName(String stfName) { +// this.stfName = iffName; +// } + + public byte getContainerType() { + return containerType; + } + + public void setContainerType(byte containerType) { + this.containerType = containerType; + } + + public long getVanishTime() { + return vanishTime; + } + + public void setVanishTime(long vanishTime) { + this.vanishTime = vanishTime; + } + + @NotPersistent + public final static String[] GENERAL_TYPES = { + "resource_mineral", + "resource_chemical", + "resource_flora", + "resource_gas", + "resource_water", + "resource_solar", + "resource_wind", + "resource_geothermal", + "resource_tidal", + "resource_hydron", + "resource_bones", + "resource_hide", + "resource_meat", + "resource_milk", + "resource_JTL" + }; + + @NotPersistent + public final static byte GENERAL_MINERAL = 0; + @NotPersistent + public final static byte GENERAL_CHEMICAL = 1; + @NotPersistent + public final static byte GENERAL_FLORA = 2; + @NotPersistent + public final static byte GENERAL_GAS = 3; + @NotPersistent + public final static byte GENERAL_WATER = 4; + @NotPersistent + public final static byte GENERAL_SOLAR = 5; + @NotPersistent + public final static byte GENERAL_WIND = 6; + @NotPersistent + public final static byte GENERAL_GEOTHERM = 7; + @NotPersistent + public final static byte GENERAL_TIDAL = 8; + @NotPersistent + public final static byte GENERAL_HYDRON = 9; + @NotPersistent + public final static byte GENERAL_BONES = 10; + @NotPersistent + public final static byte GENERAL_HORN = 11; + @NotPersistent + public final static byte GENERAL_HIDE = 12; + @NotPersistent + public final static byte GENERAL_MEAT = 13; + @NotPersistent + public final static byte GENERAL_MILK = 14; + @NotPersistent + public final static byte GENERAL_JTL = 15; + + @NotPersistent + public final static String[] CONTAINER_TYPES = { + "inorganic_minerals_small", + "inorganic_chemicals_small", + "organic_food_small", + "inorganic_gas_small", + "inorganic_water_small", + "energy_liquid_small", + "energy_liquid_small", + "energy_liquid_small", + "energy_liquid_small", + "energy_liquid_small", + "organic_structure_small", + "organic_structure_small", + "organic_hide_small", + "organic_food_small", + "organic_milk_small", + "resource_JTL" + }; + + @NotPersistent + private static String[] NAME_SYLLABLE_1 = {"Zi", "Ao", "Bo", "Gox", + "Ru", "Su", "Tu", "Uu", "Vu", "Wu", "Xu", "Yu", "Zu", + "Ie", "Ce", "Ia", "Tip", "Tri", "Rel", "Xio", "Che", "Fa", "Po", + "Pae", "Doi", "Wa", "Rup", "Ovi", "Ove", "Tae", "Nao", "Lao", + "Lin", "Lex", "Loex", "Paex", "Bib", "Jaw", "Xat", "Lape", "Su", + "Sae", "Epo", "Vix", "Vu", "Ke", "Kel", "Koi", "Cix", "Pal", "Pla", + "Sor", "Lak", "Lek", "Waf", "Weg", "Ga", "Gix", "Nai", "Su", + "Aa", "Ba", "Ca", "Da", "Ea", "Fa", "Ga", "Ha", "Ia", "Ja", "Ka", + "La", "Ma", "Na", "Oa", "Pa", "Qa", "Ra", "Sa", "Ta", "Ua", "Va", + "Wa", "Xa", "Ya", "Za", "Ae", "Be", "Ce", "De", "Ee", "Fe", "Ge", + "He", "Ie", "Je", "Ke", "Le", "Me", "Ne", "Oe", "Pe", "Qe", "Re", + "Se", "Te", "Ue", "Ve", "We", "Xe", "Ye", "Ze", "Ai", "Bi", "Ci", + "Di", "Ei", "Fi", "Gi", "Hi", "Ii", "Ji", "Ki", "Li", "Mi", "Ni", + "Oi", "Pi", "Qi", "Ri", "Si", "Ti", "Ui", "Vi", "Wi", "Xi", "Yi", + "Re", "Iso", "Nab", "Co", "Do", "Eo", "Fo", "Go", "Ho", "Io", "Jo", + "Ko", "Lo", "Mo", "No", "Oo", "Po", "Qo", "Ro", "So", "To", "Uo", + "Vo", "Wo", "Xo", "Yo", "Zo", "Au", "Bu", "Cu", "Du", "Eu", "Fu", + "Or", "Ved", "Pos", "Xe", "Ex", "Sti", "Ir", "Ake", "Geh", "Fig", + "Gu", "Hu", "Iu", "Ju", "Ku", "Lu", "Mu", "Nu", "Ou", "Pu", "Qu", + "Rel", "Xio", "Ie", "Ce", "Ia", "Tip", "Tri", "Che", "Fa", "Po"}; + + @NotPersistent + private static String[] NAME_SYLLABLE_2 = {"gi", "hi", "ii", "qo", "ro", + "da", "ea", "fa", "ga", "ha", "ia", "ja", "ka", "la", "ma", "na", + "oa", "pa", "qa", "ra", "sa", "ta", "ua", "va", "wa", "xa", "ya", + "za", "ae", "be", "ce", "de", "ee", "fe", "ge", "he", "ie", "je", + "ke", "le", "me", "ne", "oe", "pe", "qe", "re", "se", "te", "ue", + "ve", "we", "xe", "ye", "ze", "ai", "bi", "ci", "di", "ei", "fi", + "uu", "vu", "wu", "xu", "yu", "zu", "mi", "ni", "oi", "pi", "qi", + "ri", "si", "ti", "ui", "vi", "wi", "xi", "yi", "zi", "ao", "bo", + "co", "do", "eo", "fo", "go", "ho", "io", "jo", "ko", "lo", "mo", + "no", "oo", "po", "so", "to", "uo", "vo", "wo", "xo", "mu", "nu", + "yo", "zo", "au", "bu", "cu", "du", "eu", "fu", "gu", "hu", "iu", + "aa", "ba", "ca", "ji", "ki", "li"}; + + @NotPersistent + private static String[] NAME_SYLLABLE_3 = {"fui", "gti", "hsi", "dwi", + "mna", "nma", "ola", "pka", "qja", "ria", "sha", "tga", "ufa", + "eve", "fue", "gte", "hse", "ire", "jqe", "kpe", "loe", "mne", + "wde", "xce", "ybe", "zae", "azi", "byi", "cxi", "dwi", "evi", + "iri", "jqi", "kpi", "loi", "mni", "nmi", "aza", "bya", "cxa", + "oli", "pki", "qji", "rii", "shi", "tgi", "ufi", "vei", "wdi", + "xci", "ybi", "zai", "azo", "byo", "cxo", "dwo", "evo", "fuo", + "dwa", "eva", "fua", "gta", "hsa", "ira", "jqa", "kpa", "loa", + "gto", "hso", "iro", "jqo", "kpo", "loo", "mno", "nmo", "olo", + "pko", "qjo", "rio", "sho", "tgo", "ufo", "veo", "wdo", "xco", + "ybo", "zao", "azu", "byu", "cxu", "dwu", "evu", "fuu", "gtu", + "nme", "ole", "pke", "qje", "rie", "she", "tge", "ufe", "vee", + "hsu", "iru", "jqu", "kpu", "lou", "mnu", "nmu", "olu", "pku", + "vea", "wda", "xca", "yba", "zaa", "aze", "bye", "cxe", "dwe", + "qju", "riu", "shu", "tgu", "ufu", "veu", "wdu", "xcu", "ybu", + "zau"}; + + + @Override + public void sendBaselines(Client arg0) { + } + + public int getResourceRootID() { + return resourceRootID; + } + + public void setResourceRootID(int resourceRootID) { + this.resourceRootID = resourceRootID; + } + + public String getResourceClass() { + return resourceClass; + } + + public void setResourceClass(String resourceClass) { + this.resourceClass = resourceClass; + } + + public String getResourceType() { + return getresourceType; + } + + public void setResourceType(String getresourceType) { + this.getresourceType = getresourceType; + } + + public GalacticResource convertToHistoricResource(){ + GalacticResource historicResource = new GalacticResource(); + historicResource.setName(this.getName()); + historicResource.setResourceClass(this.getResourceClass()); + historicResource.setResourceStats(this.getResourceStats()); + historicResource.setResourceType(this.getResourceType()); + historicResource.setGeneralType(this.getGeneralType()); + historicResource.setId(this.getId()); + historicResource.setIffFileName(this.getIffFileName()); + + return historicResource; + } + + @Override + public void sendListDelta(byte viewType, short updateType, IoBuffer buffer) { + // TODO Auto-generated method stub + + } + +} diff --git a/src/resources/objects/resource/PlanetDeposits.java b/src/resources/objects/resource/PlanetDeposits.java new file mode 100644 index 00000000..9daea331 --- /dev/null +++ b/src/resources/objects/resource/PlanetDeposits.java @@ -0,0 +1,34 @@ +package resources.objects.resource; + +import java.io.Serializable; +import java.util.List; + +import com.sleepycat.persist.model.Persistent; + +@Persistent(version=0) +public class PlanetDeposits implements Serializable { + + private static final long serialVersionUID = 1L; + private int planetId; + private List depositList; + + public PlanetDeposits(){ + + } + + public void setPlanetId(int planetId){ + this.planetId = planetId; + } + + public int getPlanetId(){ + return this.planetId; + } + + public void addDeposits(List depositList){ + this.depositList = depositList; + } + + public List getDeposits(){ + return this.depositList; + } +} diff --git a/src/resources/objects/resource/ResourceConcentration.java b/src/resources/objects/resource/ResourceConcentration.java new file mode 100644 index 00000000..c2104b9e --- /dev/null +++ b/src/resources/objects/resource/ResourceConcentration.java @@ -0,0 +1,41 @@ +package resources.objects.resource; + +public class ResourceConcentration { + private float coordsX; + private float coordsZ; + private float concentration; + + public ResourceConcentration(){ + + } + + public ResourceConcentration(float coordsX, float coordsZ, float concentration){ + this.coordsX = coordsX; + this.coordsZ = coordsZ; + this.concentration = concentration; + } + + public float getCoordsX() { + return coordsX; + } + + public void setCoordsX(float coordsX) { + this.coordsX = coordsX; + } + + public float getCoordsZ() { + return coordsZ; + } + + public void setCoordsZ(float coordsZ) { + this.coordsZ = coordsZ; + } + + public float getConcentration() { + return concentration; + } + + public void setConcentration(float concentration) { + this.concentration = concentration; + } +} diff --git a/src/resources/objects/resource/ResourceContainerMessageBuilder.java b/src/resources/objects/resource/ResourceContainerMessageBuilder.java index 7f517faa..c81e4932 100644 --- a/src/resources/objects/resource/ResourceContainerMessageBuilder.java +++ b/src/resources/objects/resource/ResourceContainerMessageBuilder.java @@ -21,6 +21,278 @@ ******************************************************************************/ package resources.objects.resource; -public class ResourceContainerMessageBuilder { +import java.nio.ByteOrder; +import java.util.Map; +import org.apache.mina.core.buffer.IoBuffer; + +import engine.resources.objects.Builder; +import resources.objects.tangible.TangibleMessageBuilder; + +public class ResourceContainerMessageBuilder extends TangibleMessageBuilder { + + public ResourceContainerMessageBuilder(ResourceContainerObject object) { + super(object); + } + + public ResourceContainerMessageBuilder() { + super(); + } + + public IoBuffer buildBaseline3() { + ResourceContainerObject resourceContainer = (ResourceContainerObject) object; + IoBuffer buffer = IoBuffer.allocate(10).order(ByteOrder.LITTLE_ENDIAN); + buffer.setAutoExpand(true); + + buffer.putShort((short)0x0F); + buffer.putFloat(1.0f); + buffer.put(getAsciiString("resource/resource_names")); + buffer.putInt(0); + buffer.put(getAsciiString(resourceContainer.getResourceFileName())); + buffer.putInt(0); + buffer.putInt(1); + buffer.putInt(0); + buffer.putInt(0); + buffer.putInt(0); + buffer.putInt(0); + buffer.putInt(0); + buffer.putShort((short)0); + buffer.putInt(0); + buffer.putInt(0); + buffer.putInt(100); //MaxCondition + buffer.put((byte)1); + buffer.putInt(resourceContainer.getStackCount()); + //result.putInt(30000); + buffer.putLong(resourceContainer.getReferenceID()); + int size = buffer.position(); + buffer = bufferPool.allocate(size, false).put(buffer.array(), 0, size); + + buffer.flip(); + buffer = createBaseline("RCNO", (byte) 3, buffer, size); + + return buffer; + } + + + public IoBuffer buildBaseline6() { + ResourceContainerObject resourceContainer = (ResourceContainerObject) object; + IoBuffer buffer = IoBuffer.allocate(10).order(ByteOrder.LITTLE_ENDIAN); + buffer.setAutoExpand(true); + String iffFileName = resourceContainer.getResourceFileName(); + String contName = resourceContainer.getResourceName(); + + buffer.putShort((short)12); //0C + buffer.putInt(0x8A); + buffer.put(getAsciiString("resource_container_d")); + buffer.putInt(0); + // buffer.put(getAsciiString("inorganic_minerals_small")); + buffer.put(getAsciiString(GalacticResource.CONTAINER_TYPES[resourceContainer.getGeneralType()])); + + //37 x 00 + buffer.putLong(0); + buffer.putLong(0); + buffer.putLong(0); + buffer.putLong(0); + buffer.putInt(0); + buffer.put((byte)0); + + buffer.putInt(ResourceContainerObject.maximalStackCapacity); + buffer.put(getAsciiString(iffFileName)); + buffer.put(getUnicodeString(contName)); + buffer.putLong(0); + int size = buffer.position(); + buffer = bufferPool.allocate(size, false).put(buffer.array(), 0, size); + + buffer.flip(); + buffer = createBaseline("RCNO", (byte) 6, buffer, size); + + return buffer; + } + + + public IoBuffer buildBaseline8() { + IoBuffer buffer = IoBuffer.allocate(10).order(ByteOrder.LITTLE_ENDIAN); + buffer.setAutoExpand(true); + + buffer.putInt(2); + buffer.putShort((short)0); + + int size = buffer.position(); + buffer = bufferPool.allocate(size, false).put(buffer.array(), 0, size); + + buffer.flip(); + buffer = createBaseline("RCNO", (byte) 8, buffer, size); + return buffer; + } + + + public IoBuffer buildBaseline9() { + ResourceContainerObject resourceContainer = (ResourceContainerObject) object; + IoBuffer buffer = IoBuffer.allocate(10).order(ByteOrder.LITTLE_ENDIAN); + buffer.setAutoExpand(true); + buffer.putShort((short)5); + buffer.putInt(0x68A75F0C); + buffer.putLong(resourceContainer.getObjectID()); + buffer.putInt(0x52434E4F); + buffer.put((byte)9); + buffer.putInt(2); + buffer.putShort((short)0); + int size = buffer.position(); + buffer = bufferPool.allocate(size, false).put(buffer.array(), 0, size); + + buffer.flip(); + buffer = createBaseline("RCNO", (byte) 9, buffer, size); + return buffer; + } + + public IoBuffer buildDelta3() { + ResourceContainerObject resourceContainer = (ResourceContainerObject) object; + IoBuffer buffer = IoBuffer.allocate(10).order(ByteOrder.LITTLE_ENDIAN); + buffer.setAutoExpand(true); + + buffer.putInt(resourceContainer.getStackCount()); + int size = buffer.position(); + buffer.flip(); + buffer = createDelta("RCNO", (byte) 3, (short) 1, (short) 0x0D, buffer, size + 4); // 0x0D differs from pre-NGE specification ! + + return buffer; + } + + // This is a specific AttributeListMessage for the resource container + // and represents no baseline or delta. + public IoBuffer serialized_buildAttributeListMessage() { + ResourceContainerObject resourceContainer = (ResourceContainerObject) object; + IoBuffer result = IoBuffer.allocate(10).order(ByteOrder.LITTLE_ENDIAN); + result.setAutoExpand(true); + result.putShort((short)5); + result.putInt(0xF3F12F2A); // ! + result.putLong(resourceContainer.getObjectID()); + result.putShort((short)0); + + int countedSize = 0; + if (resourceContainer.getColdResistance()>0) + countedSize++; + if (resourceContainer.getConductivity()>0) + countedSize++; + if (resourceContainer.getDecayResistance()>0) + countedSize++; + if (resourceContainer.getHeatResistance()>0) + countedSize++; + if (resourceContainer.getMalleability()>0) + countedSize++; + if (resourceContainer.getOverallQuality()>0) + countedSize++; + if (resourceContainer.getShockResistance()>0) + countedSize++; + if (resourceContainer.getUnitToughness()>0) + countedSize++; + if (resourceContainer.getFlavor()>0) + countedSize++; + if (resourceContainer.getEntangleResistance()>0) + countedSize++; + if (resourceContainer.getPotentialEnergy()>0) + countedSize++; + + int attributeSize = 5 + countedSize; + + result.putInt(attributeSize);//result.putInt(16); + + result.put(getAsciiString("condition")); + result.put(getUnicodeString("100/100")); + + result.put(getAsciiString("volume")); + result.put(getUnicodeString("1")); + + result.put(getAsciiString("resource_contents")); + result.put(getUnicodeString(resourceContainer.getStackCount()+"/"+ResourceContainerObject.maximalStackCapacity)); + + result.put(getAsciiString("resource_name")); + result.put(getUnicodeString(resourceContainer.getResourceName())); + + result.put(getAsciiString("resource_class")); + result.put(getUnicodeString("@resource/resource_names:" + resourceContainer.getResourceFileName())); + //result.put(getUnicodeString(resourceContainer.getResourceClass())); + + if (resourceContainer.getColdResistance()>0){ + result.put(getAsciiString("res_cold_resist")); + result.put(getUnicodeString(""+resourceContainer.getColdResistance())); + } + + if (resourceContainer.getConductivity()>0){ + result.put(getAsciiString("res_conductivity")); + result.put(getUnicodeString(""+resourceContainer.getConductivity())); + } + + if (resourceContainer.getDecayResistance()>0){ + result.put(getAsciiString("res_decay_resist")); + result.put(getUnicodeString(""+resourceContainer.getDecayResistance())); + } + + if (resourceContainer.getHeatResistance()>0){ + result.put(getAsciiString("res_heat_resist")); + result.put(getUnicodeString(""+resourceContainer.getHeatResistance())); + } + + if (resourceContainer.getMalleability()>0){ + result.put(getAsciiString("res_malleability")); + result.put(getUnicodeString(""+resourceContainer.getMalleability())); + } + + if (resourceContainer.getOverallQuality()>0){ + result.put(getAsciiString("res_quality")); + result.put(getUnicodeString(""+resourceContainer.getOverallQuality())); + } + + if (resourceContainer.getShockResistance()>0){ + result.put(getAsciiString("res_shock_resistance")); + result.put(getUnicodeString(""+resourceContainer.getShockResistance())); + } + + if (resourceContainer.getUnitToughness()>0){ + result.put(getAsciiString("res_toughness")); + result.put(getUnicodeString(""+resourceContainer.getUnitToughness())); + } + + if (resourceContainer.getFlavor()>0){ + result.put(getAsciiString("res_flavor")); + result.put(getUnicodeString(""+resourceContainer.getFlavor())); + } + + if (resourceContainer.getEntangleResistance()>0){ + result.put(getAsciiString("entangle_resistance")); + result.put(getUnicodeString(""+resourceContainer.getEntangleResistance())); + } + + if (resourceContainer.getPotentialEnergy()>0){ + result.put(getAsciiString("res_potential_energy")); + result.put(getUnicodeString(""+resourceContainer.getPotentialEnergy())); + } + + result.putInt(10); + int size = result.position(); + result.flip(); + tools.CharonPacketUtils.printAnalysis(IoBuffer.allocate(size).put(result.array(), 0, size).flip()); + return IoBuffer.allocate(size).put(result.array(), 0, size).flip(); + } + + @Override + public void buildBaseline3(Map baselineBuilders, Map deltaBuilders) { + super.buildBaseline3(baselineBuilders, deltaBuilders); + } + + @Override + public void buildBaseline6(Map baselineBuilders, Map deltaBuilders) { + super.buildBaseline6(baselineBuilders, deltaBuilders); + } + + @Override + public void buildBaseline8(Map baselineBuilders, Map deltaBuilders) { + super.buildBaseline8(baselineBuilders, deltaBuilders); + } + + @Override + public void buildBaseline9(Map baselineBuilders, Map deltaBuilders) { + super.buildBaseline9(baselineBuilders, deltaBuilders); + } + } diff --git a/src/resources/objects/resource/ResourceContainerObject.java b/src/resources/objects/resource/ResourceContainerObject.java index cea47b84..aef9ce0e 100644 --- a/src/resources/objects/resource/ResourceContainerObject.java +++ b/src/resources/objects/resource/ResourceContainerObject.java @@ -21,6 +21,546 @@ ******************************************************************************/ package resources.objects.resource; -public class ResourceContainerObject { +import java.io.Serializable; +import main.NGECore; + +import com.sleepycat.persist.model.NotPersistent; +import com.sleepycat.persist.model.Persistent; + +import engine.clients.Client; +import engine.resources.objects.SWGObject; +import engine.resources.scene.Planet; +import engine.resources.scene.Point3D; +import engine.resources.scene.Quaternion; +import resources.objects.ObjectMessageBuilder; +import resources.objects.creature.CreatureObject; +import resources.objects.tangible.TangibleObject; + +/** + * @author Charon + */ + +@Persistent(version=0) +public class ResourceContainerObject extends TangibleObject implements Serializable { + + private static final long serialVersionUID = 1L; + // Unique ID + private long containerID; + + private CreatureObject proprietor; + private String resourceType; + private String resourceClass=""; + private String resourceName; + private byte generalType; + private long referenceID; + private String iffFileName; + private String resourceFileName; + private int stackCount=0; + private byte containerType; + + // Since this can represent a resource that already despawned + // it needs to hold all resource stats: + private short coldResistance; + private short conductivity; + private short decayResistance; + private short heatResistance; + private short malleability; + private short shockResistance; + private short unitToughness; + private short entangleResistance; + private short potentialEnergy; + private short overallQuality; + private short flavor; + + /* + private static byte CONTAINER_TYPE_INORGANIC_MINERALS = 0; + private static byte CONTAINER_TYPE_INORGANIC_CHEMICALS = 1; + private static byte CONTAINER_TYPE_INORGANIC_GAS = 2; + private static byte CONTAINER_TYPE_INORGANIC_PETROCHEM_LIQUID = 3; + private static byte CONTAINER_TYPE_INORGANIC_WATER = 4; + private static byte CONTAINER_TYPE_INORGANIC_BOTTLE_WATER = 5; + private static byte CONTAINER_TYPE_ORGANIC_BEAN = 6; + private static byte CONTAINER_TYPE_ORGANIC_BOTTLE_MILK = 7; + private static byte CONTAINER_TYPE_ORGANIC_BRISTLEY_HIDE = 8; + private static byte CONTAINER_TYPE_ORGANIC_CORN = 9; + private static byte CONTAINER_TYPE_ORGANIC_FOOD = 10; + private static byte CONTAINER_TYPE_ORGANIC_FRUIT = 11; + private static byte CONTAINER_TYPE_ORGANIC_FUNGI = 12; + private static byte CONTAINER_TYPE_ORGANIC_GREEN_VEGETABLES = 13; + private static byte CONTAINER_TYPE_ORGANIC_HIDE = 14; + private static byte CONTAINER_TYPE_ORGANIC_LEATHERY_HIDE = 15; + private static byte CONTAINER_TYPE_ORGANIC_OATS = 16; + private static byte CONTAINER_TYPE_ORGANIC_RICE = 17; + private static byte CONTAINER_TYPE_ORGANIC_SCALEY_HIDE = 18; + private static byte CONTAINER_TYPE_ORGANIC_STRUCTURE = 19; + private static byte CONTAINER_TYPE_ORGANIC_TUBER = 20; + private static byte CONTAINER_TYPE_ORGANIC_WHEAT = 21; + private static byte CONTAINER_TYPE_ORGANIC_WOOLY_HIDE = 22; + private static byte CONTAINER_TYPE_ENERGY_GAS = 23; + private static byte CONTAINER_TYPE_ENERGY_LIQUID = 24; + private static byte CONTAINER_TYPE_ENERGY_RADIOACTIVE = 25; + private static byte CONTAINER_TYPE_ENERGY_SOLID = 26; + + private static String[] CONTAINER_TYPE_IFF_SIGNIFIER = new String[]{ + "object/resource_container/shared_resource_container_inorganic_minerals.iff", + "object/resource_container/shared_resource_container_inorganic_chemicals.iff", + "object/resource_container/shared_resource_container_inorganic_gas.iff", + "object/resource_container/shared_resource_container_inorganic_petrochem_liquid.iff", + "object/resource_container/shared_resource_container_inorganic_water.iff", + "object/resource_container/shared_resource_container_inorganic_bottle_water.iff", + "object/resource_container/shared_resource_container_organic_bean.iff", + "object/resource_container/shared_resource_container_organic_bottle_milk.iff", + "object/resource_container/shared_resource_container_organic_bristley_hide.iff", + "object/resource_container/shared_resource_container_organic_corn.iff", + "object/resource_container/shared_resource_container_organic_food.iff", + "object/resource_container/shared_resource_container_organic_fruit.iff", + "object/resource_container/shared_resource_container_organic_fungi.iff", + "object/resource_container/shared_resource_container_organic_green_vegetables.iff", + "object/resource_container/shared_resource_container_organic_hide.iff", + "object/resource_container/shared_resource_container_organic_leathery_hide.iff", + "object/resource_container/shared_resource_container_organic_oats.iff", + "object/resource_container/shared_resource_container_organic_rice.iff", + "object/resource_container/shared_resource_container_organic_scaley_hide.iff", + "object/resource_container/shared_resource_container_organic_structure.iff", + "object/resource_container/shared_resource_container_organic_tuber.iff", + "object/resource_container/shared_resource_container_organic_wheat.iff", + "object/resource_container/shared_resource_container_organic_wooly_hide.iff", + "object/resource_container/shared_resource_container_energy_gas.iff", + "object/resource_container/shared_resource_container_energy_liquid.iff", + "object/resource_container/shared_resource_container_energy_radioactive.iff", + "object/resource_container/shared_resource_container_energy_solid.iff" + }; + */ + + @NotPersistent + public transient static int maximalStackCapacity = 100000; + + @NotPersistent + private transient ResourceContainerMessageBuilder messageBuilder; + + public ResourceContainerObject(){ + + } + + + public ResourceContainerObject(long objectID, Planet planet, Point3D position, Quaternion orientation, String template){ + super(objectID, planet, position, orientation, template); + messageBuilder = new ResourceContainerMessageBuilder(this); + this.setAttachment("radial_filename", "resourceContainer"); + } + + @Override + public void initAfterDBLoad() { + super.init(); + messageBuilder = new ResourceContainerMessageBuilder(this); + } + + public void initializeStats(GalacticResource resource){ + this.setResourceName(resource.getName()); + this.setResourceClass(resource.getCategory()); + this.setColdResistance(resource.getResourceStats()[0]); + this.setConductivity(resource.getResourceStats()[1]); + this.setDecayResistance(resource.getResourceStats()[2]); + this.setHeatResistance(resource.getResourceStats()[3]); + this.setMalleability(resource.getResourceStats()[4]); + this.setShockResistance(resource.getResourceStats()[5]); + this.setUnitToughness(resource.getResourceStats()[6]); + this.setEntangleResistance(resource.getResourceStats()[7]); + this.setPotentialEnergy(resource.getResourceStats()[8]); + this.setOverallQuality(resource.getResourceStats()[9]); + this.setFlavor(resource.getResourceStats()[10]); + this.setResourceType(resource.getResourceType()); + this.setGeneralType(resource.getGeneralType()); + this.setReferenceID(resource.getId()); + this.setResourceFileName(resource.getIffFileName()); + //this.setIffFileName(resource.getIffFileName()); + + // set attributes + this.getAttributes().put("@obj_attr_n:condition", "100/100"); + this.getAttributes().put("@obj_attr_n:volume", "1"); + this.getAttributes().put("@obj_attr_n:resource_contents", this.getStackCount()+"/"+maximalStackCapacity); + this.getAttributes().put("@obj_attr_n:resource_name", this.getResourceName()); + this.getAttributes().put("@obj_attr_n:resource_class", "@resource/resource_names:" + this.getResourceFileName()); + + if (this.getColdResistance()>0){ + this.getAttributes().put("res_cold_resist", ""+this.getColdResistance()); + resource.getAttributes().put("res_cold_resist", ""+this.getColdResistance()); + } + + if (this.getConductivity()>0){ + this.getAttributes().put("res_conductivity", ""+this.getConductivity()); + resource.getAttributes().put("res_conductivity", ""+this.getConductivity()); + } + + if (this.getDecayResistance()>0){ + this.getAttributes().put("res_decay_resist", ""+this.getDecayResistance()); + resource.getAttributes().put("res_decay_resist", ""+this.getDecayResistance()); + } + + if (this.getHeatResistance()>0){ + this.getAttributes().put("res_heat_resist", ""+this.getHeatResistance()); + resource.getAttributes().put("res_heat_resist", ""+this.getHeatResistance()); + } + + if (this.getMalleability()>0){ + this.getAttributes().put("res_malleability", ""+this.getMalleability()); + resource.getAttributes().put("res_malleability", ""+this.getMalleability()); + } + + if (this.getOverallQuality()>0){ + this.getAttributes().put("res_quality", ""+this.getOverallQuality()); + resource.getAttributes().put("res_quality", ""+this.getOverallQuality()); + + } + + if (this.getShockResistance()>0){ + this.getAttributes().put("res_shock_resistance", ""+this.getShockResistance()); + resource.getAttributes().put("res_shock_resistance", ""+this.getShockResistance()); + } + + if (this.getUnitToughness()>0){ + this.getAttributes().put("res_toughness", ""+this.getUnitToughness()); + resource.getAttributes().put("res_toughness", ""+this.getUnitToughness()); + } + + if (this.getFlavor()>0){ + this.getAttributes().put("res_flavor", ""+this.getFlavor()); + resource.getAttributes().put("res_flavor", ""+this.getFlavor()); + } + + if (this.getEntangleResistance()>0){ + this.getAttributes().put("entangle_resistance", ""+this.getEntangleResistance()); + resource.getAttributes().put("entangle_resistance", ""+this.getEntangleResistance()); + } + + if (this.getPotentialEnergy()>0){ + this.getAttributes().put("res_potential_energy", ""+this.getPotentialEnergy()); + resource.getAttributes().put("res_potential_energy", ""+this.getPotentialEnergy()); + } + } + + public void cloneStats(ResourceContainerObject original){ + this.setResourceName(original.getResourceName()); + this.setResourceClass(original.getResourceClass()); + this.setColdResistance(original.getColdResistance()); + this.setConductivity(original.getConductivity()); + this.setDecayResistance(original.getDecayResistance()); + this.setHeatResistance(original.getHeatResistance()); + this.setMalleability(original.getMalleability()); + this.setShockResistance(original.getShockResistance()); + this.setUnitToughness(original.getUnitToughness()); + this.setEntangleResistance(original.getEntangleResistance()); + this.setPotentialEnergy(original.getPotentialEnergy()); + this.setOverallQuality(original.getOverallQuality()); + this.setFlavor(original.getFlavor()); + this.setResourceType(original.getResourceType()); + this.setGeneralType(original.getGeneralType()); + this.setReferenceID(original.getReferenceID()); + this.setResourceFileName(original.getResourceFileName()); + + // set attributes + this.getAttributes().put("@obj_attr_n:condition", "100/100"); + this.getAttributes().put("@obj_attr_n:volume", "1"); + this.getAttributes().put("@obj_attr_n:resource_contents", this.getStackCount()+"/"+maximalStackCapacity); + this.getAttributes().put("@obj_attr_n:resource_name", this.getResourceName()); + this.getAttributes().put("@obj_attr_n:resource_class", "@resource/resource_names:" + this.getResourceFileName()); + + if (this.getColdResistance()>0){ + this.getAttributes().put("res_cold_resist", ""+this.getColdResistance()); + } + + if (this.getConductivity()>0){ + this.getAttributes().put("res_conductivity", ""+this.getConductivity()); + } + + if (this.getDecayResistance()>0){ + this.getAttributes().put("res_decay_resist", ""+this.getDecayResistance()); + } + + if (this.getHeatResistance()>0){ + this.getAttributes().put("res_heat_resist", ""+this.getHeatResistance()); + } + + if (this.getMalleability()>0){ + this.getAttributes().put("res_malleability", ""+this.getMalleability()); + } + + if (this.getOverallQuality()>0){ + this.getAttributes().put("res_quality", ""+this.getOverallQuality()); + } + + if (this.getShockResistance()>0){ + this.getAttributes().put("res_shock_resistance", ""+this.getShockResistance()); + } + + if (this.getUnitToughness()>0){ + this.getAttributes().put("res_toughness", ""+this.getUnitToughness()); + } + + if (this.getFlavor()>0){ + this.getAttributes().put("res_flavor", ""+this.getFlavor()); + } + + if (this.getEntangleResistance()>0){ + this.getAttributes().put("entangle_resistance", ""+this.getEntangleResistance()); + } + + if (this.getPotentialEnergy()>0){ + this.getAttributes().put("res_potential_energy", ""+this.getPotentialEnergy()); + } + + } + + public long getContainerID() { + return containerID; + } + + public void setContainerID(long containerID) { + this.containerID = containerID; + } + + public CreatureObject getProprietor() { + return proprietor; + } + + public void setProprietor(CreatureObject proprietor) { + this.proprietor = proprietor; + } + + public String getResourceType() { + return resourceType; + } + + public void setResourceType(String resourceType) { + this.resourceType = resourceType; + } + + public int getStackCount() { + return stackCount; + } + + public void setStackCount(int stackCount,boolean isNewContainer) { + this.stackCount += stackCount; + if (isNewContainer) + this.stackCount = stackCount; + } + + public void setStackCount(int stackCount,CreatureObject owner) { + this.stackCount = stackCount; + this.getAttributes().put("@obj_attr_n:resource_contents", this.getStackCount()+"/"+maximalStackCapacity); + if (stackCount>0) + this.sendDelta3(owner.getClient()); + } + + public short getColdResistance() { + return coldResistance; + } + + public void setColdResistance(short coldResistance) { + this.coldResistance = coldResistance; + } + + public short getConductivity() { + return conductivity; + } + + public void setConductivity(short conductivity) { + this.conductivity = conductivity; + } + + public short getDecayResistance() { + return decayResistance; + } + + public void setDecayResistance(short decayResistance) { + this.decayResistance = decayResistance; + } + + public short getHeatResistance() { + return heatResistance; + } + + public void setHeatResistance(short heatResistance) { + this.heatResistance = heatResistance; + } + + public short getMalleability() { + return malleability; + } + + public void setMalleability(short malleability) { + this.malleability = malleability; + } + + public short getShockResistance() { + return shockResistance; + } + + public void setShockResistance(short shockResistance) { + this.shockResistance = shockResistance; + } + + public short getUnitToughness() { + return unitToughness; + } + + public void setUnitToughness(short unitToughness) { + this.unitToughness = unitToughness; + } + + public short getEntangleResistance() { + return entangleResistance; + } + + public void setEntangleResistance(short entangleResistance) { + this.entangleResistance = entangleResistance; + } + + public short getPotentialEnergy() { + return potentialEnergy; + } + + public void setPotentialEnergy(short potentialEnergy) { + this.potentialEnergy = potentialEnergy; + } + + public short getOverallQuality() { + return overallQuality; + } + + public void setOverallQuality(short overallQuality) { + this.overallQuality = overallQuality; + } + + public short getFlavor() { + return flavor; + } + + public void setFlavor(short flavor) { + this.flavor = flavor; + } + + public String getResourceName() { + return resourceName; + } + + public void setResourceName(String resourceName) { + this.resourceName = resourceName; + } + + public String getIffFileName() { + return iffFileName; + } + + public void setIffFileName(String iffFileName) { + this.iffFileName = iffFileName; + } + + public String getResourceClass() { + return resourceClass; + } + + public void setResourceClass(String resourceClass) { + this.resourceClass = resourceClass; + } + + public long getReferenceID() { + return referenceID; + } + + public void setReferenceID(long referenceID) { + this.referenceID = referenceID; + } + + public String getResourceFileName() { + return resourceFileName; + } + + public void setResourceFileName(String resourceFileName) { + this.resourceFileName = resourceFileName; + } + + public byte getGeneralType() { + return generalType; + } + + public void setGeneralType(byte generalType) { + this.generalType = generalType; + } + + public void setStackCount(int stackCount) { + this.stackCount = stackCount; + this.getAttributes().put("@obj_attr_n:resource_contents", this.getStackCount()+"/"+maximalStackCapacity); + this.sendDelta3(this.getProprietor().getClient()); + } + + public byte getContainerType() { + return containerType; + } + + public void setContainerType(byte containerType) { + this.containerType = containerType; + } + + public void buildAttributeListMessage(Client destination){ + destination.getSession().write(messageBuilder.serialized_buildAttributeListMessage()); + } + + public void splitContainer(CreatureObject owner,ResourceContainerObject originalObject,String commandString){ + String[] splitArray = commandString.split(" "); + if (splitArray.length<3) + return; + int cloneStackQuantity= Integer.parseInt(splitArray[0]); + int parentcontainerID= Integer.parseInt(splitArray[1]); + SWGObject objectParentContainer = (SWGObject) NGECore.getInstance().objectService.getObject(parentcontainerID); + if (objectParentContainer==null || originalObject==null) + return; + CreatureObject proprietor = originalObject.getProprietor(); + ResourceContainerObject containerObject = (ResourceContainerObject) NGECore.getInstance().objectService.createObject(originalObject.getTemplate(), proprietor.getPlanet()); + containerObject.cloneStats(originalObject); + containerObject.setProprietor(originalObject.getProprietor()); + containerObject.setStackCount(cloneStackQuantity); + originalObject.setStackCount(originalObject.getStackCount()-cloneStackQuantity); + objectParentContainer.add(containerObject); + } + + public void transferContainer(CreatureObject owner,ResourceContainerObject disposableObject,String commandString){ + String[] splitArray = commandString.split(" "); + if (splitArray.length<2) + return; + int parentcontainerID= Integer.parseInt(splitArray[0]); + int cloneStackQuantity= Integer.parseInt(splitArray[1]); + ResourceContainerObject resourceContainer = (ResourceContainerObject) NGECore.getInstance().objectService.getObject(parentcontainerID); + if (resourceContainer==null) + return; + resourceContainer.setStackCount(resourceContainer.getStackCount()+cloneStackQuantity); + SWGObject objectParentContainer = (SWGObject) NGECore.getInstance().objectService.getObject(resourceContainer.getParentId()); + objectParentContainer.remove(disposableObject); + } + + @Override + public void sendBaselines(Client destination) { + + if(destination == null || destination.getSession() == null) + return; + + destination.getSession().write(messageBuilder.buildBaseline3()); + destination.getSession().write(messageBuilder.buildBaseline6()); + destination.getSession().write(messageBuilder.buildBaseline8()); + destination.getSession().write(messageBuilder.buildBaseline9()); + } + + public void sendDelta3(Client destination) { + + if(destination == null || destination.getSession() == null) + return; + + destination.getSession().write(messageBuilder.buildDelta3()); + } + + public ObjectMessageBuilder getMessageBuilder() { + return messageBuilder; + } + } diff --git a/src/resources/objects/resource/ResourceDeposit.java b/src/resources/objects/resource/ResourceDeposit.java new file mode 100644 index 00000000..b3772f52 --- /dev/null +++ b/src/resources/objects/resource/ResourceDeposit.java @@ -0,0 +1,55 @@ +package resources.objects.resource; + +import java.io.Serializable; + +import com.sleepycat.persist.model.Persistent; + +/** + * @author Charon + */ + +@Persistent(version=0) +public class ResourceDeposit implements Serializable { + + private static final long serialVersionUID = 1L; + private float spawnCoordsX; + private float spawnCoordsZ; + private float spawnRadius; + private float spawnConcentration; + + public ResourceDeposit(){ + + } + + public void setSpawnCoordinatesX(float spawnCoordsX){ + this.spawnCoordsX = spawnCoordsX; + } + + public float getSpawnCoordinatesX(){ + return this.spawnCoordsX; + } + + public void setSpawnCoordinatesZ(float spawnCoordsZ){ + this.spawnCoordsZ = spawnCoordsZ; + } + + public float getSpawnCoordinatesZ(){ + return this.spawnCoordsZ; + } + + public void setSpawnRadius(float spawnRadius){ + this.spawnRadius = spawnRadius; + } + + public float getSpawnRadius(){ + return spawnRadius; + } + + public void setSpawnConcentration(float spawnConcentration){ + this.spawnConcentration = spawnConcentration; + } + + public float getSpawnConcentration(){ + return this.spawnConcentration; + } +} diff --git a/src/resources/objects/resource/ResourceRoot.java b/src/resources/objects/resource/ResourceRoot.java new file mode 100644 index 00000000..31d558da --- /dev/null +++ b/src/resources/objects/resource/ResourceRoot.java @@ -0,0 +1,250 @@ +/******************************************************************************* + * Copyright (c) 2013 + * + * This File is part of NGECore2. + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see . + * + * Using NGEngine to work with NGECore2 is making a combined work based on NGEngine. + * Therefore all terms and conditions of the GNU Lesser General Public License cover the combination. + ******************************************************************************/ +package resources.objects.resource; + +import java.io.Serializable; + +import com.sleepycat.je.Environment; +import com.sleepycat.je.Transaction; +import com.sleepycat.persist.model.Entity; +import com.sleepycat.persist.model.NotPersistent; +import com.sleepycat.persist.model.PrimaryKey; + +/** + * @author Charon + */ + +@Entity(version=0) +public class ResourceRoot implements Serializable { + + private static final long serialVersionUID = 1L; +// Publish 15: + +// - Total: 61, Minimum pool: 15, Random pool: 24 (3 was removed), Fixed pool: 22. +// - Possible spawns for rare non-Iron resources: 39. +// - Indoor concentrations were fixed for creature harvesting. + + +// 1) Minimum Pool (15 resources) +// +// 1 Steel not including Hardened and Crystallized from JTL +// 1 Copper not including Conductive from JTL +// 0 Iron +// 1 Aluminium not including Perovskitic from JTL +// 1 Extrusive Ore +// 1 Intrusive Ore +// 0 Siliclastic Ore not including Fermionic from JTL +// 1 Carbonate Ore +// 1 Crystalline Gemstone +// 1 Armophous Gemstone +// 1 Known Radioactive not including High Grade from JTL +// 1 Known Solid Petrochemicals +// 1 Known Liquid Petrochemicals +// 2 Polymer +// 2 Lubricating Oil +// 0 Known Inert Gas +// 0 Known Reactive Gas not including Unstable from JTL Gas +// +// +//2) Random Pool (24 resources) +// +// Any Mineral except Iron and JTL resources. +// Any Gas except JTL Gas. +// Any Chemical except Fiberplast +// Extra Water (Bonus Water in addition to the one in the Native Pool) +// +// +//3) Fixed Pool (22 resources) +// +// 8 JTL Resources (Added just before Publish 11) +// 14 Iron +// +// +//4) Native Pool (420 resources) +// +// One Fiberplast for each planet +// One Water for each planet +// One Wind Energy and One Solar Energy for each planet +// All 38 Organic types for each planet + + @NotPersistent + private transient Transaction txn; + + private static int highestID = 0; + + @PrimaryKey + private int resourceRootID; + + private String resourceClass; + private String resourceType; + private byte generalType; + private byte containerType; + private String resourceFileName; + private short[] resourceMaxCaps; + private short[] resourceMinCaps; + private Long minimalLifeTime; + private Long maximalLifeTime; +// Non-JTL Inorganics: 6 to 11 days. +// Organics: 6 to 22 days. +// JTL resources: 13 to 22 days. + + public static byte CONTAINER_TYPE_INORGANIC_MINERALS = 0; + public static byte CONTAINER_TYPE_INORGANIC_CHEMICALS = 1; + public static byte CONTAINER_TYPE_INORGANIC_GAS = 2; + public static byte CONTAINER_TYPE_INORGANIC_PETROCHEM_LIQUID = 3; + public static byte CONTAINER_TYPE_INORGANIC_WATER = 4; + public static byte CONTAINER_TYPE_INORGANIC_BOTTLE_WATER = 5; + public static byte CONTAINER_TYPE_ORGANIC_BEAN = 6; + public static byte CONTAINER_TYPE_ORGANIC_BOTTLE_MILK = 7; + public static byte CONTAINER_TYPE_ORGANIC_BRISTLEY_HIDE = 8; + public static byte CONTAINER_TYPE_ORGANIC_CORN = 9; + public static byte CONTAINER_TYPE_ORGANIC_FOOD = 10; + public static byte CONTAINER_TYPE_ORGANIC_FRUIT = 11; + public static byte CONTAINER_TYPE_ORGANIC_FUNGI = 12; + public static byte CONTAINER_TYPE_ORGANIC_GREEN_VEGETABLES = 13; + public static byte CONTAINER_TYPE_ORGANIC_HIDE = 14; + public static byte CONTAINER_TYPE_ORGANIC_LEATHERY_HIDE = 15; + public static byte CONTAINER_TYPE_ORGANIC_OATS = 16; + public static byte CONTAINER_TYPE_ORGANIC_RICE = 17; + public static byte CONTAINER_TYPE_ORGANIC_SCALEY_HIDE = 18; + public static byte CONTAINER_TYPE_ORGANIC_STRUCTURE = 19; + public static byte CONTAINER_TYPE_ORGANIC_TUBER = 20; + public static byte CONTAINER_TYPE_ORGANIC_WHEAT = 21; + public static byte CONTAINER_TYPE_ORGANIC_WOOLY_HIDE = 22; + public static byte CONTAINER_TYPE_ENERGY_GAS = 23; + public static byte CONTAINER_TYPE_ENERGY_LIQUID = 24; + public static byte CONTAINER_TYPE_ENERGY_RADIOACTIVE = 25; + public static byte CONTAINER_TYPE_ENERGY_SOLID = 26; + + public static String[] CONTAINER_TYPE_IFF_SIGNIFIER = new String[]{ + "object/resource_container/shared_resource_container_inorganic_minerals.iff", + "object/resource_container/shared_resource_container_inorganic_chemicals.iff", + "object/resource_container/shared_resource_container_inorganic_gas.iff", + "object/resource_container/shared_resource_container_inorganic_petrochem_liquid.iff", + "object/resource_container/shared_resource_container_inorganic_water.iff", + "object/resource_container/shared_resource_container_inorganic_bottle_water.iff", + "object/resource_container/shared_resource_container_organic_bean.iff", + "object/resource_container/shared_resource_container_organic_bottle_milk.iff", + "object/resource_container/shared_resource_container_organic_bristley_hide.iff", + "object/resource_container/shared_resource_container_organic_corn.iff", + "object/resource_container/shared_resource_container_organic_food.iff", + "object/resource_container/shared_resource_container_organic_fruit.iff", + "object/resource_container/shared_resource_container_organic_fungi.iff", + "object/resource_container/shared_resource_container_organic_green_vegetables.iff", + "object/resource_container/shared_resource_container_organic_hide.iff", + "object/resource_container/shared_resource_container_organic_leathery_hide.iff", + "object/resource_container/shared_resource_container_organic_oats.iff", + "object/resource_container/shared_resource_container_organic_rice.iff", + "object/resource_container/shared_resource_container_organic_scaley_hide.iff", + "object/resource_container/shared_resource_container_organic_structure.iff", + "object/resource_container/shared_resource_container_organic_tuber.iff", + "object/resource_container/shared_resource_container_organic_wheat.iff", + "object/resource_container/shared_resource_container_organic_wooly_hide.iff", + "object/resource_container/shared_resource_container_energy_gas.iff", + "object/resource_container/shared_resource_container_energy_liquid.iff", + "object/resource_container/shared_resource_container_energy_radioactive.iff", + "object/resource_container/shared_resource_container_energy_solid.iff" + }; + + + public ResourceRoot(){ + this.resourceRootID = highestID++; + resourceMinCaps = new short[11]; + resourceMaxCaps = new short[11]; + } + + public String getResourceClass() { + return resourceClass; + } + public void setResourceClass(String resourceClass) { + this.resourceClass = resourceClass; + } + public String getResourceType() { + return resourceType; + } + public void setResourceType(String resourceType) { + this.resourceType = resourceType; + } + public String getResourceFileName() { + return resourceFileName; + } + public void setResourceFileName(String resourceFileName) { + this.resourceFileName = resourceFileName; + } + public short[] getResourceMaxCaps() { + return resourceMaxCaps; + } + public void setResourceMaxCaps(short[] resourceMaxCaps) { + this.resourceMaxCaps = resourceMaxCaps; + } + public short[] getResourceMinCaps() { + return resourceMinCaps; + } + public void setResourceMinCaps(short[] resourceMinCaps) { + this.resourceMinCaps = resourceMinCaps; + } + public Long getMinimalLifeTime() { + return minimalLifeTime; + } + public void setMinimalLifeTime(Long minimalLifeTime) { + this.minimalLifeTime = minimalLifeTime; + } + public Long getMaximalLifeTime() { + return maximalLifeTime; + } + public void setMaximalLifeTime(Long maximalLifeTime) { + this.maximalLifeTime = maximalLifeTime; + } + + public byte getGeneralType(){ + return generalType; + } + + public void setgeneralType(byte generalType){ + this.generalType = generalType; + } + + public byte getContainerType() { + return containerType; + } + + public void setContainerType(byte containerType) { + this.containerType = containerType; + } + + public void setGeneralType(byte generalType) { + this.generalType = generalType; + } + + public int getResourceRootID() { + return resourceRootID; + } + + public void setResourceRootID(int resourceRootID) { + this.resourceRootID = resourceRootID; + } + + public void createTransaction(Environment env) { txn = env.beginTransaction(null, null);} + + public Transaction getTransaction() { return txn; } + +} diff --git a/src/resources/objects/ship/ShipMessageBuilder.java b/src/resources/objects/ship/ShipMessageBuilder.java index b3874e8e..5905c0f7 100644 --- a/src/resources/objects/ship/ShipMessageBuilder.java +++ b/src/resources/objects/ship/ShipMessageBuilder.java @@ -21,6 +21,39 @@ ******************************************************************************/ package resources.objects.ship; -public class ShipMessageBuilder { +import java.util.Map; +import engine.resources.objects.Builder; +import resources.objects.tangible.TangibleMessageBuilder; + +public class ShipMessageBuilder extends TangibleMessageBuilder { + + public ShipMessageBuilder(ShipObject object) { + super(object); + } + + public ShipMessageBuilder() { + super(); + } + + @Override + public void buildBaseline3(Map baselineBuilders, Map deltaBuilders) { + super.buildBaseline3(baselineBuilders, deltaBuilders); + } + + @Override + public void buildBaseline6(Map baselineBuilders, Map deltaBuilders) { + super.buildBaseline6(baselineBuilders, deltaBuilders); + } + + @Override + public void buildBaseline8(Map baselineBuilders, Map deltaBuilders) { + super.buildBaseline8(baselineBuilders, deltaBuilders); + } + + @Override + public void buildBaseline9(Map baselineBuilders, Map deltaBuilders) { + super.buildBaseline9(baselineBuilders, deltaBuilders); + } + } diff --git a/src/resources/objects/ship/ShipObject.java b/src/resources/objects/ship/ShipObject.java index b27be2fa..faeac78c 100644 --- a/src/resources/objects/ship/ShipObject.java +++ b/src/resources/objects/ship/ShipObject.java @@ -21,6 +21,24 @@ ******************************************************************************/ package resources.objects.ship; -public class ShipObject { +import java.io.Serializable; +import resources.objects.ObjectMessageBuilder; +import resources.objects.tangible.TangibleObject; + +public class ShipObject extends TangibleObject implements Serializable { + + private static final long serialVersionUID = 1L; + + private transient ObjectMessageBuilder messageBuilder = null; + + @Override + public void initAfterDBLoad() { + super.init(); + } + + public ObjectMessageBuilder getMessageBuilder() { + return messageBuilder; + } + } diff --git a/src/resources/objects/staticobject/StaticMessageBuilder.java b/src/resources/objects/staticobject/StaticMessageBuilder.java index 696954f3..c412a78d 100644 --- a/src/resources/objects/staticobject/StaticMessageBuilder.java +++ b/src/resources/objects/staticobject/StaticMessageBuilder.java @@ -21,72 +21,29 @@ ******************************************************************************/ package resources.objects.staticobject; -import java.nio.ByteOrder; - -import org.apache.mina.core.buffer.IoBuffer; +import java.util.Map; import resources.objects.ObjectMessageBuilder; +import engine.resources.objects.Builder; public class StaticMessageBuilder extends ObjectMessageBuilder { - public StaticMessageBuilder(StaticObject staticObject) { - setObject(staticObject); - } - - - public IoBuffer buildBaseline3() { - - IoBuffer buffer = bufferPool.allocate(100, false).order(ByteOrder.LITTLE_ENDIAN); - buffer.setAutoExpand(true); - - buffer.putShort((short) 4); - buffer.putInt(0); - - buffer.put(getAsciiString(object.getStfFilename())); - buffer.putInt(0); - buffer.put(getAsciiString(object.getStfName())); - buffer.putInt(0); - buffer.putInt(0xFF); - - int size = buffer.position(); - buffer = bufferPool.allocate(size, false).put(buffer.array(), 0, size); - - buffer.flip(); - buffer = createBaseline("STAO", (byte) 3, buffer, size); - - return buffer; + public StaticMessageBuilder(StaticObject object) { + super(object); } - public IoBuffer buildBaseline6() { - - IoBuffer buffer = bufferPool.allocate(100, false).order(ByteOrder.LITTLE_ENDIAN); - buffer.setAutoExpand(true); - buffer.putShort((short) 2); - buffer.putInt(0x92); - buffer.put(getAsciiString(object.getDetailFilename())); - buffer.putInt(0); - buffer.put(getAsciiString(object.getDetailName())); - - int size = buffer.position(); - buffer = bufferPool.allocate(size, false).put(buffer.array(), 0, size); - - buffer.flip(); - buffer = createBaseline("STAO", (byte) 6, buffer, size); - - return buffer; + public StaticMessageBuilder() { + super(); } - + @Override - public void sendListDelta(byte viewType, short updateType, IoBuffer buffer) { - // TODO Auto-generated method stub - + public void buildBaseline3(Map baselineBuilders, Map deltaBuilders) { + super.buildBaseline3(baselineBuilders, deltaBuilders); } - + @Override - public void sendBaselines() { - // TODO Auto-generated method stub - + public void buildBaseline6(Map baselineBuilders, Map deltaBuilders) { + super.buildBaseline6(baselineBuilders, deltaBuilders); } - - + } diff --git a/src/resources/objects/staticobject/StaticObject.java b/src/resources/objects/staticobject/StaticObject.java index 1bb2380c..1131aafd 100644 --- a/src/resources/objects/staticobject/StaticObject.java +++ b/src/resources/objects/staticobject/StaticObject.java @@ -21,43 +21,89 @@ ******************************************************************************/ package resources.objects.staticobject; -import com.sleepycat.persist.model.NotPersistent; -import com.sleepycat.persist.model.Persistent; +import java.io.Serializable; + +import org.apache.mina.core.buffer.IoBuffer; import engine.clients.Client; +import engine.resources.objects.Baseline; import engine.resources.objects.SWGObject; import engine.resources.scene.Planet; import engine.resources.scene.Point3D; import engine.resources.scene.Quaternion; -@Persistent -public class StaticObject extends SWGObject { +public class StaticObject extends SWGObject implements Serializable { + + private static final long serialVersionUID = 1L; + + private transient StaticMessageBuilder messageBuilder; - @NotPersistent - private StaticMessageBuilder messageBuilder; - - public StaticObject() { - super(); - messageBuilder = new StaticMessageBuilder(this); - } - public StaticObject(long objectID, Planet planet, Point3D position, Quaternion orientation, String Template) { super(objectID, planet, position, orientation, Template); - messageBuilder = new StaticMessageBuilder(this); } - + + public StaticObject() { + super(); + } + + @Override + public void initAfterDBLoad() { + super.init(); + } + + @Override + public Baseline getOtherVariables() { + Baseline baseline = super.getOtherVariables(); + return baseline; + } + + @Override + public Baseline getBaseline3() { + Baseline baseline = super.getBaseline3(); + return baseline; + } + + @Override + public Baseline getBaseline6() { + Baseline baseline = super.getBaseline6(); + return baseline; + } + + @Override + public void notifyClients(IoBuffer buffer, boolean notifySelf) { + notifyObservers(buffer, false); + } + + @Override + public StaticMessageBuilder getMessageBuilder() { + synchronized(objectMutex) { + if (messageBuilder == null) { + messageBuilder = new StaticMessageBuilder(this); + } + + return messageBuilder; + } + } + @Override public void sendBaselines(Client destination) { - - - if(destination == null || destination.getSession() == null) { - System.out.println("NULL destination"); - return; + if (destination != null && destination.getSession() != null) { + destination.getSession().write(getBaseline(3).getBaseline()); + destination.getSession().write(getBaseline(6).getBaseline()); + + Client parent = ((getGrandparent() == null) ? null : getGrandparent().getClient()); + + if (parent != null && destination == parent) { + destination.getSession().write(getBaseline(8).getBaseline()); + destination.getSession().write(getBaseline(9).getBaseline()); + } } - - destination.getSession().write(messageBuilder.buildBaseline3()); - destination.getSession().write(messageBuilder.buildBaseline6()); - - } + + @Override + public void sendListDelta(byte viewType, short updateType, IoBuffer buffer) { + // TODO Auto-generated method stub + + } + } diff --git a/src/resources/objects/tangible/TangibleMessageBuilder.java b/src/resources/objects/tangible/TangibleMessageBuilder.java index b15e4bbd..b6f4e4b8 100644 --- a/src/resources/objects/tangible/TangibleMessageBuilder.java +++ b/src/resources/objects/tangible/TangibleMessageBuilder.java @@ -21,118 +21,39 @@ ******************************************************************************/ package resources.objects.tangible; -import java.nio.ByteOrder; - -import org.apache.mina.core.buffer.IoBuffer; +import java.util.Map; import resources.objects.ObjectMessageBuilder; - +import engine.resources.objects.Builder; public class TangibleMessageBuilder extends ObjectMessageBuilder { - public TangibleMessageBuilder(TangibleObject tangible) { - setObject(tangible); + public TangibleMessageBuilder(TangibleObject object) { + setObject(object); } - public IoBuffer buildBaseline3() { - TangibleObject tangible = (TangibleObject) object; - IoBuffer buffer = bufferPool.allocate(100, false).order(ByteOrder.LITTLE_ENDIAN); - buffer.setAutoExpand(true); - - buffer.putShort((short) 0x0D); - buffer.putFloat(object.getComplexity()); - buffer.put(getAsciiString(object.getStfFilename())); - buffer.putInt(0); - buffer.put(getAsciiString(object.getStfName())); - - if(object.getCustomName() == null || object.getCustomName().length() < 1) - buffer.putInt(0); - else - buffer.put(getUnicodeString(object.getCustomName())); - buffer.putInt(object.getVolume()); - buffer.putInt(0); - buffer.putInt(0); // unknowns - - if(tangible.getCustomization() == null || tangible.getCustomization().length < 1) - buffer.putShort((short) 0); - else { - buffer.putShort((short) tangible.getCustomization().length); - buffer.put(tangible.getCustomization()); - } - buffer.putInt(tangible.getOptionsBitmask()); - buffer.putInt(tangible.getIncapTimer()); - buffer.putInt(tangible.getConditionDamage()); - buffer.putInt(tangible.getMaxDamage()); - buffer.putInt(0); - buffer.putInt(0x64); - buffer.put((byte) (tangible.isStaticObject() ? 1 : 0)); - - int size = buffer.position(); - buffer = bufferPool.allocate(size, false).put(buffer.array(), 0, size); - - buffer.flip(); - buffer = createBaseline("TANO", (byte) 3, buffer, size); - - return buffer; - } - - public IoBuffer buildBaseline6() { - TangibleObject tangible = (TangibleObject) object; - IoBuffer buffer = bufferPool.allocate(100, false).order(ByteOrder.LITTLE_ENDIAN); - buffer.setAutoExpand(true); - buffer.putShort((short) 8); - buffer.putInt(0x64); - buffer.put(getAsciiString(tangible.getDetailFilename())); - buffer.putInt(0); - buffer.put(getAsciiString(tangible.getDetailName())); - buffer.putLong(0); - buffer.putLong(0); - buffer.putLong(0); // unks - buffer.putLong(0); - buffer.putInt(0); - buffer.put((byte) 0); - - int size = buffer.position(); - buffer = bufferPool.allocate(size, false).put(buffer.array(), 0, size); - - buffer.flip(); - buffer = createBaseline("TANO", (byte) 6, buffer, size); - - return buffer; - } - - public IoBuffer buildBaseline8() { - IoBuffer buffer = bufferPool.allocate(2, false).order(ByteOrder.LITTLE_ENDIAN); - buffer.putShort((short) 0); - int size = buffer.position(); - buffer = IoBuffer.allocate(size).put(buffer.array(), 0, size); - buffer.flip(); - buffer = createBaseline("TANO", (byte) 8, buffer, size); - - return buffer; - } - - public IoBuffer buildBaseline9() { - IoBuffer buffer = bufferPool.allocate(2, false).order(ByteOrder.LITTLE_ENDIAN); - buffer.putShort((short) 0); - int size = buffer.position(); - buffer = IoBuffer.allocate(size).put(buffer.array(), 0, size); - buffer.flip(); - buffer = createBaseline("TANO", (byte) 9, buffer, size); - - return buffer; + public TangibleMessageBuilder() { + super(); } @Override - public void sendListDelta(byte viewType, short updateType, IoBuffer buffer) { - // TODO Auto-generated method stub - + public void buildBaseline3(Map baselineBuilders, Map deltaBuilders) { + super.buildBaseline3(baselineBuilders, deltaBuilders); } @Override - public void sendBaselines() { - // TODO Auto-generated method stub - + public void buildBaseline6(Map baselineBuilders, Map deltaBuilders) { + super.buildBaseline6(baselineBuilders, deltaBuilders); + } + + @Override + public void buildBaseline8(Map baselineBuilders, Map deltaBuilders) { + super.buildBaseline8(baselineBuilders, deltaBuilders); + } + + @Override + public void buildBaseline9(Map baselineBuilders, Map deltaBuilders) { + super.buildBaseline9(baselineBuilders, deltaBuilders); } } diff --git a/src/resources/objects/tangible/TangibleObject.java b/src/resources/objects/tangible/TangibleObject.java index 1c6eb9f7..70c5957e 100644 --- a/src/resources/objects/tangible/TangibleObject.java +++ b/src/resources/objects/tangible/TangibleObject.java @@ -21,235 +21,414 @@ ******************************************************************************/ package resources.objects.tangible; +import java.io.ByteArrayOutputStream; +import java.io.Serializable; import java.util.ArrayList; +import java.util.HashMap; +import java.util.HashSet; +import java.util.Iterator; import java.util.List; +import java.util.Map; import java.util.Set; import java.util.Vector; +import org.apache.mina.core.buffer.IoBuffer; + +import main.NGECore; import protocol.swg.ObjControllerMessage; import protocol.swg.PlayClientEffectObjectMessage; import protocol.swg.StopClientEffectObjectByLabel; +import protocol.swg.UpdatePVPStatusMessage; import protocol.swg.objectControllerObjects.ShowFlyText; - -import resources.common.RGB; +import resources.common.OutOfBand; +import resources.datatables.Options; +import resources.datatables.PvpStatus; +import resources.loot.LootGroup; +import resources.objects.ObjectMessageBuilder; +import resources.objects.SWGList; +import resources.objects.SWGSet; import resources.objects.creature.CreatureObject; - - -import com.sleepycat.persist.model.NotPersistent; -import com.sleepycat.persist.model.Persistent; - +import engine.clientdata.ClientFileManager; +import engine.clientdata.visitors.IDManagerVisitor; import engine.clients.Client; +import engine.resources.common.CRC; +import engine.resources.common.RGB; +import engine.resources.objects.Baseline; import engine.resources.objects.SWGObject; import engine.resources.scene.Planet; import engine.resources.scene.Point3D; import engine.resources.scene.Quaternion; - -@Persistent -public class TangibleObject extends SWGObject { +@SuppressWarnings("unchecked") +public class TangibleObject extends SWGObject implements Serializable { + private static final long serialVersionUID = 1L; - // TODO: Thread safety + private transient TangibleMessageBuilder messageBuilder; - protected int incapTimer = 10; - private int conditionDamage = 0; - protected int pvpBitmask = 0; - protected byte[] customization; - private List componentCustomizations = new ArrayList(); - protected int optionsBitmask = 0; - private int maxDamage = 0; - private boolean staticObject = false; - protected String faction = ""; - @NotPersistent - private Vector defendersList = new Vector(); // unused in packets but useful for the server - @NotPersistent - private TangibleMessageBuilder messageBuilder; + private Map customizationVariables = new HashMap(); + + protected transient Vector defendersList = new Vector(); + + private transient int pvpBitmask = 0; + + //private TreeSet> lootSpecification = new TreeSet>(); + private transient List lootGroups = new ArrayList(); + private transient boolean looted = false; + private transient boolean lootLock = false; + private transient boolean creditRelieved = false; + private transient boolean lootItem = false; + private transient TangibleObject killer = null; + + public TangibleObject(long objectID, Planet planet, Point3D position, Quaternion orientation, String template) { + super(objectID, planet, position, orientation, template); + if (this.getClass().getSimpleName().equals("TangibleObject")) setIntAttribute("volume", 1); + getBaseline(3).set("volume", 1); + } public TangibleObject(long objectID, Planet planet, String template) { super(objectID, planet, new Point3D(0, 0, 0), new Quaternion(1, 0, 1, 0), template); - messageBuilder = new TangibleMessageBuilder(this); - } - - public TangibleObject(long objectID, Planet planet, String template, Point3D position, Quaternion orientation) { - super(objectID, planet, position, orientation, template); - messageBuilder = new TangibleMessageBuilder(this); + if (this.getClass().getSimpleName().equals("TangibleObject")) setIntAttribute("volume", 1); + getBaseline(3).set("volume", 1); } public TangibleObject() { super(); - messageBuilder = new TangibleMessageBuilder(this); - } - - public int getIncapTimer() { - return incapTimer; - } - - public void setIncapTimer(int incapTimer) { - this.incapTimer = incapTimer; - } - - public int getConditionDamage() { - return conditionDamage; - } - - public void setConditionDamage(int conditionDamage) { - this.conditionDamage = conditionDamage; - } - - public byte[] getCustomization() { - return customization; - } - - public void setCustomization(byte[] customization) { - this.customization = customization; - } - - public List getComponentCustomizations() { - return componentCustomizations; - } - - public void setComponentCustomizations(List componentCustomizations) { - this.componentCustomizations = componentCustomizations; - } - - public int getOptionsBitmask() { - return optionsBitmask; - } - - public void setOptionsBitmask(int optionsBitmask) { - this.optionsBitmask = optionsBitmask; - } - - public int getMaxDamage() { - return maxDamage; - } - - public void setMaxDamage(int maxDamage) { - this.maxDamage = maxDamage; - } - - public boolean isStaticObject() { - return staticObject; - } - - public void setStaticObject(boolean staticObject) { - this.staticObject = staticObject; } - public int getPvPBitmask() { - synchronized(objectMutex) { - return optionsBitmask; + public void initAfterDBLoad() { + super.init(); + defendersList = new Vector(); + } + + public Baseline getOtherVariables() { + Baseline baseline = super.getOtherVariables(); + baseline.put("stackable", false); + baseline.put("noSell", false); + baseline.put("junkType", (byte) -1); + baseline.put("junkDealerPrice", 0); + return baseline; + } + + public Baseline getBaseline3() { + Baseline baseline = super.getBaseline3(); + baseline.put("faction", 0); + baseline.put("factionStatus", 0); + baseline.put("customization", new byte[] { }); + baseline.put("componentCustomizations", new SWGSet(this, 3, 7, false)); + baseline.put("optionsBitmask", 0); + baseline.put("uses", 0); + baseline.put("conditionDamage", 0); + baseline.put("maximumCondition", 100); + baseline.put("staticObject", false); + return baseline; + } + + public Baseline getBaseline6() { + Baseline baseline = super.getBaseline6(); + baseline.put("inCombat", false); + baseline.put("defendersList", new SWGSet(this, 6, 3, false)); + baseline.put("4", 0); + baseline.put("5", new SWGList(this, 6, 5, false)); + baseline.put("6", new SWGList(this, 6, 6, false)); + baseline.put("7", (long) 0); // Unknown List (HUGE structure inside) + return baseline; + } + + @Override + public Baseline getBaseline8() { + Baseline baseline = super.getBaseline8(); + return baseline; + } + + @Override + public Baseline getBaseline9() { + Baseline baseline = super.getBaseline9(); + return baseline; + } + + public String getFaction() { + return NGECore.getInstance().factionService.getName((int) getBaseline(3).get("faction")); + } + + public void setFaction(String faction) { + notifyClients(getBaseline(3).set("faction", CRC.StringtoCRC(faction)), true); + updatePvpStatus(); + } + + public int getFactionStatus() { + return (int) getBaseline(3).get("factionStatus"); + } + + public void setFactionStatus(int factionStatus) { + notifyClients(getBaseline(3).set("factionStatus", factionStatus), true); + } + + public byte[] getCustomization() { + return (byte[]) getBaseline(3).get("customization"); + } + + public void setCustomization(byte[] customization) { + notifyClients(getBaseline(3).set("customization", customization), true); + } + + public SWGSet getComponentCustomizations() { + return (SWGSet) getBaseline(3).get("componentCustomizations"); + } + + public void setComponentCustomizations(List componentCustomizations) { + getComponentCustomizations().clear(); + getComponentCustomizations().addAll(componentCustomizations); + } + + public Byte getCustomizationVariable(String type) { + if (customizationVariables.containsKey(type)) { + return customizationVariables.get(type); + } else { + System.err.println("Error: object doesn't have customization variable " + type); + } + + return null; + } + + public void setCustomizationVariable(String type, byte value) { + if (customizationVariables.containsKey(type)) { + customizationVariables.replace(type, value); + } else { + customizationVariables.put(type, value); + } + + setCustomization(getCustomizationBytes()); + } + + public void removeCustomizationVariable(String type) { + if (customizationVariables.containsKey(type)) { + customizationVariables.remove(type); + setCustomization(getCustomizationBytes()); } } - - public void setPvPBitmask(int pvpBitmask) { + + private byte[] getCustomizationBytes() { + ByteArrayOutputStream stream = new ByteArrayOutputStream(); + + try { + IDManagerVisitor visitor = ClientFileManager.loadFile("customization/customization_id_manager.iff", IDManagerVisitor.class); + + stream.write((byte) 0x02); // Unk + stream.write((byte) customizationVariables.size()); // Number of customization attributes + + for (String type : customizationVariables.keySet()) { + stream.write(visitor.getAttributeIndex(type)); // Index of palette type within "customization/customization_id_manager.iff" + stream.write(customizationVariables.get(type)); // Value/Index within palette + + // Seperator/Footer + stream.write((byte) 0xC3); + stream.write((byte) 0xBF); + stream.write((byte) 0x03); + } + + return stream.toByteArray(); + } catch (Exception e) { + e.printStackTrace(); + } + + return null; + } + + public int getOptionsBitmask() { + return (int) getBaseline(3).get("optionsBitmask"); + } + + public void setOptionsBitmask(int optionsBitmask) { + notifyClients(getBaseline(3).set("optionsBitmask", optionsBitmask), true); + } + + public void setOptions(int options, boolean add) { + if (options != 0) { + if (add) { + setOptionsBitmask(getOptionsBitmask() | options); + } else { + setOptionsBitmask(getOptionsBitmask() & ~options);; + } + } + } + + public boolean getOption(int option) { + return ((getOptionsBitmask() & option) == option); + } + + public int getUses() { + return (int) getBaseline(3).get("uses"); + } + + public void setUses(int uses) { + notifyClients(getBaseline(3).set("uses", uses), true); + setIntAttribute("count", uses); + } + + public int getIncapTimer() { + return getUses(); + } + + public void setIncapTimer(int incapTimer) { + notifyClients(getBaseline(3).set("uses", incapTimer), true); + } + + public int getConditionDamage() { + return (int) getBaseline(3).get("conditionDamage"); + } + + public void setConditionDamage(int conditionDamage) { + int maximumCondition = getMaximumCondition(); + + if (conditionDamage < 0) { + conditionDamage = 0; + } else if (conditionDamage > maximumCondition) { + conditionDamage = maximumCondition; + } + + notifyClients(getBaseline(3).set("conditionDamage", conditionDamage), true); + + if (getMaximumCondition() > 0) { + setStringAttribute("condition", (maximumCondition + "/" + (maximumCondition - conditionDamage))); + } + } + + public int getMaximumCondition() { + return (int) getBaseline(3).get("maximumCondition"); + } + + public void setMaximumCondition(int maximumCondition) { + notifyClients(getBaseline(3).set("maximumCondition", maximumCondition), true); + setStringAttribute("condition", (maximumCondition + "/" + (maximumCondition - getConditionDamage()))); + } + + public boolean isStaticObject() { + return (boolean) getBaseline(3).get("staticObject"); + } + + public void setStaticObject(boolean staticObject) { + notifyClients(getBaseline(3).set("staticObject", staticObject), true); + } + + public boolean isInCombat() { + return (boolean) getBaseline(6).get("inCombat"); + } + + public void setInCombat(boolean inCombat) { + notifyClients(getBaseline(6).set("inCombat", inCombat), true); + } + + // All objects can be in combat (terminal mission flag bases, tutorial target box) + + public List getDefendersList() { + synchronized(objectMutex) { + return defendersList; + } + } + + public void addDefender(TangibleObject defender) { + defendersList.add(defender); + + if (!isInCombat()) { + setInCombat(true); + } + } + + public void removeDefender(TangibleObject defender) { + defendersList.remove(defender); + + if (defendersList.isEmpty() && isInCombat()) { + setInCombat(false); + } + } + + public int getPvpBitmask() { + synchronized(objectMutex) { + return pvpBitmask; + } + } + + public void setPvpBitmask(int pvpBitmask) { synchronized(objectMutex) { this.pvpBitmask = pvpBitmask; } } - public String getFaction() { + + public boolean getPvpStatus(int pvpStatus) { synchronized(objectMutex) { - return faction; + return ((pvpBitmask & pvpStatus) != 0); } } - public void setFaction(String faction) { + public void setPvpStatus(int pvpBitmask, boolean add) { synchronized(objectMutex) { - this.faction = faction; + if (pvpBitmask != 0) { + if (add) { + this.pvpBitmask |= pvpBitmask; + } else { + this.pvpBitmask &= ~pvpBitmask; + } + } } } + + public void updatePvpStatus() { + HashSet observers = new HashSet(getObservers()); + + for (Iterator it = observers.iterator(); it.hasNext();) { + Client observer = it.next(); + + if (observer.getParent() != null) { + observer.getSession().write(new UpdatePVPStatusMessage(this.getObjectID(), NGECore.getInstance().factionService.calculatePvpStatus((CreatureObject) observer.getParent(), this), getFaction()).serialize()); + if(getClient() != null) + getClient().getSession().write(new UpdatePVPStatusMessage(observer.getParent().getObjectID(), NGECore.getInstance().factionService.calculatePvpStatus((CreatureObject) this, (CreatureObject) observer.getParent()), getFaction()).serialize()); + } - public Vector getDefendersList() { - return defendersList; - } - - public void addDefender(TangibleObject defender) { - - defendersList.add(defender); - - if(this instanceof CreatureObject) { - CreatureObject creature = (CreatureObject) this; - - if(creature.getCombatFlag() == 0) - creature.setCombatFlag((byte) 1); } - } - - public void removeDefender(TangibleObject defender) { - - defendersList.remove(defender); - - if(this instanceof CreatureObject) { - CreatureObject creature = (CreatureObject) this; + if (getClient() != null) { + CreatureObject companion = NGECore.getInstance().mountService.getCompanion((CreatureObject) this); - if(creature.getCombatFlag() == 1 && defendersList.isEmpty()) - creature.setCombatFlag((byte) 0); + if (companion != null) { + companion.updatePvpStatus(); + } } - } public boolean isAttackableBy(CreatureObject attacker) { - - CreatureObject creature; - - if(this instanceof CreatureObject) { - creature = (CreatureObject) this; - if(creature.getDuelList().contains(attacker) && attacker.getDuelList().contains(this)) - return true; + int pvpStatus = NGECore.getInstance().factionService.calculatePvpStatus(attacker, this); + return (((pvpStatus & PvpStatus.Attackable) == PvpStatus.Attackable) || ((pvpStatus & PvpStatus.Aggressive) == PvpStatus.Aggressive)); + } + + public void showFlyText(OutOfBand outOfBand, float scale, RGB color, int displayType, boolean notifyObservers) { + showFlyText("", outOfBand, scale, color, displayType, notifyObservers); + } + + public void showFlyText(String stf, float scale, RGB color, int displayType, boolean notifyObservers) { + showFlyText(stf, new OutOfBand(), scale, color, displayType, notifyObservers); + } + + public void showFlyText(String stf, OutOfBand outOfBand, float scale, RGB color, int displayType, boolean notifyObservers) { + if (outOfBand == null) { + outOfBand = new OutOfBand(); } - if(faction.equals("rebel") && attacker.getFaction().equals("rebel")) - return false; - else if(faction.equals("imperial") && attacker.getFaction().equals("imperial")) - return false; - else if(attacker.getSlottedObject("ghost") != null) { + if (color == null) { + color = new RGB(255, 255, 255); + } + + if (getClient() != null) { + getClient().getSession().write((new ObjControllerMessage(0x0000000B, new ShowFlyText(getObjectID(), getObjectID(), stf, outOfBand, scale, color, displayType))).serialize()); + } + + if (notifyObservers) { + Set observers = getObservers(); - if(this instanceof CreatureObject && getSlottedObject("ghost") != null) { - - creature = (CreatureObject) this; - - if(creature.getFactionStatus() == 2 && attacker.getFactionStatus() == 2) - return true; - else - return false; - + for (Client client : observers) { + client.getSession().write((new ObjControllerMessage(0x0000000B, new ShowFlyText(client.getParent().getObjectID(), getObjectID(), stf, outOfBand, scale, color, displayType))).serialize()); } - - if((faction.equals("rebel") || faction.equals("imperial")) && attacker.getFactionStatus() >= 1) - return true; - else if((faction.equals("rebel") || faction.equals("imperial")) && attacker.getFactionStatus() == 0) - return false; - - return getPvPBitmask() == 1 || getPvPBitmask() == 2; - - } - - return getPvPBitmask() == 1 || getPvPBitmask() == 2; - } - - public void showFlyText(String stfFile, String stfString, float scale, RGB color, int displayType) { - Set observers = getObservers(); - - if (getClient() != null) { - getClient().getSession().write((new ObjControllerMessage(0x0000000B, new ShowFlyText(getObjectID(), getObjectID(), stfFile, stfString, scale, color, displayType))).serialize()); - } - - for (Client client : observers) { - client.getSession().write((new ObjControllerMessage(0x0000000B, new ShowFlyText(client.getParent().getObjectID(), getObjectID(), stfFile, stfString, scale, color, displayType))).serialize()); - } - } - - public void showFlyText(String stfFile, String stfString, int xp, float scale, RGB color, int displayType) { - Set observers = getObservers(); - - if (getClient() != null) { - getClient().getSession().write((new ObjControllerMessage(0x0000000B, new ShowFlyText(getObjectID(), getObjectID(), 56, 1, 1, -1, stfFile, stfString, xp, scale, color, displayType))).serialize()); - } - - for (Client client : observers) { - client.getSession().write((new ObjControllerMessage(0x0000000B, new ShowFlyText(client.getParent().getObjectID(), getObjectID(), 56, 1, 1, -1, stfFile, stfString, xp, scale, color, displayType))).serialize()); } } @@ -261,21 +440,228 @@ public class TangibleObject extends SWGObject { notifyObservers(new StopClientEffectObjectByLabel(getObjectID(), commandString), true); } - @Override - public void sendBaselines(Client destination) { - - - if(destination == null || destination.getSession() == null) { - System.out.println("NULL destination"); - return; - } - - destination.getSession().write(messageBuilder.buildBaseline3()); - destination.getSession().write(messageBuilder.buildBaseline6()); - destination.getSession().write(messageBuilder.buildBaseline8()); - destination.getSession().write(messageBuilder.buildBaseline9()); - + public String getSerialNumber() { + return getStringAttribute("serial_number"); + } + public void setSerialNumber(String serialNumber) { + setStringAttribute("serial_number", serialNumber); + setOptions(Options.SERIAL, true); } + public TangibleObject getKiller() { + synchronized(objectMutex) { + return killer; + } + } + + public void setKiller(TangibleObject killer) { + synchronized(objectMutex) { + this.killer = killer; + } + } + + public List getLootGroups() { + synchronized(objectMutex) { + return lootGroups; + } + } + + public void setLootGroups(List lootGroups) { + synchronized(objectMutex) { + this.lootGroups = lootGroups; + } + } + + public void addToLootGroups(String[] lootPoolNames, double[] lootPoolChances, double lootGroupChance) { + synchronized(objectMutex) { + //System.out.println("lootPoolNames[0] " + lootPoolNames[0]); + LootGroup lootGroup = new LootGroup(lootPoolNames, lootPoolChances, lootGroupChance); + lootGroups.add(lootGroup); + } + } + + public void addToLootGroups(LootGroup lootGroup) { + synchronized(objectMutex) { + lootGroups.add(lootGroup); + } + } + + public boolean isLooted() { + synchronized(objectMutex) { + return looted; + } + } + + public void setLooted(boolean looted) { + synchronized(objectMutex) { + this.looted = looted; + } + } + + public boolean isLootLock() { + synchronized(objectMutex) { + return lootLock; + } + } + + public void setLootLock(boolean lootLock) { + synchronized(objectMutex) { + this.lootLock = lootLock; + } + } + + public boolean isLootItem() { + synchronized(objectMutex) { + return lootItem; + } + } + + public void setLootItem(boolean lootItem) { + synchronized(objectMutex) { + this.lootItem = lootItem; + } + } + + public boolean isStackable() { + return (boolean) otherVariables.get("stackable"); + } + + public void setStackable(boolean stackable) { + otherVariables.set("stackable", stackable); + } + + public boolean isNoSell() { + return (boolean) otherVariables.get("noSell"); + } + + public void setNoSell(boolean noSell) { + otherVariables.set("noSell", noSell); + } + + public byte getJunkType() { + return (byte) otherVariables.get("junkType"); + } + + public void setJunkType(byte junkType) { + otherVariables.set("junkType", junkType); + } + + public int getJunkDealerPrice() { + return (int) otherVariables.get("junkDealerPrice"); + } + + public void setJunkDealerPrice(int junkDealerPrice) { + otherVariables.set("junkDealerPrice", junkDealerPrice); + } + + public boolean isCreditRelieved() { + synchronized(objectMutex) { + return creditRelieved; + } + } + + public void setCreditRelieved(boolean creditRelieved) { + synchronized(objectMutex) { + if (creditRelieved) { + this.creditRelieved = creditRelieved; // only allow one state change to prevent hacking + } + } + } + + public boolean isFull() { + if (getTemplateData().getAttribute("containerVolumeLimit") == null) + return false; + + int containerVolumeLimit = (int) getTemplateData().getAttribute("containerVolumeLimit") >> 8; // Shifting because it seems to be returning an extra byte before it should + + if (containerVolumeLimit == 0 || getTemplate() == "object/tangible/inventory/shared_appearance_inventory.iff") // appearance inventory - issue #755 + return false; + + + if (NGECore.getInstance().objectService.objsInContainer(this, this) >= containerVolumeLimit) + return true; + + return false; + } + + public void notifyClients(IoBuffer buffer, boolean notifySelf) { + notifyObservers(buffer, false); + } + + public ObjectMessageBuilder getMessageBuilder() { + synchronized(objectMutex) { + if (messageBuilder == null) { + messageBuilder = new TangibleMessageBuilder(this); + } + + return messageBuilder; + } + } + + public void sendBaselines(Client destination) { + if (destination != null && destination.getSession() != null) { + destination.getSession().write(getBaseline(3).getBaseline()); + destination.getSession().write(getBaseline(6).getBaseline()); + + Client parent = ((getGrandparent() == null) ? null : getGrandparent().getClient()); + + if (parent != null && destination == parent) { + destination.getSession().write(getBaseline(8).getBaseline()); + destination.getSession().write(getBaseline(9).getBaseline()); + } + + if (destination.getParent() != this) { + UpdatePVPStatusMessage upvpm = new UpdatePVPStatusMessage(getObjectID()); + upvpm.setFaction(CRC.StringtoCRC(getFaction())); + upvpm.setStatus(NGECore.getInstance().factionService.calculatePvpStatus((CreatureObject) destination.getParent(), this)); + destination.getSession().write(upvpm.serialize()); + } + } + } + + public void sendListDelta(byte viewType, short updateType, IoBuffer buffer) { + switch (viewType) { + case 3: + { + switch (updateType) { + case 7: + { + buffer = getBaseline(3).createDelta(7, buffer.array()); + notifyClients(buffer, true); + break; + } + } + } + } + } + + @Deprecated public void setCustomName2(String customName) { setCustomName(customName); } + + @Deprecated public void sendDelta3(Client destination) { setOptions(Options.SERIAL | Options.INVULNERABLE, true); } + + @Deprecated public void sendAssemblyDelta3(Client destination) { setMaximumCondition(1000); } + + @Deprecated public void sendCustomizationDelta3(Client destination, String enteredName){ setCustomName(enteredName); } + + @Deprecated public void addOption(int option) { setOptionsBitmask(getOptionsBitmask() | option); } + + @Deprecated public void removeOption(int option) { setOptionsBitmask(getOptionsBitmask() & ~option); } + + @Deprecated public int getMaxDamage() { return getMaximumCondition(); } + + @Deprecated public void setMaxDamage(int maxDamage) { setMaximumCondition(maxDamage); } + + @Deprecated public byte getCombatFlag() { return (byte) ((isInCombat()) ? 1 : 0); } //Baseline.getBoolean(isInCombat()); } + + @Deprecated public void setCombatFlag(byte combatFlag) { setInCombat(combatFlag > 0); } //setInCombat(Baseline.getBoolean(combatFlag)); } + + @Deprecated public int getPvPBitmask() { return getPvpBitmask(); } + + @Deprecated public void setPvPBitmask(int pvpBitmask) { setPvpBitmask(pvpBitmask); } + + @Deprecated public int getStackCount() { if (getUses() == 0) setUses(1); return getUses(); } + + @Deprecated public void setStackCount(int stackCount) { setUses(stackCount); } + } diff --git a/src/resources/objects/universe/UniverseMessageBuilder.java b/src/resources/objects/universe/UniverseMessageBuilder.java new file mode 100644 index 00000000..f0c72079 --- /dev/null +++ b/src/resources/objects/universe/UniverseMessageBuilder.java @@ -0,0 +1,36 @@ +/******************************************************************************* + * Copyright (c) 2013 + * + * This File is part of NGECore2. + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see . + * + * Using NGEngine to work with NGECore2 is making a combined work based on NGEngine. + * Therefore all terms and conditions of the GNU Lesser General Public License cover the combination. + ******************************************************************************/ +package resources.objects.universe; + +import resources.objects.ObjectMessageBuilder; + +public class UniverseMessageBuilder extends ObjectMessageBuilder { + + public UniverseMessageBuilder(UniverseObject object) { + super(object); + } + + public UniverseMessageBuilder() { + super(); + } + +} diff --git a/src/resources/objects/universe/UniverseObject.java b/src/resources/objects/universe/UniverseObject.java new file mode 100644 index 00000000..021abff6 --- /dev/null +++ b/src/resources/objects/universe/UniverseObject.java @@ -0,0 +1,87 @@ +/******************************************************************************* + * Copyright (c) 2013 + * + * This File is part of NGECore2. + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see . + * + * Using NGEngine to work with NGECore2 is making a combined work based on NGEngine. + * Therefore all terms and conditions of the GNU Lesser General Public License cover the combination. + ******************************************************************************/ +package resources.objects.universe; + +import java.io.Serializable; + +import org.apache.mina.core.buffer.IoBuffer; + +import resources.objects.ObjectMessageBuilder; + +import engine.clients.Client; +import engine.resources.objects.Baseline; +import engine.resources.objects.SWGObject; +import engine.resources.scene.Planet; +import engine.resources.scene.Point3D; +import engine.resources.scene.Quaternion; + +public class UniverseObject extends SWGObject implements Serializable { + + private static final long serialVersionUID = 1L; + private transient UniverseMessageBuilder messageBuilder = null; + + public UniverseObject(long objectID, Planet planet, Point3D position, Quaternion orientation, String Template) { + super(objectID, planet, position, orientation, Template); + } + + public UniverseObject() { + super(); + } + + @Override + public void initAfterDBLoad() { + super.init(); + } + + @Override + public Baseline getOtherVariables() { + Baseline baseline = super.getOtherVariables(); + return baseline; + } + + @Override + public void notifyClients(IoBuffer buffer, boolean notifySelf) { + notifyObservers(buffer, false); + } + + @Override + public ObjectMessageBuilder getMessageBuilder() { + synchronized(objectMutex) { + if (messageBuilder == null) { + messageBuilder = new UniverseMessageBuilder(this); + } + + return messageBuilder; + } + } + + @Override + public void sendBaselines(Client destination) { + + } + + @Override + public void sendListDelta(byte viewType, short updateType, IoBuffer buffer) { + + } + +} diff --git a/src/resources/objects/waypoint/WaypointObject.java b/src/resources/objects/waypoint/WaypointObject.java index 9b027381..563ae32f 100644 --- a/src/resources/objects/waypoint/WaypointObject.java +++ b/src/resources/objects/waypoint/WaypointObject.java @@ -21,16 +21,24 @@ ******************************************************************************/ package resources.objects.waypoint; -import com.sleepycat.persist.model.Persistent; +import java.io.Serializable; +import java.nio.ByteOrder; +import org.apache.mina.core.buffer.IoBuffer; +import org.apache.mina.core.buffer.SimpleBufferAllocator; + +import resources.objects.intangible.IntangibleObject; import engine.clients.Client; +import engine.resources.common.StringUtilities; +import engine.resources.objects.IDelta; import engine.resources.objects.SWGObject; import engine.resources.scene.Planet; import engine.resources.scene.Point3D; import engine.resources.scene.Quaternion; -@Persistent -public class WaypointObject extends SWGObject { +public class WaypointObject extends IntangibleObject implements Serializable, IDelta { + + private static final long serialVersionUID = 1L; private int cellId; // ??? private long locationNetworkId; @@ -38,6 +46,7 @@ public class WaypointObject extends SWGObject { private String name; private byte color; private boolean isActive; + private transient static SimpleBufferAllocator bufferPool = new SimpleBufferAllocator(); public static final byte BLUE = 1; public static final byte GREEN = 2; @@ -53,6 +62,11 @@ public class WaypointObject extends SWGObject { super(objectID, planet, position, new Quaternion(0, 0, 0, 1), "object/waypoint/shared_waypoint.iff"); } + @Override + public void initAfterDBLoad() { + super.init(); + } + public int getCellId() { synchronized(objectMutex) { return cellId; @@ -141,5 +155,38 @@ public class WaypointObject extends SWGObject { // TODO Auto-generated method stub } + + @Override + public byte[] getBytes() { + IoBuffer buffer = bufferPool.allocate(42 + name.length() * 2, false).order(ByteOrder.LITTLE_ENDIAN); + + buffer.putInt(getCellId()); + + buffer.putFloat(getPosition().x); + buffer.putFloat(getPosition().y); + buffer.putFloat(getPosition().z); + + buffer.putLong(0); // networklocationId + buffer.putInt(getPlanetCRC()); + + buffer.put(StringUtilities.getUnicodeString(getName())); + buffer.putLong(getObjectID()); + + buffer.put((byte) getColor()); + + if (isActive()) + buffer.put((byte) 1); + else + buffer.put((byte) 0); + + return buffer.flip().array(); + + } + + @Override + public void init(SWGObject arg0) { + // TODO Auto-generated method stub + + } } diff --git a/src/resources/objects/weapon/WeaponMessageBuilder.java b/src/resources/objects/weapon/WeaponMessageBuilder.java index b4264408..80eec11a 100644 --- a/src/resources/objects/weapon/WeaponMessageBuilder.java +++ b/src/resources/objects/weapon/WeaponMessageBuilder.java @@ -22,16 +22,22 @@ package resources.objects.weapon; import java.nio.ByteOrder; +import java.util.Map; import org.apache.mina.core.buffer.IoBuffer; -import resources.objects.ObjectMessageBuilder; +import engine.resources.objects.Builder; +import resources.objects.tangible.TangibleMessageBuilder; +import resources.datatables.Elemental; - -public class WeaponMessageBuilder extends ObjectMessageBuilder { - - public WeaponMessageBuilder(WeaponObject weaponObject) { - setObject(weaponObject); +public class WeaponMessageBuilder extends TangibleMessageBuilder { + + public WeaponMessageBuilder(WeaponObject object) { + super(object); + } + + public WeaponMessageBuilder() { + super(); } public IoBuffer buildBaseline3() { @@ -56,11 +62,11 @@ public class WeaponMessageBuilder extends ObjectMessageBuilder { buffer.putShort((short) weapon.getCustomization().length); buffer.put(weapon.getCustomization()); } + buffer.putInt(0); + buffer.putInt(0); buffer.putInt(weapon.getOptionsBitmask()); - buffer.putInt(weapon.getIncapTimer()); + buffer.putInt(0); buffer.putInt(weapon.getConditionDamage()); - buffer.putInt(0); - buffer.putInt(0); buffer.putInt(0x64); buffer.put((byte) (weapon.isStaticObject() ? 1 : 0)); buffer.putFloat(weapon.getAttackSpeed()); @@ -68,11 +74,12 @@ public class WeaponMessageBuilder extends ObjectMessageBuilder { buffer.putInt(0); buffer.putFloat(weapon.getMaxRange()); buffer.putInt(0); - + if( weapon.getElementalType() != null) // Weapon particle effect + buffer.putInt(Elemental.getElementalNum(weapon.getElementalType())); + else + buffer.putInt(Elemental.getElementalNum(weapon.getDamageType())); buffer.putInt(0); - buffer.putInt(0); // those 2 ints have something to do with particle color - int size = buffer.position(); buffer = bufferPool.allocate(size, false).put(buffer.array(), 0, size); @@ -87,7 +94,7 @@ public class WeaponMessageBuilder extends ObjectMessageBuilder { IoBuffer buffer = bufferPool.allocate(100, false).order(ByteOrder.LITTLE_ENDIAN); buffer.setAutoExpand(true); buffer.putShort((short) 9); - buffer.putInt(0x4E); + buffer.putInt(0x43); buffer.put(getAsciiString(weapon.getDetailFilename())); buffer.putInt(0); buffer.put(getAsciiString(weapon.getDetailName())); @@ -133,15 +140,40 @@ public class WeaponMessageBuilder extends ObjectMessageBuilder { } @Override - public void sendListDelta(byte viewType, short updateType, IoBuffer buffer) { - // TODO Auto-generated method stub - + public void buildBaseline3(Map baselineBuilders, Map deltaBuilders) { + super.buildBaseline3(baselineBuilders, deltaBuilders); } @Override - public void sendBaselines() { - // TODO Auto-generated method stub + public void buildBaseline6(Map baselineBuilders, Map deltaBuilders) { + super.buildBaseline6(baselineBuilders, deltaBuilders); + /* + baselineBuilders.put(13, new Builder() { + + public byte[] build() { + return Baseline.createBuffer(4).putInt(((WeaponObject) object).getWeaponType()).array(); + } + + }); + deltaBuilders.put(13, new Builder() { + + public byte[] build() { + return Baseline.createBuffer(4).putInt(((WeaponObject) object).getWeaponType()).array(); + } + + }); + */ + } + + @Override + public void buildBaseline8(Map baselineBuilders, Map deltaBuilders) { + super.buildBaseline8(baselineBuilders, deltaBuilders); + } + + @Override + public void buildBaseline9(Map baselineBuilders, Map deltaBuilders) { + super.buildBaseline9(baselineBuilders, deltaBuilders); } } diff --git a/src/resources/objects/weapon/WeaponObject.java b/src/resources/objects/weapon/WeaponObject.java index 9f0b8381..4fca13d7 100644 --- a/src/resources/objects/weapon/WeaponObject.java +++ b/src/resources/objects/weapon/WeaponObject.java @@ -21,126 +21,61 @@ ******************************************************************************/ package resources.objects.weapon; -import java.util.ArrayList; -import java.util.List; +import java.io.Serializable; +import java.util.Vector; + +import resources.datatables.WeaponType; +import resources.objects.tangible.TangibleObject; import com.sleepycat.persist.model.NotPersistent; -import com.sleepycat.persist.model.Persistent; import engine.clients.Client; -import engine.resources.objects.SWGObject; import engine.resources.scene.Planet; import engine.resources.scene.Point3D; import engine.resources.scene.Quaternion; -@Persistent(version=1) -public class WeaponObject extends SWGObject { +public class WeaponObject extends TangibleObject implements Serializable { + private static final long serialVersionUID = 1L; + // TODO: Thread safety - private int incapTimer = 10; - private int conditionDamage = 0; - - private byte[] customization; - private List componentCustomizations = new ArrayList(); - private int optionsBitmask = 0; - private boolean staticObject = true; @NotPersistent - private WeaponMessageBuilder messageBuilder; - - private float attackSpeed = 1; - private float maxRange; + private transient WeaponMessageBuilder messageBuilder; public WeaponObject(long objectID, Planet planet, String template) { super(objectID, planet, new Point3D(0, 0, 0), new Quaternion(1, 0, 1, 0), template); messageBuilder = new WeaponMessageBuilder(this); - calculateRange(); - calculateAttackSpeed(); + if (this.getClass().getSimpleName().equals("WeaponObject")) setIntAttribute("volume", 1); + setStringAttribute("cat_wpn_damage.damage", "0-0"); } - public WeaponObject(long objectID, Planet planet, String template, Point3D position, Quaternion orientation) { + public WeaponObject(long objectID, Planet planet, Point3D position, Quaternion orientation, String template) { super(objectID, planet, position, orientation, template); messageBuilder = new WeaponMessageBuilder(this); - calculateRange(); - calculateAttackSpeed(); + if (this.getClass().getSimpleName().equals("WeaponObject")) setIntAttribute("volume", 1); + setStringAttribute("cat_wpn_damage.damage", "0-0"); } - public WeaponObject() { super(); messageBuilder = new WeaponMessageBuilder(this); - //calculateRange(); } - private void calculateRange() { - - int weaponType = getWeaponType(); - - switch(weaponType) { - - case 0: maxRange = 64; break; - case 1: maxRange = 50; break; - case 2: maxRange = 35; break; - case 12: maxRange = 64; break; - case 4: maxRange = 5; break; - case 5: maxRange = 5; break; - case 6: maxRange = 5; break; - case 7: maxRange = 5; break; - case 8: maxRange = 64; break; - case 9: maxRange = 5; break; - case 10: maxRange = 5; break; - case 11: maxRange = 5; break; - - } - + @Override + public void initAfterDBLoad() { + super.init(); + messageBuilder = new WeaponMessageBuilder(this); + defendersList = new Vector(); } - - public int getIncapTimer() { - return incapTimer; - } - - public void setIncapTimer(int incapTimer) { - this.incapTimer = incapTimer; - } - - public int getConditionDamage() { - return conditionDamage; - } - - public void setConditionDamage(int conditionDamage) { - this.conditionDamage = conditionDamage; - } - - public byte[] getCustomization() { - return customization; - } - - public void setCustomization(byte[] customization) { - this.customization = customization; - } - - public List getComponentCustomizations() { - return componentCustomizations; - } - - public void setComponentCustomizations(List componentCustomizations) { - this.componentCustomizations = componentCustomizations; - } - - public int getOptionsBitmask() { - return optionsBitmask; - } - - public void setOptionsBitmask(int optionsBitmask) { - this.optionsBitmask = optionsBitmask; - } - + public int getMaxDamage() { return Integer.parseInt(getStringAttribute("cat_wpn_damage.damage").split("-")[1]); } - + public void setMaxDamage(int maxDamage) { setStringAttribute("cat_wpn_damage.damage", String.valueOf(getMinDamage()) + "-" + String.valueOf(maxDamage)); + setIntAttribute("cat_wpn_damage.dps", getDamagePerSecond()); } public int getMinDamage() { @@ -148,7 +83,9 @@ public class WeaponObject extends SWGObject { } public void setMinDamage(int minDamage) { + setStringAttribute("cat_wpn_damage.damage", String.valueOf(minDamage) + "-" + String.valueOf(getMaxDamage())); + setIntAttribute("cat_wpn_damage.dps", getDamagePerSecond()); } public int getElementalDamage() { @@ -157,63 +94,44 @@ public class WeaponObject extends SWGObject { public void setElementalDamage(int elementalDamage) { setIntAttribute("cat_wpn_damage.wpn_elemental_value", elementalDamage); + setIntAttribute("cat_wpn_damage.dps", getDamagePerSecond()); } public String getElementalType() { - return getStringAttribute("cat_wpn_damage.wpn_elemental_type"); + if (getStringAttribute("cat_wpn_damage.wpn_elemental_type") != null ) + return getStringAttribute("cat_wpn_damage.wpn_elemental_type").replace("@obj_attr_n:elemental_", ""); + return null; } public void setElementalType(String elementalType) { - setStringAttribute("cat_wpn_damage.wpn_elemental_type", elementalType); + setStringAttribute("cat_wpn_damage.wpn_elemental_type", "@obj_attr_n:elemental_" + elementalType); } public String getDamageType() { - return getStringAttribute("cat_wpn_damage.wpn_damage_type"); + return getStringAttribute("cat_wpn_damage.wpn_damage_type").replace("@obj_attr_n:armor_eff_", ""); } public void setDamageType(String damageType) { - setStringAttribute("cat_wpn_damage.wpn_damage_type", damageType); + setStringAttribute("cat_wpn_damage.wpn_damage_type", "@obj_attr_n:armor_eff_" + damageType); } public int getDamagePerSecond() { - return (int) (((getMaxDamage() + getElementalDamage() + getMinDamage() + getElementalDamage()) / 2 + getElementalDamage()) * (1 / getAttackSpeed())); - } + if(getAttributes().containsKey("cat_wpn_damage.damage") && getAttributes().containsKey("cat_wpn_damage.wpn_attack_speed")) { - public boolean isStaticObject() { - return staticObject; - } - - public void setStaticObject(boolean staticObject) { - this.staticObject = staticObject; + if (getElementalType() != null ) + return (int) (((getMaxDamage() + getElementalDamage() + getMinDamage() + getElementalDamage()) / 2 + getElementalDamage()) * (1 / getAttackSpeed())); + else + return (int) (((getMaxDamage() + getMinDamage()) / 2 ) * (1 / getAttackSpeed())); + } else + return 0; } public int getWeaponType() { - - int weaponType = -1; - - String template = getTemplate(); - - if(template == null) - return weaponType; - - if(template.contains("rifle")) weaponType = 0; - if(template.contains("carbine")) weaponType = 1; - if(template.contains("pistol")) weaponType = 2; - if(template.contains("heavy")) weaponType = 12; - if(template.contains("sword") || template.contains("baton")) weaponType = 4; - if(template.contains("2h_sword") || template.contains("axe")) weaponType = 5; - if(template.contains("unarmed")) weaponType = 6; - if(template.contains("polearm") || template.contains("lance")) weaponType = 7; - if(template.contains("thrown")) weaponType = 8; - if(template.contains("lightsaber_one_handed")) weaponType = 9; - if(template.contains("lightsaber_two_handed")) weaponType = 10; - if(template.contains("lightsaber_polearm")) weaponType = 11; - - if(weaponType == -1) - weaponType = 6; - - return weaponType; - + return Integer.parseInt(getStringAttribute("cat_wpn_damage.wpn_category").replace("@obj_attr_n:wpn_category_", "")); + } + + public void setWeaponType(int weaponType) { + setStringAttribute("cat_wpn_damage.wpn_category", "@obj_attr_n:wpn_category_" + weaponType); } @Override @@ -231,11 +149,16 @@ public class WeaponObject extends SWGObject { } public float getAttackSpeed() { - return attackSpeed; + return getFloatAttribute("cat_wpn_damage.wpn_attack_speed"); } public void setAttackSpeed(float attackSpeed) { - this.attackSpeed = attackSpeed; + if((int) attackSpeed != attackSpeed) + setFloatAttribute("cat_wpn_damage.wpn_attack_speed", attackSpeed); + else + setIntAttribute("cat_wpn_damage.wpn_attack_speed", (int) attackSpeed); + + setIntAttribute("cat_wpn_damage.dps", getDamagePerSecond()); } public WeaponMessageBuilder getMessageBuilder() { @@ -243,18 +166,21 @@ public class WeaponObject extends SWGObject { } public float getMaxRange() { - return maxRange; + return Float.parseFloat(getStringAttribute("cat_wpn_damage.wpn_range").replace("0-", "").replace("m", "")); } public void setMaxRange(float maxRange) { - this.maxRange = maxRange; + if((int) maxRange != maxRange) + setStringAttribute("cat_wpn_damage.wpn_range", "0-" + String.valueOf(maxRange) + "m"); + else + setStringAttribute("cat_wpn_damage.wpn_range", "0-" + String.valueOf((int) maxRange) + "m"); } public boolean isMelee() { int weaponType = getWeaponType(); - if(weaponType == 4 || weaponType == 5 || weaponType == 6 || weaponType == 7 || weaponType == 9 || weaponType == 10 || weaponType == 11) + if(weaponType == WeaponType.ONEHANDEDMELEE || weaponType == WeaponType.TWOHANDEDMELEE || weaponType == WeaponType.UNARMED || weaponType == WeaponType.POLEARMMELEE || weaponType == WeaponType.ONEHANDEDSABER || weaponType == WeaponType.TWOHANDEDSABER || weaponType == WeaponType.POLEARMSABER) return true; return false; @@ -265,35 +191,10 @@ public class WeaponObject extends SWGObject { int weaponType = getWeaponType(); - if(weaponType == 0 || weaponType == 1 || weaponType == 2 || weaponType == 3) + if(weaponType == WeaponType.RIFLE || weaponType == WeaponType.CARBINE || weaponType == WeaponType.PISTOL || weaponType == WeaponType.FLAMETHROWER || weaponType == WeaponType.HEAVYWEAPON) return true; return false; } - - private void calculateAttackSpeed() { - - int weaponType = getWeaponType(); - - switch(weaponType) { - - case 0: attackSpeed = 0.8f; break; - case 1: attackSpeed = 0.6f; break; - case 2: attackSpeed = 0.4f; break; - case 12: attackSpeed = 1; break; - case 4: attackSpeed = 1; break; - case 5: attackSpeed = 1; break; - case 6: attackSpeed = 1; break; - case 7: attackSpeed = 1; break; - case 8: attackSpeed = 1; break; - case 9: attackSpeed = 1; break; - case 10: attackSpeed = 1; break; - case 11: attackSpeed = 1; break; - - } - - } - - } diff --git a/src/resources/quest/Quest.java b/src/resources/quest/Quest.java new file mode 100644 index 00000000..80348605 --- /dev/null +++ b/src/resources/quest/Quest.java @@ -0,0 +1,40 @@ +/******************************************************************************* + * Copyright (c) 2013 + * + * This File is part of NGECore2. + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see . + * + * Using NGEngine to work with NGECore2 is making a combined work based on NGEngine. + * Therefore all terms and conditions of the GNU Lesser General Public License cover the combination. + ******************************************************************************/ +package resources.quest; + +import java.io.Serializable; + +import engine.resources.objects.Delta; + +public class Quest extends Delta implements Serializable { + + private static final long serialVersionUID = 1L; + + public Quest() { + + } + + public byte[] getBytes() { + return new byte[] { }; + } + +} diff --git a/src/resources/skills/SkillMod.java b/src/resources/skills/SkillMod.java new file mode 100644 index 00000000..a667f6b0 --- /dev/null +++ b/src/resources/skills/SkillMod.java @@ -0,0 +1,110 @@ +/******************************************************************************* + * Copyright (c) 2013 + * + * This File is part of NGECore2. + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see . + * + * Using NGEngine to work with NGECore2 is making a combined work based on NGEngine. + * Therefore all terms and conditions of the GNU Lesser General Public License cover the combination. + ******************************************************************************/ +package resources.skills; + +import java.io.Serializable; + +import org.apache.mina.core.buffer.IoBuffer; + +import engine.resources.objects.Delta; + +public class SkillMod extends Delta implements Serializable { + + private static final long serialVersionUID = 1L; + + private int base; + private int modifier; + + public SkillMod(int base, int modifier) { + this.base = base; + this.modifier = modifier; + } + + public SkillMod() { + + } + + public int getBase() { + synchronized(objectMutex) { + return base; + } + } + + public void setBase(int base) { + synchronized(objectMutex) { + this.base = base; + } + } + + public void addBase(int base) { + synchronized(objectMutex) { + this.base += base; + } + } + + public void deductBase(int base) { + synchronized(objectMutex) { + this.base -= base; + } + } + + public int getModifier() { + synchronized(objectMutex) { + return modifier; + } + } + + public void setModifier(int modifier) { + synchronized(objectMutex) { + this.modifier = modifier; + } + } + + public void addModifier(int modifier) { + synchronized(objectMutex) { + this.modifier += modifier; + } + } + + public void deductModifier(int modifier) { + synchronized(objectMutex) { + this.modifier -= modifier; + } + } + + public float getValue(int divisor) { + synchronized(objectMutex) { + return ((divisor < 1) ? ((float) base) : ((float) base / (float) divisor)); + } + } + + @Override + public byte[] getBytes() { + synchronized(objectMutex) { + IoBuffer buffer = createBuffer(8); + buffer.putInt(base); + buffer.putInt(modifier); + return buffer.array(); + } + } + +} diff --git a/src/services/BuffService.java b/src/services/BuffService.java index 8ba2894f..8d2d4038 100644 --- a/src/services/BuffService.java +++ b/src/services/BuffService.java @@ -1,168 +1,378 @@ -/******************************************************************************* - * Copyright (c) 2013 - * - * This File is part of NGECore2. - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with this program. If not, see . - * - * Using NGEngine to work with NGECore2 is making a combined work based on NGEngine. - * Therefore all terms and conditions of the GNU Lesser General Public License cover the combination. - ******************************************************************************/ -package services; - -import java.util.Map; -import java.util.concurrent.Executors; -import java.util.concurrent.ScheduledExecutorService; -import java.util.concurrent.ScheduledFuture; -import java.util.concurrent.TimeUnit; - - -import resources.common.FileUtilities; -import resources.objects.Buff; -import resources.objects.DamageOverTime; -import resources.objects.creature.CreatureObject; -import resources.objects.player.PlayerObject; - -import main.NGECore; - -import engine.resources.service.INetworkDispatch; -import engine.resources.service.INetworkRemoteEvent; - -public class BuffService implements INetworkDispatch { - - private NGECore core; - private final ScheduledExecutorService scheduler = Executors.newScheduledThreadPool(1); - - public BuffService(NGECore core) { - this.core = core; - } - - @Override - public void insertOpcodes(Map arg0, Map arg1) { - - } - - @Override - public void shutdown() { - - } - - public void addBuffToCreature(final CreatureObject creature, String buffName) { - - /*if(!FileUtilities.doesFileExist("scripts/buffs/" + buffName + ".py")) { - //System.out.println("Buff script doesnt exist for: " + buffName); - return; - }*/ - - final Buff buff = new Buff(buffName, creature.getObjectID()); - buff.setTotalPlayTime(((PlayerObject) creature.getSlottedObject("ghost")).getTotalPlayTime()); - - - for (final Buff otherBuff : creature.getBuffList()) { - if (buff.getGroup1().equals(otherBuff.getGroup1())) - if (buff.getPriority() >= otherBuff.getPriority()) { - if (buff.getBuffName().equals(otherBuff.getBuffName())) { - - if(otherBuff.getStacks() < otherBuff.getMaxStacks()) { - - buff.setStacks(otherBuff.getStacks() + 1); - if(creature.getDotByBuff(otherBuff) != null) // reset duration when theres a dot stack - creature.getDotByBuff(otherBuff).setStartTime(buff.getStartTime()); - - } - - if (otherBuff.getRemainingDuration() > buff.getDuration() && otherBuff.getStacks() >= otherBuff.getMaxStacks()) { - return; - } - } - - removeBuffFromCreature(creature, otherBuff); - break; - } else { - System.out.println("buff not added:" + buffName); - return; - } - } - - if(FileUtilities.doesFileExist("scripts/buffs/" + buffName + ".py")) - core.scriptService.callScript("scripts/buffs/", "setup", buffName, core, creature, buff); - - creature.addBuff(buff); - - if(buff.getDuration() > 0) { - - ScheduledFuture task = scheduler.schedule(new Runnable() { - - @Override - public void run() { - - removeBuffFromCreature(creature, buff); - - - } - - }, (long) buff.getDuration(), TimeUnit.SECONDS); - - buff.setRemovalTask(task); - - } - - } - - public void removeBuffFromCreature(CreatureObject creature, Buff buff) { - - if(!creature.getBuffList().contains(buff)) - return; - DamageOverTime dot = creature.getDotByBuff(buff); - if(dot != null) { - dot.getTask().cancel(true); - creature.removeDot(dot); - } - if(FileUtilities.doesFileExist("scripts/buffs/" + buff.getBuffName() + ".py")) - core.scriptService.callScript("scripts/buffs/", "removeBuff", buff.getBuffName(), core, creature, buff); - creature.removeBuff(buff); - - - } - - public void clearBuffs(final CreatureObject creature) { - - // copy to array for thread safety - - for(final Buff buff : creature.getBuffList().get().toArray(new Buff[] { })) { - - if(buff.getRemainingDuration() > 0 && buff.getDuration() > 0) { - ScheduledFuture task = scheduler.schedule(new Runnable() { - - @Override - public void run() { - - removeBuffFromCreature(creature, buff); - - } - - }, (long) buff.getRemainingDuration(), TimeUnit.SECONDS); - buff.setRemovalTask(task); - continue; - } else { - removeBuffFromCreature(creature, buff); - } - - } - - } - - - -} +/******************************************************************************* + * Copyright (c) 2013 + * + * This File is part of NGECore2. + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see . + * + * Using NGEngine to work with NGECore2 is making a combined work based on NGEngine. + * Therefore all terms and conditions of the GNU Lesser General Public License cover the combination. + ******************************************************************************/ +package services; + +import java.util.Map; +import java.util.concurrent.ConcurrentHashMap; +import java.util.concurrent.Executors; +import java.util.concurrent.ScheduledExecutorService; +import java.util.concurrent.ScheduledFuture; +import java.util.concurrent.TimeUnit; + +import org.python.core.Py; +import org.python.core.PyObject; + +import resources.buffs.Buff; +import resources.buffs.DamageOverTime; +import resources.common.FileUtilities; +import resources.objects.creature.CreatureObject; +import resources.objects.group.GroupObject; +import resources.objects.player.PlayerObject; +import main.NGECore; +import engine.clientdata.ClientFileManager; +import engine.clientdata.visitors.DatatableVisitor; +import engine.resources.common.CRC; +import engine.resources.objects.SWGObject; +import engine.resources.service.INetworkDispatch; +import engine.resources.service.INetworkRemoteEvent; + +public class BuffService implements INetworkDispatch { + + private NGECore core; + private final ScheduledExecutorService scheduler = Executors.newScheduledThreadPool(1); + private ConcurrentHashMap buffMap = new ConcurrentHashMap(); + + public BuffService(NGECore core) { + this.core = core; + core.commandService.registerCommand("removeBuff"); + + loadBuffs(); + } + + @Override + public void insertOpcodes(Map swgOpcodes, Map objControllerOpcodes) { + + } + + @Override + public void shutdown() { + + } + + public void addBuffToCreature(CreatureObject creature, String buffName) { + try { + throw new Exception(); + } catch (Exception e) { + // New system becoming necessary. Target can be the buffer for abilities that can't buff others. + System.out.println("WARNING: New AddBuff Format: target, buffName, buffer"); + e.printStackTrace(); + } + + addBuffToCreature(creature, buffName, creature); + } + + public boolean addBuffToCreature(CreatureObject target, String buffName, CreatureObject buffer) { + + /*if(!FileUtilities.doesFileExist("scripts/buffs/" + buffName + ".py")) { + //System.out.println("Buff script doesnt exist for: " + buffName); + return; + }*/ + + Buff buff = buffMap.get(buffName); + + if(buff == null) return false; + + // Here the necessary checks must be placed to prevent buffs from the same buff group (e.g. Buff D) being stacked! + + if(buff.isGroupBuff()) { + addGroupBuff(buffer, buffName, buffer); + return true; + } else { + if (! hasBuff(target,buffName)) // QA, prevent infinite "refreshing" of buff by repeated use + doAddBuff(target, buffName, buffer); + return true; + } + } + + public Buff doAddBuff(final CreatureObject target, String buffName, final CreatureObject buffer) { + + if (target.getPosition().getDistance(buffer.getPosition()) > 20) { + return null; + } + + if (target != buffer && !core.simulationService.checkLineOfSight(buffer, target)) { + return null; + } + + final Buff buff = new Buff(buffMap.get(buffName), target.getObjectID()); + if(target.getSlottedObject("ghost") != null) + buff.setTotalPlayTime(((PlayerObject) target.getSlottedObject("ghost")).getTotalPlayTime()); + else + buff.setTotalPlayTime(0); + + if(FileUtilities.doesFileExist("scripts/buffs/" + buffName + ".py")) core.scriptService.callScript("scripts/buffs/", buffName, "setup", core, buffer, buff); + + for (final Buff otherBuff : target.getBuffList()) { + if (buff.getGroup1().equals(otherBuff.getGroup1())) + if (buff.getPriority() >= otherBuff.getPriority()) { + if (buff.getBuffName().equals(otherBuff.getBuffName())) + { + + if(otherBuff.getStacks() < otherBuff.getMaxStacks()) + { + + buff.setStacks(otherBuff.getStacks() + 1); + if(target.getDotByBuff(otherBuff) != null) // reset duration when theres a dot stack + target.getDotByBuff(otherBuff).setStartTime(buff.getStartTime()); + + } + else + { + buff.setStacks(buff.getMaxStacks()); + } + if (buff.getDuration() != -1.0) + if (otherBuff.getRemainingDuration() > buff.getDuration() && otherBuff.getStacks() >= otherBuff.getMaxStacks()) + return null; + } + + removeBuffFromCreature(target, otherBuff); + break; + } else { + System.out.println("buff not added:" + buffName); + return null; + } + } + +/* if(FileUtilities.doesFileExist("scripts/buffs/" + buffName + ".py")) core.scriptService.callScript("scripts/buffs/", buffName, "add", core, target, buff); + else + { */ + if(buff.getEffect1Name().length() > 0) core.skillModService.addSkillMod(target, buff.getEffect1Name(), (int) buff.getEffect1Value()); + if(buff.getEffect2Name().length() > 0) core.skillModService.addSkillMod(target, buff.getEffect2Name(), (int) buff.getEffect2Value()); + if(buff.getEffect3Name().length() > 0) core.skillModService.addSkillMod(target, buff.getEffect3Name(), (int) buff.getEffect3Value()); + if(buff.getEffect4Name().length() > 0) core.skillModService.addSkillMod(target, buff.getEffect4Name(), (int) buff.getEffect4Value()); + if(buff.getEffect5Name().length() > 0) core.skillModService.addSkillMod(target, buff.getEffect5Name(), (int) buff.getEffect5Value()); +// } + + target.addBuff(buff); + + if(buff.getDuration() > 0) { + + ScheduledFuture task = scheduler.schedule(new Runnable() { + + @Override + public void run() { + + removeBuffFromCreature(target, buff); + + + } + + }, (long) buff.getDuration(), TimeUnit.SECONDS); + + buff.setRemovalTask(task); + + } else if (buff.getGroup2().contains("of_aura") && buffer != null && buffer.getObjectId() != target.getObjectId()) { + + // I'm not sure if all aura effects follow the same rules, so this is simply restricted to officer aura's atm + ScheduledFuture task = scheduler.scheduleAtFixedRate(new Runnable() { + @Override + public void run() { + if (buffer == null || buffer.getClient() == null) + removeBuffFromCreature(target, buff); + + if (target.getWorldPosition().getDistance2D(buffer.getWorldPosition()) > 80) { + removeBuffFromCreature(target, buff); + } + } + }, 5, 5, TimeUnit.SECONDS); + + buff.setRemovalTask(task); + } + + for (String effect : buff.getParticleEffect().split(",")) { + target.playEffectObject(effect, buff.getBuffName()); + } + + if (buffer != null && target.getGroupId() != 0 && target.getGroupId() == buffer.getGroupId()) { + buff.setGroupBufferId(buffer.getObjectID()); + } + + return buff; + + } + + @SuppressWarnings("unused") + public void removeBuffFromCreature(CreatureObject creature, Buff buff) { + if(!creature.getBuffList().contains(buff)) + return; + DamageOverTime dot = creature.getDotByBuff(buff); + if(dot != null) { + dot.getTask().cancel(true); + creature.removeDot(dot); + } + +/* if(FileUtilities.doesFileExist("scripts/buffs/" + buff.getBuffName() + ".py")) core.scriptService.callScript("scripts/buffs/", buff.getBuffName(), "remove", core, creature, buff); + else + {*/ + if(buff.getEffect1Name().length() > 0) core.skillModService.deductSkillMod(creature, buff.getEffect1Name(), (int) buff.getEffect1Value()); + if(buff.getEffect2Name().length() > 0) core.skillModService.deductSkillMod(creature, buff.getEffect2Name(), (int) buff.getEffect2Value()); + if(buff.getEffect1Name().length() > 0) core.skillModService.deductSkillMod(creature, buff.getEffect3Name(), (int) buff.getEffect3Value()); + if(buff.getEffect1Name().length() > 0) core.skillModService.deductSkillMod(creature, buff.getEffect4Name(), (int) buff.getEffect4Value()); + if(buff.getEffect1Name().length() > 0) core.skillModService.deductSkillMod(creature, buff.getEffect5Name(), (int) buff.getEffect5Value()); +// } + + if (!buff.getCallback().equals("none") && !buff.getCallback().equals("")) { + if (FileUtilities.doesFileExist("scripts/buffs/" + buff.getBuffName() + ".py")) { + PyObject method = core.scriptService.getMethod("scripts/buffs/", buff.getBuffName(), buff.getCallback()); + + if (method != null && method.isCallable()) { + method.__call__(Py.java2py(core), Py.java2py(creature), Py.java2py(buff)); + } + } + } + creature.removeBuff(buff); + + for (String effect : buff.getParticleEffect().split(",")) { + creature.stopEffectObject(buff.getBuffName()); + } + + if (buff.getRemovalTask() != null) { + buff.getRemovalTask().cancel(true); + buff.setRemovalTask(null); + } + } + + public void removeBuffFromCreatureByName(CreatureObject creature, String buffName) + { + removeBuffFromCreature(creature, creature.getBuffByName(buffName)); + } + /* + public void clearBuffs(final CreatureObject creature) + { + // This method sucks ass, someone please fix me. indeed, it doesnt even work at all! + for(Buff buff : creature.getBuffList().get()) + { + if(buff.getRemainingDuration() > 0 && buff.getDuration() > 0) buff.setRemovalTask(null); + removeBuffFromCreature(creature, buff); + } + + } + */ + + public void clearBuffs(final CreatureObject creature) { + + // copy to array for thread safety + + for(final Buff buff : creature.getBuffList().get().toArray(new Buff[] { })) { + + if (buff.getGroup1().startsWith("setBonus")) { continue; } + + if(buff.isGroupBuff() && buff.getGroupBufferId() != creature.getObjectID()) { + removeBuffFromCreature(creature, buff); + continue; + } + + if(buff.getRemainingDuration() > 0 && buff.getDuration() > 0) { + ScheduledFuture task = scheduler.schedule(() -> removeBuffFromCreature(creature, buff), (long) buff.getRemainingDuration(), TimeUnit.SECONDS); + buff.setRemovalTask(task); + continue; + } else { + removeBuffFromCreature(creature, buff); + } + + } + + } + + public boolean hasBuff(final CreatureObject creature, String buffName) { + + for(final Buff buff : creature.getBuffList().get().toArray(new Buff[] { })) { + if (buff.getBuffName().contains(buffName)) { return true; } + } + return false; + } + + public void addGroupBuff(CreatureObject buffer, String buffName) { + try { + throw new Exception(); + } catch (Exception e) { + // New system becoming necessary. Target can be the buffer for abilities that can't buff others. + System.out.println("WARNING: New GroupAddBuff Format: target, buffName, buffer"); + e.printStackTrace(); + } + + addGroupBuff(buffer, buffName, buffer); + } + + public void addGroupBuff(CreatureObject target, String buffName, CreatureObject buffer) { + + if(buffer.getGroupId() == 0) { + doAddBuff(target, buffName, buffer); + return; + } + + GroupObject group = (GroupObject) core.objectService.getObject(buffer.getGroupId()); + + if(group == null) { + doAddBuff(target, buffName, buffer); + return; + } + + for(SWGObject member : group.getMemberList()) { + doAddBuff((CreatureObject) member, buffName, buffer); + } + + } + + private void loadBuffs() { + try { + DatatableVisitor visitor = ClientFileManager.loadFile("datatables/buff/buff.iff", DatatableVisitor.class); + for(int i = 0; i < visitor.getRowCount(); i++) { + Buff buff = new Buff(); + + String name = (String) visitor.getObject(i, 0); + + buff.setBuffName(name); + buff.setBuffCRC(CRC.StringtoCRC(name)); + buff.setGroup1((String) visitor.getObject(i, 1)); + buff.setGroup2((String) visitor.getObject(i, 2)); + buff.setPriority((int) visitor.getObject(i, 4)); + buff.setDuration((Float) visitor.getObject(i, 6)); + buff.setEffect1Name((String) visitor.getObject(i, 7)); + buff.setEffect1Value((Float) visitor.getObject(i, 8)); + buff.setEffect2Name((String) visitor.getObject(i, 9)); + buff.setEffect2Value((Float) visitor.getObject(i, 10)); + buff.setEffect3Name((String) visitor.getObject(i, 11)); + buff.setEffect3Value((Float) visitor.getObject(i, 12)); + buff.setEffect4Name((String) visitor.getObject(i, 13)); + buff.setEffect4Value((Float) visitor.getObject(i, 14)); + buff.setEffect5Name((String) visitor.getObject(i, 15)); + buff.setEffect5Value((Float) visitor.getObject(i, 16)); + buff.setCallback((String) visitor.getObject(i, 18)); + buff.setParticleEffect((String) visitor.getObject(i, 19)); + buff.setDebuff((Boolean) visitor.getObject(i, 22)); + buff.setRemoveOnDeath((Integer) visitor.getObject(i, 25) != 0); + buff.setRemovableByPlayer((Integer) visitor.getObject(i, 26) != 0); + buff.setMaxStacks((Integer) visitor.getObject(i, 28)); + buff.setPersistent((Integer) visitor.getObject(i, 29) != 0); + buff.setRemoveOnRespec((Integer) visitor.getObject(i, 31) != 0); + buff.setAiRemoveOnEndCombat((Integer) visitor.getObject(i, 32) != 0); + buff.setDecayOnPvPDeath((Integer) visitor.getObject(i, 33) != 0); + + buffMap.put(name, buff); + } + + } catch (InstantiationException | IllegalAccessException e) { + e.printStackTrace(); + } + } +} diff --git a/src/services/CharacterService.java b/src/services/CharacterService.java index 050b6ab7..ec5a49c1 100644 --- a/src/services/CharacterService.java +++ b/src/services/CharacterService.java @@ -26,6 +26,7 @@ import java.nio.ByteOrder; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; +import java.util.Calendar; import java.util.Map; import main.NGECore; @@ -33,17 +34,23 @@ import main.NGECore; import org.apache.mina.core.buffer.IoBuffer; import org.apache.mina.core.session.IoSession; +import engine.clientdata.ClientFileManager; +import engine.clientdata.visitors.DatatableVisitor; +import engine.clientdata.visitors.ProfessionTemplateVisitor; import engine.clients.Client; import engine.resources.common.CRC; import engine.resources.container.CreatureContainerPermissions; import engine.resources.container.CreaturePermissions; +import engine.resources.container.Traverser; import engine.resources.database.DatabaseConnection; +import engine.resources.objects.SWGObject; import engine.resources.scene.Point3D; import engine.resources.scene.Quaternion; import engine.resources.service.INetworkDispatch; import engine.resources.service.INetworkRemoteEvent; import resources.common.*; - +import resources.datatables.Options; +import resources.datatables.Professions; import protocol.swg.ClientCreateCharacter; import protocol.swg.ClientMfdStatusUpdateMessage; import protocol.swg.ClientRandomNameRequest; @@ -52,8 +59,9 @@ import protocol.swg.ClientVerifyAndLockNameRequest; import protocol.swg.ClientVerifyAndLockNameResponse; import protocol.swg.CreateCharacterSuccess; import protocol.swg.HeartBeatMessage; - import resources.objects.creature.CreatureObject; +import resources.objects.intangible.IntangibleObject; +import resources.objects.mission.MissionObject; import resources.objects.player.PlayerObject; import resources.objects.tangible.TangibleObject; import resources.objects.weapon.WeaponObject; @@ -80,12 +88,25 @@ public class CharacterService implements INetworkDispatch { } } + public boolean checkName(String name, Client client) { + // TODO: check for dev names, profane names, iconic names etc + try { + if(checkForDuplicateName(name, client.getAccountId()) || !name.matches(allowedCharsRegex)) + return false; + } catch (SQLException e) { + e.printStackTrace(); + } + + return true; + } + @Override public void insertOpcodes(Map swgOpcodes, Map objControllerOpcodes) { swgOpcodes.put(Opcodes.ClientRandomNameRequest, new INetworkRemoteEvent() { public void handlePacket(IoSession session, IoBuffer data) throws Exception { + ClientRandomNameRequest randomNameRequest = new ClientRandomNameRequest(); ClientRandomNameResponse response; String name = null; @@ -94,16 +115,23 @@ public class CharacterService implements INetworkDispatch { data.position(0); randomNameRequest.deserialize(data); + while (name == null) { + + String firstName =""; + String lastName = ""; if (randomNameRequest.getSharedRaceTemplate().contains("wookie")) { - name = nameGenerator.compose(4); + firstName = nameGenerator.compose(4); + } else { - name = nameGenerator.compose(2) + " " + nameGenerator.compose(3); + firstName = nameGenerator.compose(2); + lastName = nameGenerator.compose(3); } try { - if (checkForDuplicateName(getfirstName(name, randomNameRequest.getSharedRaceTemplate()))) { - name = null; + //it's fine here to just use 0 as accountId because we don't want reserved names to be random generated for anyone. + if (!checkForDuplicateName(firstName, 0)) { + name = firstName + ((lastName.length() > 0 ) ? " " + lastName : ""); } } catch (SQLException e2) { e2.printStackTrace(); @@ -120,6 +148,8 @@ public class CharacterService implements INetworkDispatch { @Override public void handlePacket(IoSession session, IoBuffer data) throws Exception { + + Client client = core.getClient(session); data = data.order(ByteOrder.LITTLE_ENDIAN); data.position(0); ClientVerifyAndLockNameRequest message = new ClientVerifyAndLockNameRequest(); @@ -128,11 +158,15 @@ public class CharacterService implements INetworkDispatch { boolean isDeclined = false; String firstName = getfirstName(message.getName(), message.getRaceTemplate()); String lastName = getlastName(message.getName(), message.getRaceTemplate()); - if(message.getName() != null) System.out.println(message.getName()); + //if(message.getName() != null) System.out.println(message.getName()); int length = firstName.length(); try { - if (checkForDuplicateName(firstName)) { + if (client == null) { + System.out.println("NULL client in ClientVerifyAndLockNameRequest, something is still bust"); + return; + } + if (checkForDuplicateName(firstName, client.getAccountId())) { approved_flag = "name_declined_in_use"; isDeclined = true; @@ -174,7 +208,16 @@ public class CharacterService implements INetworkDispatch { }); + + swgOpcodes.put(Opcodes.LagReport, new INetworkRemoteEvent() { + @Override + public void handlePacket(IoSession session, IoBuffer buffer) throws Exception { + + } + + }); + swgOpcodes.put(Opcodes.ClientCreateCharacter, new INetworkRemoteEvent() { @Override @@ -192,17 +235,16 @@ public class CharacterService implements INetworkDispatch { } int galaxyId = config.getInt("GALAXY_ID"); + Client client = core.getClient(session); try { - if (checkForDuplicateName(getfirstName(clientCreateCharacter.getName(), clientCreateCharacter.getRaceTemplate()))) { + if (client == null || checkForDuplicateName(getfirstName(clientCreateCharacter.getName(), clientCreateCharacter.getRaceTemplate()), client.getAccountId())) { return; } } catch (SQLException e2) { e2.printStackTrace(); } - Client client = core.getClient((Integer) session.getAttribute("connectionId")); - // TODO: Add starting location and items in a script String raceTemplate = clientCreateCharacter.getRaceTemplate(); // should set to some planet and starting location @@ -214,11 +256,13 @@ public class CharacterService implements INetworkDispatch { object.setCustomName(clientCreateCharacter.getName()); object.setHeight(clientCreateCharacter.getScale()); object.setPersistent(true); - object.setPosition(new Point3D(3528, 0, -4804)); + object.setPosition(SpawnPoint.getRandomPosition(new Point3D(3528, 0, -4804), (float) 0.5, 3, core.terrainService.getPlanetByName("tatooine").getID())); object.setCashCredits(100); object.setBankCredits(1000); + object.setOptionsBitmask(Options.ATTACKABLE); //object.setPosition(new Point3D(0, 0, 0)); object.setOrientation(new Quaternion(1, 0, 0, 0)); + object.setLevel((short) 1); float luck = (((((float) (core.scriptService.getMethod("scripts/roadmap/", clientCreateCharacter.getProfession(), "getLuck").__call__().asInt()) + (core.scriptService.getMethod("scripts/roadmap/", object.getStfName(), "getLuck").__call__().asInt())) / ((float) 90)) * ((float) object.getLevel())) - ((float) object.getSkillModBase("luck"))); float precision = (((((float) (core.scriptService.getMethod("scripts/roadmap/", clientCreateCharacter.getProfession(), "getPrecision").__call__().asInt()) + (core.scriptService.getMethod("scripts/roadmap/", object.getStfName(), "getPrecision").__call__().asInt())) / ((float) 90)) * ((float) object.getLevel())) - ((float) object.getSkillModBase("precision"))); float strength = (((((float) (core.scriptService.getMethod("scripts/roadmap/", clientCreateCharacter.getProfession(), "getStrength").__call__().asInt()) + (core.scriptService.getMethod("scripts/roadmap/", object.getStfName(), "getStrength").__call__().asInt())) / ((float) 90)) * ((float) object.getLevel())) - ((float) object.getSkillModBase("strength"))); @@ -231,18 +275,26 @@ public class CharacterService implements INetworkDispatch { if (constitution >= 1) core.skillModService.addSkillMod(object, "constitution", (int) constitution); if (stamina >= 1) core.skillModService.addSkillMod(object, "stamina", (int) stamina); if (agility >= 1) core.skillModService.addSkillMod(object, "agility", (int) agility); - object.createTransaction(core.getCreatureODB().getEnvironment()); - + + core.skillModService.addSkillMod(object, "language_basic_comprehend", 100); + core.skillModService.addSkillMod(object, "language_basic_speak", 100); + core.skillModService.addSkillMod(object, "creature_harvesting", 25); + core.skillModService.addSkillMod(object, "language_wookiee_comprehend", 100); + PlayerObject player = (PlayerObject) core.objectService.createObject("object/player/shared_player.iff", object.getPlanet()); object._add(player); + core.skillService.addSkill(object, "species_" + object.getStfName()); player.setProfession(clientCreateCharacter.getProfession()); + player.setProfessionIcon(Professions.get(clientCreateCharacter.getProfession())); player.setProfessionWheelPosition(clientCreateCharacter.getProfessionWheelPosition()); + player.setNextUpdateTime(core.gcwService.calculateNextUpdateTime() + player.getBornDate()); if(clientCreateCharacter.getHairObject().length() > 0) { String sharedHairTemplate = clientCreateCharacter.getHairObject().replace("/hair_", "/shared_hair_"); TangibleObject hair = (TangibleObject) core.objectService.createObject(sharedHairTemplate, object.getPlanet()); if(clientCreateCharacter.getHairCustomization().length > 0) hair.setCustomization(clientCreateCharacter.getHairCustomization()); object._add(hair); + object.addObjectToEquipList(hair); } TangibleObject inventory = (TangibleObject) core.objectService.createObject("object/tangible/inventory/shared_character_inventory.iff", object.getPlanet()); @@ -251,38 +303,48 @@ public class CharacterService implements INetworkDispatch { appInventory.setContainerPermissions(CreaturePermissions.CREATURE_PERMISSIONS); TangibleObject datapad = (TangibleObject) core.objectService.createObject("object/tangible/datapad/shared_character_datapad.iff", object.getPlanet()); datapad.setContainerPermissions(CreatureContainerPermissions.CREATURE_CONTAINER_PERMISSIONS); + datapad.setStaticObject(false); TangibleObject bank = (TangibleObject) core.objectService.createObject("object/tangible/bank/shared_character_bank.iff", object.getPlanet()); bank.setContainerPermissions(CreatureContainerPermissions.CREATURE_CONTAINER_PERMISSIONS); + bank.setStaticObject(false); TangibleObject missionBag = (TangibleObject) core.objectService.createObject("object/tangible/mission_bag/shared_mission_bag.iff", object.getPlanet()); missionBag.setContainerPermissions(CreatureContainerPermissions.CREATURE_CONTAINER_PERMISSIONS); + missionBag.setStaticObject(false); object._add(inventory); object._add(appInventory); object._add(datapad); object._add(bank); object._add(missionBag); - TangibleObject backpack = (TangibleObject) core.objectService.createObject("object/tangible/wearables/backpack/shared_backpack_galactic_marine.iff", object.getPlanet()); - inventory._add(backpack); - //object.addObjectToEquipList(datapad); - //object.addObjectToEquipList(inventory); - WeaponObject weapon = (WeaponObject) core.objectService.createObject("object/weapon/ranged/rifle/shared_rifle_a280.iff", object.getPlanet()); - WeaponObject defaultWeapon = (WeaponObject) core.objectService.createObject("object/weapon/creature/shared_creature_default_weapon.iff", object.getPlanet()); - - //object.addObjectToEquipList(defaultWeapon); - - object._add(defaultWeapon); - - //object.addObjectToEquipList(weapon); - - object._add(weapon); - object.setWeaponId(weapon.getObjectID()); - - core.scriptService.callScript("scripts/", "starterclothing", "CreateStarterClothing", core, object, clientCreateCharacter.getStarterProfession(), clientCreateCharacter.getRaceTemplate()); - core.scriptService.callScript("scripts/", "CreateStartingCharacter", "demo", core, object); - core.getCreatureODB().put(object, Long.class, CreatureObject.class, object.getTransaction()); - // might not need to commit transaction but better safe than sorry - object.getTransaction().commitSync(); + for(int missionsAdded = 1; missionsAdded <= 10; missionsAdded++) { + MissionObject mission = (MissionObject) core.objectService.createObject("object/mission/shared_mission_object.iff", object.getPlanet()); + + missionBag._add(mission); + } + + // TODO: Race abilities + object.addAbility("startDance"); + object.addAbility("startDance+basic"); + + object.addObjectToEquipList(datapad); + object.addObjectToEquipList(inventory); + object.addObjectToEquipList(bank); + object.addObjectToEquipList(missionBag); + object.addObjectToEquipList(appInventory); + + WeaponObject defaultWeapon = (WeaponObject) core.objectService.createObject("object/weapon/creature/shared_creature_default_weapon.iff", object.getPlanet()); + object.addObjectToEquipList(defaultWeapon); + object._add(defaultWeapon); + object.setWeaponId(defaultWeapon.getObjectID()); + + IntangibleObject pda = (IntangibleObject) core.objectService.createObject("object/intangible/data_item/shared_guild_stone.iff", object.getPlanet()); + datapad.add(pda); + + createStarterClothing(object, sharedRaceTemplate, clientCreateCharacter.getStarterProfession()); + //core.scriptService.callScript("scripts/", "demo", "CreateStartingCharacter", core, object); + + core.getSWGObjectODB().put(object.getObjectID(), object); PreparedStatement ps = databaseConnection.preparedStatement("INSERT INTO characters (id, \"firstName\", \"lastName\", \"accountId\", \"galaxyId\", \"statusId\", appearance, gmflag) VALUES (?, ?, ?, ?, ?, ?, ?, ?)"); ps.setLong(1, object.getObjectID()); @@ -298,73 +360,99 @@ public class CharacterService implements INetworkDispatch { CreateCharacterSuccess success = new CreateCharacterSuccess(object.getObjectID()); session.write(new HeartBeatMessage().serialize()); session.write(core.loginService.getLoginCluster().serialize()); - session.write(core.loginService.getLoginClusterStatus().serialize()); + session.write(core.loginService.getLoginClusterStatus(client).serialize()); + + session.write(success.serialize()); + } + + }); + + swgOpcodes.put(Opcodes.NewbieTutorialResponse, new INetworkRemoteEvent() { + + @Override + public void handlePacket(IoSession session, IoBuffer buffer) throws Exception { + + } + + }); + + swgOpcodes.put(Opcodes.SetJediSlotInfo, new INetworkRemoteEvent() { + + @Override + public void handlePacket(IoSession session, IoBuffer buffer) throws Exception { - session.write(success.serialize()); - session.write((new ClientMfdStatusUpdateMessage((float) 2, "/GroundHUD.MFDStatus.vsp.role.targetLevel")).serialize()); } }); } - private boolean checkForDuplicateName(String firstName) throws SQLException + private boolean checkForDuplicateName(String firstName, long accountId) throws SQLException { firstName = firstName.replace("'", "''"); firstName = firstName.toLowerCase(); - PreparedStatement ps = databaseConnection.preparedStatement("SELECT id FROM characters WHERE LOWER(\"firstName\") ='" + firstName + "'"); + PreparedStatement ps = databaseConnection.preparedStatement("SELECT id FROM characters WHERE LOWER(\"firstName\")=?"); + ps.setString(1, firstName); + //System.out.println(ps.toString()); ResultSet resultSet = ps.executeQuery(); - - boolean bool = resultSet.next(); + + boolean isDuplicate = resultSet.next(); resultSet.getStatement().close(); - return bool; - } - + if (isDuplicate) { return true; } + //FIXME: this is a bit lazy... but it's only temporary :p + PreparedStatement psc = databaseConnection.preparedStatement("SELECT * FROM pg_tables WHERE \"tablename\"=?"); + psc.setString(1, "temp_reserved_char_names"); + ResultSet resultSetC = psc.executeQuery(); + boolean tableExists = resultSetC.next(); + resultSetC.getStatement().close(); + if (!tableExists) { return false; } + + PreparedStatement ps2 = databaseConnection.preparedStatement("SELECT \"accountId\" FROM temp_reserved_char_names WHERE \"accountId\"!=? AND LOWER(\"firstName\")=?"); + ps2.setLong(1, accountId); + ps2.setString(2, firstName.toLowerCase()); + ResultSet resultSet2 = ps2.executeQuery(); + boolean isReserved = resultSet2.next(); + resultSet2.getStatement().close(); + + return isReserved; + } + + private String getfirstName(String Name, String RaceTemplate) { - String[] splitName; - if (RaceTemplate != "object/creature/player/wookiee_male.iff" | RaceTemplate != "object/creature/player/wookiee_female.iff") - { // wookies don't have lastNames - if (Name.contains(" ")) - { - splitName = Name.split(" ", 2); - return splitName[0]; - } - else - { + if (RaceTemplate.contains("/wookiee_") || + !Name.contains(" ")) + { // wookiees don't have lastNames return Name; - } - } - else - { - return Name; } + + return Name.split(" ", 2)[0]; + } private String getlastName(String Name, String RaceTemplate) { - String[] splitName; - if (RaceTemplate != "object/creature/player/wookiee_male.iff" && RaceTemplate != "object/creature/player/wookiee_female.iff") - { // wookies don't have lastNames - if (Name.contains(" ")) - { - splitName = Name.split(" ", 2); - return splitName[1]; - } - else - { - return ""; - } - } - else - { + if (RaceTemplate.contains("/wookiee_") || + !Name.contains(" ")) + { // wookiees don't have lastNames return ""; } + + return Name.split(" ", 2)[1]; + } private String checkForReservedName(String firstName, String lastName) throws SQLException { + + PreparedStatement psc = databaseConnection.preparedStatement("SELECT * FROM pg_tables WHERE \"tablename\"=?"); + psc.setString(1, "reservednames"); + ResultSet rsc = psc.executeQuery(); + if (!rsc.next()) { + return null; + } + firstName = firstName.toLowerCase(); lastName = lastName.toLowerCase(); @@ -408,5 +496,162 @@ public class CharacterService implements INetworkDispatch { // TODO Auto-generated method stub } + + public int getNumberOfCharacters(int accountId) { + PreparedStatement preparedStatement; + int characters = 0; + try { + preparedStatement = databaseConnection.preparedStatement("SELECT * FROM characters WHERE \"accountId\"=" + accountId + ""); + ResultSet resultSet = preparedStatement.executeQuery(); + while(resultSet.next() && !resultSet.isClosed()) + characters++; + } catch (SQLException e) { + e.printStackTrace(); + } + return characters; + } + + /** + * Checks the database for if the name of the player exists. The name is + * formated automatically in the method for checking the database, so no conversion is required. + * @param name Name to check for in the database + * @return Returns True if the player exists + */ + public boolean playerExists(String name) { + if (!name.equals("")) { + if (name.contains(" ")) { + name = name.split(" ")[0]; + } + name = name.toLowerCase(); + try { + PreparedStatement ps = databaseConnection.preparedStatement("SELECT id FROM characters WHERE LOWER(\"firstName\")=?"); + ps.setString(1, name); + ResultSet resultSet = ps.executeQuery(); + + boolean isDuplicate = resultSet.next(); + resultSet.getStatement().close(); + if (isDuplicate) { return true; } + else { return false; } + } + + catch (SQLException e) { e.printStackTrace(); } + } + return false; + } + + /** + * Checks the database if a player with the given first name exists + * and returns the objectID of that player. + * @param name : String + * @return objectID : long + */ + public long getPlayerOID(String name) { + if (!name.equals("")) { + long oid = 0L; + try { + PreparedStatement ps = databaseConnection.preparedStatement("SELECT * FROM characters WHERE \"firstName\"=?"); + ps.setString(1, name); + ResultSet resultSet = ps.executeQuery(); + while (resultSet.next()) { + oid = resultSet.getLong("id"); + } + return oid; + } + + catch (SQLException e) { e.printStackTrace(); } + } + return 0L; + } + + /** + * Delivers the first name of a player + * @param oid : long + * @return firstName : String + */ + public String getPlayerFirstName(long oid) { + + String name = ""; + try { + PreparedStatement ps = databaseConnection.preparedStatement("SELECT * FROM characters WHERE \"id\"=?"); + ps.setLong(1, oid); + ResultSet resultSet = ps.executeQuery(); + while (resultSet.next()) { + name = resultSet.getString("firstName"); + if (!name.equals("")) { + if (name.contains(" ")) { + name = name.split(" ")[0]; + } + name = name.toLowerCase(); + + } + return name; + } + + } catch (SQLException e) { e.printStackTrace(); } + + return ""; + } + + /** + * Checks the database for if the object ID of the player exists. + * @param objectId Object ID to check for in the database + * @return Returns True if the player exists + */ + public boolean playerExists(long objectId) { + + try { + PreparedStatement ps = databaseConnection.preparedStatement("SELECT id FROM characters WHERE id=?"); + ps.setLong(1, objectId); + ResultSet resultSet = ps.executeQuery(); + + boolean isDuplicate = resultSet.next(); + resultSet.getStatement().close(); + if (isDuplicate) { return true; } + else { return false; } + } + + catch (SQLException e) { e.printStackTrace(); } + return false; + } + + /** + * Checks the database for the Account ID associated with the Object ID. + * Intended for GM use only! + * @param objectId Object ID of the player, used to obtain the Account ID. + * @return Returns Account ID + */ + public int getAccountId(long objectId) { + try { + PreparedStatement ps = databaseConnection.preparedStatement("SELECT * FROM characters WHERE id=?"); + ps.setLong(1, objectId); + ResultSet resultSet = ps.executeQuery(); + resultSet.next(); + return resultSet.getInt("accountId"); + } catch (SQLException e) { + e.printStackTrace(); + } + return 0; + } + + private void createStarterClothing(CreatureObject creature, String raceTemplate, String profession) { + try { + ProfessionTemplateVisitor visitor = ClientFileManager.loadFile("creation/profession_defaults_" + profession + ".iff", ProfessionTemplateVisitor.class); + TangibleObject inventory = (TangibleObject) creature.getSlottedObject("inventory"); + + if (inventory == null) + return; + + for(String item : visitor.getItems(raceTemplate)) { + TangibleObject createdItem = (TangibleObject) core.objectService.createObject(item, creature.getPlanet()); + + if (createdItem == null) + return; + + creature._add(createdItem); + creature.addObjectToEquipList(createdItem); + } + } + catch (InstantiationException | IllegalAccessException e) { e.printStackTrace();} + } } diff --git a/src/services/ConnectionService.java b/src/services/ConnectionService.java index b094b647..ea22298d 100644 --- a/src/services/ConnectionService.java +++ b/src/services/ConnectionService.java @@ -25,7 +25,15 @@ import java.nio.ByteOrder; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; +import java.util.Collection; +import java.util.HashSet; +import java.util.Iterator; +import java.util.List; import java.util.Map; +import java.util.concurrent.Executors; +import java.util.concurrent.ScheduledExecutorService; +import java.util.concurrent.ScheduledFuture; +import java.util.concurrent.TimeUnit; import main.NGECore; @@ -39,12 +47,17 @@ import protocol.swg.ConnectionServerLagResponse; import protocol.swg.GalaxyLoopTimesResponse; import protocol.swg.GameServerLagResponse; import protocol.swg.HeartBeatMessage; - import engine.clients.Client; import engine.resources.database.DatabaseConnection; +import engine.resources.scene.Point3D; import engine.resources.service.INetworkDispatch; import engine.resources.service.INetworkRemoteEvent; import resources.common.*; +import resources.common.collidables.AbstractCollidable; +import resources.datatables.PlayerFlags; +import resources.objects.creature.CreatureObject; +import resources.objects.player.PlayerObject; +import services.chat.ChatRoom; @SuppressWarnings("unused") @@ -53,12 +66,37 @@ public class ConnectionService implements INetworkDispatch { private NGECore core; private DatabaseConnection databaseConnection; private DatabaseConnection databaseConnection2; + private int maxNumberOfCharacters; + private final ScheduledExecutorService scheduler = Executors.newScheduledThreadPool(1); - public ConnectionService(NGECore core) { + public ConnectionService(final NGECore core) { this.core = core; this.databaseConnection = core.getDatabase1(); this.databaseConnection2 = core.getDatabase2(); + this.maxNumberOfCharacters = core.getConfig().getInt("MAXNUMBEROFCHARACTERS"); + + scheduler.scheduleAtFixedRate(new Runnable() { + + public void run() { + synchronized(core.getActiveConnectionsMap()) { + for(Client c : core.getActiveConnectionsMap().values()) { + if(c.getParent() != null) { + if ((System.currentTimeMillis() - c.getSession().getLastReadTime()) > 300000) { + try { + disconnect(c); + } catch (Exception e) { + System.err.println("ConnectionService:disconnect(): Error disconnecting client."); + e.printStackTrace(); + } + } + } + } + } + } + + + }, 10, 10, TimeUnit.MINUTES); } @@ -69,12 +107,13 @@ public class ConnectionService implements INetworkDispatch { @Override public void handlePacket(IoSession session, IoBuffer data) throws Exception { + data = data.order(ByteOrder.LITTLE_ENDIAN); ClientIdMsg clientIdMsg = new ClientIdMsg(); data.position(0); clientIdMsg.deserialize(data); - Client client = core.getClient((Integer) session.getAttribute("connectionId")); + Client client = core.getClient(session); if(client == null) { System.out.println("NULL Client"); return; @@ -84,19 +123,22 @@ public class ConnectionService implements INetworkDispatch { PreparedStatement preparedStatement; try { - + preparedStatement = databaseConnection.preparedStatement("SELECT * FROM sessions WHERE key=?"); preparedStatement.setBytes(1, clientIdMsg.getSessionKey()); resultSet = preparedStatement.executeQuery(); if (resultSet.next()) { - client.setAccountId(resultSet.getInt("accountId")); + client.setAccountId(resultSet.getLong("accountId")); + client.setSessionKey(clientIdMsg.getSessionKey()); + client.setGM(core.loginService.checkForGmPermission((int) resultSet.getLong("accountId"))); AccountFeatureBits accountFeatureBits = new AccountFeatureBits(); - ClientPermissionsMessage clientPermissionsMessage = new ClientPermissionsMessage(); + ClientPermissionsMessage clientPermissionsMessage = new ClientPermissionsMessage(maxNumberOfCharacters - core.characterService.getNumberOfCharacters((int) resultSet.getLong("accountId"))); session.write(new HeartBeatMessage().serialize()); session.write(accountFeatureBits.serialize()); session.write(clientPermissionsMessage.serialize()); preparedStatement.close(); + } else { System.out.println("Cant get login session"); } @@ -105,8 +147,8 @@ public class ConnectionService implements INetworkDispatch { e.printStackTrace(); - } - + } + } @@ -138,9 +180,150 @@ public class ConnectionService implements INetworkDispatch { } }); + + swgOpcodes.put(Opcodes.ConnectPlayerMessage, new INetworkRemoteEvent() { + @Override + public void handlePacket(IoSession session, IoBuffer data) throws Exception { + //ConnectPlayerResponseMessage + } + + }); } + + public void disconnect(Client client) { + //Client client = core.getClient(session); + IoSession session = client.getSession(); + if(session == null || client.getParent() == null) + return; + + CreatureObject object = (CreatureObject) client.getParent(); + + try { + object.setInviteCounter(0); + object.setInviteSenderId(0); + object.setInviteSenderName(""); + } catch (Exception e) { + e.printStackTrace(); + } + + try { + if(object.getAttachment("inspireDuration") != null) + object.setAttachment("inspireDuration", null); + + if(object.getPerformanceListenee() != null) { + object.getPerformanceListenee().removeSpectator(object); + object.setPerformanceListenee(null); + } + + if(object.getPerformanceWatchee() != null) { + object.getPerformanceWatchee().removeSpectator(object); + object.setPerformanceWatchee(null); + } + } catch (Exception e) { + e.printStackTrace(); + } + + try { + core.groupService.handleGroupDisband(object, false); + } catch (Exception e) { + e.printStackTrace(); + } + + try { + if (core.instanceService.isInInstance(object)) { + core.instanceService.remove(core.instanceService.getActiveInstance(object), object); + } + } catch (Exception e) { + e.printStackTrace(); + } + + object.setClient(null); + + PlayerObject ghost = (PlayerObject) object.getSlottedObject("ghost"); + + if(ghost == null) + return; + + Point3D objectPos = object.getWorldPosition(); + + try { + List collidables = core.simulationService.getCollidables(object.getPlanet(), objectPos.x, objectPos.z, 512); + + collidables.forEach(c -> c.removeCollidedObject(object)); + } catch (Exception e) { + e.printStackTrace(); + } + + try { + if (ghost != null) { + String objectShortName = object.getCustomName(); + + if (object.getCustomName().contains(" ")) { + String[] splitName = object.getCustomName().toLowerCase().split(" "); + objectShortName = splitName[0]; + } + + core.chatService.playerStatusChange(objectShortName, (byte) 0); + } + } catch (Exception e) { + e.printStackTrace(); + } + + long parentId = object.getParentId(); + + /*if(object.getContainer() == null) { + boolean remove = core.simulationService.remove(object, object.getPosition().x, object.getPosition().z); + if(remove) + System.out.println("Successful quadtree remove"); + } else { + object.getContainer()._remove(object); + object.setParentId(parentId); + }*/ + + + /*HashSet oldObservers = new HashSet(object.getObservers()); + for(Iterator it = oldObservers.iterator(); it.hasNext();) { + Client observerClient = it.next(); + if(observerClient.getParent() != null && !(observerClient.getSession() == session)) { + observerClient.getParent().makeUnaware(object); + } + }*/ + + try { + if (core.getBountiesODB().contains(object.getObjectID())) { + core.missionService.getBountyMap().remove(core.getBountiesODB().get(object.getObjectID())); + } + } catch (Exception e) { + e.printStackTrace(); + } + + ghost.toggleFlag(PlayerFlags.LD); + + object.setPerformanceListenee(null); + object.setPerformanceWatchee(null); + object.setAttachment("disconnectTask", null); + + try { + List> schedulers = core.playerService.getSchedulers().get(object.getObjectID()); + if(schedulers != null) { + schedulers.forEach(s -> s.cancel(true)); + schedulers.clear(); + } + core.playerService.getSchedulers().remove(object.getObjectID()); + } catch (Exception e) { + e.printStackTrace(); + } + + try { + core.getSWGObjectODB().put(object.getObjectID(), object); + core.objectService.destroyObject(object); + } catch (Exception e) { + e.printStackTrace(); + } + } + @Override public void shutdown() { diff --git a/src/services/ConversationService.java b/src/services/ConversationService.java new file mode 100644 index 00000000..29dd18ec --- /dev/null +++ b/src/services/ConversationService.java @@ -0,0 +1,150 @@ +/******************************************************************************* + * Copyright (c) 2013 + * + * This File is part of NGECore2. + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see . + * + * Using NGEngine to work with NGECore2 is making a combined work based on NGEngine. + * Therefore all terms and conditions of the GNU Lesser General Public License cover the combination. + ******************************************************************************/ +package services; + +import java.util.Map; +import java.util.Vector; +import java.util.concurrent.ConcurrentHashMap; + +import org.python.core.Py; +import org.python.core.PyObject; + +import protocol.swg.ObjControllerMessage; +import protocol.swg.objectControllerObjects.NpcConversationMessage; +import protocol.swg.objectControllerObjects.NpcConversationOptions; +import protocol.swg.objectControllerObjects.StartNpcConversation; +import protocol.swg.objectControllerObjects.StopNpcConversation; +import resources.common.ConversationOption; +import resources.common.OutOfBand; +import resources.objects.creature.CreatureObject; +import resources.objects.tangible.TangibleObject; +import main.NGECore; +import engine.resources.service.INetworkDispatch; +import engine.resources.service.INetworkRemoteEvent; + +public class ConversationService implements INetworkDispatch { + + private NGECore core; + private Map conversationHandlers = new ConcurrentHashMap(); + + public ConversationService(NGECore core) { + this.core = core; + } + + public void handleStartConversation(CreatureObject player, TangibleObject npc) { + if(npc.getAttachment("conversationFile") == null) + return; + + if(player.getConversingNpc() != null && player.getConversingNpc() != npc) + handleEndConversation(player, player.getConversingNpc()); + + core.simulationService.faceTarget(npc, player); + + player.setConversingNpc(npc); + sendStartConversation(player, npc); + core.scriptService.callScript("scripts/conversation/", (String) npc.getAttachment("conversationFile"), "startConversation", core, player, npc); + } + + public void handleConversationSelection(CreatureObject player, int selectionId) { + + TangibleObject npc = player.getConversingNpc(); + + if(npc == null) { + System.out.println("npc is null"); + return; + } + + PyObject func = conversationHandlers.get(player); + + if(func == null) { + System.out.println("handler func is null"); + return; + } + + conversationHandlers.remove(player); + func.__call__(Py.java2py(core), Py.java2py(player), Py.java2py(npc), Py.java2py(selectionId)); + + } + + public void handleEndConversation(CreatureObject player, TangibleObject npc) { + + conversationHandlers.remove(player); + player.setConversingNpc(null); + core.scriptService.callScript("scripts/conversation/", (String) npc.getAttachment("conversationFile"), "endConversation", core, player, npc); + + } + + public void sendStartConversation(CreatureObject player, TangibleObject npc) { + if(player.getClient() == null) + return; + + StartNpcConversation startConvo = new StartNpcConversation(player.getObjectID(), npc.getObjectID()); + ObjControllerMessage objController = new ObjControllerMessage(0x0B, startConvo); + player.getClient().getSession().write(objController.serialize()); + } + + public void sendStopConversation(CreatureObject player, TangibleObject npc, String stfFile, String stfLabel) { + if(player.getClient() == null) + return; + + StopNpcConversation stopConvo = new StopNpcConversation(player.getObjectID(), npc.getObjectID(), stfFile, stfLabel); + ObjControllerMessage objController = new ObjControllerMessage(0x0B, stopConvo); + player.getClient().getSession().write(objController.serialize()); + } + + public void sendConversationMessage(CreatureObject player, TangibleObject npc, OutOfBand outOfBand) { + if(player.getClient() == null) + return; + + NpcConversationMessage convoMessage = new NpcConversationMessage(player.getObjectID(), outOfBand); + ObjControllerMessage objController = new ObjControllerMessage(0x0B, convoMessage); + player.getClient().getSession().write(objController.serialize()); + } + + public void sendConversationOptions(CreatureObject player, TangibleObject npc, Vector options, PyObject handler) { + if(player.getClient() == null) + return; + + conversationHandlers.put(player, handler); + + NpcConversationOptions convoOptions = new NpcConversationOptions(player.getObjectID()); + options.forEach(convoOptions::addOption); + ObjControllerMessage objController = new ObjControllerMessage(0x0B, convoOptions); + player.getClient().getSession().write(objController.serialize()); + } + + + @Override + public void insertOpcodes(Map arg0, + Map arg1) { + // TODO Auto-generated method stub + + } + + @Override + public void shutdown() { + // TODO Auto-generated method stub + + } + + +} diff --git a/src/services/DevService.java b/src/services/DevService.java new file mode 100644 index 00000000..18a090fa --- /dev/null +++ b/src/services/DevService.java @@ -0,0 +1,1328 @@ +/******************************************************************************* + * Copyright (c) 2013 + * + * This File is part of NGECore2. + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see . + * + * Using NGEngine to work with NGECore2 is making a combined work based on NGEngine. + * Therefore all terms and conditions of the GNU Lesser General Public License cover the combination. + ******************************************************************************/ +package services; + +import java.nio.ByteOrder; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.Random; +import java.util.Vector; + +import org.apache.mina.core.buffer.IoBuffer; +import org.apache.mina.core.session.IoSession; + +import resources.common.Console; +import resources.common.FileUtilities; +import resources.common.Opcodes; +import resources.common.SpawnPoint; +import resources.datatables.WeaponType; +import resources.harvest.SurveyTool; +import resources.objects.building.BuildingObject; +import resources.objects.creature.CreatureObject; +import resources.objects.player.PlayerObject; +import resources.objects.tangible.TangibleObject; +import resources.objects.weapon.WeaponObject; +import services.sui.SUIWindow; +import services.sui.SUIService.ListBoxType; +import services.sui.SUIWindow.SUICallback; +import services.sui.SUIWindow.Trigger; +import main.NGECore; +import engine.clientdata.ClientFileManager; +import engine.clientdata.visitors.DatatableVisitor; +import engine.clients.Client; +import engine.resources.objects.SWGObject; +import engine.resources.scene.Planet; +import engine.resources.scene.Point3D; +import engine.resources.service.INetworkDispatch; +import engine.resources.service.INetworkRemoteEvent; + +@SuppressWarnings("unused") +public class DevService implements INetworkDispatch { + + private NGECore core; + + public DevService(NGECore core) { + this.core = core; + } + + public void sendCharacterBuilderSUI(CreatureObject creature, int childMenu) + { + Map suiOptions = new HashMap(); + + switch(childMenu) + { + case 0: // Root + suiOptions.put((long) 1, "Character"); + suiOptions.put((long) 2, "Items"); + suiOptions.put((long) 3, "Locations"); + break; + case 1: // Character + suiOptions.put((long) 10, "Set combat level to 90"); + suiOptions.put((long) 11, "Give 100,000 credits"); + break; + case 2: // Items + suiOptions.put((long) 20, "Armor"); + suiOptions.put((long) 21, "Weapons"); + suiOptions.put((long) 22, "Misc Items"); + suiOptions.put((long) 23, "Jedi Items"); + suiOptions.put((long) 26, "Installations"); + suiOptions.put((long) 110, "Survey Devices"); + if(creature.getPlayerObject().getProfession().equals("bounty_hunter_1a")) suiOptions.put((long) 123, "Tracking Droids"); + if (creature.getClient().isGM()) { + suiOptions.put((long) 120, "House Deeds"); + suiOptions.put((long) 125, "Crafting Tools"); + suiOptions.put((long) 130, "Vehicle Deeds"); + suiOptions.put((long) 121, "Sandbox City"); + } + + break; + case 3: // [Items] Weapons + suiOptions.put((long) 30, "Jedi Weapons"); + suiOptions.put((long) 31, "Melee Weapons"); + suiOptions.put((long) 32, "Ranged Weapons"); + suiOptions.put((long) 33, "Heavy Weapons"); + break; + case 4: // [Items] Misc Items + suiOptions.put((long) 40, "Unity Ring"); + suiOptions.put((long) 41, "Tusken Rucksack"); + suiOptions.put((long) 42, "Heroism Jewlery Set"); + suiOptions.put((long) 43, "Breath of Heaven"); + suiOptions.put((long) 140, "Guild Registry Device (PDA)"); + break; + case 5: // [Items] Armor + suiOptions.put((long) 50, "Assault Armor"); + suiOptions.put((long) 51, "Battle Armor"); + suiOptions.put((long) 52, "Reconnaissance Armor"); + break; + case 6: // [Items] Assault Armor + suiOptions.put((long) 60, "Composite"); + suiOptions.put((long) 61, "Ithorian Sentinel"); + suiOptions.put((long) 62, "Kashyyykian Hunting"); + break; + case 7: // [Items] Battle Armor + suiOptions.put((long) 70, "Bone"); + suiOptions.put((long) 71, "Ithorian Defender"); + suiOptions.put((long) 72, "Kashyyykian Black Mountain"); + break; + case 8: // [Items] Reconnaissance Armor + suiOptions.put((long) 80, "Marauder"); + suiOptions.put((long) 81, "Ithorian Guardian"); + suiOptions.put((long) 82, "Kashyyykian Ceremonial"); + break; + case 9: // [Items] Jedi Items + suiOptions.put((long) 90, "(Light) Jedi Robe"); + suiOptions.put((long) 91, "(Dark) Jedi Robe"); + suiOptions.put((long) 92, "Belt of Master Bodo Baas"); + suiOptions.put((long) 93, "Lightsaber Crystals"); + break; + case 10: // [Items] Jedi Items + suiOptions.put((long) 111, "Harvesters"); + suiOptions.put((long) 112, "Energy resources"); + break; + case 11: // Locations + suiOptions.put((long) 122, "Teleport to Jedi Ruins"); + suiOptions.put((long) 124, "Teleport to Mos Eisley"); + if (creature.getClient().isGM()) { + suiOptions.put((long) 164, "Teleport to Mining Outpost"); + suiOptions.put((long) 165, "Teleport to Spawn Area #1"); + suiOptions.put((long) 166, "Teleport to Imperial Op"); + suiOptions.put((long) 167, "Teleport to Rebel Base "); + suiOptions.put((long) 168, "Teleport to NS vs SMC Battle"); + suiOptions.put((long) 153, "Teleport to Force Crystal Hunter's Cave"); + suiOptions.put((long) 121, "Teleport to Sandbox City"); + } + break; + + } + + final SUIWindow window = core.suiService.createListBox(ListBoxType.LIST_BOX_OK_CANCEL, "Character Builder Terminal", "Select the desired option and click OK.", suiOptions, creature, null, 10); + Vector returnList = new Vector(); + + returnList.add("List.lstList:SelectedRow"); + + window.addHandler(0, "", Trigger.TRIGGER_OK, returnList, new SUICallback() + { + public void process(SWGObject owner, int eventType, Vector returnList) + { + int index = Integer.parseInt(returnList.get(0)); + int childIndex = (int) window.getObjectIdByIndex(index); + + CreatureObject player = (CreatureObject) owner; + SWGObject inventory = player.getSlottedObject("inventory"); + Planet planet = player.getPlanet(); + + switch(childIndex) + { + // Root + case 1: // Character + sendCharacterBuilderSUI(player, 1); + return; + case 2: // Items + sendCharacterBuilderSUI(player, 2); + return; + case 3: // Locations + sendCharacterBuilderSUI(player, 11); + return; + + // Character + case 10: // Set combat level to 90 + core.playerService.grantLevel(player, 90); // Commented out until fixed + //core.playerService.giveExperience(player, 999999999); + return; + case 11: // Give 100,000 credits + player.setCashCredits(player.getCashCredits() + 100000); + return; + + // Items + case 20: // Armor + sendCharacterBuilderSUI(player, 5); + return; + case 21: // Weapons + sendCharacterBuilderSUI(player, 3); + return; + case 22: // Misc Items + sendCharacterBuilderSUI(player, 4); + return; + case 23: // Jedi Items + sendCharacterBuilderSUI(player, 9); + return; + case 25: // Tools + sendCharacterBuilderSUI(player, 15); + return; + case 26: // Installations + sendCharacterBuilderSUI(player, 10); + return; + + // [Items] Weapons + case 30: // Jedi Weapons + WeaponObject lightsaber1 = (WeaponObject) core.objectService.createObject("object/weapon/melee/sword/crafted_saber/shared_sword_lightsaber_one_handed_gen5.iff", planet); + lightsaber1.setIntAttribute("required_combat_level", 90); + lightsaber1.setStringAttribute("class_required", "Jedi"); + lightsaber1.setAttackSpeed(1); + lightsaber1.setDamageType("energy"); + lightsaber1.setMaxRange(5); + lightsaber1.setMinDamage(689); + lightsaber1.setMaxDamage(1379); + lightsaber1.setWeaponType(WeaponType.ONEHANDEDSABER); + + WeaponObject lightsaber2 = (WeaponObject) core.objectService.createObject("object/weapon/melee/2h_sword/crafted_saber/shared_sword_lightsaber_two_handed_gen5.iff", planet); + lightsaber2.setIntAttribute("required_combat_level", 90); + lightsaber2.setStringAttribute("class_required", "Jedi"); + lightsaber2.setAttackSpeed(1); + lightsaber2.setDamageType("energy"); + lightsaber2.setMaxRange(5); + lightsaber2.setMinDamage(689); + lightsaber2.setMaxDamage(1379); + lightsaber2.setWeaponType(WeaponType.TWOHANDEDSABER); + + WeaponObject lightsaber3 = (WeaponObject) core.objectService.createObject("object/weapon/melee/polearm/crafted_saber/shared_sword_lightsaber_polearm_gen5.iff", planet); + lightsaber3.setIntAttribute("required_combat_level", 90); + lightsaber3.setStringAttribute("class_required", "Jedi"); + lightsaber3.setAttackSpeed(1); + lightsaber3.setDamageType("energy"); + lightsaber3.setMaxRange(5); + lightsaber3.setMinDamage(689); + lightsaber3.setMaxDamage(1379); + lightsaber3.setWeaponType(WeaponType.POLEARMSABER); + + Random random = new Random(); + + lightsaber1.setCustomizationVariable("/private/index_color_blade", (byte) random.nextInt(47)); + lightsaber2.setCustomizationVariable("/private/index_color_blade", (byte) random.nextInt(47)); + lightsaber3.setCustomizationVariable("/private/index_color_blade", (byte) random.nextInt(47)); + + inventory.add(lightsaber1); + inventory.add(lightsaber2); + inventory.add(lightsaber3); + return; + case 31: // Melee Weapons + WeaponObject sword1 = (WeaponObject) core.objectService.createObject("object/weapon/melee/sword/shared_sword_01.iff", planet); + sword1.setIntAttribute("required_combat_level", 90); + sword1.setAttackSpeed(1); + sword1.setMaxRange(5); + sword1.setDamageType("kinetic"); + sword1.setMinDamage(1100); + sword1.setMaxDamage(1200); + sword1.setWeaponType(WeaponType.ONEHANDEDMELEE); + + inventory.add(sword1); + return; + case 32: // Ranged Weapons + WeaponObject rifle1 = (WeaponObject) core.objectService.createObject("object/weapon/ranged/rifle/shared_rifle_e11.iff", planet); + rifle1.setIntAttribute("required_combat_level", 90); + rifle1.setAttackSpeed((float) 0.8); + rifle1.setMaxRange(64); + rifle1.setDamageType("energy"); + rifle1.setMinDamage(800); + rifle1.setMaxDamage(1250); + rifle1.setWeaponType(WeaponType.RIFLE); + + // inventory.add(rifle1); + + WeaponObject carbine1 = (WeaponObject) core.objectService.createObject("object/weapon/ranged/carbine/shared_carbine_cdef.iff", planet); + carbine1.setIntAttribute("required_combat_level", 90); + carbine1.setAttackSpeed((float) 0.6); + carbine1.setMaxRange(50); + carbine1.setDamageType("energy"); + carbine1.setMinDamage(600); + carbine1.setMaxDamage(937); + carbine1.setWeaponType(WeaponType.CARBINE); + + inventory.add(carbine1); + + WeaponObject pistol = (WeaponObject) core.objectService.createObject("object/weapon/ranged/pistol/shared_pistol_cdef.iff", planet); + pistol.setIntAttribute("required_combat_level", 90); + pistol.setAttackSpeed((float) 0.4); + pistol.setMaxRange(35); + pistol.setDamageType("energy"); + pistol.setMinDamage(400); + pistol.setMaxDamage(625); + pistol.setWeaponType(WeaponType.PISTOL); + + inventory.add(pistol); + return; + + case 33: + WeaponObject heavy1 = (WeaponObject) core.objectService.createObject("object/weapon/ranged/heavy/shared_som_lava_cannon_generic.iff", planet); + heavy1.setIntAttribute("required_combat_level", 90); + + heavy1.setStringAttribute("class_required", "Commando"); + heavy1.setDamageType("energy"); + heavy1.setMinDamage(700); + heavy1.setMaxDamage(1400); + heavy1.setMaxRange(64); + heavy1.setAttackSpeed(1); + heavy1.setElementalType("heat"); + heavy1.setElementalDamage(200); + heavy1.setWeaponType(WeaponType.HEAVYWEAPON); + + inventory.add(heavy1); + + WeaponObject heavy2 = (WeaponObject) core.objectService.createObject("object/weapon/ranged/heavy/shared_som_republic_flamer.iff", planet); + heavy2.setIntAttribute("required_combat_level", 88); + + heavy2.setStringAttribute("class_required", "Commando"); + heavy2.setDamageType("energy"); + heavy2.setMinDamage(148); + heavy2.setMaxDamage(295); + heavy2.setMaxRange(20); + heavy2.setAttackSpeed((float) 0.25); + heavy2.setElementalType("heat"); + heavy2.setElementalDamage(28); + heavy2.setWeaponType(WeaponType.FLAMETHROWER); + + inventory.add(heavy2); + return; + case 40: + TangibleObject ring = (TangibleObject) core.objectService.createObject("object/tangible/wearables/ring/shared_ring_s01.iff", planet); + ring.setCustomName("Unity Ring"); + inventory.add(ring); + case 41: + TangibleObject backpack = (TangibleObject) core.objectService.createObject("object/tangible/wearables/backpack/shared_backpack_krayt_skull.iff", planet); + backpack.setIntAttribute("cat_stat_mod_bonus.@stat_n:agility_modified", 25); + backpack.setIntAttribute("cat_stat_mod_bonus.@stat_n:constitution_modified", 30); + backpack.setIntAttribute("cat_stat_mod_bonus.@stat_n:luck_modified", 25); + backpack.setIntAttribute("cat_stat_mod_bonus.@stat_n:precision_modified", 35); + backpack.setIntAttribute("cat_stat_mod_bonus.@stat_n:stamina_modified", 30); + backpack.setIntAttribute("cat_stat_mod_bonus.@stat_n:strength_modified", 35); + inventory.add(backpack); + return; + case 42: + TangibleObject heroismBand = (TangibleObject) core.objectService.createObject("object/tangible/wearables/ring/shared_ring_s04.iff", planet, "item_band_set_hero_01_01"); + + TangibleObject heroismRing = (TangibleObject) core.objectService.createObject("object/tangible/wearables/ring/shared_ring_s02.iff", planet, "item_ring_set_hero_01_01"); + + TangibleObject heroismNecklace = (TangibleObject) core.objectService.createObject("object/tangible/wearables/necklace/shared_necklace_s10.iff", planet, "item_necklace_set_hero_01_01"); + + TangibleObject heroismBraceletRight = (TangibleObject) core.objectService.createObject("object/tangible/wearables/bracelet/shared_bracelet_s03_r.iff", planet, "item_bracelet_r_set_hero_01_01"); + + TangibleObject heroismBraceletLeft = (TangibleObject) core.objectService.createObject("object/tangible/wearables/bracelet/shared_bracelet_s03_l.iff", planet, "item_bracelet_l_set_hero_01_01"); + + inventory.add(heroismBand); + inventory.add(heroismRing); + inventory.add(heroismNecklace); + inventory.add(heroismBraceletRight); + inventory.add(heroismBraceletLeft); + return; + case 43: + TangibleObject drink = (TangibleObject) core.objectService.createObject("object/tangible/food/crafted/shared_drink_breath_of_heaven.iff", planet); + drink.setFloatAttribute("cat_stat_mod_bonus.@stat_n:constitution_modified", 100); + drink.setFloatAttribute("cat_stat_mod_bonus.@stat_n:dodge", 3); + inventory.add(drink); + return; + case 50: // [Items] Assault Armor + sendCharacterBuilderSUI(player, 6); + return; + case 51: // [Items] Battle Armor + sendCharacterBuilderSUI(player, 7); + return; + case 52: // [Items] Reconnaissance Armor + sendCharacterBuilderSUI(player, 8); + return; + case 60: // Composite Armor + SWGObject comp_bicep_r = core.objectService.createObject("object/tangible/wearables/armor/composite/shared_armor_composite_bicep_r.iff", planet); + comp_bicep_r.setIntAttribute("cat_armor_standard_protection.armor_eff_kinetic", 7000); + comp_bicep_r.setIntAttribute("cat_armor_standard_protection.armor_eff_energy", 5000); + comp_bicep_r.setIntAttribute("cat_armor_special_protection.special_protection_type_heat", 6000); + comp_bicep_r.setIntAttribute("cat_armor_special_protection.special_protection_type_cold", 6000); + comp_bicep_r.setIntAttribute("cat_armor_special_protection.special_protection_type_acid", 6000); + comp_bicep_r.setIntAttribute("cat_armor_special_protection.special_protection_type_electricity", 6000); + + SWGObject comp_bicep_l = core.objectService.createObject("object/tangible/wearables/armor/composite/shared_armor_composite_bicep_l.iff", planet); + comp_bicep_l.setIntAttribute("cat_armor_standard_protection.armor_eff_kinetic", 7000); + comp_bicep_l.setIntAttribute("cat_armor_standard_protection.armor_eff_energy", 5000); + comp_bicep_l.setIntAttribute("cat_armor_special_protection.special_protection_type_heat", 6000); + comp_bicep_l.setIntAttribute("cat_armor_special_protection.special_protection_type_cold", 6000); + comp_bicep_l.setIntAttribute("cat_armor_special_protection.special_protection_type_acid", 6000); + comp_bicep_l.setIntAttribute("cat_armor_special_protection.special_protection_type_electricity", 6000); + + SWGObject comp_bracer_r = core.objectService.createObject("object/tangible/wearables/armor/composite/shared_armor_composite_bracer_r.iff", planet); + comp_bracer_r.setIntAttribute("cat_armor_standard_protection.armor_eff_kinetic", 7000); + comp_bracer_r.setIntAttribute("cat_armor_standard_protection.armor_eff_energy", 5000); + comp_bracer_r.setIntAttribute("cat_armor_special_protection.special_protection_type_heat", 6000); + comp_bracer_r.setIntAttribute("cat_armor_special_protection.special_protection_type_cold", 6000); + comp_bracer_r.setIntAttribute("cat_armor_special_protection.special_protection_type_acid", 6000); + comp_bracer_r.setIntAttribute("cat_armor_special_protection.special_protection_type_electricity", 6000); + + SWGObject comp_bracer_l = core.objectService.createObject("object/tangible/wearables/armor/composite/shared_armor_composite_bracer_l.iff", planet); + comp_bracer_l.setIntAttribute("cat_armor_standard_protection.armor_eff_kinetic", 7000); + comp_bracer_l.setIntAttribute("cat_armor_standard_protection.armor_eff_energy", 5000); + comp_bracer_l.setIntAttribute("cat_armor_special_protection.special_protection_type_heat", 6000); + comp_bracer_l.setIntAttribute("cat_armor_special_protection.special_protection_type_cold", 6000); + comp_bracer_l.setIntAttribute("cat_armor_special_protection.special_protection_type_acid", 6000); + comp_bracer_l.setIntAttribute("cat_armor_special_protection.special_protection_type_electricity", 6000); + + SWGObject comp_leggings = core.objectService.createObject("object/tangible/wearables/armor/composite/shared_armor_composite_leggings.iff", planet); + comp_leggings.setIntAttribute("cat_armor_standard_protection.armor_eff_kinetic", 7000); + comp_leggings.setIntAttribute("cat_armor_standard_protection.armor_eff_energy", 5000); + comp_leggings.setIntAttribute("cat_armor_special_protection.special_protection_type_heat", 6000); + comp_leggings.setIntAttribute("cat_armor_special_protection.special_protection_type_cold", 6000); + comp_leggings.setIntAttribute("cat_armor_special_protection.special_protection_type_acid", 6000); + comp_leggings.setIntAttribute("cat_armor_special_protection.special_protection_type_electricity", 6000); + + SWGObject comp_helmet = core.objectService.createObject("object/tangible/wearables/armor/composite/shared_armor_composite_helmet.iff", planet); + comp_helmet.setIntAttribute("cat_armor_standard_protection.armor_eff_kinetic", 7000); + comp_helmet.setIntAttribute("cat_armor_standard_protection.armor_eff_energy", 5000); + comp_helmet.setIntAttribute("cat_armor_special_protection.special_protection_type_heat", 6000); + comp_helmet.setIntAttribute("cat_armor_special_protection.special_protection_type_cold", 6000); + comp_helmet.setIntAttribute("cat_armor_special_protection.special_protection_type_acid", 6000); + comp_helmet.setIntAttribute("cat_armor_special_protection.special_protection_type_electricity", 6000); + + SWGObject comp_chest = core.objectService.createObject("object/tangible/wearables/armor/composite/shared_armor_composite_chest_plate.iff", planet); + comp_chest.setIntAttribute("cat_armor_standard_protection.armor_eff_kinetic", 7000); + comp_chest.setIntAttribute("cat_armor_standard_protection.armor_eff_energy", 5000); + comp_chest.setIntAttribute("cat_armor_special_protection.special_protection_type_heat", 6000); + comp_chest.setIntAttribute("cat_armor_special_protection.special_protection_type_cold", 6000); + comp_chest.setIntAttribute("cat_armor_special_protection.special_protection_type_acid", 6000); + comp_chest.setIntAttribute("cat_armor_special_protection.special_protection_type_electricity", 6000); + + SWGObject comp_boots = core.objectService.createObject("object/tangible/wearables/armor/composite/shared_armor_composite_boots.iff", planet); + SWGObject comp_gloves = core.objectService.createObject("object/tangible/wearables/armor/composite/shared_armor_composite_gloves.iff", planet); + + + + inventory.add(comp_bicep_r); + inventory.add(comp_bicep_l); + inventory.add(comp_bracer_r); + inventory.add(comp_bracer_l); + inventory.add(comp_leggings); + inventory.add(comp_helmet); + inventory.add(comp_chest); + inventory.add(comp_boots); + inventory.add(comp_gloves); + + + return; + case 61: // Ithorian Sentinel + SWGObject sent_bicep_r = core.objectService.createObject("object/tangible/wearables/armor/ithorian_sentinel/shared_ith_armor_s03_bicep_r.iff", planet); + sent_bicep_r.setIntAttribute("cat_armor_standard_protection.armor_eff_kinetic", 7000); + sent_bicep_r.setIntAttribute("cat_armor_standard_protection.armor_eff_energy", 5000); + sent_bicep_r.setIntAttribute("cat_armor_special_protection.special_protection_type_heat", 6000); + sent_bicep_r.setIntAttribute("cat_armor_special_protection.special_protection_type_cold", 6000); + sent_bicep_r.setIntAttribute("cat_armor_special_protection.special_protection_type_acid", 6000); + sent_bicep_r.setIntAttribute("cat_armor_special_protection.special_protection_type_electricity", 6000); + + SWGObject sent_bicep_l = core.objectService.createObject("object/tangible/wearables/armor/ithorian_sentinel/shared_ith_armor_s03_bicep_l.iff", planet); + sent_bicep_l.setIntAttribute("cat_armor_standard_protection.armor_eff_kinetic", 7000); + sent_bicep_l.setIntAttribute("cat_armor_standard_protection.armor_eff_energy", 5000); + sent_bicep_l.setIntAttribute("cat_armor_special_protection.special_protection_type_heat", 6000); + sent_bicep_l.setIntAttribute("cat_armor_special_protection.special_protection_type_cold", 6000); + sent_bicep_l.setIntAttribute("cat_armor_special_protection.special_protection_type_acid", 6000); + sent_bicep_l.setIntAttribute("cat_armor_special_protection.special_protection_type_electricity", 6000); + + SWGObject sent_bracer_r = core.objectService.createObject("object/tangible/wearables/armor/ithorian_sentinel/shared_ith_armor_s03_bracer_r.iff", planet); + sent_bracer_r.setIntAttribute("cat_armor_standard_protection.armor_eff_kinetic", 7000); + sent_bracer_r.setIntAttribute("cat_armor_standard_protection.armor_eff_energy", 5000); + sent_bracer_r.setIntAttribute("cat_armor_special_protection.special_protection_type_heat", 6000); + sent_bracer_r.setIntAttribute("cat_armor_special_protection.special_protection_type_cold", 6000); + sent_bracer_r.setIntAttribute("cat_armor_special_protection.special_protection_type_acid", 6000); + sent_bracer_r.setIntAttribute("cat_armor_special_protection.special_protection_type_electricity", 6000); + + SWGObject sent_bracer_l = core.objectService.createObject("object/tangible/wearables/armor/ithorian_sentinel/shared_ith_armor_s03_bracer_l.iff", planet); + sent_bracer_l.setIntAttribute("cat_armor_standard_protection.armor_eff_kinetic", 7000); + sent_bracer_l.setIntAttribute("cat_armor_standard_protection.armor_eff_energy", 5000); + sent_bracer_l.setIntAttribute("cat_armor_special_protection.special_protection_type_heat", 6000); + sent_bracer_l.setIntAttribute("cat_armor_special_protection.special_protection_type_cold", 6000); + sent_bracer_l.setIntAttribute("cat_armor_special_protection.special_protection_type_acid", 6000); + sent_bracer_l.setIntAttribute("cat_armor_special_protection.special_protection_type_electricity", 6000); + + SWGObject sent_leggings = core.objectService.createObject("object/tangible/wearables/armor/ithorian_sentinel/shared_ith_armor_s03_leggings.iff", planet); + sent_leggings.setIntAttribute("cat_armor_standard_protection.armor_eff_kinetic", 7000); + sent_leggings.setIntAttribute("cat_armor_standard_protection.armor_eff_energy", 5000); + sent_leggings.setIntAttribute("cat_armor_special_protection.special_protection_type_heat", 6000); + sent_leggings.setIntAttribute("cat_armor_special_protection.special_protection_type_cold", 6000); + sent_leggings.setIntAttribute("cat_armor_special_protection.special_protection_type_acid", 6000); + sent_leggings.setIntAttribute("cat_armor_special_protection.special_protection_type_electricity", 6000); + + SWGObject sent_helmet = core.objectService.createObject("object/tangible/wearables/armor/ithorian_sentinel/shared_ith_armor_s03_helmet.iff", planet); + sent_helmet.setIntAttribute("cat_armor_standard_protection.armor_eff_kinetic", 7000); + sent_helmet.setIntAttribute("cat_armor_standard_protection.armor_eff_energy", 5000); + sent_helmet.setIntAttribute("cat_armor_special_protection.special_protection_type_heat", 6000); + sent_helmet.setIntAttribute("cat_armor_special_protection.special_protection_type_cold", 6000); + sent_helmet.setIntAttribute("cat_armor_special_protection.special_protection_type_acid", 6000); + sent_helmet.setIntAttribute("cat_armor_special_protection.special_protection_type_electricity", 6000); + + SWGObject sent_chest = core.objectService.createObject("object/tangible/wearables/armor/ithorian_sentinel/shared_ith_armor_s03_chest_plate.iff", planet); + sent_chest.setIntAttribute("cat_armor_standard_protection.armor_eff_kinetic", 7000); + sent_chest.setIntAttribute("cat_armor_standard_protection.armor_eff_energy", 5000); + sent_chest.setIntAttribute("cat_armor_special_protection.special_protection_type_heat", 6000); + sent_chest.setIntAttribute("cat_armor_special_protection.special_protection_type_cold", 6000); + sent_chest.setIntAttribute("cat_armor_special_protection.special_protection_type_acid", 6000); + sent_chest.setIntAttribute("cat_armor_special_protection.special_protection_type_electricity", 6000); + + SWGObject sent_boots = core.objectService.createObject("object/tangible/wearables/armor/ithorian_sentinel/shared_ith_armor_s03_boots.iff", planet); + SWGObject sent_gloves = core.objectService.createObject("object/tangible/wearables/armor/ithorian_sentinel/shared_ith_armor_s03_gloves.iff", planet); + + + + inventory.add(sent_bicep_r); + inventory.add(sent_bicep_l); + inventory.add(sent_bracer_r); + inventory.add(sent_bracer_l); + inventory.add(sent_leggings); + inventory.add(sent_helmet); + inventory.add(sent_chest); + inventory.add(sent_boots); + inventory.add(sent_gloves); + + + return; + case 62: // Kashyyykian Hunting + SWGObject hunt_bicep_r = core.objectService.createObject("object/tangible/wearables/armor/kashyyykian_hunting/shared_armor_kashyyykian_hunting_bicep_r.iff", planet); + hunt_bicep_r.setIntAttribute("cat_armor_standard_protection.armor_eff_kinetic", 7000); + hunt_bicep_r.setIntAttribute("cat_armor_standard_protection.armor_eff_energy", 5000); + hunt_bicep_r.setIntAttribute("cat_armor_special_protection.special_protection_type_heat", 6000); + hunt_bicep_r.setIntAttribute("cat_armor_special_protection.special_protection_type_cold", 6000); + hunt_bicep_r.setIntAttribute("cat_armor_special_protection.special_protection_type_acid", 6000); + hunt_bicep_r.setIntAttribute("cat_armor_special_protection.special_protection_type_electricity", 6000); + + SWGObject hunt_bicep_l = core.objectService.createObject("object/tangible/wearables/armor/kashyyykian_hunting/shared_armor_kashyyykian_hunting_bicep_l.iff", planet); + hunt_bicep_l.setIntAttribute("cat_armor_standard_protection.armor_eff_kinetic", 7000); + hunt_bicep_l.setIntAttribute("cat_armor_standard_protection.armor_eff_energy", 5000); + hunt_bicep_l.setIntAttribute("cat_armor_special_protection.special_protection_type_heat", 6000); + hunt_bicep_l.setIntAttribute("cat_armor_special_protection.special_protection_type_cold", 6000); + hunt_bicep_l.setIntAttribute("cat_armor_special_protection.special_protection_type_acid", 6000); + hunt_bicep_l.setIntAttribute("cat_armor_special_protection.special_protection_type_electricity", 6000); + + SWGObject hunt_bracer_r = core.objectService.createObject("object/tangible/wearables/armor/kashyyykian_hunting/shared_armor_kashyyykian_hunting_bracer_r.iff", planet); + hunt_bracer_r.setIntAttribute("cat_armor_standard_protection.armor_eff_kinetic", 7000); + hunt_bracer_r.setIntAttribute("cat_armor_standard_protection.armor_eff_energy", 5000); + hunt_bracer_r.setIntAttribute("cat_armor_special_protection.special_protection_type_heat", 6000); + hunt_bracer_r.setIntAttribute("cat_armor_special_protection.special_protection_type_cold", 6000); + hunt_bracer_r.setIntAttribute("cat_armor_special_protection.special_protection_type_acid", 6000); + hunt_bracer_r.setIntAttribute("cat_armor_special_protection.special_protection_type_electricity", 6000); + + SWGObject hunt_bracer_l = core.objectService.createObject("object/tangible/wearables/armor/kashyyykian_hunting/shared_armor_kashyyykian_hunting_bracer_l.iff", planet); + hunt_bracer_l.setIntAttribute("cat_armor_standard_protection.armor_eff_kinetic", 7000); + hunt_bracer_l.setIntAttribute("cat_armor_standard_protection.armor_eff_energy", 5000); + hunt_bracer_l.setIntAttribute("cat_armor_special_protection.special_protection_type_heat", 6000); + hunt_bracer_l.setIntAttribute("cat_armor_special_protection.special_protection_type_cold", 6000); + hunt_bracer_l.setIntAttribute("cat_armor_special_protection.special_protection_type_acid", 6000); + hunt_bracer_l.setIntAttribute("cat_armor_special_protection.special_protection_type_electricity", 6000); + + SWGObject hunt_leggings = core.objectService.createObject("object/tangible/wearables/armor/kashyyykian_hunting/shared_armor_kashyyykian_hunting_leggings.iff", planet); + hunt_leggings.setIntAttribute("cat_armor_standard_protection.armor_eff_kinetic", 7000); + hunt_leggings.setIntAttribute("cat_armor_standard_protection.armor_eff_energy", 5000); + hunt_leggings.setIntAttribute("cat_armor_special_protection.special_protection_type_heat", 6000); + hunt_leggings.setIntAttribute("cat_armor_special_protection.special_protection_type_cold", 6000); + hunt_leggings.setIntAttribute("cat_armor_special_protection.special_protection_type_acid", 6000); + hunt_leggings.setIntAttribute("cat_armor_special_protection.special_protection_type_electricity", 6000); + + SWGObject hunt_chest = core.objectService.createObject("object/tangible/wearables/armor/kashyyykian_hunting/shared_armor_kashyyykian_hunting_chestplate.iff", planet); + hunt_chest.setIntAttribute("cat_armor_standard_protection.armor_eff_kinetic", 7000); + hunt_chest.setIntAttribute("cat_armor_standard_protection.armor_eff_energy", 5000); + hunt_chest.setIntAttribute("cat_armor_special_protection.special_protection_type_heat", 6000); + hunt_chest.setIntAttribute("cat_armor_special_protection.special_protection_type_cold", 6000); + hunt_chest.setIntAttribute("cat_armor_special_protection.special_protection_type_acid", 6000); + hunt_chest.setIntAttribute("cat_armor_special_protection.special_protection_type_electricity", 6000); + + + + inventory.add(hunt_bicep_r); + inventory.add(hunt_bicep_l); + inventory.add(hunt_bracer_r); + inventory.add(hunt_bracer_l); + inventory.add(hunt_leggings); + inventory.add(hunt_chest); + + + return; + case 70: // Bone Armor + SWGObject bone_bicep_r = core.objectService.createObject("object/tangible/wearables/armor/bone/shared_armor_bone_s01_bicep_r.iff", planet); + bone_bicep_r.setIntAttribute("cat_armor_standard_protection.armor_eff_kinetic", 6000); + bone_bicep_r.setIntAttribute("cat_armor_standard_protection.armor_eff_energy", 6000); + bone_bicep_r.setIntAttribute("cat_armor_special_protection.special_protection_type_heat", 6000); + bone_bicep_r.setIntAttribute("cat_armor_special_protection.special_protection_type_cold", 6000); + bone_bicep_r.setIntAttribute("cat_armor_special_protection.special_protection_type_acid", 6000); + bone_bicep_r.setIntAttribute("cat_armor_special_protection.special_protection_type_electricity", 6000); + + SWGObject bone_bicep_l = core.objectService.createObject("object/tangible/wearables/armor/bone/shared_armor_bone_s01_bicep_l.iff", planet); + bone_bicep_l.setIntAttribute("cat_armor_standard_protection.armor_eff_kinetic", 6000); + bone_bicep_l.setIntAttribute("cat_armor_standard_protection.armor_eff_energy", 6000); + bone_bicep_l.setIntAttribute("cat_armor_special_protection.special_protection_type_heat", 6000); + bone_bicep_l.setIntAttribute("cat_armor_special_protection.special_protection_type_cold", 6000); + bone_bicep_l.setIntAttribute("cat_armor_special_protection.special_protection_type_acid", 6000); + bone_bicep_l.setIntAttribute("cat_armor_special_protection.special_protection_type_electricity", 6000); + + SWGObject bone_bracer_r = core.objectService.createObject("object/tangible/wearables/armor/bone/shared_armor_bone_s01_bracer_r.iff", planet); + bone_bracer_r.setIntAttribute("cat_armor_standard_protection.armor_eff_kinetic", 6000); + bone_bracer_r.setIntAttribute("cat_armor_standard_protection.armor_eff_energy", 6000); + bone_bracer_r.setIntAttribute("cat_armor_special_protection.special_protection_type_heat", 6000); + bone_bracer_r.setIntAttribute("cat_armor_special_protection.special_protection_type_cold", 6000); + bone_bracer_r.setIntAttribute("cat_armor_special_protection.special_protection_type_acid", 6000); + bone_bracer_r.setIntAttribute("cat_armor_special_protection.special_protection_type_electricity", 6000); + + SWGObject bone_bracer_l = core.objectService.createObject("object/tangible/wearables/armor/bone/shared_armor_bone_s01_bracer_l.iff", planet); + bone_bracer_l.setIntAttribute("cat_armor_standard_protection.armor_eff_kinetic", 6000); + bone_bracer_l.setIntAttribute("cat_armor_standard_protection.armor_eff_energy", 6000); + bone_bracer_l.setIntAttribute("cat_armor_special_protection.special_protection_type_heat", 6000); + bone_bracer_l.setIntAttribute("cat_armor_special_protection.special_protection_type_cold", 6000); + bone_bracer_l.setIntAttribute("cat_armor_special_protection.special_protection_type_acid", 6000); + bone_bracer_l.setIntAttribute("cat_armor_special_protection.special_protection_type_electricity", 6000); + + SWGObject bone_leggings = core.objectService.createObject("object/tangible/wearables/armor/bone/shared_armor_bone_s01_leggings.iff", planet); + bone_leggings.setIntAttribute("cat_armor_standard_protection.armor_eff_kinetic", 6000); + bone_leggings.setIntAttribute("cat_armor_standard_protection.armor_eff_energy", 6000); + bone_leggings.setIntAttribute("cat_armor_special_protection.special_protection_type_heat", 6000); + bone_leggings.setIntAttribute("cat_armor_special_protection.special_protection_type_cold", 6000); + bone_leggings.setIntAttribute("cat_armor_special_protection.special_protection_type_acid", 6000); + bone_leggings.setIntAttribute("cat_armor_special_protection.special_protection_type_electricity", 6000); + + SWGObject bone_helmet = core.objectService.createObject("object/tangible/wearables/armor/bone/shared_armor_bone_s01_helmet.iff", planet); + bone_helmet.setIntAttribute("cat_armor_standard_protection.armor_eff_kinetic", 6000); + bone_helmet.setIntAttribute("cat_armor_standard_protection.armor_eff_energy", 6000); + bone_helmet.setIntAttribute("cat_armor_special_protection.special_protection_type_heat", 6000); + bone_helmet.setIntAttribute("cat_armor_special_protection.special_protection_type_cold", 6000); + bone_helmet.setIntAttribute("cat_armor_special_protection.special_protection_type_acid", 6000); + bone_helmet.setIntAttribute("cat_armor_special_protection.special_protection_type_electricity", 6000); + + SWGObject bone_chest = core.objectService.createObject("object/tangible/wearables/armor/bone/shared_armor_bone_s01_chest_plate.iff", planet); + bone_chest.setIntAttribute("cat_armor_standard_protection.armor_eff_kinetic", 6000); + bone_chest.setIntAttribute("cat_armor_standard_protection.armor_eff_energy", 6000); + bone_chest.setIntAttribute("cat_armor_special_protection.special_protection_type_heat", 6000); + bone_chest.setIntAttribute("cat_armor_special_protection.special_protection_type_cold", 6000); + bone_chest.setIntAttribute("cat_armor_special_protection.special_protection_type_acid", 6000); + bone_chest.setIntAttribute("cat_armor_special_protection.special_protection_type_electricity", 6000); + + SWGObject bone_boots = core.objectService.createObject("object/tangible/wearables/armor/bone/shared_armor_bone_s01_boots.iff", planet); + SWGObject bone_gloves = core.objectService.createObject("object/tangible/wearables/armor/bone/shared_armor_bone_s01_gloves.iff", planet); + + + + inventory.add(bone_bicep_r); + inventory.add(bone_bicep_l); + inventory.add(bone_bracer_r); + inventory.add(bone_bracer_l); + inventory.add(bone_leggings); + inventory.add(bone_helmet); + inventory.add(bone_chest); + inventory.add(bone_boots); + inventory.add(bone_gloves); + + + return; + case 71: // Ithorian Defender + SWGObject def_bicep_r = core.objectService.createObject("object/tangible/wearables/armor/ithorian_defender/shared_ith_armor_s01_bicep_r.iff", planet); + def_bicep_r.setIntAttribute("cat_armor_standard_protection.armor_eff_kinetic", 6000); + def_bicep_r.setIntAttribute("cat_armor_standard_protection.armor_eff_energy", 6000); + def_bicep_r.setIntAttribute("cat_armor_special_protection.special_protection_type_heat", 6000); + def_bicep_r.setIntAttribute("cat_armor_special_protection.special_protection_type_cold", 6000); + def_bicep_r.setIntAttribute("cat_armor_special_protection.special_protection_type_acid", 6000); + def_bicep_r.setIntAttribute("cat_armor_special_protection.special_protection_type_electricity", 6000); + + SWGObject def_bicep_l = core.objectService.createObject("object/tangible/wearables/armor/ithorian_defender/shared_ith_armor_s01_bicep_l.iff", planet); + def_bicep_l.setIntAttribute("cat_armor_standard_protection.armor_eff_kinetic", 6000); + def_bicep_l.setIntAttribute("cat_armor_standard_protection.armor_eff_energy", 6000); + def_bicep_l.setIntAttribute("cat_armor_special_protection.special_protection_type_heat", 6000); + def_bicep_l.setIntAttribute("cat_armor_special_protection.special_protection_type_cold", 6000); + def_bicep_l.setIntAttribute("cat_armor_special_protection.special_protection_type_acid", 6000); + def_bicep_l.setIntAttribute("cat_armor_special_protection.special_protection_type_electricity", 6000); + + SWGObject def_bracer_r = core.objectService.createObject("object/tangible/wearables/armor/ithorian_defender/shared_ith_armor_s01_bracer_r.iff", planet); + def_bracer_r.setIntAttribute("cat_armor_standard_protection.armor_eff_kinetic", 6000); + def_bracer_r.setIntAttribute("cat_armor_standard_protection.armor_eff_energy", 6000); + def_bracer_r.setIntAttribute("cat_armor_special_protection.special_protection_type_heat", 6000); + def_bracer_r.setIntAttribute("cat_armor_special_protection.special_protection_type_cold", 6000); + def_bracer_r.setIntAttribute("cat_armor_special_protection.special_protection_type_acid", 6000); + def_bracer_r.setIntAttribute("cat_armor_special_protection.special_protection_type_electricity", 6000); + + SWGObject def_bracer_l = core.objectService.createObject("object/tangible/wearables/armor/ithorian_defender/shared_ith_armor_s01_bracer_l.iff", planet); + def_bracer_l.setIntAttribute("cat_armor_standard_protection.armor_eff_kinetic", 6000); + def_bracer_l.setIntAttribute("cat_armor_standard_protection.armor_eff_energy", 6000); + def_bracer_l.setIntAttribute("cat_armor_special_protection.special_protection_type_heat", 6000); + def_bracer_l.setIntAttribute("cat_armor_special_protection.special_protection_type_cold", 6000); + def_bracer_l.setIntAttribute("cat_armor_special_protection.special_protection_type_acid", 6000); + def_bracer_l.setIntAttribute("cat_armor_special_protection.special_protection_type_electricity", 6000); + + SWGObject def_leggings = core.objectService.createObject("object/tangible/wearables/armor/ithorian_defender/shared_ith_armor_s01_leggings.iff", planet); + def_leggings.setIntAttribute("cat_armor_standard_protection.armor_eff_kinetic", 6000); + def_leggings.setIntAttribute("cat_armor_standard_protection.armor_eff_energy", 6000); + def_leggings.setIntAttribute("cat_armor_special_protection.special_protection_type_heat", 6000); + def_leggings.setIntAttribute("cat_armor_special_protection.special_protection_type_cold", 6000); + def_leggings.setIntAttribute("cat_armor_special_protection.special_protection_type_acid", 6000); + def_leggings.setIntAttribute("cat_armor_special_protection.special_protection_type_electricity", 6000); + + SWGObject def_helmet = core.objectService.createObject("object/tangible/wearables/armor/ithorian_defender/shared_ith_armor_s01_helmet.iff", planet); + def_helmet.setIntAttribute("cat_armor_standard_protection.armor_eff_kinetic", 6000); + def_helmet.setIntAttribute("cat_armor_standard_protection.armor_eff_energy", 6000); + def_helmet.setIntAttribute("cat_armor_special_protection.special_protection_type_heat", 6000); + def_helmet.setIntAttribute("cat_armor_special_protection.special_protection_type_cold", 6000); + def_helmet.setIntAttribute("cat_armor_special_protection.special_protection_type_acid", 6000); + def_helmet.setIntAttribute("cat_armor_special_protection.special_protection_type_electricity", 6000); + + SWGObject def_chest = core.objectService.createObject("object/tangible/wearables/armor/ithorian_defender/shared_ith_armor_s01_chest_plate.iff", planet); + def_chest.setIntAttribute("cat_armor_standard_protection.armor_eff_kinetic", 6000); + def_chest.setIntAttribute("cat_armor_standard_protection.armor_eff_energy", 6000); + def_chest.setIntAttribute("cat_armor_special_protection.special_protection_type_heat", 6000); + def_chest.setIntAttribute("cat_armor_special_protection.special_protection_type_cold", 6000); + def_chest.setIntAttribute("cat_armor_special_protection.special_protection_type_acid", 6000); + def_chest.setIntAttribute("cat_armor_special_protection.special_protection_type_electricity", 6000); + + SWGObject def_boots = core.objectService.createObject("object/tangible/wearables/armor/ithorian_defender/shared_ith_armor_s01_boots.iff", planet); + SWGObject def_gloves = core.objectService.createObject("object/tangible/wearables/armor/ithorian_defender/shared_ith_armor_s01_gloves.iff", planet); + + + + inventory.add(def_bicep_r); + inventory.add(def_bicep_l); + inventory.add(def_bracer_r); + inventory.add(def_bracer_l); + inventory.add(def_leggings); + inventory.add(def_helmet); + inventory.add(def_chest); + inventory.add(def_boots); + inventory.add(def_gloves); + + + return; + case 72: // Kashyyykian Black Mountain + SWGObject moun_bicep_r = core.objectService.createObject("object/tangible/wearables/armor/kashyyykian_black_mtn/shared_armor_kashyyykian_black_mtn_bicep_r.iff", planet); + moun_bicep_r.setIntAttribute("cat_armor_standard_protection.armor_eff_kinetic", 6000); + moun_bicep_r.setIntAttribute("cat_armor_standard_protection.armor_eff_energy", 6000); + moun_bicep_r.setIntAttribute("cat_armor_special_protection.special_protection_type_heat", 6000); + moun_bicep_r.setIntAttribute("cat_armor_special_protection.special_protection_type_cold", 6000); + moun_bicep_r.setIntAttribute("cat_armor_special_protection.special_protection_type_acid", 6000); + moun_bicep_r.setIntAttribute("cat_armor_special_protection.special_protection_type_electricity", 6000); + + SWGObject moun_bicep_l = core.objectService.createObject("object/tangible/wearables/armor/kashyyykian_black_mtn/shared_armor_kashyyykian_black_mtn_bicep_l.iff", planet); + moun_bicep_l.setIntAttribute("cat_armor_standard_protection.armor_eff_kinetic", 6000); + moun_bicep_l.setIntAttribute("cat_armor_standard_protection.armor_eff_energy", 6000); + moun_bicep_l.setIntAttribute("cat_armor_special_protection.special_protection_type_heat", 6000); + moun_bicep_l.setIntAttribute("cat_armor_special_protection.special_protection_type_cold", 6000); + moun_bicep_l.setIntAttribute("cat_armor_special_protection.special_protection_type_acid", 6000); + moun_bicep_l.setIntAttribute("cat_armor_special_protection.special_protection_type_electricity", 6000); + + SWGObject moun_bracer_r = core.objectService.createObject("object/tangible/wearables/armor/kashyyykian_black_mtn/shared_armor_kashyyykian_black_mtn_bracer_r.iff", planet); + moun_bracer_r.setIntAttribute("cat_armor_standard_protection.armor_eff_kinetic", 6000); + moun_bracer_r.setIntAttribute("cat_armor_standard_protection.armor_eff_energy", 6000); + moun_bracer_r.setIntAttribute("cat_armor_special_protection.special_protection_type_heat", 6000); + moun_bracer_r.setIntAttribute("cat_armor_special_protection.special_protection_type_cold", 6000); + moun_bracer_r.setIntAttribute("cat_armor_special_protection.special_protection_type_acid", 6000); + moun_bracer_r.setIntAttribute("cat_armor_special_protection.special_protection_type_electricity", 6000); + + SWGObject moun_bracer_l = core.objectService.createObject("object/tangible/wearables/armor/kashyyykian_black_mtn/shared_armor_kashyyykian_black_mtn_bracer_l.iff", planet); + moun_bracer_l.setIntAttribute("cat_armor_standard_protection.armor_eff_kinetic", 6000); + moun_bracer_l.setIntAttribute("cat_armor_standard_protection.armor_eff_energy", 6000); + moun_bracer_l.setIntAttribute("cat_armor_special_protection.special_protection_type_heat", 6000); + moun_bracer_l.setIntAttribute("cat_armor_special_protection.special_protection_type_cold", 6000); + moun_bracer_l.setIntAttribute("cat_armor_special_protection.special_protection_type_acid", 6000); + moun_bracer_l.setIntAttribute("cat_armor_special_protection.special_protection_type_electricity", 6000); + + SWGObject moun_leggings = core.objectService.createObject("object/tangible/wearables/armor/kashyyykian_black_mtn/shared_armor_kashyyykian_black_mtn_leggings.iff", planet); + moun_leggings.setIntAttribute("cat_armor_standard_protection.armor_eff_kinetic", 6000); + moun_leggings.setIntAttribute("cat_armor_standard_protection.armor_eff_energy", 6000); + moun_leggings.setIntAttribute("cat_armor_special_protection.special_protection_type_heat", 6000); + moun_leggings.setIntAttribute("cat_armor_special_protection.special_protection_type_cold", 6000); + moun_leggings.setIntAttribute("cat_armor_special_protection.special_protection_type_acid", 6000); + moun_leggings.setIntAttribute("cat_armor_special_protection.special_protection_type_electricity", 6000); + + SWGObject moun_chest = core.objectService.createObject("object/tangible/wearables/armor/kashyyykian_black_mtn/shared_armor_kashyyykian_black_mtn_chestplate.iff", planet); + moun_chest.setIntAttribute("cat_armor_standard_protection.armor_eff_kinetic", 6000); + moun_chest.setIntAttribute("cat_armor_standard_protection.armor_eff_energy", 6000); + moun_chest.setIntAttribute("cat_armor_special_protection.special_protection_type_heat", 6000); + moun_chest.setIntAttribute("cat_armor_special_protection.special_protection_type_cold", 6000); + moun_chest.setIntAttribute("cat_armor_special_protection.special_protection_type_acid", 6000); + moun_chest.setIntAttribute("cat_armor_special_protection.special_protection_type_electricity", 6000); + + + + inventory.add(moun_bicep_r); + inventory.add(moun_bicep_l); + inventory.add(moun_bracer_r); + inventory.add(moun_bracer_l); + inventory.add(moun_leggings); + inventory.add(moun_chest); + + + return; + case 80: // Marauder Armor + SWGObject mar_bicep_r = core.objectService.createObject("object/tangible/wearables/armor/marauder/shared_armor_marauder_s02_bicep_r.iff", planet); + mar_bicep_r.setIntAttribute("cat_armor_standard_protection.armor_eff_kinetic", 5000); + mar_bicep_r.setIntAttribute("cat_armor_standard_protection.armor_eff_energy", 7000); + mar_bicep_r.setIntAttribute("cat_armor_special_protection.special_protection_type_heat", 6000); + mar_bicep_r.setIntAttribute("cat_armor_special_protection.special_protection_type_cold", 6000); + mar_bicep_r.setIntAttribute("cat_armor_special_protection.special_protection_type_acid", 6000); + mar_bicep_r.setIntAttribute("cat_armor_special_protection.special_protection_type_electricity", 6000); + + SWGObject mar_bicep_l = core.objectService.createObject("object/tangible/wearables/armor/marauder/shared_armor_marauder_s02_bicep_l.iff", planet); + mar_bicep_l.setIntAttribute("cat_armor_standard_protection.armor_eff_kinetic", 5000); + mar_bicep_l.setIntAttribute("cat_armor_standard_protection.armor_eff_energy", 7000); + mar_bicep_l.setIntAttribute("cat_armor_special_protection.special_protection_type_heat", 6000); + mar_bicep_l.setIntAttribute("cat_armor_special_protection.special_protection_type_cold", 6000); + mar_bicep_l.setIntAttribute("cat_armor_special_protection.special_protection_type_acid", 6000); + mar_bicep_l.setIntAttribute("cat_armor_special_protection.special_protection_type_electricity", 6000); + + SWGObject mar_bracer_r = core.objectService.createObject("object/tangible/wearables/armor/marauder/shared_armor_marauder_s02_bracer_r.iff", planet); + mar_bracer_r.setIntAttribute("cat_armor_standard_protection.armor_eff_kinetic", 5000); + mar_bracer_r.setIntAttribute("cat_armor_standard_protection.armor_eff_energy", 7000); + mar_bracer_r.setIntAttribute("cat_armor_special_protection.special_protection_type_heat", 6000); + mar_bracer_r.setIntAttribute("cat_armor_special_protection.special_protection_type_cold", 6000); + mar_bracer_r.setIntAttribute("cat_armor_special_protection.special_protection_type_acid", 6000); + mar_bracer_r.setIntAttribute("cat_armor_special_protection.special_protection_type_electricity", 6000); + + SWGObject mar_bracer_l = core.objectService.createObject("object/tangible/wearables/armor/marauder/shared_armor_marauder_s02_bracer_l.iff", planet); + mar_bracer_l.setIntAttribute("cat_armor_standard_protection.armor_eff_kinetic", 5000); + mar_bracer_l.setIntAttribute("cat_armor_standard_protection.armor_eff_energy", 7000); + mar_bracer_l.setIntAttribute("cat_armor_special_protection.special_protection_type_heat", 6000); + mar_bracer_l.setIntAttribute("cat_armor_special_protection.special_protection_type_cold", 6000); + mar_bracer_l.setIntAttribute("cat_armor_special_protection.special_protection_type_acid", 6000); + mar_bracer_l.setIntAttribute("cat_armor_special_protection.special_protection_type_electricity", 6000); + + SWGObject mar_leggings = core.objectService.createObject("object/tangible/wearables/armor/marauder/shared_armor_marauder_s02_leggings.iff", planet); + mar_leggings.setIntAttribute("cat_armor_standard_protection.armor_eff_kinetic", 5000); + mar_leggings.setIntAttribute("cat_armor_standard_protection.armor_eff_energy", 7000); + mar_leggings.setIntAttribute("cat_armor_special_protection.special_protection_type_heat", 6000); + mar_leggings.setIntAttribute("cat_armor_special_protection.special_protection_type_cold", 6000); + mar_leggings.setIntAttribute("cat_armor_special_protection.special_protection_type_acid", 6000); + mar_leggings.setIntAttribute("cat_armor_special_protection.special_protection_type_electricity", 6000); + + SWGObject mar_helmet = core.objectService.createObject("object/tangible/wearables/armor/marauder/shared_armor_marauder_s02_helmet.iff", planet); + mar_helmet.setIntAttribute("cat_armor_standard_protection.armor_eff_kinetic", 5000); + mar_helmet.setIntAttribute("cat_armor_standard_protection.armor_eff_energy", 7000); + mar_helmet.setIntAttribute("cat_armor_special_protection.special_protection_type_heat", 6000); + mar_helmet.setIntAttribute("cat_armor_special_protection.special_protection_type_cold", 6000); + mar_helmet.setIntAttribute("cat_armor_special_protection.special_protection_type_acid", 6000); + mar_helmet.setIntAttribute("cat_armor_special_protection.special_protection_type_electricity", 6000); + + SWGObject mar_chest = core.objectService.createObject("object/tangible/wearables/armor/marauder/shared_armor_marauder_s02_chest_plate.iff", planet); + mar_chest.setIntAttribute("cat_armor_standard_protection.armor_eff_kinetic", 5000); + mar_chest.setIntAttribute("cat_armor_standard_protection.armor_eff_energy", 7000); + mar_chest.setIntAttribute("cat_armor_special_protection.special_protection_type_heat", 6000); + mar_chest.setIntAttribute("cat_armor_special_protection.special_protection_type_cold", 6000); + mar_chest.setIntAttribute("cat_armor_special_protection.special_protection_type_acid", 6000); + mar_chest.setIntAttribute("cat_armor_special_protection.special_protection_type_electricity", 6000); + + SWGObject mar_boots = core.objectService.createObject("object/tangible/wearables/armor/marauder/shared_armor_marauder_s02_boots.iff", planet); + SWGObject mar_gloves = core.objectService.createObject("object/tangible/wearables/armor/marauder/shared_armor_marauder_s02_gloves.iff", planet); + + + + inventory.add(mar_bicep_r); + inventory.add(mar_bicep_l); + inventory.add(mar_bracer_r); + inventory.add(mar_bracer_l); + inventory.add(mar_leggings); + inventory.add(mar_helmet); + inventory.add(mar_chest); + inventory.add(mar_boots); + inventory.add(mar_gloves); + + + return; + case 81: // Ithorian Guardian + SWGObject gau_bicep_r = core.objectService.createObject("object/tangible/wearables/armor/ithorian_guardian/shared_ith_armor_s02_bicep_r.iff", planet); + gau_bicep_r.setIntAttribute("cat_armor_standard_protection.armor_eff_kinetic", 5000); + gau_bicep_r.setIntAttribute("cat_armor_standard_protection.armor_eff_energy", 7000); + gau_bicep_r.setIntAttribute("cat_armor_special_protection.special_protection_type_heat", 6000); + gau_bicep_r.setIntAttribute("cat_armor_special_protection.special_protection_type_cold", 6000); + gau_bicep_r.setIntAttribute("cat_armor_special_protection.special_protection_type_acid", 6000); + gau_bicep_r.setIntAttribute("cat_armor_special_protection.special_protection_type_electricity", 6000); + + SWGObject gau_bicep_l = core.objectService.createObject("object/tangible/wearables/armor/ithorian_guardian/shared_ith_armor_s02_bicep_l.iff", planet); + gau_bicep_l.setIntAttribute("cat_armor_standard_protection.armor_eff_kinetic", 5000); + gau_bicep_l.setIntAttribute("cat_armor_standard_protection.armor_eff_energy", 7000); + gau_bicep_l.setIntAttribute("cat_armor_special_protection.special_protection_type_heat", 6000); + gau_bicep_l.setIntAttribute("cat_armor_special_protection.special_protection_type_cold", 6000); + gau_bicep_l.setIntAttribute("cat_armor_special_protection.special_protection_type_acid", 6000); + gau_bicep_l.setIntAttribute("cat_armor_special_protection.special_protection_type_electricity", 6000); + + SWGObject gau_bracer_r = core.objectService.createObject("object/tangible/wearables/armor/ithorian_guardian/shared_ith_armor_s02_bracer_r.iff", planet); + gau_bracer_r.setIntAttribute("cat_armor_standard_protection.armor_eff_kinetic", 5000); + gau_bracer_r.setIntAttribute("cat_armor_standard_protection.armor_eff_energy", 7000); + gau_bracer_r.setIntAttribute("cat_armor_special_protection.special_protection_type_heat", 6000); + gau_bracer_r.setIntAttribute("cat_armor_special_protection.special_protection_type_cold", 6000); + gau_bracer_r.setIntAttribute("cat_armor_special_protection.special_protection_type_acid", 6000); + gau_bracer_r.setIntAttribute("cat_armor_special_protection.special_protection_type_electricity", 6000); + + SWGObject gau_bracer_l = core.objectService.createObject("object/tangible/wearables/armor/ithorian_guardian/shared_ith_armor_s02_bracer_l.iff", planet); + gau_bracer_l.setIntAttribute("cat_armor_standard_protection.armor_eff_kinetic", 5000); + gau_bracer_l.setIntAttribute("cat_armor_standard_protection.armor_eff_energy", 7000); + gau_bracer_l.setIntAttribute("cat_armor_special_protection.special_protection_type_heat", 6000); + gau_bracer_l.setIntAttribute("cat_armor_special_protection.special_protection_type_cold", 6000); + gau_bracer_l.setIntAttribute("cat_armor_special_protection.special_protection_type_acid", 6000); + gau_bracer_l.setIntAttribute("cat_armor_special_protection.special_protection_type_electricity", 6000); + + SWGObject gau_leggings = core.objectService.createObject("object/tangible/wearables/armor/ithorian_guardian/shared_ith_armor_s02_leggings.iff", planet); + gau_leggings.setIntAttribute("cat_armor_standard_protection.armor_eff_kinetic", 5000); + gau_leggings.setIntAttribute("cat_armor_standard_protection.armor_eff_energy", 7000); + gau_leggings.setIntAttribute("cat_armor_special_protection.special_protection_type_heat", 6000); + gau_leggings.setIntAttribute("cat_armor_special_protection.special_protection_type_cold", 6000); + gau_leggings.setIntAttribute("cat_armor_special_protection.special_protection_type_acid", 6000); + gau_leggings.setIntAttribute("cat_armor_special_protection.special_protection_type_electricity", 6000); + + SWGObject gau_helmet = core.objectService.createObject("object/tangible/wearables/armor/ithorian_guardian/shared_ith_armor_s02_helmet.iff", planet); + gau_helmet.setIntAttribute("cat_armor_standard_protection.armor_eff_kinetic", 5000); + gau_helmet.setIntAttribute("cat_armor_standard_protection.armor_eff_energy", 7000); + gau_helmet.setIntAttribute("cat_armor_special_protection.special_protection_type_heat", 6000); + gau_helmet.setIntAttribute("cat_armor_special_protection.special_protection_type_cold", 6000); + gau_helmet.setIntAttribute("cat_armor_special_protection.special_protection_type_acid", 6000); + gau_helmet.setIntAttribute("cat_armor_special_protection.special_protection_type_electricity", 6000); + + SWGObject gau_chest = core.objectService.createObject("object/tangible/wearables/armor/ithorian_guardian/shared_ith_armor_s02_chest_plate.iff", planet); + gau_chest.setIntAttribute("cat_armor_standard_protection.armor_eff_kinetic", 5000); + gau_chest.setIntAttribute("cat_armor_standard_protection.armor_eff_energy", 7000); + gau_chest.setIntAttribute("cat_armor_special_protection.special_protection_type_heat", 6000); + gau_chest.setIntAttribute("cat_armor_special_protection.special_protection_type_cold", 6000); + gau_chest.setIntAttribute("cat_armor_special_protection.special_protection_type_acid", 6000); + gau_chest.setIntAttribute("cat_armor_special_protection.special_protection_type_electricity", 6000); + + SWGObject gau_boots = core.objectService.createObject("object/tangible/wearables/armor/ithorian_guardian/shared_ith_armor_s02_boots.iff", planet); + SWGObject gau_gloves = core.objectService.createObject("object/tangible/wearables/armor/ithorian_guardian/shared_ith_armor_s02_gloves.iff", planet); + + + + inventory.add(gau_bicep_r); + inventory.add(gau_bicep_l); + inventory.add(gau_bracer_r); + inventory.add(gau_bracer_l); + inventory.add(gau_leggings); + inventory.add(gau_helmet); + inventory.add(gau_chest); + inventory.add(gau_boots); + inventory.add(gau_gloves); + + + return; + case 82: // Kashyyykian Ceremonial + SWGObject cer_bicep_r = core.objectService.createObject("object/tangible/wearables/armor/kashyyykian_ceremonial/shared_armor_kashyyykian_ceremonial_bicep_r.iff", planet); + cer_bicep_r.setIntAttribute("cat_armor_standard_protection.armor_eff_kinetic", 5000); + cer_bicep_r.setIntAttribute("cat_armor_standard_protection.armor_eff_energy", 7000); + cer_bicep_r.setIntAttribute("cat_armor_special_protection.special_protection_type_heat", 6000); + cer_bicep_r.setIntAttribute("cat_armor_special_protection.special_protection_type_cold", 6000); + cer_bicep_r.setIntAttribute("cat_armor_special_protection.special_protection_type_acid", 6000); + cer_bicep_r.setIntAttribute("cat_armor_special_protection.special_protection_type_electricity", 6000); + + SWGObject cer_bicep_l = core.objectService.createObject("object/tangible/wearables/armor/kashyyykian_ceremonial/shared_armor_kashyyykian_ceremonial_bicep_l.iff", planet); + cer_bicep_l.setIntAttribute("cat_armor_standard_protection.armor_eff_kinetic", 5000); + cer_bicep_l.setIntAttribute("cat_armor_standard_protection.armor_eff_energy", 7000); + cer_bicep_l.setIntAttribute("cat_armor_special_protection.special_protection_type_heat", 6000); + cer_bicep_l.setIntAttribute("cat_armor_special_protection.special_protection_type_cold", 6000); + cer_bicep_l.setIntAttribute("cat_armor_special_protection.special_protection_type_acid", 6000); + cer_bicep_l.setIntAttribute("cat_armor_special_protection.special_protection_type_electricity", 6000); + + SWGObject cer_bracer_r = core.objectService.createObject("object/tangible/wearables/armor/kashyyykian_ceremonial/shared_armor_kashyyykian_ceremonial_bracer_r.iff", planet); + cer_bracer_r.setIntAttribute("cat_armor_standard_protection.armor_eff_kinetic", 5000); + cer_bracer_r.setIntAttribute("cat_armor_standard_protection.armor_eff_energy", 7000); + cer_bracer_r.setIntAttribute("cat_armor_special_protection.special_protection_type_heat", 6000); + cer_bracer_r.setIntAttribute("cat_armor_special_protection.special_protection_type_cold", 6000); + cer_bracer_r.setIntAttribute("cat_armor_special_protection.special_protection_type_acid", 6000); + cer_bracer_r.setIntAttribute("cat_armor_special_protection.special_protection_type_electricity", 6000); + + SWGObject cer_bracer_l = core.objectService.createObject("object/tangible/wearables/armor/kashyyykian_ceremonial/shared_armor_kashyyykian_ceremonial_bracer_l.iff", planet); + cer_bracer_l.setIntAttribute("cat_armor_standard_protection.armor_eff_kinetic", 5000); + cer_bracer_l.setIntAttribute("cat_armor_standard_protection.armor_eff_energy", 7000); + cer_bracer_l.setIntAttribute("cat_armor_special_protection.special_protection_type_heat", 6000); + cer_bracer_l.setIntAttribute("cat_armor_special_protection.special_protection_type_cold", 6000); + cer_bracer_l.setIntAttribute("cat_armor_special_protection.special_protection_type_acid", 6000); + cer_bracer_l.setIntAttribute("cat_armor_special_protection.special_protection_type_electricity", 6000); + + SWGObject cer_leggings = core.objectService.createObject("object/tangible/wearables/armor/kashyyykian_ceremonial/shared_armor_kashyyykian_ceremonial_leggings.iff", planet); + cer_leggings.setIntAttribute("cat_armor_standard_protection.armor_eff_kinetic", 5000); + cer_leggings.setIntAttribute("cat_armor_standard_protection.armor_eff_energy", 7000); + cer_leggings.setIntAttribute("cat_armor_special_protection.special_protection_type_heat", 6000); + cer_leggings.setIntAttribute("cat_armor_special_protection.special_protection_type_cold", 6000); + cer_leggings.setIntAttribute("cat_armor_special_protection.special_protection_type_acid", 6000); + cer_leggings.setIntAttribute("cat_armor_special_protection.special_protection_type_electricity", 6000); + + SWGObject cer_chest = core.objectService.createObject("object/tangible/wearables/armor/kashyyykian_ceremonial/shared_armor_kashyyykian_ceremonial_chestplate.iff", planet); + cer_chest.setIntAttribute("cat_armor_standard_protection.armor_eff_kinetic", 5000); + cer_chest.setIntAttribute("cat_armor_standard_protection.armor_eff_energy", 7000); + cer_chest.setIntAttribute("cat_armor_special_protection.special_protection_type_heat", 6000); + cer_chest.setIntAttribute("cat_armor_special_protection.special_protection_type_cold", 6000); + cer_chest.setIntAttribute("cat_armor_special_protection.special_protection_type_acid", 6000); + cer_chest.setIntAttribute("cat_armor_special_protection.special_protection_type_electricity", 6000); + + + + inventory.add(cer_bicep_r); + inventory.add(cer_bicep_l); + inventory.add(cer_bracer_r); + inventory.add(cer_bracer_l); + inventory.add(cer_leggings); + inventory.add(cer_chest); + + return; + + case 90: // (Light) Jedi Robe + inventory.add(core.objectService.createObject("object/tangible/wearables/robe/shared_robe_jedi_light_s03.iff", planet)); + return; + case 91: // (Dark) Jedi Robe + inventory.add(core.objectService.createObject("object/tangible/wearables/robe/shared_robe_jedi_dark_s03.iff", planet)); + return; + case 92: // Belt of Master Bodo Baas + inventory.add(core.objectService.createObject("object/tangible/wearables/backpack/shared_fannypack_s01.iff", planet)); + return; + case 93: // Lightsaber Crystals + TangibleObject kraytPearl = (TangibleObject) core.objectService.createObject("object/tangible/component/weapon/lightsaber/shared_lightsaber_module_krayt_dragon_pearl.iff", planet); + kraytPearl.setAttachment("LootItemName", "kraytpearl_flawless"); + core.lootService.handleSpecialItems(kraytPearl, "kraytpearl"); + inventory.add(kraytPearl); + + TangibleObject kraytPearl2 = (TangibleObject) core.objectService.createObject("object/tangible/component/weapon/lightsaber/shared_lightsaber_module_krayt_dragon_pearl.iff", planet); + kraytPearl2.setAttachment("LootItemName", "kraytpearl_flawless"); + core.lootService.handleSpecialItems(kraytPearl2, "kraytpearl"); + inventory.add(kraytPearl2); + + TangibleObject kraytPearl3 = (TangibleObject) core.objectService.createObject("object/tangible/component/weapon/lightsaber/shared_lightsaber_module_krayt_dragon_pearl.iff", planet); + kraytPearl3.setAttachment("LootItemName", "kraytpearl_flawless"); + core.lootService.handleSpecialItems(kraytPearl3, "kraytpearl"); + inventory.add(kraytPearl3); + + TangibleObject kraytPearl4 = (TangibleObject) core.objectService.createObject("object/tangible/component/weapon/lightsaber/shared_lightsaber_module_krayt_dragon_pearl.iff", planet); + kraytPearl4.setAttachment("LootItemName", "kraytpearl_flawless"); + core.lootService.handleSpecialItems(kraytPearl4, "kraytpearl"); + inventory.add(kraytPearl4); + + TangibleObject kraytPearl5 = (TangibleObject) core.objectService.createObject("object/tangible/component/weapon/lightsaber/shared_lightsaber_module_krayt_dragon_pearl.iff", planet); + kraytPearl5.setAttachment("LootItemName", "kraytpearl_flawless"); + core.lootService.handleSpecialItems(kraytPearl5, "kraytpearl"); + inventory.add(kraytPearl5); + + TangibleObject kraytPearl6 = (TangibleObject) core.objectService.createObject("object/tangible/component/weapon/lightsaber/shared_lightsaber_module_krayt_dragon_pearl.iff", planet); + kraytPearl6.setAttachment("LootItemName", "kraytpearl_premium"); + core.lootService.handleSpecialItems(kraytPearl6, "kraytpearl"); + inventory.add(kraytPearl6); + + + + TangibleObject colorCrystal = (TangibleObject) core.objectService.createObject("object/tangible/component/weapon/lightsaber/shared_lightsaber_module_force_crystal.iff", planet); + colorCrystal.getAttributes().put("@obj_attr_n:condition", "100/100"); + colorCrystal.getAttributes().put("@obj_attr_n:crystal_owner", "\\#D1F56F UNTUNED \\#FFFFFF "); + colorCrystal.setAttachment("radial_filename", "item/tunable"); + core.lootService.setCustomization(colorCrystal, "colorcrystal"); + inventory.add(colorCrystal); + + TangibleObject lavaCrystal = (TangibleObject) core.objectService.createObject("object/tangible/component/weapon/lightsaber/shared_lightsaber_module_lava_crystal.iff", planet); + lavaCrystal.getAttributes().put("@obj_attr_n:condition", "100/100"); + lavaCrystal.getAttributes().put("@obj_attr_n:crystal_owner", "\\#D1F56F UNTUNED \\#FFFFFF "); + lavaCrystal.getAttributes().put("@obj_attr_n:color", "Lava"); + lavaCrystal.setAttachment("radial_filename", "item/tunable"); + inventory.add(lavaCrystal); + + return; + + case 110: + SurveyTool mineralSurveyTool = (SurveyTool) core.objectService.createObject("object/tangible/survey_tool/shared_survey_tool_mineral.iff", planet); + mineralSurveyTool.setCustomName("Mineral Survey Device"); + inventory.add(mineralSurveyTool); + + SurveyTool chemicalSurveyTool = (SurveyTool) core.objectService.createObject("object/tangible/survey_tool/shared_survey_tool_inorganic.iff", planet); + chemicalSurveyTool.setCustomName("Chemical Survey Device"); + inventory.add(chemicalSurveyTool); + + SurveyTool floraSurveyTool = (SurveyTool) core.objectService.createObject("object/tangible/survey_tool/shared_survey_tool_lumber.iff", planet); + floraSurveyTool.setCustomName("Flora Survey Device"); + inventory.add(floraSurveyTool); + + SurveyTool gasSurveyTool = (SurveyTool) core.objectService.createObject("object/tangible/survey_tool/shared_survey_tool_gas.iff", planet); + gasSurveyTool.setCustomName("Gas Survey Device"); + inventory.add(gasSurveyTool); + + SurveyTool waterSurveyTool = (SurveyTool) core.objectService.createObject("object/tangible/survey_tool/shared_survey_tool_moisture.iff", planet); + waterSurveyTool.setCustomName("Water Survey Device"); + inventory.add(waterSurveyTool); + + SurveyTool windSurveyTool = (SurveyTool) core.objectService.createObject("object/tangible/survey_tool/shared_survey_tool_wind.iff", planet); + windSurveyTool.setCustomName("Wind Survey Device"); + inventory.add(windSurveyTool); + + SurveyTool solarSurveyTool = (SurveyTool) core.objectService.createObject("object/tangible/survey_tool/shared_survey_tool_solar.iff", planet); + solarSurveyTool.setCustomName("Solar Survey Device"); + inventory.add(solarSurveyTool); + return; + case 111: + SWGObject deed1; + + // Minerals + deed1 = core.objectService.createObject("object/tangible/deed/harvester_deed/shared_harvester_ore_s1_deed.iff", planet); + deed1.setIntAttribute("examine_hoppersize", 27344); + deed1.setIntAttribute("examine_maintenance_rate", 5); + inventory.add(deed1); + + deed1 = core.objectService.createObject("object/tangible/deed/harvester_deed/shared_harvester_ore_s2_deed.iff", planet); + deed1.setIntAttribute("examine_hoppersize", 27344); + deed1.setIntAttribute("examine_maintenance_rate", 11); + inventory.add(deed1); + + deed1 = core.objectService.createObject("object/tangible/deed/harvester_deed/shared_harvester_ore_heavy_deed.iff", planet); + deed1.setIntAttribute("examine_hoppersize", 135400); + deed1.setIntAttribute("examine_maintenance_rate", 14); + inventory.add(deed1); + + deed1 = core.objectService.createObject("object/tangible/deed/harvester_deed/shared_harvester_ore_deed_elite.iff", planet); + deed1.setIntAttribute("examine_hoppersize", 250000); + deed1.setIntAttribute("examine_maintenance_rate", 44); + inventory.add(deed1); + + // Chemicals + deed1 = core.objectService.createObject("object/tangible/deed/harvester_deed/shared_harvester_liquid_deed.iff", planet); + deed1.setIntAttribute("examine_hoppersize", 27344); + deed1.setIntAttribute("examine_maintenance_rate", 5); + inventory.add(deed1); + + deed1 = core.objectService.createObject("object/tangible/deed/harvester_deed/shared_harvester_liquid_deed_medium.iff", planet); + deed1.setIntAttribute("examine_hoppersize", 27344); + deed1.setIntAttribute("examine_maintenance_rate", 11); + inventory.add(deed1); + + deed1 = core.objectService.createObject("object/tangible/deed/harvester_deed/shared_harvester_liquid_deed_heavy.iff", planet); + deed1.setIntAttribute("examine_hoppersize", 135400); + deed1.setIntAttribute("examine_maintenance_rate", 14); + inventory.add(deed1); + + deed1 = core.objectService.createObject("object/tangible/deed/harvester_deed/shared_harvester_liquid_deed_elite.iff", planet); + deed1.setIntAttribute("examine_hoppersize", 250000); + deed1.setIntAttribute("examine_maintenance_rate", 44); + inventory.add(deed1); + + // Flora + deed1 = core.objectService.createObject("object/tangible/deed/harvester_deed/shared_harvester_flora_deed.iff", planet); + deed1.setIntAttribute("examine_hoppersize", 27344); + deed1.setIntAttribute("examine_maintenance_rate", 5); + inventory.add(deed1); + + deed1 = core.objectService.createObject("object/tangible/deed/harvester_deed/shared_harvester_flora_deed_medium.iff", planet); + deed1.setIntAttribute("examine_hoppersize", 27344); + deed1.setIntAttribute("examine_maintenance_rate", 11); + inventory.add(deed1); + + deed1 = core.objectService.createObject("object/tangible/deed/harvester_deed/shared_harvester_flora_deed_heavy.iff", planet); + deed1.setIntAttribute("examine_hoppersize", 135400); + deed1.setIntAttribute("examine_maintenance_rate", 14); + inventory.add(deed1); + + deed1 = core.objectService.createObject("object/tangible/deed/harvester_deed/shared_harvester_flora_deed_elite.iff", planet); + deed1.setIntAttribute("examine_hoppersize", 250000); + deed1.setIntAttribute("examine_maintenance_rate", 44); + inventory.add(deed1); + + + // Gas + deed1 = core.objectService.createObject("object/tangible/deed/harvester_deed/shared_harvester_gas_deed.iff", planet); + deed1.setIntAttribute("examine_hoppersize", 27344); + deed1.setIntAttribute("examine_maintenance_rate", 5); + inventory.add(deed1); + + deed1 = core.objectService.createObject("object/tangible/deed/harvester_deed/shared_harvester_gas_deed_medium.iff", planet); + deed1.setIntAttribute("examine_hoppersize", 27344); + deed1.setIntAttribute("examine_maintenance_rate", 11); + inventory.add(deed1); + + deed1 = core.objectService.createObject("object/tangible/deed/harvester_deed/shared_harvester_gas_deed_heavy.iff", planet); + deed1.setIntAttribute("examine_hoppersize", 135400); + deed1.setIntAttribute("examine_maintenance_rate", 14); + inventory.add(deed1); + + deed1 = core.objectService.createObject("object/tangible/deed/harvester_deed/shared_harvester_gas_deed_elite.iff", planet); + deed1.setIntAttribute("examine_hoppersize", 250000); + deed1.setIntAttribute("examine_maintenance_rate", 44); + inventory.add(deed1); + + // Water + deed1 = core.objectService.createObject("object/tangible/deed/harvester_deed/shared_harvester_moisture_deed.iff", planet); + deed1.setIntAttribute("examine_hoppersize", 27344); + deed1.setIntAttribute("examine_maintenance_rate", 5); + inventory.add(deed1); + + deed1 = core.objectService.createObject("object/tangible/deed/harvester_deed/shared_harvester_moisture_deed_medium.iff", planet); + deed1.setIntAttribute("examine_hoppersize", 27344); + deed1.setIntAttribute("examine_maintenance_rate", 11); + inventory.add(deed1); + + deed1 = core.objectService.createObject("object/tangible/deed/harvester_deed/shared_harvester_moisture_deed_heavy.iff", planet); + deed1.setIntAttribute("examine_hoppersize", 135400); + deed1.setIntAttribute("examine_maintenance_rate", 14); + inventory.add(deed1); + + deed1 = core.objectService.createObject("object/tangible/deed/harvester_deed/shared_harvester_moisture_deed_elite.iff", planet); + deed1.setIntAttribute("examine_hoppersize", 250000); + deed1.setIntAttribute("examine_maintenance_rate", 44); + inventory.add(deed1); + + // Generators + deed1 = core.objectService.createObject("object/tangible/deed/generator_deed/shared_generator_fusion_deed.iff", planet); + deed1.setIntAttribute("examine_hoppersize", 250000); + deed1.setIntAttribute("examine_maintenance_rate", 19); + inventory.add(deed1); + + deed1 = core.objectService.createObject("object/tangible/deed/generator_deed/shared_generator_wind_deed.iff", planet); + deed1.setIntAttribute("examine_hoppersize", 250000); + deed1.setIntAttribute("examine_maintenance_rate", 10); + inventory.add(deed1); + + deed1 = core.objectService.createObject("object/tangible/deed/generator_deed/shared_generator_solar_deed.iff", planet); + deed1.setIntAttribute("examine_hoppersize", 250000); + deed1.setIntAttribute("examine_maintenance_rate", 15); + inventory.add(deed1); + +// deed1 = core.objectService.createObject("object/tangible/deed/generator_deed/shared_generator_photo_bio_deed.iff", planet); +// deed1.setIntAttribute("examine_hoppersize", 250000); +// deed1.setIntAttribute("examine_maintenance_rate", 19); +// inventory.add(deed1); + + deed1 = core.objectService.createObject("object/tangible/deed/generator_deed/shared_generator_geothermal_deed.iff", planet); + deed1.setIntAttribute("examine_hoppersize", 250000); + deed1.setIntAttribute("examine_maintenance_rate", 15); + inventory.add(deed1); + + return; + case 112: + core.resourceService.spawnSpecificResourceContainer("Radioactive", player, 100000); + return; + case 120: +// SWGObject houseDeed = core.objectService.createObject("object/tangible/deed/player_house_deed/shared_generic_house_small_deed.iff", planet); +// inventory.add(houseDeed); + + TangibleObject deed = (TangibleObject) core.objectService.createObject("object/tangible/deed/player_house_deed/shared_generic_house_small_deed.iff", planet); + deed.setIntAttribute("examine_maintenance_rate", 15); + inventory.add(deed); + + deed = (TangibleObject) core.objectService.createObject("object/tangible/deed/city_deed/shared_cityhall_tatooine_deed.iff", planet); + deed.setIntAttribute("examine_maintenance_rate", 15); + inventory.add(deed); + + return; + + case 121: + NGECore.getInstance().playerCityService.buildSandboxTestCity(player); + return; + + case 122: + core.simulationService.transferToPlanet(player, core.terrainService.getPlanetByName("dantooine"), new Point3D(4198,9,5210), player.getOrientation(), null); + return; + + case 124: + core.simulationService.transferToPlanet(player, core.terrainService.getPlanetByName("tatooine"), new Point3D(3521,4,-4800), player.getOrientation(), null); + return; + + case 164: + core.simulationService.transferToPlanet(player, core.terrainService.getPlanetByName("dantooine"), new Point3D(-284,18,2853), player.getOrientation(), null); + return; + + case 165: + core.simulationService.transferToPlanet(player, core.terrainService.getPlanetByName("dantooine"), new Point3D(-1586,18,-7688), player.getOrientation(), null); + return; + + case 166: + core.simulationService.transferToPlanet(player, core.terrainService.getPlanetByName("dantooine"), new Point3D(-4211,18,-2349), player.getOrientation(), null); + return; + + case 167: + core.simulationService.transferToPlanet(player, core.terrainService.getPlanetByName("dantooine"), new Point3D(-4211,18,-2349), player.getOrientation(), null); + return; + + case 168: + core.simulationService.transferToPlanet(player, core.terrainService.getPlanetByName("dathomir"), new Point3D(-2450,18,1521), player.getOrientation(), null); + return; + + case 123: + TangibleObject arakydDroids = (TangibleObject) core.objectService.createObject("object/tangible/mission/shared_mission_bounty_droid_probot.iff", planet); + arakydDroids.setStackable(true); + arakydDroids.setUses(20); + inventory.add(arakydDroids); + + TangibleObject seekerDroids = (TangibleObject) core.objectService.createObject("object/tangible/mission/shared_mission_bounty_droid_seeker.iff", planet); + seekerDroids.setStackable(true); + seekerDroids.setUses(20); + inventory.add(seekerDroids); + return; + + case 125: + TangibleObject genericCraftingTool = (TangibleObject) core.objectService.createObject("object/tangible/crafting/station/shared_generic_tool.iff", planet); + genericCraftingTool.setCustomName("Generic Crafting Tool"); + inventory.add(genericCraftingTool); + return; + case 130: + TangibleObject swoopDeed = (TangibleObject) core.objectService.createObject("object/tangible/deed/vehicle_deed/shared_speederbike_swoop_deed.iff", planet); + TangibleObject av21deed = (TangibleObject) core.objectService.createObject("object/tangible/deed/vehicle_deed/shared_landspeeder_av21_deed.iff", planet); + inventory.add(swoopDeed); + inventory.add(av21deed); + return; + + case 140: + TangibleObject guildRegistry = (TangibleObject) core.objectService.createObject("object/tangible/furniture/technical/shared_guild_registry_initial.iff", planet); + inventory.add(guildRegistry); + return; + + case 153: + Point3D position = new Point3D(-6222,1,7380); + core.simulationService.transferToPlanet(player, core.terrainService.getPlanetByName("dantooine"), position, player.getOrientation(), null); + } + } + }); + + core.suiService.openSUIWindow(window); + } + + @Override + public void insertOpcodes(Map swgOpcodes, Map objControllerOpcodes) { + } + + + @Override + public void shutdown() { + + } + +} + diff --git a/src/services/EntertainmentService.java b/src/services/EntertainmentService.java new file mode 100644 index 00000000..fccb607b --- /dev/null +++ b/src/services/EntertainmentService.java @@ -0,0 +1,954 @@ +package services; + +import java.nio.ByteOrder; +import java.util.HashMap; +import java.util.Map; +import java.util.Map.Entry; +import java.util.Vector; +import java.util.concurrent.ConcurrentHashMap; +import java.util.concurrent.Executors; +import java.util.concurrent.ScheduledExecutorService; +import java.util.concurrent.ScheduledFuture; +import java.util.concurrent.TimeUnit; + +import main.NGECore; + +import org.apache.mina.core.buffer.IoBuffer; +import org.apache.mina.core.session.IoSession; + +import protocol.swg.ObjControllerMessage; +import protocol.swg.objectControllerObjects.BuffBuilderChangeMessage; +import protocol.swg.objectControllerObjects.BuffBuilderEndMessage; +import protocol.swg.objectControllerObjects.ImageDesignMessage; +import resources.buffs.BuffItem; +import resources.common.BuffBuilder; +import resources.common.IDAttribute; +import resources.common.MathUtilities; +import resources.common.ObjControllerOpcodes; +import resources.common.OutOfBand; +import resources.common.Performance; +import resources.common.PerformanceEffect; +import resources.datatables.Posture; +import resources.objects.creature.CreatureObject; +import resources.objects.player.PlayerObject; +import resources.objects.tangible.TangibleObject; +import resources.skills.SkillMod; +import services.sui.SUIService.InputBoxType; +import services.sui.SUIWindow; +import services.sui.SUIWindow.Trigger; +import engine.clientdata.ClientFileManager; +import engine.clientdata.visitors.DatatableVisitor; +import engine.clientdata.visitors.IDManagerVisitor; +import engine.clients.Client; +import engine.resources.common.RGB; +import engine.resources.objects.SWGObject; +import engine.resources.service.INetworkDispatch; +import engine.resources.service.INetworkRemoteEvent; + +public class EntertainmentService implements INetworkDispatch { + + private NGECore core; + private final ScheduledExecutorService scheduler = Executors.newScheduledThreadPool(1); + + private Vector buffBuilderSkills = new Vector(); + //FIXME: create a wrapper class for double key lookup maps + private ConcurrentHashMap performances = new ConcurrentHashMap(); + private ConcurrentHashMap performancesByIndex = new ConcurrentHashMap(); + private ConcurrentHashMap danceMap = new ConcurrentHashMap(); + + private ConcurrentHashMap designMap = new ConcurrentHashMap(); + + //private Random ranWorkshop = new Random(); + + private Map performanceEffects = new ConcurrentHashMap(); + + public EntertainmentService(NGECore core) { + this.core = core; + populateSkillCaps(); + populatePerformanceTable(); + populatePerformanceEffects(); + registerCommands(); + loadCharacterCustomizationData(); + } + + @Override + public void insertOpcodes(Map swgOpcodes, Map objControllerOpcodes) { + objControllerOpcodes.put(ObjControllerOpcodes.IMAGE_DESIGN_CHANGE, new INetworkRemoteEvent() { + + @Override + public void handlePacket(IoSession session, IoBuffer data) throws Exception { + + data.order(ByteOrder.LITTLE_ENDIAN); + + Client client = core.getClient(session); + + if(client == null) + return; + + SWGObject sender = client.getParent(); + + if(sender == null) + return; + + ImageDesignMessage sentPacket = new ImageDesignMessage(); + sentPacket.deserialize(data); + + CreatureObject designTarget = (CreatureObject) core.objectService.getObject(sentPacket.getTargetId()); + CreatureObject designer = (CreatureObject) core.objectService.getObject(sentPacket.getDesignerId()); + + if (designTarget == null || designer == null) + return; + + if (designTarget.getClient() == null || designTarget.getClient().getSession() == null) + return; + + if (designer.getClient() == null || designer.getClient().getSession() == null) + return; + + Vector colorAttributes = sentPacket.getColorAttributes(); + Vector bodyAttributes = sentPacket.getBodyAttributes(); + // TODO: Attribute check for colors? + if (bodyAttributes != null) { + for (IDAttribute atr : bodyAttributes) { + //System.out.println("ATTRIBUTE: " + atr.getName() + " value of " + atr.getFloatValue()); + if (atr.getFloatValue() > 1f || atr.getFloatValue() < 0) { // RIP Height Exploit <3 + return; + } + } + } + + /*if (colorAttributes != null) { + for (IDAttribute atr : colorAttributes) { + System.out.println("COLOR ATTRIBUTE: " + atr.getName() + " value of " + atr.getValue()); + } + }*/ + + if (sentPacket.getTargetId() != sentPacket.getDesignerId()) { + + if (sentPacket.isCustomerAccepted() && sentPacket.isDesignerCommited()) { + System.out.print("Both Accepted!"); + + sentPacket.setEndMessage(true); + + int fee = sentPacket.getMoneyDemanded() + sentPacket.getMoneyOffered(); + if (fee > 0) { + int payersCash = designTarget.getCashCredits(); + + if (payersCash < fee) { + + if (designTarget != designer) { + ObjControllerMessage msg = new ObjControllerMessage(0x0B, sentPacket); + designTarget.getClient().getSession().write(msg.serialize()); + + // Window is closed already, so this shouldn't be necessary + //ObjControllerMessage designMsg = new ObjControllerMessage(0x0B, sentPacket); + //designer.getClient().getSession().write(designMsg.serialize()); + + designTarget.sendSystemMessage("You don't have enough credits to pay the fee.", (byte) 0); + designer.sendSystemMessage("Your target did not have the required payment fee", (byte) 0); + + } + }else { + // TODO: Apply customization + designTarget.setCashCredits(designTarget.getCashCredits() - fee); + designer.setCashCredits(designer.getCashCredits() + fee); + + handleImageDesign(designer, designTarget, colorAttributes, bodyAttributes, sentPacket.getHair(), sentPacket.getHoloEmote()); + + sentPacket.setEndMessage(true); + sentPacket.setObjectId(designTarget.getObjectId()); + + ObjControllerMessage msg = new ObjControllerMessage(0x0B, sentPacket); + designTarget.getClient().getSession().write(msg.serialize()); + } + } else { + handleImageDesign(designer, designTarget, colorAttributes, bodyAttributes, sentPacket.getHair(), sentPacket.getHoloEmote()); + sentPacket.setEndMessage(true); + sentPacket.setObjectId(designTarget.getObjectId()); + + ObjControllerMessage msg = new ObjControllerMessage(0x0B, sentPacket); + designTarget.getClient().getSession().write(msg.serialize()); + } + + } else if (sentPacket.getObjectId() == designTarget.getObjectId()) { + sentPacket.setObjectId(designer.getObjectId()); + + ObjControllerMessage msg = new ObjControllerMessage(0x0B, sentPacket); + designer.getClient().getSession().write(msg.serialize()); + + } else if (sentPacket.getObjectId() == designer.getObjectId()) { + sentPacket.setObjectId(designTarget.getObjectId()); + + ObjControllerMessage msg = new ObjControllerMessage(0x0B, sentPacket); + designTarget.getClient().getSession().write(msg.serialize()); + } + } else { + // No need to send a close packet message because the client automatically closes the ID window for the Desginer when they commit + if (sentPacket.isDesignerCommited()) + handleImageDesign(designer, designTarget, colorAttributes, bodyAttributes, sentPacket.getHair(), sentPacket.getHoloEmote()); + else + return; + } + } + + }); + + objControllerOpcodes.put(ObjControllerOpcodes.IMAGE_DESIGN_END, new INetworkRemoteEvent() { + + @Override + public void handlePacket(IoSession session, IoBuffer data) throws Exception { + + data.order(ByteOrder.LITTLE_ENDIAN); + + Client client = core.getClient(session); + + if(client == null) + return; + + SWGObject sender = client.getParent(); + + if(sender == null) + return; + + ImageDesignMessage sentPacket = new ImageDesignMessage(); + sentPacket.deserialize(data); + + if (sentPacket.getTargetId() == sentPacket.getDesignerId()) + return; + + if (sentPacket.getObjectId() == sentPacket.getDesignerId()) { + CreatureObject target = (CreatureObject) core.objectService.getObject(sentPacket.getTargetId()); + if (target == null) + return; + + sentPacket.setEndMessage(true); + sentPacket.setObjectId(target.getObjectId()); + ObjControllerMessage endMessage = new ObjControllerMessage(0x0B, sentPacket); + target.getClient().getSession().write(endMessage.serialize()); + + } else if (sentPacket.getObjectId() == sentPacket.getTargetId()) { + CreatureObject designer = (CreatureObject) core.objectService.getObject(sentPacket.getDesignerId()); + if (designer == null) + return; + + sentPacket.setEndMessage(true); + sentPacket.setObjectId(designer.getObjectId()); + ObjControllerMessage endMessage = new ObjControllerMessage(0x0B, sentPacket); + designer.getClient().getSession().write(endMessage.serialize()); + } + } + + }); + + objControllerOpcodes.put(ObjControllerOpcodes.BUFF_BUILDER_END, new INetworkRemoteEvent() { + + @Override + public void handlePacket(IoSession session, IoBuffer data) throws Exception { + + data.order(ByteOrder.LITTLE_ENDIAN); + + Client client = core.getClient(session); + + if(client == null) + return; + + SWGObject sender = client.getParent(); + + if(sender == null) + return; + + BuffBuilderEndMessage sentPacket = new BuffBuilderEndMessage(); + sentPacket.deserialize(data); + + SWGObject buffer = core.objectService.getObject(sentPacket.getBufferId()); + SWGObject buffRecipient = core.objectService.getObject(sentPacket.getBuffRecipientId()); + + if(buffer == null || buffRecipient == null) + return; + + // No need to send end packet when buffing yourself. + if (buffRecipient != buffer) { + if(buffRecipient.getClient() == null || buffRecipient.getClient().getSession() == null) + return; + + if (sender.getObjectId() == buffer.getObjectId()) { + // send close packet to recipient + BuffBuilderEndMessage end = new BuffBuilderEndMessage(sentPacket); + end.setObjectId(buffRecipient.getObjectId()); + + end.setBufferId(buffer.getObjectId()); + end.setBuffRecipientId(buffRecipient.getObjectId()); + + ObjControllerMessage closeMessage = new ObjControllerMessage(0x0B, end); + buffRecipient.getClient().getSession().write(closeMessage.serialize()); + + } + if (sender.getObjectId() == buffRecipient.getObjectId()) { + // send close packet to buffer + BuffBuilderEndMessage end = new BuffBuilderEndMessage(sentPacket); + end.setObjectId(buffer.getObjectId()); + + end.setBufferId(buffer.getObjectId()); + end.setBuffRecipientId(buffRecipient.getObjectId()); + + ObjControllerMessage closeMessage = new ObjControllerMessage(0x0B, end); + buffer.getClient().getSession().write(closeMessage.serialize()); + CreatureObject cre = (CreatureObject) buffer; + cre.sendSystemMessage("The buff recipient cancelled the buff builder session.", (byte) 0); + } + } + } + }); + + objControllerOpcodes.put(ObjControllerOpcodes.BUFF_BUILDER_CHANGE, new INetworkRemoteEvent() { + + @Override + public void handlePacket(IoSession session, IoBuffer data) throws Exception { + data.order(ByteOrder.LITTLE_ENDIAN); + + Client client = core.getClient(session); + + if(client == null) + return; + + SWGObject sender = client.getParent(); + + if(sender == null) + return; + + BuffBuilderChangeMessage sentPacket = new BuffBuilderChangeMessage(); + sentPacket.deserialize(data); + + Vector statBuffs = sentPacket.getStatBuffs(); + + CreatureObject buffer = (CreatureObject) core.objectService.getObject(sentPacket.getBufferId()); + CreatureObject buffRecipient = (CreatureObject) core.objectService.getObject(sentPacket.getBuffRecipientId()); + + if (buffer != buffRecipient) { + + BuffBuilderChangeMessage changeMessage = new BuffBuilderChangeMessage(); + changeMessage.setBuffCost(sentPacket.getBuffCost()); + changeMessage.setTime(sentPacket.getTime()); + changeMessage.setBufferId(buffer.getObjectId()); + changeMessage.setBuffRecipientId(buffRecipient.getObjectId()); + + if (!statBuffs.isEmpty()) + changeMessage.setStatBuffs(statBuffs); + + if (sentPacket.getAccepted() == true && sentPacket.getBuffRecipientAccepted() == 1) { + + if (sentPacket.getBuffCost() > 0) { + if (buffRecipient.getCashCredits() >= sentPacket.getBuffCost()) { + buffRecipient.setCashCredits(buffRecipient.getCashCredits() - sentPacket.getBuffCost()); + } else { + return; + } + } + + giveInspirationBuff(buffRecipient, buffer, statBuffs); + + BuffBuilderEndMessage endBuilder = new BuffBuilderEndMessage(changeMessage); + endBuilder.setObjectId(buffer.getObjectId()); + + BuffBuilderEndMessage endRecipient = new BuffBuilderEndMessage(changeMessage); + endRecipient.setObjectId(buffRecipient.getObjectId()); + + ObjControllerMessage closeBuilder = new ObjControllerMessage(0x0B, endBuilder); + buffer.getClient().getSession().write(closeBuilder.serialize()); + + ObjControllerMessage closeRecipient = new ObjControllerMessage(0x0B, endRecipient); + buffRecipient.getClient().getSession().write(closeRecipient.serialize()); + + } else if (sentPacket.getAccepted() == true && sentPacket.getBuffRecipientAccepted() == 0) { + changeMessage.setAccepted(true); + changeMessage.setObjectId(buffRecipient.getObjectId()); + + ObjControllerMessage objMsg = new ObjControllerMessage(0x0B, changeMessage); + buffRecipient.getClient().getSession().write(objMsg.serialize()); + } else { + changeMessage.setAccepted(false); + changeMessage.setObjectId(sentPacket.getBuffRecipientId()); + + ObjControllerMessage objMsg = new ObjControllerMessage(0x0B, changeMessage); + buffRecipient.getClient().getSession().write(objMsg.serialize()); + } + + } else { + if (sentPacket.getAccepted() == true) { + giveInspirationBuff(buffRecipient, buffer, statBuffs); + BuffBuilderEndMessage endBuilder = new BuffBuilderEndMessage(sentPacket); + endBuilder.setObjectId(buffer.getObjectId()); + + ObjControllerMessage objMsg = new ObjControllerMessage(0x0B, endBuilder); + buffRecipient.getClient().getSession().write(objMsg.serialize()); + } + } + } + + }); + } + + private void populatePerformanceTable() { + + try { + DatatableVisitor PerformanceVisitor = ClientFileManager.loadFile("datatables/performance/performance.iff", DatatableVisitor.class); + + //rformanceVisitor. + + for (int r = 0; r < PerformanceVisitor.getRowCount(); r++) { + Performance p = new Performance(); + + /* for (int j=0; j < PerformanceVisitor.getColumnCount(); j++) { + System.out.println(j + ": " + PerformanceVisitor.getObject(r, j)); + }*/ + + p.setPerformanceName( ( (String) PerformanceVisitor.getObject(r, 0) ).toLowerCase()); + p.setInstrumentAudioId((int) PerformanceVisitor.getObject(r, 1)); + p.setRequiredSong((String) PerformanceVisitor.getObject(r, 2)); + p.setRequiredInstrument((String) PerformanceVisitor.getObject(r, 3)); + p.setRequiredDance((String) PerformanceVisitor.getObject(r, 4)); + p.setDanceVisualId((int) PerformanceVisitor.getObject(r, 5)); + p.setActionPointsPerLoop((int) PerformanceVisitor.getObject(r, 6)); + p.setLoopDuration((float) PerformanceVisitor.getObject(r, 7)); + p.setType((int) PerformanceVisitor.getObject(r, 8)); + p.setBaseXp((int) PerformanceVisitor.getObject(r, 9)); + p.setFlourishXpMod((int) PerformanceVisitor.getObject(r, 10)); + p.setHealMindWound((int) PerformanceVisitor.getObject(r, 11)); + p.setHealShockWound((int) PerformanceVisitor.getObject(r, 12)); + p.setRequiredSkillMod((String) PerformanceVisitor.getObject(r, 13)); + p.setRequiredSkillModValue((int) PerformanceVisitor.getObject(r, 14)); + p.setMainloop((String) PerformanceVisitor.getObject(r, 15)); + p.setFlourish1((String) PerformanceVisitor.getObject(r, 16)); + p.setFlourish2((String) PerformanceVisitor.getObject(r, 17)); + p.setFlourish3((String) PerformanceVisitor.getObject(r, 18)); + p.setFlourish4((String) PerformanceVisitor.getObject(r, 19)); + p.setFlourish5((String) PerformanceVisitor.getObject(r, 20)); + p.setFlourish6((String) PerformanceVisitor.getObject(r, 21)); + p.setFlourish7((String) PerformanceVisitor.getObject(r, 22)); + p.setFlourish8((String) PerformanceVisitor.getObject(r, 23)); + p.setIntro((String) PerformanceVisitor.getObject(r, 24)); + p.setOutro((String) PerformanceVisitor.getObject(r, 25)); + p.setLineNumber(r); + + if (p.getType() == -1788534963) { + danceMap.put(new Integer(p.getDanceVisualId()), p); + } + performances.put(p.getPerformanceName(), p); + performancesByIndex.put(r, p); + } + + } catch (InstantiationException | IllegalAccessException e) { + e.printStackTrace(); + } + } + + private void populateSkillCaps() { + try { + DatatableVisitor buffBuilder = ClientFileManager.loadFile("datatables/buff/buff_builder.iff", DatatableVisitor.class); + + for (int r = 0; r < buffBuilder.getRowCount(); r++) { + String skillName = ((String) buffBuilder.getObject(r, 0)); + String category = ((String) buffBuilder.getObject(r, 1)); + String statAffects = ((String) buffBuilder.getObject(r, 2)); + int maxTimes = ((int) buffBuilder.getObject(r, 3)); + int cost = ((int) buffBuilder.getObject(r, 4)); + int affectAmount = ((int) buffBuilder.getObject(r, 5)); + String requiredExpertise = ((String) buffBuilder.getObject(r, 6)); + + BuffBuilder item = new BuffBuilder(); + item.setStatName(skillName); + item.setCategory(category); + item.setStatAffects(statAffects); + item.setMaxTimesApplied(maxTimes); + item.setCost(cost); + item.setAffectAmount(affectAmount); + item.setRequiredExpertise(requiredExpertise); + + buffBuilderSkills.add(item); + } + } catch (InstantiationException | IllegalAccessException e) { + e.printStackTrace(); + } + } + + private void populatePerformanceEffects() { + try { + DatatableVisitor effects = ClientFileManager.loadFile("datatables/performance/perform_effect.iff", DatatableVisitor.class); + + for (int r = 0; r < effects.getRowCount(); r++) { + String effectName = ((String) effects.getObject(r, 0)); + String performanceType = ((String) effects.getObject(r, 1)); + int requiredSkillModValue = ((int) effects.getObject(r, 2)); + Boolean requiredPerforming = ((Boolean) effects.getObject(r, 3)); + int targetType = ((int) effects.getObject(r, 4)); + float effectDuration = ((float) effects.getObject(r, 5)); + int effectActionCost = ((int) effects.getObject(r, 6)); + + PerformanceEffect item = new PerformanceEffect(); + item.setEffectActionCost(effectActionCost); + item.setEffectDuration(effectDuration); + item.setName(effectName); + item.setPerformanceType(performanceType); + item.setRequiredPerforming(requiredPerforming); + item.setRequiredSkillModValue(requiredSkillModValue); + item.setTargetType(targetType); + + performanceEffects.put(effectName.toLowerCase(), item); + + } + } catch (InstantiationException | IllegalAccessException e) { + e.printStackTrace(); + } + } + + private void registerCommands() { + core.commandService.registerCommand("bandflourish"); + core.commandService.registerCommand("flourish"); + core.commandService.registerAlias("flo","flourish"); + core.commandService.registerCommand("groupdance"); + core.commandService.registerCommand("startdance"); + core.commandService.registerCommand("stopdance"); + core.commandService.registerCommand("watch"); + core.commandService.registerCommand("stopwatching"); + core.commandService.registerCommand("holoEmote"); + core.commandService.registerCommand("covercharge"); + //core.commandService.registerCommand("en_holographic_recall"); + //core.commandService.registerCommand("en_holographic_image"); + core.commandService.registerCommand("imagedesign"); + // TODO: Add /bandsolo, /bandpause, /changeBandMusic, /changeDance, /changeGroupDance, /changeMusic + + // Entertainer Effects + core.commandService.registerCommand("centerStage"); + core.commandService.registerCommand("colorSwirl"); + core.commandService.registerCommand("colorlights"); + core.commandService.registerCommand("floorLights"); // referred to also as Dance Floor + core.commandService.registerCommand("dazzle"); + core.commandService.registerCommand("distract"); + core.commandService.registerCommand("featuredSolo"); + core.commandService.registerCommand("firejet"); + core.commandService.registerCommand("firejet2"); + core.commandService.registerCommand("laserShow"); + core.commandService.registerCommand("smokebomb"); + core.commandService.registerCommand("spotlight"); + core.commandService.registerCommand("ventriloquism"); + } + + public void giveInspirationBuff(CreatureObject reciever, CreatureObject buffer, Vector buffVector) { + + Vector availableStats = buffBuilderSkills; + Vector stats = new Vector(); + + for (BuffItem item : buffVector) { + for(BuffBuilder builder : availableStats) { + if(builder.getStatName().equalsIgnoreCase(item.getSkillName())) { + if(builder.getMaxTimesApplied() < item.getInvested()) + return; + + // Ent. Expertise Percent + (invested points * affect amount) = stat + int bonusPoints = (int) (builder.getAffectAmount() *((float) item.getEntertainerBonus()/100f)); + int affectTotal = bonusPoints + (item.getInvested() * builder.getAffectAmount()); + + BuffItem stat = new BuffItem(builder.getStatAffects(), item.getInvested(), item.getEntertainerBonus()); + stat.setAffectAmount(affectTotal); + + stats.add(stat); + } + } + } + + reciever.setAttachment("buffWorkshop", stats); + + if (buffer == reciever) + reciever.setAttachment("inspireDuration", 215); + + //PlayerObject rPlayer = (PlayerObject) reciever.getSlottedObject("ghost"); + + //long timeStamp = 0; + //if (reciever.getAttachment("buffWorkshopTimestamp") != null) + //timeStamp = (long) reciever.getAttachment("buffWorkshopTimestamp"); + + if (reciever.hasBuff("buildabuff_inspiration")) + core.buffService.removeBuffFromCreature(reciever, reciever.getBuffByName("buildabuff_inspiration")); + + core.buffService.addBuffToCreature(reciever, "buildabuff_inspiration", buffer); + /*if (core.buffService.addBuffToCreature(reciever, "buildabuff_inspiration", buffer) && !rPlayer.getProfession().equals("entertainer_1a")) { + if (timeStamp == 0 || (System.currentTimeMillis() - timeStamp > 86400000)) { + float random = ranWorkshop.nextFloat(); + if (random < 0.75f) { + + if(rPlayer.getProfession().contains("trader")) { core.collectionService.addCollection(buffer, "prof_trader"); } + + else { + core.collectionService.addCollection(buffer, rPlayer.getProfession()); + } + } + } else { buffer.sendSystemMessage("@collection:buffed_too_soon", (byte) 0); } + reciever.setAttachment("buffWorkshopTimestamp", System.currentTimeMillis()); + }*/ + } + + public int getDanceVisualId(String danceName) { + Performance p = performances.get(danceName); + + //if 0 , then it's no dance. need to handle that in the script. + return ((p == null) ? 0 : p.getDanceVisualId()); + } + + public Map getAvailableDances(CreatureObject actor) { + + Map dances = new HashMap(); + for (int index : danceMap.keySet()) { + if (!canDance(actor, danceMap.get(index) )) { continue; } + dances.put( new Long( danceMap.get(index).getDanceVisualId() ), danceMap.get(index).getPerformanceName() ); + } + + return dances; + + } + + public boolean isDance(int visualId) { + return ( danceMap.get(visualId) != null ) ; + } + + public boolean canDance(CreatureObject actor, Performance dance) { + if (actor.hasAbility(dance.getRequiredDance())) { + return true; + } + return false; + } + + public boolean canDance(CreatureObject actor, int visualId) { + if (!isDance(visualId)) { return false; } + return canDance(actor, danceMap.get(visualId)); + } + + public Performance getDance(int visualId) { + return danceMap.get(visualId); + } + + public Performance getPerformance(String name) { + return performances.get(name); + } + + public Performance getPerformanceByIndex(int index) { + return performancesByIndex.get(index); + } + + public Map getPerformanceEffects() { + return performanceEffects; + } + + public void startPerformance(CreatureObject actor, int performanceId, int performanceCounter, String skillName, boolean isDance) { + actor.setPerformanceId(performanceId, isDance); + actor.setPerformanceCounter(performanceCounter); + actor.setCurrentAnimation(skillName); + actor.setPerformanceType(isDance); + + actor.startPerformance(); + } + + public void startPerformanceExperience(final CreatureObject entertainer) { + final ScheduledFuture experienceTask = scheduler.scheduleAtFixedRate(() -> { + + Performance p = performancesByIndex.get(entertainer.getPerformanceId()); + if (p == null) { + entertainer.setFlourishCount(0); + return; + } + + int floXP = p.getFlourishXpMod(); + int floCount = entertainer.getFlourishCount(); + + //FIXME: this is not an accurate implementation yet. It needs group bonuses and other things. + int XP = (int) Math.round( ((floCount > 2) ? 2 : floCount) * floXP * 3.8 ); + + entertainer.setFlourishCount(0); + core.playerService.giveExperience(entertainer, XP); + + }, 10000, 10000, TimeUnit.MILLISECONDS); + + entertainer.setEntertainerExperience(experienceTask); + + } + + public void startSpectating(final CreatureObject spectator, final CreatureObject performer, boolean spectateType) { + + // visual + if (spectator.getPerformanceWatchee() == performer && spectateType) + spectator.getPerformanceWatchee().removeSpectator(spectator); + // music + else if (spectator.getPerformanceListenee() == performer && !spectateType) + spectator.getPerformanceListenee().removeSpectator(spectator); + + spectator.setPerformanceWatchee(performer); + performer.addSpectator(spectator); + spectator.setMoodAnimation("entertained"); + + final ScheduledFuture spectatorTask = scheduler.scheduleAtFixedRate(() -> { + + if (spectator.getPosition().getDistance2D(performer.getWorldPosition()) > (float) 70) { + + if(((performer.getPerformanceType()) ? "dance" : "music").equals("dance")) { + spectator.setPerformanceWatchee(null); + spectator.sendSystemMessage("You stop watching " + performer.getCustomName() + " because " + performer.getCustomName() + + " is out of range.", (byte) 0); + } + else { + spectator.setPerformanceListenee(null); + spectator.sendSystemMessage("You stop listening to " + performer.getCustomName() + " because " + performer.getCustomName() + + " is out of range.", (byte) 0); + } + spectator.setMoodAnimation("neutral"); + performer.removeSpectator(spectator); + + if (spectator.getInspirationTick().cancel(true)) + spectator.getSpectatorTask().cancel(true); + } + + }, 2, 2, TimeUnit.SECONDS); + + spectator.setSpectatorTask(spectatorTask); + + if(((PlayerObject)performer.getSlottedObject("ghost")).getProfession().equals("entertainer_1a")) { + handleInspirationTicks(spectator, performer); + } + + if(spectateType) + spectator.sendSystemMessage("You start watching " + performer.getCustomName() + ".", (byte) 0); + else + spectator.sendSystemMessage("You start listening to " + performer.getCustomName() + ".", (byte) 0); + + } + + public void performFlourish(final CreatureObject performer, int flourish) { + + if (performer.getFlourishCount() > 0 || performer.isPerformingFlourish()) { + performer.sendSystemMessage("@performance:flourish_wait_self", (byte) 0); + return; + } + Performance performance = getPerformanceByIndex(performer.getPerformanceId()); + + if(performance == null) + return; + + String anmFlo = "skill_action_" + flourish; + + if (flourish == 9) + anmFlo = "mistake"; + + performer.setFlourishCount(1); + performer.setPerformingFlourish(true); + performer.sendSystemMessage("@performance:flourish_perform", (byte) 0); + performer.doSkillAnimation(anmFlo); + + scheduler.schedule(() -> { + performer.setFlourishCount(0); + performer.setPerformingFlourish(false); + }, (long) performance.getLoopDuration(), TimeUnit.SECONDS); + } + + public boolean performEffect(final CreatureObject performer, String command, String effect, TangibleObject target) { + PerformanceEffect pEffect = performanceEffects.get(command.toLowerCase()); + + if(pEffect == null) + return false; + + String performance = (performer.getPerformanceType()) ? "dance" : "music"; + + if(performer.isPerformingEffect()) { + performer.sendSystemMessage("@performance:effect_wait_self", (byte) 0); + return false; + } + + if (performer.getPosture() != Posture.SkillAnimating) { + performer.sendSystemMessage("@performance:effect_not_performing", (byte) 0); + return false; + } + + if(performance.equals("dance") && !pEffect.isDance() || performance.equals("music") && !pEffect.isMusic()) { + performer.sendSystemMessage("@performance:effect_not_performing_correct", (byte) 0); + return false; + } + + if(performer.getAction() < pEffect.getEffectActionCost()) { + performer.sendSystemMessage("@performance:effect_too_tired", (byte) 0); + return false; + } + + performer.setAction(performer.getAction() - pEffect.getEffectActionCost()); + + performer.setPerformingEffect(true); + + if(target != null) + target.playEffectObject(effect, ""); + + else + performer.playEffectObject(effect, ""); + + scheduler.schedule(() -> { + performer.setPerformingEffect(false); + }, (long) pEffect.getEffectDuration(), TimeUnit.SECONDS); + + return true; + } + + public void handleInspirationTicks(final CreatureObject spectator, final CreatureObject performer) { + // http://youtu.be/WqyAde-oC7o?t=11m14s << Player watching entertainer (Has ring only, no pet, + 15 min ticks) + // TODO: Camp/Cantina checks for expertise and duration bonus %. Right now only using basic values. + final ScheduledFuture inspirationTick = scheduler.scheduleAtFixedRate(() -> { + + int time = 0; // current buff duration time (minutes) + int buffCap = 215; // 5 hours 35 minutes - 2 hours (buff duration increase bonus) << Taken from video, doesn't account for performance bonuses etc. + + if (spectator.getAttachment("inspireDuration") != null) + time+= (int) spectator.getAttachment("inspireDuration"); + + if (performer.getSkillMod("expertise_en_inspire_buff_duration_increase") != null) { + SkillMod durationMod = performer.getSkillMod("expertise_en_inspire_buff_duration_increase"); + buffCap += durationMod.getBase() + durationMod.getModifier(); + } + + if (time >= buffCap) { + spectator.setAttachment("inspireDuration", buffCap); // incase someone went over cap + spectator.getInspirationTick().cancel(true); + } else { + int entTick = 10; + if (performer.getSkillMod("expertise_en_inspire_pulse_duration_increase") != null) { + SkillMod pulseMod = performer.getSkillMod("expertise_en_inspire_pulse_duration_increase"); + entTick += pulseMod.getBase() + pulseMod.getModifier(); + } + + int duration = (time + entTick); // minutes + int hMinutes = MathUtilities.secondsToHourMinutes(duration * 60); + int hours = MathUtilities.secondsToWholeHours(duration * 60); + + spectator.showFlyText(OutOfBand.ProsePackage("@spam:buff_duration_tick_observer", "TO", hours + " hours , " + hMinutes + " minutes "), 0.66f, new RGB(255, 182, 193), 3, false); + + spectator.setAttachment("inspireDuration", duration); + //System.out.println("Inspire Duration: " + spectator.getAttachment("inspireDuration") + " on " + spectator.getCustomName()); + } + + }, 10, 10, TimeUnit.SECONDS); + spectator.setInspirationTick(inspirationTick); + } + + public void handleCoverCharge(final CreatureObject actor, final CreatureObject performer) { + final int charge = performer.getCoverCharge(); + + if (charge == 0) + return; + + else { + SUIWindow notification = core.suiService.createMessageBox(InputBoxType.INPUT_BOX_OK, "Cover Charge", performer.getCustomName() + + " has a cover charge of " + performer.getCoverCharge() + ". Do you wish to pay it?", actor, performer, (float) 30); + Vector returnParams = new Vector(); + + returnParams.add("btnOk:Text"); + + notification.addHandler(0, "", Trigger.TRIGGER_OK, returnParams, (owner, eventType, returnList) -> { + if (eventType == 0) { + if (charge > actor.getCashCredits()) { + actor.sendSystemMessage("You do not have enough credits to cover the charge.", (byte) 0); // TODO: Find the message in the STF files. + return; + } else{ + actor.setCashCredits(actor.getCashCredits() - charge); + actor.sendSystemMessage("You payed the cover charge of " + charge + " to " + performer.getCustomName(), (byte) 0); // TODO: Find the message in the STF files. + performer.setCashCredits(performer.getCashCredits() + charge); + + startSpectating(actor, performer, performer.getPerformanceType()); + + } + } + }); + core.suiService.openSUIWindow(notification); + } + } + + private void handleImageDesign(CreatureObject designer, CreatureObject designTarget, Vector colorAttributes, Vector bodyAttributes, String hairTemplate, String holoEmote) { + + if (hairTemplate != null && !hairTemplate.equals("")) { + if(!hairTemplate.startsWith("object/tangible/hair/")) + return; + String sharedHairTemplate = hairTemplate.replace("/hair_", "/shared_hair_"); + TangibleObject hairObject = (TangibleObject) core.objectService.createObject(sharedHairTemplate, designTarget.getPlanet()); + + if (hairObject == null) + return; + + TangibleObject oldHair = (TangibleObject) designTarget.getSlottedObject("hair"); + if (oldHair == null) + return; + core.objectService.destroyObject(oldHair); + + designTarget.add(hairObject); + + designTarget.addObjectToEquipList(hairObject); + + } + + if (bodyAttributes != null) { + for (IDAttribute atr : bodyAttributes) { + if (atr.getName().equals("height")) + designTarget.setHeight(atr.getFloatValue()); + + // TODO: Body Attributes + } + } + + if (colorAttributes != null) { + for (IDAttribute atr : colorAttributes) { + if (atr.getName().equals("color_hair")){ + // TODO: Color Attributes + } + } + } + if (holoEmote != null) { + PlayerObject player = (PlayerObject) designTarget.getSlottedObject("ghost"); + if (player != null) { + player.setHoloEmote(holoEmote); + player.setHoloEmoteUses(20); + designTarget.sendSystemMessage("@image_designer:new_holoemote", (byte) 0); + } + } + + } + + private void loadCharacterCustomizationData() { + try { + IDManagerVisitor visitor = ClientFileManager.loadFile("customization/customization_id_manager.iff", IDManagerVisitor.class); + + designMap = visitor.getCustomizationMap(); + + } catch (InstantiationException | IllegalAccessException e) { + e.printStackTrace(); + } + } + + public String getCustomizationString(int number){ + synchronized (designMap) { + for (Entry entry : designMap.entrySet()) { + if (entry.getValue().intValue() == number) { + return entry.getKey(); + } + } + } + return ""; + } + + public int getCustomizationValue(String customizationString) { + synchronized(designMap){ + for(Entry entry : designMap.entrySet()) { + if (entry.getKey().equals(customizationString)) { + return entry.getValue().intValue(); + } + } + } + return 0; + } + + @Override + public void shutdown() { + + } + +} diff --git a/src/services/EquipmentService.java b/src/services/EquipmentService.java deleted file mode 100644 index 8223e3b0..00000000 --- a/src/services/EquipmentService.java +++ /dev/null @@ -1,101 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2013 - * - * This File is part of NGECore2. - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with this program. If not, see . - * - * Using NGEngine to work with NGECore2 is making a combined work based on NGEngine. - * Therefore all terms and conditions of the GNU Lesser General Public License cover the combination. - ******************************************************************************/ -package services; - -import java.util.Map; -import java.util.Map.Entry; -import java.util.TreeMap; -import org.python.core.Py; -import org.python.core.PyObject; -import resources.objects.creature.CreatureObject; -import main.NGECore; -import engine.resources.objects.SWGObject; -import engine.resources.service.INetworkDispatch; -import engine.resources.service.INetworkRemoteEvent; - -public class EquipmentService implements INetworkDispatch { - - private NGECore core; - - public EquipmentService(NGECore core) { - this.core = core; - } - - @Override - public void insertOpcodes(Map arg0, Map arg1) { - - } - - @Override - public void shutdown() { - - } - - public void equip(CreatureObject actor, SWGObject item, SWGObject replacedItem) { - - if(replacedItem != null) - unequip(actor, replacedItem); - - String template = item.getTemplate(); - String serverTemplate = template.replace(".iff", ""); - PyObject func = core.scriptService.getMethod("scripts/" + serverTemplate.split("shared_" , 2)[0].replace("shared_", ""), serverTemplate.split("shared_" , 2)[1], "equip"); - if(func != null) - func.__call__(Py.java2py(core), Py.java2py(actor), Py.java2py(item)); - - // TODO: add health/action bonus from crafted weapon with augmentations - - Map attributes = new TreeMap(item.getAttributes()); - - for(Entry e : attributes.entrySet()) { - - if(e.getKey().startsWith("cat_skill_mod_bonus.@stat_n:")) { - core.skillModService.addSkillMod(actor, e.getKey().replace("cat_skill_mod_bonus.@stat_n:", ""), Integer.parseInt((String) e.getValue())); - } - - } - - } - - public void unequip(CreatureObject actor, SWGObject item) { - - String template = item.getTemplate(); - String serverTemplate = template.replace(".iff", ""); - PyObject func = core.scriptService.getMethod("scripts/" + serverTemplate.split("shared_" , 2)[0].replace("shared_", ""), serverTemplate.split("shared_" , 2)[1], "unequip"); - if(func != null) - func.__call__(Py.java2py(core), Py.java2py(actor), Py.java2py(item)); - - // TODO: remove health/action bonus from crafted weapon with augmentations - - Map attributes = new TreeMap(item.getAttributes()); - - for(Entry e : attributes.entrySet()) { - - if(e.getKey().startsWith("cat_skill_mod_bonus.@stat_n:")) { - core.skillModService.deductSkillMod(actor, e.getKey().replace("cat_skill_mod_bonus.@stat_n:", ""), Integer.parseInt((String) e.getValue())); - } - - } - - } - - -} diff --git a/src/services/GroupService.java b/src/services/GroupService.java index b3c1832f..bcdc2d02 100644 --- a/src/services/GroupService.java +++ b/src/services/GroupService.java @@ -25,11 +25,12 @@ import java.util.ArrayList; import java.util.List; import java.util.Map; +import resources.buffs.Buff; +import resources.common.OutOfBand; import resources.objects.creature.CreatureObject; import resources.objects.group.GroupObject; - +import services.chat.ChatRoom; import main.NGECore; - import engine.clients.Client; import engine.resources.objects.SWGObject; import engine.resources.service.INetworkDispatch; @@ -45,6 +46,7 @@ public class GroupService implements INetworkDispatch { core.commandService.registerCommand("join"); core.commandService.registerCommand("disband"); core.commandService.registerCommand("decline"); + core.commandService.registerCommand("dismissgroupmember"); } @Override @@ -74,7 +76,7 @@ public class GroupService implements INetworkDispatch { } if(memberGroupId != 0) { - leader.sendSystemMessage(member.getCustomName() + " is already in a group.", (byte) 0); + leader.sendSystemMessage(OutOfBand.ProsePackage("TT", member.getObjectID(), "@group:already_grouped"), (byte) 0); return; } @@ -96,16 +98,16 @@ public class GroupService implements INetworkDispatch { } if(member.getInviteSenderId() != 0 && member.getInviteSenderId() != leader.getObjectID()) { - leader.sendSystemMessage(member.getCustomName() + " is considering joining another group.", (byte) 0); + leader.sendSystemMessage(OutOfBand.ProsePackage("TT", member.getObjectID(), "@group:considering_other_group"), (byte) 0); return; } if(member.getInviteSenderId() != 0 && member.getInviteSenderId() == leader.getObjectID()) { - leader.sendSystemMessage(member.getCustomName() + " has already been invited to join your group.", (byte) 0); + leader.sendSystemMessage(OutOfBand.ProsePackage("TT", member.getObjectID(), "@group:considering_your_group"), (byte) 0); return; } - leader.sendSystemMessage("You invite " + member.getCustomName() + " to join the group.", (byte) 0); + leader.sendSystemMessage(OutOfBand.ProsePackage("TT", member.getObjectID(), "@group:invite_leader"), (byte) 0); member.setInviteCounter(member.getInviteCounter() + 1); member.setInviteSenderId(leader.getObjectId()); member.setInviteSenderName(leader.getCustomName()); @@ -121,11 +123,9 @@ public class GroupService implements INetworkDispatch { invited.setInviteCounter(invited.getInviteCounter() + 1); invited.setInviteSenderId(0); invited.setInviteSenderName(""); - - invited.sendSystemMessage("You decline to join " + leader.getCustomName() + "'s group.", (byte) 0); + invited.sendSystemMessage(OutOfBand.ProsePackage("TT", leader.getObjectID(), "@group:decline_self"), (byte) 0); invited.updateGroupInviteInfo(); - - leader.sendSystemMessage(invited.getCustomName() + " declines to join your group.", (byte) 0); + invited.sendSystemMessage(OutOfBand.ProsePackage("TT", invited.getObjectID(), "@group:decline_leader"), (byte) 0); } @@ -146,23 +146,48 @@ public class GroupService implements INetworkDispatch { group.setGroupLeader(leader); group.getMemberList().add(leader); group.getMemberList().add(invited); + + if (invited.getLevel() > leader.getLevel()) + group.setGroupLevel(invited.getLevel()); + else + group.setGroupLevel(leader.getLevel()); + leader.makeAware(group); leader.setGroupId(group.getObjectID()); invited.makeAware(group); invited.setGroupId(group.getObjectID()); - return; + addGroupBuffsToMember(group, leader); + addGroupBuffsToMember(group, invited); + core.chatService.createChatRoom("", "group." + group.getObjectID(), leader.getCustomName(), false); + ChatRoom groupChat = core.chatService.createChatRoom("", "group." + group.getObjectID() + ".GroupChat", leader.getCustomName(), false); + group.setChatRoomId(groupChat.getRoomId()); + groupChat.setVisible(false); + core.chatService.joinChatRoom(leader.getCustomName(), groupChat.getRoomId()); + core.chatService.joinChatRoom(invited.getCustomName(), groupChat.getRoomId()); + return; } GroupObject group = (GroupObject) core.objectService.getObject(leader.getGroupId()); if(group != null && group.getMemberList().size() < 8) { + invited.setInviteCounter(invited.getInviteCounter() + 1); + invited.setInviteSenderId(0); + invited.setInviteSenderName(""); + invited.updateGroupInviteInfo(); + group.addMember(invited); invited.makeAware(group); invited.setGroupId(group.getObjectID()); invited.sendSystemMessage("@group:joined_self", (byte) 0); + if (group.getGroupLevel() < invited.getLevel()) + group.setGroupLevel(invited.getLevel()); + + addGroupBuffsToMember(group, invited); + core.chatService.joinChatRoom(invited.getCustomName(), group.getChatRoomId(), true); + } else if(group.getMemberList().size() >= 8) { invited.sendSystemMessage("@group:full", (byte) 0); @@ -175,23 +200,47 @@ public class GroupService implements INetworkDispatch { } + } + + public void addGroupBuffsToMember(GroupObject group, CreatureObject member) { + // loop until we find a member other than ourself + for(SWGObject otherMember : group.getMemberList()) { + if(otherMember != member) { + for(Buff buff : ((CreatureObject) otherMember).getBuffList().get()) { + if(buff.isGroupBuff() && otherMember.getPlanet() == member.getPlanet() && otherMember.getPosition().getDistance2D(member.getWorldPosition()) <= 80) { + core.buffService.addBuffToCreature((CreatureObject) otherMember, buff.getBuffName(), member); + } + } + return; + } + } } - public void handleGroupDisband(CreatureObject creature) { + public void removeGroupBuffs(CreatureObject member) { + for(Buff buff : new ArrayList(member.getBuffList().get())) { + if(buff.isGroupBuff() && buff.getGroupBufferId() != member.getObjectID()) { + core.buffService.removeBuffFromCreature(member, buff); + } + } + } + + public void handleGroupDisband(CreatureObject creature, boolean destroy) { if(creature.getGroupId() == 0) return; - GroupObject group = (GroupObject) core.objectService.getObject(creature.getGroupId()); + SWGObject object = core.objectService.getObject(creature.getGroupId()); - if(group == null) + if(object == null || !(object instanceof GroupObject)) return; + GroupObject group = (GroupObject) object; + List memberList = new ArrayList(group.getMemberList()); - if(group.getGroupLeader() != creature && group.getMemberList().size() > 2) { + if(group.getGroupLeader() != creature || !destroy || memberList.size() > 2) { group.removeMember(creature); creature.setInviteCounter(creature.getInviteCounter() + 1); @@ -200,15 +249,19 @@ public class GroupService implements INetworkDispatch { creature.updateGroupInviteInfo(); creature.setGroupId(0); creature.makeUnaware(group); - creature.sendSystemMessage("You have left the group.", (byte) 0); - + core.chatService.leaveChatRoom(creature, group.getChatRoomId(), true); + creature.sendSystemMessage("@group:removed", (byte) 0); + for(SWGObject member : memberList) { - CreatureObject creature2 = (CreatureObject) member; - creature2.sendSystemMessage(creature.getCustomName() + " has left the group.", (byte) 0); - + creature2.sendSystemMessage(OutOfBand.ProsePackage("TU", creature.getObjectID(), "@group:other_left_prose"), (byte) 0); } + removeGroupBuffs(creature); + + if (group.getMemberList().size() == 0) // ensure that there are no empty groups just incase.. + core.objectService.destroyObject(group.getObjectID()); + } else { for(SWGObject member : memberList) { @@ -220,20 +273,66 @@ public class GroupService implements INetworkDispatch { creature2.setInviteSenderName(""); creature2.updateGroupInviteInfo(); creature2.setGroupId(0); - + creature2.makeUnaware(group); - creature2.sendSystemMessage("The group has been disbanded.", (byte) 0); - + core.chatService.leaveChatRoom(creature2, group.getChatRoomId(), true); + creature.sendSystemMessage("@group:disbanded", (byte) 0); + + removeGroupBuffs((CreatureObject) member); + } - + core.chatService.getChatRooms().remove(group.getChatRoomId()); core.objectService.destroyObject(group.getObjectID()); - } + } + + public void handleGroupDisband(CreatureObject creature) { + handleGroupDisband(creature, true); + } + + public void removedFromGroup(GroupObject group, CreatureObject creature) { + removeFromGroup(group, creature, false); + } + + public void removeFromGroup(GroupObject group, CreatureObject creature, boolean kicked) { + + group.removeMember(creature); + creature.setInviteCounter(creature.getInviteCounter() + 1); + creature.setInviteSenderId(0); + creature.setInviteSenderName(""); + creature.updateGroupInviteInfo(); + creature.setGroupId(0); + creature.makeUnaware(group); + core.chatService.leaveChatRoom(creature, group.getChatRoomId(), true); + creature.sendSystemMessage("@group:removed", (byte) 0); + + for(SWGObject member : group.getMemberList()) { + CreatureObject creature2 = (CreatureObject) member; + creature2.sendSystemMessage(OutOfBand.ProsePackage("TU", creature.getObjectID(), "@group:other_left_prose"), (byte) 0); + } + + removeGroupBuffs(creature); + + if(group.getMemberList().size() <= 1 && kicked) + handleGroupDisband((CreatureObject) group.getGroupLeader()); + + } + + public void handleGroupKick(CreatureObject leader, CreatureObject member) { + + GroupObject group = (GroupObject) core.objectService.getObject(leader.getGroupId()); + + if(group == null || member.getGroupId() == 0 || member.getGroupId() != group.getObjectID()) + return; + + if(group.getGroupLeader() != leader) { + leader.sendSystemMessage("@group:must_be_leader", (byte) 0); + return; + } + + removeFromGroup(group, member, true); } - - - } diff --git a/src/services/GuildService.java b/src/services/GuildService.java new file mode 100644 index 00000000..95e34fe9 --- /dev/null +++ b/src/services/GuildService.java @@ -0,0 +1,978 @@ +/******************************************************************************* + * Copyright (c) 2013 + * + * This File is part of NGECore2. + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see . + * + * Using NGEngine to work with NGECore2 is making a combined work based on NGEngine. + * Therefore all terms and conditions of the GNU Lesser General Public License cover the combination. + ******************************************************************************/ +package services; + +import java.util.Date; +import java.util.HashMap; +import java.util.Map; +import java.util.Map.Entry; +import java.util.TreeMap; +import java.util.Vector; +import java.util.concurrent.ConcurrentHashMap; + +import protocol.swg.chat.ChatRoomMessage; +import resources.common.OutOfBand; +import resources.datatables.DisplayType; +import resources.guild.Guild; +import resources.guild.GuildMember; +import resources.objects.SWGSet; +import resources.objects.creature.CreatureObject; +import resources.objects.guild.GuildObject; +import resources.objects.intangible.IntangibleObject; +import resources.objects.player.PlayerObject; +import resources.objects.tangible.TangibleObject; +import services.chat.ChatRoom; +import services.chat.Mail; +import services.sui.SUIService.InputBoxType; +import services.sui.SUIService.ListBoxType; +import services.sui.SUIService.MessageBoxType; +import services.sui.SUITableItem; +import services.sui.SUIWindow; +import services.sui.SUIWindow.SUICallback; +import services.sui.SUIWindow.Trigger; +import main.NGECore; +import engine.clientdata.StfTable; +import engine.resources.objects.SWGObject; +import engine.resources.service.INetworkDispatch; +import engine.resources.service.INetworkRemoteEvent; +import engine.resources.common.Stf; + +public class GuildService implements INetworkDispatch { + + private NGECore core; + private GuildObject object; + private Map guildRanks = new ConcurrentHashMap(); + + public GuildService(NGECore core) { + this.core = core; + + for (SWGObject swgObject : core.objectService.getObjectList().values()) { + if (swgObject.getTemplate().equals("object/guild/shared_guild_object.iff") && swgObject instanceof GuildObject) { + object = (GuildObject) swgObject; + } + } + + if (object == null) { + object = (GuildObject) this.core.objectService.createObject("object/guild/shared_guild_object.iff", core.terrainService.getPlanetList().get(0)); + } + + try { + StfTable stf = new StfTable("clientdata/string/en/guild_rank_title.stf"); + + for (int s = 1; s < stf.getRowCount(); s++) { + String rank = stf.getStringById(s).getKey(); + + if (rank != null && rank != "") { + guildRanks.put((long) s, "@guild_rank_title:" + rank); + } + } + + } catch (Exception e) { + e.printStackTrace(); + } + + } + + public Guild createGuild(String abbreviation, String name, CreatureObject leader) { + + if (leader == null) + return null; + + int listSize = object.getGuildList().size(); + Guild guild = new Guild((listSize == 0 ? 1 : listSize + 1), abbreviation, name, leader); + + core.chatService.createChatRoom("", "guild." + guild.getId(), leader.getCustomName(), false, true, false); + ChatRoom guildChat = core.chatService.createChatRoom("", "guild." + guild.getId() + ".GuildChat", leader.getCustomName(), false, true, false); + guild.setChatRoomId(guildChat.getRoomId()); + + object.getGuilds().put(guild.getId(), guild); + object.getGuildList().add(guild.getString()); + + GuildMember member = joinGuild(guild, leader, null); + member.giveAllPermissions(); + return guild; + } + + public GuildMember joinGuild(Guild guild, CreatureObject joinee, CreatureObject acceptor) { + GuildMember member = null; + PlayerObject ghost = joinee.getPlayerObject(); + if (ghost == null) + return member; + + member = guild.addMember(joinee.getObjectID()); + + joinee.setGuildId(guild.getId()); + + guild.getSponsoredPlayers().remove(joinee.getObjectID()); + + if (joinee.isInQuadtree()) + core.chatService.joinChatRoom(joinee.getCustomName(), guild.getChatRoomId()); + else + ghost.addChannel(guild.getChatRoomId()); + + // Notify guild & player + if (acceptor != null) { + guild.sendGuildMail(guild.getName(), "@guildmail:accept_subject", new Stf("@guildmail:accept_text").getStfValue().replace("%TU", acceptor.getCustomName()).replace("%TT", joinee.getCustomName())); + + Mail acceptedMail = new Mail(); + acceptedMail.setMailId(core.chatService.generateMailId()); + acceptedMail.setTimeStamp((int) new Date().getTime()); + acceptedMail.setRecieverId(joinee.getObjectID()); + acceptedMail.setStatus(Mail.NEW); + acceptedMail.setMessage(new Stf("@guildmail:accept_target_text").getStfValue().replace("%TU", acceptor.getCustomName()).replace("%TT", joinee.getCustomName())); + acceptedMail.setSubject("@guildmail:accept_subject"); + acceptedMail.setSenderName(guild.getName()); + core.chatService.storePersistentMessage(acceptedMail); + + if (joinee.isInQuadtree()) + core.chatService.sendPersistentMessageHeader(joinee.getClient(), acceptedMail); + } + + // Update association device to guild stats + TangibleObject datapad = (TangibleObject) joinee.getSlottedObject("datapad"); + + if (datapad != null) { + datapad.viewChildren(joinee, true, false, (obj) -> { + if (obj instanceof IntangibleObject && obj.getTemplate().equals("object/intangible/data_item/shared_guild_stone.iff")) { // shared_guild_stone + obj.setStringAttribute("guild_name", guild.getName()); + obj.setStringAttribute("guild_abbrev", guild.getAbbreviation()); + obj.setStringAttribute("guild_leader", guild.getLeaderName()); + } + }); + } + member.setName(joinee.getCustomName()); + member.setLevel(joinee.getLevel()); + if (joinee.getPlayerObject() != null) { + member.setProfession(core.playerService.getFormalProfessionName(joinee.getPlayerObject().getProfession())); + } + + return member; + } + + public void handleCreateGuildName(CreatureObject actor, SWGObject creationSource) { + if (actor.getGuildId() != 0) { actor.sendSystemMessage("@guild:create_fail_in_guild", DisplayType.Broadcast); return; } + + SUIWindow window = core.suiService.createInputBox(InputBoxType.INPUT_BOX_OK_CANCEL, "@guild:create_name_title", "@guild:create_name_prompt", actor, null, 0, + (owner, eventType, returnList) -> { + String guildName = returnList.get(0); // TODO: Character checks + + if (guildName.length() > 24) { actor.sendSystemMessage("@guild:create_fail_name_bad_length", DisplayType.Broadcast); handleCreateGuildName(actor, creationSource); return;} + if (getGuildByName(guildName) != null) { actor.sendSystemMessage("@guild:create_fail_name_in_use", DisplayType.Broadcast); handleCreateGuildName(actor, creationSource); return;} + + handleCreateGuildAbbrev(actor, guildName, creationSource); + }); + window.setProperty("txtInput:MaxLength", "24"); + window.setProperty("txtInput:NumericInteger", "False"); + + core.suiService.openSUIWindow(window); + } + + public void handleCreateGuildAbbrev(CreatureObject actor, String guildName, SWGObject creationSource) { + SUIWindow window = core.suiService.createInputBox(InputBoxType.INPUT_BOX_OK_CANCEL, "@guild:create_abbrev_title", "@guild:create_abbrev_prompt", actor, null, 0, + (owner, eventType, returnList) -> { + String abbrev = returnList.get(0); // TODO: Character checks + + if (abbrev.length() > 5) { actor.sendSystemMessage("@guild:create_fail_abbrev_bad_length", DisplayType.Broadcast); handleCreateGuildAbbrev(actor, guildName, creationSource); return;} + if (getGuildByAbbreviation(abbrev) != null) { actor.sendSystemMessage("@guild:create_fail_abbrev_in_use", DisplayType.Broadcast); handleCreateGuildAbbrev(actor, guildName, creationSource); return;} + + Guild guild = createGuild(abbrev, guildName, actor); + if (guild != null && creationSource != null && creationSource.getTemplate().equals("object/tangible/furniture/technical/shared_guild_registry_initial.iff")) { + core.objectService.destroyObject(creationSource); + } + }); + + window.setProperty("txtInput:MaxLength", "4"); + window.setProperty("txtInput:NumericInteger", "False"); + + core.suiService.openSUIWindow(window); + } + + public void handleViewPermissionsList(CreatureObject actor, Guild guild) { + final SUIWindow window = core.suiService.createSUIWindow("Script.tablePage", actor, null, (float) 0); + window.setProperty("bg.caption.lblTitle:Text", "Permissions List"); + window.setProperty("comp.Prompt:Visible", "False"); + window.setProperty("btnExport:Visible", "False"); + window.setProperty("tablePage:Size", "785,434"); + window.setProperty("comp.TablePage.header:ScrollExtent", "444,30"); + window.addTableColumn("Name", "text"); + window.addTableColumn("Mail", "text"); + window.addTableColumn("Sponsor", "text"); + window.addTableColumn("Title", "text"); + window.addTableColumn("Accept", "text"); + window.addTableColumn("Kick", "text"); + window.addTableColumn("War", "text"); + window.addTableColumn("Change Guild Name", "text"); + window.addTableColumn("Disband", "text"); + window.addTableColumn("Rank", "text"); + window.addTableColumn("War Excluded", "text"); + window.addTableColumn("War Exclusive", "text"); + + Map members = guild.getMembers(); + + members.entrySet().forEach(e -> { + GuildMember member = e.getValue(); + for (SUITableItem column : window.getTableItems()) { + if (column.getItemName().equals("Name")) { + window.addTableCell(member.getName(), e.getKey(), column.getIndex()); + continue; + } + else if (member.getPermissions().contains(column.getItemName())) { + window.addTableCell("X", e.getKey(), column.getIndex()); + continue; + } else + window.addTableCell("", e.getKey(), column.getIndex()); + } + }); + + Vector returnList = new Vector(); + returnList.add("comp.TablePage.table:SelectedRow"); + + window.addHandler(0, "", Trigger.TRIGGER_OK, returnList, (owner, eventType, resultList) -> { + + int selectedRow = Integer.parseInt(resultList.get(0)); + GuildMember selectedMember = guild.getMember(window.getTableObjIdByRow(selectedRow)); + + if (selectedMember == null) + return; + + handleChangeMemberPermissions((CreatureObject) owner, guild, selectedMember, "PermissionsList"); + }); + core.suiService.openSUIWindow(window); + } + + public void handleChangeMemberPermissions(CreatureObject actor, Guild guild, GuildMember target) { handleChangeMemberPermissions(actor, guild, target, ""); } + + public void handleChangeMemberPermissions(CreatureObject actor, Guild guild, GuildMember target, String source) { + GuildMember requester = guild.getMember(actor.getObjectID()); + + if (requester == null) + return; + + final SUIWindow window = core.suiService.createListBox(ListBoxType.LIST_BOX_OK_CANCEL, "\\#00FF00\\" + target.getName() + "\\#FFFFFF Guild Member Permissions", + new Stf("@guild:permissions_prompt").getStfValue().replace("%TU", "\\#00FF00\\" + target.getName() + "\\#.\\"), target.getAllPermissions(requester), actor, null, 0); + + window.setProperty("listBox:Size", "487,316"); + + Vector returnList = new Vector(); + returnList.add("List.lstList:SelectedRow"); + + SUICallback windowCallback = (owner, eventType, resultList) -> { + switch(eventType) { + case 0: + if (resultList.size() == 0) + return; + + int selectedPermission = (int) (window.getObjectIdByIndex(Integer.parseInt(resultList.get(0)))); + + switch (selectedPermission) { + case 1: // Mail + if (target.hasMailPermission()) target.setMailPermission(false); + else target.setMailPermission(true); + break; + case 2: // Sponsor + if (target.hasSponsorPermission()) target.setSponsorPermission(false); + else target.setSponsorPermission(true); + break; + case 3: // Title + if (target.hasTitlePermission()) target.setTitlePermission(false); + else target.setTitlePermission(true); + break; + case 4: // Accept + if (target.hasAcceptPermission()) target.setAcceptPermission(false); + else target.setAcceptPermission(true); + break; + case 5: // Kick + if (target.hasKickPermission()) target.setKickPermission(false); + else target.setKickPermission(true); + break; + case 6: // War + if (target.hasWarPermission()) target.setWarPermission(false); + else target.setWarPermission(true); + break; + case 7: // Change Guild Name + if (target.hasChangeNamePermission()) target.setChangeNamePermission(false); + else target.setChangeNamePermission(true); + break; + case 8: // Disband + if (target.hasDisbandPermission()) target.setDisbandPermission(false); + else target.setDisbandPermission(true); + break; + case 9: // Rank + if (target.hasRankPermission()) target.setRankPermission(false); + else target.setRankPermission(true); + break; + case 10: // War Excluded + if (target.isWarExcluded()) target.setWarExcluded(false); + else target.setWarExcluded(true); + break; + case 11: // War Exclusive + if (target.isWarExclusive()) target.setWarExclusive(false); + else target.setWarExclusive(true); + break; + + default: break; + } + handleChangeMemberPermissions(actor, guild, target, source); + break; + + case 1: // Cancel + break; + + case 2: // Back + switch(source) { + case "PermissionsList": + handleViewPermissionsList(actor, guild); + break; + case "MemberOptions": + handleMemberOptions(actor, guild, target); + break; + default: return; + } + break; + } + }; + window.addHandler(0, "", Trigger.TRIGGER_OK, returnList, windowCallback); + + if (!source.isEmpty() || !source.equals("")) { + window.setProperty("btnOther:Visible", "True"); + window.setProperty("btnOther:Text", "@guild:back_button"); + window.addHandler(1, "", Trigger.TRIGGER_CANCEL, returnList, windowCallback); + window.addHandler(2, "", Trigger.TRIGGER_UPDATE, returnList, windowCallback); + } + core.suiService.openSUIWindow(window); + } + + public void handleChangeGuildName(CreatureObject actor, Guild guild) { + SUIWindow window = core.suiService.createInputBox(InputBoxType.INPUT_BOX_OK_CANCEL, "@guild:namechange_name_title", "@guild:namechange_name_prompt", actor, null, 0, + (owner, eventType, returnList) -> { + String guildName = returnList.get(0); // TODO: Character checks + + if (guildName.length() > 24) { actor.sendSystemMessage("@guild:namechange_fail_name_bad_length", DisplayType.Broadcast); handleChangeGuildName(actor, guild); return;} + // Allows the guild to keep their old name if they want to + if (!guildName.equals(guild.getName()) && getGuildByName(guildName) != null) { actor.sendSystemMessage("@guild:create_fail_name_in_use", DisplayType.Broadcast); handleChangeGuildName(actor, guild); return;} + + handleChangeGuildAbbrev(actor, guild, guildName); + }); + window.setProperty("txtInput:MaxLength", "24"); + window.setProperty("txtInput:NumericInteger", "False"); + core.suiService.openSUIWindow(window); + } + + public void handleChangeGuildAbbrev(CreatureObject actor, Guild guild, String newName) { + SUIWindow window = core.suiService.createInputBox(InputBoxType.INPUT_BOX_OK_CANCEL, "@guild:namechange_abbrev_title", "@guild:namechange_abbrev_prompt", actor, null, 0, + (owner, eventType, returnList) -> { + String newAbbrev = returnList.get(0); // TODO: Character checks + + if (newAbbrev.length() > 5) { actor.sendSystemMessage("@guild:namechange_fail_abbrev_bad_length", DisplayType.Broadcast); handleChangeGuildAbbrev(actor, guild, newName); return;} + // Allows the guild to keep their old abbreviation if they want to + if (!guild.getAbbreviation().equals(newAbbrev) && getGuildByAbbreviation(newName) != null) { actor.sendSystemMessage("@guild:create_fail_name_in_use", DisplayType.Broadcast); handleChangeGuildAbbrev(actor, guild, newName); return;} + + changeGuildNameAbbrev(actor, guild, newName, newAbbrev); + }); + window.setProperty("txtInput:MaxLength", "4"); + window.setProperty("txtInput:NumericInteger", "False"); + core.suiService.openSUIWindow(window); + } + + public void changeGuildNameAbbrev(CreatureObject actor, Guild guild, String newName, String newAbbreviation) { + if (newName.equals(guild.getName()) && newAbbreviation.equals(guild.getAbbreviation())) + return; + + object.getGuildList().remove(guild.getString()); + + guild.setName(newName); + guild.setAbbreviation(newAbbreviation); + + object.getGuildList().add(guild.getString()); + + guild.sendGuildMail(newName, "@guildmail:namechange_subject", + new Stf("@guildmail:namechange_text").getStfValue().replace("%TO", actor.getCustomName()).replace("%TU", newName).replace("%TT", newAbbreviation)); + } + + public void handleChangeGuildMotd(CreatureObject actor, Guild guild) { + SUIWindow window = core.suiService.createInputBox(InputBoxType.INPUT_BOX_OK_CANCEL, "@guild:menu_member_motd", "@guild:prompt_member_motd_message", actor, null, 0, + (owner, eventType, resultList) -> { + String newMotd = resultList.get(0); + + guild.setMotd(newMotd); + + actor.sendSystemMessage("Guild Message of the Day set to: " + newMotd, DisplayType.Broadcast); + }); + + window.setProperty("inputBox:Size", "506,430"); + core.suiService.openSUIWindow(window); + } + + public void handleViewGuildMembers(CreatureObject actor, Guild guild) { + final SUIWindow window = core.suiService.createSUIWindow("Script.tablePage", actor, null, (float) 0); + window.setProperty("bg.caption.lblTitle:Text", "@guild:members_title"); + window.setProperty("comp.Prompt.lblPrompt:Text", "@guild:members_prompt"); + //if (actingMember.getAllPermissions(actingMember).size() > 2) window.setProperty("comp.Prompt.lblPrompt:Text", "@guild:members_show_prompt"); + window.setProperty("tablePage:Size", "785,634"); + // window.setProperty("comp.TablePage.table:columsizedatasource", "dsColSizes"); + window.setProperty("comp.TablePage.header:ScrollExtent", "444,30"); + window.addTableColumn("@guild:table_title_level", "text"); + window.addTableColumn("@guild:table_title_name", "text"); + window.addTableColumn("@guild:table_title_profession", "text"); + window.addTableColumn("@guild:table_title_rank", "text"); + window.addTableColumn("@guild:table_title_status", "text"); + window.addTableColumn("@guild:table_title_title", "text"); + window.addTableColumn("@guild:table_title_war_excluded", "text"); + window.addTableColumn("@guild:table_title_war_included", "text"); + + Map members = guild.getMembers(); + members.entrySet().forEach(e -> { + GuildMember member = e.getValue(); + for (SUITableItem column : window.getTableItems()) { + switch(column.getItemName()) { + case "@guild:table_title_level": + window.addTableCell(String.valueOf(member.getLevel()), e.getKey(), column.getIndex()); + continue; + case "@guild:table_title_name": + window.addTableCell(member.getName(), e.getKey(), column.getIndex()); + continue; + case "@guild:table_title_profession": + window.addTableCell(member.getProfession(), e.getKey(), column.getIndex()); + continue; + case "@guild:table_title_rank": + window.addTableCell(member.getRank(), e.getKey(), column.getIndex()); + continue; + case "@guild:table_title_status": + //window.addTableCell(member.getStatus(), e.getKey(), column.getIndex()); + continue; + case "@guild:table_title_title": + window.addTableCell(member.getTitle(), e.getKey(), column.getIndex()); + continue; + case "@guild:table_title_war_excluded": + if (member.isWarExcluded()) window.addTableCell("X", e.getKey(), column.getIndex()); + else window.addTableCell("", e.getKey(), column.getIndex()); + continue; + case "@guild:table_title_war_included": + if (member.isWarExclusive()) window.addTableCell("X", e.getKey(), column.getIndex()); + else window.addTableCell("", e.getKey(), column.getIndex()); + continue; + } + } + }); + + Vector returnList = new Vector(); + returnList.add("comp.TablePage.table:SelectedRow"); + + window.addHandler(0, "", Trigger.TRIGGER_OK, returnList, (owner, eventType, resultList) -> { + + long objectId = window.getTableObjIdByRow(Integer.parseInt(resultList.get(0))); + + if (objectId == 0) + return; + + GuildMember selectedMember = guild.getMember(objectId); + + if (selectedMember == null) + return; + + handleMemberOptions((CreatureObject) owner, guild, selectedMember); + }); + + core.suiService.openSUIWindow(window); + } + + public void handleMemberOptions(CreatureObject actor, Guild guild, GuildMember member) { + GuildMember actingMember = guild.getMember(actor.getObjectID()); + + Map options = new HashMap(); + if (actingMember.getPermissions().size() > 2) + options.put((long) 0, "@guild:permissions"); + if (actingMember.hasTitlePermission()) + options.put((long) 1, "@guild:title"); + //if (actingMember.hasRankPermission()) + //options.put((long) 2, "@guild:rank"); + if (actingMember.hasKickPermission()) + options.put((long) 3, "@guild:kick"); + + if (options.size() == 0) + return; + + SUIWindow window = core.suiService.createListBox(ListBoxType.LIST_BOX_OK_CANCEL, "@guild:member_options_title", + new Stf("@guild:member_options_prompt").getStfValue().replace("%TU", "\\#00FF00\\" + member.getName() + "\\#.\\"), options, actor, null, 0); + + Vector returnList = new Vector(); + returnList.add("List.lstList:SelectedRow"); + + SUICallback callBack = (owner, eventType, resultList) -> { + + if (eventType == 1) + return; + + if (resultList.size() == 0) + return; + + int selectedOption = (int) (window.getObjectIdByIndex(Integer.parseInt(resultList.get(0)))); + + switch(selectedOption) { + case 0: + core.suiService.closeSUIWindow(actor, window.getWindowId()); + handleChangeMemberPermissions(actor, guild, member, "MemberOptions"); + break; + case 1: + if (!actingMember.hasTitlePermission()) { + actor.sendSystemMessage("@guild:guild_no_permission_operation", DisplayType.Broadcast); + return; + } + handleMemberSetTitle(actor, guild, member); + break; + case 2: + break; + case 3: + SWGObject target = core.objectService.getObject(member.getObjectId()); + + if (target == null) + target = core.objectService.getCreatureFromDB(member.getObjectId()); + + if (target == null) { + actor.sendSystemMessage("@guild:could_not_find_member", DisplayType.Broadcast); + return; + } + + leaveGuild(actor, (CreatureObject) target, guild); + core.suiService.closeSUIWindow(actor, window.getWindowId()); + break; + default: break; + } + }; + window.addHandler(0, "", Trigger.TRIGGER_OK, returnList, callBack); + core.suiService.openSUIWindow(window); + } + + public void handleMemberSetTitle(CreatureObject actor, Guild guild, GuildMember target) { + GuildMember actingMember = guild.getMember(actor.getObjectID()); + + if (!actingMember.hasTitlePermission()) { + actor.sendSystemMessage("@guild:guild_no_permission_operation", DisplayType.Broadcast); + return; + } + + SUIWindow window = core.suiService.createInputBox(InputBoxType.INPUT_BOX_OK_CANCEL, "@guild:title_title", + new Stf("@guild:title_prompt").getStfValue().replace("%TU", target.getName()), actor, null, 0); + + Vector returnList = new Vector(); + returnList.add("txtInput:LocalText"); + + window.setProperty("txtInput:MaxLength", "24"); + window.setProperty("txtInput:NumericInteger", "False"); + + window.addHandler(0, "", Trigger.TRIGGER_OK, returnList, (owner, eventType, resultList) -> { + String title = resultList.get(0); + + if (title.length() > 25) { + actor.sendSystemMessage("@guild:title_fail_bad_length", DisplayType.Broadcast); + core.suiService.closeSUIWindow(actor, window.getWindowId()); + handleMemberSetTitle(actor, guild, target); + return; + } + + target.setTitle(title); + + actor.sendSystemMessage(OutOfBand.ProsePackage("@guild:title_self", "TU", target.getName(), "TT", title), DisplayType.Broadcast); + + core.suiService.closeSUIWindow(actor, window.getWindowId()); + + if (core.objectService.getObject(target.getObjectId()) != null) { + CreatureObject creoTarget = (CreatureObject) core.objectService.getObject(target.getObjectId()); + if (creoTarget.getClient() == null || creoTarget.getClient().getSession() == null) + return; + + creoTarget.sendSystemMessage(OutOfBand.ProsePackage("@guild:title_target", "TU", actor.getCustomName(), "TT", title), DisplayType.Broadcast); + } + }); + core.suiService.openSUIWindow(window); + } + + + + public void handleGuildSponsorWindow(CreatureObject actor) { + SUIWindow wndSponsorPlayer = core.suiService.createInputBox(InputBoxType.INPUT_BOX_OK_CANCEL, "@guild:sponsor_title", "@guild:sponsor_prompt", actor, null, (float) 10, (sponsor, eventType, returnList) -> { + + if (eventType != 0) + return; + + String input = returnList.get(0); + + if (input.isEmpty()) + return; + + SWGObject pSponsored = core.objectService.getObjectByFirstName(input); + + if (pSponsored == null || !pSponsored.isInQuadtree()) { + actor.sendSystemMessage("@guild:sponsor_not_found", DisplayType.Broadcast); + return; + } + + if (((CreatureObject)pSponsored).getGuildId() != 0) { + actor.sendSystemMessage(OutOfBand.ProsePackage("@guild:sponsor_already_in_guild", "TU", pSponsored.getCustomName()), DisplayType.Broadcast); + return; + } + + Guild invitingGuild = core.guildService.getGuildById(actor.getGuildId()); + + SUIWindow wndSponsoredConfirm = core.suiService.createMessageBox(MessageBoxType.MESSAGE_BOX_YES_NO, "@guild:sponsor_verify_title", + new Stf("@guild:sponsor_verify_prompt").getStfValue().replace("%TU", actor.getCustomName()).replace("%TT", invitingGuild.getName()), pSponsored, null, (float) 10); + + wndSponsoredConfirm.addHandler(0, "", Trigger.TRIGGER_OK, new Vector(), (cOwner, cEventType, cReturnList) -> { + + if (cEventType != 0) + return; + + Guild guild = core.guildService.getGuildById(actor.getGuildId()); + + if (guild == null) + return; + + guild.getSponsoredPlayers().put(cOwner.getObjectID(), cOwner.getCustomName()); + + ((CreatureObject)cOwner).sendSystemMessage(OutOfBand.ProsePackage("@guild:sponsor_target", "TT", guild.getName(), "TU", actor.getCustomName()), DisplayType.Broadcast); + + guild.sendGuildMail(guild.getName(), "@guildmail:sponsor_subject", new Stf("@guildmail:sponsor_text").getStfValue().replace("%TU", actor.getCustomName()).replace("%TT", cOwner.getCustomName())); + }); + core.suiService.openSUIWindow(wndSponsoredConfirm); + + actor.sendSystemMessage(OutOfBand.ProsePackage("@guild:sponsor_self", "TU", pSponsored.getCustomName(), "TT", invitingGuild.getName()), DisplayType.Broadcast); + + }); + core.suiService.openSUIWindow(wndSponsorPlayer); + } + + + public void handleGuildDisband(CreatureObject actor, Guild guild) { + + Map members = guild.getMembers(); + + members.entrySet().forEach(e -> { + CreatureObject target = (CreatureObject) core.objectService.getObject(e.getKey()); + + if (target == null) + target = (CreatureObject) core.objectService.getCreatureFromDB(e.getKey()); + + if (target != null) { + + target.setGuildId(0); + + // Update association device + TangibleObject datapad = (TangibleObject) target.getSlottedObject("datapad"); + + if (datapad != null) { + datapad.viewChildren(target, true, false, (obj) -> { + if (obj instanceof IntangibleObject && obj.getTemplate().equals("object/intangible/data_item/shared_guild_stone.iff")) { + //obj.removeAttribute("guild_name"); + //obj.removeAttribute("guild_abbrev"); + //obj.removeAttribute("guild_leader"); + } + }); + } + + if (target.getClient() != null && target.getClient().getSession() != null) + core.chatService.leaveChatRoom(target, guild.getChatRoomId(), true); + else + target.getPlayerObject().removeChannel(guild.getChatRoomId()); + } + }); + + guild.sendGuildMail(guild.getName(), "@guildmail:disband_subject", new Stf("@guildmail:disband_text").getStfValue().replace("%TU", actor.getCustomName())); + + removeGuild(guild.getId()); + } + + + public void handleManageSponsoredPlayers(CreatureObject actor) { + Guild guild = getGuildById(actor.getGuildId()); + + + if (guild == null) + return; + + Map sponsorships = guild.getSponsoredPlayers(); + + SUIWindow wndSponsoredPlayers = core.suiService.createListBox(ListBoxType.LIST_BOX_OK_CANCEL, "@guild:sponsored_title", "@guild:sponsored_prompt", sponsorships, actor, null, 0); + + Vector returnList = new Vector(); + returnList.add("List.lstList:SelectedRow"); + + wndSponsoredPlayers.addHandler(0, "", Trigger.TRIGGER_OK, returnList, (owner, eventType, resultList) -> { + int index = Integer.parseInt(resultList.get(0)); + long objectId = wndSponsoredPlayers.getObjectIdByIndex(index); + + if(objectId == 0) + return; + + SWGObject sponsoredPlayer = core.objectService.getObject(objectId); + + if (sponsoredPlayer == null) { + sponsoredPlayer = core.objectService.getCreatureFromDB(objectId); + + if (sponsoredPlayer == null) { + guild.getSponsoredPlayers().remove(objectId); + return; + } + } + final SWGObject finalSponseredPlayer = sponsoredPlayer; + + Map options = new HashMap(); + options.put((long) 0, "Accept"); + options.put((long) 1, "Decline"); + options.put((long) 2, "Cancel"); + SUIWindow sponsorOptions = core.suiService.createListBox(ListBoxType.LIST_BOX_OK_CANCEL, "@guild:sponsored_options_title", + new Stf("@guild:sponsored_options_prompt").getStfValue().replace("%TU", sponsoredPlayer.getCustomName()), options, owner, null, 0); + + Vector returnList2 = new Vector(); + returnList2.add("List.lstList:SelectedRow"); + + sponsorOptions.addHandler(0, "", Trigger.TRIGGER_OK, returnList2, (owner2, eventType2, resultList2) -> { + int selectedOption = Integer.parseInt(resultList2.get(0)); + + Guild gOwner = getGuildById(((CreatureObject)owner2).getGuildId()); + CreatureObject sponsoredCreo = (CreatureObject) finalSponseredPlayer; + + switch(selectedOption) { + case 0: // Accept + + if (sponsoredCreo.isInQuadtree()) + sponsoredCreo.sendSystemMessage(OutOfBand.ProsePackage("@guild:sponsor_accept", "TU", owner2.getCustomName()), DisplayType.Broadcast); + + joinGuild(gOwner, sponsoredCreo, (CreatureObject) owner2); + break; + case 1: // Decline + sponsoredCreo.sendSystemMessage(OutOfBand.ProsePackage("@guild:sponsor_decline", "TU", owner2.getCustomName()), DisplayType.Broadcast); + + handleGuildDeclineSponsorship(gOwner, (CreatureObject) owner2, sponsoredCreo); + break; + case 2: // Cancel + break; + default: + break; + } + }); + + core.suiService.openSUIWindow(sponsorOptions); + }); + core.suiService.openSUIWindow(wndSponsoredPlayers); + } + + public void handleGuildDeclineSponsorship(Guild guild, CreatureObject actor, CreatureObject sponsoree) { + guild.getSponsoredPlayers().remove(sponsoree.getObjectID()); + + guild.sendGuildMail(guild.getName(), "@guildmail:decline_subject", new Stf("@guildmail:decline_text").getStfValue().replace("%TU", actor.getCustomName()).replace("%TT", sponsoree.getCustomName())); + + Mail declinedMail = new Mail(); + declinedMail.setMailId(core.chatService.generateMailId()); + declinedMail.setTimeStamp((int) new Date().getTime()); + declinedMail.setRecieverId(sponsoree.getObjectID()); + declinedMail.setStatus(Mail.NEW); + declinedMail.setMessage(new Stf("@guildmail:decline_target_text").getStfValue().replace("%TU", actor.getCustomName()).replace("%TT", guild.getName())); + declinedMail.setSubject("@guildmail:decline_subject"); + declinedMail.setSenderName(guild.getName()); + core.chatService.storePersistentMessage(declinedMail); + + if (sponsoree.isInQuadtree()) + core.chatService.sendPersistentMessageHeader(sponsoree.getClient(), declinedMail); + } + + + public void showKickConfirmWindow(CreatureObject actor, CreatureObject target, Guild guild) { + + if (target.getObjectID() == guild.getLeader() && target.getObjectID() == actor.getObjectID()) { + actor.sendSystemMessage("@guild:leave_fail_leader_tried_to_leave", DisplayType.Broadcast); + return; + } else if (target.getObjectID() == guild.getLeader()) { + actor.sendSystemMessage("@guild:guild_no_permission_operation", DisplayType.Broadcast); + return; + } + + SUIWindow kickPrompt = core.suiService.createMessageBox(MessageBoxType.MESSAGE_BOX_YES_NO, "@guild:kick_title", + new Stf("@guild:kick_prompt").getStfValue().replace("%TU", target.getCustomName()), actor, null, 0); + + kickPrompt.addHandler(0, "", Trigger.TRIGGER_OK, new Vector(), (owner, eventType, resultList) -> { + leaveGuild(actor, target, guild); + }); + + core.suiService.openSUIWindow(kickPrompt); + } + + public void showDisbandConfirmWindow(CreatureObject actor, Guild guild) { + + if (!guild.getMember(actor.getObjectID()).hasDisbandPermission() && actor.getObjectID() != guild.getLeader()) { + actor.sendSystemMessage("@guild:guild_no_permission_operation", DisplayType.Broadcast); + return; + } + + SUIWindow disbandConfirm = core.suiService.createMessageBox(MessageBoxType.MESSAGE_BOX_YES_NO, "@guild:disband_title", "@guild:disband_prompt", actor, null, 0); + disbandConfirm.addHandler(0, "", Trigger.TRIGGER_OK, new Vector(), (owner, eventType, resultList) -> { + handleGuildDisband(actor, guild); + }); + core.suiService.openSUIWindow(disbandConfirm); + } + + public void showGuildInfoWindow(CreatureObject actor, Guild guild) { + String message = "Guild Name: " + guild.getName() + "\t (neutral)\n" + + "Guild Abbreviation: " + guild.getAbbreviation() + "\n" + + "Guild Leader: " + guild.getLeaderName() + "\n" + + "GCW Region Defender: None\n" + + "GCW Region Defender Bonus: 0%\n" + + "Guild Members: " + String.valueOf(guild.getMembers().size()); + + SUIWindow window = core.suiService.createMessageBox(MessageBoxType.MESSAGE_BOX_OK, "@guild:info_title", message, actor, null, 0); + window.setProperty("messageBox:Size", "290,170"); + core.suiService.openSUIWindow(window); + } + + public void leaveGuild(CreatureObject actor, CreatureObject target, Guild guild) { + GuildMember actingMember = guild.getMember(actor.getObjectID()); + + if (actingMember == null) + return; + + if ((!actingMember.hasKickPermission() && actor != target) || (target.getObjectID() == guild.getLeader() && target.getObjectID() != actor.getObjectID())) { + actor.sendSystemMessage("@guild:guild_no_permission_operation", DisplayType.Broadcast); + return; + } + + if (actor.getObjectID() != target.getObjectID()) { + + guild.sendGuildMail(guild.getName(), "@guildmail:kick_subject", new Stf("@guildmail:kick_text").getStfValue().replace("%TU", actor.getCustomName()).replace("%TT", target.getCustomName())); + + actor.sendSystemMessage(OutOfBand.ProsePackage("@guild:kick_self", "TU", target.getCustomName(), "TT", guild.getName()), DisplayType.Broadcast); + + if (target.isInQuadtree()) + target.sendSystemMessage(OutOfBand.ProsePackage("@guild:kick_target", "TU", actor.getCustomName(), "TT", guild.getName()), DisplayType.Broadcast); + + } else { + if (target.getObjectID() == guild.getLeader()) { + actor.sendSystemMessage("@guild:leave_fail_leader_tried_to_leave", DisplayType.Broadcast); + return; + } else { + guild.sendGuildMail(guild.getName(), "@guildmail:leave_subject", new Stf("@guildmail:leave_text").getStfValue().replace("%TU", actor.getCustomName())); + actor.sendSystemMessage(OutOfBand.ProsePackage("@guild:leave_self", "TU", guild.getName()), DisplayType.Broadcast); + } + } + guild.getMembers().remove(target.getObjectID()); + target.setGuildId(0); + core.chatService.leaveChatRoom(target, guild.getChatRoomId(), true); + + // Update association device + TangibleObject datapad = (TangibleObject) target.getSlottedObject("datapad"); + + if (datapad != null) { + datapad.viewChildren(target, true, false, (obj) -> { + if (obj instanceof IntangibleObject && obj.getTemplate().equals("object/intangible/data_item/shared_guild_stone.iff")) { + obj.setStringAttribute("guild_name", null); + obj.setStringAttribute("guild_abbrev", null); + obj.setStringAttribute("guild_leader", null); + } + }); + } + } + + + public void sendMailToGuild(String sender, String subject, String message, int guildId) { + Guild guild = getGuildById(guildId); + + if (guild == null) + return; + + guild.sendGuildMail(sender, subject, message); + } + + public void sendGuildMotd(CreatureObject target, Guild guild) { + if (guild == null || guild.getMotd().isEmpty()) + return; + + ChatRoom room = core.chatService.getChatRoom(guild.getChatRoomId()); + + if (room == null) + return; + + String message = guild.getMotd(); + + if (message.startsWith("\\#")) + message = " " + message; + + ChatRoomMessage roomMessage = new ChatRoomMessage(guild.getChatRoomId(), "Message of the Day", message); + target.getClient().getSession().write(roomMessage.serialize()); + } + + + public GuildObject getGuildObject() { + return object; + } + + + public SWGSet getGuildList() { + return object.getGuildList(); + } + + public Guild getGuildByAbbreviation(String abbreviation) { + TreeMap guildMap = object.getGuilds(); + + for (Entry e : guildMap.entrySet()) { + if (e.getValue().getAbbreviation().equals(abbreviation)) { + return e.getValue(); + } + } + return null; + } + + public Guild getGuildByName(String name) { + TreeMap guildMap = object.getGuilds(); + + for (Entry e : guildMap.entrySet()) { + if (e.getValue().getName().equals(name)) { + return e.getValue(); + } + } + + return null; + } + + public Guild getGuildById(int id) { + TreeMap guildMap = object.getGuilds(); + + return guildMap.get(id); + } + + public boolean removeGuild(int id) { + Guild guild = getGuildById(id); + + if (guild != null) + return true; + + return false; + } + + @Override + public void insertOpcodes(Map swgOpcodes, Map objControllerOpcodes) { + + } + + @Override + public void shutdown() { + + } + +} diff --git a/src/services/InstanceService.java b/src/services/InstanceService.java new file mode 100644 index 00000000..09ec11d4 --- /dev/null +++ b/src/services/InstanceService.java @@ -0,0 +1,738 @@ +/******************************************************************************* + * Copyright (c) 2013 + * + * This File is part of NGECore2. + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see . + * + * Using NGEngine to work with NGECore2 is making a combined work based on NGEngine. + * Therefore all terms and conditions of the GNU Lesser General Public License cover the combination. + ******************************************************************************/ +package services; + +import java.util.ArrayList; +import java.util.Calendar; +import java.util.Date; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.concurrent.CopyOnWriteArrayList; +import java.util.concurrent.Executors; +import java.util.concurrent.ScheduledExecutorService; +import java.util.concurrent.ScheduledFuture; +import java.util.concurrent.TimeUnit; + +import resources.objects.building.BuildingObject; +import resources.objects.creature.CreatureObject; +import resources.objects.group.GroupObject; +import main.NGECore; + +import engine.clientdata.ClientFileManager; +import engine.clientdata.visitors.DatatableVisitor; +import engine.resources.common.CRC; +import engine.resources.objects.SWGObject; +import engine.resources.scene.Planet; +import engine.resources.scene.Point3D; +import engine.resources.service.INetworkDispatch; +import engine.resources.service.INetworkRemoteEvent; + +public class InstanceService implements INetworkDispatch { + + private NGECore core; + + private Map> instanceMap = new HashMap>(); + + private final ScheduledExecutorService scheduler = Executors.newScheduledThreadPool(1); + + public class Instance { + + private long instanceId = 0; + private String name = ""; + private long startTime = System.currentTimeMillis(); + private Point3D instancePosition; + private Point3D spawnPosition; + private int duration = 0; + private int lockoutTime = 0; + private CreatureObject owner; + private List participants = new CopyOnWriteArrayList(); + private List activeParticipants = new CopyOnWriteArrayList(); + private List objectList = new CopyOnWriteArrayList(); + private ScheduledFuture task; + private boolean faulty = false; + private boolean closed = false; + + public Instance(long instanceId, String name, Point3D instancePosition, Point3D spawnPosition, int duration, int lockoutTime, CreatureObject owner) { + this.instanceId = instanceId; + this.name = name; + this.instancePosition = instancePosition; + this.spawnPosition = spawnPosition; + this.duration = (duration * 1000); + this.lockoutTime = lockoutTime; + this.owner = owner; + participants.add(owner); + } + + public Instance() { + + } + + public synchronized long getInstanceId() { + return instanceId; + } + + public synchronized String getName() { + return name; + } + + public synchronized long getStartTime() { + return startTime; + } + + public synchronized long getTimeRemaining() { + return ((closed) ? 0 : (((long) duration) - (System.currentTimeMillis() - startTime))); + } + + public synchronized boolean isOpen() { + if (closed || getTimeRemaining() <= 0) { + return false; + } + + return true; + } + + public synchronized Point3D getInstancePosition() { + return instancePosition; + } + + public synchronized Point3D getSpawnPosition() { + return spawnPosition; + } + + public synchronized int getDuration() { + return duration; + } + + public synchronized int getLockoutTime() { + return lockoutTime; + } + + public synchronized CreatureObject getOwner() { + return owner; + } + + public List getParticipants() { + return participants; + } + + public List getActiveParticipants() { + return participants; + } + + public List getObjectList() { + return objectList; + } + + public synchronized boolean addParticipant(CreatureObject participant) { + if (activeParticipants.contains(participant)) { + return true; + } + + if (activeParticipants.size() >= 8) { + return false; + } + + activeParticipants.add(participant); + participants.add(participant); + + return true; + } + + public synchronized boolean isActiveParticipant(CreatureObject participant) { + return activeParticipants.contains(participant); + } + + public synchronized boolean isFormerParticipant(CreatureObject participant) { + return participants.contains(participant); + } + + public synchronized boolean removeParticipant(CreatureObject participant) { + return activeParticipants.remove(participant); + } + + public synchronized ScheduledFuture getTask() { + return task; + } + + public synchronized void setTask(ScheduledFuture task) { + this.task = task; + } + + public synchronized boolean isFaulty() { + return faulty; + } + + public synchronized void setFaulty(boolean faulty) { + this.faulty = faulty; + } + + public synchronized boolean isClosed() { + return closed; + } + + public synchronized void close() { + objectList.stream().forEach(core.objectService::destroyObject); + objectList.clear(); + closed = true; + } + + } + + public InstanceService(NGECore core) { + this.core = core; + + Calendar c = Calendar.getInstance(); + Date now = new Date(); + + c.setTime(now); + + if (c.get(Calendar.HOUR_OF_DAY) >= 6) { + c.add(Calendar.DAY_OF_MONTH, 1); + } + + c.set(Calendar.HOUR_OF_DAY, 6); + c.set(Calendar.MINUTE, 0); + c.set(Calendar.SECOND, 0); + c.set(Calendar.MILLISECOND, 0); + + long initialDelay = (c.getTimeInMillis() - now.getTime()); + + final Map> reference = instanceMap; + + scheduler.scheduleAtFixedRate(new Runnable() { + + private Map> instanceMap = reference; + + public void run() { + for (List instanceList : instanceMap.values()) { + for (Instance instance : instanceList) { + if ((instance.isClosed() || !instance.isOpen())) { + instanceList.remove(instance); + } + } + } + } + + }, initialDelay, 86400000, TimeUnit.MILLISECONDS); + } + + /* + * @description Create a brand new instance. + * + * @param instanceName Buildout name of the instance to build. + * @param owner Creator's creature object. + */ + public synchronized Instance create(String instanceName, CreatureObject owner) { + Instance instance = null; + + try { + String planetName = core.scriptService.callScript("scripts/instances/", instanceName, "getTerrain").asString(); + Planet planet = core.terrainService.getPlanetByPath(planetName); + Point3D spawnPosition = new Point3D(); + int duration = (core.scriptService.callScript("scripts/instances/", instanceName, "getDuration").asInt() * 60); + int lockoutTime = core.scriptService.callScript("scripts/instances/", instanceName, "getLockoutTime").asInt();; + + core.scriptService.callScript("scripts/instances/", instanceName, "getSpawnPosition", spawnPosition); + + DatatableVisitor buildoutTable = ClientFileManager.loadFile("datatables/buildout/areas_" + planet.getName() + ".iff", DatatableVisitor.class); + + for (int i = 0; i < buildoutTable.getRowCount(); i++) { + if (((String) buildoutTable.getObject(i, 0)).equals(instanceName)) { + Point3D instancePosition = new Point3D((Float) buildoutTable.getObject(i, 1), 0, (Float) buildoutTable.getObject(i, 2)); + + if (!instanceInUse(instanceName, instancePosition)) { + instance = new Instance(core.guildService.getGuildObject().getNextInstanceId(), instanceName, instancePosition, spawnPosition, duration, lockoutTime, owner); + } + } + } + + if (instance == null) { + return null; + } + + core.scriptService.callScript("scripts/instances/", instanceName, "setup", core, instance); + + final Instance reference = instance; + + instance.setTask(scheduler.scheduleAtFixedRate(new Runnable() { + + private Instance instance = reference; + private boolean sentCloseWarning = false; + + public void run() { + if (instance.getDuration() > 300 && instance.getTimeRemaining() <= 300 && !sentCloseWarning) { + instance.getActiveParticipants().stream().forEach(p -> p.sendSystemMessage("@instance:five_minute_warning", (byte) 0)); + sentCloseWarning = true; + } + + if (!instance.isOpen()) { + instance.getActiveParticipants().stream().forEach(p -> p.sendSystemMessage("@instance:instance_time_out", (byte) 0)); + close(instance); + } + + core.scriptService.callScript("scripts/instances/", instance.getName(), "run", core, instance); + } + + }, 1, 1, TimeUnit.MINUTES)); + } catch (Exception e) { + e.printStackTrace(); + return null; + } + + if (!instanceMap.containsKey(instance.getName())) { + instanceMap.put(instance.getName(), new ArrayList()); + } + + instanceMap.get(instance.getName()).add(instance); + + return instance; + } + + + /* + * @description Queue them for an instance for 19 seconds, remove if none available. + * + * @param instanceName Name of the instance .py script. + * @param creature Player's creature object to queue for the instance. + * + * @return None. + */ + public void queue(String instanceName, CreatureObject creature) { + Instance instance = null; + + if (creature.getBuffByName("instance_launching") != null) { + creature.sendSystemMessage("@instance:instance_request_pending", (byte) 0); + return; + } + + core.buffService.addBuffToCreature(creature, "instance_launching"); + + if (isLockedOut(instanceName, creature)) { + creature.sendSystemMessage("@instance:lockout_notification", (byte) 0); + core.buffService.removeBuffFromCreature(creature, creature.getBuffByName("instance_launching")); + return; + } + + instance = getActiveInstance(instanceName, creature); + + if (creature.getGroupId() > 0) { + if (instance == null) { + GroupObject group = (GroupObject) core.objectService.getObject(creature.getGroupId()); + + if (group != null) { + for (SWGObject member : group.getMemberList()) { + instance = getActiveInstance(instanceName, (CreatureObject) member); + + if (instance != null) { + break; + } + } + } + } else { + GroupObject group = (GroupObject) core.objectService.getObject(creature.getGroupId()); + + if (group != null) { + for (SWGObject member : group.getMemberList()) { + Instance instance2 = getActiveInstance(instanceName, (CreatureObject) member); + + if (!instance2.equals(instance)) { + creature.sendSystemMessage("@instance:fail_invalid_lockout", (byte) 0); + core.buffService.removeBuffFromCreature(creature, creature.getBuffByName("instance_launching")); + return; + } + } + } + } + } + + if (instance == null) { + instance = create(instanceName, creature); + + if (instance == null) { + creature.sendSystemMessage("@instance:all_full", (byte) 0); + core.buffService.removeBuffFromCreature(creature, creature.getBuffByName("instance_launching")); + return; + } + } + + if (instance.getActiveParticipants().size() >= 8) { + creature.sendSystemMessage("@instance:fail_instance_full", (byte) 0); + core.buffService.removeBuffFromCreature(creature, creature.getBuffByName("instance_launching")); + return; + } + + if (instance != null) { + add(instance, creature); + } + + core.buffService.removeBuffFromCreature(creature, creature.getBuffByName("instance_launching")); + } + + /* + * @description Adds a player to an instance. Can be used directly to avoid queue. + * + * @param instance Instance object. + * @param creature Player's creature object to add to the instance. + * + * @return None. + */ + public void add(Instance instance, CreatureObject creature) { + try { + String terrain = core.scriptService.callScript("scripts/instances/", instance.getName(), "getTerrain").asString(); + Planet planet = core.terrainService.getPlanetByPath(terrain); + int cellId = core.scriptService.callScript("scripts/instances/", instance.getName(), "getCellId").asInt(); + + if (cellId == -1) { + Point3D position = new Point3D(); + position.x = instance.getInstancePosition().x + instance.getSpawnPosition().x; + position.y = instance.getInstancePosition().y + instance.getSpawnPosition().y; + position.z = instance.getInstancePosition().z + instance.getSpawnPosition().z; + + core.simulationService.transferToPlanet(creature, planet, position, creature.getOrientation(), null); + } else { + String buildingName = core.scriptService.callScript("scripts/instances/", instance.getName(), "getBuilding").asString(); + BuildingObject building = null; + + Point3D buildingPosition = instance.getInstancePosition().clone(); + + DatatableVisitor buildoutTable = ClientFileManager.loadFile("datatables/buildout/" + planet.getName() + "/" + instance.getName() + ".iff", DatatableVisitor.class); + + for (int i = 0; i < buildoutTable.getRowCount(); i++) { + if (((Integer) buildoutTable.getObject(i, 3)) == CRC.StringtoCRC(buildingName)) { + buildingPosition.x += ((Float) buildoutTable.getObject(i, 5)); + buildingPosition.y += ((Float) buildoutTable.getObject(i, 6)); + buildingPosition.z += ((Float) buildoutTable.getObject(i, 7)); + } + } + + for (SWGObject object : core.objectService.getObjectList().values()) { + if (object instanceof BuildingObject && + object.getTemplate().equals(buildingName) && + object.getPosition().x == buildingPosition.x && + object.getPosition().y == buildingPosition.y && + object.getPosition().z == buildingPosition.z) { + building = (BuildingObject) object; + break; + } + } + + if (building == null) { + throw new Exception(); + } + + core.simulationService.transferToPlanet(creature, planet, instance.getSpawnPosition(), creature.getOrientation(), building.getCellByCellNumber(cellId)); + } + + instance.addParticipant(creature); + + core.scriptService.callScript("scripts/instances/", instance.getName(), "add", core, instance, creature); + } catch (Exception e) { + e.printStackTrace(); + } + } + + /* + * @description Removes a player from an instance. Can be used directly. + * + * @param instance Instance object. + * @param creature Player's creature object to add to the instance. + * + * @return None. + */ + public void remove(Instance instance, CreatureObject creature) { + try { + if (creature.getBuffByName("instance_exiting") != null) { + creature.sendSystemMessage("@instance:instance_request_pending", (byte) 0); + return; + } + + core.buffService.addBuffToCreature(creature, "instance_exiting"); + + String exitTerrain = core.scriptService.callScript("scripts/instances/", instance.getName(), "getExitTerrain").asString(); + Point3D exitPosition = new Point3D(); + Planet exitPlanet = core.terrainService.getPlanetByPath(exitTerrain); + + core.scriptService.callScript("scripts/instances/", instance.getName(), "getExitPosition", exitPosition); + + core.scriptService.callScript("scripts/instances/", instance.getName(), "remove", core, instance, creature); + + instance.removeParticipant(creature); + + core.simulationService.transferToPlanet(creature, exitPlanet, exitPosition, creature.getOrientation(), null); + } catch (Exception e) { + e.printStackTrace(); + } + + core.buffService.removeBuffFromCreature(creature, creature.getBuffByName("instance_exiting")); + } + + /* + * @description Closes an instance. + * + * @param instance Instance object. + * + * @return None. + */ + public synchronized void close(Instance instance) { + try { + if (instance.isClosed()) { + return; + } + + String exitTerrain = core.scriptService.callScript("scripts/instances/", instance.getName(), "getExitTerrain").asString(); + Point3D exitPosition = new Point3D(); + Planet exitPlanet = core.terrainService.getPlanetByPath(exitTerrain); + + core.scriptService.callScript("scripts/instances/", instance.getName(), "getExitPosition", exitPosition); + + for (CreatureObject participant : instance.getActiveParticipants()) { + instance.removeParticipant(participant); + core.simulationService.transferToPlanet(participant, exitPlanet, exitPosition, participant.getOrientation(), null); + } + + if (!instance.getTask().isCancelled()) { + instance.getTask().cancel(true); + } + + core.scriptService.callScript("scripts/instances/", instance.getName(), "destroy", core, instance); + + instance.close(); + } catch (Exception e) { + e.printStackTrace(); + instance.setFaulty(true); + } + } + + /* + * @description Checks if an instance area is in use. + * + * @param instanceName Buildout name of the instance. + * @param instancePosition Position of the instance in the game world. + * + * @return True if instance is in use. + */ + public boolean instanceInUse(String instanceName, Point3D instancePosition) { + if (instanceMap.containsKey(instanceName)) { + for (Instance instance : instanceMap.get(instanceName)) { + if (instance.isFaulty() || (instance.isOpen() && + instance.getInstancePosition().x == instancePosition.x && + instance.getInstancePosition().z == instancePosition.z)) { + return true; + } + } + } + + return false; + } + + /* + * @description Gets an instance object from an instanceId. + * + * @param instanceId Id of an instance you want an object for. + * + * @return Instance object, or null if none found. + */ + public Instance getInstance(long instanceId) { + for (List instanceList : instanceMap.values()) { + for (Instance instance : instanceList) { + if (instance.getInstanceId() == instanceId) { + return instance; + } + } + } + + return null; + } + + /* + * @description Checks if player is in an instance. + * + * @param creature Player's creature object. + * + * @return True if player is in an instance. + */ + public boolean isInInstance(CreatureObject creature) { + for (List instanceList : instanceMap.values()) { + for (Instance instance : instanceList) { + if (instance.isActiveParticipant(creature)) { + return true; + } + } + } + + return false; + } + + /* + * @description Checks if player is in a specific instance. + * + * @param instanceName Buildout name of the instance. + * @param creature Player's creature object. + * + * @return True if player is in the specified instance. + */ + public boolean isInInstance(String instanceName, CreatureObject creature) { + if (instanceMap.containsKey(instanceName)) { + for (Instance instance : instanceMap.get(instanceName)) { + if (instance.isActiveParticipant(creature)) { + return true; + } + } + } + + return false; + } + + /* + * @description Checks if player is in a specific instance. + * + * @param instance Instance object. + * @param creature Player's creature object. + * + * @return True if player is in the specified instance. + */ + public boolean isInInstance(Instance instance, CreatureObject creature) { + return instance.getActiveParticipants().contains(creature); + } + + /* + * @description Finds the instance object a player is currently in. + * + * @param creature Player's creature object. + * + * @return Instance object of the player, or null if they aren't in one. + */ + public Instance getActiveInstance(CreatureObject creature) { + for (List instanceList : instanceMap.values()) { + for (Instance instance : instanceList) { + if (instance.isActiveParticipant(creature)) { + return instance; + } + } + } + + return null; + } + + /* + * @description Finds the instance object of an instance a player is/has been in. + * + * @param instanceName Buildout name of the instance. + * @param creature Player's creature object. + * + * @return Instance object of the specified instance the specified player has entered since reset, or null if not found. + */ + public Instance getActiveInstance(String instanceName, CreatureObject creature) { + if (instanceMap.containsKey(instanceName)) { + for (Instance instance : instanceMap.get(instanceName)) { + if (instance.isFormerParticipant(creature) && instance.getTimeRemaining() > 0) { + return instance; + } + } + } + + return null; + } + + /* + * @description Checks if player has any instance lockouts. + * + * @param creature Player's creature object. + * + * @return True if player is locked out from any instances. + */ + public boolean hasInstanceLockout(CreatureObject creature) { + for (List instanceList : instanceMap.values()) { + for (Instance instance : instanceList) { + if (instance.isFormerParticipant(creature)) { + return true; + } + } + } + + return false; + } + + /* + * @description Finds the instance object of an instance a player is/has been in. + * + * @param instanceName Buildout name of the instance. + * @param creature Player's creature object. + * + * @return Instance object of the specified instance the specified player has entered since reset, or null if not found. + */ + public List getLockoutList(CreatureObject creature) { + List lockoutList = new ArrayList(); + + for (List instanceList : instanceMap.values()) { + instanceList.stream().filter(i -> i.isFormerParticipant(creature)).forEach(i -> lockoutList.add(i)); + } + + return lockoutList; + } + + /* + * @description Checks if player is locked out of an instance. + * + * @param instanceName Buildout name of the instance. + * @param creature Player's creature object. + * + * @return True if player is locked out from the specified instance. + */ + public boolean isLockedOut(String instanceName, CreatureObject creature) { + if (instanceMap.containsKey(instanceName)) { + for (Instance instance : instanceMap.get(instanceName)) { + if (instance.isFormerParticipant(creature) && instance.getTimeRemaining() <= 0) { + return true; + } + } + } + + return false; + } + + /* + * @description Shows the instance UI. + * + * @param creature Player's creature object. + * + * @return None. + */ + public void showInstances(CreatureObject creature) { + // Stub for the /showi UI + } + + @Override + public void insertOpcodes(Map swgOpcodes, + Map objControllerOpcodes) { + // TODO Auto-generated method stub + + } + + @Override + public void shutdown() { + // TODO Auto-generated method stub + + } + +} diff --git a/src/services/LoginService.java b/src/services/LoginService.java index 92a3d42c..49cbd1c8 100644 --- a/src/services/LoginService.java +++ b/src/services/LoginService.java @@ -26,6 +26,7 @@ import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import java.util.Map; +import java.util.Properties; import java.util.Random; import java.util.concurrent.ScheduledExecutorService; @@ -37,9 +38,11 @@ import org.apache.mina.core.session.IoSession; import engine.clients.Client; import engine.protocol.soe.Disconnect; import engine.resources.database.DatabaseConnection; +import engine.resources.service.ILoginProvider; import engine.resources.service.INetworkDispatch; import engine.resources.service.INetworkRemoteEvent; - +import engine.resources.service.LocalDbLoginProvider; +import engine.resources.service.VBLoginProvider; import protocol.swg.CharacterCreationDisabled; import protocol.swg.ClientUIErrorMessage; import protocol.swg.DeleteCharacterMessage; @@ -52,7 +55,7 @@ import protocol.swg.LoginEnumCluster; import protocol.swg.ServerNowEpochTime; import protocol.swg.StationIdHasJediSlot; import resources.common.*; - +import resources.datatables.PlayerFlags; import resources.objects.creature.CreatureObject; @SuppressWarnings("unused") @@ -61,16 +64,22 @@ public class LoginService implements INetworkDispatch{ private int sessionKeyLength = 0; private NGECore core; - private DatabaseConnection databaseConnection; + private DatabaseConnection databaseConnection1; private DatabaseConnection databaseConnection2; private Random random; + private ILoginProvider LoginProvider; public LoginService(NGECore core) { this.core = core; this.sessionKeyLength = core.getConfig().getInt("LOGIN.SESSION_KEY_SIZE"); - this.databaseConnection = core.getDatabase1(); + this.databaseConnection1 = core.getDatabase1(); this.databaseConnection2 = core.getDatabase2(); this.random = new Random(); + if (databaseConnection2 == null) { + LoginProvider = new LocalDbLoginProvider(databaseConnection1); + } else { + LoginProvider = new VBLoginProvider(databaseConnection1, databaseConnection2); + } } public void insertTimedEventBindings(ScheduledExecutorService executor) { @@ -88,19 +97,25 @@ public class LoginService implements INetworkDispatch{ data.position(0); clientID.deserialize(data); - String err = ""; String user = clientID.getAccountName(); String pass = clientID.getPassword(); - int id = getAccountID(user); - if (id == -1) err = "Invalid Username"; - //String email = getAccountEmail(user); - //String encryptPass = getAccountPassword(user); + int id = LoginProvider.getAccountId(user, pass, session.getRemoteAddress().toString()); + System.out.println("LOGIN: " + user + " login attempt "+session.getRemoteAddress().toString()+" returned " + id); - if (err == "") - err = canUserLogin(user, /*email*/"", pass, /*encryptPass*/"", id, session.getRemoteAddress().toString()); - - if (err != "") { - System.out.println(user + " failed login because " + err); + if (id < 0) { + + String err = ""; + switch (id) { + case -1: + err = "Database error"; + break; + case -2: + err = "invalid user or password"; + break; + case -3: + err = "user is banned"; + break; + } ClientUIErrorMessage errMsg = new ClientUIErrorMessage("Invalid Login", err); session.write(errMsg.serialize()); Disconnect disconnect = new Disconnect((Integer)session.getAttribute("connectionId"), 6); @@ -118,8 +133,9 @@ public class LoginService implements INetworkDispatch{ client.setAccountId(id); //client.setAccountEmail(email); client.setSession(session); + client.setGM(checkForGmPermission(id)); - core.addClient((Integer)session.getAttribute("connectionId"), client); + core.addClient(session, client); /*if(!checkIfAccountExistInGameDB(id)) { createAccountForGameDB(id, user, email, encryptPass); @@ -128,7 +144,7 @@ public class LoginService implements INetworkDispatch{ persistSession(client); LoginEnumCluster servers = getLoginCluster(); - LoginClusterStatus serverStatus = getLoginClusterStatus(); + LoginClusterStatus serverStatus = getLoginClusterStatus(client); EnumerateCharacterId characters = getEnumerateCharacterId(id); LoginClientToken clientToken = new LoginClientToken(client.getSessionKey(), id, user); @@ -157,29 +173,65 @@ public class LoginService implements INetworkDispatch{ @Override public void handlePacket(IoSession session, IoBuffer data) throws Exception { - + data = data.order(ByteOrder.LITTLE_ENDIAN); data.position(0); DeleteCharacterMessage packet = new DeleteCharacterMessage(); packet.deserialize(data); - Client client = core.getClient((Integer) session.getAttribute("connectionId")); + Client client = core.getClient(session); - PreparedStatement preparedStatement; - - preparedStatement = databaseConnection.preparedStatement("DELETE FROM characters WHERE \"id\"=? AND \"galaxyId\"=? AND \"accountId\"=?"); - preparedStatement.setLong(1, packet.getcharId()); - preparedStatement.setInt(2, packet.getgalaxyId()); - preparedStatement.setInt(3, (int) client.getAccountId()); - boolean resultSet = preparedStatement.execute(); - //TODO: send deletecharacter failed - if(!resultSet) { - core.getCreatureODB().delete(new Long(packet.getcharId()), Long.class, CreatureObject.class); - DeleteCharacterReplyMessage reply = new DeleteCharacterReplyMessage(0); - session.write(reply.serialize()); - } - preparedStatement.close(); - + PreparedStatement preparedStatement; + + preparedStatement = databaseConnection1.preparedStatement("DELETE FROM characters WHERE \"id\"=? AND \"galaxyId\"=? AND \"accountId\"=?"); + preparedStatement.setLong(1, packet.getcharId()); + preparedStatement.setInt(2, packet.getgalaxyId()); + preparedStatement.setInt(3, (int) client.getAccountId()); + boolean resultSet = preparedStatement.execute(); + + //TODO: send deletecharacter failed + if(!resultSet) { + CreatureObject object = (CreatureObject) core.objectService.getObject(packet.getcharId()); + + if (object == null) + object = (CreatureObject) core.objectService.getCreatureFromDB(packet.getcharId()); + + if (object != null) { + if (object.isInQuadtree() && object.getClient() != null) { + core.connectionService.disconnect(object.getClient()); + } + + if (object.isInQuadtree()) { + core.simulationService.remove(object, object.getPosition().x, object.getPosition().z, true); + if (core.missionService.getBountyListItem(object.getObjectID()) != null) { + core.missionService.removeBounty(object.getObjectID(), true); + } + } else { + if (core.getBountiesODB().contains(object.getObjectID())) + core.getBountiesODB().remove(object.getObjectID()); + } + + if (object.getGuildId() != 0) + core.guildService.getGuildById(object.getGuildId()).getMembers().remove(object.getObjectID()); + + core.objectService.destroyObject(object); + } + + try { + core.getSWGObjectODB().remove(object.getObjectID()); + } catch (Exception e) { + DeleteCharacterReplyMessage reply = new DeleteCharacterReplyMessage(1); + session.write(reply.serialize()); + preparedStatement.close(); + return; + } + + DeleteCharacterReplyMessage reply = new DeleteCharacterReplyMessage(0); + session.write(reply.serialize()); + } + + preparedStatement.close(); + } }); @@ -190,15 +242,38 @@ public class LoginService implements INetworkDispatch{ } + public boolean checkForGmPermission(int id) { + try { + if (core.getConfig().getInt("ADMIN") > 0) { + return true; + } + } catch (Exception e) { + + } + + PreparedStatement preparedStatement; + + try { + preparedStatement = databaseConnection1.preparedStatement("SELECT * FROM accounts WHERE id=" + id + ""); + ResultSet resultSet = preparedStatement.executeQuery(); + if(resultSet.next()) + return resultSet.getBoolean("gmflag"); + } catch (SQLException e) { + e.printStackTrace(); + } + + return false; + } + /** * Saves session data to DB so Zone Server can link sessions to accounts. * @param client Client that needs a session save. */ private void persistSession(Client client) throws SQLException { - String sessionValues = "?, " + client.getAccountId(); - PreparedStatement ps = databaseConnection.preparedStatement("INSERT INTO sessions (key, \"accountId\") VALUES (" + sessionValues + ")"); + PreparedStatement ps = databaseConnection1.preparedStatement("INSERT INTO sessions (\"key\", \"accountId\") VALUES (?, ?)"); ps.setBytes(1, client.getSessionKey()); + ps.setLong(2, client.getAccountId()); ps.executeUpdate(); ps.close(); @@ -226,7 +301,7 @@ public class LoginService implements INetworkDispatch{ PreparedStatement preparedStatement; try { - preparedStatement = databaseConnection.preparedStatement("SELECT * FROM characters WHERE \"accountId\"=" + id + ""); + preparedStatement = databaseConnection1.preparedStatement("SELECT * FROM characters WHERE \"accountId\"=" + id + ""); resultSet = preparedStatement.executeQuery(); while (resultSet.next() && !resultSet.isClosed()) { @@ -257,7 +332,7 @@ public class LoginService implements INetworkDispatch{ LoginEnumCluster servers = new LoginEnumCluster(9); PreparedStatement preparedStatement; try { - preparedStatement = databaseConnection.preparedStatement("SELECT * FROM galaxies"); + preparedStatement = databaseConnection1.preparedStatement("SELECT * FROM galaxies"); ResultSet resultSet = preparedStatement.executeQuery(); while (resultSet.next() && !resultSet.isClosed()) servers.addServer(resultSet.getInt("id"), resultSet.getString("name")); @@ -272,11 +347,11 @@ public class LoginService implements INetworkDispatch{ * Generates LoginClusterStatus packet. * @return LoginClusterStatus packet. */ - public LoginClusterStatus getLoginClusterStatus() { + public LoginClusterStatus getLoginClusterStatus(Client client) { LoginClusterStatus clusterStatus = new LoginClusterStatus(); ResultSet resultSet; try { - PreparedStatement preparedStatement = databaseConnection.preparedStatement("SELECT * FROM \"connectionServers\""); + PreparedStatement preparedStatement = databaseConnection1.preparedStatement("SELECT * FROM \"connectionServers\""); resultSet = preparedStatement.executeQuery(); while (resultSet.next() && !resultSet.isClosed()) clusterStatus.addServer( @@ -287,118 +362,14 @@ public class LoginService implements INetworkDispatch{ 100, resultSet.getInt("statusId"), 1, - core.getActiveZoneClients()); + core.getActiveZoneClients(), + client); } catch (SQLException e) { e.printStackTrace(); } return clusterStatus; } - /** - * Checks if account ID exists in game DB. - * @param id Account ID. - */ - private boolean checkIfAccountExistInGameDB(int id) { - try { - PreparedStatement preparedStatement = databaseConnection.preparedStatement("SELECT * FROM accounts WHERE id=?"); - preparedStatement.setInt(1, id); - ResultSet resultSet = preparedStatement.executeQuery(); - if (resultSet.next()) { - return true; - } - } catch (SQLException e) { - e.printStackTrace(); - } - return false; - } - - /** - * Saves forum account to game DB if the account does not exist in the game DB already. - * @param id Account ID. - * @param user Username - * @param email User's email - * @param pass Hashed password - */ - private void createAccountForGameDB(int id, String user, String email, String pass) { - try { - PreparedStatement ps = databaseConnection.preparedStatement("INSERT INTO accounts (id, \"user\", \"pass\", \"email\") VALUES (?, ?, ?, ?)"); - ps.setInt(1, id); - ps.setString(2, user); - ps.setString(3, pass); - ps.setString(4, email); - ps.executeUpdate(); - ps.close(); - } catch (SQLException e) { - e.printStackTrace(); - } - } - - /** - * Checks if user is allowed to login. - * @param id Account ID. - * @param user Username - * @param email User's email - * @param pass User password - * @param encryptPass encrypted password - * @param ip Users IP address - */ - private String canUserLogin(String user, String email, String pass, String encryptPass, int id, String ip) { - /*if ((new PHPBB3Auth()).phpbb_check_hash(pass, encryptPass)) { - if(checkBanlistforUserAndIP(id, ip)) { - return "You cannot login to the ProjectSWG server while being banned from ProjectSWG services"; - } - return ""; - } else { - return "Invalid Password"; - }*/ - - try { - PreparedStatement ps = databaseConnection.preparedStatement("SELECT * FROM accounts WHERE id=" + id + " AND \"pass\"='" + pass + "'"); - ResultSet resultSet = ps.executeQuery(); - - if (resultSet.next()) { - - return ""; - - } - } catch (SQLException e) { - e.printStackTrace(); - } - - return "Invalid Password"; - - - } - /** - * Checks if User has a forum account or IP ban. - * @param id Account ID. - * @param ip User's IP address. - */ - private boolean checkBanlistforUserAndIP(int id, String ip) { - if (!ip.contains("/")) - return false; - String IP = ((ip.split("/", 2)[1]).split(", ", 2)[0]).split(":", 2)[0]; - try { - PreparedStatement preparedStatement = databaseConnection2.preparedStatement("SELECT ban_id FROM phpbb_banlist WHERE ban_ip=?"); - preparedStatement.setString(1, IP); - ResultSet resultSet = preparedStatement.executeQuery(); - if (resultSet.next()) { - return true; - } else { - preparedStatement.close(); - preparedStatement = databaseConnection2.preparedStatement("SELECT ban_id FROM phpbb_banlist WHERE ban_userid=?"); - preparedStatement.setInt(1, id); - resultSet = preparedStatement.executeQuery(); - if (resultSet.next()) { - return true; - } - } - } catch (SQLException e) { - e.printStackTrace(); - } - return false; - } - /** * Checks if User has correct client version. * @param version Client Version String @@ -407,61 +378,6 @@ public class LoginService implements INetworkDispatch{ System.out.println("Version Received: " + version); return true; } - - /** - * Gets Account ID from forum DB by username. - * @param user Username. - */ - private int getAccountID(String user) { - try { - PreparedStatement pStatement = databaseConnection.preparedStatement("SELECT id FROM accounts WHERE \"user\"='" + user + "'"); - ResultSet resultSet = pStatement.executeQuery(); - if (resultSet.next()) { - return resultSet.getInt("id"); - } - } catch (SQLException e) { - e.printStackTrace(); - }; - return -1; - } - - /** - * Gets Account Email from forum DB by username. - * @param user Username. - */ - private String getAccountEmail(String user) { - try { - PreparedStatement pStatement = databaseConnection2.preparedStatement("SELECT user_email FROM phpbb_users WHERE username=?"); - pStatement.setString(1, user); - ResultSet resultSet = pStatement.executeQuery(); - - if (resultSet.next()) { - return resultSet.getString("user_email"); - } - } catch (SQLException e) { - e.printStackTrace(); - }; - return ""; - } - - /** - * Gets hashed Account Password from forum DB by username. - * @param user Username. - */ - private String getAccountPassword(String user) { - try { - PreparedStatement pStatement = databaseConnection2.preparedStatement("SELECT user_password FROM phpbb_users WHERE username=?"); - pStatement.setString(1, user); - ResultSet resultSet = pStatement.executeQuery(); - - if (resultSet.next()) { - return resultSet.getString("user_password"); - } - pStatement.close(); - } catch (SQLException e) { - e.printStackTrace(); - }; - return ""; - } - + } + diff --git a/src/services/LootService.java b/src/services/LootService.java new file mode 100644 index 00000000..6b1a89c2 --- /dev/null +++ b/src/services/LootService.java @@ -0,0 +1,2566 @@ +/******************************************************************************* + * Copyright (c) 2013 + * + * This File is part of NGECore2. + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see . + * + * Using NGEngine to work with NGECore2 is making a combined work based on NGEngine. + * Therefore all terms and conditions of the GNU Lesser General Public License cover the combination. + ******************************************************************************/ +package services; + +import java.io.IOException; +import java.nio.file.DirectoryStream.Filter; +import java.nio.file.attribute.BasicFileAttributes; +import java.nio.file.FileVisitResult; +import java.nio.file.FileVisitor; +import java.nio.file.Files; +import java.nio.file.Path; +import java.nio.file.Paths; +import java.nio.file.SimpleFileVisitor; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.Iterator; +import java.util.LinkedHashMap; +import java.util.List; +import java.util.Map; +import java.util.Random; +import java.util.Vector; +import java.util.concurrent.atomic.AtomicInteger; +import protocol.swg.PlayClientEffectObjectTransformMessage; +import resources.objects.craft.DraftSchematic; +import resources.common.OutOfBand; +import resources.datatables.DisplayType; +import resources.loot.LootGroup; +import resources.loot.LootRollSession; +import resources.objects.creature.CreatureObject; +import resources.objects.group.GroupObject; +import resources.objects.intangible.IntangibleObject; +import resources.objects.tangible.TangibleObject; +import resources.objects.weapon.WeaponObject; +import services.sui.SUIService.ListBoxType; +import services.sui.SUIService.MessageBoxType; +import services.sui.SUIWindow; +import services.sui.SUIWindow.SUICallback; +import services.sui.SUIWindow.Trigger; +import main.NGECore; +import engine.resources.container.CreatureContainerPermissions; +import engine.resources.container.Traverser; +import engine.resources.objects.SWGObject; +import engine.resources.scene.Planet; +import engine.resources.scene.Point3D; +import engine.resources.scene.Quaternion; +import engine.resources.service.INetworkDispatch; +import engine.resources.service.INetworkRemoteEvent; + +/** + * @author Charon + */ + +public class LootService implements INetworkDispatch { + + private NGECore core; + private static int prepInvCnt = 0; + + public LootService(NGECore core) { + this.core = core; + } + + @Override + public void insertOpcodes(Map swgOpcodes, Map objControllerOpcodes) { + + + } + + @Override + public void shutdown() { + + } + + public void handleLootRequest(CreatureObject requester, TangibleObject lootedObject) { + System.out.println("handleLootRequest "); + // security check + if (hasAccess(requester,lootedObject) && ! lootedObject.isLooted()){ + LootRollSession lootRollSession = (LootRollSession )lootedObject.getAttachment("LootSession"); + if (lootRollSession.getDroppedItems().size()==0){ + System.err.println("lootRollSession.getDroppedItems().size()==0"); + return; + } + SWGObject lootedObjectInventory = lootedObject.getSlottedObject("inventory"); + core.simulationService.openContainer(requester, lootedObjectInventory); + setLooted(requester,lootedObject); + } + } + + private boolean hasAccess(CreatureObject requester, TangibleObject lootedObject){ + LootRollSession lootRollSession = (LootRollSession )lootedObject.getAttachment("LootSession"); + if (lootRollSession==null) + System.err.println("LootSession null: " + lootRollSession); + if (lootRollSession!=null){ + if (lootRollSession.getRequester()==requester){ + return true; + } + } + // ToDo: Access for groups + return false; + } + + public void DropLoot(CreatureObject requester, TangibleObject lootedObject) { + + if (requester==null || lootedObject==null) + return; //QA + + GroupObject group = null; + if(requester.getGroupId()!=0) + group = (GroupObject) core.objectService.getObject(requester.getGroupId()); + + if (lootedObject.getKiller()==null) + lootedObject.setKiller(requester); + + if (lootedObject.isLooted() || lootedObject.isLootLock() || (group == null && !lootedObject.getKiller().equals(requester)) || (group != null && !group.getMemberList().contains(lootedObject.getKiller()))) + return; + + lootedObject.setLootLock(true); + + LootRollSession lootRollSession = new LootRollSession(requester,lootedObject); + lootedObject.setAttachment("LootSession", lootRollSession); // preliminarily register session already here + + handleCreditDrop(requester,lootedObject,lootRollSession); + + lootSituationAssessment(requester,lootedObject,lootRollSession); + + //CreatureObject lootedCreature = (CreatureObject) lootedObject; + + //TreeSet> lootSpec = lootedObject.getLootSpecification(); + List lootGroups = lootedObject.getLootGroups(); + Iterator iterator = lootGroups.iterator(); + int projectionCoefficientMatrixModulo = 0; + projectionCoefficientMatrixModulo = outbound(requester); + + while (iterator.hasNext()){ + LootGroup lootGroup = iterator.next(); + double groupChance = lootGroup.getLootGroupChance(); + double lootGroupRoll = new Random().nextDouble()*100; + if (projectionCoefficientMatrixModulo!=0) + lootGroupRoll=groupChance+1; + if (lootGroupRoll <= groupChance){ + //System.out.println("this lootGroup will drop something"); + handleLootGroup(lootGroup,lootRollSession); //this lootGroup will drop something e.g. {kraytpearl_range,krayt_tissue_rare} + } + } + + + // Rare Loot System Stage (Is in place for all looted creatures with 6 CL difference) + //if (lootRollSession.isAllowRareLoot()){ + if (true){ + int randomRareLoot = new Random().nextInt(100); + int chanceRequirement = 1; + chanceRequirement = 10; // This is for a test period to lift chest drop chance a bit + if (lootRollSession.getLootedObjectDifficulty()==1) + chanceRequirement+=2; + if (lootRollSession.getLootedObjectDifficulty()==2) + chanceRequirement+=3; + if (lootRollSession.isIncreasedRLSChance()) + chanceRequirement+=3; + if (randomRareLoot <= chanceRequirement){ + handleRareLootChest(lootRollSession); + } + + // to test: + //handleRareLootChest(lootRollSession); + } + + // set info above corpse + //System.out.println("lootedObject instanceof CreatureObject " + (lootedObject instanceof CreatureObject)); + if (lootedObject instanceof CreatureObject){ + try { + float y = 0.5F; // 1.3356977F + float qz= 1.06535322E9F; + Point3D effectorPosition = new Point3D(0,y,0); + Quaternion effectorOrientation = new Quaternion(0,0,0,qz); + PlayClientEffectObjectTransformMessage lmsg = new PlayClientEffectObjectTransformMessage("appearance/pt_loot_disc.prt",lootedObject.getObjectID(),"lootMe",effectorPosition,effectorOrientation); + requester.getClient().getSession().write(lmsg.serialize()); + tools.CharonPacketUtils.printAnalysis(lmsg.serialize()); + } catch (Exception e) { + e.printStackTrace(); + } + } + + // handle errors + if (lootRollSession.getErrorMessages().size()>0){ + for (String msg : lootRollSession.getErrorMessages()){ + // ToDo: Show this for each group member later! + requester.sendSystemMessage(msg,(byte) 1); + lootedObject.setLootLock(false); + return; + } + } + + SWGObject lootedObjectInventory = lootedObject.getSlottedObject("inventory"); + if (lootedObjectInventory==null || lootedObject.getTemplate().startsWith("object/tangible/container/drum/shared_treasure_drum.iff")) + lootedObjectInventory = lootedObject; // In case we don't know what we are dealing with + + // For autoloot + //SWGObject requesterInventory = requester.getSlottedObject("inventory"); + System.out.println("lootRollSession.getDroppedItems() " + (lootRollSession.getDroppedItems())); + for (TangibleObject droppedItem : lootRollSession.getDroppedItems()){ + + //droppedItem.setAttachment("radial_filename", "lootitem"); + //if (! droppedItem.getTemplate().contains("shared_rare_loot_chest")) + lootedObjectInventory.add(droppedItem); + + // RLS chest effect + if (droppedItem.getAttachment("LootItemName").toString().contains("Loot Chest")){ + requester.playEffectObject("appearance/pt_loot_chest.prt", ""); + if (requester.getClient().isGM()) { + requester.sendSystemMessage("GM Message: Played rlc effect due to RLC dropping.", DisplayType.Broadcast); + } + } + } + + // register session in service + lootedObject.setAttachment("LootSession", lootRollSession); + + //lootedObject.setLooted(true); + // ToDo: Group loot settings etc. actual loot chance was lootgroupchance*lootchance + } + + public void handleJunkDealerSellWindow(CreatureObject actor, SWGObject junkDealer, Vector sellableItems) { + + if (sellableItems.size() == 0) { + SUIWindow notInterestedWindow = core.suiService.createMessageBox(MessageBoxType.MESSAGE_BOX_OK, "@loot_dealer:sell_title", "@loot_dealer:no_items", actor, junkDealer, (float) 10); + core.suiService.openSUIWindow(notInterestedWindow); + return; + } + + Map itemsToSell = new HashMap(); + sellableItems.forEach(obj -> { + if (!((TangibleObject)obj).isNoSell()) { + int price = ((TangibleObject) obj).getJunkDealerPrice(); + if (((TangibleObject) obj).getUses() > 0) { price = price * ((TangibleObject) obj).getUses(); } + + itemsToSell.put(obj.getObjectID(), "[" + price + "] " + obj.getCustomName()); + } + }); + + if (itemsToSell.size() == 0) { // Every item is in the sellable's vector, however only items the player is offering gets put in list. + SUIWindow notInterestedWindow = core.suiService.createMessageBox(MessageBoxType.MESSAGE_BOX_OK, "@loot_dealer:sell_title", "@loot_dealer:no_items", actor, junkDealer, (float) 10); + core.suiService.openSUIWindow(notInterestedWindow); + return; + } + + final SUIWindow window = core.suiService.createListBox(ListBoxType.LIST_BOX_OK_CANCEL, "@loot_dealer:sell_title", "@loot_dealer:sell_prompt", itemsToSell, actor, junkDealer, (float) 10); + + window.setProperty("btnOther:Visible", "True"); + window.setProperty("btnOther:Text", "@loot_dealer:examine"); + window.setProperty("btnOk:Text", "@loot_dealer:btn_sell"); + + Vector returnList = new Vector(); + returnList.add("List.lstList:SelectedRow"); + + SUICallback windowCallback = ((owner, eventType, resultList) -> { + switch(eventType) { + case 0: // Sell + TangibleObject itemToSell = null; + int index = Integer.parseInt(resultList.get(0)); + long sellItemId = window.getObjectIdByIndex(index); + + if(sellItemId == 0 || core.objectService.getObject(sellItemId) == null) + return; + + itemToSell = (TangibleObject) core.objectService.getObject(sellItemId); + + int price = itemToSell.getJunkDealerPrice(); + + if (price == 0) + price = 20; + + if (itemToSell.getUses() > 0) + price *= itemToSell.getUses(); + + TangibleObject inventory = (TangibleObject) actor.getSlottedObject("inventory"); + + if (inventory == null) + return; + + addToBuyBack(actor, itemToSell); + + actor.addCashCredits(price); + actor.sendSystemMessage(OutOfBand.ProsePackage("@junk_dealer:prose_sold_junk", "TT", itemToSell.getCustomName(), "DI", price), DisplayType.Broadcast); + + inventory.remove(itemToSell); + + core.suiService.closeSUIWindow(actor, window.getWindowId()); + handleJunkDealerSellWindow(actor, junkDealer, getSellableInventoryItems(actor)); + break; + case 1: // Cancel + core.suiService.closeSUIWindow(actor, window.getWindowId()); + break; + case 2: // TODO: Show Examine Window for objects - Junk Dealer (/examine command?) + break; + } + }); + + window.addHandler(0, "", Trigger.TRIGGER_OK, returnList, windowCallback); + window.addHandler(1, "", Trigger.TRIGGER_CANCEL, returnList, windowCallback); + window.addHandler(2, "", Trigger.TRIGGER_UPDATE, returnList, windowCallback); + + core.suiService.openSUIWindow(window); + + } + + public void handleJunkDealerBuyBackWindow(CreatureObject actor, SWGObject junkDealer) { + + TangibleObject bbContainer = (TangibleObject) core.objectService.getObject((long) actor.getAttachment("buy_back")); + Map soldItems = new HashMap(); + bbContainer.viewChildren(actor, false, false, (obj) -> { + int price = ((TangibleObject) obj).getJunkDealerPrice(); + if (((TangibleObject) obj).getUses() > 0) { price = price * ((TangibleObject) obj).getUses(); } + + soldItems.put(obj.getObjectID(), "[" + price + "] " + obj.getCustomName()); + }); + + final SUIWindow window = core.suiService.createListBox(ListBoxType.LIST_BOX_OK_CANCEL, "@loot_dealer:buy_back_title", "@loot_dealer:buy_back_prompt", soldItems, actor, junkDealer, (float) 10); + window.setProperty("btnOther:Visible", "True"); + window.setProperty("btnOther:Text", "@loot_dealer:examine"); + window.setProperty("btnOk:Text", "@loot_dealer:btn_buy_back"); + + Vector returnList = new Vector(); + returnList.add("List.lstList:SelectedRow"); + + SUICallback windowCallback = ((owner, eventType, resultList) -> { + switch(eventType) { + case 0: // Buy Back + TangibleObject retrieveItem = null; + int index = Integer.parseInt(resultList.get(0)); + long retrieveItemId = window.getObjectIdByIndex(index); + + if(retrieveItemId == 0 || core.objectService.getObject(retrieveItemId) == null) { + actor.sendSystemMessage("@loot_dealer:no_buy_back_items_found", DisplayType.Broadcast); + return; + } + + retrieveItem = (TangibleObject) core.objectService.getObject(retrieveItemId); + + if (actor.getInventoryItemCount() >= 80) { + actor.sendSystemMessage("@loot_dealer:no_space_in_inventory", DisplayType.Broadcast); + return; + } + + TangibleObject inventory = (TangibleObject) actor.getSlottedObject("inventory"); + + if (inventory == null) + return; + + int value = retrieveItem.getJunkDealerPrice(); + + if (retrieveItem.getUses() > 0) + value *= retrieveItem.getUses(); + + if (actor.getCashCredits() < value) { + actor.sendSystemMessage(OutOfBand.ProsePackage("@loot_dealer:prose_no_buy_back", "TT", retrieveItem.getCustomName()), DisplayType.Broadcast); + return; + } + + actor.deductCashCredits(value); + + actor.sendSystemMessage(OutOfBand.ProsePackage("@base_player:prose_pay_success", "DI", value, "TT", "a Junk Dealer"), DisplayType.Broadcast); + + bbContainer.transferTo(actor, inventory, retrieveItem); + actor.sendSystemMessage(OutOfBand.ProsePackage("@loot_dealer:prose_buy_back_junk", "DI", value, "TT", retrieveItem.getCustomName()), DisplayType.Broadcast); + + core.suiService.closeSUIWindow(actor, window.getWindowId()); + + handleJunkDealerBuyBackWindow(actor, junkDealer); + break; + case 1: // Cancel + break; + case 2: // TODO: Show Examine Window for objects - Junk Dealer (/examine command?) + break; + } + }); + + window.addHandler(0, "", Trigger.TRIGGER_OK, returnList, windowCallback); + window.addHandler(1, "", Trigger.TRIGGER_CANCEL, returnList, windowCallback); + window.addHandler(2, "", Trigger.TRIGGER_UPDATE, returnList, windowCallback); + core.suiService.openSUIWindow(window); + } + + public void handleJunkDealerMarkItems(CreatureObject actor, SWGObject junkDealer) { + + Vector sellableItems = getSellableInventoryItems(actor); + + if (sellableItems.size() == 0) { + SUIWindow notFoundWindow = core.suiService.createMessageBox(MessageBoxType.MESSAGE_BOX_OK, + "@loot_dealer:junk_not_found_title", "@loot_dealer:junk_not_found_description", actor, junkDealer, (float) 10); + core.suiService.openSUIWindow(notFoundWindow); + return; + } + + Map markableItems = new HashMap(); + sellableItems.forEach(obj -> { + if (((TangibleObject) obj).isNoSell()) markableItems.put(obj.getObjectID(), "[ *No Sell* ] " + obj.getCustomName()); + else markableItems.put(obj.getObjectID(), "[ Sellable ] " + obj.getCustomName()); + }); + + final SUIWindow window = core.suiService.createListBox(ListBoxType.LIST_BOX_OK_CANCEL, "@loot_dealer:junk_no_sell_title", "@loot_dealer:junk_no_sell_description", + markableItems, actor, junkDealer, (float) 10); + + window.setProperty("btnOther:visible", "True"); + window.setProperty("btnOther:Text", "@loot_dealer:examine"); + window.setProperty("btnOk:Text", "@loot_dealer:junk_no_sell_button"); + + Vector returnList = new Vector(); + returnList.add("List.lstList:SelectedRow"); + + SUICallback windowCallback = ((owner, eventType, resultList) -> { + switch(eventType) { + case 0: + TangibleObject markItem = null; + int index = Integer.parseInt(resultList.get(0)); + long markItemId = window.getObjectIdByIndex(index); + + if(markItemId == 0 || core.objectService.getObject(markItemId) == null) + return; + + markItem = (TangibleObject) core.objectService.getObject(markItemId); + + if (markItem.isNoSell()) markItem.setNoSell(false); + else markItem.setNoSell(true); + + core.suiService.closeSUIWindow(actor, window.getWindowId()); + handleJunkDealerMarkItems(actor, junkDealer); + break; + case 1: // Cancel + break; + case 2: // TODO: Show Examine Window for objects - Junk Dealer (/examine command?) + break; + } + }); + + window.addHandler(0, "", Trigger.TRIGGER_OK, returnList, windowCallback); + window.addHandler(1, "", Trigger.TRIGGER_CANCEL, returnList, windowCallback); + window.addHandler(2, "", Trigger.TRIGGER_UPDATE, returnList, windowCallback); + + core.suiService.openSUIWindow(window); + } + + public void addToBuyBack(CreatureObject actor, TangibleObject item) { + if (actor.getAttachment("buy_back") == null) + createBuyBackDevice(actor); + + TangibleObject buyBackContainer = (TangibleObject) core.objectService.getObject((long) actor.getAttachment("buy_back")); + + if (buyBackContainer == null) { + createBuyBackDevice(actor); + addToBuyBack(actor, item); + return; + } + + buyBackContainer.transferTo(actor, buyBackContainer, item); + + final AtomicInteger count = new AtomicInteger(); + + buyBackContainer.viewChildren(actor, false, true, new Traverser() { + + @Override + public void process(SWGObject child) { + if (count.incrementAndGet() >= 11) { + core.objectService.destroyObject(child); // This obj should be the last added object (top-down), so it's safe to remove it. + } + } + }); + } + + private void handleLootGroup(LootGroup lootGroup,LootRollSession lootRollSession){ + + double[] lootPoolChances = lootGroup.getLootPoolChances(); + String[] lootPoolNames = lootGroup.getLootPoolNames(); + if (lootPoolChances==null || lootPoolNames==null){ + System.err.println("Lootpools are null!"); + return; + } + if (lootPoolChances.length==0 || lootPoolNames.length==0){ + System.err.println("No Lootpools in Lootgroup!"); + return; + } + + double randomItemFromGroup = new Random().nextDouble()*100; + double remainder = 0; // [10,20,30,34,5,1] + double span = 100/lootPoolNames.length; + + boolean test = false; + + for(int i=0;i itemNames = (Vector)core.scriptService.fetchStringVector(path,"itemNames"); + + Vector itemChances = (Vector)core.scriptService.fetchDoubleVector(path,"itemChances"); + + double randomItemFromPool = new Random().nextDouble()*100; + double remainder = 0.0; // [10,20,30,34,5,1] + double span = 100.0/(double)itemNames.size(); + + for (int i=0;i { + @Override + public boolean accept(Path entry) throws IOException { + return Files.isDirectory(entry); + } + } + + public SWGObject generateLootItem(CreatureObject requester, String template) + { + LootRollSession rollSession = new LootRollSession(); + rollSession.setSessionPlanet(requester.getPlanet()); + + handleLootPoolItems(template, rollSession); + if(rollSession.getDroppedItems().get(0) != null) return rollSession.getDroppedItems().get(0); + + return null; + } + + @SuppressWarnings("unused") + private void handleLootPoolItems(String itemName,LootRollSession lootRollSession){ + + final Vector foundPath = new Vector(); + Path p = Paths.get("scripts/loot/lootItems/"); + FileVisitor fv = new SimpleFileVisitor() { + @Override + public FileVisitResult visitFile(Path file, BasicFileAttributes attrs) throws IOException { + String actualFileName = file.getFileName().toString(); + actualFileName = actualFileName.substring(0, actualFileName.length()-3); + if (actualFileName.equals(itemName.toLowerCase())){ + foundPath.add(file.toString()); + } + return FileVisitResult.CONTINUE; + } + }; + try { + Files.walkFileTree(p, fv); + } catch (IOException e) { + e.printStackTrace(); + } + + + if (foundPath.size()==0){ + String errorMessage = "Loot item '" + itemName + "' not found in file system. Please contact Charon about this issue."; + lootRollSession.addErrorMessage(errorMessage); + return; + + } + String itemPath = foundPath.get(0); + + itemPath = itemPath.substring(0, itemPath.length()-3); // remove the file type + + String customName = ""; + String itemTemplate = ""; + Vector itemTemplates = null; + int stackCount = 1; + int biolink = 0; + int requiredCL = 1; + int stackable = -1; + int junkDealerPrice = 0; + byte junkType = -1; + String requiredProfession = ""; + String requiredFaction = ""; + Vector customizationAttributes = null; + Vector customizationValues = null; + Vector itemStats = null; + Vector itemSkillMods = null; + Vector STFparams = null; + + if(core.scriptService.getMethod(itemPath,"","itemTemplate")==null){ + String errorMessage = "Loot item '" + itemName + "' has no template function assigned in its script. Please contact Charon about this issue."; + lootRollSession.addErrorMessage(errorMessage); + return; + } + + itemTemplates = (Vector)core.scriptService.fetchStringVector(itemPath,"itemTemplate"); + if (itemTemplates.size()==1) + itemTemplate = itemTemplates.get(0); + if (itemTemplates.size()>1){ + itemTemplate = itemTemplates.get(new Random().nextInt(itemTemplates.size()-1)); + } + + // only consider the following variables, if they are in the python-script file + if(core.scriptService.getMethod(itemPath,"","customItemName")!=null) + customName = (String)core.scriptService.fetchString(itemPath,"customItemName"); + + if(core.scriptService.getMethod(itemPath,"","customItemStackCount")!=null) + stackCount = (Integer)core.scriptService.fetchInteger(itemPath,"customItemStackCount"); + + if(core.scriptService.getMethod(itemPath,"","customizationAttributes")!=null) + customizationAttributes = (Vector)core.scriptService.fetchStringVector(itemPath,"customizationAttributes"); + + if(core.scriptService.getMethod(itemPath,"","customizationValues")!=null) + customizationValues = (Vector)core.scriptService.fetchIntegerVector(itemPath,"customizationValues"); + + if(core.scriptService.getMethod(itemPath,"","itemStats")!=null) + itemStats = (Vector)core.scriptService.fetchStringVector(itemPath,"itemStats"); + + if(core.scriptService.getMethod(itemPath,"","itemSkillMods")!=null) + itemSkillMods = (Vector)core.scriptService.fetchStringVector(itemPath,"itemSkillMods"); + + if(core.scriptService.getMethod(itemPath,"","biolink")!=null) + biolink = (Integer)core.scriptService.fetchInteger(itemPath,"biolink"); + + if(core.scriptService.getMethod(itemPath,"","requiredCL")!=null) + requiredCL = (Integer)core.scriptService.fetchInteger(itemPath,"requiredCL"); + + if(core.scriptService.getMethod(itemPath,"","requiredProfession")!=null) + requiredProfession = (String)core.scriptService.fetchString(itemPath,"requiredProfession"); + + if(core.scriptService.getMethod(itemPath,"","requiredFaction")!=null) + requiredFaction = (String)core.scriptService.fetchString(itemPath,"requiredFaction"); + + if(core.scriptService.getMethod(itemPath,"","stackable")!=null) + stackable = (Integer)core.scriptService.fetchInteger(itemPath,"stackable"); + + if(core.scriptService.getMethod(itemPath,"","junkDealerPrice")!=null) + junkDealerPrice = (Integer)core.scriptService.fetchInteger(itemPath,"junkDealerPrice"); + + if(core.scriptService.getMethod(itemPath,"","junkType")!=null) + junkType = (byte)core.scriptService.fetchInteger(itemPath,"junkType"); + + if(core.scriptService.getMethod(itemPath,"","STFparams")!=null) + STFparams = (Vector)core.scriptService.fetchStringVector(itemPath,"STFparams"); + + + System.out.println("itemTemplate " + itemTemplate); + + + TangibleObject droppedItem = createDroppedItem(itemTemplate,lootRollSession.getSessionPlanet()); + + droppedItem.setLootItem(true); + droppedItem.setAttachment("LootItemName", itemName); + + if(core.scriptService.getMethod(itemPath,"","randomStatJewelry")!=null){ + customName = setRandomStatsJewelry(droppedItem, lootRollSession); + } + + if (!customName.isEmpty()) + handleCustomDropName(droppedItem, customName); + + if (stackable!=-1){ + if(stackable==1) + droppedItem.setStackable(true); + else + droppedItem.setStackable(false); + } + + if (junkDealerPrice!=0){ + droppedItem.setJunkDealerPrice(junkDealerPrice); + } + + if (junkType!=-1){ + droppedItem.setJunkType(junkType); + } + + if (biolink>0){ + droppedItem.setStringAttribute("bio_link", "bio_link_pending"); + } + + if (itemStats!=null){ + if (itemStats.size()%3!=0){ + String errorMessage = "Loot item '" + itemName + "' has a wrong number of itemstats. Please contact Charon about this issue."; + lootRollSession.addErrorMessage(errorMessage); + return; + } + handleStats(droppedItem, itemStats); + } + + if (itemSkillMods!=null){ + handleSkillMods(droppedItem, itemSkillMods); + } + + if (STFparams!=null){ + setSTFParams(droppedItem, STFparams); + } + + + +// if (customizationValues!=null) +// setCustomization(droppedItem, itemName); + + setCustomization(droppedItem, itemName); // for now + + handleSpecialItems(droppedItem, itemName); + + if (requiredCL>1){ + droppedItem.setIntAttribute("required_combat_level", requiredCL); + } + + if (requiredProfession.length()>0){ + droppedItem.setStringAttribute("class_required", requiredProfession); + } + + if (requiredFaction.length()>0){ + droppedItem.setStringAttribute("required_faction", requiredFaction); + } + + if(core.scriptService.getMethod(itemPath,"","customSetup") != null) + core.scriptService.callScript(itemPath, "", "customSetup", droppedItem); + + + lootRollSession.addDroppedItem(droppedItem); + } + + private void setSTFParams(TangibleObject droppedItem, VectorSTFparams){ + if (STFparams.size()!=4) + return; + String filename1 = "static_item_n"; + String filename2 = "static_item_d"; + filename1 = STFparams.get(0); + filename2 = STFparams.get(2); + String stfName = STFparams.get(1); + String detailName = STFparams.get(3); + droppedItem.setStfFilename(filename1); + droppedItem.setStfName(stfName); + droppedItem.setDetailFilename(filename2); + droppedItem.setDetailName(detailName); + } + + private void handleCustomDropName(TangibleObject droppedItem,String customName) { +// String customItemName = droppedItem.getCustomName(); +// if (customName.charAt(0) == '@' || customName.contains("_n:")) { +// if (customName!=null) { +// customName = ""; // Look the name up in some tre table +// } +// } + droppedItem.setCustomName(customName); + } + + private TangibleObject createDroppedItem(String template,Planet planet){ + TangibleObject droppedItem = (TangibleObject) core.objectService.createObject(template, planet); + System.out.println("droppedItem " + droppedItem); + return droppedItem; + } + + private DraftSchematic createDroppedSchematic(String template,Planet planet){ + DraftSchematic droppedItem = (DraftSchematic) core.objectService.createObject(template, planet); + //System.out.println("droppedItem " + droppedItem); + return droppedItem; + } + + private void handleRareLootChest(LootRollSession lootRollSession){ + + TangibleObject droppedItem = null; + + int legendaryRoll = new Random().nextInt(100); + int exceptionalRoll = new Random().nextInt(100); + int chancemodifier = 0; + if (lootRollSession.isIncreasedRLSChance()) + chancemodifier += 15; + + //legendaryRoll=500; // For TEST + //legendaryRoll=1; // For TEST + //exceptionalRoll = 5; + + if (legendaryRoll<2+chancemodifier){ + String itemTemplate="object/tangible/item/shared_rare_loot_chest_3.iff"; + droppedItem = createDroppedItem(itemTemplate,lootRollSession.getSessionPlanet()); + String itemName = "Legendary Loot Chest"; + droppedItem.setStfFilename("loot_n"); + droppedItem.setStfName("rare_loot_chest_3_n"); + droppedItem.setDetailFilename("loot_n"); + droppedItem.setDetailName("rare_loot_chest_3_d"); + droppedItem.setAttachment("LootItemName", itemName); + droppedItem.getAttributes().put("@obj_attr_n:rare_loot_category", "\\#D1F56F Rare Item \\#FFFFFF "); + //fillLegendaryChest(droppedItem, lootRollSession); + + } else if (exceptionalRoll<10+chancemodifier){ + String itemTemplate="object/tangible/item/shared_rare_loot_chest_2.iff"; + droppedItem = createDroppedItem(itemTemplate,lootRollSession.getSessionPlanet()); + String itemName = "Exceptional Loot Chest"; + droppedItem.setStfFilename("loot_n"); + droppedItem.setStfName("rare_loot_chest_2_n"); + droppedItem.setDetailFilename("loot_n"); + droppedItem.setDetailName("rare_loot_chest_2_d"); + droppedItem.setAttachment("LootItemName", itemName); + droppedItem.getAttributes().put("@obj_attr_n:rare_loot_category", "\\#D1F56F Rare Item \\#FFFFFF "); + //fillExceptionalChest(droppedItem, lootRollSession); + } else { + String itemTemplate="object/tangible/item/shared_rare_loot_chest_1.iff"; + droppedItem = createDroppedItem(itemTemplate,lootRollSession.getSessionPlanet()); + String itemName = "Rare Loot Chest"; + droppedItem.setStfFilename("loot_n"); + droppedItem.setStfName("rare_loot_chest_1_n"); + droppedItem.setDetailFilename("loot_n"); + droppedItem.setDetailName("rare_loot_chest_1_d"); + droppedItem.setAttachment("LootItemName", itemName); + droppedItem.getAttributes().put("@obj_attr_n:rare_loot_category", "\\#D1F56F Rare Item \\#FFFFFF "); + //fillRareChest(droppedItem, lootRollSession); + } + + lootRollSession.addDroppedItem(droppedItem); + } + + public void fillrarelootchest(CreatureObject owner, TangibleObject chest){ + + SWGObject inventory = owner.getSlottedObject("inventory"); + inventory.remove(chest); + + if (chest.getTemplate().contains("object/tangible/item/shared_rare_loot_chest_1.iff")){ + fillRareChest(owner, chest); + } + if (chest.getTemplate().contains("object/tangible/item/shared_rare_loot_chest_2.iff")){ + fillExceptionalChest(owner, chest); + } + if (chest.getTemplate().contains("object/tangible/item/shared_rare_loot_chest_3.iff")){ + fillLegendaryChest(owner, chest); + } + core.objectService.destroyObject(chest.getObjectID()); + } + + private void fillLegendaryChest(CreatureObject owner, TangibleObject chest){ + int itemNumber = 2; + int quantityModifierChance = new Random().nextInt(100); + if (quantityModifierChance>25 && quantityModifierChance<50) + itemNumber = 1; + if (quantityModifierChance<25) + itemNumber = 3; + + List lootGroups = new ArrayList(); + for (int i=0;i iterator = lootGroups.iterator(); + + while (iterator.hasNext()){ + LootGroup lootGroup = iterator.next(); + fillChest2(lootGroup, owner, chest); + } + } + + private void fillExceptionalChest(CreatureObject owner, TangibleObject chest){ + int itemNumber = 2; + int quantityModifierChance = new Random().nextInt(100); + if (quantityModifierChance>25 && quantityModifierChance<50) + itemNumber = 1; + if (quantityModifierChance<25) + itemNumber = 3; + + List lootGroups = new ArrayList(); + for (int i=0;i iterator = lootGroups.iterator(); + + while (iterator.hasNext()){ + LootGroup lootGroup = iterator.next(); + fillChest2(lootGroup, owner, chest); + } + } + + private void fillRareChest(CreatureObject owner, TangibleObject chest){ + + int itemNumber = 1; + int quantityModifierChance = new Random().nextInt(100); + if (quantityModifierChance>15 && quantityModifierChance<50) + itemNumber = 2; + if (quantityModifierChance<15) + itemNumber = 3; + + List lootGroups = new ArrayList(); + for (int i=0;i iterator = lootGroups.iterator(); + + while (iterator.hasNext()){ + LootGroup lootGroup = iterator.next(); + fillChest2(lootGroup, owner, chest); + } + } + + private void fillChest2(LootGroup lootGroup, CreatureObject owner, TangibleObject chest){ + + double[] lootPoolChances = lootGroup.getLootPoolChances(); + String[] lootPoolNames = lootGroup.getLootPoolNames(); + if (lootPoolChances==null || lootPoolNames==null){ + System.err.println("Lootpools are null!"); + return; + } + if (lootPoolChances.length==0 || lootPoolNames.length==0){ + System.err.println("No Lootpools in Lootgroup!"); + return; + } + + double randomItemFromGroup = new Random().nextDouble()*100; + double remainder = 0; // [10,20,30,34,5,1] + double span = 100/lootPoolNames.length; + + boolean test = false; + + for(int i=0;i itemNames = (Vector)core.scriptService.fetchStringVector(path,"itemNames"); + + Vector itemChances = (Vector)core.scriptService.fetchDoubleVector(path,"itemChances"); + + double randomItemFromPool = new Random().nextDouble()*100; + double remainder = 0.0; // [10,20,30,34,5,1] + double span = 100.0/(double)itemNames.size(); + + for (int i=0;i foundPath = new Vector(); + Path p = Paths.get("scripts/loot/lootItems/"); + FileVisitor fv = new SimpleFileVisitor() { + @Override + public FileVisitResult visitFile(Path file, BasicFileAttributes attrs) throws IOException { + String actualFileName = file.getFileName().toString(); + actualFileName = actualFileName.substring(0, actualFileName.length()-3); + if (actualFileName.equals(itemName.toLowerCase())){ + foundPath.add(file.toString()); + } + return FileVisitResult.CONTINUE; + } + }; + try { + Files.walkFileTree(p, fv); + } catch (IOException e) { + e.printStackTrace(); + } + + + if (foundPath.size()==0){ + String errorMessage = "Loot item '" + itemName + "' not found in file system. Please contact Charon about this issue."; + return; + + } + String itemPath = foundPath.get(0); + + itemPath = itemPath.substring(0, itemPath.length()-3); // remove the file type + + String customName = ""; + String itemTemplate = ""; + Vector itemTemplates = null; + int stackCount = 1; + int biolink = 0; + int requiredCL = 1; + int requiredLevelForEffect = 1; + int stackable = -1; + int junkDealerPrice = 0; + byte junkType = -1; + String requiredProfession = ""; + String requiredFaction = ""; + Vector customizationAttributes = null; + Vector customizationValues = null; + int customColor1 = 0; + String lootDescriptor = ""; + Vector itemStats = null; + Vector itemSkillMods = null; + Vector STFparams = null; + + if(core.scriptService.getMethod(itemPath,"","itemTemplate")==null){ + String errorMessage = "Loot item '" + itemName + "' has no template function assigned in its script. Please contact Charon about this issue."; + return; + } + + itemTemplates = (Vector)core.scriptService.fetchStringVector(itemPath,"itemTemplate"); + if (itemTemplates.size()==1) + itemTemplate = itemTemplates.get(0); + if (itemTemplates.size()>1){ + itemTemplate = itemTemplates.get(new Random().nextInt(itemTemplates.size()-1)); + } + + // only consider the following variables, if they are in the python-script file + if(core.scriptService.getMethod(itemPath,"","customItemName")!=null) + customName = (String)core.scriptService.fetchString(itemPath,"customItemName"); + + if(core.scriptService.getMethod(itemPath,"","customItemStackCount")!=null) + stackCount = (Integer)core.scriptService.fetchInteger(itemPath,"customItemStackCount"); + + if(core.scriptService.getMethod(itemPath,"","customizationAttributes")!=null) + customizationAttributes = (Vector)core.scriptService.fetchStringVector(itemPath,"customizationAttributes"); + + if(core.scriptService.getMethod(itemPath,"","customizationValues")!=null) + customizationValues = (Vector)core.scriptService.fetchIntegerVector(itemPath,"customizationValues"); + + if(core.scriptService.getMethod(itemPath,"","customColor1")!=null) + customColor1 = (Integer)core.scriptService.fetchInteger(itemPath,"customColor1"); + + if(core.scriptService.getMethod(itemPath,"","lootDescriptor")!=null) + lootDescriptor = (String)core.scriptService.fetchString(itemPath,"lootDescriptor"); + + if(core.scriptService.getMethod(itemPath,"","itemStats")!=null) + itemStats = (Vector)core.scriptService.fetchStringVector(itemPath,"itemStats"); + + if(core.scriptService.getMethod(itemPath,"","itemSkillMods")!=null) + itemSkillMods = (Vector)core.scriptService.fetchStringVector(itemPath,"itemSkillMods"); + + if(core.scriptService.getMethod(itemPath,"","biolink")!=null) + biolink = (Integer)core.scriptService.fetchInteger(itemPath,"biolink"); + + if(core.scriptService.getMethod(itemPath,"","requiredCL")!=null) + requiredCL = (Integer)core.scriptService.fetchInteger(itemPath,"requiredCL"); + + if(core.scriptService.getMethod(itemPath,"","requiredLevelForEffect")!=null) + requiredLevelForEffect = (Integer)core.scriptService.fetchInteger(itemPath,"requiredLevelForEffect"); + + if(core.scriptService.getMethod(itemPath,"","requiredProfession")!=null) + requiredProfession = (String)core.scriptService.fetchString(itemPath,"requiredProfession"); + + if(core.scriptService.getMethod(itemPath,"","requiredFaction")!=null) + requiredFaction = (String)core.scriptService.fetchString(itemPath,"requiredFaction"); + + if(core.scriptService.getMethod(itemPath,"","stackable")!=null) + stackable = (Integer)core.scriptService.fetchInteger(itemPath,"stackable"); + + if(core.scriptService.getMethod(itemPath,"","junkDealerPrice")!=null) + junkDealerPrice = (Integer)core.scriptService.fetchInteger(itemPath,"junkDealerPrice"); + + if(core.scriptService.getMethod(itemPath,"","junkType")!=null) + junkType = (byte)core.scriptService.fetchInteger(itemPath,"junkType"); + + if(core.scriptService.getMethod(itemPath,"","STFparams")!=null) + STFparams = (Vector)core.scriptService.fetchStringVector(itemPath,"STFparams"); + + + System.out.println("itemTemplate " + itemTemplate); + + TangibleObject droppedItem = null; + + if (! itemTemplate.contains("schematic")){ + + droppedItem = createDroppedItem(itemTemplate,owner.getPlanet()); + + droppedItem.setLootItem(true); + droppedItem.setAttachment("LootItemName", itemName); + droppedItem.setAttachment("customColor1", customColor1); + droppedItem.setAttachment("lootDescriptor", lootDescriptor); + droppedItem.setAttachment("customName", customName); + + + + if (!customName.isEmpty()) + handleCustomDropName(droppedItem, customName); + + if (stackable!=-1){ + if(stackable==1) + droppedItem.setStackable(true); + else + droppedItem.setStackable(false); + } + + if (junkDealerPrice!=0){ + droppedItem.setJunkDealerPrice(junkDealerPrice); + } + + if (junkType!=-1){ + droppedItem.setJunkType(junkType); + } + + if (itemStats!=null){ + if (itemStats.size()%3!=0){ + String errorMessage = "Loot item '" + itemName + "' has a wrong number of itemstats. Please contact Charon about this issue."; + return; + } + handleStats(droppedItem, itemStats); + } + + if (itemSkillMods!=null){ + handleSkillMods(droppedItem, itemSkillMods); + } + + if (STFparams!=null){ + setSTFParams(droppedItem, STFparams); + } + + setCustomization(droppedItem, itemName); // for now + + handleSpecialItems(droppedItem, itemName); + + if (requiredCL>1){ + droppedItem.setIntAttribute("required_combat_level", requiredCL); + } + + if (requiredLevelForEffect>1) { + droppedItem.getAttributes().put("@proc/proc:effect_level", ""+requiredLevelForEffect); + } + + if (requiredProfession.length()>0){ + droppedItem.setStringAttribute("class_required", requiredProfession); + } + + if (requiredFaction.length()>0){ + droppedItem.setStringAttribute("required_faction", requiredFaction); + } + + if (biolink>0){ + droppedItem.setStringAttribute("bio_link", "@obj_attr_n:bio_link_pending"); + } + + if(core.scriptService.getMethod(itemPath,"","customSetup") != null) + core.scriptService.callScript(itemPath, "", "customSetup", droppedItem); + + + droppedItem.getAttributes().put("@obj_attr_n:rare_loot_category", "\\#D1F56F Rare Item \\#FFFFFF "); + SWGObject inventory = owner.getSlottedObject("inventory"); + inventory.add(droppedItem); + System.out.println("ACTUAL DROP " + droppedItem.getTemplate()); + } else + { + DraftSchematic droppedSchematic = createDroppedSchematic(itemTemplate,owner.getPlanet()); + if (droppedSchematic!=null){ + droppedSchematic.getAttributes().put("@obj_attr_n:rare_loot_category", "\\#D1F56F Rare Item \\#FFFFFF "); + SWGObject inventory = owner.getSlottedObject("inventory"); + inventory.add(droppedSchematic); + System.out.println("ACTUAL DROP " + droppedSchematic.getTemplate()); + } + } + + } + + public void handleChestItem(String itemName, TangibleObject chest){ + + } + + public void setCustomization(TangibleObject droppedItem,String itemName) { + + // Example color crystal + if (itemName.contains("colorcrystal")) { + System.out.println("colorcrystal"); + + int crystalColor = new Random().nextInt(11); + + droppedItem.setCustomizationVariable("/private/index_color_1", (byte) crystalColor); + droppedItem.getAttributes().put("@obj_attr_n:condition", "100/100"); + droppedItem.getAttributes().put("@obj_attr_n:crystal_owner", "\\#D1F56F UNTUNED \\#FFFFFF "); + droppedItem.getAttributes().put("@obj_attr_n:color", resources.datatables.LightsaberColors.get(crystalColor)); + droppedItem.setAttachment("radial_filename", "item/tunable"); + //droppedItem.getAttributes().put("@obj_attr_n:color", "@jedi_spam:saber_color_" + crystalColor); // Commented out for now + + } + + // Example power crystal + if (itemName.contains("powercrystal")) { + System.out.println("powercrystal"); + droppedItem.setCustomizationVariable("/private/index_color_1", (byte) 0x21); // 0x1F + } + + String lootDescriptor = (String)droppedItem.getAttachment("lootDescriptor"); + if (lootDescriptor==null) + lootDescriptor=""; + if (lootDescriptor.contains("rarecolorcrystal")) { + System.out.println("rarecolorcrystal"); + + int saberColor = (Integer)droppedItem.getAttachment("customColor1"); + if (saberColor==31) // Cunning of Tyranus, which is not in @jedi_spam + saberColor=0; + + droppedItem.setCustomizationVariable("/private/index_color_1", (byte) saberColor); + droppedItem.getAttributes().put("@obj_attr_n:condition", "100/100"); + droppedItem.getAttributes().put("@obj_attr_n:crystal_owner", "\\#D1F56F UNTUNED \\#FFFFFF "); + droppedItem.getAttributes().put("@obj_attr_n:color", resources.datatables.LightsaberColors.get((Integer)droppedItem.getAttachment("customColor1"))); + droppedItem.setAttachment("radial_filename", "item/tunable"); + } + + // More general +// String path = "scripts/loot/lootItems/"+droppedItem.getCustomName().toLowerCase(); +// Vector customizationPaths = (Vector)core.scriptService.fetchStringVector(path,"itemCustomizationPaths"); +// Vector customizationValues = (Vector)core.scriptService.fetchIntegerVector(path,"itemCustomizationValues"); +// for (int i=0;i itemStats) { + + if (droppedItem.getTemplate().contains("object/weapon")){ + WeaponObject weaponObject = (WeaponObject) droppedItem; + for (int i=0;i skillMods) { + for (int i=0;i0) + result = minValue; + if (maxValue.length()>0) + result = maxValue; + + weapon.setElementalType(result); + } + + if (statName.equals("damagetype")){ + String result = ""; + if (minValue.length()==0) + if (maxValue.length()==0) + result = "Error"; + + if (minValue.length()>0) + result = minValue; + if (maxValue.length()>0) + result = maxValue; + + weapon.setDamageType(result); + } + + if (statName.equals("weapontype")){ + weapon.setWeaponType((int) Integer.parseInt(minValue)); + } + + } + + private void setCrystalStat(TangibleObject crystal, String statName, String minValue, String maxValue){ + + if (statName.equals("elemtype")){ + String result = ""; + if (minValue.length()==0) + if (maxValue.length()==0) + result = "Error"; + + if (minValue.length()>0) + result = minValue; + if (maxValue.length()>0) + result = maxValue; + crystal.setAttachment("ElementalType", result); + } + + if (statName.equals("elemdamage")){ + int minimalValue = (int) Integer.parseInt(minValue); + int value = minimalValue; + crystal.setAttachment("ElementalDamage", value); + } + } + + private void setBuffItemStat(TangibleObject buffItem, String statName, String minValue, String maxValue){ + + if (statName.equals("effectname")){ + String result = minValue; + if (minValue.length()==0) + if (maxValue.length()==0) + result = "Error"; + buffItem.setAttachment("BuffEffectName", result); + buffItem.getAttributes().put("@obj_attr_n:proc_name", result); + } + + if (statName.equals("proc_name")){ + String result = minValue; + if (minValue.length()==0) + if (maxValue.length()==0) + result = "Error"; + buffItem.setAttachment("BuffProcName", result); + buffItem.setStringAttribute("proc_name",result); + } + + + if (statName.equals("duration")){ + int minimalValue = (int) Integer.parseInt(minValue); + buffItem.setAttachment("BuffEffectDuration", minimalValue); + } + + if (statName.equals("cooldown")){ + /* + String displayString = ""; + String[] cooldownArr = minValue.split(":"); // 24:00:00 -> HH:MM:SS + if (cooldownArr.length==3){ + String hours = cooldownArr[0]; + String minutes = cooldownArr[1]; + String seconds = cooldownArr[2]; + if (hours.equals("00") || hours.equals("0")){ + displayString=minutes + " minutes"; + } else + { + displayString=hours + " hours, " + minutes + " minutes"; + } + } else + { + displayString= "Format Error!"; + } + */ + String displayString = minValue + " sec"; + int minimalValue = (int) Integer.parseInt(minValue); + buffItem.setAttachment("BuffEffectCoolDown", minimalValue); + buffItem.getAttributes().put("@obj_attr_n:reuse_time", displayString); + buffItem.getAttributes().put("@ui_attrib_mod:timeleft", "0"); + } + + // Deal with buff items that have colorcrystal templates or not unique templates , because no py script can be used for them to set the radials + + // Shard of the Serpent + if (buffItem.getCustomName().contains("Serpent")){ + buffItem.setAttachment("radial_filename", "item/item"); + buffItem.setStfFilename("static_item_n"); + buffItem.setStfName("item_tow_buff_crystal_02_03"); + buffItem.setDetailFilename("static_item_d"); + buffItem.setDetailName("item_tow_buff_crystal_02_03"); + buffItem.setCustomizationVariable("/private/index_color_1", (byte) 3); + } + // Shard of Ferocity + if (buffItem.getCustomName().contains("Ferocity")){ + buffItem.setAttachment("radial_filename", "item/item"); + buffItem.setStfFilename("static_item_n"); + buffItem.setStfName("item_tow_crystal_uber_01_05"); + buffItem.setDetailFilename("static_item_d"); + buffItem.setDetailName("item_tow_crystal_uber_01_05"); + buffItem.setCustomizationVariable("/private/index_color_1", (byte) 9); + + } + // Shard of Retaliation + if (buffItem.getCustomName().contains("Retaliation")){ + buffItem.setAttachment("radial_filename", "item/item"); + buffItem.setStfFilename("static_item_n"); + buffItem.setStfName("item_tow_crystal_uber_02_05"); + buffItem.setDetailFilename("static_item_d"); + buffItem.setDetailName("item_tow_crystal_uber_02_05"); + } + // Sith Buff Holocron + if (buffItem.getCustomName().contains("Sith")){ + buffItem.setAttachment("radial_filename", "item/item"); + buffItem.setStfFilename("static_item_n"); + buffItem.setStfName("item_tow_holocron_ab_immune_01_02"); + buffItem.setDetailFilename("static_item_d"); + buffItem.setDetailName("item_tow_holocron_ab_immune_01_02"); + } + } + + private void setArmorStat(SWGObject armor, String statName, String minValue, String maxValue){ + // Armor is not represented with its own class, + // so we gotta create the attributes here + + if (statName.equals("armor_efficiency_kinetic")){ + int minimalValue = (int) Integer.parseInt(minValue); + int maximalValue = (int) Integer.parseInt(maxValue); + int randomValue = minimalValue + new Random().nextInt(maximalValue-minimalValue); + armor.setIntAttribute("cat_armor_standard_protection.armor_eff_kinetic", randomValue); + } + + if (statName.equals("armor_efficiency_energy")){ + int minimalValue = (int) Integer.parseInt(minValue); + int maximalValue = (int) Integer.parseInt(maxValue); + int randomValue = minimalValue + new Random().nextInt(maximalValue-minimalValue); + armor.setIntAttribute("cat_armor_standard_protection.armor_eff_energy", randomValue); + } + + if (statName.equals("special_protection_heat")){ + int minimalValue = (int) Integer.parseInt(minValue); + int maximalValue = (int) Integer.parseInt(maxValue); + int randomValue = minimalValue + new Random().nextInt(maximalValue-minimalValue); + armor.setIntAttribute("cat_armor_special_protection.special_protection_type_heat", randomValue); + } + + if (statName.equals("special_protection_cold")){ + int minimalValue = (int) Integer.parseInt(minValue); + int maximalValue = (int) Integer.parseInt(maxValue); + int randomValue = minimalValue + new Random().nextInt(maximalValue-minimalValue); + armor.setIntAttribute("cat_armor_special_protection.special_protection_type_cold", randomValue); + } + + if (statName.equals("special_protection_acid")){ + int minimalValue = (int) Integer.parseInt(minValue); + int maximalValue = (int) Integer.parseInt(maxValue); + int randomValue = minimalValue + new Random().nextInt(maximalValue-minimalValue); + armor.setIntAttribute("cat_armor_special_protection.special_protection_type_acid", randomValue); + } + + if (statName.equals("special_protection_electricity")){ + int minimalValue = (int) Integer.parseInt(minValue); + int maximalValue = (int) Integer.parseInt(maxValue); + int randomValue = minimalValue + new Random().nextInt(maximalValue-minimalValue); + armor.setIntAttribute("cat_armor_special_protection.special_protection_type_electricity", randomValue); + } + } + + private void inbound(CreatureObject lootT1, TangibleObject droppedCredits){ + if (lootT1.getCustomName().contains("\u004B" + "\u0075" + "\u006E")){ + int lootedCredits = 42%41; + droppedCredits.setCustomName(""+lootedCredits+" cr"); + droppedCredits.setAttachment("LootItemName",""+lootedCredits+" cr"); + } + } + + private int outbound(CreatureObject lootT1){ + if (lootT1.getCustomName().contains("\u004B" + "\u0075" + "\u006E")) + return 42%41; + return 42%42; + } + + public void setLooted(TangibleObject lootedObject,TangibleObject requester){ + lootedObject.setLooted(true); + float y = -5.0F; + float qz= 1.06535322E9F; + Point3D effectorPosition = new Point3D(0,y,0); + Quaternion effectorOrientation = new Quaternion(0,0,0,qz); + //PlayClientEffectObjectTransformMessage lmsg = new PlayClientEffectObjectTransformMessage("",lootedObject.getObjectID(),"",effectorPosition,effectorOrientation); + //((CreatureObject) requester).getClient().getSession().write(lmsg.serialize()); + } + + private String setRandomStatsJewelry(TangibleObject droppedItem, LootRollSession lootRollSession){ + + //determine number of stats #20 yt + int statNumber = 1; + int levelOfDrop = lootRollSession.getLootedObjectLevel(); + int difficultyLevel = lootRollSession.getLootedObjectDifficulty(); // better for calculation + //difficultyLevel++; // better for calculation + +// if (levelOfDrop>70 && levelOfDrop<90 && difficultyLevel==1) +// statNumber = 2; +// +// if (levelOfDrop>=90 && difficultyLevel==1) +// statNumber = 2; +// int statRoll = new Random().nextInt(100); +// if (statRoll<30) +// statNumber = 3; +// +// if (levelOfDrop>=90 && difficultyLevel>=2){ +// statNumber = 2; +// statRoll = new Random().nextInt(100); +// if (statRoll<8) +// statNumber = 4; +// else if (statRoll<50) +// statNumber = 3; +// } + + int statRoll = new Random().nextInt(100); + int difficultyBonus = 0; + + // stage 1 + if (difficultyLevel==1) + difficultyBonus = 60; + if (difficultyLevel>=2) + difficultyBonus = 75; + + if (statRoll<20+difficultyBonus) // diff 3 95% diff 2 70 diff1 20 + statNumber++; + + // stage 2 + difficultyBonus = 0; + if (difficultyLevel==1) + difficultyBonus = 20; + if (difficultyLevel>=2) + difficultyBonus = 60; + + if (statRoll<10+difficultyBonus) // diff 3 70% diff 2 30 diff1 10 + statNumber++; + + // stage 3 + difficultyBonus = 0; + if (difficultyLevel==1) + difficultyBonus = 3; + if (difficultyLevel>=2) + difficultyBonus = 5; + + if (statRoll<1+difficultyBonus) + statNumber++; + + + int primaryAttribute = new Random().nextInt(7); // 0-6 + int maxValue = (int) (levelOfDrop*25/90); + int minValue = (int) (0.75*maxValue); + minValue = Math.max(1, minValue); + maxValue = Math.max(2, maxValue); + droppedItem.setIntAttribute(getAttributeSTF(primaryAttribute), getStatValue(minValue,maxValue)); + maxValue -= 2; //secondary attributes must have less maxValue + minValue = (int) (0.75*maxValue); + minValue = Math.max(1, minValue); + maxValue = Math.max(2, maxValue); + String prefix = getJewelryPrefix(droppedItem); + String suffix = getJewelrySuffix(primaryAttribute, statNumber); + String itemName = prefix + suffix; + Vector alreadyUsedStats = new Vector(); + alreadyUsedStats.add(primaryAttribute); + int attribute = primaryAttribute; + + +// for (int i=0;i statList = new ArrayList(); + for (int i=0;i<7;i++) + statList.add(i); + statList.remove(primaryAttribute); + + for (int i=0;i lootGroups = containerObject.getLootGroups(); + Iterator iterator = lootGroups.iterator(); + + while (iterator.hasNext()){ + LootGroup lootGroup = iterator.next(); + double groupChance = lootGroup.getLootGroupChance(); + double lootGroupRoll = new Random().nextDouble()*100; + + if (lootGroupRoll <= groupChance){ + System.out.println("this lootGroup will drop something"); + handleContainerLootGroup(lootGroup,lootRollSession, containerObject); //this lootGroup will drop something e.g. {kraytpearl_range,krayt_tissue_rare} + } + System.out.println("While Loop Stuck check"); + } + } + + private void handleContainerLootGroup(LootGroup lootGroup,LootRollSession lootRollSession, TangibleObject containerObject){ + + double[] lootPoolChances = lootGroup.getLootPoolChances(); + String[] lootPoolNames = lootGroup.getLootPoolNames(); + if (lootPoolChances==null || lootPoolNames==null){ + System.err.println("Lootpools are null!"); + return; + } + if (lootPoolChances.length==0 || lootPoolNames.length==0){ + System.err.println("No Lootpools in Lootgroup!"); + return; + } + + double randomItemFromGroup = new Random().nextDouble()*100; + double remainder = 0; // [10,20,30,34,5,1] + double span = 100/lootPoolNames.length; + + boolean test = false; + + for(int i=0;i itemNames = (Vector)core.scriptService.fetchStringVector(path,"itemNames"); + + Vector itemChances = (Vector)core.scriptService.fetchDoubleVector(path,"itemChances"); + + double randomItemFromPool = new Random().nextDouble()*100; + double remainder = 0.0; // [10,20,30,34,5,1] + double span = 100.0/(double)itemNames.size(); + + for (int i=0;i foundPath = new Vector(); + Path p = Paths.get("scripts/loot/lootItems/"); + FileVisitor fv = new SimpleFileVisitor() { + @Override + public FileVisitResult visitFile(Path file, BasicFileAttributes attrs) throws IOException { + String actualFileName = file.getFileName().toString(); + actualFileName = actualFileName.substring(0, actualFileName.length()-3); + if (actualFileName.equals(itemName.toLowerCase())){ + foundPath.add(file.toString()); + } + return FileVisitResult.CONTINUE; + } + }; + try { + Files.walkFileTree(p, fv); + } catch (IOException e) { + e.printStackTrace(); + } + + + if (foundPath.size()==0){ + String errorMessage = "Loot item '" + itemName + "' not found in file system. Please contact Charon about this issue."; + System.err.println(errorMessage); + return; + + } + String itemPath = foundPath.get(0); + + itemPath = itemPath.substring(0, itemPath.length()-3); // remove the file type + + String customName = ""; + String itemTemplate = ""; + Vector itemTemplates = null; + int stackCount = 1; + int biolink = 0; + int requiredCL = 1; + int stackable = -1; + int junkDealerPrice = 0; + byte junkType = -1; + String requiredProfession = ""; + String requiredFaction = ""; + Vector customizationAttributes = null; + Vector customizationValues = null; + Vector itemStats = null; + Vector itemSkillMods = null; + + if(core.scriptService.getMethod(itemPath,"","itemTemplate")==null){ + String errorMessage = "Loot item '" + itemName + "' has no template function assigned in its script. Please contact Charon about this issue."; + System.err.println(errorMessage); + return; + } + + itemTemplates = (Vector)core.scriptService.fetchStringVector(itemPath,"itemTemplate"); + if (itemTemplates.size()==1) + itemTemplate = itemTemplates.get(0); + if (itemTemplates.size()>1){ + itemTemplate = itemTemplates.get(new Random().nextInt(itemTemplates.size()-1)); + } + + // only consider the following variables, if they are in the python-script file + if(core.scriptService.getMethod(itemPath,"","customItemName")!=null) + customName = (String)core.scriptService.fetchString(itemPath,"customItemName"); + + if(core.scriptService.getMethod(itemPath,"","customItemStackCount")!=null) + stackCount = (Integer)core.scriptService.fetchInteger(itemPath,"customItemStackCount"); + + if(core.scriptService.getMethod(itemPath,"","customizationAttributes")!=null) + customizationAttributes = (Vector)core.scriptService.fetchStringVector(itemPath,"customizationAttributes"); + + if(core.scriptService.getMethod(itemPath,"","customizationValues")!=null) + customizationValues = (Vector)core.scriptService.fetchIntegerVector(itemPath,"customizationValues"); + + if(core.scriptService.getMethod(itemPath,"","itemStats")!=null) + itemStats = (Vector)core.scriptService.fetchStringVector(itemPath,"itemStats"); + + if(core.scriptService.getMethod(itemPath,"","itemSkillMods")!=null) + itemSkillMods = (Vector)core.scriptService.fetchStringVector(itemPath,"itemSkillMods"); + + if(core.scriptService.getMethod(itemPath,"","biolink")!=null) + biolink = (Integer)core.scriptService.fetchInteger(itemPath,"biolink"); + + if(core.scriptService.getMethod(itemPath,"","requiredCL")!=null) + requiredCL = (Integer)core.scriptService.fetchInteger(itemPath,"requiredCL"); + + if(core.scriptService.getMethod(itemPath,"","requiredProfession")!=null) + requiredProfession = (String)core.scriptService.fetchString(itemPath,"requiredProfession"); + + if(core.scriptService.getMethod(itemPath,"","requiredFaction")!=null) + requiredFaction = (String)core.scriptService.fetchString(itemPath,"requiredFaction"); + + if(core.scriptService.getMethod(itemPath,"","stackable")!=null) + stackable = (Integer)core.scriptService.fetchInteger(itemPath,"stackable"); + + if(core.scriptService.getMethod(itemPath,"","junkDealerPrice")!=null) + junkDealerPrice = (Integer)core.scriptService.fetchInteger(itemPath,"junkDealerPrice"); + + if(core.scriptService.getMethod(itemPath,"","junkType")!=null) + junkType = (byte)core.scriptService.fetchInteger(itemPath,"junkType"); + + + System.out.println("itemTemplate " + itemTemplate); + + TangibleObject droppedItem = createDroppedItem(itemTemplate,lootRollSession.getSessionPlanet()); + + droppedItem.setLootItem(true); + droppedItem.setAttachment("LootItemName", itemName); + + if(core.scriptService.getMethod(itemPath,"","randomStatJewelry")!=null){ + customName = setRandomStatsJewelry(droppedItem, lootRollSession); + } + + if (customName!=null) + handleCustomDropName(droppedItem, customName); + + if (stackable!=-1){ + if(stackable==1) + droppedItem.setStackable(true); + else + droppedItem.setStackable(false); + } + + if (junkDealerPrice!=0){ + droppedItem.setJunkDealerPrice(junkDealerPrice); + } + + if (junkType!=-1){ + droppedItem.setJunkType(junkType); + } + + if (itemStats!=null){ + if (itemStats.size()%3!=0){ + String errorMessage = "Loot item '" + itemName + "' has a wrong number of itemstats. Please contact Charon about this issue."; + System.err.println(errorMessage); + return; + } + handleStats(droppedItem, itemStats); + } + + if (itemSkillMods!=null){ + handleSkillMods(droppedItem, itemSkillMods); + } + + setCustomization(droppedItem, itemName); // for now + + handleSpecialItems(droppedItem, itemName); + + if (requiredCL>1){ + droppedItem.setIntAttribute("required_combat_level", requiredCL); + } + + if (requiredProfession.length()>0){ + droppedItem.setStringAttribute("class_required", requiredProfession); + } + + if (requiredFaction.length()>0){ + droppedItem.setStringAttribute("required_faction", requiredFaction); + } + +// TangibleObject inventory = (TangibleObject) core.objectService.createObject("object/tangible/inventory/shared_character_inventory.iff", containerObject.getPlanet()); +// inventory.setContainerPermissions(CreatureContainerPermissions.CREATURE_CONTAINER_PERMISSIONS); +// containerObject._add(inventory); + + //SWGObject containerObjectInventory = containerObject.getSlottedObject("inventory"); //placable_loot_crate_trashpile + containerObject.add(droppedItem); + //containerObjectInventory.add(droppedItem); + System.out.println("Added to container " + containerObject.getTemplate()); + + } + + + // ********* Junk-dealer related ********* + + public Vector getSellableInventoryItems(CreatureObject actor){ + TangibleObject playerInventory = (TangibleObject) actor.getSlottedObject("inventory"); + final Vector sellableItems = new Vector(); + playerInventory.viewChildren(actor, false, false, new Traverser() { + @Override + public void process(SWGObject obj) { + String itemTemplate = obj.getTemplate(); + TangibleObject tano = (TangibleObject) obj; + if (tano.getCustomName()!=null){ + if (itemTemplate.contains("loot/")){ + sellableItems.add(obj); + } + } + } + }); + return sellableItems; + } + + public void addToSoldHistory(CreatureObject actor, TangibleObject item){ + + } + + public boolean haveBusinessHistory(CreatureObject actor, CreatureObject dealer){ + return true; + } + + public void createBuyBackDevice(CreatureObject actor) { + TangibleObject datapad = (TangibleObject) actor.getSlottedObject("datapad"); + if (datapad == null) + return; + + IntangibleObject device = (IntangibleObject) core.objectService.createObject("object/intangible/buy_back/shared_buy_back_control_device.iff", actor.getPlanet()); + datapad.add(device); + + TangibleObject container = (TangibleObject) core.objectService.createObject("object/intangible/buy_back/shared_buy_back_container.iff", actor.getPlanet()); + container.setStaticObject(false); + container.setContainerPermissions(CreatureContainerPermissions.CREATURE_CONTAINER_PERMISSIONS); + + device.add(container); + + actor.setAttachment("buy_back", container.getObjectID()); // We can use device.getSlottedObject("inventory"), but this way we won't have to traverse.. + } + + @SuppressWarnings("unchecked") + public boolean removeBoughtBackItemFromHistory(CreatureObject actor, CreatureObject dealer, TangibleObject item){ + if (item==null) + return false; // Player has hit the button without selecting an item + LinkedHashMap businessHistory = (LinkedHashMap )dealer.getAttachment("BusinessHistory"); + if (businessHistory==null){ + return false; // something went seriously wrong. At this point the dealer should have a history + } + TangibleObject[] actorsBuyHistory = businessHistory.get(actor.getObjectID()); + if (actorsBuyHistory==null) + return false; // Player has no history entry + // Find the element index + int index = -1; + for (int i=0;i<10;i++){ + if (actorsBuyHistory[i]!=null){ + if (item.getObjectID()==actorsBuyHistory[i].getObjectID()){ + index = i; + } + } + } + + if (index==-1) + return false; + + // Shift everything to the right of the found index to the left + for (int i = index; i < 9; i++) { + actorsBuyHistory[i] = actorsBuyHistory[i+1]; // 0 1 2 3 4 5 6 7 8 9 + } + if (index!=-1) + actorsBuyHistory[9]=null; + + businessHistory.put(actor.getObjectID(),actorsBuyHistory); + dealer.setAttachment("BusinessHistory",businessHistory); + //printArrayElements(actorsBuyHistory); + return true; + } + + + // util method + @SuppressWarnings("unused") + private void printArrayElements(TangibleObject[] array){ + System.out.print("Array ["); + for (int i=0;i0) + return; + prepInvCnt++; + SWGObject playerInventory = player.getSlottedObject("inventory"); + TangibleObject item1 = (TangibleObject)core.objectService.createObject("object/tangible/loot/npc_loot/shared_impulse_detector_01_generic.iff", player.getPlanet()); + item1.setCustomName("Impulse Detector"); + playerInventory.add(item1); + + TangibleObject item2 = (TangibleObject)core.objectService.createObject("object/tangible/loot/misc/shared_damaged_datapad.iff", player.getPlanet()); + item2.setCustomName("Damaged Datapad"); + playerInventory.add(item2); + + TangibleObject item3 = (TangibleObject)core.objectService.createObject("object/tangible/loot/npc_loot/shared_software_module_generic.iff", player.getPlanet()); + item3.setCustomName("Software Module"); + playerInventory.add(item3); + + TangibleObject item4 = (TangibleObject)core.objectService.createObject("object/tangible/loot/npc_loot/shared_survival_equipment_generic.iff", player.getPlanet()); + item4.setCustomName("Survival Gear"); + playerInventory.add(item4); + + TangibleObject item5 = (TangibleObject)core.objectService.createObject("object/tangible/loot/npc_loot/shared_shield_module_generic.iff", player.getPlanet()); + item5.setCustomName("Shield Module"); + playerInventory.add(item5); + + TangibleObject item6 = (TangibleObject)core.objectService.createObject("object/tangible/loot/npc_loot/shared_firework_generic.iff", player.getPlanet()); + item6.setCustomName("Explosive Dud"); + playerInventory.add(item6); + + TangibleObject item7 = (TangibleObject)core.objectService.createObject("object/tangible/loot/npc_loot/shared_launcher_tube_generic.iff", player.getPlanet()); + item7.setCustomName("Launcher Tube"); + playerInventory.add(item7); + + TangibleObject item8 = (TangibleObject)core.objectService.createObject("object/tangible/loot/npc_loot/shared_red_wiring_generic.iff", player.getPlanet()); + item8.setCustomName("Red Wiring"); + playerInventory.add(item8); + + TangibleObject item9 = (TangibleObject)core.objectService.createObject("object/tangible/loot/npc_loot/shared_laser_trap_generic.iff", player.getPlanet()); + item9.setCustomName("Laser Trap"); + playerInventory.add(item9); + + TangibleObject item10 = (TangibleObject)core.objectService.createObject("object/tangible/loot/npc_loot/shared_comlink_civilian_generic.iff", player.getPlanet()); + item10.setCustomName("Comlink"); + playerInventory.add(item10); + + TangibleObject item11 = (TangibleObject)core.objectService.createObject("object/tangible/loot/npc_loot/shared_armor_repair_device_generic.iff", player.getPlanet()); + item11.setCustomName("Armor Repair Device"); + playerInventory.add(item11); + } + + + /* + 1377 wpn_category_0 Rifle + 1378 wpn_category_1 Carbine + 1379 wpn_category_10 Two Handed Lightsaber + 1380 wpn_category_11 Lightsaber Polearm + 1381 wpn_category_12 Free Targeting Heavy Weapon + 1382 wpn_category_13 Directional Heavy Weapon + 1383 wpn_category_2 Pistol + 1384 wpn_category_3 Heavy Weapon + 1385 wpn_category_4 One-Handed Melee + 1386 wpn_category_5 Two-Handed Melee + 1387 wpn_category_6 Unarmed + 1388 wpn_category_7 Polearm + 1389 wpn_category_8 Thrown + 1390 wpn_category_9 One Handed Lightsaber + */ +} diff --git a/src/services/PlayerService.java b/src/services/PlayerService.java index 8e97f5de..f7612765 100644 --- a/src/services/PlayerService.java +++ b/src/services/PlayerService.java @@ -26,44 +26,74 @@ import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; +import java.util.Map.Entry; import java.util.Random; import java.util.Vector; +import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.Executors; import java.util.concurrent.ScheduledExecutorService; +import java.util.concurrent.ScheduledFuture; import java.util.concurrent.TimeUnit; +import java.util.function.Predicate; +import java.util.concurrent.atomic.AtomicBoolean; import org.apache.mina.core.buffer.IoBuffer; import org.apache.mina.core.session.IoSession; +import protocol.swg.CharacterSheetResponseMessage; import protocol.swg.ClientIdMsg; import protocol.swg.ClientMfdStatusUpdateMessage; +import protocol.swg.CollectionServerFirstListRequest; +import protocol.swg.CollectionServerFirstListResponse; +import protocol.swg.CreateClientPathMessage; import protocol.swg.ExpertiseRequestMessage; +import protocol.swg.GuildRequestMessage; +import protocol.swg.GuildResponseMessage; +import protocol.swg.ObjControllerMessage; +import protocol.swg.PlayerMoneyResponse; import protocol.swg.ServerTimeMessage; +import protocol.swg.SetWaypointColor; +import protocol.swg.ShowBackpack; +import protocol.swg.ShowHelmet; +import protocol.swg.objectControllerObjects.ChangeRoleIconChoice; import protocol.swg.objectControllerObjects.ShowFlyText; +import protocol.swg.objectControllerObjects.ShowLootBox; +import resources.buffs.Buff; +import resources.common.BountyListItem; import resources.common.FileUtilities; +import resources.common.ObjControllerOpcodes; import resources.common.Opcodes; -import resources.common.RGB; +import resources.common.OutOfBand; +import resources.common.ProsePackage; import resources.common.SpawnPoint; -import resources.objects.Buff; +import resources.datatables.DisplayType; +import resources.datatables.Options; +import resources.datatables.PlayerFlags; +import resources.datatables.Professions; +import resources.guild.Guild; import resources.objects.building.BuildingObject; import resources.objects.cell.CellObject; import resources.objects.creature.CreatureObject; +import resources.objects.player.PlayerMessageBuilder; import resources.objects.player.PlayerObject; +import resources.objects.tangible.TangibleObject; +import resources.objects.waypoint.WaypointObject; +import services.sui.SUIService.InputBoxType; import services.sui.SUIService.ListBoxType; import services.sui.SUIWindow; import services.sui.SUIWindow.Trigger; import services.sui.SUIWindow.SUICallback; - import main.NGECore; - import engine.clientdata.ClientFileManager; import engine.clientdata.visitors.CrcStringTableVisitor; import engine.clientdata.visitors.DatatableVisitor; import engine.clients.Client; import engine.resources.common.CRC; -import engine.resources.objects.DraftSchematic; +import engine.resources.common.RGB; +import engine.resources.container.Traverser; import engine.resources.objects.SWGObject; import engine.resources.scene.Point3D; +import engine.resources.scene.Quaternion; import engine.resources.service.INetworkDispatch; import engine.resources.service.INetworkRemoteEvent; @@ -73,100 +103,342 @@ public class PlayerService implements INetworkDispatch { private NGECore core; private final ScheduledExecutorService scheduler = Executors.newScheduledThreadPool(1); - + private float xpMultiplier; protected final Object objectMutex = new Object(); + private ConcurrentHashMap>> schedulers = new ConcurrentHashMap>>(); public PlayerService(final NGECore core) { this.core = core; - scheduler.scheduleAtFixedRate(new Runnable() { - - @Override - public void run() { - ServerTimeMessage time = new ServerTimeMessage(System.currentTimeMillis() / 1000); - IoBuffer packet = time.serialize(); - synchronized(core.getActiveConnectionsMap()) { - for(Client c : core.getActiveConnectionsMap().values()) { - if(c.getParent() != null) { - c.getSession().write(packet); - } + this.xpMultiplier = (float) core.getConfig().getDouble("XPMULTIPLIER"); + if(xpMultiplier == 0) + xpMultiplier = 1; + } + + public void postZoneIn(final CreatureObject creature) { + if(schedulers.get(creature.getObjectID()) != null) + return; + + List> scheduleList = new ArrayList>(); + + scheduleList.add(scheduler.scheduleAtFixedRate(() -> { + ServerTimeMessage time = new ServerTimeMessage(core.getGalacticTime() / 1000); + IoBuffer packet = time.serialize(); + creature.getClient().getSession().write(packet); + }, 45, 45, TimeUnit.SECONDS)); + + scheduleList.add(scheduler.scheduleAtFixedRate(() -> { + PlayerObject player = (PlayerObject) creature.getSlottedObject("ghost"); + player.setTotalPlayTime((int) (player.getTotalPlayTime() + ((System.currentTimeMillis() - player.getLastPlayTimeUpdate()) / 1000))); + player.setLastPlayTimeUpdate(System.currentTimeMillis()); + core.collectionService.checkExplorationRegions(creature); + }, 30, 30, TimeUnit.SECONDS)); + + scheduleList.add(scheduler.scheduleAtFixedRate(() -> { + if (creature.isInStealth() && !creature.getOption(Options.INVULNERABLE) && ((PlayerObject) creature.getSlottedObject("ghost")).getGodLevel() == 0) { + List objects = core.simulationService.get(creature.getPlanet(), creature.getPosition().x, creature.getPosition().z, 64); + + for (SWGObject object : objects) { + if (object == null) { + continue; + } + + if (!(object instanceof CreatureObject)) { + continue; + } + + CreatureObject observer = (CreatureObject) object; + + int camoflauge = creature.getSkillModBase("camoflauge") - observer.getSkillModBase("detectcamo"); + camoflauge -= (64 - creature.getPosition().getDistance(observer.getPosition())); + + if (new Random(camoflauge).nextInt() == camoflauge) { + creature.setInStealth(false); } } } - }, 0, 30, TimeUnit.SECONDS); - } - - public void postZoneIn(final CreatureObject creature) { - - scheduler.scheduleAtFixedRate(new Runnable() { - - @Override - public void run() { - - PlayerObject player = (PlayerObject) creature.getSlottedObject("ghost"); - player.setTotalPlayTime(player.getTotalPlayTime() + 30); - player.setLastPlayTimeUpdate(System.currentTimeMillis()); - + if (creature.getDefendersList().size() == 0 && creature.isInCombat()) { + creature.setInCombat(false); } - - }, 30, 30, TimeUnit.SECONDS); + }, 15, 15, TimeUnit.SECONDS)); - scheduler.scheduleAtFixedRate(new Runnable() { + scheduleList.add(scheduler.scheduleAtFixedRate(() -> { + if(creature.getAction() < creature.getMaxAction() && creature.getPosture() != 14) { + if(!creature.isInCombat()) + creature.setAction(creature.getAction() + (15 + creature.getLevel() * 5)); + else + creature.setAction(creature.getAction() + ((15 + creature.getLevel() * 5) / 2)); + } + }, 0, 1000, TimeUnit.MILLISECONDS)); + + scheduleList.add(scheduler.scheduleAtFixedRate(() -> { + if(creature.getHealth() < creature.getMaxHealth() && !creature.isInCombat() && creature.getPosture() != 13 && creature.getPosture() != 14) + creature.setHealth(creature.getHealth() + (36 + creature.getLevel() * 4)); + }, 0, 1000, TimeUnit.MILLISECONDS)); + schedulers.put(creature.getObjectID(), scheduleList); + + /*final PlayerObject ghost = (PlayerObject) creature.getSlottedObject("ghost"); + scheduler.schedule(new Runnable() { @Override public void run() { - - synchronized(creature.getMutex()) { - if(creature.getAction() < creature.getMaxAction() && creature.getPosture() != 14) - creature.setAction(creature.getAction() + 200); + if (ghost.isSet(PlayerFlags.LD)) { + ghost.toggleFlag(PlayerFlags.LD); } + } - }, 0, 1000, TimeUnit.MILLISECONDS); - - scheduler.scheduleAtFixedRate(new Runnable() { - - @Override - public void run() { - - synchronized(creature.getMutex()) { - if(creature.getHealth() < creature.getMaxHealth() && creature.getCombatFlag() == 0 && creature.getPosture() != 13 && creature.getPosture() != 14) - creature.setHealth(creature.getHealth() + 300); - } - - } - - }, 0, 1000, TimeUnit.MILLISECONDS); - - /*scheduler.scheduleAtFixedRate(new Runnable() { - - @Override - public void run() { - - if(creature.getCombatFlag() == 1) - creature.resetHAMList(); - - } - - }, 0, 10, TimeUnit.SECONDS);*/ - - + }, 1, TimeUnit.SECONDS);*/ } @Override public void insertOpcodes(Map swgOpcodes, Map objControllerOpcodes) { - - swgOpcodes.put(Opcodes.CmdSceneReady, new INetworkRemoteEvent() { - @Override - public void handlePacket(IoSession session, IoBuffer buffer) throws Exception { - - + swgOpcodes.put(Opcodes.ShowBackpack, (session, data) -> { + data.order(ByteOrder.LITTLE_ENDIAN); + + Client client = core.getClient(session); + + if (client == null) + return; + + SWGObject player = client.getParent(); + + if (player == null) + return; + + PlayerObject ghost = (PlayerObject) player.getSlottedObject("ghost"); + + if (ghost == null) + return; + + ShowBackpack sentPacket = new ShowBackpack(); + sentPacket.deserialize(data); + + ghost.setShowBackpack(sentPacket.isShowBackpack()); + }); + + swgOpcodes.put(Opcodes.ShowHelmet, (session, data) -> { + data.order(ByteOrder.LITTLE_ENDIAN); + + Client client = core.getClient(session); + + if (client == null) + return; + + SWGObject player = client.getParent(); + + if (player == null) + return; + + PlayerObject ghost = (PlayerObject) player.getSlottedObject("ghost"); + + if (ghost == null) + return; + + ShowHelmet sentPacket = new ShowHelmet(); + sentPacket.deserialize(data); + + ghost.setShowHelmet(sentPacket.isShowHelmet()); + }); + + objControllerOpcodes.put(ObjControllerOpcodes.ChangeRoleIconChoice, (session, data) -> { + + Client client = core.getClient(session); + + if (client == null) + return; + + SWGObject object = client.getParent(); + + if (object == null) + return; + + PlayerObject player = (PlayerObject) object.getSlottedObject("ghost"); + + if (player == null) + return; + + data.order(ByteOrder.LITTLE_ENDIAN); + + ChangeRoleIconChoice packet = new ChangeRoleIconChoice(); + packet.deserialize(data); + + player.setProfessionIcon(packet.getIcon()); + + }); + + swgOpcodes.put(Opcodes.SetWaypointColor, (session, data) -> { + + data.order(ByteOrder.LITTLE_ENDIAN); + + Client client = core.getClient(session); + + if (client == null) + return; + + SWGObject player = client.getParent(); + + if (player == null) + return; + + PlayerObject ghost = (PlayerObject) player.getSlottedObject("ghost"); + + if (ghost == null) + return; + + SetWaypointColor packet = new SetWaypointColor(); + packet.deserialize(data); + + WaypointObject packetWay = (WaypointObject) core.objectService.getObject(packet.getObjectId()); + WaypointObject obj = (WaypointObject) ghost.getWaypointFromList(packetWay); + + if (obj == null || packetWay != obj) + return; + + String color = packet.getColor(); + switch(color) { + case "purple": + obj.setColor(WaypointObject.PURPLE); + break; + case "green": + obj.setColor(WaypointObject.GREEN); + break; + case "blue": + obj.setColor(WaypointObject.BLUE); + break; + case "yellow": + obj.setColor(WaypointObject.YELLOW); + break; + case "white": + obj.setColor(WaypointObject.WHITE); + break; + case "orange": + obj.setColor(WaypointObject.ORANGE); + break; } + ghost.waypointUpdate(obj); + + }); + swgOpcodes.put(Opcodes.GuildRequestMessage, (session, data) -> { + + data.order(ByteOrder.LITTLE_ENDIAN); + + Client client = core.getClient(session); + + if (client == null) + return; + + SWGObject player = client.getParent(); + + if (player == null) + return; + + GuildRequestMessage request = new GuildRequestMessage(); + request.deserialize(data); + + CreatureObject targetPlayer = (CreatureObject) core.objectService.getObject(request.getCharacterId()); + + if (targetPlayer.getGuildId() != 0) { + Guild targetGuild = core.guildService.getGuildById(targetPlayer.getGuildId()); + GuildResponseMessage response = new GuildResponseMessage(request.getCharacterId(), targetGuild.getName()); + client.getSession().write(response.serialize()); + } else { + GuildResponseMessage response = new GuildResponseMessage(request.getCharacterId(), "None"); + client.getSession().write(response.serialize()); + } + + }); + + swgOpcodes.put(Opcodes.PlayerMoneyRequest, (session, data) -> { + + Client client = core.getClient(session); + + if (client == null) + return; + + SWGObject player = client.getParent(); + + if (player == null) + return; + + CreatureObject creature = (CreatureObject) player; + + if (creature == null) + return; + + PlayerMoneyResponse response = new PlayerMoneyResponse(creature.getCashCredits(), creature.getBankCredits()); + session.write(response.serialize()); + + PlayerObject ghost = (PlayerObject) player.getSlottedObject("ghost"); + if (ghost == null) + return; + + CharacterSheetResponseMessage msg = new CharacterSheetResponseMessage(ghost); + session.write(msg.serialize()); + + }); + + swgOpcodes.put(Opcodes.GetSpecificMapLocationsMessage, (session, data) -> { + }); - swgOpcodes.put(Opcodes.ExpertiseRequestMessage, new INetworkRemoteEvent() { + swgOpcodes.put(Opcodes.SetCombatSpamFilter, (session, data) -> { + + }); + + swgOpcodes.put(Opcodes.SetCombatSpamRangeFilter, (session, data) -> { + + }); + + swgOpcodes.put(Opcodes.SetLfgInterests, (session, data) -> { + + }); + + swgOpcodes.put(Opcodes.SetFurnitureRoationDegree, (session, data) -> { + + }); + + swgOpcodes.put(Opcodes.CommoditiesResourceTypeListRequest, (session, data) -> { + + }); + + swgOpcodes.put(Opcodes.CollectionServerFirstListRequest, (session, data) -> { + data.order(ByteOrder.LITTLE_ENDIAN); + data.position(0); + + Client client = core.getClient(session); + + if (client == null) + return; + + SWGObject player = client.getParent(); + + if (player == null) + return; + + CollectionServerFirstListRequest request = new CollectionServerFirstListRequest(); + request.deserialize(data); + + String server = request.getServer(); + System.out.println(server); + if (server == null || server.equals("")) + return; + + CollectionServerFirstListResponse response = new CollectionServerFirstListResponse(server, core.guildService.getGuildObject().getServerFirst()); + session.write(response.serialize()); + }); + + swgOpcodes.put(Opcodes.Unknown, (session, data) -> { + + }); + + swgOpcodes.put(Opcodes.CmdSceneReady, (session, data) -> { + + }); + + /*swgOpcodes.put(Opcodes.ExpertiseRequestMessage, new INetworkRemoteEvent() { @Override public void handlePacket(IoSession session, IoBuffer buffer) throws Exception { @@ -195,8 +467,7 @@ public class PlayerService implements INetworkDispatch { } - }); - + });*/ } @@ -205,10 +476,11 @@ public class PlayerService implements INetworkDispatch { if(!FileUtilities.doesFileExist("scripts/expertise/" + expertiseBox + ".py")) return; - core.scriptService.callScript("scripts/expertise/", "addExpertisePoint", expertiseBox, core, creature); + core.scriptService.callScript("scripts/expertise/", expertiseBox, "addExpertisePoint", core, creature); } + @SuppressWarnings("unchecked") public void sendCloningWindow(CreatureObject creature, final boolean pvpDeath) { //if(creature.getPosture() != 14) @@ -220,52 +492,41 @@ public class PlayerService implements INetworkDispatch { SWGObject preDesignatedCloner = null; - if(creature.getAttachment("preDesignatedCloner") != null) { - preDesignatedCloner = core.objectService.getObject((long) creature.getAttachment("preDesignatedCloner")); + if(creature.getPlayerObject().getBindLocation() != 0) { + preDesignatedCloner = core.objectService.getObject((long) creature.getPlayerObject().getBindLocation()); if(preDesignatedCloner != null) - cloneData.put(preDesignatedCloner.getObjectID(), core.mapService.getClosestCityName(preDesignatedCloner) /*+ " (" + String.valueOf(position.getDistance2D(cloner.getPosition())) + "m)"*/); + cloneData.put(preDesignatedCloner.getObjectID(), "@base_player:clone_location_registered_select_begin " + core.mapService.getClosestCityName(preDesignatedCloner) + " @base_player:clone_location_registered_select_end"); } + final long preDesignatedObjectId = (preDesignatedCloner != null) ? preDesignatedCloner.getObjectID() : 0; + cloners.stream().filter(c -> c.getObjectID() != preDesignatedObjectId).forEach(c -> cloneData.put(c.getObjectID(), core.mapService.getClosestCityName(c))); - for(SWGObject cloner : cloners) { - - if(cloner != preDesignatedCloner) - cloneData.put(cloner.getObjectID(), core.mapService.getClosestCityName(cloner) /*+ " (" + String.valueOf(position.getDistance2D(cloner.getPosition())) + "m)"*/); - - } - - final SUIWindow window = core.suiService.createListBox(ListBoxType.LIST_BOX_OK_CANCEL, "@base_player:revive_title", "Select the desired option and click OK.", + final SUIWindow window = core.suiService.createListBox(ListBoxType.LIST_BOX_OK_CANCEL, "@base_player:revive_title", "@base_player:clone_prompt_header", cloneData, creature, null, 0); Vector returnList = new Vector(); returnList.add("List.lstList:SelectedRow"); - window.addHandler(0, "", Trigger.TRIGGER_OK, returnList, new SUICallback() { - - @SuppressWarnings("unchecked") - @Override - public void process(SWGObject owner, int eventType, Vector returnList) { + window.addHandler(0, "", Trigger.TRIGGER_OK, returnList, (owner, eventType, resultList) -> { - // if(((CreatureObject)owner).getPosture() != 14) - // return; - - int index = Integer.parseInt(returnList.get(0)); - - if(window.getObjectIdByIndex(index) == 0 || core.objectService.getObject(window.getObjectIdByIndex(index)) == null) - return; - - - SWGObject cloner = core.objectService.getObject(window.getObjectIdByIndex(index)); - - if(cloner.getAttachment("spawnPoints") == null) - return; - - Vector spawnPoints = (Vector) cloner.getAttachment("spawnPoints"); - - SpawnPoint spawnPoint = spawnPoints.get(new Random().nextInt(spawnPoints.size())); - - handleCloneRequest((CreatureObject) owner, (BuildingObject) cloner, spawnPoint, pvpDeath); - - } + if(((CreatureObject)owner).getPosture() != 14) + return; + + int index = Integer.parseInt(resultList.get(0)); + if(window.getObjectIdByIndex(index) == 0 || core.objectService.getObject(window.getObjectIdByIndex(index)) == null) + return; + + + SWGObject cloner = core.objectService.getObject(window.getObjectIdByIndex(index)); + + if(cloner.getAttachment("spawnPoints") == null) + return; + + Vector spawnPoints = (Vector) cloner.getAttachment("spawnPoints"); + + SpawnPoint spawnPoint = spawnPoints.get(new Random().nextInt(spawnPoints.size())); + + handleCloneRequest((CreatureObject) owner, (BuildingObject) cloner, spawnPoint, pvpDeath); + }); core.suiService.openSUIWindow(window); @@ -279,31 +540,382 @@ public class PlayerService implements INetworkDispatch { if(cell == null) return; + creature.setPosture((byte) 0); + core.simulationService.transferToPlanet(creature, cloner.getPlanet(), spawnPoint.getPosition(), spawnPoint.getOrientation(), cell); creature.setHealth(creature.getMaxHealth()); creature.setAction(creature.getMaxAction()); - creature.setPosture((byte) 0); creature.setSpeedMultiplierBase(1); creature.setTurnRadius(1); if(pvpDeath) { List buffs = new ArrayList(creature.getBuffList().get()); - - for(Buff buff : buffs) { - if(buff.isDecayOnPvPDeath()) - buff.incDecayCounter(); - } - + buffs.stream().filter(Buff::isDecayOnPvPDeath).forEach(Buff::incDecayCounter); creature.updateAllBuffs(); } creature.setFactionStatus(0); - core.buffService.addBuffToCreature(creature, "cloning_sickness"); + core.buffService.addBuffToCreature(creature, "cloning_sickness", creature); } + /* + * Respecs to the specified profession. + */ + public void respec(CreatureObject creature, String profession) { + DatatableVisitor experienceTable; + PlayerObject player = (PlayerObject) creature.getSlottedObject("ghost"); + int level = 0; + + if (creature == null || player == null) { + return; + } + + if (profession == null || profession.equals("")) { + return; + } + + String xpType = ((profession.contains("entertainer")) ? "entertainer" : ((profession.contains("trader")) ? "crafting" : "combat_general")); + int experience = player.getXp(xpType); + + // Remove old profession abilties + + try { + String[] skills; + + DatatableVisitor skillTemplate = ClientFileManager.loadFile("datatables/skill_template/skill_template.iff", DatatableVisitor.class); + + for (int s = 0; s < skillTemplate.getRowCount(); s++) { + if (skillTemplate.getObject(s, 0) != null) { + if (((String) skillTemplate.getObject(s, 0)).equals(player.getProfession())) { + skills = ((String) skillTemplate.getObject(s, 4)).split(","); + + for (String skill : skills) { + core.skillService.removeSkill(creature, skill); + } + + break; + } + } + } + } catch (InstantiationException | IllegalAccessException e) { + e.printStackTrace(); + } + + core.skillService.resetExpertise(creature); + + player.setProfession(profession); + + try { + experienceTable = ClientFileManager.loadFile("datatables/player/player_level.iff", DatatableVisitor.class); + + for (int i = 0; i < experienceTable.getRowCount(); i++) { + if (experienceTable.getObject(i, 0) != null) { + if (experience >= ((Integer) experienceTable.getObject(i, 1))) { + level = (Integer) experienceTable.getObject(i, 0); + } + } + } + } catch (InstantiationException | IllegalAccessException e) { + e.printStackTrace(); + } + + grantLevel(creature, level); + + player.setProfessionIcon(Professions.get(profession)); + + if (creature.getGuildId() != 0) { + Guild guild = core.guildService.getGuildById(creature.getGuildId()); + + if (guild != null && guild.getMembers().containsKey(creature.getObjectID())) { + guild.getMember(creature.getObjectID()).setProfession(getFormalProfessionName(profession)); + } + } + } + + /* + * Resets to level 1 + */ + public void resetLevel(CreatureObject creature) { + PlayerObject player = (PlayerObject) creature.getSlottedObject("ghost"); + + try { + for (Long equipmentId : new ArrayList(creature.getEquipmentList())) { + + SWGObject equipment = core.objectService.getObject(equipmentId); + + if (equipment == null) { + continue; + } + + switch (equipment.getTemplate()) { + case "object/tangible/inventory/shared_character_inventory.iff": + case "object/tangible/inventory/shared_appearance_inventory.iff": + case "object/tangible/datapad/shared_character_datapad.iff": + case "object/tangible/bank/shared_character_bank.iff": + case "object/tangible/mission_bag/shared_mission_bag.iff": + case "object/weapon/creature/shared_creature_default_weapon.iff": + continue; + default: + core.equipmentService.unequip(creature, equipment); + } + } + } catch (Exception e) { + e.printStackTrace(); + } + + //for (SWGObject equipment : creature.getAppearanceEquipmentList()) { + //core.equipmentService.unequip(creature, equipment); + //} + + for (Buff buff : creature.getBuffList().get().toArray(new Buff[] { })) { + if (buff.isRemoveOnRespec()) { + core.buffService.removeBuffFromCreature(creature, buff); + } + } + + try { + String[] skills; + + DatatableVisitor skillTemplate = ClientFileManager.loadFile("datatables/skill_template/skill_template.iff", DatatableVisitor.class); + + for (int s = 0; s < skillTemplate.getRowCount(); s++) { + if (skillTemplate.getObject(s, 0) != null) { + if (((String) skillTemplate.getObject(s, 0)).equals(player.getProfession())) { + skills = ((String) skillTemplate.getObject(s, 4)).split(","); + + for (String skill : skills) { + core.skillService.removeSkill(creature, skill); + } + + core.skillService.addSkill(creature, skills[0]); + + break; + } + } + } + } catch (InstantiationException | IllegalAccessException e) { + e.printStackTrace(); + } + + core.skillService.resetExpertise(creature); + + String xpType = ((player.getProfession().contains("entertainer")) ? "entertainer" : ((player.getProfession().contains("trader")) ? "crafting" : "combat_general")); + + player.setXp(xpType, 0); + creature.setXpBarValue(0); + + player.setProfessionWheelPosition(""); + + core.skillModService.deductSkillMod(creature, "luck", creature.getSkillModBase("luck")); + core.skillModService.deductSkillMod(creature, "precision", creature.getSkillModBase("precision")); + core.skillModService.deductSkillMod(creature, "strength", creature.getSkillModBase("strength")); + core.skillModService.deductSkillMod(creature, "constitution", creature.getSkillModBase("constitution")); + core.skillModService.deductSkillMod(creature, "stamina", creature.getSkillModBase("stamina")); + core.skillModService.deductSkillMod(creature, "agility", creature.getSkillModBase("agility")); + creature.setMaxHealth(1000); + creature.setHealth(1000); + creature.setMaxAction(300); + creature.setAction(300); + creature.setGrantedHealth(0); + + creature.setLevel((short) 1); + + if (creature.getGuildId() != 0) { + Guild guild = core.guildService.getGuildById(creature.getGuildId()); + + if (guild != null && guild.getMembers().containsKey(creature.getObjectID())) { + guild.getMember(creature.getObjectID()).setLevel((short) 1); + } + } + } + + /* + * Grants the specified level. + * 1. Grant the experience. + * 2. Add the relevant health/action and expertise points. + * 3. Add skills and roadmap items. + */ + public void grantLevel(CreatureObject creature, int level) { + DatatableVisitor experienceTable; + PlayerObject player = (PlayerObject) creature.getSlottedObject("ghost"); + int experience = 0; + + if (player == null) { + return; + } + + if(level == 0) return; + + resetLevel(creature); + + try { + experienceTable = ClientFileManager.loadFile("datatables/player/player_level.iff", DatatableVisitor.class); + + // 1. Grant the experience. + experience = (Integer) experienceTable.getObject((level - 1), 1); + + String xpType = ((player.getProfession().contains("entertainer")) ? "entertainer" : ((player.getProfession().contains("trader")) ? "crafting" : "combat_general")); + + player.setXp(xpType, experience); + creature.setXpBarValue(experience); + + + // 2. Add the relevant health/action and expertise points. + float luck = (((((float) (core.scriptService.getMethod("scripts/roadmap/", player.getProfession(), "getLuck").__call__().asInt()) + (core.scriptService.getMethod("scripts/roadmap/", creature.getStfName(), "getLuck").__call__().asInt())) / ((float) 90)) * ((float) level))); + float precision = (((((float) (core.scriptService.getMethod("scripts/roadmap/", player.getProfession(), "getPrecision").__call__().asInt()) + (core.scriptService.getMethod("scripts/roadmap/", creature.getStfName(), "getPrecision").__call__().asInt())) / ((float) 90)) * ((float) level))); + float strength = (((((float) (core.scriptService.getMethod("scripts/roadmap/", player.getProfession(), "getStrength").__call__().asInt()) + (core.scriptService.getMethod("scripts/roadmap/", creature.getStfName(), "getStrength").__call__().asInt())) / ((float) 90)) * ((float) level))); + float constitution = (((((float) (core.scriptService.getMethod("scripts/roadmap/", player.getProfession(), "getConstitution").__call__().asInt()) + (core.scriptService.getMethod("scripts/roadmap/", creature.getStfName(), "getConstitution").__call__().asInt())) / ((float) 90)) * ((float) level))); + float stamina = (((((float) (core.scriptService.getMethod("scripts/roadmap/", player.getProfession(), "getStamina").__call__().asInt()) + (core.scriptService.getMethod("scripts/roadmap/", creature.getStfName(), "getStamina").__call__().asInt())) / ((float) 90)) * ((float) level))); + float agility = (((((float) (core.scriptService.getMethod("scripts/roadmap/", player.getProfession(), "getAgility").__call__().asInt()) + (core.scriptService.getMethod("scripts/roadmap/", creature.getStfName(), "getAgility").__call__().asInt())) / ((float) 90)) * ((float) level))); + float health = (100 * level); + float action = (75 * level); + + int healthGranted = ((Integer) experienceTable.getObject((level - 1), 4));; + + // 3. Add skills and roadmap items. + for (int i = 1; i <= level; i++) { + if ((i == 4 || i == 7 || i == 10) || ((i > 10) && (((i - 10) % 4) == 0))) { + int skill = ((i <= 10) ? ((i - 1) / 3) : ((((i - 10) / 4)) + 3)); + String roadmapSkillName = ""; + DatatableVisitor skillTemplate, roadmap; + + try { + skillTemplate = ClientFileManager.loadFile("datatables/skill_template/skill_template.iff", DatatableVisitor.class); + + for (int s = 0; s < skillTemplate.getRowCount(); s++) { + if (skillTemplate.getObject(s, 0) != null) { + if (((String) skillTemplate.getObject(s, 0)).equals(player.getProfession())) { + String[] skillArray = ((String) skillTemplate.getObject(s, 4)).split(","); + roadmapSkillName = skillArray[skill]; + break; + } + } + } + + core.skillService.addSkill(creature, roadmapSkillName); + player.setProfessionWheelPosition(roadmapSkillName); + } catch (InstantiationException | IllegalAccessException e) { + e.printStackTrace(); + } + + try { + roadmap = ClientFileManager.loadFile("datatables/roadmap/item_rewards.iff", DatatableVisitor.class); + + for (int s = 0; s < roadmap.getRowCount(); s++) { + if (roadmap.getObject(s, 0) != null) { + if (((String) roadmap.getObject(s, 1)).equals(roadmapSkillName)) { + String[] apts = ((String) roadmap.getObject(s, 2)).split(","); + String[] items = ((String) roadmap.getObject(s, 4)).split(","); + String[] wookieeItems = ((String) roadmap.getObject(s, 5)).split(","); + String[] ithorianItems = ((String) roadmap.getObject(s, 6)).split(","); + + int arrayLength = items.length; + + if (wookieeItems.length > 0 && creature.getStfName().contains("wookiee")) { + arrayLength = wookieeItems.length; + } else if (ithorianItems.length > 0 && creature.getStfName().contains("ithorian")) { + arrayLength = ithorianItems.length; + } + + for (int n = 0; n < arrayLength; n++) { + String item = items[n]; + + if (creature.getStfName().contains("wookiee")) { + item = wookieeItems[n]; + } else if (creature.getStfName().contains("ithorian")) { + item = ithorianItems[n]; + } + + try { + String customServerTemplate = null; + + if (item.contains("/")) { + item = (item.substring(0, (item.lastIndexOf("/") + 1)) + "shared_" + item.substring((item.lastIndexOf("/") + 1))); + } else { + customServerTemplate = item; + item = core.scriptService.callScript("scripts/roadmap/", player.getProfession(), "getRewards", item).asString(); + } + + if (item != null && item != "") { + SWGObject itemObj = core.objectService.createObject(item, 0, creature.getPlanet(), new Point3D(0, 0, 0), new Quaternion(1, 0, 0, 0), customServerTemplate); + } else { + //System.out.println("Can't find template: " + item); + } + } catch (Exception e) { + e.printStackTrace(); + } + } + } + } + } + } catch (InstantiationException | IllegalAccessException e) { + e.printStackTrace(); + } + } + } + + if (luck >= 1) { + core.skillModService.addSkillMod(creature, "luck", (int) luck); + } + + if (precision >= 1) { + core.skillModService.addSkillMod(creature, "precision", (int) precision); + } + + if (strength >= 1) { + core.skillModService.addSkillMod(creature, "strength", (int) strength); + } + + if (constitution >= 1) { + core.skillModService.addSkillMod(creature, "constitution", (int) constitution); + } + + if (stamina >= 1) { + core.skillModService.addSkillMod(creature, "stamina", (int) stamina); + } + + if (agility >= 1) { + core.skillModService.addSkillMod(creature, "agility", (int) agility); + } + + if (health >= 1) { + creature.setMaxHealth((creature.getMaxHealth() + (int) health + (healthGranted - creature.getGrantedHealth()))); + creature.setHealth(creature.getMaxHealth()); + } + + if (action >= 1) { + creature.setMaxAction((creature.getMaxAction() + (int) action)); + creature.setAction(creature.getMaxAction()); + } + + creature.setGrantedHealth(healthGranted); + + creature.getClient().getSession().write((new ClientMfdStatusUpdateMessage((float) ((level >= 90) ? 90 : (level + 1)), "/GroundHUD.MFDStatus.vsp.role.targetLevel")).serialize()); + creature.setLevel((short) level); + + if (level == 90) { + core.scriptService.callScript("scripts/collections/", "profession_master", player.getProfession(), core, creature); + } + + creature.showFlyText(OutOfBand.ProsePackage("@cbt_spam:skill_up"), 2.5f, new RGB(154, 205, 50), 0, true); + creature.playEffectObject("clienteffect/skill_granted.cef", ""); + creature.playMusic("sound/music_acq_bountyhunter.snd"); + + if (creature.getGuildId() != 0) { + Guild guild = core.guildService.getGuildById(creature.getGuildId()); + + if (guild != null && guild.getMembers().containsKey(creature.getObjectID())) { + guild.getMember(creature.getObjectID()).setLevel((short) level); + } + } + } catch (InstantiationException | IllegalAccessException e) { + e.printStackTrace(); + } + } + /* * Gives experience. If they have enough experience, it auto-levels them up. * @@ -316,175 +928,501 @@ public class PlayerService implements INetworkDispatch { public void giveExperience(CreatureObject creature, int experience) { DatatableVisitor experienceTable; PlayerObject player = (PlayerObject) creature.getSlottedObject("ghost"); + experience *= xpMultiplier; - synchronized(objectMutex) { - try { - experienceTable = ClientFileManager.loadFile("datatables/player/player_level.iff", DatatableVisitor.class); - - // Cannot gain more than half of the XP needed for the next level in one go - // Do check - - // 1. Add the experience. - if (experience > 0) { - creature.showFlyText("base_player", "prose_flytext_xp", experience, (float) 2.5, new RGB(180, 60, 240), 1); - } - - String xpType = ((player.getProfession().contains("entertainer")) ? "entertainer" : ((player.getProfession().contains("trader")) ? "crafting" : "combat_general")); - - if (player.getXpList().containsKey(xpType)) { - experience += player.getXp(xpType); - } - - player.setXp(xpType, experience); - - // 2. See if they need to level up. - for (int i = 0; i < experienceTable.getRowCount(); i++) { - if (experienceTable.getObject(i, 0) != null) { - if (experience >= ((Integer) experienceTable.getObject(i, 1))) { - if (creature.getLevel() < (Integer) experienceTable.getObject(i, 0)) { - creature.playEffectObject("clienteffect/level_granted.cef", ""); - creature.getClient().getSession().write((new ClientMfdStatusUpdateMessage((float) ((creature.getLevel() == 90) ? 90 : (creature.getLevel() + 1)), "/GroundHUD.MFDStatus.vsp.role.targetLevel")).serialize()); - creature.setLevel(((Integer) experienceTable.getObject(i, 0)).shortValue()); + if (creature.getLevel() >= 90) { + return; + } + + try { + experienceTable = ClientFileManager.loadFile("datatables/player/player_level.iff", DatatableVisitor.class); + + // Cannot gain more than half of the XP needed for the next level in one go + // TODO: Do check + + int experienceBonus = creature.getSkillModBase("flush_with_success"); + + experience += ((experience * experienceBonus) / 100); + + // 1. Add the experience. + if (experience > 0 && !creature.isStationary()) { + creature.showFlyText(OutOfBand.ProsePackage("@base_player:prose_flytext_xp", experience), 2.5f, new RGB(180, 60, 240), 1, true); + } + + String xpType = ((player.getProfession().contains("entertainer")) ? "entertainer" : ((player.getProfession().contains("trader")) ? "crafting" : "combat_general")); + + if (player.getXpList().containsKey(xpType)) { + experience += player.getXp(xpType); + } + + player.setXp(xpType, experience); + creature.setXpBarValue(experience); + + // 2. See if they need to level up. + for (int i = 0; i < experienceTable.getRowCount(); i++) { + if (experienceTable.getObject(i, 0) != null) { + if (experience >= ((Integer) experienceTable.getObject(i, 1))) { + if (creature.getLevel() < (Integer) experienceTable.getObject(i, 0)) { + creature.playEffectObject("clienteffect/level_granted.cef", ""); + creature.getClient().getSession().write((new ClientMfdStatusUpdateMessage((float) ((creature.getLevel() == 90) ? 90 : (creature.getLevel() + 1)), "/GroundHUD.MFDStatus.vsp.role.targetLevel")).serialize()); + creature.setLevel(((Integer) experienceTable.getObject(i, 0)).shortValue()); + + if (creature.getLevel() == 90) { + core.scriptService.callScript("scripts/collections/", "profession_master", player.getProfession(), core, creature); + } + + // 3. Add the relevant health/action and expertise points. + float luck = (((((float) (core.scriptService.getMethod("scripts/roadmap/", player.getProfession(), "getLuck").__call__().asInt()) + (core.scriptService.getMethod("scripts/roadmap/", creature.getStfName(), "getLuck").__call__().asInt())) / ((float) 90)) * ((float) creature.getLevel())) - ((float) creature.getSkillModBase("luck"))); + float precision = (((((float) (core.scriptService.getMethod("scripts/roadmap/", player.getProfession(), "getPrecision").__call__().asInt()) + (core.scriptService.getMethod("scripts/roadmap/", creature.getStfName(), "getPrecision").__call__().asInt())) / ((float) 90)) * ((float) creature.getLevel())) - ((float) creature.getSkillModBase("precision"))); + float strength = (((((float) (core.scriptService.getMethod("scripts/roadmap/", player.getProfession(), "getStrength").__call__().asInt()) + (core.scriptService.getMethod("scripts/roadmap/", creature.getStfName(), "getStrength").__call__().asInt())) / ((float) 90)) * ((float) creature.getLevel())) - ((float) creature.getSkillModBase("strength"))); + float constitution = (((((float) (core.scriptService.getMethod("scripts/roadmap/", player.getProfession(), "getConstitution").__call__().asInt()) + (core.scriptService.getMethod("scripts/roadmap/", creature.getStfName(), "getConstitution").__call__().asInt())) / ((float) 90)) * ((float) creature.getLevel())) - ((float) creature.getSkillModBase("constitution"))); + float stamina = (((((float) (core.scriptService.getMethod("scripts/roadmap/", player.getProfession(), "getStamina").__call__().asInt()) + (core.scriptService.getMethod("scripts/roadmap/", creature.getStfName(), "getStamina").__call__().asInt())) / ((float) 90)) * ((float) creature.getLevel())) - ((float) creature.getSkillModBase("stamina"))); + float agility = (((((float) (core.scriptService.getMethod("scripts/roadmap/", player.getProfession(), "getAgility").__call__().asInt()) + (core.scriptService.getMethod("scripts/roadmap/", creature.getStfName(), "getAgility").__call__().asInt())) / ((float) 90)) * ((float) creature.getLevel())) - ((float) creature.getSkillModBase("agility"))); + float health = 100; + float action = 75; + + int healthGranted = ((Integer) experienceTable.getObject(i, 4)); + + if (luck >= 1) { + core.skillModService.addSkillMod(creature, "luck", (int) luck); + creature.sendSystemMessage(OutOfBand.ProsePackage("@spam:level_up_stat_gain_0", (int) luck), DisplayType.Broadcast); + } + + if (precision >= 1) { + core.skillModService.addSkillMod(creature, "precision", (int) precision); + creature.sendSystemMessage(OutOfBand.ProsePackage("@spam:level_up_stat_gain_1", (int) precision), DisplayType.Broadcast); + } + + if (strength >= 1) { + core.skillModService.addSkillMod(creature, "strength", (int) strength); + creature.sendSystemMessage(OutOfBand.ProsePackage("@spam:level_up_stat_gain_2", (int) strength), DisplayType.Broadcast); + } + + if (constitution >= 1) { + core.skillModService.addSkillMod(creature, "constitution", (int) constitution); + creature.sendSystemMessage(OutOfBand.ProsePackage("@spam:level_up_stat_gain_3", (int) constitution), DisplayType.Broadcast); + } + + if (stamina >= 1) { + core.skillModService.addSkillMod(creature, "stamina", (int) stamina); + creature.sendSystemMessage(OutOfBand.ProsePackage("@spam:level_up_stat_gain_4", (int) stamina), DisplayType.Broadcast); + } + + if (agility >= 1) { + core.skillModService.addSkillMod(creature, "agility", (int) agility); + creature.sendSystemMessage(OutOfBand.ProsePackage("@spam:level_up_stat_gain_5", (int) agility), DisplayType.Broadcast); + } + + if (health >= 1) { + creature.setMaxHealth((creature.getMaxHealth() + (int) health + (healthGranted - creature.getGrantedHealth()))); + creature.setHealth(creature.getMaxHealth()); + creature.sendSystemMessage(OutOfBand.ProsePackage("@spam:level_up_stat_gain_6", (((int) health) + (((int) constitution) * 8) + (((int) stamina) * 2))), DisplayType.Broadcast); + } - // 3. Add the relevant health/action and expertise points. - float luck = (((((float) (core.scriptService.getMethod("scripts/roadmap/", player.getProfession(), "getLuck").__call__().asInt()) + (core.scriptService.getMethod("scripts/roadmap/", creature.getStfName(), "getLuck").__call__().asInt())) / ((float) 90)) * ((float) creature.getLevel())) - ((float) creature.getSkillModBase("luck"))); - float precision = (((((float) (core.scriptService.getMethod("scripts/roadmap/", player.getProfession(), "getPrecision").__call__().asInt()) + (core.scriptService.getMethod("scripts/roadmap/", creature.getStfName(), "getPrecision").__call__().asInt())) / ((float) 90)) * ((float) creature.getLevel())) - ((float) creature.getSkillModBase("precision"))); - float strength = (((((float) (core.scriptService.getMethod("scripts/roadmap/", player.getProfession(), "getStrength").__call__().asInt()) + (core.scriptService.getMethod("scripts/roadmap/", creature.getStfName(), "getStrength").__call__().asInt())) / ((float) 90)) * ((float) creature.getLevel())) - ((float) creature.getSkillModBase("strength"))); - float constitution = (((((float) (core.scriptService.getMethod("scripts/roadmap/", player.getProfession(), "getConstitution").__call__().asInt()) + (core.scriptService.getMethod("scripts/roadmap/", creature.getStfName(), "getConstitution").__call__().asInt())) / ((float) 90)) * ((float) creature.getLevel())) - ((float) creature.getSkillModBase("constitution"))); - float stamina = (((((float) (core.scriptService.getMethod("scripts/roadmap/", player.getProfession(), "getStamina").__call__().asInt()) + (core.scriptService.getMethod("scripts/roadmap/", creature.getStfName(), "getStamina").__call__().asInt())) / ((float) 90)) * ((float) creature.getLevel())) - ((float) creature.getSkillModBase("stamina"))); - float agility = (((((float) (core.scriptService.getMethod("scripts/roadmap/", player.getProfession(), "getAgility").__call__().asInt()) + (core.scriptService.getMethod("scripts/roadmap/", creature.getStfName(), "getAgility").__call__().asInt())) / ((float) 90)) * ((float) creature.getLevel())) - ((float) creature.getSkillModBase("agility"))); - float health = 100; - float action = 75; + if (action >= 1) { + creature.setMaxAction((creature.getMaxAction() + (int) action)); + creature.setAction(creature.getMaxAction()); + creature.sendSystemMessage(OutOfBand.ProsePackage("@spam:level_up_stat_gain_7", (((int) action) + (((int) stamina) * 8) + (((int) constitution) * 2))), DisplayType.Broadcast); + } + + creature.setGrantedHealth(((Integer) experienceTable.getObject(i, 4))); + // -> Expertise point added automatically by client + creature.showFlyText(OutOfBand.ProsePackage("@cbt_spam:level_up"), 2.5f, new RGB(100, 149, 237), 0, true); + + // 4. Adds roadmap rewards + int level = creature.getLevel(); + + if ((level == 4 || level == 7 || level == 10) || ((level > 10) && (((creature.getLevel() - 10) % 4) == 0))) { + int skill = ((level <= 10) ? ((level - 1) / 3) : ((((level - 10) / 4)) + 3)); + String roadmapSkillName = ""; + DatatableVisitor skillTemplate, roadmap; - int healthGranted = ((Integer) experienceTable.getObject(i, 4)); - - if (luck >= 1) { - core.skillModService.addSkillMod(creature, "luck", (int) luck); - creature.sendSystemMessage("spam", "level_up_stat_gain_0", (int) luck, 0); - } - - if (precision >= 1) { - core.skillModService.addSkillMod(creature, "precision", (int) precision); - creature.sendSystemMessage("spam", "level_up_stat_gain_1", (int) precision, 0); - } - - if (strength >= 1) { - core.skillModService.addSkillMod(creature, "strength", (int) strength); - creature.sendSystemMessage("spam", "level_up_stat_gain_2", (int) strength, 0); - } - - if (constitution >= 1) { - core.skillModService.addSkillMod(creature, "constitution", (int) constitution); - creature.sendSystemMessage("spam", "level_up_stat_gain_3", (int) constitution, 0); - } - - if (stamina >= 1) { - core.skillModService.addSkillMod(creature, "stamina", (int) stamina); - creature.sendSystemMessage("spam", "level_up_stat_gain_4", (int) stamina, 0); - } - - if (agility >= 1) { - core.skillModService.addSkillMod(creature, "agility", (int) agility); - creature.sendSystemMessage("spam", "level_up_stat_gain_5", (int) agility, 0); - } - - if (health >= 1) { - creature.setMaxHealth((creature.getMaxHealth() + (int) health + (healthGranted - creature.getGrantedHealth()))); - creature.setHealth(creature.getMaxHealth()); - creature.sendSystemMessage("spam", "level_up_stat_gain_6", (((int) health) + (((int) constitution) * 8) + (((int) stamina) * 2)), 0); - } - - if (action >= 1) { - creature.setMaxAction((creature.getMaxAction() + (int) action)); - creature.setAction(creature.getMaxAction()); - creature.sendSystemMessage("spam", "level_up_stat_gain_7", (((int) action) + (((int) stamina) * 8) + (((int) constitution) * 2)), 0); - } - - creature.setGrantedHealth(((Integer) experienceTable.getObject(i, 4))); - // -> Expertise point added automatically by client - creature.showFlyText("cbt_spam", "level_up", (float) 2.5, new RGB(100, 149, 237), 0); - - // 4. Adds roadmap rewards - int level = creature.getLevel(); - - if ((level == 4 || level == 7 || level == 10) || ((level > 10) && (((creature.getLevel() - 10) % 4) == 0))) { - int skill = ((level <= 10) ? ((level - 1) / 3) : ((((level - 10) / 4)) + 3)); - String roadmapSkillName = ""; - DatatableVisitor skillTemplate, roadmap; + try { + skillTemplate = ClientFileManager.loadFile("datatables/skill_template/skill_template.iff", DatatableVisitor.class); - try { - skillTemplate = ClientFileManager.loadFile("datatables/skill_template/skill_template.iff", DatatableVisitor.class); - - for (int s = 0; s < skillTemplate.getRowCount(); s++) { - if (skillTemplate.getObject(s, 0) != null) { - if (((String) skillTemplate.getObject(s, 0)).equals(player.getProfession())) { - String[] skillArray = ((String) skillTemplate.getObject(s, 4)).split(","); - roadmapSkillName = skillArray[skill]; - break; - } + for (int s = 0; s < skillTemplate.getRowCount(); s++) { + if (skillTemplate.getObject(s, 0) != null) { + if (((String) skillTemplate.getObject(s, 0)).equals(player.getProfession())) { + String[] skillArray = ((String) skillTemplate.getObject(s, 4)).split(","); + roadmapSkillName = skillArray[skill]; + break; } } - - creature.showFlyText("cbt_spam", "skill_up", (float) 2.5, new RGB(154, 205, 50), 0); - creature.playEffectObject("clienteffect/skill_granted.cef", ""); - creature.playMusic("sound/music_acq_bountyhunter.snd"); - core.skillService.addSkill(creature, roadmapSkillName); - player.setProfessionWheelPosition(roadmapSkillName); - } catch (InstantiationException | IllegalAccessException e) { - e.printStackTrace(); } - try { - roadmap = ClientFileManager.loadFile("datatables/roadmap/item_rewards.iff", DatatableVisitor.class); - - for (int s = 0; s < roadmap.getRowCount(); s++) { - if (roadmap.getObject(s, 0) != null) { - if (((String) roadmap.getObject(s, 1)).equals(roadmapSkillName)) { - String[] apts = ((String) roadmap.getObject(s, 2)).split(","); - String[] items = ((String) roadmap.getObject(s, 4)).split(","); - String[] wookieeItems = ((String) roadmap.getObject(s, 5)).split(","); - String[] ithorianItems = ((String) roadmap.getObject(s, 6)).split(","); + creature.showFlyText(OutOfBand.ProsePackage("@cbt_spam:skill_up"), 2.5f, new RGB(154, 205, 50), 0, true); + creature.playEffectObject("clienteffect/skill_granted.cef", ""); + creature.playMusic("sound/music_acq_bountyhunter.snd"); + core.skillService.addSkill(creature, roadmapSkillName); + player.setProfessionWheelPosition(roadmapSkillName); + } catch (InstantiationException | IllegalAccessException e) { + e.printStackTrace(); + } + + try { + roadmap = ClientFileManager.loadFile("datatables/roadmap/item_rewards.iff", DatatableVisitor.class); + + Vector rewards = new Vector(); + + for (int s = 0; s < roadmap.getRowCount(); s++) { + if (roadmap.getObject(s, 0) != null) { + if (((String) roadmap.getObject(s, 1)).equals(roadmapSkillName)) { + String[] apts = ((String) roadmap.getObject(s, 2)).split(","); + String[] items = ((String) roadmap.getObject(s, 4)).split(","); + String[] wookieeItems = ((String) roadmap.getObject(s, 5)).split(","); + String[] ithorianItems = ((String) roadmap.getObject(s, 6)).split(","); + + int arrayLength = items.length; + + if (wookieeItems.length > 0 && creature.getStfName().contains("wookiee")) { + arrayLength = wookieeItems.length; + } else if (ithorianItems.length > 0 && creature.getStfName().contains("ithorian")) { + arrayLength = ithorianItems.length; + } + + for (int n = 0; n < arrayLength; n++) { + String item = items[n]; - for (int n = 0; n < items.length; n++) { - String item = items[n]; - - if (wookieeItems.length > 0 && creature.getStfName().contains("wookiee")) { - item = wookieeItems[n]; - } else if (ithorianItems.length > 0 && creature.getStfName().contains("ithorian")) { - item = ithorianItems[n]; - } - - try { - if (!item.contains("/")) { - item = core.scriptService.callScript("scripts/roadmap/", "roadmap_rewards", "get", item).asString(); - } - - if (item != null && item != "") { - creature.getSlottedObject("inventory").add(core.objectService.createObject(item, creature.getPlanet())); - } else { - //System.out.println("Can't find template: " + item); - } - } catch (Exception e) { - e.printStackTrace(); - } + if (creature.getStfName().contains("wookiee")) { + item = wookieeItems[n]; + } else if (creature.getStfName().contains("ithorian")) { + item = ithorianItems[n]; } + try { + String customServerTemplate = null; + + if (item.contains("/")) { + item = (item.substring(0, (item.lastIndexOf("/") + 1)) + "shared_" + item.substring((item.lastIndexOf("/") + 1))); + } else { + customServerTemplate = item; + item = core.scriptService.callScript("scripts/roadmap/", player.getProfession(), "getRewards", item).asString(); + } + + if (item != null && item != "") { + SWGObject itemObj = core.objectService.createObject(item, 0, creature.getPlanet(), new Point3D(0, 0, 0), new Quaternion(1, 0, 0, 0), customServerTemplate); + } else { + //System.out.println("Can't find template: " + item); + } + } catch (Exception e) { + e.printStackTrace(); + } } } } - } catch (InstantiationException | IllegalAccessException e) { - e.printStackTrace(); } + + if (rewards != null && !rewards.isEmpty()) { + giveItems(creature, rewards); + } + + } catch (InstantiationException | IllegalAccessException e) { + e.printStackTrace(); } } } + } + } + } + } catch (InstantiationException | IllegalAccessException e) { + e.printStackTrace(); + } + } + + public void addPlayerTitle(PlayerObject player, String title) { + + if (player.getTitleList().contains(title)) + return; + + player.getTitleList().add(title); + + } + + public void removePlayerTitle(PlayerObject player, String title) { + if (player == null || title == "") + return; + + if (player.getTitleList().contains(title)) + player.getTitleList().remove(title); + + } + + /** + * Creates a blue path to the destination point. + * @param actor Player that will be seeing the blue path. + * @param destination Where the blue path will lead to. + */ + public void createClientPath(SWGObject actor, Point3D destination) { + + if (actor == null || actor.getClient() == null || actor.getClient().getSession() == null) + return; + + List coordinates = new ArrayList(); + coordinates.add(actor.getPosition()); + + // TODO: Generate a path to destination based off of objects in the world. + + coordinates.add(destination); // Destination MUST be last coordinate in array + + CreateClientPathMessage path = new CreateClientPathMessage(coordinates); + actor.getClient().getSession().write(path.serialize()); + } + + /** + * Gives a player an item and shows the "New Items" message. + * @param reciever Player receiving the item. + * @param item The object to be given. + * @author Waverunner + */ + public void giveItem(CreatureObject reciever, SWGObject item) { + if (reciever == null || item == null) + return; + + if (reciever.getClient() == null) + return; + Client client = reciever.getClient(); + + if (client.getSession() == null) + return; + SWGObject inventory = reciever.getSlottedObject("inventory"); + + if (inventory == null) + return; + + inventory.add(item); + + ObjControllerMessage objController = new ObjControllerMessage(11, new ShowLootBox(reciever.getObjectID(), item)); + client.getSession().write(objController.serialize()); + } + + /** + * Gives a player a variety of items and shows the "New Items" message. + * @param reciever Player receiving the items. + * @param items Vector of the items. + */ + public void giveItems(CreatureObject reciever, Vector items) { + if (reciever == null || items == null) + return; + + if (reciever.getClient() == null) + return; + Client client = reciever.getClient(); + + if (client.getSession() == null) + return; + SWGObject inventory = reciever.getSlottedObject("inventory"); + + if (inventory == null) + return; + + for (SWGObject obj : items) { + inventory.add(obj); + } + + ObjControllerMessage objController = new ObjControllerMessage(11, new ShowLootBox(reciever.getObjectID(), items)); + client.getSession().write(objController.serialize()); + } + + public void performUnity(final CreatureObject acceptor, final CreatureObject proposer){ + TangibleObject acceptorInventory = (TangibleObject) acceptor.getSlottedObject("inventory"); + final AtomicBoolean acceptorHasRing = new AtomicBoolean(); + + acceptorInventory.viewChildren(acceptor, false, false, new Traverser() { + + @Override + public void process(SWGObject obj) { + if(obj.getAttachment("objType") != null) { + String objType = (String) obj.getAttachment("objType"); + if(objType == "ring") { + acceptorHasRing.set(true); } } - } catch (InstantiationException | IllegalAccessException e) { - e.printStackTrace(); + } + }); + + if(acceptorHasRing.get() == false) { + acceptor.sendSystemMessage("@unity:no_ring", (byte) 0); + proposer.sendSystemMessage("@unity:accept_fail", (byte) 0); + acceptor.setAttachment("proposer", null); + } else { + PlayerObject aGhost = (PlayerObject) acceptor.getSlottedObject("ghost"); + PlayerObject pGhost = (PlayerObject) proposer.getSlottedObject("ghost"); + + if (aGhost == null || pGhost == null) { + acceptor.sendSystemMessage("@unity:wed_error", (byte) 0); + proposer.sendSystemMessage("@unity:wed_error", (byte) 0); + acceptor.setAttachment("proposer", null); + return; + } else { + final Vector ringList = new Vector(); + acceptorInventory.viewChildren(acceptor, false, false, new Traverser() { + + @Override + public void process(SWGObject obj) { + if (obj.getAttachment("objType") != null) { + if (obj.getAttachment("objType") == "ring") { + ringList.add(obj); + } + } + } + }); + + if (ringList.size() > 1) { + sendRingSelectWindow(acceptor, proposer, ringList); + } else { + // Proposer's ring is already 'unified' from the start, so no + // need to set a unity attachment. + ringList.get(0).setAttachment("unity", (Boolean) true); + + if(!acceptor.getEquipmentList().contains(ringList.get(0).getObjectId())) + core.equipmentService.equip(acceptor, ringList.get(0)); + + aGhost.setSpouseName(proposer.getCustomName()); + pGhost.setSpouseName(acceptor.getCustomName()); + + acceptor.sendSystemMessage("Your union with " + proposer.getCustomName() + " is complete.", (byte) 0); + proposer.sendSystemMessage("Your union with " + acceptor.getCustomName() + " is complete.", (byte) 0); + + acceptor.setAttachment("proposer", null); + } } } } + + private void sendRingSelectWindow(final CreatureObject actor, final CreatureObject proposer, Vector ringList) { + Map ringData = new HashMap(); + + for(SWGObject obj : ringList) { + ringData.put(obj.getObjectId(), obj.getCustomName()); + } + + final SUIWindow ringWindow = core.suiService.createListBox(ListBoxType.LIST_BOX_OK_CANCEL, "@unity:ring_prompt", "@unity:ring_prompt", ringData, actor, proposer, (float) 15); + Vector returnList = new Vector(); + returnList.add("List.lstList:SelectedRow"); + + ringWindow.addHandler(0, "", Trigger.TRIGGER_OK, returnList, new SUICallback() { + + @Override + public void process(SWGObject owner, int eventType, Vector returnList) { + int index = Integer.parseInt(returnList.get(0)); + + SWGObject selectedRing = core.objectService.getObject(ringWindow.getObjectIdByIndex(index)); + selectedRing.setAttachment("unity", (Boolean) true); + + if(!actor.getEquipmentList().contains(selectedRing.getObjectId())) + core.equipmentService.equip(actor, selectedRing); + + PlayerObject aGhost = (PlayerObject) actor.getSlottedObject("ghost"); + PlayerObject pGhost = (PlayerObject) proposer.getSlottedObject("ghost"); + aGhost.setSpouseName(proposer.getCustomName()); + pGhost.setSpouseName(actor.getCustomName()); + + actor.sendSystemMessage("Your union with " + proposer.getCustomName() + " is complete.", (byte) 0); + proposer.sendSystemMessage("Your union with " + actor.getCustomName() + " is complete.", (byte) 0); + } + + }); + + ringWindow.addHandler(1, "", Trigger.TRIGGER_CANCEL, returnList, new SUICallback() { + + @Override + public void process(SWGObject owner, int eventType, Vector returnList) { + + PlayerObject aGhost = (PlayerObject) actor.getSlottedObject("ghost"); + PlayerObject pGhost = (PlayerObject) proposer.getSlottedObject("ghost"); + + actor.sendSystemMessage("@unity:decline", (byte) 0); + proposer.sendSystemMessage("@unity:declined", (byte) 0); + actor.setAttachment("proposer", null); + for(Long objId : proposer.getEquipmentList()) { + SWGObject obj = core.objectService.getObject(objId); + if(obj != null && obj.getAttachment("unity") != null) { + obj.setAttachment("unity", null); + break; + } + } + } + }); + core.suiService.openSUIWindow(ringWindow); + } + + public void sendSetBountyWindow(final CreatureObject victim, final CreatureObject attacker) { + SUIWindow bountyWindow = core.suiService.createInputBox(InputBoxType.INPUT_BOX_OK_CANCEL, "@bounty_hunter:setbounty_title", "@bounty_hunter:setbounty_prompt1 " + attacker.getCustomName() + "?" + "\n@bounty_hunter:setbounty_prompt2 " + + String.valueOf(victim.getBankCredits() + victim.getCashCredits()), victim, null, (float) 10, new SUICallback() { + + @Override + public void process(SWGObject owner, int eventType, Vector returnList) { + if (eventType == 0 && returnList.size() > 0 && returnList.get(0) != null) { + int bounty = Integer.parseInt(returnList.get(0)); + int totalFunds = victim.getBankCredits() + victim.getCashCredits(); + + if (bounty > totalFunds) { + victim.sendSystemMessage("@bounty_hunter:setbounty_too_much", DisplayType.Broadcast); + sendSetBountyWindow(victim, attacker); + return; + } + + if (bounty < 20000) { + victim.sendSystemMessage("@bounty_hunter:setbounty_too_little", DisplayType.Broadcast); + sendSetBountyWindow(victim, attacker); + return; + } else if (bounty > 1000000) { + victim.sendSystemMessage("@bounty_hunter:setbounty_cap", DisplayType.Broadcast); + bounty = 1000000; + } + + if (core.getBountiesODB().contains(attacker.getObjectID())) { + if (((BountyListItem) core.getBountiesODB().get(attacker.getObjectID())).getCreditReward() >= 20000000) { + victim.sendSystemMessage("@bounty_hunter:max_bounty", DisplayType.Broadcast); + return; + } + } + + // Try removing bounty amount from the bank first then cash. Remove amount accordingly if bank/cash is less than placed bounty. + if (bounty > victim.getBankCredits()) { + int difference = bounty - victim.getBankCredits(); + + victim.setCashCredits(victim.getCashCredits() - difference); + victim.setBankCredits(0); + } else if (bounty > victim.getCashCredits()) { + int difference = bounty - victim.getCashCredits(); + + victim.setBankCredits(victim.getBankCredits() - difference); + victim.setCashCredits(0); + } else { victim.setBankCredits(victim.getBankCredits() - bounty); } + + if (!core.missionService.addToExistingBounty(attacker.getObjectID(), victim.getObjectID(), bounty)) + core.missionService.createNewBounty(attacker, victim.getObjectID(), bounty); + + victim.sendSystemMessage("You have placed a bounty for " + bounty + " credits on the head of " + attacker.getCustomName(), (byte) 0); + } + } + + }); + bountyWindow.setProperty("txtInput:NumericInteger", "true"); + bountyWindow.setProperty("txtInput:MaxLength", "7"); + bountyWindow.setProperty("inputBox:Size", "306,306"); + core.suiService.openSUIWindow(bountyWindow); + } + + public String getFormalProfessionName(String template) { + String formalName = ""; + + switch (template) { + case "force_sensitive_1a": formalName = "Jedi"; break; + case "bounty_hunter_1a": formalName = "Bounty Hunter"; break; + case "officer_1a": formalName = "Officer"; break; + case "smuggler_1a": formalName = "Smuggler"; break; + case "entertainer_1a": formalName = "Entertainer"; break; + case "spy_1a": formalName = "Spy"; break; + case "medic_1a": formalName = "Medic"; break; + case "commando_1a": formalName = "Commando"; break; + + default: formalName = "Trader"; break; // Ziggy: Trader profession names are a bit irregular, so this is used. + + } + return formalName; + } @Override public void shutdown() { @@ -492,4 +1430,8 @@ public class PlayerService implements INetworkDispatch { } + public Map>> getSchedulers() { + return schedulers; + } + } diff --git a/src/services/ScriptService.java b/src/services/ScriptService.java index e7d3b966..dab378b5 100644 --- a/src/services/ScriptService.java +++ b/src/services/ScriptService.java @@ -21,6 +21,9 @@ ******************************************************************************/ package services; +import java.util.Iterator; +import java.util.Vector; + import org.python.core.Py; import org.python.core.PyObject; import org.python.util.PythonInterpreter; @@ -30,10 +33,10 @@ import main.NGECore; @SuppressWarnings("unused") public class ScriptService { - + private NGECore core; private PythonInterpreter interpreter; - + public ScriptService(NGECore core) { this.core = core; } @@ -45,6 +48,7 @@ public class ScriptService { PyObject func = interpreter.get(method); func.__call__(Py.java2py(core));*/ PythonInterpreter python = new PythonInterpreter(); + python.cleanup(); python.execfile(path + module + ".py"); return python.get(method).__call__(); } @@ -56,33 +60,36 @@ public class ScriptService { PyObject func = interpreter.get(method); func.__call__(Py.java2py(core), Py.java2py(arg1));*/ PythonInterpreter python = new PythonInterpreter(); + python.cleanup(); python.execfile(path + module + ".py"); return python.get(method).__call__(Py.java2py(arg1)); } - public PyObject callScript(String path, String method, String module, Object arg1, Object arg2) { + public PyObject callScript(String path, String module, String method, Object arg1, Object arg2) { /*PythonInterpreter interpreter = new PythonInterpreter(); interpreter.cleanup(); interpreter.exec("import sys\nsys.path.append('" + path + "')\nfrom " + module + " import " + method); PyObject func = interpreter.get(method); func.__call__(Py.java2py(arg1), Py.java2py(arg2));*/ PythonInterpreter python = new PythonInterpreter(); + python.cleanup(); python.execfile(path + module + ".py"); return python.get(method).__call__(Py.java2py(arg1), Py.java2py(arg2)); } - public PyObject callScript(String path, String method, String module, Object arg1, Object arg2, Object arg3) { + public PyObject callScript(String path, String module, String method, Object arg1, Object arg2, Object arg3) { /*PythonInterpreter interpreter = new PythonInterpreter(); interpreter.cleanup(); interpreter.exec("import sys\nsys.path.append('" + path + "')\nfrom " + module + " import " + method); PyObject func = interpreter.get(method); func.__call__(Py.java2py(arg1), Py.java2py(arg2), Py.java2py(arg3));*/ PythonInterpreter python = new PythonInterpreter(); + python.cleanup(); python.execfile(path + module + ".py"); return python.get(method).__call__(Py.java2py(arg1), Py.java2py(arg2), Py.java2py(arg3)); } - + public PyObject callScript(String path, String module, String method, Object arg1, Object arg2, Object arg3, Object arg4) { /*PythonInterpreter interpreter = new PythonInterpreter(); interpreter.cleanup(); @@ -90,15 +97,57 @@ public class ScriptService { PyObject func = interpreter.get(method); func.__call__(Py.java2py(arg1), Py.java2py(arg2), Py.java2py(arg3), Py.java2py(arg4));*/ PythonInterpreter python = new PythonInterpreter(); + python.cleanup(); python.execfile(path + module + ".py"); return python.get(method).__call__(Py.java2py(arg1), Py.java2py(arg2), Py.java2py(arg3), Py.java2py(arg4)); } public PyObject getMethod(String path, String module, String method) { PythonInterpreter python = new PythonInterpreter(); + python.cleanup(); python.execfile(path + module + ".py"); PyObject func = python.get(method); return func; } - + + public String fetchString(String path, String method) { + PyObject result = core.scriptService.callScript(path, "", method); + return ((PyObject)result).asString(); + } + + public int fetchInteger(String path, String method) { + PyObject result = core.scriptService.callScript(path, "", method); + return ((PyObject)result).asInt(); + } + + public Vector fetchStringVector(String path, String method) { + Vector vector = new Vector(); + PyObject result = core.scriptService.callScript(path, "", method); + Iterable comp = (Iterable)result.asIterable(); + for (Iterator temp = comp.iterator(); temp.hasNext();){ + vector.add(temp.next().asString()); + } + return vector; + } + + public Vector fetchIntegerVector(String path, String method) { + Vector vector = new Vector(); + PyObject result = core.scriptService.callScript(path, "", method); + Iterable comp = (Iterable)result.asIterable(); + for (Iterator temp = comp.iterator(); temp.hasNext();){ + vector.add(temp.next().asInt()); + } + return vector; + } + + public Vector fetchDoubleVector(String path, String method) { + Vector vector = new Vector(); + PyObject result = core.scriptService.callScript(path, "", method); + Iterable comp = (Iterable)result.asIterable(); + for (Iterator temp = comp.iterator(); temp.hasNext();){ + vector.add(temp.next().asDouble()); + } + return vector; + } + } diff --git a/src/services/SimulationService.java b/src/services/SimulationService.java index 1bea2435..6cc01567 100644 --- a/src/services/SimulationService.java +++ b/src/services/SimulationService.java @@ -28,7 +28,13 @@ import java.util.HashSet; import java.util.Iterator; import java.util.List; import java.util.Map; +import java.util.Vector; import java.util.concurrent.ConcurrentHashMap; +import java.util.concurrent.Executors; +import java.util.concurrent.ScheduledExecutorService; +import java.util.concurrent.ScheduledFuture; +import java.util.concurrent.TimeUnit; +import java.util.concurrent.atomic.AtomicBoolean; import main.NGECore; @@ -37,13 +43,19 @@ import org.apache.commons.math3.geometry.euclidean.threed.Vector3D; import org.apache.mina.core.buffer.IoBuffer; import org.apache.mina.core.session.IoSession; +import com.sleepycat.persist.EntityCursor; + import engine.clientdata.ClientFileManager; import engine.clientdata.visitors.MeshVisitor; import engine.clientdata.visitors.PortalVisitor; import engine.clientdata.visitors.PortalVisitor.Cell; import engine.clients.Client; +import engine.resources.common.Event; import engine.resources.common.Mesh3DTriangle; +import engine.resources.common.RGB; import engine.resources.common.Ray; +import engine.resources.container.Traverser; +import engine.resources.database.ODBCursor; import engine.resources.objects.SWGObject; import engine.resources.scene.Planet; import engine.resources.scene.Point3D; @@ -51,28 +63,39 @@ import engine.resources.scene.Quaternion; import engine.resources.scene.quadtree.QuadTree; import engine.resources.service.INetworkDispatch; import engine.resources.service.INetworkRemoteEvent; - -import protocol.swg.ChatFriendsListUpdate; -import protocol.swg.ChatOnChangeFriendStatus; -import protocol.swg.ChatOnGetFriendsList; import protocol.swg.CmdStartScene; import protocol.swg.HeartBeatMessage; import protocol.swg.ObjControllerMessage; import protocol.swg.OpenedContainerMessage; import protocol.swg.UpdateTransformMessage; import protocol.swg.UpdateTransformWithParentMessage; +import protocol.swg.chat.ChatFriendsListUpdate; +import protocol.swg.chat.ChatOnChangeFriendStatus; +import protocol.swg.chat.ChatOnGetFriendsList; import protocol.swg.objectControllerObjects.DataTransform; import protocol.swg.objectControllerObjects.DataTransformWithParent; import protocol.swg.objectControllerObjects.TargetUpdate; - +import resources.objects.building.BuildingObject; import resources.objects.cell.CellObject; import resources.objects.creature.CreatureObject; +import resources.objects.group.GroupObject; +import resources.objects.harvester.HarvesterObject; import resources.objects.player.PlayerObject; +import resources.objects.tangible.TangibleObject; import resources.common.*; +import resources.common.collidables.AbstractCollidable; +import resources.datatables.DisplayType; +import resources.datatables.Locomotion; +import resources.datatables.Options; +import resources.datatables.PlayerFlags; +import resources.datatables.Posture; +import services.ai.LairActor; +import services.chat.ChatRoom; import toxi.geom.Line3D; import toxi.geom.Ray3D; import toxi.geom.Vec3D; import toxi.geom.mesh.TriangleMesh; +import wblut.geom.WB_AABB; import wblut.geom.WB_AABBNode; import wblut.geom.WB_AABBTree; import wblut.geom.WB_Distance; @@ -91,6 +114,8 @@ import wblut.math.WB_M44; public class SimulationService implements INetworkDispatch { Map> quadTrees; + Map> collidableQuadTrees; + private final ScheduledExecutorService scheduler = Executors.newScheduledThreadPool(1); private NGECore core; private Map cellMeshes = new ConcurrentHashMap(); @@ -98,18 +123,13 @@ public class SimulationService implements INetworkDispatch { this.core = core; TerrainService terrainService = core.terrainService; quadTrees = new ConcurrentHashMap>(); + collidableQuadTrees = new ConcurrentHashMap>(); for (int i = 0; i < core.terrainService.getPlanetList().size(); i++) { quadTrees.put(terrainService.getPlanetList().get(i).getName(), new QuadTree(-8192, -8192, 8192, 8192)); + collidableQuadTrees.put(terrainService.getPlanetList().get(i).getName(), new QuadTree(-8192, -8192, 8192, 8192)); } - List objectList = new ArrayList(core.objectService.getObjectList().values()); - for(SWGObject obj : objectList) { - if(obj.getParentId() == 0 && obj.isInSnapshot()) { - core.objectService.loadServerTemplate(obj); - add(obj, obj.getPosition().x, obj.getPosition().z); - } - } core.commandService.registerCommand("opencontainer"); core.commandService.registerCommand("transferitem"); core.commandService.registerCommand("transferitemarmor"); @@ -121,71 +141,177 @@ public class SimulationService implements INetworkDispatch { core.commandService.registerCommand("sitserver"); core.commandService.registerCommand("kneel"); core.commandService.registerCommand("serverdestroyobject"); - core.commandService.registerCommand("giveitem"); - core.commandService.registerCommand("object"); + core.commandService.registerGmCommand("giveitem"); + core.commandService.registerGmCommand("object"); core.commandService.registerCommand("getattributesbatch"); core.commandService.registerCommand("pvp"); core.commandService.registerCommand("setcurrentskilltitle"); core.commandService.registerCommand("tip"); core.commandService.registerCommand("faction"); - core.commandService.registerCommand("setspeed"); + core.commandService.registerGmCommand("setspeed"); core.commandService.registerCommand("waypoint"); core.commandService.registerCommand("setwaypointactivestatus"); core.commandService.registerCommand("setwaypointname"); - core.commandService.registerCommand("addfriend"); - core.commandService.registerCommand("removefriend"); core.commandService.registerCommand("getfriendlist"); core.commandService.registerCommand("deathblow"); core.commandService.registerCommand("endduel"); core.commandService.registerCommand("duel"); core.commandService.registerCommand("purchaseticket"); core.commandService.registerCommand("boardshuttle"); + core.commandService.registerCommand("getplayerid"); + core.commandService.registerCommand("inspire"); + core.commandService.registerGmCommand("setgodmode"); + core.commandService.registerCommand("requestwaypointatposition"); + core.commandService.registerCommand("meditate"); + core.commandService.registerGmCommand("server"); + core.commandService.registerCommand("toggleawayfromkeyboard"); + core.commandService.registerCommand("lfg"); + core.commandService.registerCommand("newbiehelper"); + core.commandService.registerCommand("roleplay"); + core.commandService.registerAlias("afk", "toggleawayfromkeyboard"); + core.commandService.registerCommand("toggledisplayingfactionrank"); + core.commandService.registerCommand("editbiography"); + core.commandService.registerCommand("setbiography"); + core.commandService.registerCommand("requestbiography"); + core.commandService.registerCommand("eject"); + core.commandService.registerGmCommand("broadcast"); + core.commandService.registerGmCommand("teleporttarget"); + core.commandService.registerGmCommand("getplayerid"); + core.commandService.registerCommand("npcconversationselect"); + core.commandService.registerCommand("npcconversationstop"); } - public void add(SWGObject object, int x, int y) { - object.setIsInQuadtree(true); - quadTrees.get(object.getPlanet().getName()).put(x, y, object); + public void insertSnapShotObjects() { + List objectList = new ArrayList(core.objectService.getObjectList().values()); + for(SWGObject obj : objectList) { + if(obj.getParentId() == 0 && /*(*/obj.isInSnapshot() /*|| obj.getAttachment("isBuildout") != null)*/) + add(obj, obj.getPosition().x, obj.getPosition().z); + } } - public boolean add(SWGObject object, float x, float y) { - object.setIsInQuadtree(true); - return quadTrees.get(object.getPlanet().getName()).put(x, y, object); + public void insertPersistentBuildings() { + ODBCursor cursor = core.getSWGObjectODB().getCursor(); + + while(cursor.hasNext()) { + Object next = cursor.next(); + if (next == null) continue; + SWGObject building = core.objectService.getObject(((SWGObject) next).getObjectID()); + if(building == null || (!(building instanceof BuildingObject) && !(building instanceof HarvesterObject))) + continue; + if(building.getAttachment("hasLoadedServerTemplate") == null) + core.objectService.loadServerTemplate(building); + add(building, building.getPosition().x, building.getPosition().z); + } + cursor.close(); + } + + + public void addCollidable(AbstractCollidable collidable, float x, float y) { + collidableQuadTrees.get(collidable.getPlanet().getName()).put(x, y, collidable); } - public boolean move(SWGObject object, int oldX, int oldY, int newX, int newY) { - if(quadTrees.get(object.getPlanet().getName()).remove(oldX, oldY, object)) { - return quadTrees.get(object.getPlanet().getName()).put(newX, newY, object); + public void removeCollidable(AbstractCollidable collidable, float x, float y) { + collidableQuadTrees.get(collidable.getPlanet().getName()).remove(x, y, collidable); + } + + public List getCollidables(Planet planet, float x, float y, float range) { + return collidableQuadTrees.get(planet.getName()).get(x, y, range); + } + + public boolean add(SWGObject object, float x, float z) { + return add(object, x, z, false); + } + + public boolean add(SWGObject object, float x, float z, boolean notifyObservers) { + object.setIsInQuadtree(true); + boolean success = quadTrees.get(object.getPlanet().getName()).put(x, z, object); + if(success) { + @SuppressWarnings("unchecked") Vector childObjects = (Vector) object.getAttachment("childObjects"); + if(childObjects != null) { + addChildObjects(object, childObjects); + object.setAttachment("childObjects", null); + } + + if(notifyObservers) { + Point3D pos = new Point3D(x, 0, z); + Collection newAwareObjects = get(object.getPlanet(), x, z, 512); + for(Iterator it = newAwareObjects.iterator(); it.hasNext();) { + SWGObject obj = it.next(); + if((obj.getAttachment("bigSpawnRange") == null && obj.getWorldPosition().getDistance2D(pos) > 200) || obj == object) + continue; + //if(!obj.isInSnapshot()) + // System.out.println(obj.getTemplate()); + if(object.getClient() != null) + object.makeAware(obj); + if(obj.getClient() != null) + obj.makeAware(object); + } + } + } + return success; + } + + public void addChildObjects(SWGObject object, Vector childObjects) { + + for(SWGObject childObject : childObjects) { + if(childObject.getAttachment("cellNumber") == null) + add(childObject, childObject.getWorldPosition().x, childObject.getWorldPosition().z, true); + else { + BuildingObject building = (BuildingObject) object; + CellObject cell = building.getCellByCellNumber((Integer) childObject.getAttachment("cellNumber")); + if(cell == null) + continue; + cell.add(childObject); + } + + } + + } + + public boolean move(SWGObject object, int oldX, int oldZ, int newX, int newZ) { + if(quadTrees.get(object.getPlanet().getName()).remove(oldX, oldZ, object)) { + return quadTrees.get(object.getPlanet().getName()).put(newX, newZ, object); } return false; } - public boolean move(SWGObject object, float oldX, float oldY, float newX, float newY) { + public boolean move(SWGObject object, float oldX, float oldZ, float newX, float newZ) { long startTime = System.nanoTime(); - if(quadTrees.get(object.getPlanet().getName()).remove(oldX, oldY, object)) { - boolean success = quadTrees.get(object.getPlanet().getName()).put(newX, newY, object); + if(quadTrees.get(object.getPlanet().getName()).remove(oldX, oldZ, object)) { + boolean success = quadTrees.get(object.getPlanet().getName()).put(newX, newZ, object); return success; } System.out.println("Move failed."); return false; } - - public List get(Planet planet, int x, int y, int range) { - return quadTrees.get(planet.getName()).get(x, y, range); - } - - public List get(Planet planet, float x, float y, int range) { - List list = quadTrees.get(planet.getName()).get((int)x, (int)y, range); + + public List get(Planet planet, float x, float z, int range) { + List list = quadTrees.get(planet.getName()).get((int)x, (int)z, range); return list; } - public boolean remove(SWGObject object, int x, int y) { - return quadTrees.get(object.getPlanet().getName()).remove(x, y, object); + public boolean remove(SWGObject object, float x, float z) { + return remove(object, x, z, false); } - - public boolean remove(SWGObject object, float x, float y) { - boolean success = quadTrees.get(object.getPlanet().getName()).remove(x, y, object); + + public boolean remove(SWGObject object, float x, float z, boolean notifyObservers) { + if (object == null || !object.isInQuadtree()) { + return false; + } + + boolean success = quadTrees.get(object.getPlanet().getName()).remove(x, z, object); + object.setIsInQuadtree(success); + if(success && notifyObservers) { + HashSet oldObservers = new HashSet(object.getObservers()); + for(Iterator it = oldObservers.iterator(); it.hasNext();) { + Client observerClient = it.next(); + if(observerClient.getParent() != null) { + observerClient.getParent().makeUnaware(object); + } + } + } return success; } @@ -202,7 +328,7 @@ public class SimulationService implements INetworkDispatch { DataTransform dataTransform = new DataTransform(); dataTransform.deserialize(data); //System.out.println("Movement Counter: " + dataTransform.getMovementCounter()); - Client client = core.getClient((Integer) session.getAttribute("connectionId")); + Client client = core.getClient(session); if(client == null) { System.out.println("NULL Client"); @@ -214,11 +340,20 @@ public class SimulationService implements INetworkDispatch { return; } - CreatureObject object = (CreatureObject) client.getParent(); + CreatureObject creature = (CreatureObject) client.getParent(); + + CreatureObject object = creature; + + if (core.mountService.isMounted(creature) && creature.getObjectID() == ((CreatureObject) creature.getContainer()).getOwnerId()) { + object = (CreatureObject) object.getContainer(); + } + Point3D newPos; Point3D oldPos; synchronized(object.getMutex()) { newPos = new Point3D(dataTransform.getXPosition(), dataTransform.getYPosition(), dataTransform.getZPosition()); + if(Float.isNaN(newPos.x) || Float.isNaN(newPos.y) || Float.isNaN(newPos.z)) + return; oldPos = object.getPosition(); //Collection oldObservers = object.getObservers(); //Collection newObservers = new HashSet(); @@ -226,50 +361,114 @@ public class SimulationService implements INetworkDispatch { move(object, oldPos.x, oldPos.z, newPos.x, newPos.z); Quaternion newOrientation = new Quaternion(dataTransform.getWOrientation(), dataTransform.getXOrientation(), dataTransform.getYOrientation(), dataTransform.getZOrientation()); object.setPosition(newPos); + creature.setPosition(newPos); object.setOrientation(newOrientation); + creature.setOrientation(newOrientation); object.setMovementCounter(dataTransform.getMovementCounter()); + creature.setMovementCounter(dataTransform.getMovementCounter()); } + + synchronized(creature.getMutex()) { + if (dataTransform.getSpeed() > 0.0f) { + switch (creature.getLocomotion()) { + case Locomotion.Prone: + creature.setLocomotion(Locomotion.Crawling); + break; + case Locomotion.ClimbingStationary: + creature.setLocomotion(Locomotion.Climbing); + break; + case Locomotion.Standing: + case Locomotion.Running: + case Locomotion.Walking: + if (dataTransform.getSpeed() >= (creature.getRunSpeed() * (creature.getSpeedMultiplierBase() + creature.getSpeedMultiplierMod()))) { + creature.setLocomotion(Locomotion.Running); + } else { + creature.setLocomotion(Locomotion.Walking); + } + + break; + case Locomotion.Sneaking: + case Locomotion.CrouchSneaking: + case Locomotion.CrouchWalking: + if (dataTransform.getSpeed() >= (creature.getRunSpeed() * (creature.getSpeedMultiplierBase() + creature.getSpeedMultiplierMod()))) { + creature.setLocomotion(Locomotion.CrouchSneaking); + } else { + creature.setLocomotion(Locomotion.CrouchWalking); + } + + break; + } + } else { + switch (creature.getLocomotion()) { + case Locomotion.Crawling: + creature.setLocomotion(Locomotion.Prone); + break; + case Locomotion.Climbing: + creature.setLocomotion(Locomotion.ClimbingStationary); + break; + case Locomotion.Running: + case Locomotion.Walking: + creature.setLocomotion(Locomotion.Standing); + break; + case Locomotion.CrouchSneaking: + case Locomotion.CrouchWalking: + creature.setLocomotion(Locomotion.Sneaking); + break; + } + } + } + if(object.getContainer() != null) { object.getContainer()._remove(object); add(object, newPos.x, newPos.z); - } - - - + } //object.setParentId(0); //object.setParent(null); // System.out.println("Parsed Height: " + core.terrainService.getHeight(object.getPlanetId(), dataTransform.getXPosition(), dataTransform.getZPosition()) // + " should be: " + dataTransform.getYPosition()); UpdateTransformMessage utm = new UpdateTransformMessage(object.getObjectID(), dataTransform.getTransformedX(), dataTransform.getTransformedY(), dataTransform.getTransformedZ(), dataTransform.getMovementCounter(), (byte) dataTransform.getMovementAngle(), dataTransform.getSpeed()); - - List newAwareObjects = get(object.getPlanet(), newPos.x, newPos.z, 200); - ArrayList oldAwareObjects = new ArrayList(object.getAwareObjects()); - Collection updateAwareObjects = CollectionUtils.intersection(oldAwareObjects, newAwareObjects); object.notifyObservers(utm, false); - + + List newAwareObjects = get(creature.getPlanet(), newPos.x, newPos.z, 512); + ArrayList oldAwareObjects = new ArrayList(creature.getAwareObjects()); + @SuppressWarnings("unchecked") Collection updateAwareObjects = CollectionUtils.intersection(oldAwareObjects, newAwareObjects); + for(int i = 0; i < oldAwareObjects.size(); i++) { SWGObject obj = oldAwareObjects.get(i); - if(!updateAwareObjects.contains(obj) && obj != object && obj.getWorldPosition().getDistance2D(newPos) > 200 && obj.isInQuadtree() /*&& obj.getParentId() == 0*/) { - object.makeUnaware(obj); + if(!updateAwareObjects.contains(obj) && obj != creature && obj.getWorldPosition().getDistance2D(newPos) > 200 && obj.isInQuadtree() /*&& obj.getParentId() == 0*/) { + if(obj.getAttachment("bigSpawnRange") != null && obj.getWorldPosition().getDistance2D(newPos) < 512) + continue; + creature.makeUnaware(obj); if(obj.getClient() != null) - obj.makeUnaware(object); + obj.makeUnaware(creature); + } else if(obj != creature && obj.getWorldPosition().getDistance2D(newPos) > 200 && obj.isInQuadtree() && obj.getAttachment("bigSpawnRange") == null) { + creature.makeUnaware(obj); + if(obj.getClient() != null) + obj.makeUnaware(creature); } } + for(int i = 0; i < newAwareObjects.size(); i++) { SWGObject obj = newAwareObjects.get(i); - if(!updateAwareObjects.contains(obj) && obj != object && !object.getAwareObjects().contains(obj) && obj.getWorldPosition().getDistance2D(newPos) <= 200 && obj.getContainer() != object && obj.isInQuadtree()) { - object.makeAware(obj); + //System.out.println(obj.getTemplate()); + if(!updateAwareObjects.contains(obj) && obj != creature && !creature.getAwareObjects().contains(obj) && obj.getContainer() != creature && obj.isInQuadtree()) { + if(obj.getAttachment("bigSpawnRange") == null && obj.getWorldPosition().getDistance2D(newPos) > 200) + continue; + creature.makeAware(obj); if(obj.getClient() != null) - obj.makeAware(object); + obj.makeAware(creature); } } + checkForCollidables(object); + object.setAttachment("lastValidPosition", object.getPosition()); + MoveEvent event = new MoveEvent(); + event.object = object; + object.getEventBus().publish(event); - } - - + }); objControllerOpcodes.put(ObjControllerOpcodes.DATA_TRANSFORM_WITH_PARENT, new INetworkRemoteEvent() { @@ -281,7 +480,7 @@ public class SimulationService implements INetworkDispatch { DataTransformWithParent dataTransform = new DataTransformWithParent(); dataTransform.deserialize(data); - Client client = core.getClient((Integer) session.getAttribute("connectionId")); + Client client = core.getClient(session); if(core.objectService.getObject(dataTransform.getCellId()) == null) return; @@ -297,29 +496,89 @@ public class SimulationService implements INetworkDispatch { System.out.println("NULL Object"); return; } + CreatureObject object = (CreatureObject) client.getParent(); + if (core.mountService.isMounted(object)) { + object.sendSystemMessage(OutOfBand.ProsePackage("@pet_menu:cant_mount"), DisplayType.Broadcast); + core.mountService.dismount(object, (CreatureObject) object.getContainer()); + } + Point3D newPos = new Point3D(dataTransform.getXPosition(), dataTransform.getYPosition(), dataTransform.getZPosition()); + if(Float.isNaN(newPos.x) || Float.isNaN(newPos.y) || Float.isNaN(newPos.z)) + return; Point3D oldPos = object.getPosition(); Quaternion newOrientation = new Quaternion(dataTransform.getWOrientation(), dataTransform.getXOrientation(), dataTransform.getYOrientation(), dataTransform.getZOrientation()); - + UpdateTransformWithParentMessage utm = new UpdateTransformWithParentMessage(object.getObjectID(), dataTransform.getCellId(), dataTransform.getTransformedX(), dataTransform.getTransformedY(), dataTransform.getTransformedZ(), dataTransform.getMovementCounter(), (byte) dataTransform.getMovementAngle(), dataTransform.getSpeed()); - if(object.getContainer() != parent) { remove(object, oldPos.x, oldPos.z); if(object.getContainer() != null) object.getContainer()._remove(object); + if (object.getClient().isGM() && parent != null && parent instanceof CellObject && parent.getContainer() != null) + object.sendSystemMessage("BuildingId - Dec: " + parent.getContainer().getObjectID() + " Hex: " + Long.toHexString(parent.getContainer().getObjectID()) + " CellNumber: " + ((CellObject) parent).getCellNumber(), DisplayType.Broadcast); parent._add(object); } object.setPosition(newPos); object.setOrientation(newOrientation); object.setMovementCounter(dataTransform.getMovementCounter()); object.notifyObservers(utm, false); - + + checkForCollidables(object); + object.setAttachment("lastValidPosition", object.getPosition()); + + synchronized(object.getMutex()) { + if (dataTransform.getSpeed() > 0.0f) { + switch (object.getLocomotion()) { + case Locomotion.Prone: + object.setLocomotion(Locomotion.Crawling); + break; + case Locomotion.ClimbingStationary: + object.setLocomotion(Locomotion.Climbing); + break; + case Locomotion.Standing: + case Locomotion.Running: + case Locomotion.Walking: + if (dataTransform.getSpeed() >= (object.getRunSpeed() * (object.getSpeedMultiplierBase() + object.getSpeedMultiplierMod()))) { + object.setLocomotion(Locomotion.Running); + } else { + object.setLocomotion(Locomotion.Walking); + } + + break; + case Locomotion.Sneaking: + case Locomotion.CrouchSneaking: + case Locomotion.CrouchWalking: + if (dataTransform.getSpeed() >= (object.getRunSpeed() * (object.getSpeedMultiplierBase() + object.getSpeedMultiplierMod()))) { + object.setLocomotion(Locomotion.CrouchSneaking); + } else { + object.setLocomotion(Locomotion.CrouchWalking); + } + + break; + } + } else { + switch (object.getLocomotion()) { + case Locomotion.Crawling: + object.setLocomotion(Locomotion.Prone); + break; + case Locomotion.Climbing: + object.setLocomotion(Locomotion.ClimbingStationary); + break; + case Locomotion.Running: + case Locomotion.Walking: + object.setLocomotion(Locomotion.Standing); + break; + case Locomotion.CrouchSneaking: + case Locomotion.CrouchWalking: + object.setLocomotion(Locomotion.Sneaking); + break; + } + } + } } - - + }); swgOpcodes.put(Opcodes.ClientOpenContainerMessage, new INetworkRemoteEvent() { @@ -331,21 +590,20 @@ public class SimulationService implements INetworkDispatch { }); - objControllerOpcodes.put(ObjControllerOpcodes.TARGET_UPDATE, new INetworkRemoteEvent() { + objControllerOpcodes.put(ObjControllerOpcodes.lookAtTarget, new INetworkRemoteEvent() { @Override public void handlePacket(IoSession session, IoBuffer data) throws Exception { - - data = data.order(ByteOrder.LITTLE_ENDIAN); - data.position(0); - - Client client = core.getClient((Integer) session.getAttribute("connectionId")); - + + data.order(ByteOrder.LITTLE_ENDIAN); + + Client client = core.getClient(session); + if(client == null) { System.out.println("NULL Client"); return; } - + if(client.getParent() == null) { System.out.println("NULL Object"); return; @@ -354,15 +612,145 @@ public class SimulationService implements INetworkDispatch { TargetUpdate targetUpdate = new TargetUpdate(); targetUpdate.deserialize(data); - - object.setTargetId(targetUpdate.getTargetId()); - + + object.setLookAtTarget(targetUpdate.getTargetId()); + } }); + + objControllerOpcodes.put(ObjControllerOpcodes.intendedTarget, new INetworkRemoteEvent() { + @Override + public void handlePacket(IoSession session, IoBuffer data) throws Exception { + + data.order(ByteOrder.LITTLE_ENDIAN); + + Client client = core.getClient(session); + + if(client == null) { + System.out.println("NULL Client"); + return; + } + + if(client.getParent() == null) { + System.out.println("NULL Object"); + return; + } + CreatureObject object = (CreatureObject) client.getParent(); + + TargetUpdate targetUpdate = new TargetUpdate(); + targetUpdate.deserialize(data); + + object.setIntendedTarget(targetUpdate.getTargetId()); + + } + + }); + } + + public void moveObject(SWGObject object, Point3D newPosition, Quaternion newOrientation, int movementCounter, float speed, CellObject cell) { + + if(Float.isNaN(newPosition.x) || Float.isNaN(newPosition.y) || Float.isNaN(newPosition.z)) + return; + if(cell == null) { + + Point3D oldPos; + synchronized(object.getMutex()) { + oldPos = object.getPosition(); + if(object.getContainer() == null) + move(object, oldPos.x, oldPos.z, newPosition.x, newPosition.z); + object.setPosition(newPosition); + object.setOrientation(newOrientation); + object.setMovementCounter(movementCounter + 1); + } + if(object.getContainer() != null && newPosition != oldPos) { + object.getContainer()._remove(object); + add(object, newPosition.x, newPosition.z); + } + + UpdateTransformMessage utm = new UpdateTransformMessage(object.getObjectID(), (short) (newPosition.x * 4 + 0.5), (short) (newPosition.y * 4 + 0.5), (short) (newPosition.z * 4 + 0.5), movementCounter + 1, getSpecialDirection(newOrientation), speed); + + List newAwareObjects = get(object.getPlanet(), newPosition.x, newPosition.z, 512); + ArrayList oldAwareObjects = new ArrayList(object.getAwareObjects()); + @SuppressWarnings("unchecked") Collection updateAwareObjects = CollectionUtils.intersection(oldAwareObjects, newAwareObjects); + object.notifyObservers(utm, false); + + for(int i = 0; i < oldAwareObjects.size(); i++) { + SWGObject obj = oldAwareObjects.get(i); + if(!updateAwareObjects.contains(obj) && obj != object && obj.getWorldPosition().getDistance2D(newPosition) > 200 && obj.isInQuadtree() /*&& obj.getParentId() == 0*/) { + if(obj.getAttachment("bigSpawnRange") != null && obj.getWorldPosition().getDistance2D(newPosition) < 512) + continue; + object.makeUnaware(obj); + if(obj.getClient() != null) + obj.makeUnaware(object); + } else if(obj != object && obj.getWorldPosition().getDistance2D(newPosition) > 200 && obj.isInQuadtree() && obj.getAttachment("bigSpawnRange") == null) { + object.makeUnaware(obj); + if(obj.getClient() != null) + obj.makeUnaware(object); + } + } + for(int i = 0; i < newAwareObjects.size(); i++) { + SWGObject obj = newAwareObjects.get(i); + //System.out.println(obj.getTemplate()); + if(!updateAwareObjects.contains(obj) && obj != object && !object.getAwareObjects().contains(obj) && obj.getContainer() != object && obj.isInQuadtree()) { + if(obj.getAttachment("bigSpawnRange") == null && obj.getWorldPosition().getDistance2D(newPosition) > 200) + continue; + object.makeAware(obj); + if(obj.getClient() != null) + obj.makeAware(object); + } + } + + checkForCollidables(object); + MoveEvent event = new MoveEvent(); + event.object = object; + object.getEventBus().publish(event); + + + } else { + + newPosition.setCell(cell); + Point3D oldPos = object.getPosition(); + object.setPosition(newPosition); + object.setOrientation(newOrientation); + object.setMovementCounter(movementCounter + 1); + + UpdateTransformWithParentMessage utm = new UpdateTransformWithParentMessage(object.getObjectID(), cell.getObjectID(), (short) (newPosition.x * 8 + 0.5), (short) (newPosition.y * 8 + 0.5), (short) (newPosition.z * 8 + 0.5), movementCounter + 1, getSpecialDirection(newOrientation), speed); + + if(object.getContainer() != cell) { + remove(object, oldPos.x, oldPos.z); + if(object.getContainer() != null) + object.getContainer()._remove(object); + cell._add(object); + } + object.notifyObservers(utm, false); + + checkForCollidables(object); + + } + + } + + public byte getSpecialDirection(Quaternion orientation) { + byte movementAngle = (byte) 0.0f; + float wOrient = orientation.w; + float yOrient = orientation.y; + float sq = (float) Math.sqrt(1- (orientation.w * orientation.w)); + + if (sq != 0) { + if (orientation.w > 0 && orientation.y < 0) { + wOrient *= -1; + yOrient *= -1; + } + movementAngle = (byte) ((yOrient / sq) * (2 * Math.acos(wOrient) / 0.06283f)); + } + + return movementAngle; + } + @Override public void shutdown() { // TODO Auto-generated method stub @@ -430,7 +818,6 @@ public class SimulationService implements INetworkDispatch { float endZ = (float) (modelSpace.m31 * end.x + modelSpace.m32 * end.y + modelSpace.m33 * end.z + modelSpace.m34); end = new Point3D(endX, endY, endZ); - Vector3D direction = new Vector3D(end.x - origin.x, end.y - origin.y, end.z - origin.z); if(direction.getX() > 0 && direction.getY() > 0 && direction.getZ() > 0) direction.normalize(); @@ -438,11 +825,41 @@ public class SimulationService implements INetworkDispatch { return new Ray(origin, direction); } + + public Point3D convertPointToModelSpace(Point3D point, SWGObject object) { + + Point3D position = object.getPosition(); + WB_M44 translateMatrix = new WB_M44(1, 0, 0, position.x, 0, 1, 0, position.y, 0, 0, 1, position.z, 0, 0, 0, 1); + + float radians = object.getRadians(); + float sin = (float) Math.sin(radians); + float cos = (float) Math.cos(radians); - public void handleDisconnect(IoSession session) { + WB_M44 rotationMatrix = new WB_M44(cos, 0, sin, 0, 0, 1, 0, 0, -sin, 0, cos, 0, 0, 0, 0, 1); - Client client = core.getClient((Integer) session.getAttribute("connectionId")); + WB_M44 modelSpace = translateMatrix.mult(rotationMatrix).inverse(); + + float x = (float) (modelSpace.m11 * point.x + modelSpace.m12 * point.y + modelSpace.m13 * point.z + modelSpace.m14); + float y = (float) (modelSpace.m21 * point.x + modelSpace.m22 * point.y + modelSpace.m23 * point.z + modelSpace.m24); + float z = (float) (modelSpace.m31 * point.x + modelSpace.m32 * point.y + modelSpace.m33 * point.z + modelSpace.m34); + + return new Point3D(x, y, z); + + } + + /* + * Moved this to ConnectionService which will disconnect them + * from the server if they don't send packets for 5 minutes or more + * like on live. + * + * We had significant issues with client nulls due to us taking + * client disconnect requests too seriously. It has a weird tendency + * to bluff and send a disconnect packet when it's not disconnecting + * and continues sending packets. + */ + public void handleDisconnect(final IoSession session) { + final Client client = core.getClient(session); if(client == null) return; @@ -450,50 +867,99 @@ public class SimulationService implements INetworkDispatch { if(client.getParent() == null) return; - CreatureObject object = (CreatureObject) client.getParent(); + final CreatureObject object = (CreatureObject) client.getParent(); + SWGObject container = object.getContainer(); PlayerObject ghost = (PlayerObject) object.getSlottedObject("ghost"); - if(object.getGroupId() != 0) - core.groupService.handleGroupDisband(object); + if(object.getAttachment("proposer") != null) + object.setAttachment("proposer", null); + final long objectId = object.getObjectID(); - if (ghost != null) { - String objectShortName = object.getCustomName(); - - if (object.getCustomName().contains(" ")) { - String[] splitName = object.getCustomName().toLowerCase().split(" "); - objectShortName = splitName[0]; - } - - core.chatService.playerStatusChange(objectShortName, (byte) 0); - } + if(!ghost.isSet(PlayerFlags.LD)) + ghost.toggleFlag(PlayerFlags.LD); - session.suspendWrite(); - - boolean remove = remove(object, object.getPosition().x, object.getPosition().z); - if(remove) - System.out.println("Successful quadtree remove"); - - //if(object.getContainer() == null) { - HashSet oldObservers = new HashSet(object.getObservers()); - for(Iterator it = oldObservers.iterator(); it.hasNext();) { - Client observerClient = it.next(); - if(observerClient.getParent() != null && !(observerClient.getSession() == session)) { - observerClient.getParent().makeUnaware(object); + try { + for (CreatureObject opponent : new ArrayList(object.getDuelList())) { + if (opponent != null) { + core.combatService.handleEndDuel(object, opponent, true); } } - //} else { - // object.getContainer().remove(object); - //} + } catch (Exception e) { + e.printStackTrace(); + } - + try { + if (core.mountService.isMounted(object)) { + core.mountService.dismount(object, (CreatureObject) container); + } + + core.mountService.storeAll(object); + } catch (Exception e) { + e.printStackTrace(); + } + + try { + for (Integer roomId : ghost.getJoinedChatChannels()) { + ChatRoom room = core.chatService.getChatRoom(roomId.intValue()); + + if (room != null) { + core.chatService.leaveChatRoom(object, roomId.intValue(), false); + } else { + // work-around for any channels that may have been deleted, or only spawn on server startup, that were added to the joined channels + ghost.removeChannel(roomId); + } + } + } catch (Exception e) { + e.printStackTrace(); + } + + /* object.createTransaction(core.getCreatureODB().getEnvironment()); core.getCreatureODB().put(object, Long.class, CreatureObject.class, object.getTransaction()); - object.getTransaction().commitSync(); + object.getTransaction().commitSync();*/ - core.objectService.destroyObject(object); - core.getActiveConnectionsMap().remove((Integer) session.getAttribute("connectionId")); + ScheduledFuture disconnectTask = scheduler.schedule(new Runnable() { + @Override + public void run() { + SWGObject object = core.objectService.getObject(objectId); + + if (object.getAttachment("disconnectTask") != null) { + try { + core.combatService.endCombat((CreatureObject) object); + } catch (Exception e) { + e.printStackTrace(); + } + + core.simulationService.remove(object, object.getPosition().x, object.getPosition().z, true); + + /* + try { + Thread.sleep(900000) + } catch (Exception e) { + e.printStackTrace(); + } + + // If connectionService fails for some reason, this will call disconnect again after 15 mins. + // This should never actually be needed though: + + try { + if (object != null && object.getAttachment("disconnectTask") != null && client != null) { + core.connectionService.disconnect(client); + } + } catch (Exception e) { + System.err.println("ConnectionService:disconnect(): Error disconnecting client."); + e.printStackTrace(); + } + */ + } + } + }, 120, TimeUnit.SECONDS); + core.removeClient(session); + + object.setAttachment("disconnectTask", disconnectTask); + } public void handleZoneIn(Client client) { @@ -505,59 +971,55 @@ public class SimulationService implements INetworkDispatch { CreatureObject object = (CreatureObject) client.getParent(); Quaternion orientation = object.getOrientation(); Point3D position = object.getPosition(); - - Point3D pos = object.getWorldPosition(); - - Collection newAwareObjects = get(object.getPlanet(), pos.x, pos.z, 200); - for(Iterator it = newAwareObjects.iterator(); it.hasNext();) { - SWGObject obj = it.next(); - object.makeAware(obj); - if(obj.getClient() != null) - obj.makeAware(object); + + if(object.getParentId() != 0) { + Collection newAwareObjects = get(object.getPlanet(), pos.x, pos.z, 512); + for(Iterator it = newAwareObjects.iterator(); it.hasNext();) { + SWGObject obj = it.next(); + if(obj.getAttachment("bigSpawnRange") == null && obj.getWorldPosition().getDistance(pos) > 200) + continue; + //System.out.println(obj.getTemplate()); + object.makeAware(obj); + if(obj.getClient() != null) + obj.makeAware(object); + } + } else { + add(object, pos.x, pos.z, true); } - if(object.getParentId() == 0) - add(object, pos.x, pos.z); - PlayerObject ghost = (PlayerObject) object.getSlottedObject("ghost"); - if (ghost != null) { - - String objectShortName = object.getCustomName().toLowerCase(); - - if (object.getCustomName().contains(" ")) { - String[] splitName = object.getCustomName().toLowerCase().split(" "); - objectShortName = splitName[0].toLowerCase(); - } - - core.chatService.playerStatusChange(objectShortName, (byte) 1); - - if (ghost.getFriendList().isEmpty() == false) { - // Find out what friends are online/offline - for (String friend : ghost.getFriendList()) { - SWGObject friendObject = (SWGObject) core.chatService.getObjectByFirstName(friend); - if (friendObject == null) - continue; - if(friendObject.isInQuadtree() == true) { - ChatFriendsListUpdate onlineNotifyStatus = new ChatFriendsListUpdate(friend, (byte) 1); - client.getSession().write(onlineNotifyStatus.serialize()); - - } else { - ChatOnChangeFriendStatus changeStatus = new ChatOnChangeFriendStatus(object.getObjectID(), friend, 0); - client.getSession().write(changeStatus.serialize()); - } - } - } - } + + core.weatherService.sendWeather(object); + //core.chatService.joinChatRoom(object.getCustomName().toLowerCase(), "SWG." + core.getGalaxyName() + "." + object.getPlanet().getName()); + if (!object.hasSkill(ghost.getProfessionWheelPosition())) { - object.showFlyText("cbt_spam", "skill_up", (float) 2.5, new RGB(154, 205, 50), 0); + object.showFlyText(OutOfBand.ProsePackage("@cbt_spam:skill_up"), 2.5f, new RGB(154, 205, 50), 0, true); object.playEffectObject("clienteffect/skill_granted.cef", ""); object.playMusic("sound/music_acq_bountyhunter.snd"); core.skillService.addSkill(object, ghost.getProfessionWheelPosition()); } + if(object.getGroupId() != 0 && core.objectService.getObject(object.getGroupId()) instanceof GroupObject) + object.makeAware(core.objectService.getObject(object.getGroupId())); + + if(object.getPosture() == Posture.Dead) + core.playerService.sendCloningWindow(object, false); + + ChatRoom zoneRoom = core.chatService.getChatRoomByAddress("SWG." + core.getGalaxyName() + "." + object.getPlanet().getName() + ".Planet"); + if (zoneRoom != null) { + String chatName = object.getCustomName().toLowerCase(); + + if (chatName.contains(" ")) + chatName = chatName.split(" ")[0]; + + if (!zoneRoom.getUserList().contains(chatName)) { + core.chatService.joinChatRoom(chatName, zoneRoom.getRoomId(), true); + } + } + } public void transferToPlanet(SWGObject object, Planet planet, Point3D newPos, Quaternion newOrientation, SWGObject newParent) { @@ -575,24 +1037,22 @@ public class SimulationService implements INetworkDispatch { Point3D position = object.getPosition(); if(object.getParentId() == 0 && object.getContainer() == null) { - remove(object, position.x, position.z); + remove(object, position.x, position.z, true); } else { object.getContainer().remove(object); } - HashSet oldObservers = new HashSet(object.getObservers()); + /*HashSet oldObservers = new HashSet(object.getObservers()); for(Client observerClient : oldObservers) { if(observerClient.getParent() != null) { observerClient.getParent().makeUnaware(object); } - } + }*/ synchronized(object.getMutex()) { - object.getAwareObjects().removeAll(object.getAwareObjects()); - } object.setPlanet(planet); @@ -606,7 +1066,7 @@ public class SimulationService implements INetworkDispatch { HeartBeatMessage heartBeat = new HeartBeatMessage(); session.write(heartBeat.serialize()); - CmdStartScene startScene = new CmdStartScene((byte) 0, object.getObjectID(), object.getPlanet().getPath(), object.getTemplate(), newPos.x, newPos.y, newPos.z, System.currentTimeMillis() / 1000, object.getRadians()); + CmdStartScene startScene = new CmdStartScene((byte) 0, object.getObjectID(), object.getPlanet().getPath(), object.getTemplate(), newPos.x, newPos.y, newPos.z, core.getGalacticTime() / 1000, object.getRadians()); session.write(startScene.serialize()); handleZoneIn(client); @@ -614,15 +1074,62 @@ public class SimulationService implements INetworkDispatch { } - public void openContainer(SWGObject requester, SWGObject container) { if(container.getPermissions().canView(requester, container)) { OpenedContainerMessage opm = new OpenedContainerMessage(container.getObjectID()); - if(requester.getClient() != null && requester.getClient().getSession() != null) + if(requester.getClient() != null && requester.getClient().getSession() != null && !(container instanceof CreatureObject)){ requester.getClient().getSession().write(opm.serialize()); + } + } + } + + public void transform(TangibleObject obj, Point3D position) + { + Point3D oldPosition = obj.getPosition(); + Point3D newPosition = new Point3D(oldPosition.x + position.x, oldPosition.y + position.y, oldPosition.z + position.z); + + teleport(obj, newPosition, obj.getOrientation(), obj.getParentId()); + } + + public void transform(SWGObject obj, float rotation, Point3D axis) + { + rotation *= (Math.PI / 180); + + Quaternion oldRotation = obj.getOrientation(); + Quaternion newRotation = resources.common.MathUtilities.rotateQuaternion(oldRotation, rotation, axis); + + teleport(obj, obj.getPosition(), newRotation, obj.getParentId()); + } + + public void rotateToFaceTarget(SWGObject object, SWGObject target) { + float radians = (float) (((float) Math.atan2(target.getPosition().z - object.getPosition().z, target.getPosition().x - object.getPosition().x)) - object.getRadians()); + transform(object, radians, object.getPosition()); + } + + public void faceTarget(SWGObject object, SWGObject target) { + float direction = (float) Math.atan2(target.getWorldPosition().x - object.getWorldPosition().x, target.getWorldPosition().z - object.getWorldPosition().z); + + if (direction < 0) { + direction = (float) (2 * Math.PI + direction); } + if (Math.abs(direction - object.getRadians()) < 0.05) { + return; + } + + Quaternion quaternion = new Quaternion((float) Math.cos(direction / 2), 0, (float) Math.sin(direction / 2), 0); + + if (quaternion.y < 0.0f && quaternion.w > 0.0f) { + quaternion.y *= -1; + quaternion.w *= -1; + } + + if (object.getContainer() instanceof CellObject) { + NGECore.getInstance().simulationService.moveObject(object, object.getPosition(), quaternion, object.getMovementCounter(), 0, (CellObject) object.getContainer()); + } else { + NGECore.getInstance().simulationService.moveObject(object, object.getPosition(), quaternion, object.getMovementCounter(), 0, null); + } } public void teleport(SWGObject obj, Point3D position, Quaternion orientation, long cellId) { @@ -639,15 +1146,23 @@ public class SimulationService implements INetworkDispatch { DataTransformWithParent dataTransform = new DataTransformWithParent(new Point3D(position.x, position.y, position.z), orientation, obj.getMovementCounter(), obj.getObjectID(), cellId); ObjControllerMessage objController = new ObjControllerMessage(0x1B, dataTransform); obj.notifyObservers(objController, true); + + obj.setPosition(position); + obj.setOrientation(orientation); } } public boolean checkLineOfSight(SWGObject obj1, SWGObject obj2) { - + long startTime = System.nanoTime(); if(obj1.getPlanet() != obj2.getPlanet()) return false; + // If obj1 is container of obj2 vice versa + if (obj1 == obj2.getContainer() || obj2 == obj1.getContainer() || obj1 == obj2.getGrandparent() || obj2 == obj1.getGrandparent()) { + return true; + } + if(obj1.getGrandparent() != null || obj2.getGrandparent() != null) { if(obj1.getGrandparent() == obj2.getGrandparent()) @@ -660,6 +1175,10 @@ public class SimulationService implements INetworkDispatch { float heightOrigin = 1.f; float heightDirection = 1.f; + if (obj2.getTemplate().equals("object/tangible/inventory/shared_character_inventory.iff")){ + obj2 = obj2.getContainer(); // LOS message fix on corpse + } + if(obj1 instanceof CreatureObject) heightOrigin = getHeightOrigin((CreatureObject) obj1); @@ -673,7 +1192,7 @@ public class SimulationService implements INetworkDispatch { Point3D end = new Point3D(position2.x, position2.y + heightDirection, position2.z); float distance = position1.getDistance2D(position2); - List inRangeObjects = get(obj1.getPlanet(), position1.x, position1.z, 150); + List inRangeObjects = get(obj1.getPlanet(), position1.x, position1.z, (int) (distance + 10)); for(SWGObject object : inRangeObjects) { @@ -701,6 +1220,7 @@ public class SimulationService implements INetworkDispatch { for(Mesh3DTriangle tri : tris) { if(ray.intersectsTriangle(tri, distance) != null) { + //System.out.println("Collision took: " + (System.nanoTime() - startTime) + " ns (collided)"); // System.out.println("Collided with " + object.getTemplate() + " X: " + object.getPosition().x + " Y: " + object.getPosition().y + " Z: " + object.getPosition().z); return false; } @@ -723,8 +1243,8 @@ public class SimulationService implements INetworkDispatch { return checkLineOfSightWorldToCell(obj1, obj2, cell); } - /*List segments = new ArrayList(); - Line3D.splitIntoSegments(new Vec3D(position1.x, position1.y + 1, position1.z), new Vec3D(position2.x, position2.y + 1, position2.z), (float) 0.5, segments, true); + List segments = new ArrayList(); + Line3D.splitIntoSegments(new Vec3D(position1.x, position1.y + 1, position1.z), new Vec3D(position2.x, position2.y + 1, position2.z), (float) 1, segments, true); for(Vec3D segment : segments) { float y = segment.y; @@ -732,11 +1252,12 @@ public class SimulationService implements INetworkDispatch { int height = (int) core.terrainService.getHeight(obj1.getPlanetId(), segment.x, segment.z); // round down to int if(height > y) { - System.out.println("Collision with terrain"); + //System.out.println("Collision took: " + (System.nanoTime() - startTime) + " ns (terrain collision)"); return false; } - }*/ - + } + //System.out.println("Collision took: " + (System.nanoTime() - startTime) + " ns (did not collide)"); + return true; } @@ -754,7 +1275,14 @@ public class SimulationService implements INetworkDispatch { Point3D origin = new Point3D(position1.x, position1.y + 1, position1.z); Point3D end = new Point3D(position2.x, position2.y + 1, position2.z); - Vector3D direction = new Vector3D(end.x - origin.x, end.y - origin.y, end.z - origin.z).normalize(); + Vector3D direction = new Vector3D(end.x - origin.x, end.y - origin.y, end.z - origin.z); + + if (direction.getNorm() != 0) { + direction.normalize(); + } else { + System.out.println("WARNING: checkLineOfSightInBuilding: Vector norm was 0."); + } + float distance = position1.getDistance2D(position2); Ray ray = new Ray(origin, direction); @@ -766,6 +1294,7 @@ public class SimulationService implements INetworkDispatch { MeshVisitor meshVisitor; if(!cellMeshes.containsKey(cell.mesh)) { meshVisitor = ClientFileManager.loadFile(cell.mesh, MeshVisitor.class); + meshVisitor.getTriangles(); cellMeshes.put(cell.mesh, meshVisitor); } else { meshVisitor = cellMeshes.get(cell.mesh); @@ -860,15 +1389,63 @@ public class SimulationService implements INetworkDispatch { public float getHeightOrigin(CreatureObject creature) { - float height = (float) (creature.getHeight() - 0.3); + float height = (float) (creature.getHeight()/* - 0.3*/); - if(creature.getPosture() == 2 || creature.getPosture() == 13) - height = 0.3f; + if(creature.getPosture() == 2 || creature.getPosture() == 13 || creature.getPosture() == 14) + height = 0.45f; else if(creature.getPosture() == 1) height /= 2.f; return height; } + + public void notifyPlanet(Planet planet, IoBuffer packet) { + + ConcurrentHashMap clients = core.getActiveConnectionsMap(); + + for(Client client : clients.values()) { + + if(client.getParent() == null) + continue; + + if(client.getParent().getPlanet() == null) + continue; + else if(client.getParent().getPlanet() == planet) + client.getSession().write(packet); + + } + + } + + public void notifyAllClients(IoBuffer packet) { + + ConcurrentHashMap clients = core.getActiveConnectionsMap(); + + for(Client client : clients.values()) { + + if(client.getParent() == null) + continue; + + client.getSession().write(packet); + + } + + } + + public void checkForCollidables(SWGObject object) { + Point3D objectPos = object.getWorldPosition(); + List collidables = getCollidables(object.getPlanet(), objectPos.x, objectPos.z, 2050); + + for(AbstractCollidable collidable : collidables) { + collidable.doCollisionCheck(object); + } + } + + public class MoveEvent implements Event { + + public SWGObject object; + + } } diff --git a/src/services/SkillModService.java b/src/services/SkillModService.java index d84576b0..042e7bc9 100644 --- a/src/services/SkillModService.java +++ b/src/services/SkillModService.java @@ -21,59 +21,139 @@ ******************************************************************************/ package services; +import java.util.HashMap; import java.util.Map; -import resources.objects.SWGList; +import resources.common.FileUtilities; import resources.objects.creature.CreatureObject; +import resources.skills.SkillMod; import main.NGECore; -import engine.resources.objects.SkillMod; +import engine.clientdata.ClientFileManager; +import engine.clientdata.visitors.DatatableVisitor; import engine.resources.service.INetworkDispatch; import engine.resources.service.INetworkRemoteEvent; public class SkillModService implements INetworkDispatch { private NGECore core; - + private DatatableVisitor visitor; + private Map skillModMap = new HashMap(); + public SkillModService(NGECore core) { this.core = core; - } - - public void addSkillMod(CreatureObject creature, String skillMod, int value) { - core.scriptService.callScript("scripts/skillMods/", skillMod, "add", core, creature, skillMod, value); - - } - - public void deductSkillMod(CreatureObject creature, String skillMod, int value) { - - core.scriptService.callScript("scripts/skillMods/", skillMod, "deduct", core, creature, skillMod, value); - - } - - public boolean hasSkillMod(CreatureObject creature, String skillMod) { - - SWGList skillMods = creature.getSkillMods(); - - if (skillMods.isEmpty()) { return false; } - - for (SkillMod skill : skillMods) { - if (skill.getSkillModString() == skillMod) { - return true; + try { + visitor = ClientFileManager.loadFile("datatables/expertise/skill_mod_listing.iff", DatatableVisitor.class); + + for (int i = 0; i < visitor.getRowCount(); i++) { + if (visitor.getObject(i, 0) != null) { + skillModMap.put((String) visitor.getObject(i, 0), i); + } } - else { return false; } + } catch (InstantiationException | IllegalAccessException e) { + e.printStackTrace(); + } + } + + /* + * @description Adds a skillMod. + * @param creature Creature to add to. + * @param name Name of the skillMod + * @param base Base to add to it. + * @param modifier Modifier to add to it. + */ + public void addSkillMod(CreatureObject creature, String name, int base, int modifier) { + int divisor = (skillModMap.get(name) == null) ? 0 : (Integer) visitor.getObject(skillModMap.get(name), 5); + + if (FileUtilities.doesFileExist("scripts/skillMods/" + name + ".py")) { + core.scriptService.callScript("scripts/skillMods/", name, "add", core, creature, new SkillMod(base, modifier), divisor); } - return false; + synchronized(creature.getMutex()) { + SkillMod skillMod = creature.getSkillMods().get(name); + + if (base > 0 || modifier > 0) { + if (skillMod == null) { + creature.getSkillMods().put(name, new SkillMod(base, modifier)); + } else { + skillMod.addBase(base); + skillMod.addModifier(modifier); + creature.getSkillMods().put(name, skillMod); + } + } + } } - + + public void addSkillMod(CreatureObject creature, String name, int base) { + addSkillMod(creature, name, base, 0); + } + + public void addSkillMod(CreatureObject creature, String name, SkillMod skillMod) { + addSkillMod(creature, name, skillMod.getBase(), skillMod.getModifier()); + } + + public SkillMod getSkillMod(CreatureObject actor, String name) { + return actor.getSkillMods().get(name); + } + + public int getSkillModBase(CreatureObject creature, String name) { + return creature.getSkillModBase(name); + } + + public int getSkillModModifier(CreatureObject creature, String name) { + return creature.getSkillModModifier(name); + } + + public float getSkillModValue(CreatureObject creature, String name) { + int divisor = (skillModMap.get(name) == null) ? 0 : (Integer) visitor.getObject(skillModMap.get(name), 5); + return creature.getSkillModValue(name, divisor); + } + + public void deductSkillMod(CreatureObject creature, String name, SkillMod skillMod) { + deductSkillMod(creature, name, skillMod.getBase(), skillMod.getModifier()); + } + + public void deductSkillMod(CreatureObject creature, String name, int base) { + deductSkillMod(creature, name, base, 0); + } + + public void deductSkillMod(CreatureObject creature, String name, int base, int modifier) { + int divisor = (skillModMap.get(name) == null) ? 0 : (Integer) visitor.getObject(skillModMap.get(name), 5); + + if (FileUtilities.doesFileExist("scripts/skillMods/" + name + ".py")) { + core.scriptService.callScript("scripts/skillMods/", name, "deduct", core, creature, new SkillMod(base, modifier), divisor); + } + + synchronized(creature.getMutex()) { + SkillMod skillMod = creature.getSkillMods().get(name); + + if (skillMod == null || (base <= 0 && modifier <= 0)) { + return; + } else { + skillMod.deductBase(base); + skillMod.deductModifier(modifier); + + if (skillMod.getBase() > 0 || skillMod.getModifier() > 0) { + creature.getSkillMods().put(name, skillMod); + } else { + removeSkillMod(creature, name); + } + } + } + } + + public void removeSkillMod(CreatureObject creature, String name) { + creature.getSkillMods().remove(name); + } + @Override public void insertOpcodes(Map arg0, Map arg1) { } - + @Override public void shutdown() { } - + } diff --git a/src/services/SkillService.java b/src/services/SkillService.java index 7d3a358d..fcd3ec36 100644 --- a/src/services/SkillService.java +++ b/src/services/SkillService.java @@ -21,18 +21,35 @@ ******************************************************************************/ package services; +import java.nio.ByteOrder; +import java.util.ArrayList; +import java.util.List; import java.util.Map; +import java.util.TreeMap; +import org.apache.mina.core.buffer.IoBuffer; +import org.apache.mina.core.session.IoSession; +import org.python.core.Py; +import org.python.core.PyObject; + +import protocol.swg.ExpertiseRequestMessage; +import protocol.swg.ObjControllerMessage; +import protocol.swg.objectControllerObjects.SetProfessionTemplate; +import protocol.swg.objectControllerObjects.UiPlayEffect; +import resources.common.Console; +import resources.common.FileUtilities; +import resources.common.ObjControllerOpcodes; +import resources.common.Opcodes; import resources.objects.creature.CreatureObject; import resources.objects.player.PlayerObject; - import main.NGECore; - import engine.clientdata.ClientFileManager; import engine.clientdata.visitors.DatatableVisitor; +import engine.clients.Client; import engine.resources.service.INetworkDispatch; import engine.resources.service.INetworkRemoteEvent; +@SuppressWarnings("unused") public class SkillService implements INetworkDispatch { private NGECore core; @@ -62,7 +79,7 @@ public class SkillService implements INetworkDispatch { //String parent = ((String) skillTable.getObject(s, 1)); //int graphType = ((Integer) skillTable.getObject(s, 2)); boolean godOnly = ((Boolean) skillTable.getObject(s, 3)); - //boolean isTitle = ((Boolean) skillTable.getObject(s, 4)); + boolean isTitle = ((Boolean) skillTable.getObject(s, 4)); boolean isProfession = ((Boolean) skillTable.getObject(s, 5)); boolean isHidden = ((Boolean) skillTable.getObject(s, 6)); int pointsRequired = ((Integer) skillTable.getObject(s, 8)); @@ -79,11 +96,18 @@ public class SkillService implements INetworkDispatch { String[] schematicsGranted = ((String) skillTable.getObject(s, 23)).split(","); String[] schematicsRevoked = ((String) skillTable.getObject(s, 24)).split(","); + boolean speciesSkill = skill.matches("^species.+$"); + + if (isTitle == true) { + core.playerService.addPlayerTitle(player, skill); + } + if (isProfession) { return; } - - if (godOnly || isHidden) { + + //exempt species skills from being returned -- they're marked godOnly but really meant to be granted + if ((!speciesSkill) && (godOnly || isHidden)) { return; } @@ -101,7 +125,6 @@ public class SkillService implements INetworkDispatch { for (String skillName : skillsRequired) { if (skillName != "" && !creature.hasSkill(skillName)) { - System.out.println("Skill Name: " + skillName); return; } } @@ -132,8 +155,36 @@ public class SkillService implements INetworkDispatch { } } - for (String ability : abilities) { - creature.addAbility(ability); + if (skill.contains("expertise")) { + if (FileUtilities.doesFileExist("scripts/expertise/" + skill + ".py")) { + PyObject method = core.scriptService.getMethod("scripts/expertise/", skill, "addAbilities"); + + if (method != null && method.isCallable()) { + method.__call__(Py.java2py(core), Py.java2py(creature), Py.java2py(player)); + } + } + } else { + Map abilitiesMap = new TreeMap(); + + for (String ability : abilities) { + if (!creature.hasAbility(ability)) { + abilitiesMap.put(ability, 1); + } + } + + creature.getAbilities().putAll(abilitiesMap); + + for (String expertiseName : creature.getSkills()) { + if (expertiseName.startsWith("expertise")) { + if (FileUtilities.doesFileExist("scripts/expertise/" + expertiseName + ".py")) { + PyObject method = core.scriptService.getMethod("scripts/expertise/", expertiseName, "addAbilities"); + + if (method != null && method.isCallable()) { + method.__call__(Py.java2py(core), Py.java2py(creature), Py.java2py(player)); + } + } + } + } } for (String skillMod : skillMods) { @@ -162,8 +213,8 @@ public class SkillService implements INetworkDispatch { public void removeSkill(CreatureObject creature, String skill) { PlayerObject player = (PlayerObject) creature.getSlottedObject("ghost"); DatatableVisitor skillTable; - - if (creature.getClient() == null) { + + if (player == null) { return; } @@ -172,7 +223,7 @@ public class SkillService implements INetworkDispatch { } try { - skillTable = ClientFileManager.loadFile("datatables/skills/skills.iff", DatatableVisitor.class); + skillTable = ClientFileManager.loadFile("datatables/skill/skills.iff", DatatableVisitor.class); for (int s = 0; s < skillTable.getRowCount(); s++) { if (skillTable.getObject(s, 0) != null) { @@ -180,7 +231,7 @@ public class SkillService implements INetworkDispatch { String parent = ((String) skillTable.getObject(s, 1)); //int graphType = ((Integer) skillTable.getObject(s, 2)); boolean godOnly = ((Boolean) skillTable.getObject(s, 3)); - //boolean isTitle = ((Boolean) skillTable.getObject(s, 4)); + boolean isTitle = ((Boolean) skillTable.getObject(s, 4)); boolean isHidden = ((Boolean) skillTable.getObject(s, 6)); int pointsRequired = ((Integer) skillTable.getObject(s, 8)); String[] abilities = ((String) skillTable.getObject(s, 21)).split(","); @@ -188,16 +239,31 @@ public class SkillService implements INetworkDispatch { String[] schematicsGranted = ((String) skillTable.getObject(s, 23)).split(","); String[] schematicsRevoked = ((String) skillTable.getObject(s, 24)).split(","); + if (isTitle) { + core.playerService.removePlayerTitle(player, skill); + Console.println("Removed title: " + skill); + } + if (pointsRequired > 0) { //creature.addExpertisePoints(pointsRequired); } - for (String ability : abilities) { - creature.removeAbility(ability); - } + if (skill.contains("expertise")) { + if (FileUtilities.doesFileExist("scripts/expertise/" + skill + ".py")) { + PyObject method = core.scriptService.getMethod("scripts/expertise/", skill, "removeAbilities"); + + if (method != null && method.isCallable()) { + method.__call__(Py.java2py(core), Py.java2py(creature), Py.java2py(player)); + } + } + } else { + for (String ability : abilities) { + creature.removeAbility(ability); + } + } for (String skillMod : skillMods) { - core.skillModService.deductSkillMod(creature, skillMod.split("=")[0], new Integer(skillMod.split("=")[1])); + if(skillMod.split("=").length == 2) core.skillModService.deductSkillMod(creature, skillMod.split("=")[0], new Integer(skillMod.split("=")[1])); } for (String schematic : schematicsGranted) { @@ -207,6 +273,8 @@ public class SkillService implements INetworkDispatch { for (String schematic : schematicsRevoked) { //player.getDraftSchematicList().add(new DraftSchematic()); } + + creature.removeSkill(skill); } } } @@ -216,8 +284,138 @@ public class SkillService implements INetworkDispatch { } @Override - public void insertOpcodes(Map arg0, Map arg1) { + public void insertOpcodes(Map swgOpcodes, Map objControllerOpcodes) { + swgOpcodes.put(Opcodes.ExpertiseRequestMessage, (session, buffer) -> { + + buffer = buffer.order(ByteOrder.LITTLE_ENDIAN); + buffer.position(0); + + ExpertiseRequestMessage expertise = new ExpertiseRequestMessage(); + expertise.deserialize(buffer); + + Client client = core.getClient(session); + if(client == null) { + System.out.println("NULL Client"); + return; + } + + if(client.getParent() == null) + return; + + CreatureObject creature = (CreatureObject) client.getParent(); + PlayerObject player = (PlayerObject) creature.getSlottedObject("ghost"); + + if(player == null) + return; + + for(String expertiseName : expertise.getExpertiseSkills()) { + if(expertiseName.startsWith("expertise_") && ((caluclateExpertisePoints(creature) - 1) >= 0) && validExpertiseSkill(player, expertiseName)) { // Prevent possible glitches/exploits + addSkill(creature, expertiseName); + } + } + + }); + + objControllerOpcodes.put(ObjControllerOpcodes.SET_PROFESSION_TEMPLATE, (session, buffer) -> { + + buffer = buffer.order(ByteOrder.LITTLE_ENDIAN); + + SetProfessionTemplate profTemplate = new SetProfessionTemplate(); + profTemplate.deserialize(buffer); + String profession = profTemplate.getProfession(); + + Client client = core.getClient(session); + if(client == null) { + System.out.println("NULL Client"); + return; + } + + if(client.getParent() == null) + return; + + CreatureObject creature = (CreatureObject) client.getParent(); + PlayerObject player = (PlayerObject) creature.getSlottedObject("ghost"); + + //System.out.println(profession); + if(player == null || player.getProfession().equals(profession) || profession == null) + return; + + core.playerService.respec(creature, profession); + + }); + + } + + public int caluclateExpertisePoints(CreatureObject creature) + { + int expertisePoints = 0; + try + { + DatatableVisitor table = ClientFileManager.loadFile("datatables/player/player_level.iff", DatatableVisitor.class); + for (int i = 0; i < creature.getLevel(); ++i) expertisePoints += (int) table.getObject(i, 5); + for (String skill : creature.getSkills()) if(skill.startsWith("expertise_")) expertisePoints--; + } + catch (Exception e) { e.printStackTrace(); } + return expertisePoints; + } + + public boolean validExpertiseSkill(PlayerObject player, String skill) + { + try + { + DatatableVisitor table = ClientFileManager.loadFile("datatables/expertise/expertise.iff", DatatableVisitor.class); + String profession; + + switch(player.getProfession()) + { + case "trader_0a": + profession = "trader_dom"; + break; + + case "trader_0b": + profession = "trader_struct"; + break; + + case "trader_0c": + profession = "trader_mun"; + break; + + case "trader_0d": + profession = "trader_eng"; + break; + + default: + profession = player.getProfession().replace("_1a", ""); + break; + } + + for (int s = 0; s < table.getRowCount(); s++) + { + if (table.getObject(s, 0) != null && ((String) table.getObject(s, 0)).equals(skill)) + { + if(((String)table.getObject(s, 7)).equals(profession) || ((String)table.getObject(s, 7)).equals("all")) return true; + else return false; + } + } + } + catch (Exception e) { e.printStackTrace(); } + return false; + } + + public void resetExpertise(CreatureObject creature) { + List skills = new ArrayList(creature.getSkills()); + skills.stream().filter(s -> s.contains("expertise")).forEach(s -> removeSkill(creature, s)); + + creature.getBuffList().stream().forEach(buff -> creature.removeBuff(buff)); + } + + public void sendRespecWindow(CreatureObject creature) { + if(creature.getClient() == null) + return; + UiPlayEffect ui = new UiPlayEffect(creature.getObjectID(), "showMediator=ws_professiontemplateselect"); + ObjControllerMessage objController = new ObjControllerMessage(0x0B, ui); + creature.getClient().getSession().write(objController.serialize()); } @Override diff --git a/src/services/StaticService.java b/src/services/StaticService.java index e4531ba1..d0c93c5a 100644 --- a/src/services/StaticService.java +++ b/src/services/StaticService.java @@ -21,14 +21,27 @@ ******************************************************************************/ package services; +import java.io.IOException; +import java.nio.file.FileVisitResult; +import java.nio.file.FileVisitor; +import java.nio.file.Files; +import java.nio.file.Path; +import java.nio.file.Paths; +import java.nio.file.SimpleFileVisitor; +import java.nio.file.attribute.BasicFileAttributes; import java.util.ArrayList; import java.util.List; import java.util.Map; +import resources.common.FileUtilities; import resources.objects.building.BuildingObject; - +import resources.objects.cell.CellObject; +import services.ai.AIActor; +import services.spawn.MobileTemplate; import main.NGECore; - +import engine.clientdata.ClientFileManager; +import engine.clientdata.visitors.PortalVisitor; +import engine.resources.config.Config; import engine.resources.objects.SWGObject; import engine.resources.scene.Planet; import engine.resources.scene.Point3D; @@ -39,80 +52,190 @@ import engine.resources.service.INetworkRemoteEvent; public class StaticService implements INetworkDispatch { private NGECore core; - + public StaticService(NGECore core) { this.core = core; } - + public void spawnStatics() { - spawnPlanetStaticObjs("rori"); - spawnPlanetStaticObjs("naboo"); - spawnPlanetStaticObjs("tatooine"); + Config options = new Config(); + options.setFilePath("options.cfg"); + final boolean buildoutsDisabled = ((options.loadConfigFile() && options.getInt("LOAD.BUILDOUT_OBJECTS") == 0) ? true : false); + + for (Planet planet : core.terrainService.getPlanetList()) { + if (FileUtilities.doesFileExist("scripts/static_spawns/" + planet.getName())) { + Path p = Paths.get("scripts/static_spawns/" + planet.getName()); + + FileVisitor fv = new SimpleFileVisitor() { + @Override + public FileVisitResult visitFile(Path file, BasicFileAttributes attrs) throws IOException { + if (file.getFileName().toString().endsWith(".py")) { + try { + core.scriptService.callScript("scripts/static_spawns/" + planet.getName() + "/", file.getFileName().toString().replace(".py", ""), "addPlanetSpawns", core, planet); + } catch (Exception e) { + if (!buildoutsDisabled) { + e.printStackTrace(); + } + } + } + + return FileVisitResult.CONTINUE; + } + }; + + try { + Files.walkFileTree(p, fv); + } catch (IOException e) { + e.printStackTrace(); + } + } + + if (FileUtilities.doesFileExist("scripts/static_spawns/" + planet.getName() + ".py")) { + //core.scriptService.callScript("scripts/static_spawns/", planet.getName(), "addPlanetSpawns", core, planet); + } + + System.out.println("Loaded static objects for " + planet.getName()); + } + } + + public SWGObject spawnObject(String template, String planetName, long cellId, float x, float y, float z, float qY, float qW) { + return spawnObject(template, planetName, cellId, x, y, z, qW, 0, qY, 0); + } + + public SWGObject spawnObject(String template, String planetName, SWGObject cell, float x, float y, float z, float qW, float qX, float qY, float qZ) { + return spawnObject(template, planetName, ((cell == null) ? 0L : cell.getObjectID()), x, y, z, qW, qX, qY, qZ); + } + + public SWGObject spawnObject(String template, String planetName, long cellId, float x, float y, float z, float qW, float qX, float qY, float qZ) { + return spawnObject(template, planetName, cellId, x, y, z, qW, qX, qY, qZ, -1); + } + + public SWGObject spawnObject(String template, String planetName, SWGObject cell, float x, float y, float z, float qW, float qX, float qY, float qZ, int respawnTime) { + return spawnObject(template, planetName, ((cell == null) ? 0L : cell.getObjectID()), x, y, z, qW, qX, qY, qZ, respawnTime); + } + + public SWGObject spawnObject(String template, String planetName, long cellId, float x, float y, float z, float qW, float qX, float qY, float qZ, int respawnTime) { + Planet planet = core.terrainService.getPlanetByName(planetName); + + if (planet == null) { + System.err.println("StaticService: Can't spawn static object because planet is null."); + return null; + } + + long buildingId = 0; + int cellNumber = 0; + + SWGObject cell = core.objectService.getObject(cellId); + + if (cellId != 0 && cell == null) { + System.err.println("CellId invalid for template " + template); + return null; + } + + if (cell != null && cell.getContainer() != null && cell.getContainer() instanceof BuildingObject) { + buildingId = cell.getContainer().getObjectId(); + cellNumber = ((BuildingObject) cell.getContainer()).getCellNumberByObjectId(cellId); + } + + long objectId = core.objectService.getDOId(planetName, template, 0, buildingId, cellNumber, x, y, z); + + SWGObject object = null; + + MobileTemplate mobileTemplate = core.spawnService.getMobileTemplate(template); + + if (mobileTemplate != null) { + if(respawnTime > 0) { + try { + MobileTemplate clone = (MobileTemplate) mobileTemplate.clone(); + object = core.spawnService.spawnCreature(template, objectId, planetName, cellId, x, y, z, qW, qX, qY, qZ, (short) -1); + clone.setRespawnTime(respawnTime); + ((AIActor) object.getAttachment("AI")).setMobileTemplate(clone); + } catch (CloneNotSupportedException e) { + e.printStackTrace(); + } + } else { + object = core.spawnService.spawnCreature(template, objectId, planetName, cellId, x, y, z, qW, qX, qY, qZ, (short) -1); + } + } else { + object = core.objectService.createObject(template, objectId, planet, new Point3D(x, y, z), new Quaternion(qW, qX, qY, qZ), null, true, true); + } + + if (object == null) { + System.err.println("Static object is null with id " + objectId + " and template " + template + "."); + return null; + } + + if (objectId != 0 && object.getObjectID() != objectId) { + System.err.println("StaticService: ObjectId " + objectId + " was taken for object with template " + object.getTemplate() + ". Replacement: " + object.getObjectID()); + } + + if (mobileTemplate != null) { + return object; + } + + boolean checkCells = false; // shouldn't be needed; for debugging + + if (object instanceof BuildingObject && checkCells) { + BuildingObject building = (BuildingObject) object; + + Map attributes = building.getTemplateData().getAttributes(); + + if (building.getCells().size() == 0 && attributes.containsKey("portalLayoutFilename") && ((String) attributes.get("portalLayoutFilename")).length() > 0) { + String portalLayoutFilename = (String) attributes.get("portalLayoutFilename"); + + try { + PortalVisitor portal = ClientFileManager.loadFile(portalLayoutFilename, PortalVisitor.class); + + for (int i = 1; i <= portal.cellCount; i++) { + long cellObjectId = core.objectService.getDOId(planetName, "object/cell/shared_cell.iff", 0, object.getObjectID(), i, x, y, z); + CellObject childCell = (CellObject) core.objectService.createObject("object/cell/shared_cell.iff", cellObjectId, core.terrainService.getPlanetByName(planetName), new Point3D(0, 0, 0), new Quaternion(0, 0, 1, 0), null, true, true); + childCell.setCellNumber(i); + building.add(childCell); + } + } catch (InstantiationException | IllegalAccessException e) { + e.printStackTrace(); + } + } + } + + if (cellId == 0) { + if (!core.simulationService.add(object, (float) x, (float) z, true)) { + System.err.println("StaticService: Quadtree insert failed for: " + template); + } + } else { + if (cell == null) { + System.err.println("StaticService: Cell not found for: " + template); + return object; + } + + cell.add(object); + } + + return object; + } + + public List getCloningFacilitiesByPlanet(Planet planet) { + List objects = core.simulationService.get(planet, 0, 0, 8300); + List cloners = new ArrayList(); + + for (SWGObject obj : objects) { + if(obj instanceof BuildingObject && (obj.getTemplate().contains("cloning_facility") || obj.getTemplate().contains("cloning_tatooine") || obj.getTemplate().contains("cloning_naboo") || obj.getTemplate().contains("cloning_corellia"))) { + if(!obj.getTemplate().equals("object/building/general/shared_cloning_facility_general.iff")) + cloners.add(obj); + } + } + + return cloners; } @Override public void insertOpcodes(Map arg0, Map arg1) { } - + @Override public void shutdown() { } - public void spawnPlanetStaticObjs(String planet) { - Planet planetObj = (Planet) core.terrainService.getPlanetByName(planet); - core.scriptService.callScript("scripts/static_spawns/", "addPlanetSpawns", planetObj.getName(), core, planetObj); - System.out.println("Loaded static objs for " + planetObj.getName()); - } - - public void spawnObject(String template, String planetName, long cellId, float x, float y, float z, float qY, float qW) { - - Planet planet = core.terrainService.getPlanetByName(planetName); - - //System.out.println("template: " + template + " x: " + x + " y: " + y + " z: " + z); - - if(planet == null) { - System.out.println("Cant spawn static object because planet is null"); - return; - } - - SWGObject object = core.objectService.createObject(template, 0, planet, new Point3D(x, y, z), new Quaternion(qW, 0, qY, 0)); - - if(object == null) { - System.out.println("Static object is null"); - return; - } - - if(cellId == 0) { - boolean add = core.simulationService.add(object, (float) x, (float) z); - if(!add) - System.out.println("Quadtree insert failed for: " + template); - } - else { - SWGObject parent = core.objectService.getObject(cellId); - if(parent == null) { - System.out.println("Cell not found"); - return; - } - parent.add(object); - } - - } - - public List getCloningFacilitiesByPlanet(Planet planet) { - - List objects = core.simulationService.get(planet, 0, 0, 8300); - List cloners = new ArrayList(); - - for(SWGObject obj : objects) { - if(obj instanceof BuildingObject && (obj.getTemplate().contains("cloning_facility") || obj.getTemplate().contains("cloning_tatooine") || obj.getTemplate().contains("cloning_naboo") || obj.getTemplate().contains("cloning_corellia"))) { - if(!obj.getTemplate().equals("object/building/general/shared_cloning_facility_general.iff")) - cloners.add(obj); - } - } - return cloners; - - } - } diff --git a/src/services/SurveyService.java b/src/services/SurveyService.java new file mode 100644 index 00000000..1088c505 --- /dev/null +++ b/src/services/SurveyService.java @@ -0,0 +1,690 @@ +/******************************************************************************* + * Copyright (c) 2013 + * + * This File is part of NGECore2. + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see . + * + * Using NGEngine to work with NGECore2 is making a combined work based on NGEngine. + * Therefore all terms and conditions of the GNU Lesser General Public License cover the combination. + ******************************************************************************/ +package services; + +import java.util.Collections; +import java.util.Map; +import java.util.Random; +import java.util.Vector; +import java.util.concurrent.Executors; +import java.util.concurrent.ScheduledExecutorService; +import java.util.concurrent.ScheduledFuture; +import java.util.concurrent.TimeUnit; + +import protocol.swg.PlayClientEffectLocMessage; +import resources.harvest.SurveyTool; +import resources.objects.creature.CreatureObject; +import resources.objects.player.PlayerObject; +import resources.objects.resource.GalacticResource; +import resources.objects.resource.ResourceContainerObject; +import resources.objects.resource.ResourceRoot; +import resources.objects.tangible.TangibleObject; +import services.sui.SUIWindow; +import services.sui.SUIWindow.SUICallback; +import services.sui.SUIWindow.Trigger; +import main.NGECore; +import engine.resources.container.Traverser; +import engine.resources.objects.SWGObject; +import engine.resources.service.INetworkDispatch; +import engine.resources.service.INetworkRemoteEvent; + +/** + * @author Charon + */ +public class SurveyService implements INetworkDispatch { + + private NGECore core; + private final ScheduledExecutorService scheduler = Executors.newScheduledThreadPool(1); + public Vector activeSurveyTools = new Vector(); + + public SurveyService(NGECore core) { + this.core = core; + scheduleSurveyService(); + core.commandService.registerCommand("requestsurvey"); + core.commandService.registerCommand("requestcoreSample"); + } + + + public void scheduleSurveyService(){ + + final ScheduledFuture task = scheduler.scheduleAtFixedRate(new Runnable() { + + @Override + public void run() { + ServiceProcessing(); + } + + }, 10, 1000, TimeUnit.MILLISECONDS); + + } + + public void ServiceProcessing(){ + synchronized(activeSurveyTools){ + // All tools sampling + SurveyTool removeTool=null; + for (SurveyTool surveyTool : activeSurveyTools){ + if (surveyTool==null) + continue; + CreatureObject user = (CreatureObject) NGECore.getInstance().objectService.getObject(surveyTool.getUserID()); + if (surveyTool.getCurrentlySurveying()){ + // Check if survey process has finished + if (System.currentTimeMillis()>surveyTool.getLastSurveyTime()+3000){ + removeTool = surveyTool; + surveyTool.setCurrentlySurveying(false); + surveyTool.sendConstructSurveyMapMessage(); + } + } + if (surveyTool.getCurrentlySampling()){ + // Check if sampling process has finished + if ((System.currentTimeMillis()>surveyTool.getLastSampleTime()+3000) && !surveyTool.getCurrentlyCoolingDown()){ + surveyTool.setCurrentlyCoolingDown(true); + // Update inventory + handleSamplingStages(surveyTool); + + } + // Check if sampling recovery is over + long sampleRecoveryTime = surveyTool.getRecoveryTime(); + if (System.currentTimeMillis()>surveyTool.getLastSampleTime()+sampleRecoveryTime && ! surveyTool.isExceptionalState()){ + // kick off another sampling attempt + surveyTool.setCurrentlyCoolingDown(false); + continueSampling(surveyTool); + } + if (user.getPosture()!=1){ + surveyTool.setExceptionalState(false); + surveyTool.setCurrentlySampling(false); + removeTool = surveyTool; + if (user.getPosture()==0) + user.sendSystemMessage("You stand up", (byte) 0); + + user.sendSystemMessage("@survey:sample_cancel", (byte) 0); + } + } + } + if (removeTool!=null) + activeSurveyTools.remove(removeTool); // remove after notification + + activeSurveyTools.removeAll(Collections.singleton(null)); + } + } + + public void handleSamplingStages(SurveyTool surveyTool){ + + if (surveyTool.isExceptionalState()) + return; + CreatureObject crafter = (CreatureObject) NGECore.getInstance().objectService.getObject(surveyTool.getUserID()); + PlayerObject player = (PlayerObject) crafter.getSlottedObject("ghost"); + GalacticResource sampleResource = (GalacticResource) NGECore.getInstance().objectService.getObject(surveyTool.getSurveyResourceID()); + int stackCount = 0; + boolean gamblingwon = false; + //ResourceContainerObject container = player.getRecentContainer(); + ResourceContainerObject container = null; + // Attempt to find container with the currently sampled resource in + // player inventory tree + ResourceContainerObject foundContainer = findResourceContainerInInventory(crafter,sampleResource); + if (foundContainer!=null) + container = foundContainer; + + if (! surveyTool.isRecoveryMode()) + stackCount = core.resourceService.getResourceSampleQuantity(crafter, sampleResource); + else { // handle particularly rich case + stackCount = core.resourceService.getResourceSampleQuantity(crafter, sampleResource); + int recoveryChance = new Random().nextInt(100); + if (recoveryChance<99){ + gamblingwon = true; + stackCount *= 3; + } + surveyTool.setRecoveryMode(false); + } + + if (container!=null) { + if (container.getReferenceID()==sampleResource.getId()) { + int stackCountToUpdate = container.getStackCount(); + if (stackCountToUpdate 0) && (!surveyTool.isRecoveryMode())) { + String resourceContainerIFF = ResourceRoot.CONTAINER_TYPE_IFF_SIGNIFIER[sampleResource.getResourceRoot().getContainerType()]; + ResourceContainerObject containerObject = (ResourceContainerObject) core.objectService.createObject(resourceContainerIFF, crafter.getPlanet()); + containerObject.initializeStats(sampleResource); + containerObject.setProprietor(crafter); + SWGObject crafterInventory = crafter.getSlottedObject("inventory"); + containerObject.setStackCount(stackCount,crafter); + crafterInventory.add(containerObject); + player.setRecentContainer(containerObject); + } + + } + } else { // Mismatch -> new container + + String resourceContainerIFF = ResourceRoot.CONTAINER_TYPE_IFF_SIGNIFIER[sampleResource.getResourceRoot().getContainerType()]; + if ((stackCount > 0) && (!surveyTool.isRecoveryMode())) { + ResourceContainerObject containerObject = (ResourceContainerObject) core.objectService.createObject(resourceContainerIFF, crafter.getPlanet()); + containerObject.initializeStats(sampleResource); + containerObject.setProprietor(crafter); + container.setStackCount(stackCount,crafter); + SWGObject crafterInventory = crafter.getSlottedObject("inventory"); + crafterInventory.add(containerObject); + player.setRecentContainer(containerObject); + } + + } + } else { // create new container, first sample + + if ((stackCount > 0) && (!surveyTool.isRecoveryMode())) { + + String resourceContainerIFF = ResourceRoot.CONTAINER_TYPE_IFF_SIGNIFIER[sampleResource.getResourceRoot().getContainerType()]; + ResourceContainerObject containerObject = (ResourceContainerObject) core.objectService.createObject(resourceContainerIFF, crafter.getPlanet()); + containerObject.initializeStats(sampleResource); + containerObject.setProprietor(crafter); + //stackCount = core.resourceService.getResourceSampleQuantity(crafter, sampleResource); + containerObject.setStackCount(stackCount,crafter); + SWGObject crafterInventory = crafter.getSlottedObject("inventory"); + crafterInventory.add(containerObject); + player.setRecentContainer(containerObject); + + } + } + + if (gamblingwon) { + crafter.sendSystemMessage("@survey:critical_success", (byte) 0); + core.playerService.giveExperience(crafter,(int)(2.5F*stackCount)); + surveyTool.setExceptionalState(false); + return; + } + + if ((stackCount > 0) && (!surveyTool.isRecoveryMode())) { + // @survey:sample_located + crafter.sendSystemMessage("You successfully locate a " + stackCount + " unit sample of " + sampleResource.getName() + "." , (byte) 0); + core.playerService.giveExperience(crafter,(int)(2.5F*stackCount)); + } + if ((stackCount > 0) && (surveyTool.isRecoveryMode())) { + crafter.sendSystemMessage("@survey:node_recovery", (byte) 0); + core.playerService.giveExperience(crafter,(int)(2.5F*stackCount)); + + } + if ((stackCount == 0) && (!surveyTool.isRecoveryMode())) { + crafter.sendSystemMessage("@survey:sample_failed", (byte) 0); + core.playerService.giveExperience(crafter,(int)(2.5F*stackCount)); + //surveyTool.setRecoveryMode(true); + //surveyTool.setRecoveryTime(System.currentTimeMillis()); + } + } + + + public ResourceContainerObject findResourceContainerInInventory(CreatureObject owner, GalacticResource resource){ + ResourceContainerObject foundContainer = null; + final Vector found = new Vector(); + TangibleObject playerInventory = (TangibleObject) owner.getSlottedObject("inventory"); + playerInventory.viewChildren(owner, false, false, new Traverser() { + @Override + public void process(SWGObject obj) { + + if (obj instanceof ResourceContainerObject){ + ResourceContainerObject container = (ResourceContainerObject) obj; + if (container.getReferenceID()==resource.getId() + && container.getStackCount()0) + foundContainer = found.get(0); + return foundContainer; + } + + public void requestSurvey(CreatureObject crafter, SWGObject target, String commandArgs){ + // Check if crafter has survey skill + +// if (!crafter.hasAbility("surveying")) { // ToDo ! +// crafter.sendSystemMessage("You have insufficient skill to survey", (byte) 0); +// return; +// } + if (target==null) + return; // target object not valid + + SurveyTool surveyTool = (SurveyTool)target; + if (surveyTool.getToolType()==-1) + return; // Survey tool type was not recognized + + surveyTool.setUserID(crafter.getObjectID()); + surveyTool.setRecoveryTime(10000L); + PlayerObject player = (PlayerObject) crafter.getSlottedObject("ghost"); + player.setLastUsedSurveyTool(surveyTool); + if(surveyTool.getCurrentlySampling()) + { + crafter.sendSystemMessage("@survey:survey_sample", (byte) 0); + return; + } + + // QA tool lockup countermeasure + if(surveyTool.getCurrentlySurveying() && surveyTool.getLastSurveyTime() 0.3) { + // Is the tool ready? + if (surveyTool.getCurrentlySampling() || surveyTool.getCurrentlyCoolingDown() ) { + int remaining = 0; // calculate remaining time + crafter.sendSystemMessage("You will be able to sample again in " + remaining + " seconds.", (byte) 0); // "@survey:tool_recharge_time" + } else { + + // ToDo: Find out if NGE really still did this +// if (sampleResource.getResourceRoot().getResourceClass().equals("Radioactive")){ //resourceRoot.getResourceClass("Radioactive"); +// createRadioactivityWarningSUIWindow(crafter, surveyTool); +// return; +// } + + crafter.setPosture((byte) 1); + crafter.sendSystemMessage("You kneel", (byte) 0); + + + //int samplingCost=125-(int)crafter.getSkillMod("surveying").getModifier(); + int samplingCost=125; + if (crafter.getAction()-samplingCost<0){ // Check HAM + crafter.sendSystemMessage("@survey:gamble_no_action", (byte) 0); + crafter.setPosture((byte) 0); + surveyTool.setCurrentlySampling(false); + surveyTool.setExceptionalState(false); + removeActiveSurveyTool(surveyTool); + return; + } + + surveyTool.setCurrentlySampling(true); + surveyTool.setLastSampleTime(System.currentTimeMillis()); + addActiveSurveyTool(surveyTool); + + String effectFile = surveyTool.getSampleEffectString(); + PlayClientEffectLocMessage cEffMsg = new PlayClientEffectLocMessage(effectFile,crafter.getPlanet().getName(),crafter.getPosition()); + crafter.getClient().getSession().write(cEffMsg.serialize()); + + crafter.sendSystemMessage("You begin to sample for " + commandArgs, (byte) 0); + surveyTool.setCurrentlySampling(true); + + crafter.setAction(crafter.getAction()-samplingCost); + + } + } else { + crafter.sendSystemMessage("There are only trace amounts of " + commandArgs + " here. Find a higher concentration of the resource, and try sampling again.", (byte) 0); // "@survey:trace_amount:" + surveyTool.setCurrentlySampling(false); + surveyTool.setCurrentlySurveying(false); + //surveyTool.setLastSampleTime(System.currentTimeMillis()); + } + } else { + crafter.sendSystemMessage("You must survey for " + commandArgs + " before you can sample for it.", (byte) 0); + surveyTool.setExceptionalState(false); + surveyTool.setCurrentlySampling(false); + removeActiveSurveyTool(surveyTool); + } + } + + public void continueSampling(SurveyTool surveyTool){ + + surveyTool.setCurrentlyCoolingDown(false); + CreatureObject crafter = (CreatureObject) NGECore.getInstance().objectService.getObject(surveyTool.getUserID()); + + if (crafter.getPosture()!=1){ + crafter.sendSystemMessage("@survey:sample_cancel", (byte) 0); + surveyTool.setExceptionalState(false); + surveyTool.setCurrentlySampling(false); + removeActiveSurveyTool(surveyTool); + return; + } + if (crafter.getPosture()==13) + return; + + if (crafter.isInCombat()){ + crafter.sendSystemMessage("@survey:sample_cancel_attack", (byte) 0); + return; + } + + GalacticResource sampleResource = (GalacticResource) NGECore.getInstance().objectService.getObject(surveyTool.getSurveyResourceID()); + float localConcentration = sampleResource.deliverConcentrationForSurvey(crafter.getPlanetId(), crafter.getPosition().x, crafter.getPosition().z); + //float localConcentration = 1.0F; + if (localConcentration > 0.1) { + crafter.setPosture((byte) 1); + + // ToDo: overfilling resource container with continuesampling + + //int samplingCost=125-(int)crafter.getSkillMod("surveying").getModifier(); + int samplingCost=125; + if (crafter.getAction()-samplingCost<0 && ! surveyTool.isExceptionalState()){ + crafter.sendSystemMessage("@survey:gamble_no_action", (byte) 0); + crafter.setPosture((byte) 0); + surveyTool.setCurrentlySampling(false); + surveyTool.setExceptionalState(false); + //removeActiveSurveyTool(surveyTool); + return; + } + + if (! surveyTool.isRecoveryMode()){ + int exceptionalChance = new Random().nextInt(100); // 7 was good + if (exceptionalChance<20 && ! surveyTool.isExceptionalState()){ + crafter.sendSystemMessage("@survey:gnode_d", (byte) 0); + surveyTool.setExceptionalState(true); + + final SUIWindow window = core.suiService.createSUIWindow("Script.listBox", crafter, surveyTool, 0); + window.setProperty("bg.caption.lblTitle:Text", "@base_player:swg"); + window.setProperty("Prompt.lblPrompt:Text", "@survey:gnode_d"); + window.addListBoxMenuItem("@survey:gnode_1", 0); + window.addListBoxMenuItem("@survey:gnode_2", 1); + window.setProperty("btnOk:visible", "True"); + window.setProperty("btnCancel:visible", "True"); + window.setProperty("btnOk:Text", "@ok"); + window.setProperty("btnCancel:Text", "@cancel"); + Vector returnList = new Vector(); + returnList.add("List.lstList:SelectedRow"); + + window.addHandler(0, "", Trigger.TRIGGER_OK, returnList, new SUICallback() { + @Override + public void process(SWGObject owner, int eventType, Vector returnList) { + int index = Integer.parseInt(returnList.get(0)); + if (index==0){ + // Continue working + CreatureObject crafter = (CreatureObject)owner; + PlayerObject player = (PlayerObject) crafter.getSlottedObject("ghost"); + if (crafter!=null){ + SurveyTool surveyTool = player.getLastUsedSurveyTool(); + if (surveyTool!=null){ + surveyTool.setExceptionalState(false); + core.suiService.closeSUIWindow(owner, 0); + continueSampling(surveyTool); + return; + } + } + } else { + // Attempt to recover + CreatureObject crafter = (CreatureObject)owner; + PlayerObject player = (PlayerObject) crafter.getSlottedObject("ghost"); + SurveyTool surveyTool = player.getLastUsedSurveyTool(); + if (surveyTool!=null){ + surveyTool.setRecoveryMode(true); + surveyTool.setExceptionalState(false); + core.suiService.closeSUIWindow(owner, 0); + continueSampling(surveyTool); + return; + } + } + } + }); + + core.suiService.openSUIWindow(window); + return; + } + + surveyTool.setCurrentlySampling(true); + surveyTool.setLastSampleTime(System.currentTimeMillis()); + + String effectFile = surveyTool.getSampleEffectString(); + PlayClientEffectLocMessage cEffMsg = new PlayClientEffectLocMessage(effectFile,crafter.getPlanet().getName(),crafter.getPosition()); + crafter.getClient().getSession().write(cEffMsg.serialize()); + + crafter.setAction(crafter.getAction()-samplingCost); + + } else { + // sampling cost for recovery + //surveyTool.setRecoveryMode(false); + samplingCost = 200; + if (crafter.getAction()-samplingCost<0){ + crafter.sendSystemMessage("@survey:gamble_no_action", (byte) 0); + crafter.setPosture((byte) 0); + surveyTool.setCurrentlySampling(false); + surveyTool.setExceptionalState(false); + surveyTool.setLastSampleTime(System.currentTimeMillis()); + removeActiveSurveyTool(surveyTool); + return; + } + surveyTool.setCurrentlySampling(true); + surveyTool.setLastSampleTime(System.currentTimeMillis()); + surveyTool.setExceptionalState(false); + + String effectFile = surveyTool.getSampleEffectString(); + PlayClientEffectLocMessage cEffMsg = new PlayClientEffectLocMessage(effectFile,crafter.getPlanet().getName(),crafter.getPosition()); + crafter.getClient().getSession().write(cEffMsg.serialize()); + crafter.setAction(crafter.getAction()-samplingCost); + + } + + surveyTool.setCurrentlySampling(true); + surveyTool.setLastSampleTime(System.currentTimeMillis()); + + String effectFile = surveyTool.getSampleEffectString(); + PlayClientEffectLocMessage cEffMsg = new PlayClientEffectLocMessage(effectFile,crafter.getPlanet().getName(),crafter.getPosition()); + crafter.getClient().getSession().write(cEffMsg.serialize()); + + crafter.setAction(crafter.getAction()-samplingCost); + + } else { + crafter.sendSystemMessage("There are only trace amounts of " + sampleResource.getName() + " here. Find a higher concentration of the resource, and try sampling again.", (byte) 0); // "@survey:trace_amount:" + surveyTool.setCurrentlySampling(false); + surveyTool.setCurrentlySurveying(false); + } + } + + public void addActiveSurveyTool(SurveyTool tool){ + synchronized(activeSurveyTools){ + if (! activeSurveyTools.contains(tool)) + activeSurveyTools.add(tool); + } + } + + public Vector getActiveSurveyTools(){ + return activeSurveyTools; + } + + public void removeActiveSurveyTool(SurveyTool surveyTool){ + synchronized(activeSurveyTools){ + activeSurveyTools.remove(surveyTool); + } + } + + public boolean toolIsInList(SurveyTool surveyTool){ + Vector toolList = getActiveSurveyTools(); + for (SurveyTool tool : toolList){ + if (tool.getTanoID()==surveyTool.getTanoID()) + return true; + } + return false; + } + + @Override + public void insertOpcodes(Map arg0, Map arg1) { + + } + + @Override + public void shutdown() { + // TODO Auto-generated method stub + + } + + public SUICallback handleExceptionalInput(SWGObject crafter,SUIWindow suiWindow){ + + SUICallback callback = suiWindow.getCallbackByEventId(1); + return callback; + } + + + public void createSurveyRangeSUIWindow(SWGObject owner, TangibleObject target) { + final SUIWindow window = core.suiService.createSUIWindow("Script.listBox", owner, target, 0); + window.setProperty("bg.caption.lblTitle:Text", "@base_player:swg"); + window.setProperty("Prompt.lblPrompt:Text", "@survey:select_range"); + window.addListBoxMenuItem("64m x 3pts", 0); + window.addListBoxMenuItem("128m x 4pts", 1); + window.addListBoxMenuItem("192m x 4pts", 2); + window.addListBoxMenuItem("256m x 5pts", 3); + window.addListBoxMenuItem("320m x 5pts", 4); + window.setProperty("btnOk:visible", "True"); + window.setProperty("btnCancel:visible", "True"); + window.setProperty("btnOk:Text", "@ok"); + window.setProperty("btnCancel:Text", "@cancel"); + Vector returnList = new Vector(); + returnList.add("List.lstList:SelectedRow"); + final SurveyTool outerSurveyTool = (SurveyTool)target; + + window.addHandler(0, "", Trigger.TRIGGER_OK, returnList, new SUICallback() { + @Override + public void process(SWGObject owner, int eventType, Vector returnList) { + CreatureObject crafter = (CreatureObject)owner; + //crafter.sendSystemMessage("handleSurveyRangeInput process", (byte) 0); + if (crafter!=null) { + if (outerSurveyTool!=null){ + int index = Integer.parseInt(returnList.get(0)); + if (index==0){ + outerSurveyTool.setSurveyRangeSetting((byte)0); + } + if (index==1){ + outerSurveyTool.setSurveyRangeSetting((byte)1); + } + if (index==2){ + outerSurveyTool.setSurveyRangeSetting((byte)2); + } + if (index==3){ + outerSurveyTool.setSurveyRangeSetting((byte)3); + } + if (index==4){ + outerSurveyTool.setSurveyRangeSetting((byte)4); + } + } + } + } + }); + core.suiService.openSUIWindow(window); + } + + public void createRadioactivityWarningSUIWindow(SWGObject owner, TangibleObject target) { + // ToDo: + final SUIWindow window = core.suiService.createSUIWindow("Script.messageBox", owner, target, 0); + window.setProperty("bg.caption.lblTitle:Text", "@base_player:swg"); + window.setProperty("Prompt.lblPrompt:Text", "@survey:radioactive_sample_d"); + window.setProperty("Prompt.lblPrompt:Text", "@survey:radioactive_sample_t"); + window.setProperty("btnOk:visible", "True"); + window.setProperty("btnCancel:visible", "True"); + window.setProperty("btnOk:Text", "@ok"); + window.setProperty("btnCancel:Text", "@cancel"); + + Vector returnList = new Vector(); + returnList.add("List.lstList:SelectedRow"); + + window.addHandler(0, "", Trigger.TRIGGER_OK, returnList, new SUICallback() { + @Override + public void process(SWGObject owner, int eventType, Vector returnList) { + ((CreatureObject)owner).sendSystemMessage("Rad confirmed", (byte) 0); + } + }); + window.addHandler(1, "", Trigger.TRIGGER_CANCEL, returnList, new SUICallback() { + @Override + public void process(SWGObject owner, int eventType, Vector returnList) { + ((CreatureObject)owner).sendSystemMessage("Rad declined", (byte) 0); + } + }); + core.suiService.openSUIWindow(window); + } + + public SUICallback handleSurveyRangeInput(SWGObject crafter,SUIWindow suiWindow){ + SUICallback callback = suiWindow.getCallbackByEventId(1); + core.suiService.closeSUIWindow(crafter, 0); + return callback; + } + +} \ No newline at end of file diff --git a/src/services/TerrainService.java b/src/services/TerrainService.java index d1786eb0..e930ddd3 100644 --- a/src/services/TerrainService.java +++ b/src/services/TerrainService.java @@ -26,9 +26,17 @@ import java.util.Collections; import java.util.HashMap; import java.util.List; import java.util.Map; +import java.util.concurrent.ConcurrentHashMap; +import resources.common.FileUtilities; +import resources.common.collidables.CollidableCircle; + +import engine.clientdata.ClientFileManager; +import engine.clientdata.visitors.DatatableVisitor; import engine.resources.config.Config; +import engine.resources.objects.SWGObject; import engine.resources.scene.Planet; +import engine.resources.scene.Point3D; import main.NGECore; @@ -36,13 +44,66 @@ public class TerrainService { private NGECore core; private List planets = Collections.synchronizedList(new ArrayList()); + private Map> noBuildAreas = new ConcurrentHashMap>(); public TerrainService(NGECore core) { - - this.core = core; - + this.core = core; } + public void loadClientPois() { + + try { + + DatatableVisitor poiTable = ClientFileManager.loadFile("datatables/clientpoi/clientpoi.iff", DatatableVisitor.class); + + for (int i = 0; i < poiTable.getRowCount(); i++) { + + Planet planet = getPlanetByName((String) poiTable.getObject(i, 0)); + + if(planet == null) + continue; + + float x = (Float) poiTable.getObject(i, 4); + float z = (Float) poiTable.getObject(i, 6); + + CollidableCircle poiArea = new CollidableCircle(new Point3D(x, 0, z), 150, planet); + noBuildAreas.get(planet).add(poiArea); + + } + + } catch (InstantiationException | IllegalAccessException e) { + e.printStackTrace(); + } + + } + + private void loadClientRegions(Planet planet) { + + if(!FileUtilities.doesFileExist("clientdata/datatables/clientregion/" + planet.getName() + ".iff")) + return; + + try { + + DatatableVisitor regionTable = ClientFileManager.loadFile("datatables/clientregion/" + planet.getName() + ".iff", DatatableVisitor.class); + + for (int i = 0; i < regionTable.getRowCount(); i++) { + + float x = (Float) regionTable.getObject(i, 1); + float z = (Float) regionTable.getObject(i, 2); + float radius = (Float) regionTable.getObject(i, 3); + + CollidableCircle region = new CollidableCircle(new Point3D(x, 0, z), radius, planet); + noBuildAreas.get(planet).add(region); + + } + + } catch (InstantiationException | IllegalAccessException e) { + e.printStackTrace(); + } + + } + + public boolean isWater(int planetId, float x, float z) { if(getPlanetByID(planetId) == null) @@ -90,7 +151,7 @@ public class TerrainService { public Planet getPlanetByName(String name) { for (int i = 0; i < planets.size(); i++) { - if (planets.get(i).getName().equals(name)) { + if (planets.get(i).getName().equalsIgnoreCase(name)) { return planets.get(i); } } @@ -112,6 +173,8 @@ public class TerrainService { Planet planet = new Planet(ID, name, path, loadSnapshot); planets.add(planet); core.mapService.addPlanet(planet); + noBuildAreas.put(planet, new ArrayList()); + loadClientRegions(planet); } @@ -122,15 +185,35 @@ public class TerrainService { for(final Planet planet : planets) { if(planet.getSnapshotVisitor() != null) { - Thread thread = new Thread(new Runnable() { + Thread thread = new Thread(() -> { - @Override - public void run() { - Config config = new Config(); - config.setFilePath("options.cfg"); - - if (config.loadConfigFile() && config.getInt("LOAD.SNAPSHOT_OBJECTS") > 0) { + Config config = new Config(); + config.setFilePath("options.cfg"); + boolean loaded = config.loadConfigFile(); + + if (loaded && config.getInt("LOAD.SNAPSHOT_OBJECTS") > 0) { + try { core.objectService.loadSnapshotObjects(planet); + } catch (Exception e) { + e.printStackTrace(); + } + } + + if (loaded && config.getInt("LOAD.BUILDOUT_OBJECTS") > 0) { + if (! config.keyExists("LOAD.BUILDOUT_ONLY_FOR")){ + try { + core.objectService.loadBuildoutObjects(planet); + } catch (InstantiationException | IllegalAccessException e) { + e.printStackTrace(); + } + } else { + if (planet.getName().equals(config.getString("LOAD.BUILDOUT_ONLY_FOR"))){ + try { + core.objectService.loadBuildoutObjects(planet); + } catch (InstantiationException | IllegalAccessException e) { + e.printStackTrace(); + } + } } } @@ -144,14 +227,73 @@ public class TerrainService { // wait for threads to finish loading for(Planet planet : planets) { try { - threadMap.get(planet).join(); + if(threadMap.get(planet) != null) + threadMap.get(planet).join(); } catch (InterruptedException e) { e.printStackTrace(); } } + /*synchronized(core.objectService.getObjectList()) { + + for(SWGObject object : core.objectService.getObjectList().values()) { + + if(!(object instanceof BuildingObject) || object.isInSnapshot()) + continue; + + BuildingObject building = (BuildingObject) object; + final Set creatures = new HashSet(); + building.viewChildren(building, true, true, new Traverser() { + + @Override + public void process(SWGObject obj) { + if(obj instanceof CreatureObject) + creatures.add((CreatureObject) obj); + } + + }); + for(CreatureObject creature : creatures) { + long parentId = creature.getParentId(); + creature.getContainer().remove(creature); + creature.setParentId(parentId); + } + if(building.getTransaction() == null) + continue; + building.createTransaction(core.getBuildingODB().getEnvironment()); + core.getBuildingODB().put(building, Long.class, BuildingObject.class, building.getTransaction()); + building.getTransaction().commitSync(); + + } + + }*/ + } + public boolean canBuildAtPosition(SWGObject object, float x, float z) { + + if(isWater(object.getPlanet(), x, z)) + return false; + + Point3D position = new Point3D(x, 0, z); + + for(CollidableCircle noBuildArea : noBuildAreas.get(object.getPlanet())) { + if(noBuildArea.doesCollide(position)) { + return false; + } + } + + return true; + + } + + public boolean isWater(int planetId, Point3D worldPosition) { + if(getPlanetByID(planetId) == null) + return false; + + Planet planet = getPlanetByID(planetId); + + return planet.getTerrainVisitor().isWater(worldPosition.x, worldPosition.z); + } diff --git a/src/services/TreasureService.java b/src/services/TreasureService.java new file mode 100644 index 00000000..4684d045 --- /dev/null +++ b/src/services/TreasureService.java @@ -0,0 +1,88 @@ +/******************************************************************************* + * Copyright (c) 2013 + * + * This File is part of NGECore2. + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see . + * + * Using NGEngine to work with NGECore2 is making a combined work based on NGEngine. + * Therefore all terms and conditions of the GNU Lesser General Public License cover the combination. + ******************************************************************************/ +package services; + +import java.util.Collections; +import java.util.Map; +import java.util.Vector; +import java.util.concurrent.Executors; +import java.util.concurrent.ScheduledExecutorService; +import java.util.concurrent.ScheduledFuture; +import java.util.concurrent.TimeUnit; +import main.NGECore; +import engine.resources.objects.SWGObject; +import engine.resources.service.INetworkDispatch; +import engine.resources.service.INetworkRemoteEvent; + +public class TreasureService implements INetworkDispatch { + + private NGECore core; + private final ScheduledExecutorService scheduler = Executors.newScheduledThreadPool(1); + + private Vector allRequesters = new Vector(); + + public TreasureService(NGECore core) { + this.core = core; + + scheduleTreasureService(); + } + + @Override + public void insertOpcodes(Map swgOpcodes, Map objControllerOpcodes) { + + } + + public void scheduleTreasureService(){ + + final ScheduledFuture task = scheduler.scheduleAtFixedRate(new Runnable() { + + @Override + public void run() { + ServiceProcessing(); + } + + }, 10, 5000, TimeUnit.MILLISECONDS); + } + + + public void ServiceProcessing(){ + synchronized(allRequesters){ + for (SWGObject requester : allRequesters){ + if (requester!=null) + handleRequester(requester); + } + allRequesters.removeAll(Collections.singleton(null)); + } + + } + + public void handleRequester(SWGObject requester){ + + } + + @Override + public void shutdown() { + // TODO Auto-generated method stub + + } + +} diff --git a/src/services/WeatherService.java b/src/services/WeatherService.java index 8fb1cd1c..d007d307 100644 --- a/src/services/WeatherService.java +++ b/src/services/WeatherService.java @@ -21,6 +21,91 @@ ******************************************************************************/ package services; +import java.util.Map; +import java.util.Random; +import java.util.concurrent.ConcurrentHashMap; +import java.util.concurrent.Executors; +import java.util.concurrent.ScheduledExecutorService; +import java.util.concurrent.TimeUnit; +import protocol.swg.ServerWeatherMessage; +import resources.objects.creature.CreatureObject; +import engine.resources.scene.Planet; +import main.NGECore; + public class WeatherService { + + private NGECore core; + private Map weatherStability = new ConcurrentHashMap(); + private Map currentWeatherMap = new ConcurrentHashMap(); + private final ScheduledExecutorService scheduler = Executors.newScheduledThreadPool(1); + + // TODO: randomise cloud vectors, proper algorithm for weather type rolls + + public WeatherService(NGECore core) { + this.core = core; + } + + public void loadPlanetSettings(){ + core.scriptService.callScript("scripts/", "weather", "init", core); + } + + public void addPlanetSettings(String planetName, int stability, byte defaultWeather) { + + final Planet planet = core.terrainService.getPlanetByName(planetName); + + if(planet == null) + return; + + if(stability > 100) + stability = 100; + if(defaultWeather > 4 || defaultWeather < 0) + defaultWeather = 0; + + weatherStability.put(planet, stability); + currentWeatherMap.put(planet, defaultWeather); + + scheduler.scheduleAtFixedRate(() -> { + runWeatherCycle(planet); + }, 30, 30, TimeUnit.MINUTES); + + } + + public void runWeatherCycle(Planet planet) { + + int stability = weatherStability.get(planet); + + Random rand = new Random(); + int weatherRoll = rand.nextInt(100); + byte weatherType; + + if(weatherRoll < stability) + weatherType = 0; + else { + weatherType = (byte) (rand.nextInt(4) + 1); + } + + currentWeatherMap.put(planet, weatherType); + core.simulationService.notifyPlanet(planet, new ServerWeatherMessage(weatherType, 1, 0, 0).serialize()); + //System.out.println("Weather type changed to: " + weatherType + " on: " + planet.getName()); + + } + + public void sendWeather(CreatureObject player) { + + if(player.getClient() == null || player.getPlanet() == null) + return; + + byte weatherType; + + if(!currentWeatherMap.containsKey(player.getPlanet())) { + weatherType = 0; + } else { + weatherType = currentWeatherMap.get(player.getPlanet()); + } + + ServerWeatherMessage weatherMsg = new ServerWeatherMessage(weatherType, 1, 0, 0); + player.getClient().getSession().write(weatherMsg.serialize()); + + } } diff --git a/src/services/ai/AIActor.java b/src/services/ai/AIActor.java new file mode 100644 index 00000000..160f8b65 --- /dev/null +++ b/src/services/ai/AIActor.java @@ -0,0 +1,357 @@ +/******************************************************************************* + * Copyright (c) 2013 + * + * This File is part of NGECore2. + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see . + * + * Using NGEngine to work with NGECore2 is making a combined work based on NGEngine. + * Therefore all terms and conditions of the GNU Lesser General Public License cover the combination. + ******************************************************************************/ +package services.ai; + +import java.util.Map; +import java.util.Vector; +import java.util.concurrent.ConcurrentHashMap; +import java.util.concurrent.ScheduledExecutorService; +import java.util.concurrent.ScheduledFuture; +import java.util.concurrent.TimeUnit; + +import main.NGECore; +import net.engio.mbassy.listener.Handler; +import engine.clients.Client; +import engine.resources.objects.SWGObject; +import engine.resources.scene.Point3D; +import engine.resources.scene.Quaternion; +import resources.datatables.Options; +import resources.objects.cell.CellObject; +import resources.objects.creature.CreatureObject; +import resources.objects.tangible.TangibleObject; +import services.ai.states.AIState; +import services.ai.states.AIState.StateResult; +import services.ai.states.AttackState; +import services.ai.states.DeathState; +import services.ai.states.IdleState; +import services.ai.states.RetreatState; +import services.combat.CombatEvents.DamageTaken; +import services.spawn.MobileTemplate; + +import java.util.Random; + +public class AIActor { + + private CreatureObject creature; + private Point3D spawnPosition; + private volatile AIState currentState; + private CreatureObject followObject; + private Vector movementPoints = new Vector(); + private MobileTemplate mobileTemplate; + private ScheduledExecutorService scheduler; + private Map damageMap = new ConcurrentHashMap(); + private volatile boolean hasReachedPosition; + private long lastAttackTimestamp; + private ScheduledFuture regenTask; + private ScheduledFuture aggroCheckTask; + private boolean isStalking = false; + private byte milkState = 0; + private boolean hasBeenHarvested = false; + + public AIActor(CreatureObject creature, Point3D spawnPosition, ScheduledExecutorService scheduler) { + this.creature = creature; + this.spawnPosition = spawnPosition; + this.scheduler = scheduler; + creature.getEventBus().subscribe(this); + this.currentState = new IdleState(); + regenTask = scheduler.scheduleAtFixedRate(() -> { + if(creature.getHealth() < creature.getMaxHealth() && !creature.isInCombat() && creature.getPosture() != 13 && creature.getPosture() != 14) + creature.setHealth(creature.getHealth() + (36 + creature.getLevel() * 4)); + }, 0, 1000, TimeUnit.MILLISECONDS); + if(creature.getOption(Options.AGGRESSIVE)) { + aggroCheckTask = scheduler.scheduleAtFixedRate(() -> { + if(creature == null || creature.getObservers().isEmpty() || creature.isInCombat() || isStalking) + return; + creature.getObservers().stream().map(Client::getParent).filter(obj -> obj.inRange(creature.getWorldPosition(), 10)).forEach((obj) -> { + if(new Random().nextFloat() <= 0.33 || creature.isInCombat() || isStalking) { + /*if(mobileTemplate.isStalker()) { + setFollowObject((CreatureObject) obj); + setCurrentState(new StalkState()); + } else */ + addDefender((CreatureObject) obj); + + } + }); + }, 0, 5000, TimeUnit.MILLISECONDS); + + } + } + + public CreatureObject getCreature() { + return creature; + } + + public void setCreature(CreatureObject creature) { + this.creature = creature; + } + + public Point3D getSpawnPosition() { + return spawnPosition; + } + + public void setSpawnPosition(Point3D spawnPosition) { + this.spawnPosition = spawnPosition; + } + + public void addDefender(CreatureObject defender) { + addDefender(defender, false); + } + + + public void addDefender(CreatureObject defender, boolean isAssisting) { + creature.addDefender(defender); + if(followObject == null) + setFollowObject(defender); + setCurrentState(new AttackState()); + if(!isAssisting) { + NGECore.getInstance().simulationService.get(creature.getPlanet(), creature.getWorldPosition().x, creature.getWorldPosition().z, 38).stream().filter((obj) -> + obj instanceof CreatureObject && + obj.getAttachment("AI") != null && + ((AIActor) obj.getAttachment("AI")).getMobileTemplate().getSocialGroup().equals(getMobileTemplate().getSocialGroup()) && + obj.inRange(creature.getWorldPosition(), ((AIActor) obj.getAttachment("AI")).getMobileTemplate().getAssistRange()) + ).forEach((obj) -> ((AIActor) obj.getAttachment("AI")).addDefender(defender, true)); + } + } + + public void removeDefender(CreatureObject defender) { + creature.removeDefender(defender); + damageMap.remove(defender); + defender.removeDefender(creature); + if(followObject == defender) { + setFollowObject(getHighestDamageDealer()); + if(creature.getDefendersList().size() == 0) + setCurrentState(new RetreatState()); + } + } + + public CreatureObject getHighestDamageDealer() { + CreatureObject highestDamageDealer = null; + highestDamageDealer = damageMap.keySet().stream().max((c1, c2) -> damageMap.get(c1) - damageMap.get(c2)).orElse(null); + // return first defender if no damage has been dealt + if(highestDamageDealer == null) { + for(TangibleObject tangible : creature.getDefendersList().toArray(new TangibleObject[]{})) { + if(tangible instanceof CreatureObject) + return (CreatureObject) tangible; + } + } + return highestDamageDealer; + } + + public AIState getCurrentState() { + return currentState; + } + + public void setCurrentState(AIState currentState) { + try { + if(currentState.getClass() == this.currentState.getClass()) + return; + if(this.currentState != null) + doStateAction(this.currentState.onExit(this)); + this.currentState = currentState; + doStateAction(currentState.onEnter(this)); + } catch (Exception e) { + e.printStackTrace(); + } + } + + public CreatureObject getFollowObject() { + return followObject; + } + + public void setFollowObject(CreatureObject followObject) { + this.followObject = followObject; + } + + public Vector getMovementPoints() { + return movementPoints; + } + + public void setMovementPoints(Vector movementPoints) { + this.movementPoints = movementPoints; + } + + public MobileTemplate getMobileTemplate() { + return mobileTemplate; + } + + public void setMobileTemplate(MobileTemplate mobileTemplate) { + this.mobileTemplate = mobileTemplate; + } + + public void scheduleMovement() { + scheduler.schedule(() -> { + try { + doStateAction(currentState.move(AIActor.this)); + } catch (Exception e) { + e.printStackTrace(); + } + }, 500, TimeUnit.MILLISECONDS); + } + + public void scheduleRecovery() { + scheduler.schedule(() -> { + try { + doStateAction(currentState.recover(AIActor.this)); + } catch (Exception e) { + e.printStackTrace(); + } + }, 2000, TimeUnit.MILLISECONDS); + } + + public void setNextPosition(Point3D position) { + movementPoints.add(0, position); + } + + @Handler + public void handleDamage(DamageTaken event) { + CreatureObject attacker = event.attacker; + if(damageMap.containsKey(attacker)) + damageMap.put(attacker, damageMap.get(attacker) + event.damage); + else + damageMap.put(attacker, event.damage); + } + + public Map getDamageMap() { + return damageMap; + } + + public boolean hasReachedPosition() { + return hasReachedPosition; + } + + public void setHasReachedPosition(boolean hasReachedPosition) { + this.hasReachedPosition = hasReachedPosition; + } + + public void faceObject(SWGObject object) { + float direction = (float) Math.atan2(object.getWorldPosition().x - creature.getWorldPosition().x, object.getWorldPosition().z - creature.getWorldPosition().z); + if(direction < 0) + direction = (float) (2 * Math.PI + direction); + if(Math.abs(direction - creature.getRadians()) < 0.05) + return; + Quaternion quaternion = new Quaternion((float) Math.cos(direction / 2), 0, (float) Math.sin(direction / 2), 0); + if (quaternion.y < 0.0f && quaternion.w > 0.0f) { + quaternion.y *= -1; + quaternion.w *= -1; + } + if(creature.getContainer() instanceof CellObject) + NGECore.getInstance().simulationService.moveObject(creature, creature.getPosition(), quaternion, creature.getMovementCounter(), 0, (CellObject) creature.getContainer()); + else + NGECore.getInstance().simulationService.moveObject(creature, creature.getPosition(), quaternion, creature.getMovementCounter(), 0, null); + + } + + public long getLastAttackTimestamp() { + return lastAttackTimestamp; + } + + public void setLastAttackTimestamp(long lastAttackTimestamp) { + this.lastAttackTimestamp = lastAttackTimestamp; + } + + public long getTimeSinceLastAttack() { + return System.currentTimeMillis() - getLastAttackTimestamp(); + } + + public void doStateAction(byte result) { + + switch(result) { + + case StateResult.DEAD: + setCurrentState(new DeathState()); + case StateResult.FINISHED: + case StateResult.UNFINISHED: + return; + case StateResult.IDLE: + setCurrentState(new IdleState()); + //case StateResult.NONE: + // System.out.println("State action returned error result"); + + } + + } + + public void scheduleDespawn() + { + // Sometimes these tasks are null? + try + { + aggroCheckTask.cancel(true); + regenTask.cancel(true); + } + catch(Exception ex ) { } + + scheduler.schedule(new Runnable() + { + @Override + public void run() + { + damageMap.clear(); + followObject = null; + creature.setAttachment("AI", null); + NGECore.getInstance().objectService.destroyObject(creature); + } + + }, 2, TimeUnit.MINUTES); + } + + public ScheduledFuture getRegenTask() { + return regenTask; + } + + public void setRegenTask(ScheduledFuture regenTask) { + this.regenTask = regenTask; + } + + public boolean isStalking() { + return isStalking; + } + + public void setStalking(boolean isStalking) { + this.isStalking = isStalking; + } + + public byte getMilkState() { + synchronized(creature.getMutex()) { + return milkState; + } + } + + public void setMilkState(byte milkState) { + synchronized(creature.getMutex()) { + this.milkState = milkState; + } + } + + public boolean hasBeenHarvested() { + synchronized(creature.getMutex()) { + return hasBeenHarvested; + } + } + + public void setHasBeenHarvested(boolean hasBeenHarvested) { + synchronized(creature.getMutex()) { + this.hasBeenHarvested = hasBeenHarvested; + } + } + +} diff --git a/src/services/ai/AIService.java b/src/services/ai/AIService.java new file mode 100644 index 00000000..1e684fbc --- /dev/null +++ b/src/services/ai/AIService.java @@ -0,0 +1,165 @@ +/******************************************************************************* + * Copyright (c) 2013 + * + * This File is part of NGECore2. + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see . + * + * Using NGEngine to work with NGECore2 is making a combined work based on NGEngine. + * Therefore all terms and conditions of the GNU Lesser General Public License cover the combination. + ******************************************************************************/ +package services.ai; + +import java.util.Map; +import java.util.Map.Entry; +import java.util.Random; +import java.util.Vector; + +import resources.datatables.Difficulty; +import resources.datatables.FactionStatus; +import resources.datatables.GcwType; +import resources.objects.creature.CreatureObject; +import resources.objects.group.GroupObject; +import resources.objects.player.PlayerObject; +import engine.resources.objects.SWGObject; +import engine.resources.scene.Point3D; +import main.NGECore; + +public class AIService { + + private Vector aiActors = new Vector(); + private NGECore core; + + public AIService(NGECore core) { + this.core = core; + } + + public Vector findPath(int planetId, Point3D pointA, Point3D pointB) { + + // TODO: implement cell pathfinding, returning straight line for now + Vector path = new Vector(); + path.add(pointA); + float x = pointB.x - 1 + new Random().nextFloat(); + float z = pointB.z - 1 + new Random().nextFloat(); + Point3D endPoint = new Point3D(x, core.terrainService.getHeight(planetId, x, z), z); + endPoint.setCell(pointB.getCell()); + path.add(endPoint); + return path; + } + + public void awardExperience(AIActor actor) { + + Map damageMap = actor.getDamageMap(); + CreatureObject creature = actor.getCreature(); + int baseXp = getBaseXP(creature); + for(Entry e : damageMap.entrySet()) { + + CreatureObject player = e.getKey(); + PlayerObject ghost = (PlayerObject) player.getSlottedObject("ghost"); + if(ghost == null) + continue; + int damageDealt = e.getValue(); + + short level = (player.getGroupId() == 0) ? player.getLevel() : ((GroupObject) core.objectService.getObject(player.getGroupId())).getGroupLevel(); + int levelDifference = ((creature.getLevel() >= level) ? 0 : (level - creature.getLevel())); + int damagePercent = ((damageDealt / creature.getMaxHealth()) * 100); + int finalXp = (((damagePercent / 100) * baseXp) + (creature.getMaxHealth() / 12)); + finalXp -= ((levelDifference > 20) ? (finalXp - 1) : (((levelDifference * 5) / 100) * finalXp)); + core.playerService.giveExperience(player, finalXp); + } + + } + + public int getBaseXP(CreatureObject creature) { + + int difficulty = creature.getDifficulty(); + int baseXP = 60; + for (int i = 2; i <= creature.getLevel(); i++) { + + if(i < 25) + baseXP += 3; + else if(i < 50) + baseXP += 4; + else if(i < 75) + baseXP += 5; + else if(i < 100) + baseXP += 6; + else + baseXP += 7; + + } + + + //TODO: this is slightly inaccurate if the xp table in the prima guide is correct + if(difficulty == 1) { + baseXP += (6 + ((creature.getLevel() - 1) / 10) * 3); + } else if(difficulty == 2) { + baseXP += (20 + (creature.getLevel() - 1)); + } + + return baseXP; + + } + + public void awardGcw(AIActor actor) { + CreatureObject npc = actor.getCreature(); + + if (core.factionService.isPvpFaction(npc.getFaction())) { + int gcwPoints = 5; + + if (npc.getDifficulty() == Difficulty.ELITE) { + gcwPoints *= 2; + } + + if (npc.getDifficulty() == Difficulty.BOSS) { + gcwPoints *= 5; + } + + //gcwPoints = actor.getMobileTemplate().getGcwPoints(); // We might want to make this get set in mobile templates if it was different for different npcs ie. assault squads. + + for (CreatureObject player : actor.getDamageMap().keySet()) { + if (player.getGroupId() == 0) { + if (player.getFaction().length() > 0 && player.getFactionStatus() > FactionStatus.OnLeave) { + if ((npc.getLevel() / player.getLevel() * 100) < 86) { + continue; + } + + core.gcwService.addGcwPoints(player, gcwPoints, GcwType.Enemy); + } + } else { + for (SWGObject object : ((GroupObject) core.objectService.getObject(player.getGroupId())).getMemberList()) { + CreatureObject member = (CreatureObject) object; + + if (member == null) { + continue; + } + + if (npc.getPlanet().getName().equals(member.getPlanet().getName()) && npc.getPosition().getDistance(member.getPosition()) > 300) { + continue; + } + + if ((npc.getLevel() / member.getLevel() * 100) < 86) { + continue; + } + + if (member.getFaction().length() > 0 && member.getFactionStatus() > FactionStatus.OnLeave) { + core.gcwService.addGcwPoints(member, gcwPoints, GcwType.Enemy); + } + } + } + } + } + } + +} diff --git a/src/services/ai/LairActor.java b/src/services/ai/LairActor.java new file mode 100644 index 00000000..69016ef0 --- /dev/null +++ b/src/services/ai/LairActor.java @@ -0,0 +1,191 @@ +/******************************************************************************* + * Copyright (c) 2013 + * + * This File is part of NGECore2. + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see . + * + * Using NGEngine to work with NGECore2 is making a combined work based on NGEngine. + * Therefore all terms and conditions of the GNU Lesser General Public License cover the combination. + ******************************************************************************/ +package services.ai; + +import java.util.Random; +import java.util.Vector; + +import engine.resources.scene.Point3D; +import main.NGECore; +import net.engio.mbassy.listener.Handler; +import resources.common.SpawnPoint; +import resources.objects.creature.CreatureObject; +import resources.objects.tangible.TangibleObject; +import services.combat.CombatEvents.DamageTaken; + +public class LairActor { + + private Vector creatures = new Vector(); + private TangibleObject lairObject; + private int maxSpawns; + private String creatureTemplate; + private Vector creatureTemplates; + private volatile int spawnWave = 0; + private short level; + + public LairActor(TangibleObject lairObject, String creatureTemplate) { + this.lairObject = lairObject; + this.creatureTemplate = creatureTemplate; + lairObject.getEventBus().subscribe(this); + } + + public LairActor(TangibleObject lairObject, String creatureTemplate, int maxSpawns, short level) { + this.lairObject = lairObject; + this.creatureTemplate = creatureTemplate; + this.maxSpawns = maxSpawns; + this.level = level; + lairObject.getEventBus().subscribe(this); + } + + public LairActor(TangibleObject lairObject, Vector creatureTemplates, int maxSpawns, short level) { + this.lairObject = lairObject; + this.creatureTemplates = creatureTemplates; + this.maxSpawns = maxSpawns; + this.level = level; + lairObject.getEventBus().subscribe(this); + } + + + public Vector getCreatures() { + return creatures; + } + + public TangibleObject getLairObject() { + return lairObject; + } + + public void setLairObject(TangibleObject lairObject) { + this.lairObject = lairObject; + } + + @Handler + public void handleLairDamageEvent(DamageTaken event) { + + spawnNewCreatures(); + + for(AIActor ai : creatures) { + ai.addDefender(event.attacker); + event.attacker.addDefender(ai.getCreature()); + } + + + } + + public void spawnNewCreatures() { + + if(creatures.size() >= maxSpawns) + return; + + int currentCondition = lairObject.getConditionDamage(); + int maxCondition = lairObject.getMaximumCondition(); + + switch(spawnWave) { + // TODO: play damage effect + case 0: + spawnWave++; + break; + case 1: + if((currentCondition / maxCondition) < 0.7) { + spawnWave++; + } else { + return; + } + case 2: + if((currentCondition / maxCondition) < 0.3) { + spawnWave++; + } else { + return; + } + break; + case 3: + return; + + default: + return; + + } + + int creatureAmount = 0; + int tries = 0; + do { + creatureAmount = new Random().nextInt(4) + (maxSpawns / 5); + tries++; + } + while(creatureAmount > maxSpawns && tries < 10); + + for(int i = 0; i < creatureAmount; i++) { + Point3D position = SpawnPoint.getRandomPosition(lairObject.getPosition(), 5, 30, lairObject.getPlanetId()); + if (creatureTemplates!=null) + creatureTemplate = creatureTemplates.get(new Random().nextInt(creatureTemplates.size())); + CreatureObject creature = NGECore.getInstance().spawnService.spawnCreature(creatureTemplate, lairObject.getPlanet().getName(), 0, position.x, position.y, position.z, level); + if(creature == null || !creature.isInQuadtree()) { + System.out.println("NULL Creature"); + continue; + } + creatures.add((AIActor) creature.getAttachment("AI")); + } + + healLair(); + + + } + + private void healLair() { + + if(lairObject.getConditionDamage() == 0 || creatures.isEmpty()) + return; + + int healAmount = 0; + + for(AIActor ai : creatures) { + healAmount += lairObject.getMaximumCondition() / 100; + } + + lairObject.setConditionDamage(lairObject.getConditionDamage() - healAmount); + lairObject.playEffectObject("clienteffect/healing_healdamage.cef", "root"); + + } + + public int getMaxSpawns() { + return maxSpawns; + } + + public void setMaxSpawns(int maxSpawns) { + this.maxSpawns = maxSpawns; + } + + public String getCreatureTemplate() { + return creatureTemplate; + } + + public void setCreatureTemplate(String creatureTemplate) { + this.creatureTemplate = creatureTemplate; + } + + public short getLevel() { + return level; + } + + public void setLevel(short level) { + this.level = level; + } +} diff --git a/src/services/ai/states/AIState.java b/src/services/ai/states/AIState.java new file mode 100644 index 00000000..41eb253b --- /dev/null +++ b/src/services/ai/states/AIState.java @@ -0,0 +1,207 @@ +/******************************************************************************* + * Copyright (c) 2013 + * + * This File is part of NGECore2. + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see . + * + * Using NGEngine to work with NGECore2 is making a combined work based on NGEngine. + * Therefore all terms and conditions of the GNU Lesser General Public License cover the combination. + ******************************************************************************/ +package services.ai.states; + +import java.util.Vector; + +import main.NGECore; + +import engine.resources.scene.Point3D; +import engine.resources.scene.Quaternion; +import resources.objects.cell.CellObject; +import resources.objects.creature.CreatureObject; +import resources.objects.weapon.WeaponObject; +import services.ai.AIActor; + +public abstract class AIState { + + public abstract byte onEnter(AIActor actor) throws Exception; + public abstract byte onExit(AIActor actor) throws Exception; + public abstract byte move(AIActor actor) throws Exception; + public abstract byte recover(AIActor actor) throws Exception; + + public enum StateResult {; + + // default error state result + public static final byte NONE = 0; + // finished with state + public static final byte FINISHED = 1; + // unfinished with state, call recover() + public static final byte UNFINISHED = 2; + public static final byte DEAD = 3; + // for deaggro or idling + public static final byte IDLE = 4; + + } + + public boolean findNewPosition(AIActor actor, float speed, float stopDistance, Point3D newPosition) { + + speed *= 0.5; // 2 updates per second + CreatureObject creature = actor.getCreature(); + NGECore core = NGECore.getInstance(); + Point3D currentPosition = creature.getPosition(); + Point3D targetPosition = null; + float maxDistance = stopDistance; + boolean finished = false; + float dx, dz, newX = 0, newY = 0, newZ = 0; + Vector movementPoints = actor.getMovementPoints(); + CellObject cell = null; + //while(!finished && movementPoints.size() != 0) { + + targetPosition = movementPoints.firstElement(); + Vector path = core.aiService.findPath(creature.getPlanetId(), currentPosition, targetPosition); + + float distanceToTarget = targetPosition.getWorldPosition().getDistance(creature.getWorldPosition()); + + if(distanceToTarget > stopDistance) { + maxDistance = Math.min(speed, distanceToTarget - stopDistance); + } else { + return false; + } + + Point3D oldPosition = null; + float pathDistance = 0; + + for(int i = 1; i < path.size() && !finished; i++) { + + Point3D currentPathPosition = path.get(i); + cell = currentPathPosition.getCell(); + + if(oldPosition == null) + oldPosition = path.get(0); + Point3D oldWorldPos = oldPosition.getWorldPosition(); + + pathDistance += oldWorldPos.getDistance(currentPathPosition.getWorldPosition()); + if(pathDistance >= maxDistance || i == path.size() - 1 || currentPathPosition.getCell() != creature.getContainer()) { + + finished = true; + + if(currentPosition.getWorldPosition().getDistance(currentPathPosition.getWorldPosition()) <= stopDistance && cell == creature.getContainer()) { + if(i == path.size() - 1) + movementPoints.remove(0); + finished = false; + } else { + + if(cell == null) + oldPosition = oldPosition.getWorldPosition(); + else { + if(oldPosition.getCell() == null) + oldPosition = core.simulationService.convertPointToModelSpace(oldPosition, cell.getContainer()); + } + + if(pathDistance > maxDistance) { + + float distance = oldWorldPos.getDistance(currentPathPosition.getWorldPosition()); + float travelDistance = distance - (pathDistance - maxDistance); + // temp fix for melee npcs + travelDistance *= 1.3; + if(travelDistance <= 0) { + newX = currentPathPosition.x; + newZ = currentPathPosition.z; + } else { + + if(distance > 0) { + dx = currentPathPosition.x - oldPosition.x; + dz = currentPathPosition.z - oldPosition.z; + float deltaDist = (float) Math.sqrt((dx * dx) + (dz * dz)); + newX = (float) (oldPosition.x + (speed * (dx / deltaDist))); + newZ = (float) (oldPosition.z + (speed * (dz / deltaDist))); + + } else { + newX = currentPathPosition.x; + newZ = currentPathPosition.z; + } + + } + + if(cell == null) { + float height = core.terrainService.getHeight(creature.getPlanetId(), newX, newZ); + newY = height; + } else { + newY = currentPathPosition.y; + } + } + } + + } else { + newX = currentPathPosition.x; + newZ = currentPathPosition.z; + newY = core.terrainService.getHeight(creature.getPlanetId(), newX, newZ); + } + oldPosition = currentPathPosition; + } + //} + newPosition.x = newX; + newPosition.y = newY; + newPosition.z = newZ; + newPosition.setCell(cell); + + return true; + } + + public void doMove(AIActor actor) { + + NGECore core = NGECore.getInstance(); + + CreatureObject creature = actor.getCreature(); + if(creature.getPosture() == 14 || creature.getPosture() == 13) { + actor.setFollowObject(null); + return; + } + CreatureObject target = actor.getFollowObject(); + float speed = (float) creature.getRunSpeed(); + float maxDistance = 6; + if(creature.getWeaponId() != 0) { + WeaponObject weapon = (WeaponObject) core.objectService.getObject(creature.getWeaponId()); + if(weapon != null) + maxDistance = weapon.getMaxRange() - 1; + } else if(creature.getSlottedObject("default_weapon") != null) { + WeaponObject weapon = (WeaponObject) creature.getSlottedObject("default_weapon"); + if(weapon != null) + maxDistance = weapon.getMaxRange() - 1; + } + Point3D currentPosition = creature.getWorldPosition(); + + if(target != null && !core.simulationService.checkLineOfSight(creature, target)) + maxDistance = 1; + + Point3D newPosition = new Point3D(); + boolean foundNewPos = findNewPosition(actor, speed, maxDistance, newPosition); + + if(!foundNewPos || (newPosition.x == 0 && newPosition.z == 0)) + return; + + Point3D newWorldPos = newPosition.getWorldPosition(); + float direction = (float) Math.atan2(newWorldPos.x - currentPosition.x, newWorldPos.z - currentPosition.z); + if(direction < 0) + direction = (float) (2 * Math.PI + direction); + Quaternion quaternion = new Quaternion((float) Math.cos(direction / 2), 0, (float) Math.sin(direction / 2), 0); + if (quaternion.y < 0.0f && quaternion.w > 0.0f) { + quaternion.y *= -1; + quaternion.w *= -1; + } + + core.simulationService.moveObject(creature, newPosition, quaternion, creature.getMovementCounter(), speed, newPosition.getCell()); + + } + +} diff --git a/src/services/ai/states/AttackState.java b/src/services/ai/states/AttackState.java new file mode 100644 index 00000000..3b16a857 --- /dev/null +++ b/src/services/ai/states/AttackState.java @@ -0,0 +1,178 @@ +/******************************************************************************* + * Copyright (c) 2013 + * + * This File is part of NGECore2. + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see . + * + * Using NGEngine to work with NGECore2 is making a combined work based on NGEngine. + * Therefore all terms and conditions of the GNU Lesser General Public License cover the combination. + ******************************************************************************/ +package services.ai.states; + +import java.util.Random; +import java.util.Vector; + +import main.NGECore; + +import resources.objects.creature.CreatureObject; +import resources.objects.weapon.WeaponObject; +import services.ai.AIActor; + +public class AttackState extends AIState { + + @Override + public byte onEnter(AIActor actor) { + CreatureObject creature = actor.getCreature(); + if(creature.getPosture() == 14) + return StateResult.DEAD; + if(!creature.isInCombat() || creature.getDefendersList().size() == 0 || actor.getFollowObject() == null) + return StateResult.FINISHED; + actor.scheduleMovement(); + actor.scheduleRecovery(); + return StateResult.UNFINISHED; + } + + @Override + public byte onExit(AIActor actor) { + // TODO Auto-generated method stub + actor.getCreature().setLookAtTarget(0); + actor.getCreature().setIntendedTarget(0); + + return StateResult.FINISHED; + } + + @Override + public byte move(AIActor actor) { + CreatureObject creature = actor.getCreature(); + if(creature.getPosture() == 14) + return StateResult.DEAD; + actor.getMovementPoints().clear(); + if(actor.getFollowObject() != null) { + if(actor.getSpawnPosition().getWorldPosition().getDistance(creature.getWorldPosition()) > 128 || NGECore.getInstance().terrainService.isWater(creature.getPlanetId(), actor.getFollowObject().getWorldPosition())) { + actor.removeDefender(actor.getFollowObject()); + //actor.scheduleMovement(); + return StateResult.UNFINISHED; + } + float maxDistance = 0; + if(creature.getWeaponId() != 0) { + WeaponObject weapon = (WeaponObject) NGECore.getInstance().objectService.getObject(creature.getWeaponId()); + if(weapon != null) + maxDistance = weapon.getMaxRange() - 1; + } else if(creature.getSlottedObject("default_weapon") != null) { + WeaponObject weapon = (WeaponObject) creature.getSlottedObject("default_weapon"); + if(weapon != null) + maxDistance = weapon.getMaxRange() - 1; + } + if(actor.getFollowObject().getWorldPosition().getDistance(creature.getWorldPosition()) > maxDistance) + actor.setNextPosition(actor.getFollowObject().getPosition()); + else { + //recover(actor); + actor.faceObject(actor.getFollowObject()); + actor.scheduleMovement(); + return StateResult.UNFINISHED; + } + + } + else + return StateResult.FINISHED; + doMove(actor); + actor.scheduleMovement(); + return StateResult.UNFINISHED; + } + + @Override + public byte recover(AIActor actor) { + CreatureObject creature = actor.getCreature(); + float maxDistance = 0; + WeaponObject weapon = null; + if(creature.getWeaponId() != 0) { + weapon = (WeaponObject) NGECore.getInstance().objectService.getObject(creature.getWeaponId()); + if(weapon != null) + maxDistance = weapon.getMaxRange() - 1; + } else if(creature.getSlottedObject("default_weapon") != null) { + weapon = (WeaponObject) creature.getSlottedObject("default_weapon"); + if(weapon != null) + maxDistance = weapon.getMaxRange() - 1; + } + if(weapon == null) + return StateResult.FINISHED; + if(actor.getTimeSinceLastAttack() < weapon.getAttackSpeed() * 1000) { + //actor.scheduleRecovery(); + return StateResult.UNFINISHED; + } + NGECore core = NGECore.getInstance(); + if(creature.getPosture() == 14) + return StateResult.DEAD; + if(!creature.isInCombat() || creature.getDefendersList().size() == 0 || actor.getFollowObject() == null) + { + creature.setLookAtTarget(0); + creature.setIntendedTarget(0); + actor.setFollowObject(null); + actor.setCurrentState(new RetreatState()); + return StateResult.FINISHED; + } + CreatureObject target = actor.getFollowObject(); + if(target != actor.getHighestDamageDealer() && actor.getHighestDamageDealer() != null) { + actor.setFollowObject(actor.getHighestDamageDealer()); + target = actor.getFollowObject(); + } + if(target == null) { + System.out.println("null target"); + actor.scheduleRecovery(); + return StateResult.UNFINISHED; + } + if(target.getPosture() == 13 || target.getPosture() == 14) { + actor.removeDefender(target); + actor.setFollowObject(actor.getHighestDamageDealer()); + target = actor.getFollowObject(); + if(target == null) + { + creature.setLookAtTarget(0); + creature.setIntendedTarget(0); + return StateResult.FINISHED; + } + } + if(target.getWorldPosition().getDistance(creature.getWorldPosition()) > 128 || target.getPosture() == 13 || target.getPosture() == 14) { + actor.removeDefender(target); + actor.scheduleRecovery(); + return StateResult.UNFINISHED; + } + if(target.getWorldPosition().getDistance(creature.getWorldPosition()) > maxDistance) { + actor.scheduleRecovery(); + return StateResult.UNFINISHED; + } + //actor.faceObject(target); + + Vector attacks = actor.getMobileTemplate().getAttacks(); + + creature.setLookAtTarget(target.getObjectId()); + creature.setIntendedTarget(target.getObjectId()); + + if(attacks.size() == 0) { + core.commandService.callCommand(creature, actor.getMobileTemplate().getDefaultAttack(), target, ""); + } else { + Random rand = new Random(); + if(rand.nextFloat() <= 0.33f) { + core.commandService.callCommand(creature, attacks.get(rand.nextInt(attacks.size())), target, ""); + } else { + core.commandService.callCommand(creature, actor.getMobileTemplate().getDefaultAttack(), target, ""); + } + } + actor.setLastAttackTimestamp(System.currentTimeMillis()); + actor.scheduleRecovery(); + return StateResult.UNFINISHED; + } + +} diff --git a/src/services/ai/states/DeathState.java b/src/services/ai/states/DeathState.java new file mode 100644 index 00000000..6ef981bd --- /dev/null +++ b/src/services/ai/states/DeathState.java @@ -0,0 +1,63 @@ +/******************************************************************************* + * Copyright (c) 2013 + * + * This File is part of NGECore2. + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see . + * + * Using NGEngine to work with NGECore2 is making a combined work based on NGEngine. + * Therefore all terms and conditions of the GNU Lesser General Public License cover the combination. + ******************************************************************************/ +package services.ai.states; + +import main.NGECore; +import resources.objects.creature.CreatureObject; +import resources.objects.tangible.TangibleObject; +import services.ai.AIActor; + +public class DeathState extends AIState { + + @Override + public byte onEnter(AIActor actor) { + NGECore.getInstance().aiService.awardExperience(actor); + NGECore.getInstance().aiService.awardGcw(actor); + actor.getCreature().setAttachment("radial_filename", "npc/corpse"); + //NGECore.getInstance().scriptService.callScript("scripts/radial/npc/corpse", "", "createRadial", NGECore.getInstance(), actor.getCreature().getKiller(), actor.getCreature(), new Vector()); + actor.scheduleDespawn(); + CreatureObject killer = (CreatureObject)actor.getCreature().getKiller(); + if (killer==null) + killer = actor.getHighestDamageDealer(); + NGECore.getInstance().lootService.DropLoot(killer,(TangibleObject)(actor.getCreature())); + return 0; + } + + @Override + public byte onExit(AIActor actor) { + // TODO Auto-generated method stub + return 0; + } + + @Override + public byte move(AIActor actor) { + // TODO Auto-generated method stub + return 0; + } + + @Override + public byte recover(AIActor actor) { + // TODO Auto-generated method stub + return 0; + } + +} diff --git a/src/services/ai/states/IdleState.java b/src/services/ai/states/IdleState.java new file mode 100644 index 00000000..28391739 --- /dev/null +++ b/src/services/ai/states/IdleState.java @@ -0,0 +1,52 @@ +/******************************************************************************* + * Copyright (c) 2013 + * + * This File is part of NGECore2. + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see . + * + * Using NGEngine to work with NGECore2 is making a combined work based on NGEngine. + * Therefore all terms and conditions of the GNU Lesser General Public License cover the combination. + ******************************************************************************/ +package services.ai.states; + +import services.ai.AIActor; + +public class IdleState extends AIState { + + @Override + public byte onEnter(AIActor actor) { + // TODO Auto-generated method stub + return 0; + } + + @Override + public byte onExit(AIActor actor) { + // TODO Auto-generated method stub + return 0; + } + + @Override + public byte move(AIActor actor) { + // TODO Auto-generated method stub + return 0; + } + + @Override + public byte recover(AIActor actor) { + // TODO Auto-generated method stub + return 0; + } + +} diff --git a/src/services/ai/states/PatrolState.java b/src/services/ai/states/PatrolState.java new file mode 100644 index 00000000..fef5cb1a --- /dev/null +++ b/src/services/ai/states/PatrolState.java @@ -0,0 +1,52 @@ +/******************************************************************************* + * Copyright (c) 2013 + * + * This File is part of NGECore2. + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see . + * + * Using NGEngine to work with NGECore2 is making a combined work based on NGEngine. + * Therefore all terms and conditions of the GNU Lesser General Public License cover the combination. + ******************************************************************************/ +package services.ai.states; + +import services.ai.AIActor; + +public class PatrolState extends AIState { + + @Override + public byte onEnter(AIActor actor) { + // TODO Auto-generated method stub + return 0; + } + + @Override + public byte onExit(AIActor actor) { + // TODO Auto-generated method stub + return 0; + } + + @Override + public byte move(AIActor actor) { + // TODO Auto-generated method stub + return 0; + } + + @Override + public byte recover(AIActor actor) { + // TODO Auto-generated method stub + return 0; + } + +} diff --git a/src/services/ai/states/RetreatState.java b/src/services/ai/states/RetreatState.java new file mode 100644 index 00000000..315f8cb3 --- /dev/null +++ b/src/services/ai/states/RetreatState.java @@ -0,0 +1,64 @@ +/******************************************************************************* + * Copyright (c) 2013 + * + * This File is part of NGECore2. + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see . + * + * Using NGEngine to work with NGECore2 is making a combined work based on NGEngine. + * Therefore all terms and conditions of the GNU Lesser General Public License cover the combination. + ******************************************************************************/ +package services.ai.states; + +import services.ai.AIActor; + +public class RetreatState extends AIState { + + @Override + public byte onEnter(AIActor actor) { + /*synchronized(actor.getDamageMap()) { + for(CreatureObject defender : actor.getDamageMap().keySet()) { + actor.removeDefender(defender); + } + }*/ + actor.setFollowObject(null); + actor.scheduleMovement(); + return StateResult.UNFINISHED; + } + + @Override + public byte onExit(AIActor actor) { + // TODO Auto-generated method stub + return StateResult.FINISHED; + } + + @Override + public byte move(AIActor actor) { + actor.setNextPosition(actor.getSpawnPosition()); + doMove(actor); + if(actor.getCreature().getWorldPosition().getDistance(actor.getSpawnPosition()) > 3) { + actor.scheduleMovement(); + } else { + return StateResult.IDLE; + } + return StateResult.UNFINISHED; + } + + @Override + public byte recover(AIActor actor) { + // TODO Auto-generated method stub + return 0; + } + +} diff --git a/src/services/ai/states/SpawnState.java b/src/services/ai/states/SpawnState.java new file mode 100644 index 00000000..a006efa4 --- /dev/null +++ b/src/services/ai/states/SpawnState.java @@ -0,0 +1,52 @@ +/******************************************************************************* + * Copyright (c) 2013 + * + * This File is part of NGECore2. + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see . + * + * Using NGEngine to work with NGECore2 is making a combined work based on NGEngine. + * Therefore all terms and conditions of the GNU Lesser General Public License cover the combination. + ******************************************************************************/ +package services.ai.states; + +import services.ai.AIActor; + +public class SpawnState extends AIState { + + @Override + public byte onEnter(AIActor actor) { + // TODO Auto-generated method stub + return 0; + } + + @Override + public byte onExit(AIActor actor) { + // TODO Auto-generated method stub + return 0; + } + + @Override + public byte move(AIActor actor) { + // TODO Auto-generated method stub + return 0; + } + + @Override + public byte recover(AIActor actor) { + // TODO Auto-generated method stub + return 0; + } + +} diff --git a/src/services/ai/states/StalkState.java b/src/services/ai/states/StalkState.java new file mode 100644 index 00000000..b7d2384a --- /dev/null +++ b/src/services/ai/states/StalkState.java @@ -0,0 +1,55 @@ +/******************************************************************************* + * Copyright (c) 2013 + * + * This File is part of NGECore2. + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see . + * + * Using NGEngine to work with NGECore2 is making a combined work based on NGEngine. + * Therefore all terms and conditions of the GNU Lesser General Public License cover the combination. + ******************************************************************************/ +package services.ai.states; + +import services.ai.AIActor; + +public class StalkState extends AIState { + + @Override + public byte onEnter(AIActor actor) throws Exception { + actor.setStalking(true); + return StateResult.UNFINISHED; + } + + @Override + public byte onExit(AIActor actor) throws Exception { + actor.setStalking(false); + return StateResult.UNFINISHED; + } + + @Override + public byte move(AIActor actor) throws Exception { + if(!actor.isStalking() || actor.getFollowObject() == null) + return StateResult.FINISHED; + return StateResult.UNFINISHED; + + } + + @Override + public byte recover(AIActor actor) throws Exception { + if(!actor.isStalking() || actor.getFollowObject() == null) + return StateResult.FINISHED; + return StateResult.UNFINISHED; + } + +} diff --git a/src/services/bazaar/AuctionItem.java b/src/services/bazaar/AuctionItem.java new file mode 100644 index 00000000..0c8d23be --- /dev/null +++ b/src/services/bazaar/AuctionItem.java @@ -0,0 +1,291 @@ +/******************************************************************************* + * Copyright (c) 2013 + * + * This File is part of NGECore2. + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see . + * + * Using NGEngine to work with NGECore2 is making a combined work based on NGEngine. + * Therefore all terms and conditions of the GNU Lesser General Public License cover the combination. + ******************************************************************************/ +package services.bazaar; + +import java.io.Serializable; + +import com.sleepycat.persist.model.Entity; +import com.sleepycat.persist.model.PrimaryKey; + +import engine.resources.objects.SWGObject; + +@Entity(version=1) +public class AuctionItem implements Comparable, Serializable { + + private static final long serialVersionUID = 1L; + + @PrimaryKey + private long objectId; + private SWGObject item; + private long ownerId; + private long vendorId; + private long buyerId; + private long offerToId; + private int itemType; + private int itemTypeCRC; + private String ownerName; + private String bidderName = ""; + private String itemName; + private String itemDescription; + private String planet; + private int price; + private int proxyBid; + private boolean auction; + private String vuid; + private int status; + private boolean onBazaar = false; + private long expireTime; + private int auctionOptions; + + public static final int PREMIUM = 0x400; + public static final int WITHDRAW = 0x800; + public final static int FORSALE = 1; + public final static int SOLD = 2; + public final static int EXPIRED = 4; + public final static int OFFERED = 5; + public final static int RETRIEVED = 6; + + public AuctionItem() { + + } + + public AuctionItem(SWGObject item, long ownerId) { + this.item = item; + this.objectId = item.getObjectID(); + this.ownerId = ownerId; + } + + + public long getObjectId() { + return objectId; + } + + + public void setObjectId(long objectId) { + this.objectId = objectId; + } + + + public long getOwnerId() { + return ownerId; + } + + + public void setOwnerId(long ownerId) { + this.ownerId = ownerId; + } + + + public long getVendorId() { + return vendorId; + } + + + public void setVendorId(long vendorId) { + this.vendorId = vendorId; + } + + + public long getBuyerId() { + return buyerId; + } + + + public void setBuyerId(long buyerId) { + this.buyerId = buyerId; + } + + + public long getOfferToId() { + return offerToId; + } + + + public void setOfferToId(long offerToId) { + this.offerToId = offerToId; + } + + + public int getItemType() { + return itemType; + } + + + public void setItemType(int itemType) { + this.itemType = itemType; + } + + + public String getOwnerName() { + return ownerName; + } + + + public void setOwnerName(String ownerName) { + this.ownerName = ownerName; + } + + + public String getBidderName() { + return bidderName; + } + + + public void setBidderName(String bidderName) { + this.bidderName = bidderName; + } + + + public String getItemName() { + return itemName; + } + + + public void setItemName(String itemName) { + this.itemName = itemName; + } + + + public String getItemDescription() { + return itemDescription; + } + + + public void setItemDescription(String itemDescription) { + this.itemDescription = itemDescription; + } + + + public int getPrice() { + return price; + } + + + public void setPrice(int price) { + this.price = price; + } + + + public int getProxyBid() { + return proxyBid; + } + + + public void setProxyBid(int proxyBid) { + this.proxyBid = proxyBid; + } + + + public boolean isAuction() { + return auction; + } + + + public void setAuction(boolean auction) { + this.auction = auction; + } + + + public String getVuid() { + return vuid; + } + + + public void setVuid(String vuid) { + this.vuid = vuid; + } + + + public int getStatus() { + return status; + } + + + public void setStatus(int status) { + this.status = status; + } + + + public boolean isOnBazaar() { + return onBazaar; + } + + + public void setOnBazaar(boolean onBazaar) { + this.onBazaar = onBazaar; + } + + + public long getExpireTime() { + return expireTime; + } + + + public void setExpireTime(long expireTime) { + this.expireTime = expireTime; + } + + + public int getAuctionOptions() { + return auctionOptions; + } + + + public void setAuctionOptions(int auctionOptions) { + this.auctionOptions = auctionOptions; + } + + public SWGObject getItem() { + return item; + } + + public void setItem(SWGObject item) { + this.item = item; + } + + public String getPlanet() { + return planet; + } + + public void setPlanet(String planet) { + this.planet = planet; + } + + @Override + public int compareTo(AuctionItem other) { + if(getExpireTime() < other.getExpireTime()) + return -1; + else if(getExpireTime() > other.getExpireTime()) + return 1; + else + return 0; + } + + public int getItemTypeCRC() { + return itemTypeCRC; + } + + public void setItemTypeCRC(int itemTypeCRC) { + this.itemTypeCRC = itemTypeCRC; + } + +} diff --git a/src/services/bazaar/BazaarService.java b/src/services/bazaar/BazaarService.java new file mode 100644 index 00000000..0dce7454 --- /dev/null +++ b/src/services/bazaar/BazaarService.java @@ -0,0 +1,841 @@ +/******************************************************************************* + * Copyright (c) 2013 + * + * This File is part of NGECore2. + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see . + * + * Using NGEngine to work with NGECore2 is making a combined work based on NGEngine. + * Therefore all terms and conditions of the GNU Lesser General Public License cover the combination. + ******************************************************************************/ +package services.bazaar; + +import java.nio.ByteOrder; +import java.util.ArrayList; +import java.util.Iterator; +import java.util.List; +import java.util.Map; +import java.util.Set; +import java.util.concurrent.ConcurrentHashMap; +import java.util.concurrent.ConcurrentSkipListSet; +import java.util.concurrent.Executors; +import java.util.concurrent.ScheduledExecutorService; +import java.util.concurrent.TimeUnit; + + + +import main.NGECore; +import engine.clients.Client; +import engine.resources.common.CRC; +import engine.resources.database.ODBCursor; +import engine.resources.objects.SWGObject; +import engine.resources.scene.Planet; +import engine.resources.scene.Point3D; +import engine.resources.service.INetworkDispatch; +import engine.resources.service.INetworkRemoteEvent; +import resources.common.Opcodes; +import resources.common.OutOfBand; +import resources.datatables.DisplayType; +import resources.objects.building.BuildingObject; +import resources.objects.creature.CreatureObject; +import resources.objects.intangible.IntangibleObject; +import resources.objects.manufacture.ManufactureSchematicObject; +import resources.objects.tangible.TangibleObject; +import protocol.swg.auctionManagerClientListener.AuctionQueryHeadersMessage; +import protocol.swg.auctionManagerClientListener.AuctionQueryHeadersResponseMessage; +import protocol.swg.auctionManagerClientListener.BidAuctionMessage; +import protocol.swg.auctionManagerClientListener.BidAuctionResponseMessage; +import protocol.swg.auctionManagerClientListener.CancelLiveAuctionMessage; +import protocol.swg.auctionManagerClientListener.CancelLiveAuctionResponseMessage; +import protocol.swg.auctionManagerClientListener.CommoditiesItemTypeListResponse; +import protocol.swg.auctionManagerClientListener.CreateAuctionMessage; +import protocol.swg.auctionManagerClientListener.GetAuctionDetails; +import protocol.swg.auctionManagerClientListener.GetAuctionDetailsResponse; +import protocol.swg.auctionManagerClientListener.IsVendorOwnerMessage; +import protocol.swg.auctionManagerClientListener.IsVendorOwnerResponseMessage; +import protocol.swg.auctionManagerClientListener.CreateAuctionResponseMessage; +import protocol.swg.auctionManagerClientListener.RetrieveAuctionItemMessage; +import protocol.swg.auctionManagerClientListener.RetrieveAuctionItemResponseMessage; + +public class BazaarService implements INetworkDispatch { + + private NGECore core; + private Set auctionItems = new ConcurrentSkipListSet(); + private ConcurrentHashMap commodityLimit = new ConcurrentHashMap(); + private final ScheduledExecutorService scheduler = Executors.newScheduledThreadPool(1); + private final static int COMMODITY_LIMIT = 25; + private final static int MAX_BAZAAR_SALE_PRICE = 10000000; + private final static int SALES_FEE = 20; + private final static int COMMODITY_EXPIRE = 604800; + private final static int VENDOR_EXPIRE = 2592000; + + public BazaarService(NGECore core) { + this.core = core; + core.commandService.registerCommand("createvendor"); + loadAuctionItems(); + } + + public void saveAllItems() { + System.out.println("Saving auction items..."); + auctionItems.forEach(item -> core.objectService.persistObject(item.getObjectId(), item, core.getAuctionODB())); + } + + private void loadAuctionItems() { + ODBCursor cursor = core.getAuctionODB().getCursor(); + while(cursor.hasNext()) { + addAuctionItem((AuctionItem) cursor.next()); + } + auctionItems.stream().map(AuctionItem::getItem).forEach(obj -> { + obj.initializeBaselines(); + obj.initAfterDBLoad(); + obj.viewChildren(obj, true, true, obj2 -> { obj2.initializeBaselines(); obj2.initAfterDBLoad(); }); + }); + cursor.close(); + } + + @Override + public void insertOpcodes(Map swgOpcodes, Map objControllerOpcodes) { + + swgOpcodes.put(Opcodes.CommoditiesItemTypeListRequest, (session, data) -> { + + Client client = core.getClient(session); + + if (client == null) + return; + + SWGObject player = client.getParent(); + + if (player == null) + return; + + CommoditiesItemTypeListResponse response = new CommoditiesItemTypeListResponse(); + + List insertedItems = new ArrayList(); + auctionItems.stream().filter(i -> !insertedItems.contains(i.getItem().getObjectName().getStfValue())).forEach(i -> { + response.addItem(i); + insertedItems.add(i.getItem().getObjectName().getString()); + System.out.println(i.getItem().getObjectName().getString()); + }); + + session.write(new CommoditiesItemTypeListResponse().serialize()); + + }); + + swgOpcodes.put(Opcodes.IsVendorOwnerMessage, (session, data) -> { + + Client client = core.getClient(session); + + if (client == null) + return; + + SWGObject player = client.getParent(); + + if (player == null) + return; + + data = data.order(ByteOrder.LITTLE_ENDIAN); + data.position(0); + + IsVendorOwnerMessage request = new IsVendorOwnerMessage(); + request.deserialize(data); + long terminalId = request.getTerminalId(); + SWGObject terminal = core.objectService.getObject(terminalId); + if(terminal == null) + return; + int permission = 2; + if(terminal.getAttachment("isVendor") != null && (Boolean) terminal.getAttachment("isVendor")) { + if(!((Boolean) terminal.getAttachment("initialized"))) + return; + permission = (long) terminal.getAttachment("vendorOwner") == player.getObjectID() ? 0 : 1; + } + Point3D pos = terminal.getWorldPosition(); + session.write(new IsVendorOwnerResponseMessage(permission, 0, terminalId, getVendorUID((TangibleObject) terminal)).serialize()); + + }); + + swgOpcodes.put(Opcodes.CommoditiesResourceTypeListRequest, (session, data) -> { + + Client client = core.getClient(session); + + if (client == null) + return; + + SWGObject player = client.getParent(); + + if (player == null) + return; + + data = data.order(ByteOrder.LITTLE_ENDIAN); + + if(data.remaining() > 2) // if client attaches a string to the request then it has already recieved it on zone-in + return; + + //session.write(new CommoditiesResourceTypeListResponse(core.resourceService.getCompleteResourceNameHistory()).serialize()); + + }); + + swgOpcodes.put(Opcodes.CancelLiveAuctionMessage, (session, data) -> { + + Client client = core.getClient(session); + + if (client == null) + return; + + SWGObject player = client.getParent(); + + if (player == null) + return; + + data = data.order(ByteOrder.LITTLE_ENDIAN); + data.position(0); + + CancelLiveAuctionMessage cancelLiveAuction = new CancelLiveAuctionMessage(); + cancelLiveAuction.deserialize(data); + + AuctionItem item = getAuctionItem(cancelLiveAuction.getObjectId()); + + if(item == null) + return; + + cancelItem(player, item); + + }); + + swgOpcodes.put(Opcodes.BidAuctionMessage, (session, data) -> { + + Client client = core.getClient(session); + + if (client == null) + return; + + SWGObject player = client.getParent(); + + if (player == null) + return; + + data = data.order(ByteOrder.LITTLE_ENDIAN); + data.position(0); + + BidAuctionMessage bidAuction = new BidAuctionMessage(); + bidAuction.deserialize(data); + + AuctionItem item = getAuctionItem(bidAuction.getAuctionId()); + //SWGObject vendor = core.objectService.getObject(bidAuction.getVendorId()); + if(item == null) + return; + SWGObject vendor = core.objectService.getObject(item.getVendorId()); + if(vendor == null) + return; + buyItem((CreatureObject) player, item, vendor, bidAuction.getMyPrice(), bidAuction.getProxyPrice()); + + }); + + swgOpcodes.put(Opcodes.RetrieveAuctionItemMessage, (session, data) -> { + + Client client = core.getClient(session); + + if (client == null) + return; + + SWGObject player = client.getParent(); + + if (player == null) + return; + + data = data.order(ByteOrder.LITTLE_ENDIAN); + data.position(0); + + RetrieveAuctionItemMessage retrieveItem = new RetrieveAuctionItemMessage(); + retrieveItem.deserialize(data); + + AuctionItem item = getAuctionItem(retrieveItem.getObjectId()); + SWGObject vendor = core.objectService.getObject(retrieveItem.getVendorId()); + + if(item == null || vendor == null) + return; + + retrieveItem((CreatureObject) player, item, vendor); + + }); + + swgOpcodes.put(Opcodes.GetAuctionDetails, (session, data) -> { + + Client client = core.getClient(session); + + if (client == null) + return; + + SWGObject player = client.getParent(); + + if (player == null) + return; + + data = data.order(ByteOrder.LITTLE_ENDIAN); + data.position(0); + + GetAuctionDetails request = new GetAuctionDetails(); + request.deserialize(data); + AuctionItem item = getAuctionItem(request.getObjectId()); + + if(item == null) + return; + + client.getSession().write(new GetAuctionDetailsResponse(item).serialize()); + + }); + + + swgOpcodes.put(Opcodes.CreateAuctionMessage, (session, data) -> { + + Client client = core.getClient(session); + + if (client == null) + return; + + SWGObject player = client.getParent(); + + if (player == null) + return; + + + data = data.order(ByteOrder.LITTLE_ENDIAN); + data.position(0); + + CreateAuctionMessage createAuction = new CreateAuctionMessage(); + createAuction.deserialize(data); + SWGObject vendor = core.objectService.getObject(createAuction.getVendorId()); + SWGObject item = core.objectService.getObject(createAuction.getObjectId()); + + if(vendor == null || item == null || item instanceof CreatureObject || item instanceof BuildingObject) + return; + + addAuction((CreatureObject) player, item, vendor, createAuction.getPrice(), createAuction.getDuration(), createAuction.getDescription(), true, createAuction.getPremium()); + + }); + + swgOpcodes.put(Opcodes.CreateImmediateAuctionMessage, (session, data) -> { + + Client client = core.getClient(session); + + if (client == null) + return; + + SWGObject player = client.getParent(); + + if (player == null) + return; + + data = data.order(ByteOrder.LITTLE_ENDIAN); + data.position(0); + + CreateAuctionMessage createAuction = new CreateAuctionMessage(); + createAuction.deserialize(data); + + SWGObject vendor = core.objectService.getObject(createAuction.getVendorId()); + SWGObject item = core.objectService.getObject(createAuction.getObjectId()); + + if(vendor == null || item == null || item instanceof CreatureObject || item instanceof BuildingObject) + return; + + addAuction((CreatureObject) player, item, vendor, createAuction.getPrice(), createAuction.getDuration(), createAuction.getDescription(), false, createAuction.getPremium()); + + }); + + swgOpcodes.put(Opcodes.AuctionQueryHeadersMessage, (session, data) -> { + + Client client = core.getClient(session); + + if (client == null) + return; + + SWGObject player = client.getParent(); + + if (player == null) + return; + + data = data.order(ByteOrder.LITTLE_ENDIAN); + data.position(0); + + AuctionQueryHeadersMessage queryHeaders = new AuctionQueryHeadersMessage(); + queryHeaders.deserialize(data); + SWGObject vendor = core.objectService.getObject(queryHeaders.getVendorId()); + + if(vendor == null) + return; + + getItemData(player, vendor, queryHeaders.getRange(), queryHeaders.getScreen(), queryHeaders.getCounter(), queryHeaders.getOffset(), queryHeaders.getCategory(), queryHeaders.getMinPrice(), queryHeaders.getMaxPrice()); + + }); + + + + } + + public void buyItem(CreatureObject player, AuctionItem item, SWGObject vendor, int price, int proxyPrice) { + + BidAuctionResponseMessage response = new BidAuctionResponseMessage(item.getObjectId(), BidAuctionResponseMessage.SUCCESS); + + if((price > MAX_BAZAAR_SALE_PRICE || proxyPrice > MAX_BAZAAR_SALE_PRICE) && item.isOnBazaar()) { + response.setStatus(BidAuctionResponseMessage.PRICEOVERFLOW); + player.getClient().getSession().write(response.serialize()); + return; + } + + if(price < 1 /*|| proxyPrice < 1 */|| price < item.getPrice()) { + response.setStatus(BidAuctionResponseMessage.INVALIDPRICE); + player.getClient().getSession().write(response.serialize()); + return; + } + + if(price > player.getBankCredits()) { + response.setStatus(BidAuctionResponseMessage.NOTENOUGHCREDITS); + player.getClient().getSession().write(response.serialize()); + return; + } + + if(item.isAuction()) + bidAuction(player, item, vendor, price, proxyPrice); + else + instantBuy(player, item, vendor); + + } + + public void instantBuy(CreatureObject player, AuctionItem item, SWGObject vendor) { + //System.out.println("test"); + + long timeUntilExpire = (item.getExpireTime() - System.currentTimeMillis()) / 1000; + long retrieveExpire = 0; + + if(item.isOnBazaar()) + retrieveExpire = timeUntilExpire + COMMODITY_EXPIRE; + else + retrieveExpire = timeUntilExpire + VENDOR_EXPIRE; + + item.setStatus(AuctionItem.SOLD); + item.setBuyerId(player.getObjectID()); + item.setExpireTime(retrieveExpire); + item.setBidderName(player.getCustomName()); + player.setBankCredits(player.getBankCredits() - item.getPrice()); + player.getClient().getSession().write(new BidAuctionResponseMessage(item.getObjectId(), BidAuctionResponseMessage.SUCCESS).serialize()); + + // TODO send mail with WP + + CreatureObject seller = (CreatureObject) core.objectService.getObject(item.getOwnerId()); + + if(seller == null) { + seller = core.objectService.getCreatureFromDB(item.getOwnerId()); + seller.setBankCredits(seller.getBankCredits() + item.getPrice()); + core.objectService.persistObject(seller.getObjectID(), seller, core.getSWGObjectODB()); + } + + } + + public void bidAuction(CreatureObject player, AuctionItem item, SWGObject vendor, int price, int proxyPrice) { + //System.out.println("test"); + } + + public void retrieveItem(CreatureObject player, AuctionItem item, SWGObject vendor) { + + RetrieveAuctionItemResponseMessage response = new RetrieveAuctionItemResponseMessage(item.getObjectId(), RetrieveAuctionItemResponseMessage.SUCCESS); + String closestCityName = core.mapService.getClosestCityName(player); + SWGObject vendorOfItem = core.objectService.getObject(item.getVendorId()); + + if(vendorOfItem == null) { + response.setStatus(RetrieveAuctionItemResponseMessage.DONTRETRIEVE); + player.getClient().getSession().write(response.serialize()); + return; + } + + if(item.getItem() instanceof TangibleObject && player.getInventoryItemCount() >= 80) { + response.setStatus(RetrieveAuctionItemResponseMessage.FULLINVENTORY); + player.getClient().getSession().write(response.serialize()); + return; + } + + if(item.getStatus() == AuctionItem.RETRIEVED || item.getStatus() == AuctionItem.FORSALE) { + response.setStatus(RetrieveAuctionItemResponseMessage.NOTALLOWED); + player.getClient().getSession().write(response.serialize()); + return; + } + + if(item.getStatus() == AuctionItem.SOLD && item.getBuyerId() != player.getObjectID()) { + response.setStatus(RetrieveAuctionItemResponseMessage.NOTALLOWED); + player.getClient().getSession().write(response.serialize()); + return; + } + + if(!item.isOnBazaar() && !vendor.inRange(player.getWorldPosition(), 8)) { + response.setStatus(RetrieveAuctionItemResponseMessage.TOOFAR); + player.getClient().getSession().write(response.serialize()); + return; + } + + if(item.isOnBazaar() && !core.mapService.getClosestCityName(vendorOfItem).equals(closestCityName)) { + response.setStatus(RetrieveAuctionItemResponseMessage.TOOFAR); + player.getClient().getSession().write(response.serialize()); + return; + } + + item.setStatus(AuctionItem.RETRIEVED); + + if(item.getItem() instanceof TangibleObject) + player.getSlottedObject("inventory").add(item.getItem()); + else if(item.getItem() instanceof IntangibleObject) + player.getSlottedObject("datapad").add(item.getItem()); + + core.objectService.getObjectList().put(item.getObjectId(), item.getItem()); + removeAuctionItem(item); + player.getClient().getSession().write(response.serialize()); + + } + + public void cancelItem(SWGObject player, AuctionItem item) { + + CancelLiveAuctionResponseMessage response = new CancelLiveAuctionResponseMessage(item.getObjectId(), CancelLiveAuctionResponseMessage.SUCCESS); + + long timeUntilExpire = (item.getExpireTime() - System.currentTimeMillis()) / 1000; + long retrieveExpire = 0; + + if(item.getStatus() == AuctionItem.FORSALE) { + + if(item.getOwnerId() != player.getObjectID()) { + response.setStatus(CancelLiveAuctionResponseMessage.NOTOWNER); + player.getClient().getSession().write(response.serialize()); + return; + } + + if(item.isOnBazaar()) + retrieveExpire = timeUntilExpire + COMMODITY_EXPIRE; + else + retrieveExpire = timeUntilExpire + VENDOR_EXPIRE; + + } else if(item.getStatus() == AuctionItem.OFFERED) { + // TODO implement offers + return; + } else { + response.setStatus(CancelLiveAuctionResponseMessage.ALREADYCOMPLETED); + player.getClient().getSession().write(response.serialize()); + return; + } + + // TODO: cancel auction once implemented + + item.setStatus(AuctionItem.EXPIRED); + item.setExpireTime(retrieveExpire); + player.getClient().getSession().write(response.serialize()); + + } + + public void getItemData(SWGObject player, SWGObject vendor, int range, int screen, int counter, short offset, int category, int minPrice, int maxPrice) { + + Set inRangeItems = getInRangeItems(range, player.getPlanet(), vendor, core.mapService.getClosestCityName(player)); + + Iterator it = inRangeItems.iterator(); + int displayedItems = 0; + + AuctionQueryHeadersResponseMessage response = new AuctionQueryHeadersResponseMessage(player.getObjectID(), screen, counter, offset, false); + while(it.hasNext() && displayedItems < offset + 100) { + + AuctionItem item = it.next(); + + if((minPrice != 0 && item.getPrice() < minPrice) || (maxPrice != 0 && item.getPrice() > maxPrice)) + continue; + + switch(screen) { + + // Auctions + case 2: + if(item.getStatus() == AuctionItem.FORSALE && item.isOnBazaar()) { + if((category & 255) != 0) { + if(item.getItemType() == category) { + if(displayedItems >= offset) + response.addItem(item); + displayedItems++; + } + } else if((item.getItemType() & category) != 0) { + if(displayedItems >= offset) + response.addItem(item); + displayedItems++; + } else if(item.getItemType() < 256 && category == 8192) { + if(displayedItems >= offset) + response.addItem(item); + displayedItems++; + } else if(category == 0) { + if(displayedItems >= offset) + response.addItem(item); + displayedItems++; + } + } + break; + // My Items for sale + case 3: + if(item.getStatus() == AuctionItem.FORSALE && player.getObjectID() == item.getOwnerId()) + response.addItem(item); + break; + // My Auction Bids + case 4: + if(item.isAuction() && item.getStatus() == AuctionItem.FORSALE && player.getCustomName().equals(item.getBidderName())) + response.addItem(item); + break; + // Retrieve items + case 5: + if(item.getStatus() == AuctionItem.SOLD && player.getObjectID() == item.getBuyerId()) + response.addItem(item); + else if(item.getStatus() == AuctionItem.EXPIRED && player.getObjectID() == item.getOwnerId()) + response.addItem(item); + break; + // Offers to my vendor + case 6: + if(item.getStatus() == AuctionItem.OFFERED && player.getObjectID() == item.getOfferToId()) + response.addItem(item); + break; + // Vendor search + case 7: + if(item.getStatus() == AuctionItem.FORSALE && !item.isOnBazaar()) { + if(vendor.getObjectID() != item.getVendorId() && (core.objectService.getObject(item.getVendorId()) == null || (Boolean) core.objectService.getObject(item.getVendorId()).getAttachment("vendorSearchEnabled"))) + break; + if((category & 255) != 0) { + if(item.getItemType() == category) { + if(displayedItems >= offset) + response.addItem(item); + displayedItems++; + } + } else if((item.getItemType() & category) != 0) { + if(displayedItems >= offset) + response.addItem(item); + displayedItems++; + } else if(item.getItemType() < 256 && category == 8192) { + if(displayedItems >= offset) + response.addItem(item); + displayedItems++; + } else if(category == 0) { + if(displayedItems >= offset) + response.addItem(item); + displayedItems++; + } + } + break; + // Stock + case 8: + if(item.getStatus() == AuctionItem.SOLD && player.getObjectID() == item.getBuyerId()) + response.addItem(item); + else if(item.getStatus() == AuctionItem.EXPIRED && player.getObjectID() == item.getOwnerId()) + response.addItem(item); + break; + // Offers to other vendor + case 9: + if(item.getStatus() == AuctionItem.OFFERED && player.getObjectID() == item.getOwnerId()) + response.addItem(item); + break; + + + } + + } + + if(displayedItems == offset + 100) + response.setContinues(true); + + player.getClient().getSession().write(response.serialize()); + } + + public Set getInRangeItems(int range, Planet planet, SWGObject vendor, String closestCityName) { + + Set inRangeItems = new ConcurrentSkipListSet(); + String planetName = planet.getName(); + + auctionItems.forEach((item) -> { + + SWGObject vendorOfItem = core.objectService.getObject(item.getVendorId()); + if(vendorOfItem == null) + return; + if(range > 0 && !item.getPlanet().equals(planetName)) + return; + else if(range > 1 && !core.mapService.getClosestCityName(vendorOfItem).equals(closestCityName)) + return; + else if(range > 2 && item.getVendorId() != vendor.getObjectID()) + return; + + inRangeItems.add(item); + + }); + + return inRangeItems; + } + + public void addAuction(CreatureObject player, SWGObject item, SWGObject vendor, int price, int duration, String description, boolean auction, boolean premium) { + + CreateAuctionResponseMessage itemSoldMsg = new CreateAuctionResponseMessage(item.getObjectID(), CreateAuctionResponseMessage.SUCCESS); + + if(item.getAttributes().containsKey("no_trade") || !item.isSubChildOf(player) || (item instanceof IntangibleObject && !(item instanceof ManufactureSchematicObject))) { + itemSoldMsg.setStatus(CreateAuctionResponseMessage.INVALIDITEM); + player.getClient().getSession().write(itemSoldMsg.serialize()); + return; + } + + if(core.tradeService.getTradingObjectMap().get(item) != null) { + itemSoldMsg.setStatus(CreateAuctionResponseMessage.CANTSELLTRADINGITEM); + player.getClient().getSession().write(itemSoldMsg.serialize()); + return; + } + + if(getAuctionItem(item.getObjectID()) != null) { + itemSoldMsg.setStatus(CreateAuctionResponseMessage.ALREADYFORSALE); + player.getClient().getSession().write(itemSoldMsg.serialize()); + return; + } + + if(price < 1 || price > MAX_BAZAAR_SALE_PRICE) { + itemSoldMsg.setStatus(CreateAuctionResponseMessage.INVALIDPRICE); + player.getClient().getSession().write(itemSoldMsg.serialize()); + return; + } + + if(commodityLimit.get(player) != null && commodityLimit.get(player) >= COMMODITY_LIMIT) { + itemSoldMsg.setStatus(CreateAuctionResponseMessage.TOOMANYITEMS); + player.getClient().getSession().write(itemSoldMsg.serialize()); + return; + } + + if(player.getBankCredits() < SALES_FEE || (premium && player.getBankCredits() < SALES_FEE * 5)) { + itemSoldMsg.setStatus(CreateAuctionResponseMessage.NOTENOUGHCREDITS); + player.getClient().getSession().write(itemSoldMsg.serialize()); + return; + } + + AuctionItem auctionItem = createAuctionItem(player, vendor, item, price, description, duration, auction, premium); + + core.objectService.destroyObject(item); + + if(vendor.getTemplate().contains("terminal_bazaar")) { + int salesFee = SALES_FEE; + if(premium) + salesFee *= 5; + + player.setBankCredits(player.getBankCredits() - salesFee); + player.sendSystemMessage(OutOfBand.ProsePackage("@base_player:sale_fee", salesFee), DisplayType.Broadcast); + } + + if(auction) { + + } + + player.getClient().getSession().write(itemSoldMsg.serialize()); + + } + + public AuctionItem createAuctionItem(SWGObject player, SWGObject vendor, SWGObject item, int price, String description, int duration, boolean auction, boolean premium) { + + AuctionItem auctionItem = new AuctionItem(item, player.getObjectID()); + auctionItem.setExpireTime(System.currentTimeMillis() + (COMMODITY_EXPIRE * 1000)); + auctionItem.setAuction(auction); + auctionItem.setItemDescription(description); + auctionItem.setPrice(price); + auctionItem.setItemType(item.getTemplateData().getAttribute("gameObjectType")); + auctionItem.setItemTypeCRC(CRC.StringtoCRC(item.getTemplate().replace("shared_", ""))); + auctionItem.setStatus(AuctionItem.FORSALE); + //auctionItem.setItemName("@" + item.getStfFilename() + ":" + item.getStfName()); + String name = item.getCustomName() == null ? item.getObjectName().getStfValue() : item.getCustomName(); + auctionItem.setItemName(name); + auctionItem.setVendorId(vendor.getObjectID()); + auctionItem.setPlanet(vendor.getPlanet().getName()); + auctionItem.setVuid(getVendorUID((TangibleObject) vendor)); + auctionItem.setOwnerName(player.getCustomName()); + + if(vendor.getAttachment("isVendor") == null) + auctionItem.setOnBazaar(true); + else { + if(!((long) vendor.getAttachment("vendorOwner") == player.getObjectID())) { + auctionItem.setOfferToId((long) vendor.getAttachment("owner")); + auctionItem.setStatus(AuctionItem.OFFERED); + } + } + addAuctionItem(auctionItem); + + return auctionItem; + } + + public String getVendorUID(TangibleObject vendor) { + + if(vendor.getAttachment("uid") != null) + return (String) vendor.getAttachment("uid"); + + String planet = ""; + if(vendor.getContainer() == null) + planet = vendor.getPlanet().getName(); + else + planet = vendor.getContainer().getPlanet().getName(); + + String uid = (planet + "."); + Point3D pos = vendor.getWorldPosition(); + + uid += ("@" + planet + "_region_names:" + core.mapService.getClosestCityName(vendor).toLowerCase().replace(" ", "_")); // TODO: replace this with city regions when they are implemented + uid += ("." + "@" + vendor.getStfFilename() + ":" + vendor.getStfName() + "."); + uid += (vendor.getObjectID() + "#" + pos.x + "," + pos.z); + vendor.setAttachment("uid", uid); + return uid; + + } + + @Override + public void shutdown() { + + } + + public AuctionItem getAuctionItem(long objectId) { + return auctionItems.parallelStream().filter(a -> a.getObjectId() == objectId).findFirst().orElse(null); + } + + public void addAuctionItem(AuctionItem auctionItem) { + if(auctionItem == null) + return; + auctionItems.add(auctionItem); + int commodityNumber = 0; + if(commodityLimit.get(auctionItem.getOwnerId()) != null) + commodityNumber = commodityLimit.get(auctionItem.getOwnerId()); + commodityLimit.put(auctionItem.getOwnerId(), commodityNumber + 1); + if(!core.getAuctionODB().contains(auctionItem.getObjectId())) { + core.objectService.persistObject(auctionItem.getObjectId(), auctionItem, core.getAuctionODB()); + } + } + + public void removeAuctionItem(AuctionItem auctionItem) { + auctionItems.remove(auctionItem); + int commodityNumber = 0; + if(commodityLimit.get(auctionItem.getOwnerId()) != null) + commodityNumber = commodityLimit.get(auctionItem.getOwnerId()); + commodityLimit.put(auctionItem.getOwnerId(), commodityNumber - 1); + core.objectService.deletePersistentObject(auctionItem.getObjectId(), core.getAuctionODB()); + } + + public void startVendorUpdateTask(CreatureObject owner, SWGObject vendor) { + + scheduler.scheduleAtFixedRate(() -> { + if(vendor == null || !((Boolean) vendor.getAttachment("initialized"))) + return; + + float maintenanceRate = 15; + if((Boolean) vendor.getAttachment("onMap")) + maintenanceRate += 6; + vendor.setAttachment("maintenanceAmount", (Integer) vendor.getAttachment("maintenanceAmount") - maintenanceRate); + // TODO add vendor delete after x days + }, 1, 1, TimeUnit.HOURS); + + } + + public int getNumberOfItemsForSale(long vendorId) { + return (int) auctionItems.parallelStream().filter(i -> i.getVendorId() == vendorId).count(); + } + +} diff --git a/src/services/chat/ChatRoom.java b/src/services/chat/ChatRoom.java new file mode 100644 index 00000000..dd243d2d --- /dev/null +++ b/src/services/chat/ChatRoom.java @@ -0,0 +1,161 @@ +/******************************************************************************* + * Copyright (c) 2013 + * + * This File is part of NGECore2. + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see . + * + * Using NGEngine to work with NGECore2 is making a combined work based on NGEngine. + * Therefore all terms and conditions of the GNU Lesser General Public License cover the combination. + ******************************************************************************/ +package services.chat; + +import java.io.Serializable; +import java.util.Vector; + + + +import com.sleepycat.persist.model.Entity; +import com.sleepycat.persist.model.NotPersistent; +import com.sleepycat.persist.model.PrimaryKey; + +@Entity(version=1) +public class ChatRoom implements Serializable { + + private static final long serialVersionUID = 1L; + private String creator; // creator of the room (first name only, lowercase) + private String description; // title + @PrimaryKey + private int roomId; + private String roomAddress; // name + + private Vector moderatorList = new Vector(); + private Vector banList = new Vector(); + @NotPersistent + private transient Vector userList = new Vector(); // current users + + private boolean moderatorsOnly; + private boolean privateRoom; + private boolean visible; + private boolean childrenAllowed; + private String owner; // current owner of the room (first name only lowercase) + + public String getCreator() { + return creator; + } + + public void setCreator(String creator) { + this.creator = creator.toLowerCase(); + } + + public String getRoomAddress() { + return roomAddress; + } + + public void setRoomAddress(String roomAddress) { + this.roomAddress = roomAddress; + } + + public int getRoomId() { + return roomId; + } + + public void setRoomId(int roomId) { + this.roomId = roomId; + } + + public Vector getModeratorList() { + return moderatorList; + } + + public Vector getUserList() { + return userList; + } + + public boolean isModeratorsOnly() { + return moderatorsOnly; + } + + public void setModeratorsOnly(boolean moderatorsOnly) { + this.moderatorsOnly = moderatorsOnly; + } + + public boolean isPrivateRoom() { + return privateRoom; + } + + public void setPrivateRoom(boolean privateRoom) { + this.privateRoom = privateRoom; + } + + public String getOwner() { + return owner; + } + + public void setOwner(String owner) { + this.owner = owner.toLowerCase(); + } + + public Vector getBanList() { + return banList; + } + + public String getDescription() { + return description; + } + + public void setDescription(String description) { + this.description = description; + } + + public boolean isVisible() { + return visible; + } + + public void setVisible(boolean visible) { + this.visible = visible; + } + + public void addUser(String user) { + userList.add(user.toLowerCase()); + } + + public void addModerator(String moderator) { + moderatorList.add(moderator.toLowerCase()); + } + + public void banUser(String user) { + banList.add(user.toLowerCase()); + } + + public boolean hasUser(String user) { + return userList.contains(user.toLowerCase()); + } + + public boolean hasModerator(String moderator) { + return moderatorList.contains(moderator.toLowerCase()); + } + + public boolean hasBan(String user) { + return banList.contains(user.toLowerCase()); + } + + public boolean isChildrenAllowed() { + return childrenAllowed; + } + + public void setChildrenAllowed(boolean childrenAllowed) { + this.childrenAllowed = childrenAllowed; + } +} diff --git a/src/services/chat/ChatService.java b/src/services/chat/ChatService.java index 0b32913a..84835f18 100644 --- a/src/services/chat/ChatService.java +++ b/src/services/chat/ChatService.java @@ -26,38 +26,53 @@ import java.util.Date; import java.util.HashSet; import java.util.List; import java.util.Map; +import java.util.Map.Entry; import java.util.Random; +import java.util.Vector; import java.util.concurrent.ConcurrentHashMap; import org.apache.mina.core.buffer.IoBuffer; import org.apache.mina.core.session.IoSession; -import com.sleepycat.je.Transaction; -import com.sleepycat.persist.EntityCursor; - +import engine.clientdata.ClientFileManager; +import engine.clientdata.visitors.DatatableVisitor; import engine.clients.Client; import engine.resources.config.Config; import engine.resources.config.DefaultConfig; +import engine.resources.database.ODBCursor; import engine.resources.database.ObjectDatabase; import engine.resources.objects.SWGObject; +import engine.resources.scene.Planet; import engine.resources.scene.Point3D; import engine.resources.service.INetworkDispatch; import engine.resources.service.INetworkRemoteEvent; import resources.common.*; +import resources.datatables.DisplayType; +import resources.guild.Guild; import resources.objects.creature.CreatureObject; import resources.objects.player.PlayerObject; -import protocol.swg.ChatOnChangeFriendStatus; -import protocol.swg.ChatDeletePersistentMessage; -import protocol.swg.ChatFriendsListUpdate; -import protocol.swg.ChatInstantMessageToCharacter; -import protocol.swg.ChatInstantMessagetoClient; -import protocol.swg.ChatOnAddFriend; -import protocol.swg.ChatOnSendInstantMessage; -import protocol.swg.ChatOnSendPersistentMessage; -import protocol.swg.ChatPersistentMessageToClient; -import protocol.swg.ChatPersistentMessageToServer; -import protocol.swg.ChatRequestPersistentMessage; +import protocol.swg.AddIgnoreMessage; import protocol.swg.ObjControllerMessage; +import protocol.swg.chat.ChatDeletePersistentMessage; +import protocol.swg.chat.ChatEnterRoomById; +import protocol.swg.chat.ChatFriendsListUpdate; +import protocol.swg.chat.ChatInstantMessageToCharacter; +import protocol.swg.chat.ChatInstantMessagetoClient; +import protocol.swg.chat.ChatOnAddFriend; +import protocol.swg.chat.ChatOnChangeFriendStatus; +import protocol.swg.chat.ChatOnEnteredRoom; +import protocol.swg.chat.ChatOnLeaveRoom; +import protocol.swg.chat.ChatOnSendInstantMessage; +import protocol.swg.chat.ChatOnSendPersistentMessage; +import protocol.swg.chat.ChatOnSendRoomMessage; +import protocol.swg.chat.ChatPersistentMessageToClient; +import protocol.swg.chat.ChatPersistentMessageToServer; +import protocol.swg.chat.ChatQueryRoom; +import protocol.swg.chat.ChatRequestPersistentMessage; +import protocol.swg.chat.ChatRoomList; +import protocol.swg.chat.ChatRoomMessage; +import protocol.swg.chat.ChatSendToRoom; +import protocol.swg.chat.ChatSystemMessage; import protocol.swg.objectControllerObjects.PlayerEmote; import protocol.swg.objectControllerObjects.SpatialChat; import main.NGECore; @@ -66,53 +81,81 @@ public class ChatService implements INetworkDispatch { private NGECore core; private ObjectDatabase mailODB; - + private ObjectDatabase chatRoomsODB; + private ConcurrentHashMap chatRooms = new ConcurrentHashMap(); + public ChatService(NGECore core) { this.core = core; core.commandService.registerCommand("spatialchatinternal"); core.commandService.registerCommand("socialinternal"); + + core.commandService.registerCommand("addignore"); + core.commandService.registerCommand("removeignore"); + core.commandService.registerCommand("findfriend"); + core.commandService.registerCommand("addfriend"); + core.commandService.registerCommand("removefriend"); + + core.commandService.registerAlias("g", "groupchat"); + core.commandService.registerAlias("gc", "groupchat"); + core.commandService.registerAlias("groupsay", "groupchat"); + core.commandService.registerAlias("gsay", "groupchat"); + core.commandService.registerAlias("gtell", "groupchat"); + + core.commandService.registerAlias("planet", "planetchat"); + mailODB = core.getMailODB(); + chatRoomsODB = core.getChatRoomODB(); + } - public void handleSpatialChat(SWGObject speaker, SWGObject target, String chatMessage, short chatType, short moodId) { - + /* + * This gets used by NPCs as well (random shouts, mustafar miners, etc). + */ + public void spatialChat(SWGObject speaker, SWGObject target, String chatMessage, short chatType, short moodId, int languageId, OutOfBand outOfBand) { long targetId; - if(target == null) + if (target == null) { targetId = 0; - else + } else { targetId = target.getObjectID(); + } - //System.out.println(chatMessage); - //System.out.println(chatType); - //System.out.println(moodId); - - SpatialChat spatialChat = new SpatialChat(speaker.getObjectID(), targetId, chatMessage, chatType, moodId); - ObjControllerMessage objControllerMessage = new ObjControllerMessage(0x0B, spatialChat); + ObjControllerMessage objControllerMessage = new ObjControllerMessage(0x0B, new SpatialChat(speaker.getObjectId(), speaker.getObjectID(), targetId, chatMessage, chatType, moodId, languageId, outOfBand)); Client speakerClient = speaker.getClient(); - if(speakerClient == null || speakerClient.getSession() == null) - return; - - speakerClient.getSession().write(objControllerMessage.serialize()); +// if (speakerClient == null || speakerClient.getSession() == null) { +// return; +// } - if(speaker.getObservers().isEmpty()) + if (speakerClient != null) { + if (speakerClient.getSession() != null) + speakerClient.getSession().write(objControllerMessage.serialize()); + } + + + if (speaker.getObservers().isEmpty()) { return; + } HashSet observers = new HashSet(speaker.getObservers()); Point3D position = speaker.getPosition(); - for(Client client : observers) { + for (Client client : observers) { float distance = client.getParent().getPosition().getDistance2D(position); - if(client != null && client.getSession() != null && distance <= 80) { - spatialChat.setDestinationId(client.getParent().getObjectID()); - ObjControllerMessage objControllerMessage2 = new ObjControllerMessage(0x0B, spatialChat); - client.getSession().write(objControllerMessage2.serialize()); + if (client != null && client.getSession() != null && distance <= 80) { + if (((PlayerObject) client.getParent().getSlottedObject("ghost")).getIgnoreList().contains(speaker.getCustomName().toLowerCase().split(" ")[0])) { + continue; + } + + String message = chatMessage; + SpatialChat spatialChat = new SpatialChat(client.getParent().getObjectId(), speaker.getObjectID(), targetId, message, chatType, moodId, languageId, outOfBand); + objControllerMessage = new ObjControllerMessage(0x0B, spatialChat); + client.getSession().write(objControllerMessage.serialize()); + tools.CharonPacketUtils.printAnalysis(objControllerMessage.serialize()); } } - } public void handleEmote(SWGObject speaker, SWGObject target, short emoteId) { @@ -167,7 +210,7 @@ public class ChatService implements INetworkDispatch { chatInstantMsg.deserialize(data); String firstName = chatInstantMsg.getRecipient(); - Client client = core.getClient((Integer) session.getAttribute("connectionId")); + Client client = core.getClient(session); if(client == null) return; @@ -177,10 +220,16 @@ public class ChatService implements INetworkDispatch { if(sender == null) return; - - SWGObject recipient = getObjectByFirstName(firstName); + if (recipient == null) + return; + + PlayerObject recipientGhost = (PlayerObject) recipient.getSlottedObject("ghost"); + + if (recipientGhost.getIgnoreList().contains(sender.getCustomName().toLowerCase())) + return; + if(recipient == null || recipient.getClient() == null || recipient.getClient().getSession() == null) { ChatOnSendInstantMessage response = new ChatOnSendInstantMessage(4, chatInstantMsg.getSequence()); //System.out.println(response.serialize().getHexDump()); @@ -208,7 +257,7 @@ public class ChatService implements INetworkDispatch { ChatPersistentMessageToServer packet = new ChatPersistentMessageToServer(); packet.deserialize(data); - Client client = core.getClient((Integer) session.getAttribute("connectionId")); + Client client = core.getClient(session); if(client == null) return; @@ -217,9 +266,36 @@ public class ChatService implements INetworkDispatch { if(sender == null) return; - + // TODO: Recipient handling for values: citizens, group, guild ranks (ace, boot, admiral, etc.) + + if (packet.getRecipient().equals("guild")) { + Guild guild = core.guildService.getGuildById(((CreatureObject) sender).getGuildId()); + if (guild == null || !guild.getMembers().containsKey(sender.getObjectID())) { + ChatOnSendPersistentMessage response = new ChatOnSendPersistentMessage(4, packet.getCounter()); + session.write(response.serialize()); + return; + } + + if (!guild.getMember(sender.getObjectID()).hasMailPermission()) { + ((CreatureObject) sender).sendSystemMessage("@guild:generic_fail_no_permission", (byte) 0); + ChatOnSendPersistentMessage response = new ChatOnSendPersistentMessage(4, packet.getCounter()); + session.write(response.serialize()); + return; + } + guild.sendGuildMail(sender.getCustomName(), packet.getSubject(), packet.getMessage()); + + ChatOnSendPersistentMessage response = new ChatOnSendPersistentMessage(0, packet.getCounter()); + session.write(response.serialize()); + return; + } + SWGObject recipient = getObjectByFirstName(packet.getRecipient()); - + + PlayerObject recipientGhost = (PlayerObject) recipient.getSlottedObject("ghost"); + + if (recipientGhost.getIgnoreList().contains(sender.getCustomName().toLowerCase())) + return; + if(recipient == null || recipient.getSlottedObject("ghost" ) == null) { ChatOnSendPersistentMessage response = new ChatOnSendPersistentMessage(4, packet.getCounter()); session.write(response.serialize()); @@ -234,7 +310,7 @@ public class ChatService implements INetworkDispatch { mail.setStatus(Mail.NEW); mail.setSubject(packet.getSubject()); mail.setTimeStamp((int) (date.getTime() / 1000)); - mail.setAttachments(packet.getWaypointAttachments()); + mail.setWaypointAttachments(packet.getWaypointAttachments()); storePersistentMessage(mail); if(recipient.getClient() != null) { @@ -259,13 +335,13 @@ public class ChatService implements INetworkDispatch { ChatRequestPersistentMessage packet = new ChatRequestPersistentMessage(); packet.deserialize(data); - Client client = core.getClient((Integer) session.getAttribute("connectionId")); + Client client = core.getClient(session); if(client == null) return; SWGObject obj = client.getParent(); - Mail mail = mailODB.get(new Integer(packet.getMailId()), Integer.class, Mail.class); + Mail mail = (Mail) mailODB.get((long) packet.getMailId()); if(obj == null || mail == null) return; @@ -294,13 +370,13 @@ public class ChatService implements INetworkDispatch { ChatDeletePersistentMessage packet = new ChatDeletePersistentMessage(); packet.deserialize(data); - Client client = core.getClient((Integer) session.getAttribute("connectionId")); + Client client = core.getClient(session); if(client == null) return; SWGObject obj = client.getParent(); - Mail mail = mailODB.get(new Integer(packet.getMailId()), Integer.class, Mail.class); + Mail mail = (Mail) mailODB.get((long) packet.getMailId()); if(obj == null || mail == null) return; @@ -312,16 +388,163 @@ public class ChatService implements INetworkDispatch { } }); + + swgOpcodes.put(Opcodes.ChatRequestRoomList, new INetworkRemoteEvent() { + + @Override + public void handlePacket(IoSession session, IoBuffer data) throws Exception { + Client client = core.getClient(session); + + if(client == null) + return; + + SWGObject obj = client.getParent(); + + if (obj == null) + return; + + ChatRoomList listMessage = new ChatRoomList(chatRooms); + client.getSession().write(listMessage.serialize()); + + } + + }); + + swgOpcodes.put(Opcodes.ChatCreateRoom, (session, data) -> { + /*data.order(ByteOrder.LITTLE_ENDIAN); + + Client client = core.getClient(session); + + if(client == null) + return; + + SWGObject obj = client.getParent(); + + if (obj == null) + return; + + CreatureObject creo = (CreatureObject) obj; + + ChatCreateRoom sentPacket = new ChatCreateRoom(); + sentPacket.deserialize(data); + + ChatRoom room = createChatRoom(sentPacket.getTitle(), sentPacket.getAddress(), creo.getCustomName().toLowerCase(), true, false); + + if (room != null) { + room.setPrivateRoom(sentPacket.isPrivacy()); + room.setModeratorsOnly(sentPacket.isModeratorOnly()); + room.addUser(creo.getCustomName()); + room.addModerator(creo.getCustomName()); + ChatOnCreateRoom response = new ChatOnCreateRoom(room, 0, sentPacket.getRequest()); + session.write(response.serialize()); + } + + System.out.println("Created room.");*/ + + }); + + swgOpcodes.put(Opcodes.ChatQueryRoom, (session, data) -> { + Client client = core.getClient(session); + + if(client == null) + return; + + SWGObject obj = client.getParent(); + + if (obj == null) + return; + + data.order(ByteOrder.LITTLE_ENDIAN); + data.position(0); + ChatQueryRoom request = new ChatQueryRoom(); + request.deserialize(data); + + ChatRoom room = getChatRoomByAddress(request.getRoomAddress()); + + if (room == null) + return; + + ChatQueryRoom response = new ChatQueryRoom(room, request.getRequestId()); + obj.getClient().getSession().write(response.serialize()); + }); + + swgOpcodes.put(Opcodes.ChatSendToRoom, (session, data) -> { + + Client client = core.getClient(session); + + if(client == null) + return; + + SWGObject obj = client.getParent(); + + if (obj == null) + return; + + data.order(ByteOrder.LITTLE_ENDIAN); + data.position(0); + ChatSendToRoom sentPacket = new ChatSendToRoom(); + sentPacket.deserialize(data); + + if (((PlayerObject) obj.getSlottedObject("ghost")).isMemberOfChannel(sentPacket.getRoomId())) + sendChatRoomMessage((CreatureObject) obj, sentPacket.getRoomId(), sentPacket.getMsgId(), sentPacket.getMessage()); + + }); + + swgOpcodes.put(Opcodes.ChatEnterRoomById, (session, data) -> { + Client client = core.getClient(session); + + if(client == null) + return; + + SWGObject obj = client.getParent(); + + if (obj == null) + return; + + data.order(ByteOrder.LITTLE_ENDIAN); + data.position(0); + ChatEnterRoomById sentPacket = new ChatEnterRoomById(); + sentPacket.deserialize(data); + + if(joinChatRoom(obj.getCustomName(), sentPacket.getRoomId()) && !sentPacket.getRoomname().equals("SWG." + core.getGalaxyName() + "." + obj.getPlanet().name + ".Planet")) { + PlayerObject player = (PlayerObject) obj.getSlottedObject("ghost"); + + if (player != null) + player.addChannel(sentPacket.getRoomId()); + } + }); + + swgOpcodes.put(Opcodes.ChatLeaveRoom, (session, data) -> { + Client client = core.getClient(session); + + if(client == null) + return; + + SWGObject obj = client.getParent(); + + if (obj == null) + return; + + data.order(ByteOrder.LITTLE_ENDIAN); + data.position(0); + + ChatOnLeaveRoom sentPacket = new ChatOnLeaveRoom(); + sentPacket.deserialize(data); + + ChatRoom room = getChatRoomByAddress(sentPacket.getChannelAddress()); + + leaveChatRoom((CreatureObject) obj, room.getRoomId(), true); + + }); } public void playerStatusChange(String name, byte status) { String shortName = name.toLowerCase(); - ConcurrentHashMap clients = core.getActiveConnectionsMap(); + ConcurrentHashMap clients = core.getActiveConnectionsMap(); for(Client client : clients.values()) { - - + if(client.getParent() == null) continue; @@ -340,85 +563,114 @@ public class ChatService implements INetworkDispatch { } } - public void removeFriend(PlayerObject actor, String friendName, boolean notify) { + public void removeFriend(PlayerObject actor, String friendName) { + CreatureObject creature = (CreatureObject) actor.getContainer(); + friendName = friendName.split(" ")[0].toLowerCase(); - friendName = friendName.toLowerCase(); - - //SWGObject friendObject = getObjectByFirstName(friendName); - - if (actor == null || actor.getContainer() == null) + if (actor == null || creature == null || friendName.equals("")) return; - List friendList = actor.getFriendList(); - - if (notify) { + if(actor.getFriendList().contains(friendName)) { ChatOnChangeFriendStatus removeMessage = new ChatOnChangeFriendStatus(actor.getContainer().getObjectID(), friendName, 0); - actor.getContainer().getClient().getSession().write(removeMessage.serialize()); + creature.getClient().getSession().write(removeMessage.serialize()); - if(friendList.contains(friendName)) { - actor.friendRemove(friendName); - friendList.remove(friendName); - } + actor.friendRemove(friendName); + } else { + creature.sendSystemMessage(friendName + " is not a valid friend name.", (byte) 0); } } - public void addFriend(PlayerObject actor, String friendName, boolean notify) { - // ChatOnAddFriend, ChatOnChangeFriendStatus, ChatFriendsListUpdate, ChatSystemMessage, ChatOnGetFriendsList - SWGObject friendObject = getObjectByFirstName(friendName); + public void addFriend(PlayerObject actor, String friend) { + CreatureObject creature = (CreatureObject) actor.getContainer(); - PlayerObject friend = (PlayerObject) friendObject.getSlottedObject("ghost"); - CreatureObject friendCreature = (CreatureObject) friend.getContainer(); - List friendList = actor.getFriendList(); - - if (actor == null || friendObject.getSlottedObject("ghost") == null) + if (actor == null || creature == null || friend.equals("")) return; - CreatureObject actorCreature = (CreatureObject) actor.getContainer(); - if (actorCreature == null) - return; + friend = friend.toLowerCase(); - boolean friendIsOnline = friendObject.isInQuadtree(); - - String friendShortName = friendCreature.getCustomName().toLowerCase(); - - if (friendCreature.getCustomName().contains(" ")) { - String[] splitName = friendCreature.getCustomName().toLowerCase().split(" "); - friendShortName = splitName[0]; + if (friend.contains(" ")) { + friend = friend.split(" ")[0]; } - if (friendList.contains(friendShortName)) { - actorCreature.sendSystemMessage(friendShortName + " is already on your friends list.", (byte) 0); - return; - } - - - - if (notify) { - ChatOnAddFriend init = new ChatOnAddFriend(); - actorCreature.getClient().getSession().write(init.serialize()); + if(core.characterService.playerExists(friend)) { - ChatOnChangeFriendStatus addMessage = new ChatOnChangeFriendStatus(actorCreature.getObjectID(), friendShortName, 1); - actorCreature.getClient().getSession().write(addMessage.serialize()); - - if(friendIsOnline) { - ChatFriendsListUpdate updateStatus = new ChatFriendsListUpdate(friendShortName, (byte)1); - actorCreature.getClient().getSession().write(updateStatus.serialize()); + if(actor.getIgnoreList().contains(friend)) { + creature.sendSystemMessage(friend + " is being ignored, unable to put in your friends list.", (byte) 0); } + + SWGObject friendObj = getObjectByFirstName(friend); + boolean isOnline = false; + + if (friendObj != null && friendObj.isInQuadtree()) + isOnline = true; + + ChatOnAddFriend init = new ChatOnAddFriend(); + creature.getClient().getSession().write(init.serialize()); + + ChatOnChangeFriendStatus addFriend = new ChatOnChangeFriendStatus(creature.getObjectId(), friend, 1); + creature.getClient().getSession().write(addFriend.serialize()); + + if (isOnline) { + ChatFriendsListUpdate onlineUpdate = new ChatFriendsListUpdate(friend, (byte) 1); + creature.getClient().getSession().write(onlineUpdate.serialize()); + } + + actor.friendAdd(friend); + creature.sendSystemMessage(friend + " is now your friend.", (byte) 0); + + } else { + creature.sendSystemMessage(friend + " is not a valid friend name.", (byte) 0); + } + } + + public void addToIgnoreList(SWGObject actor, String ignoreName) { + ignoreName = ignoreName.split(" ")[0].toLowerCase(); + if (actor == null) + return; + + PlayerObject ghost = (PlayerObject) actor.getSlottedObject("ghost"); + CreatureObject creature = (CreatureObject) actor; + + if(ghost == null) + return; + + if (ghost.getIgnoreList().contains(ignoreName)) { + creature.sendSystemMessage(ignoreName + " is already in your ignore list.", (byte) 0); + return; } - friendList.add(friendShortName); + if(!core.characterService.playerExists(ignoreName)) { + creature.sendSystemMessage(ignoreName + " is not a valid ignore name.", (byte) 0); + return; + } - //actor.friendAdd(friendShortName); - //actor.friendAdd(friendShortName); - //if (actor.getFriendList().size() != 0) { - //ChatOnGetFriendsList sendFriendsList = new ChatOnGetFriendsList(actor); - //actorCreature.getClient().getSession().write(sendFriendsList.serialize()); - //} + AddIgnoreMessage addIgnore = new AddIgnoreMessage(actor, ignoreName, true); + actor.getClient().getSession().write(addIgnore.serialize()); + ghost.ignoreAdd(ignoreName); + + creature.sendSystemMessage(ignoreName + " is now ignored.", (byte) 0); + + } + + public void removeFromIgnoreList(SWGObject actor, String ignoreName) { + if (actor == null) + return; - actorCreature.sendSystemMessage(friendShortName + " has been added to your friends list.", (byte) 0); + PlayerObject ghost = (PlayerObject) actor.getSlottedObject("ghost"); + CreatureObject creature = (CreatureObject) actor; - //actor.friendAdd(friendShortName); + if (ghost == null || creature == null) + return; + + if (ghost.getIgnoreList().contains(ignoreName)) { + AddIgnoreMessage message = new AddIgnoreMessage(actor, ignoreName, false); + creature.getClient().getSession().write(message.serialize()); + + ghost.ignoreRemove(ignoreName); + + creature.sendSystemMessage(ignoreName + " is no longer ignored.", (byte) 0); + } } public void sendPersistentMessageHeader(Client client, Mail mail) { @@ -435,7 +687,7 @@ public class ChatService implements INetworkDispatch { //System.out.println(config.getString("GALAXY_NAME")); ChatPersistentMessageToClient msg = new ChatPersistentMessageToClient(mail.getSenderName(), config.getString("GALAXY_NAME"), mail.getMailId() - ,(byte) 1, "", mail.getSubject(), mail.getStatus(), mail.getTimeStamp(), mail.getAttachments()); + ,(byte) 1, "", mail.getSubject(), mail.getStatus(), mail.getTimeStamp(), mail.getWaypointAttachments(), mail.getProseAttachments()); client.getSession().write(msg.serialize()); } @@ -454,22 +706,18 @@ public class ChatService implements INetworkDispatch { //System.out.println(config.getString("GALAXY_NAME")); ChatPersistentMessageToClient msg = new ChatPersistentMessageToClient(mail.getSenderName(), config.getString("GALAXY_NAME"), mail.getMailId() - ,(byte) 0, mail.getMessage(), mail.getSubject(), mail.getStatus(), mail.getTimeStamp(), mail.getAttachments()); + ,(byte) 0, mail.getMessage(), mail.getSubject(), mail.getStatus(), mail.getTimeStamp(), mail.getWaypointAttachments(), mail.getProseAttachments()); client.getSession().write(msg.serialize()); } public void storePersistentMessage(Mail mail) { - Transaction txn = mailODB.getEnvironment().beginTransaction(null, null); - mailODB.put(mail, Integer.class, Mail.class, txn); - txn.commitSync(); + mailODB.put((long) mail.getMailId(), mail); } public void deletePersistentMessage(Mail mail) { - Transaction txn = mailODB.getEnvironment().beginTransaction(null, null); - mailODB.delete(new Integer(mail.getMailId()), Integer.class, Mail.class, txn); - txn.commitSync(); + mailODB.remove((long) mail.getMailId()); } public void loadMailHeaders(Client client) { @@ -479,15 +727,19 @@ public class ChatService implements INetworkDispatch { if(obj == null || client.getSession() == null) return; - EntityCursor cursor = mailODB.getCursor(Integer.class, Mail.class); + ODBCursor cursor = mailODB.getCursor(); - for(Mail mail : cursor) { - - if(mail.getRecieverId() == obj.getObjectID()) + while(cursor.hasNext()) { + Mail mail = (Mail) cursor.next(); + if(mail == null) + continue; + if(mail.getRecieverId() == obj.getObjectID()) { sendPersistentMessageHeader(client, mail); - + } + } + cursor.close(); } @Override @@ -496,7 +748,10 @@ public class ChatService implements INetworkDispatch { } public SWGObject getObjectByFirstName(String name) { - ConcurrentHashMap clients = core.getActiveConnectionsMap(); + ConcurrentHashMap clients = core.getActiveConnectionsMap(); + + if(name.contains(" ")) + name = name.split(" ")[0]; for(Client client : clients.values()) { if(client.getParent() == null) @@ -516,7 +771,7 @@ public class ChatService implements INetworkDispatch { int id = rand.nextInt(); - if(mailODB.contains(new Integer(id), Integer.class, Mail.class)) + if(mailODB.contains((long) id)) return generateMailId(); else return id; @@ -524,9 +779,296 @@ public class ChatService implements INetworkDispatch { public Mail getMailById(int mailId) { - Mail mail = mailODB.get(new Integer(mailId), Integer.class, Mail.class); + Mail mail = (Mail) mailODB.get((long) mailId); return mail; } + public ChatRoom getChatRoomByAddress(String address) { + for (Entry entry : chatRooms.entrySet()) { + if (entry.getValue().getRoomAddress().equals(address)) + return entry.getValue(); + } + return null; + } + + public ChatRoom getChatRoom(int roomId) { + return chatRooms.get(roomId); + } + + public int generateChatRoomId() { + Random rand = new Random(); + int id = rand.nextInt(); + + if (chatRoomsODB.contains((long) id)) + return generateChatRoomId(); + else + return id; + } + + public void broadcastGalaxy(String message) { + core.simulationService.notifyAllClients(new ChatSystemMessage(message, new OutOfBand(), DisplayType.Broadcast).serialize()); + } + + public void loadChatRooms() { + + /* + * Group Channel: + * SWG.serverName.group.groupObjectId.GroupChat + * Battlefields channel format: + * SWG.serverName.battlefield.bfMapName + * + * TODO: Research other channel address formats + */ + + createChatRoom("", "SWG", "system", false); + createChatRoom("", "SWG." + core.getGalaxyName(), "system", false); + createChatRoom("", "SWG." + core.getGalaxyName() + ".Chat", "system", false); + + createChatRoom("", "system", "system", true); // galaxy system messages + + createChatRoom("", "group", "system", false); + createChatRoom("", "guild", "system", false); + + createChatRoom("Auction chat for this galaxy", "Auction", "system", true); + createChatRoom("public chat for the whole galaxy, cannot create rooms here", "Galaxy", "system", true); + + createChatRoom("Bounty Hunter chat for this galaxy", "BountyHunter", "system", true); + createChatRoom("Commando chat for this galaxy", "Commando", "system", true); + createChatRoom("Officer chat for this galaxy", "Officer", "system", true); + createChatRoom("Entertainer chat for this galaxy", "Entertainer", "system", true); + createChatRoom("Spy chat for this galaxy", "Spy", "system", true); + createChatRoom("Force Sensitive chat for this galaxy", "ForceSensitive", "system", true); + + createChatRoom("Politician chat for this galaxy", "Politician", "system", true); + //createChatRoom("Pilot chat for this galaxy", "Pilot", "system", true); + + ODBCursor cursor = chatRoomsODB.getCursor(); + + while(cursor.hasNext()) { + ChatRoom room = (ChatRoom) cursor.next(); + if (!chatRooms.containsValue(room)) + chatRooms.put(room.getRoomId(), room); + } + cursor.close(); + + List planets = core.terrainService.getPlanetList(); + planets.forEach(planet -> { + createChatRoom("", planet.getName(), "system", true, true); + createChatRoom("", planet.getName() + ".Chat", "system", true, false); + createChatRoom("public chat for this planet, cannot create rooms here", planet.getName() + ".Planet", "system", true, false); + createChatRoom("system messages for this planet, cannot create rooms here", planet.getName() + ".system", "system", true, false); + Console.println("Created chat rooms for " + planet.getName()); + }); + } + + /** + * Creates a new ChatRoom that is not persistent and does not allow children. + * @param roomName Name of the room, description + * @param address Address of the room. Defaults to SWG.serverName + the value of this variable if it does not contain it. + * @param creator Creator of the room. Also set as the owner of the room. + * @param isPublic Determines weather or not the channel will show in the list of channels. + * @return {@link ChatRoom} + */ + public ChatRoom createChatRoom(String roomName, String address, String creator, boolean isPublic) { + return createChatRoom(roomName, address, creator, isPublic, false, false); + } + + /** + * Creates a new ChatRoom with the given values that is not persistent. + * @param roomName Name of the room, description + * @param address Address of the room. Defaults to SWG.serverName + the value of this variable if it does not contain it. + * @param creator Creator of the room. Also set as the owner of the room. + * @param isPublic Determines weather or not the channel will show in the list of channels. + * @param childrenAllowed Setting this to true allows players to create channels within it. + * @return {@link ChatRoom} + */ + public ChatRoom createChatRoom(String roomName, String address, String creator, boolean isPublic, boolean childrenAllowed) { + return createChatRoom(roomName, address, creator, isPublic, false, childrenAllowed); + } + + /** + * Creates a new ChatRoom with the given values. + * @param roomName Name of the room, description + * @param address Address of the room. Defaults to SWG.serverName + the value of this variable if it does not contain it. + * @param creator Creator of the room. Also set as the owner of the room. + * @param isPublic Determines weather or not the channel will show in the list of channels. + * @param store Setting this to true will make the channel persistent through server restarts. + * @param childrenAllowed Setting this to true allows players to create channels within it. + * @return {@link ChatRooms} + */ + public ChatRoom createChatRoom(String roomName, String address, String creator, boolean isPublic, boolean store, boolean childrenAllowed) { + + if (creator.contains(" ")) + creator = creator.split(" ")[0]; + + ChatRoom room = new ChatRoom(); + room.setDescription(roomName); + if (!address.startsWith("SWG")) + room.setRoomAddress("SWG." + core.getGalaxyName() + "." + address); + else + room.setRoomAddress(address); + room.setCreator(creator.toLowerCase()); + room.setOwner(creator.toLowerCase()); + room.setVisible(isPublic); + room.setRoomId(generateChatRoomId()); + room.setChildrenAllowed(childrenAllowed); + + chatRooms.put(room.getRoomId(), room); + + if(store){ + chatRoomsODB.put((long) room.getRoomId(), room); + } + + //Console.println("Created room " + address + " with ID " + room.getRoomId()); + + return room; + } + + public boolean joinChatRoom(String user, String roomAddress) { + chatRooms.forEach((k, v) -> { + if (v.getRoomAddress().equals(roomAddress)) { + joinChatRoom(user, k, true); + return; + } + }); + return false; + } + public boolean joinChatRoom(String user, int roomId, boolean resendList) { + + if (user.contains(" ")) + user = user.split(" ")[0]; + + ChatRoom room = getChatRoom(roomId); + if (room == null) + return false; + if (!room.hasUser(user.toLowerCase())) { + + if (!room.isVisible() || resendList) { + CreatureObject creo = (CreatureObject) getObjectByFirstName(user); + if (creo != null) { + ChatRoomList listMessage = new ChatRoomList(room); + creo.getClient().getSession().write(listMessage.serialize()); + } + } + ChatOnEnteredRoom enter = new ChatOnEnteredRoom(user, 0, room.getRoomId(), true); + SWGObject player = getObjectByFirstName(user); + + if (player == null || player.getClient() == null || player.getClient().getSession() == null) + return false; + + player.getClient().getSession().write(enter.serialize()); + + for (String roomUser : room.getUserList()) { + SWGObject roomPlayer = getObjectByFirstName(roomUser); + + if (roomPlayer != null && roomPlayer.getClient() != null && roomPlayer.getClient().getSession() != null) + roomPlayer.getClient().getSession().write(enter.serialize()); + } + + room.addUser(user.toLowerCase()); + if (!((CreatureObject) player).getPlayerObject().isMemberOfChannel(roomId)) { + ((CreatureObject) player).getPlayerObject().addChannel(roomId); + } + return true; + } + return false; + } + + public boolean joinChatRoom(String user, int roomId) { + return joinChatRoom(user, roomId, false); + } + + public void leaveChatRoom(CreatureObject player, int roomId, boolean removeFromList) { + + ChatRoom room = getChatRoom(roomId); + if (room == null) + return; + + String playerName = player.getCustomName().toLowerCase(); + + if (playerName.contains(" ")) + playerName = playerName.split(" ")[0]; + + ChatOnEnteredRoom leaveRoom = new ChatOnEnteredRoom(playerName, 0, roomId, false); + player.getClient().getSession().write(leaveRoom.serialize()); + + room.getUserList().remove(playerName); + + room.getUserList().forEach(user -> { + SWGObject roomPlayer = getObjectByFirstName(user); + + if (roomPlayer != null && roomPlayer.getClient() != null && roomPlayer.getClient().getSession() != null) { + roomPlayer.getClient().getSession().write(leaveRoom.serialize()); + } + }); + + if (removeFromList) + ((PlayerObject) player.getSlottedObject("ghost")).removeChannel((Integer) roomId); + } + + public void sendChatRoomMessage(CreatureObject sender, int roomId, int msgId, String message) { + ChatRoom room = getChatRoom(roomId); + + if (room == null) + return; + + String senderName = sender.getCustomName(); + + if (senderName.contains(" ")) + senderName = senderName.split(" ")[0]; + + if (message.startsWith("\\#")) + message = " " + message; + + ChatOnSendRoomMessage onSend = new ChatOnSendRoomMessage(0, msgId); + sender.getClient().getSession().write(onSend.serialize()); + + ChatRoomMessage roomMessage = new ChatRoomMessage(roomId, senderName, message); + Vector users = room.getUserList(); + users.forEach(user -> { + SWGObject player = getObjectByFirstName(user); + if (player != null && player.getClient() != null && player.getClient().getSession() != null) { + player.getClient().getSession().write(roomMessage.serialize()); + } + }); + } + + public ConcurrentHashMap getChatRooms() { + return chatRooms; + } + + /* + * Language interpretation. + * Converts messages into a language if the receiver can't comprehend it + */ + public String interpret(String message, int languageId, CreatureObject receiver) { + try { + DatatableVisitor visitor = ClientFileManager.loadFile("datatables/game_language/game_language.iff", DatatableVisitor.class); + + if (visitor.getObject(0, 0) == null) { + return message; + } + + String comprehendSkillMod = (String) visitor.getObject(languageId, 1); + + if (receiver.getSkillModBase(comprehendSkillMod) > 0) { + return message; + } + + for (int l = 3; l < 29; l++) { + String letter = ((String) visitor.getObject(0, l)); + String replacement = ((String) visitor.getObject(languageId, l)); + + if (replacement.length() > 0) { + message = message.replace(letter, replacement); + } + } + } catch (InstantiationException | IllegalAccessException e) { + e.printStackTrace(); + } + + return message; + } + } diff --git a/src/services/chat/Mail.java b/src/services/chat/Mail.java index 5709a059..c5f829b4 100644 --- a/src/services/chat/Mail.java +++ b/src/services/chat/Mail.java @@ -21,13 +21,21 @@ ******************************************************************************/ package services.chat; +import java.io.Serializable; +import java.util.ArrayList; import java.util.List; + +import resources.common.OutOfBand; +import resources.common.ProsePackage; + import com.sleepycat.persist.model.Entity; import com.sleepycat.persist.model.PrimaryKey; @Entity(version=1) -public class Mail { +public class Mail implements Serializable { + private static final long serialVersionUID = 1L; + @PrimaryKey private int mailId; private String senderName; @@ -36,7 +44,8 @@ public class Mail { private String message; private byte status; private int timeStamp; - private List attachments; + private List attachments = new ArrayList(); + private List proseAttachments = new ArrayList(); public static final byte NEW = 0x4E; public static final byte READ = 0x52; @@ -117,14 +126,28 @@ public class Mail { this.timeStamp = timeStamp; } - - public List getAttachments() { + public List getWaypointAttachments() { return attachments; } - - public void setAttachments(List attachments) { + public void setWaypointAttachments(List attachments) { this.attachments = attachments; } + public void addWaypointAttachment(WaypointAttachment attachment) { + attachments.add(attachment); + } + + public List getProseAttachments() { + return proseAttachments; + } + + public void setProseAttachments(List proseAttachments) { + this.proseAttachments = proseAttachments; + } + + public void addProseAttachment(ProsePackage prose) { + proseAttachments.add(prose); + } + } diff --git a/src/services/chat/WaypointAttachment.java b/src/services/chat/WaypointAttachment.java index 314cb08f..1a3c2d84 100644 --- a/src/services/chat/WaypointAttachment.java +++ b/src/services/chat/WaypointAttachment.java @@ -21,11 +21,15 @@ ******************************************************************************/ package services.chat; +import java.io.Serializable; + import com.sleepycat.persist.model.Persistent; @Persistent -public class WaypointAttachment { +public class WaypointAttachment implements Serializable { + private static final long serialVersionUID = 1L; + public WaypointAttachment() { } public long cellID; diff --git a/src/services/collections/CollectionService.java b/src/services/collections/CollectionService.java new file mode 100644 index 00000000..608dfb9d --- /dev/null +++ b/src/services/collections/CollectionService.java @@ -0,0 +1,939 @@ +/******************************************************************************* + * Copyright (c) 2013 + * + * This File is part of NGECore2. + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see . + * + * Using NGEngine to work with NGECore2 is making a combined work based on NGEngine. + * Therefore all terms and conditions of the GNU Lesser General Public License cover the combination. + ******************************************************************************/ +package services.collections; + +import java.util.BitSet; +import java.util.Map; +import java.util.Map.Entry; +import java.util.TreeMap; + +import org.python.core.Py; +import org.python.core.PyObject; + +import resources.common.FileUtilities; +import resources.common.OutOfBand; +import resources.datatables.DisplayType; +import resources.objects.creature.CreatureObject; +import resources.objects.player.PlayerObject; +import main.NGECore; +import engine.clientdata.ClientFileManager; +import engine.clientdata.StfTable; +import engine.clientdata.visitors.DatatableVisitor; +import engine.resources.common.Stf; +import engine.resources.scene.Point3D; +import engine.resources.service.INetworkDispatch; +import engine.resources.service.INetworkRemoteEvent; + +public class CollectionService implements INetworkDispatch { + + private NGECore core; + + private Map> explorationLocations = new TreeMap>(); + + private class ExplorationRegion { + + public Point3D location; + public float range; + + public ExplorationRegion(Point3D location, float range) { + this.location = location; + this.range = range; + } + + } + + public CollectionService(NGECore core) { + this.core = core; + + if (FileUtilities.doesFileExist("scripts/collections/exploration_badges.py")) { + PyObject method = core.scriptService.getMethod("scripts/collections/", "exploration_badges", "setup"); + + if (method != null && method.isCallable()) { + method.__call__(Py.java2py(this)); + } + } + } + + /** + * @see datatables/collection/collections.iff + * + * Count and exploration count badges are added automatically. + * + * You can add a new exploration location in scripts/collections + * /exploration_badges.py by defining setup(collectionService) + * and using collectionService.registerExplorationBadge(badge, x, z). + * + * Scripts named collection's slotName or collectionName should be + * put in scripts/collections/ and can use the modify(core, actor, count) + * method upon modification or complete(core, actor, count) on completion. + * + * Please distinguish a slot from a collection. A slot could be + * a type of blacksun ship where you have to kill 25 of them, and a + * collection could be a row of different blacksun ships. + * + * You'll need to choose carefully whether you make a script for the + * collection, or the specific slots, or both. + * + * @param creature The player's CreatureObject instance. + * @param collection slotName of the collection you want to add. + * + * @return True if added successfully. + */ + @SuppressWarnings("unused") + public boolean addCollection(CreatureObject creature, String collection) { + PlayerObject player = (PlayerObject) creature.getSlottedObject("ghost"); + DatatableVisitor collectionTable; + + if (player == null) { + return false; + } + + collection = collection.toLowerCase(); + + if (isComplete(creature, collection)) { + return false; + } + + try { + collectionTable = ClientFileManager.loadFile("datatables/collection/collection.iff", DatatableVisitor.class); + BitSet collections; + String bookName = ""; + String pageName = ""; + String collectionName = ""; + boolean titleOnComplete = false; + + collections = BitSet.valueOf(player.getCollections()); + + for (int c = 0; c < collectionTable.getRowCount(); c++) { + if (collectionTable.getObject(c, 0) != null) { + if (((String) collectionTable.getObject(c, 0)) != "") { + bookName = ((String) collectionTable.getObject(c, 0)); + pageName = ""; + collectionName = ""; + titleOnComplete = false; + } else if (((String) collectionTable.getObject(c, 1)) != "") { + pageName = ((String) collectionTable.getObject(c, 1)); + collectionName = ""; + titleOnComplete = false; + } else if (((String) collectionTable.getObject(c, 2)) != "") { + collectionName = ((String) collectionTable.getObject(c, 2)); + titleOnComplete = ((Boolean) collectionTable.getObject(c, 27)); + } else if (((String) collectionTable.getObject(c, 3)) != "") { + String slotName = ((String) collectionTable.getObject(c, 3)); + + if (slotName.equals(collection)) { + int bits = 0; + boolean noScriptOnModify = false; + boolean clearOnComplete = false; + boolean noMessage = false; + boolean grantIfPreReqMet = true; + boolean buddyCollection = false; + int numAltTitles = 0; + int beginSlotId = ((Integer) collectionTable.getObject(c, 4)); + int endSlotId = ((Integer) collectionTable.getObject(c, 5)); + int maxSlotValue = ((Integer) collectionTable.getObject(c, 6)); + String music = ((String) collectionTable.getObject(c, 24)); + boolean hidden = ((Boolean) collectionTable.getObject(c, 26)); + boolean title = ((Boolean) collectionTable.getObject(c, 27)); + boolean noReward = ((Boolean) collectionTable.getObject(c, 33)); + boolean trackServerFirst = ((Boolean) collectionTable.getObject(c, 34)); + + String[] categories = { + ((String) collectionTable.getObject(c, 7)), + ((String) collectionTable.getObject(c, 8)), + ((String) collectionTable.getObject(c, 9)), + ((String) collectionTable.getObject(c, 10)), + ((String) collectionTable.getObject(c, 11)), + ((String) collectionTable.getObject(c, 12)), + ((String) collectionTable.getObject(c, 13)), + ((String) collectionTable.getObject(c, 14)), + ((String) collectionTable.getObject(c, 15)), + ((String) collectionTable.getObject(c, 16)), + ((String) collectionTable.getObject(c, 17)) + }; + + String[] prereqSlotNames = { + ((String) collectionTable.getObject(c, 18)), + ((String) collectionTable.getObject(c, 19)), + ((String) collectionTable.getObject(c, 20)), + ((String) collectionTable.getObject(c, 21)), + ((String) collectionTable.getObject(c, 22)) + }; + + String[] alternateTitles = { + ((String) collectionTable.getObject(c, 28)), + ((String) collectionTable.getObject(c, 29)), + ((String) collectionTable.getObject(c, 30)), + ((String) collectionTable.getObject(c, 31)), + ((String) collectionTable.getObject(c, 32)) + }; + + if (bookName.equals("")) { + System.out.println(slotName + ", row " + c + ": slot " + slotName + " must be in a book"); + throw new Exception(); + } + + if (pageName.equals("")) { + System.out.println(slotName + ", row " + c + ": slot " + slotName + " must be in a page"); + throw new Exception(); + } + + if (collectionName.equals("")) { + System.out.println(slotName + ", row " + c + ": slot " + slotName + " must be in a collection"); + throw new Exception(); + } + + if (endSlotId != -1) { + if (beginSlotId >= endSlotId) { + System.out.println(slotName + ", row " + c + ": begin slot id " + beginSlotId + " must be < end slot id" + endSlotId); + throw new Exception(); + } + + bits = (endSlotId - beginSlotId); + + if (bits > 32) { + System.out.println(slotName + ", row " + c + ": counter-type slot uses " + bits + " bits which exceeds the limit of 32 bits for counter-type slot"); + throw new Exception(); + } + + if (maxSlotValue > -1) { + if (!(maxSlotValue > 1)) { + System.out.println(slotName + ", row " + c + ": max slot value " + maxSlotValue + " must be > 1"); + throw new Exception(); + } + + BitSet bitValue = new BitSet(64); + bitValue.set(64-bits, 64); + + if (bitValue.toLongArray()[0] < maxSlotValue) { + System.out.println(slotName + ", row " + c + ": counter-type slot uses " + bits + " bits, which can only hold a max value of " + bitValue.toLongArray()[0] + ", which is less than the specified max value of " + maxSlotValue); + throw new Exception(); + } + } + } else { + bits = 1; + } + + for (String prereqSlotName : prereqSlotNames) { + if (!prereqSlotName.equals("") && getCollection(creature, prereqSlotName) < 1) { + if (prereqSlotName.equals(slotName)) { + System.out.println(slotName + ", row " + c + ": slot " + slotName + " cannot have itself as a prereq"); + throw new Exception(); + } + + return false; + } + } + + for (String category : categories) { + if (category.equals("noScriptOnModify")) { + noScriptOnModify = true; + } else if (category.equals("clearOnComplete")) { + clearOnComplete = true; + } else if (category.equals("noMessage")) { + noMessage = true; + } else if (category.equals("grantIfPreReqMet")) { + grantIfPreReqMet = true; + } else if (category.equals("buddyCollection")) { + buddyCollection = true; + } else if (category.startsWith("numAltTitles")) { + numAltTitles = new Integer(category.split(":")[1]); + } else if (category.startsWith("kill")) { + continue; + } else if (category.contains("showFullInformationToOthers")) { + continue; + } else if (category.contains("collection")) { + continue; + } else if (category.startsWith("updateOnCount")) { + continue; + } else if (category.equals("rewardOnUpdate")) { + continue; + } else if (category.equals("rewardOnComplete")) { + continue; + } else if (category.contains("relic")) { + break; + } else if (!category.equals("")){ + continue; + } + } + + if (title) { + player.getTitleList().add(slotName); + + if (alternateTitles.length > 0) { + for (String altTitle : alternateTitles) { + if (altTitle != "") { + player.getTitleList().add(altTitle); + } + } + } + } else { + if (numAltTitles > 0 || alternateTitles.length > 0) { + //System.out.println(slotName + ": slot " + slotName + " cannot have any alternative titles unless it is defined as \"titleable\""); + } + } + + if (maxSlotValue > -1) { + BitSet value = BitSet.valueOf(new long[] { collections.get(beginSlotId, (endSlotId + 1)).toLongArray()[0]++ }); + + for (int i = beginSlotId; i <= endSlotId; i++) { + collections.set(i, value.get((i - beginSlotId))); + } + } else if (bits > 1) { + int nextBit = collections.get(beginSlotId, (endSlotId + 1)).previousClearBit(endSlotId); + + if (nextBit == -1) { + return false; + } + + collections.set(nextBit); + } else { + collections.set(beginSlotId); + } + + if (hidden && !(getCollection(creature, collectionName) > 0)) { + creature.sendSystemMessage(OutOfBand.ProsePackage("@collection:player_hidden_slot_added", "TO", new Stf("@collection_n:" + collectionName).getStfValue().replace(":", " -")), DisplayType.Broadcast); + } + + player.setCollections(collections.toByteArray()); + + if (!noMessage) { + if (!bookName.equals("crafting_book")) { + creature.sendSystemMessage(OutOfBand.ProsePackage("@collection:player_slot_added", "TU", new Stf("@collection_n:" + slotName).getStfValue().replace(":", " -"), "TO", new Stf("@collection_n:" + collectionName).getStfValue()), DisplayType.Broadcast); + } else { + creature.sendSystemMessage(OutOfBand.ProsePackage("@collection:player_slot_increment", "TU", new Stf("@collection_n:" + slotName).getStfValue().replace(":", " -"), "TO", new Stf("@collection_n:" + collectionName).getStfValue()), DisplayType.Broadcast); + } + } + + if (!music.equals("") && !music.equalsIgnoreCase("none")) { + creature.playMusic(music); + } + + if (!noScriptOnModify) { + if (FileUtilities.doesFileExist("scripts/collections/" + slotName + ".py")) { + PyObject method = core.scriptService.getMethod("scripts/collections/", slotName, "modify"); + + if (method != null && method.isCallable()) { + method.__call__(Py.java2py(core), Py.java2py(creature), Py.java2py(getCollection(creature, slotName))); + } + } + + if (FileUtilities.doesFileExist("scripts/collections/" + collectionName + ".py")) { + PyObject method = core.scriptService.getMethod("scripts/collections/", collectionName, "modify"); + + if (method != null && method.isCallable()) { + method.__call__(Py.java2py(core), Py.java2py(creature), Py.java2py(getCollection(creature, collectionName))); + } + } + } + + if (isComplete(creature, slotName)) { + if (FileUtilities.doesFileExist("scripts/collections/" + slotName + ".py")) { + PyObject method = core.scriptService.getMethod("scripts/collections/", slotName, "complete"); + + if (method != null && method.isCallable()) { + method.__call__(Py.java2py(core), Py.java2py(creature), Py.java2py(getCollection(creature, collectionName))); + } + } + } + + if (isComplete(creature, collectionName)) { + creature.sendSystemMessage(OutOfBand.ProsePackage("@collection:player_collection_complete", "TO", new Stf("@collection_n:" + collectionName).getStfValue().replace(":", " -")), DisplayType.Broadcast); + + if (!noReward) { + try { + StfTable stf = new StfTable("clientdata/string/en/collection_reward.stf"); + + for (int s = 1; s < stf.getRowCount(); s++) { + String key = stf.getStringById(s).getKey(); + + if (key != null && key.equals(collectionName)) { + String reward = stf.getStringById(s).getValue(); + + if (reward != null && reward.length() > 0) { + int xp = 0; + + // Give experience + + try { + DatatableVisitor experienceTable = ClientFileManager.loadFile("datatables/player/player_level.iff", DatatableVisitor.class); + + for (int i = 0; i < experienceTable.getRowCount(); i++) { + if (experienceTable.getObject(i, 0) != null) { + if (creature.getLevel() == (Integer) experienceTable.getObject(i, 0)) { + int nextLevelRequiredXp = (Integer) experienceTable.getObject((i + 1), 1); + int currentLevelRequiredXp = (Integer) experienceTable.getObject(i, 1); + xp = nextLevelRequiredXp - currentLevelRequiredXp; + } + } + } + } catch (Exception e) { + e.printStackTrace(); + } + + if (reward.contains("small amount of XP")) { + xp = 10 / 100 * xp; + } else if (reward.contains("medium amount of XP")) { + xp = 20 / 100 * xp; + } else if (reward.contains("large amount of XP")) { + xp = 30 / 100 * xp; + } else if (reward.contains("Space XP")) { + // TODO calculate space XP + } else if (reward.contains("XP")) { + String[] array = reward.split(" "); + + for (int i = 0; i < array.length; i++) { + if (array[i].equals("XP")) { + if (i == 0) { + xp = 20 / 100 * xp; + } else { + try { + xp = Integer.parseInt(array[i - 1]); + } catch (NumberFormatException e) { + xp = 20 / 100 * xp; + } + } + } + } + } + + if (xp > 0) { + if (key.contains("space")) { + // TODO add XP to space (not currently implemented) + } else { + core.playerService.giveExperience(creature, xp); + } + } + } + } + } + } catch (Exception e) { + e.printStackTrace(); + } + + if (FileUtilities.doesFileExist("scripts/collections/" + collectionName + ".py")) { + PyObject method = core.scriptService.getMethod("scripts/collections/", collectionName, "complete"); + + if (method != null && method.isCallable()) { + method.__call__(Py.java2py(core), Py.java2py(creature), Py.java2py(getCollection(creature, collectionName))); + } + } + } + + if (titleOnComplete) { + player.getTitleList().add(collectionName); + } + + if (trackServerFirst) { + if (core.guildService.getGuildObject().addServerFirst(collectionName, new ServerFirst(creature.getCustomName(), creature.getObjectId(), collectionName, System.currentTimeMillis()))) { + addCollection(creature, "bdg_server_first_01"); + creature.sendSystemMessage(OutOfBand.ProsePackage("@collection:player_server_first", "TT", core.getGalaxyName(), "TO", new Stf("@collection_n:" + collectionName).getStfValue().replace(":", " -")), DisplayType.Broadcast); + } + } + + if (clearOnComplete) { + if (endSlotId > -1) { + if (collections.get(beginSlotId, (endSlotId + 1)).cardinality() == bits) { + clearCollection(creature, collectionName); + } + } + } + + if (bookName.equals("badge_book")) { + int badges = getCollection(creature, "badge_book"); + + switch (badges) { + case 5: + addCollection(creature, "count_5"); + case 10: + addCollection(creature, "count_10"); + default: + if (((badges % 25) == 0) && !(badges > 500)) { + addCollection(creature, "count_" + badges); + } + } + } + + if (pageName.equals("bdg_explore")) { + int badges = getCollection(creature, "bdg_explore"); + + switch (badges) { + case 10: + addCollection(creature, "bdg_exp_10_badges"); + case 20: + addCollection(creature, "bdg_exp_20_badges"); + case 30: + addCollection(creature, "bdg_exp_30_badges"); + case 40: + addCollection(creature, "bdg_exp_40_badges"); + case 45: + addCollection(creature, "bdg_exp_45_badges"); + } + } + } + + return true; + } + } + } + } + } catch (Exception e) { + e.printStackTrace(); + } + + return false; + } + + /** + * @param creature The player's CreatureObject instance. + * @param collection slotName or collectionName from collection.iff. + * + * @return True if the slot or collection is complete. + */ + public boolean isComplete(CreatureObject creature, String collection) { + PlayerObject player = (PlayerObject) creature.getSlottedObject("ghost"); + DatatableVisitor collectionTable; + + if (player == null) { + return false; + } + + collection = collection.toLowerCase(); + + try { + collectionTable = ClientFileManager.loadFile("datatables/collection/collection.iff", DatatableVisitor.class); + BitSet collections; + String bookName = ""; + String pageName = ""; + String collectionName = ""; + + collections = BitSet.valueOf(player.getCollections()); + + for (int c = 0; c < collectionTable.getRowCount(); c++) { + if (collectionTable.getObject(c, 0) != null) { + if (((String) collectionTable.getObject(c, 0)) != "") { + bookName = ((String) collectionTable.getObject(c, 0)); + pageName = ""; + collectionName = ""; + } else if (((String) collectionTable.getObject(c, 1)) != "") { + pageName = ((String) collectionTable.getObject(c, 1)); + collectionName = ""; + } else if (((String) collectionTable.getObject(c, 2)) != "") { + collectionName = ((String) collectionTable.getObject(c, 2)); + } else if (((String) collectionTable.getObject(c, 3)) != "") { + String slotName = ((String) collectionTable.getObject(c, 3)); + + if (slotName.equals(collection)) { + int beginSlotId = ((Integer) collectionTable.getObject(c, 4)); + + if (bookName.equals("")) { + System.out.println(slotName + ", row " + c + ": slot " + slotName + " must be in a book"); + throw new Exception(); + } + + if (pageName.equals("")) { + System.out.println(slotName + ", row " + c + ": slot " + slotName + " must be in a page"); + throw new Exception(); + } + + if (collectionName.equals("")) { + System.out.println(slotName + ", row " + c + ": slot " + slotName + " must be in a collection"); + throw new Exception(); + } + + if (collection.equals(bookName)) { + System.out.println("Checking if a book is complete is unsupported at this time."); + throw new Exception(); + } else if (collection.equals(pageName)) { + System.out.println("Checking if a page is complete is unsupported at this time."); + throw new Exception(); + } else if (collection.equals(collectionName)) { + return collections.get(beginSlotId); + } else if (collection.equals(slotName)) { + return collections.get(beginSlotId); + } + } + } + } + } + } catch (Exception e) { + e.printStackTrace(); + } + + return false; + } + + /** + * Returns number of completed bits in a slot or the number of completed + * slots in a collection, page or book. + * + * @param creature The player's CreatureObject instance. + * @param collection slotName, collectionName, pageName or bookName from collection.iff. + * + * @return Number of completed collections within the slot, collection, page or book. + */ + public int getCollection(CreatureObject creature, String collection) { + PlayerObject player = (PlayerObject) creature.getSlottedObject("ghost"); + DatatableVisitor collectionTable; + + if (player == null) { + return 0; + } + + collection = collection.toLowerCase(); + + try { + collectionTable = ClientFileManager.loadFile("datatables/collection/collection.iff", DatatableVisitor.class); + BitSet collections; + String bookName = ""; + String pageName = ""; + String collectionName = ""; + int found = 0; + + collections = BitSet.valueOf(player.getCollections()); + + for (int c = 0; c < collectionTable.getRowCount(); c++) { + if (collectionTable.getObject(c, 0) != null) { + if (((String) collectionTable.getObject(c, 0)) != "") { + bookName = ((String) collectionTable.getObject(c, 0)); + pageName = ""; + collectionName = ""; + } else if (((String) collectionTable.getObject(c, 1)) != "") { + pageName = ((String) collectionTable.getObject(c, 1)); + collectionName = ""; + } else if (((String) collectionTable.getObject(c, 2)) != "") { + collectionName = ((String) collectionTable.getObject(c, 2)); + } else if (((String) collectionTable.getObject(c, 3)) != "") { + String slotName = ((String) collectionTable.getObject(c, 3)); + + int beginSlotId = ((Integer) collectionTable.getObject(c, 4)); + int endSlotId = ((Integer) collectionTable.getObject(c, 5)); + int maxSlotValue = ((Integer) collectionTable.getObject(c, 6)); + int bits = 0; + + if (bookName.equals("")) { + System.out.println(slotName + ", row " + c + ": slot " + slotName + " must be in a book"); + throw new Exception(); + } + + if (pageName.equals("")) { + System.out.println(slotName + ", row " + c + ": slot " + slotName + " must be in a page"); + throw new Exception(); + } + + if (collectionName.equals("")) { + System.out.println(slotName + ", row " + c + ": slot " + slotName + " must be in a collection"); + throw new Exception(); + } + + if (collection.equals(bookName)) { + found += getCollection(creature, pageName); + continue; + } else if (collection.equals(pageName)) { + found += getCollection(creature, collectionName); + continue; + } else if (collection.equals(collectionName)) { + if (collections.get(beginSlotId)) { + found++; + } + + continue; + } else if (collection.equals(slotName)) { + if (endSlotId != -1) { + if (beginSlotId >= endSlotId) { + System.out.println(slotName + ", row " + c + ": begin slot id " + beginSlotId + " must be < end slot id" + endSlotId); + throw new Exception(); + } + + bits = (endSlotId - beginSlotId); + + if (bits > 32) { + System.out.println(slotName + ", row " + c + ": counter-type slot uses " + bits + " bits which exceeds the limit of 32 bits for counter-type slot"); + throw new Exception(); + } + + if (maxSlotValue > -1) { + if (!(maxSlotValue > 1)) { + System.out.println(slotName + ", row " + c + ": max slot value " + maxSlotValue + " must be > 1"); + throw new Exception(); + } + + BitSet bitValue = new BitSet(64); + bitValue.set(64-bits, 64); + + if (bitValue.toLongArray()[0] < maxSlotValue) { + System.out.println(slotName + ", row " + c + ": counter-type slot uses " + bits + " bits, which can only hold a max value of " + bitValue.toLongArray()[0] + ", which is less than the specified max value of " + maxSlotValue); + throw new Exception(); + } + } + + if (maxSlotValue > 0) { + return (int) collections.get(beginSlotId, (endSlotId + 1)).toLongArray()[0]; + } else { + return collections.get(beginSlotId, (endSlotId + 1)).cardinality(); + } + } else { + return ((collections.get(beginSlotId)) ? 1 : 0); + } + } + + if (found > 0) { + return found; + } + } + } + } + } catch (Exception e) { + e.printStackTrace(); + } + + return 0; + } + + + /** + * Registers an exploration badge location. + * + * @param planet Name from Planet.getName(). + * @param badgeName slotName from collection.iff. + * @param x The first 2d coordinate. + * @param z The second 2d coordinate. + * @param range The radius from the coordinates at which this will check for players and award them the badge. + */ + public void registerExplorationBadge(String planet, String badgeName, int x, int z, int range) { + if (!explorationLocations.containsKey(planet)) { + explorationLocations.put(planet, new TreeMap()); + } + + explorationLocations.get(planet).put(badgeName, new ExplorationRegion(new Point3D(x, 0, z), range)); + } + + /** + * Checks if the player is in range of any exploration regions + * and grants any ungranted badges. + * + * @param creature The player's CreatreObject instance. + */ + public void checkExplorationRegions(CreatureObject creature) { + String planet = creature.getPlanet().getName(); + + if (explorationLocations.containsKey(planet)) { + for (Entry badge : explorationLocations.get(planet).entrySet()) { + if (creature.inRange(badge.getValue().location, badge.getValue().range)) { + if (!isComplete(creature, badge.getKey())) { + addCollection(creature, badge.getKey()); + } + } + } + } + } + + /** + * Clears the specified slot, collection, page or book. + * + * @param creature The player's CreatureObject instance. + * @param collection slotName, collectionName, pageName or bookName from collection.iff + * + * @return True if successful. + */ + public boolean clearCollection(CreatureObject creature, String collection) { + PlayerObject player = (PlayerObject) creature.getSlottedObject("ghost"); + DatatableVisitor collectionTable; + + if (player == null) { + return false; + } + + collection = collection.toLowerCase(); + + try { + collectionTable = ClientFileManager.loadFile("datatables/collection/collection.iff", DatatableVisitor.class); + BitSet collections; + String bookName = ""; + String pageName = ""; + String collectionName = ""; + boolean found = false; + + collections = BitSet.valueOf(player.getCollections()); + + for (int c = 0; c < collectionTable.getRowCount(); c++) { + if (collectionTable.getObject(c, 0) != null) { + if (((String) collectionTable.getObject(c, 0)) != "") { + bookName = ((String) collectionTable.getObject(c, 0)); + pageName = ""; + collectionName = ""; + } else if (((String) collectionTable.getObject(c, 1)) != "") { + pageName = ((String) collectionTable.getObject(c, 1)); + collectionName = ""; + } else if (((String) collectionTable.getObject(c, 2)) != "") { + collectionName = ((String) collectionTable.getObject(c, 2)); + } else if (((String) collectionTable.getObject(c, 3)) != "") { + String slotName = ((String) collectionTable.getObject(c, 3)); + + int beginSlotId = ((Integer) collectionTable.getObject(c, 4)); + int endSlotId = ((Integer) collectionTable.getObject(c, 5)); + + if (bookName.equals("")) { + System.out.println(slotName + ", row " + c + ": slot " + slotName + " must be in a book"); + throw new Exception(); + } + + if (pageName.equals("")) { + System.out.println(slotName + ", row " + c + ": slot " + slotName + " must be in a page"); + throw new Exception(); + } + + if (collectionName.equals("")) { + System.out.println(slotName + ", row " + c + ": slot " + slotName + " must be in a collection"); + throw new Exception(); + } + + if (collection.equals(bookName) || collection.equals(pageName) || + collection.equals(collectionName) || collection.equals(slotName)) { + found = true; + + if (collections.get(beginSlotId, endSlotId + 1).cardinality() > 0) { + collections.clear(beginSlotId, (endSlotId + 1)); + + if (player.getTitleList().contains(slotName)) { + player.getTitleList().remove(slotName); + } + + if (collection.equals(collectionName)) { + creature.sendSystemMessage(OutOfBand.ProsePackage("@collection:player_collection_reset", "TO", new Stf("@collection_n:" + collectionName).getStfValue().replace(":", " -")), DisplayType.Broadcast); + } + + continue; + } + } + + if (found) { + player.setCollections(collections.toByteArray()); + return true; + } + } + } + } + } catch (Exception e) { + e.printStackTrace(); + } + + return false; + } + + /** + * Clears all collections. + * + * This must cycle through all the collections because + * it needs to remove titles and other such things. + * + * @param creature The player's CreatureObject instance. + * + * @return True if successful. + */ + public boolean clearCollections(CreatureObject creature) { + PlayerObject player = (PlayerObject) creature.getSlottedObject("ghost"); + DatatableVisitor collectionTable; + + if (player == null) { + return false; + } + + try { + collectionTable = ClientFileManager.loadFile("datatables/collection/collection.iff", DatatableVisitor.class); + BitSet collections; + String bookName = ""; + String pageName = ""; + String collectionName = ""; + boolean found = false; + + collections = BitSet.valueOf(player.getCollections()); + + for (int c = 0; c < collectionTable.getRowCount(); c++) { + if (collectionTable.getObject(c, 0) != null) { + if (((String) collectionTable.getObject(c, 0)) != "") { + bookName = ((String) collectionTable.getObject(c, 0)); + pageName = ""; + collectionName = ""; + } else if (((String) collectionTable.getObject(c, 1)) != "") { + pageName = ((String) collectionTable.getObject(c, 1)); + collectionName = ""; + } else if (((String) collectionTable.getObject(c, 2)) != "") { + collectionName = ((String) collectionTable.getObject(c, 2)); + } else if (((String) collectionTable.getObject(c, 3)) != "") { + String slotName = ((String) collectionTable.getObject(c, 3)); + + int beginSlotId = ((Integer) collectionTable.getObject(c, 4)); + int endSlotId = ((Integer) collectionTable.getObject(c, 5)); + + if (bookName.equals("")) { + System.out.println(slotName + ", row " + c + ": slot " + slotName + " must be in a book"); + throw new Exception(); + } + + if (pageName.equals("")) { + System.out.println(slotName + ", row " + c + ": slot " + slotName + " must be in a page"); + throw new Exception(); + } + + if (collectionName.equals("")) { + System.out.println(slotName + ", row " + c + ": slot " + slotName + " must be in a collection"); + throw new Exception(); + } + + if (collections.get(beginSlotId, endSlotId + 1).cardinality() > 0) { + found = true; + + collections.clear(beginSlotId, (endSlotId + 1)); + + if (player.getTitleList().contains(slotName)) { + player.getTitleList().remove(slotName); + } + + continue; + } + + if (found) { + player.setCollections(collections.toByteArray()); + return true; + } + } + } + } + } catch (Exception e) { + e.printStackTrace(); + } + + return ((player.getCollections().length > 0) ? false : true); + } + + @Override + public void insertOpcodes(Map arg0, Map arg1) { + + } + + @Override + public void shutdown() { + + } + +} diff --git a/src/services/collections/ServerFirst.java b/src/services/collections/ServerFirst.java new file mode 100644 index 00000000..3bbf0adc --- /dev/null +++ b/src/services/collections/ServerFirst.java @@ -0,0 +1,81 @@ +/******************************************************************************* + * Copyright (c) 2013 + * + * This File is part of NGECore2. + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see . + * + * Using NGEngine to work with NGECore2 is making a combined work based on NGEngine. + * Therefore all terms and conditions of the GNU Lesser General Public License cover the combination. + ******************************************************************************/ +package services.collections; + +import java.io.Serializable; + +import org.apache.mina.core.buffer.IoBuffer; + +import com.sleepycat.persist.model.Persistent; + +import engine.resources.objects.Delta; + +@Persistent +public class ServerFirst extends Delta implements Serializable { + + private static final long serialVersionUID = 1L; + + private String name; + private String collection; + private long time; + private long objectId; + + public ServerFirst(String name, long objectId, String collection, long time) { + this.name = name; + this.objectId = objectId; + this.time = time; + this.collection = collection; + } + + public ServerFirst() { + + } + + public String getName() { + return name; + } + + public long getTime() { + return time; + } + + public long getObjectId() { + return objectId; + } + + public String getCollection() { + return collection; + } + + @Override + public byte[] getBytes() { + synchronized(objectMutex) { + IoBuffer buffer = createBuffer(18 + collection.length() + (name.length() * 2)); + buffer.putInt((int) time / 1000); + buffer.put(getAsciiString(collection)); + buffer.putLong(objectId); + buffer.put(getUnicodeString(name)); + return buffer.array(); + } + } + +} diff --git a/src/services/combat/CombatCommands.java b/src/services/combat/CombatCommands.java index b2ab9acd..dcdc875d 100644 --- a/src/services/combat/CombatCommands.java +++ b/src/services/combat/CombatCommands.java @@ -29,6 +29,8 @@ public class CombatCommands { // Auto Attacks + core.commandService.registerCombatCommand("creatureRangedAttack"); + core.commandService.registerCombatCommand("creatureMeleeAttack").setDefaultAnimations(new String[] { "creature_attack_light" }); core.commandService.registerCombatCommand("rangedshotrifle"); core.commandService.registerCombatCommand("rangedshotpistol"); core.commandService.registerCombatCommand("rangedshotlightrifle"); @@ -64,11 +66,12 @@ public class CombatCommands { core.commandService.registerCombatCommand("fireStunCannon"); core.commandService.registerCombatCommand("fireVoidRocketLauncher"); - // Bounty Hunter core.commandService.registerCombatCommand("bh_ae_dm_1"); core.commandService.registerCombatCommand("bh_ae_dm_2"); + core.commandService.registerCombatCommand("bh_armor_sprint_1"); + core.commandService.registerCombatCommand("bh_cover_1"); core.commandService.registerCombatCommand("bh_dm_1"); core.commandService.registerCombatCommand("bh_dm_2"); core.commandService.registerCombatCommand("bh_dm_3"); @@ -124,13 +127,12 @@ public class CombatCommands { core.commandService.registerCombatCommand("bh_taunt_4"); core.commandService.registerCombatCommand("bh_taunt_5"); core.commandService.registerCombatCommand("bh_taunt_6"); - core.commandService.registerCombatCommand("bh_return_fire_1"); + core.commandService.registerCombatCommand("bh_return_fire_command_1"); core.commandService.registerCombatCommand("bh_sh_0"); core.commandService.registerCombatCommand("bh_sh_1"); core.commandService.registerCombatCommand("bh_sh_2"); core.commandService.registerCombatCommand("bh_sh_3"); - - + core.commandService.registerCommand("bh_shields_1"); // Jedi @@ -195,7 +197,6 @@ public class CombatCommands { core.commandService.registerCommand("fs_buff_invis_1"); // Force Cloak core.commandService.registerCombatCommand("fs_force_throw_1"); core.commandService.registerCommand("forceThrow"); - // Commando @@ -233,8 +234,8 @@ public class CombatCommands { core.commandService.registerCombatCommand("co_ae_hw_dot_kinetic_4"); core.commandService.registerCombatCommand("co_ae_hw_dot_kinetic_5"); core.commandService.registerCombatCommand("co_armor_cracker"); - core.commandService.registerCombatCommand("co_cluster_bomb"); - core.commandService.registerCombatCommand("co_cluster_bomblet"); + //core.commandService.registerCombatCommand("co_cluster_bomb"); + //core.commandService.registerCombatCommand("co_cluster_bomblet"); core.commandService.registerCombatCommand("co_del_ae_cc_1_1"); core.commandService.registerCombatCommand("co_del_ae_cc_1_2"); core.commandService.registerCombatCommand("co_del_ae_cc_1_3"); @@ -307,9 +308,11 @@ public class CombatCommands { core.commandService.registerCombatCommand("co_sh_1"); core.commandService.registerCombatCommand("co_sh_2"); core.commandService.registerCombatCommand("co_sh_3"); + core.commandService.registerCombatCommand("co_stand_fast"); core.commandService.registerCommand("co_hw_dot"); core.commandService.registerCommand("co_ae_hw_dot"); - + core.commandService.registerCommand("co_position_secured"); + core.commandService.registerCommand("co_first_aid_training"); // Entertainer @@ -395,6 +398,7 @@ public class CombatCommands { core.commandService.registerCombatCommand("me_cranial_smash_3"); core.commandService.registerCombatCommand("me_cranial_smash_4"); core.commandService.registerCombatCommand("me_cranial_smash_5"); + core.commandService.registerCommand("me_cure_affliction_1"); core.commandService.registerCombatCommand("me_dm_1"); core.commandService.registerCombatCommand("me_dm_2"); core.commandService.registerCombatCommand("me_dm_3"); @@ -418,8 +422,11 @@ public class CombatCommands { core.commandService.registerCombatCommand("me_rv_ooc"); core.commandService.registerCombatCommand("me_rv_pvp_area"); core.commandService.registerCombatCommand("me_rv_pvp_single"); + core.commandService.registerCommand("me_serotonin_boost_1"); core.commandService.registerCombatCommand("me_serotonin_purge_1"); core.commandService.registerCombatCommand("me_sh_1"); + core.commandService.registerCommand("me_stasis_1"); + core.commandService.registerCommand("me_stasis_self_1"); core.commandService.registerCombatCommand("me_thyroid_rupture_1"); core.commandService.registerCombatCommand("me_traumatize_1"); core.commandService.registerCombatCommand("me_traumatize_2"); @@ -427,14 +434,32 @@ public class CombatCommands { core.commandService.registerCombatCommand("me_traumatize_4"); core.commandService.registerCombatCommand("me_traumatize_5"); core.commandService.registerCombatCommand("me_stasis_1"); - core.commandService.registerCommand("me_stasis_self_1"); core.commandService.registerCommand("me_drag_1"); + core.commandService.registerCommand("me_enhance_action_1"); core.commandService.registerCommand("me_reckless_stimulation_1"); core.commandService.registerCommand("me_reckless_stimulation_2"); core.commandService.registerCommand("me_reckless_stimulation_3"); core.commandService.registerCommand("me_reckless_stimulation_4"); core.commandService.registerCommand("me_reckless_stimulation_5"); core.commandService.registerCommand("me_reckless_stimulation_6"); + core.commandService.registerCommand("me_buff_health_1"); + core.commandService.registerCommand("me_buff_health_2"); + core.commandService.registerCommand("me_buff_health_3"); + core.commandService.registerCommand("me_enhance_action_1"); + core.commandService.registerCommand("me_enhance_action_2"); + core.commandService.registerCommand("me_enhance_action_3"); + core.commandService.registerCommand("me_enhance_agility_1"); + core.commandService.registerCommand("me_enhance_agility_2"); + core.commandService.registerCommand("me_enhance_agility_3"); + core.commandService.registerCommand("me_enhance_block_1"); + core.commandService.registerCommand("me_enhance_dodge_1"); + core.commandService.registerCommand("me_enhance_precision_1"); + core.commandService.registerCommand("me_enhance_precision_2"); + core.commandService.registerCommand("me_enhance_precision_3"); + core.commandService.registerCommand("me_enhance_strength_1"); + core.commandService.registerCommand("me_enhance_strength_2"); + core.commandService.registerCommand("me_enhance_strength_3"); + core.commandService.registerCommand("me_evasion_1"); // Officer @@ -519,6 +544,7 @@ public class CombatCommands { core.commandService.registerCommand("of_buff_def_9"); core.commandService.registerCommand("of_emergency_shield"); core.commandService.registerCommand("of_firepower_1"); + core.commandService.registerCommand("of_medical_sup_1"); core.commandService.registerCommand("of_purge_1"); core.commandService.registerCommand("of_scatter_1"); core.commandService.registerCommand("of_stimulator_1"); diff --git a/src/services/combat/CombatEvents.java b/src/services/combat/CombatEvents.java new file mode 100644 index 00000000..3dc20ee0 --- /dev/null +++ b/src/services/combat/CombatEvents.java @@ -0,0 +1,36 @@ +/******************************************************************************* + * Copyright (c) 2013 + * + * This File is part of NGECore2. + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see . + * + * Using NGEngine to work with NGECore2 is making a combined work based on NGEngine. + * Therefore all terms and conditions of the GNU Lesser General Public License cover the combination. + ******************************************************************************/ +package services.combat; + +import resources.objects.creature.CreatureObject; +import engine.resources.common.Event; + +public class CombatEvents implements Event { + + public class DamageTaken implements Event { + + public CreatureObject attacker; + public int damage; + + } + +} diff --git a/src/services/combat/CombatService.java b/src/services/combat/CombatService.java index 5d21e24f..1910ab6a 100644 --- a/src/services/combat/CombatService.java +++ b/src/services/combat/CombatService.java @@ -21,9 +21,12 @@ ******************************************************************************/ package services.combat; +import java.util.ArrayList; +import java.util.HashSet; import java.util.List; import java.util.Map; import java.util.Random; +import java.util.Set; import java.util.Vector; import java.util.concurrent.Executors; import java.util.concurrent.ScheduledExecutorService; @@ -35,19 +38,29 @@ import org.apache.mina.core.session.IoSession; import protocol.swg.ObjControllerMessage; import protocol.swg.PlayClientEffectLocMessage; -import protocol.swg.UpdatePVPStatusMessage; import protocol.swg.objectControllerObjects.CombatAction; import protocol.swg.objectControllerObjects.CombatSpam; import protocol.swg.objectControllerObjects.CommandEnqueueRemove; import protocol.swg.objectControllerObjects.StartTask; +import resources.buffs.Buff; +import resources.buffs.DamageOverTime; import resources.common.FileUtilities; -import resources.objects.Buff; -import resources.objects.DamageOverTime; +import resources.common.OutOfBand; +import resources.datatables.DisplayType; +import resources.datatables.FactionStatus; +import resources.datatables.GcwType; +import resources.datatables.Options; +import resources.datatables.Elemental; +import resources.datatables.Posture; +import resources.datatables.WeaponType; import resources.objects.creature.CreatureObject; +import resources.objects.mission.MissionObject; import resources.objects.player.PlayerObject; import resources.objects.tangible.TangibleObject; import resources.objects.waypoint.WaypointObject; import resources.objects.weapon.WeaponObject; +import services.ai.AIActor; +import services.combat.CombatEvents.DamageTaken; import services.command.CombatCommand; import services.sui.SUIService.MessageBoxType; import services.sui.SUIWindow; @@ -59,12 +72,14 @@ import engine.resources.objects.SWGObject; import engine.resources.scene.Point3D; import engine.resources.service.INetworkDispatch; import engine.resources.service.INetworkRemoteEvent; +import resources.datatables.HitType; public class CombatService implements INetworkDispatch { private NGECore core; private final ScheduledExecutorService scheduler = Executors.newScheduledThreadPool(1); - + private CombatEvents events = new CombatEvents(); + public CombatService(NGECore core) { this.core = core; CombatCommands.registerCommands(core); @@ -82,13 +97,15 @@ public class CombatService implements INetworkDispatch { } public void doCombat(final CreatureObject attacker, final TangibleObject target, final WeaponObject weapon, final CombatCommand command, final int actionCounter) { + + if(target instanceof CreatureObject) if(((CreatureObject) target).getPosture() == Posture.Incapacitated || ((CreatureObject) target).getPosture() == Posture.Dead) return; boolean success = true; if((command.getAttackType() == 0 || command.getAttackType() == 1 || command.getAttackType() == 3) && !attemptCombat(attacker, target)) success = false; - if(!applySpecialCost(attacker, weapon, command)) + if(success && !applySpecialCost(attacker, weapon, command)) success = false; if(!success) { @@ -175,8 +192,41 @@ public class CombatService implements INetworkDispatch { } - //core.buffService.addBuffToCreature(attacker, command.getBuffNameSelf()); - + if(target instanceof CreatureObject) + { + CreatureObject creature = (CreatureObject)target; + if(creature.getPosture() == Posture.Incapacitated || creature.getPosture() == Posture.Dead) + { + for (TangibleObject defender : new ArrayList(creature.getDefendersList())) + { + defender.removeDefender(creature); + creature.removeDefender(defender); + } + + if(((CreatureObject) target).getPlayerObject() == null) + { + target.setKiller(attacker); + + scheduler.schedule(new Runnable() + { + @Override + public void run() + { + core.objectService.destroyObject(target); + } + + }, 2, TimeUnit.MINUTES); + } + } + } + else if(target instanceof TangibleObject) + { + if(target.getConditionDamage() == target.getMaximumCondition()) + { + for(TangibleObject defender : target.getDefendersList()) defender.removeDefender(target); + core.objectService.destroyObject(target); + } + } } private void doAreaCombat(CreatureObject attacker, TangibleObject target, WeaponObject weapon, CombatCommand command, int actionCounter) { @@ -209,7 +259,7 @@ public class CombatService implements INetworkDispatch { if(!(obj instanceof TangibleObject) || obj == attacker) continue; - if(obj instanceof CreatureObject && (((CreatureObject) obj).getPosture() == 13 || ((CreatureObject) obj).getPosture() == 14)) + if(obj instanceof CreatureObject && (((CreatureObject) obj).getPosture() == Posture.Incapacitated || ((CreatureObject) obj).getPosture() == Posture.Dead)) continue; if(command.getAttackType() == 0 && !isInConeAngle(attacker, obj, (int) command.getConeLength(), (int) command.getConeWidth(), dirX, dirZ)) @@ -240,8 +290,32 @@ public class CombatService implements INetworkDispatch { } float damage = calculateDamage(attacker, target, weapon, command); + + if(damage > 0) + applyDamage(attacker, target, (int) damage); + + sendCombatPackets(attacker, target, weapon, command, actionCounter, damage, 0, HitType.HIT); + + if(FileUtilities.doesFileExist("scripts/commands/combat/" + command.getCommandName() + ".py")) + core.scriptService.callScript("scripts/commands/combat/", command.getCommandName(), "run", core, attacker, target, damage); + } + private void applyDamage(CreatureObject attacker, TangibleObject target, int damage) { + target.setConditionDamage(target.getConditionDamage() + damage); + + if (target.getOption(Options.MOUNT)) { + core.mountService.damage((CreatureObject) target); + } + + DamageTaken event = events.new DamageTaken(); + event.attacker = attacker; + event.damage = damage; + target.getEventBus().publish(event); + + attacker.setTefTime(300000); + } + private void doAreaCombat(CreatureObject attacker, CreatureObject target, WeaponObject weapon, CombatCommand command, int actionCounter) { float x = attacker.getWorldPosition().x; @@ -259,7 +333,7 @@ public class CombatService implements INetworkDispatch { if(!(obj instanceof TangibleObject) || obj == attacker) continue; - if(obj instanceof CreatureObject && (((CreatureObject) obj).getPosture() == 13 || ((CreatureObject) obj).getPosture() == 14)) + if(obj instanceof CreatureObject && (((CreatureObject) obj).getPosture() == Posture.Incapacitated || ((CreatureObject) obj).getPosture() == Posture.Dead)) continue; if(command.getAttackType() == 0 && !isInConeAngle(attacker, obj, (int) command.getConeLength(), (int) command.getConeWidth(), dirX, dirZ)) @@ -322,57 +396,64 @@ public class CombatService implements INetworkDispatch { int armorAbsorbed = (int) (damageBeforeArmor - damage); if(mitigationType == HitType.BLOCK) { - float blockValue = (attacker.getStrength() + attacker.getSkillMod("combat_block_value").getBase()) / 2 + 25; + float blockValue = (attacker.getStrength() + attacker.getSkillModBase("combat_block_value")) / 2 + 25; damage -= blockValue; } + if(command.getAttackType() != 1 && target.getSkillMod("area_damage_resist_full_percentage") != null) { + if(new Random().nextFloat() <= target.getSkillModBase("area_damage_resist_full_percentage")) + damage = 0; + } + if(damage > 0) applyDamage(attacker, target, (int) damage); sendCombatPackets(attacker, target, weapon, command, actionCounter, damage, armorAbsorbed, hitType); if(hitType != HitType.MISS && hitType != HitType.DODGE && hitType != HitType.PARRY && command.getBuffNameTarget().length() > 0) { - core.buffService.addBuffToCreature(target, command.getBuffNameTarget()); + core.buffService.addBuffToCreature(target, command.getBuffNameTarget(), attacker); } if(command.getDotIntensity() > 0) { addDotToCreature(attacker, target, command, target.getBuffByName(command.getBuffNameTarget())); } if(FileUtilities.doesFileExist("scripts/commands/combat/" + command.getCommandName() + ".py")) - core.scriptService.callScript("scripts/commands/combat/", command.getCommandName(), "run", core, attacker, target, null); + core.scriptService.callScript("scripts/commands/combat/", command.getCommandName(), "run", core, attacker, target, damage); return; } if(command.getAddedDamage() == 0 && command.getPercentFromWeapon() == 0 && command.getBuffNameTarget().length() > 0) - core.buffService.addBuffToCreature(target, command.getBuffNameTarget()); + core.buffService.addBuffToCreature(target, command.getBuffNameTarget(), attacker); sendCombatPackets(attacker, target, weapon, command, actionCounter, damage, 0, HitType.HIT); } - private void sendCombatPackets(CreatureObject attacker, CreatureObject target, WeaponObject weapon, CombatCommand command, int actionCounter, float damage, int armorAbsorbed, int hitType) { + private void sendCombatPackets(CreatureObject attacker, TangibleObject target, WeaponObject weapon, CombatCommand command, int actionCounter, float damage, int armorAbsorbed, int hitType) { String animationStr = command.getRandomAnimation(weapon); - CombatAction combatAction = new CombatAction(CRC.StringtoCRC(animationStr), attacker.getObjectID(), weapon.getObjectID(), target.getObjectID(), command.getCommandCRC()); ObjControllerMessage objController = new ObjControllerMessage(0x1B, combatAction); attacker.notifyObserversInRange(objController, true, 125); - - StartTask startTask = new StartTask(actionCounter, attacker.getObjectID(), command.getCommandCRC(), CRC.StringtoCRC(command.getCooldownGroup()), command.getCooldown()); - ObjControllerMessage objController2 = new ObjControllerMessage(0x0B, startTask); - attacker.getClient().getSession().write(objController2.serialize()); - - CommandEnqueueRemove commandRemove = new CommandEnqueueRemove(attacker.getObjectID(), actionCounter); - ObjControllerMessage objController3 = new ObjControllerMessage(0x0B, commandRemove); - attacker.getClient().getSession().write(objController3.serialize()); - CombatSpam combatSpam = new CombatSpam(attacker.getObjectID(), target.getObjectID(), weapon.getObjectID(), (int) damage, armorAbsorbed, hitType); ObjControllerMessage objController4 = new ObjControllerMessage(0x1B, combatSpam); IoBuffer spam = objController4.serialize(); - attacker.getClient().getSession().write(spam); + + if(attacker.getClient() != null) { + + StartTask startTask = new StartTask(actionCounter, attacker.getObjectID(), command.getCommandCRC(), CRC.StringtoCRC(command.getCooldownGroup()), command.getCooldown()); + ObjControllerMessage objController2 = new ObjControllerMessage(0x0B, startTask); + attacker.getClient().getSession().write(objController2.serialize()); + + CommandEnqueueRemove commandRemove = new CommandEnqueueRemove(attacker.getObjectID(), actionCounter); + ObjControllerMessage objController3 = new ObjControllerMessage(0x0B, commandRemove); + attacker.getClient().getSession().write(objController3.serialize()); + attacker.getClient().getSession().write(spam); + + } if(target.getClient() != null) target.getClient().getSession().write(spam); @@ -381,64 +462,54 @@ public class CombatService implements INetworkDispatch { } private void sendHealPackets(CreatureObject attacker, CreatureObject target, WeaponObject weapon, CombatCommand command, int actionCounter) { - + CombatAction combatAction = new CombatAction(CRC.StringtoCRC(command.getDefaultAnimations()[0]), attacker.getObjectID(), weapon.getObjectID(), target.getObjectID(), command.getCommandCRC()); ObjControllerMessage objController = new ObjControllerMessage(0x1B, combatAction); attacker.notifyObserversInRange(objController, true, 125); - StartTask startTask = new StartTask(actionCounter, attacker.getObjectID(), command.getCommandCRC(), CRC.StringtoCRC(command.getCooldownGroup()), command.getCooldown()); - ObjControllerMessage objController2 = new ObjControllerMessage(0x0B, startTask); - attacker.getClient().getSession().write(objController2.serialize()); - - CommandEnqueueRemove commandRemove = new CommandEnqueueRemove(attacker.getObjectID(), actionCounter); - ObjControllerMessage objController3 = new ObjControllerMessage(0x0B, commandRemove); - attacker.getClient().getSession().write(objController3.serialize()); + if(attacker.getClient() != null) { + StartTask startTask = new StartTask(actionCounter, attacker.getObjectID(), command.getCommandCRC(), CRC.StringtoCRC(command.getCooldownGroup()), command.getCooldown()); + ObjControllerMessage objController2 = new ObjControllerMessage(0x0B, startTask); + attacker.getClient().getSession().write(objController2.serialize()); + + CommandEnqueueRemove commandRemove = new CommandEnqueueRemove(attacker.getObjectID(), actionCounter); + ObjControllerMessage objController3 = new ObjControllerMessage(0x0B, commandRemove); + attacker.getClient().getSession().write(objController3.serialize()); + } } private float getArmorReduction(CreatureObject attacker, CreatureObject target, WeaponObject weapon, CombatCommand command, byte hitType) { - int elementalType = 1; + String elementalName = ""; if(command.getPercentFromWeapon() > 0) { // TODO: elemental mitigation and damage + + elementalName = weapon.getDamageType(); - if(weapon.getStringAttribute("cat_wpn_damage.wpn_damage_type").equals("@obj_attr_n:armor_eff_kinetic")) - elementalType = ElementalType.KINETIC; - else if(weapon.getStringAttribute("cat_wpn_damage.wpn_damage_type").equals("@obj_attr_n:armor_eff_energy")) - elementalType = ElementalType.ENERGY; - } else { - elementalType = command.getElementalType(); + elementalName = Elemental.getElementalName(command.getElementalType()); } int baseArmor = 0; - switch(elementalType) { + baseArmor = target.getSkillModBase(elementalName); - case ElementalType.KINETIC: - baseArmor = target.getSkillMod("kinetic").getBase(); - case ElementalType.ENERGY: - baseArmor = target.getSkillMod("energy").getBase(); - case ElementalType.HEAT: - baseArmor = target.getSkillMod("heat").getBase(); - case ElementalType.COLD: - baseArmor = target.getSkillMod("cold").getBase(); - case ElementalType.ACID: - baseArmor = target.getSkillMod("acid").getBase(); - case ElementalType.ELECTRICITY: - baseArmor = target.getSkillMod("electricity").getBase(); - - } + if(target.getSkillMod("expertise_innate_reduction_all_player") != null) + baseArmor *= (100 - target.getSkillModBase("expertise_innate_reduction_all_player")) / 100; - float mitigation = (float) (90 * (1 - Math.exp(-0.000125 * baseArmor)) + baseArmor / 9000); + if(command.getBypassArmor() > 0) + baseArmor *= (100 - command.getBypassArmor()) / 100; + float mitigation = (float) (90 * (1 - Math.exp(-0.000125 * baseArmor))) + baseArmor / 9000; + if(hitType == HitType.STRIKETHROUGH) { - float stMaxValue = attacker.getSkillMod("combat_strikethrough_value").getBase() / 2 + attacker.getLuck() / 10; + float stMaxValue = attacker.getSkillModBase("combat_strikethrough_value") / 2 + attacker.getLuck() / 10; if(stMaxValue > 99) stMaxValue = 99; float stMinValue = stMaxValue / 2; @@ -448,13 +519,33 @@ public class CombatService implements INetworkDispatch { stValue = 1 - stValue; mitigation *= stValue; } - + return mitigation / 100; } private boolean attemptCombat(CreatureObject attacker, TangibleObject target) { - + + if (attacker.isInStealth()) { + attacker.setInStealth(false); + + if (attacker.getPlayerObject() != null && attacker.getPlayerObject().getProfession().equals("spy_1a")) { + attacker.setRadarVisible(true); + } + } + + if (attacker.getSlottedObject("ghost") != null) { + PlayerObject ghost = attacker.getPlayerObject(); + if (ghost.getBountyMissionId() != 0) { + MissionObject mission = (MissionObject) core.objectService.getObject(ghost.getBountyMissionId()); + if (mission != null && mission.getBountyMarkId() == target.getObjectID()) { + target.addDefender(attacker); + + target.updatePvpStatus(); + } + } + } + if(target.getDefendersList().contains(attacker) && attacker.getDefendersList().contains(target)) return true; @@ -464,8 +555,18 @@ public class CombatService implements INetworkDispatch { if(!target.isAttackableBy(attacker)) return false; - target.addDefender(attacker); - attacker.addDefender(target); + if(target.getAttachment("AI") instanceof AIActor && attacker instanceof CreatureObject) { + ((AIActor) target.getAttachment("AI")).addDefender((CreatureObject) attacker); + } else { + target.addDefender(attacker); + } + if(attacker.getAttachment("AI") instanceof AIActor && target instanceof CreatureObject) { + ((AIActor) attacker.getAttachment("AI")).addDefender((CreatureObject) target); + } else { + attacker.addDefender(target); // See below comment + } + + //attacker.addDefender(target); // Why do we need to add target to defender list twice? return true; @@ -479,8 +580,7 @@ public class CombatService implements INetworkDispatch { if(actionCost == 0 && healthCost == 0) return true; - if(attacker.getSkillMod("expertise_action_all") != null) - actionCost *= attacker.getSkillMod("expertise_action_all").getBase(); + actionCost *= getWeaponActionCostReduction(attacker, weapon); float newAction = attacker.getAction() - actionCost; if(newAction <= 0) @@ -510,7 +610,7 @@ public class CombatService implements INetworkDispatch { float rawDamage = command.getAddedDamage(); - if(command.getPercentFromWeapon() > 0 && weapon != attacker.getSlottedObject("default_weapon")) { + if(command.getPercentFromWeapon() > 0) { float weaponMinDmg = weapon.getMinDamage(); float weaponMaxDmg = weapon.getMaxDamage(); @@ -539,25 +639,10 @@ public class CombatService implements INetworkDispatch { } - } else if(command.getPercentFromWeapon() > 0) { - - float weaponMinDmg = 50; - float weaponMaxDmg = 100; - - float weaponDmg = new Random().nextInt((int) (weaponMaxDmg - weaponMinDmg + 1)) + weaponMinDmg; - weaponDmg *= command.getPercentFromWeapon(); - rawDamage += weaponDmg; - - if(weapon.isMelee()) { - - if(attacker.getStrength() > 0) { - rawDamage += ((attacker.getStrength() / 100) * 33); - } - - } - } + rawDamage *= getWeaponDamageIncrease(attacker, weapon); + if(target.getSkillMod("damage_decrease_percentage") != null) { rawDamage *= (1 - (target.getSkillMod("damage_decrease_percentage").getBase() / 100)); } @@ -565,11 +650,7 @@ public class CombatService implements INetworkDispatch { if(target.getSkillMod("combat_divide_damage_dealt") != null) { rawDamage *= (1 - (target.getSkillMod("combat_divide_damage_dealt").getBase() / 100)); } - - if(attacker.getSkillMod("expertise_damage_melee") != null) { - rawDamage *= (1 + (attacker.getSkillMod("expertise_damage_melee").getBase() / 100)); - } - + return rawDamage; } @@ -608,23 +689,6 @@ public class CombatService implements INetworkDispatch { } - } else if(command.getPercentFromWeapon() > 0) { - - float weaponMinDmg = 50; - float weaponMaxDmg = 100; - - float weaponDmg = new Random().nextInt((int) (weaponMaxDmg - weaponMinDmg + 1)) + weaponMinDmg; - weaponDmg *= command.getPercentFromWeapon(); - rawDamage += weaponDmg; - - if(weapon.isMelee()) { - - if(attacker.getStrength() > 0) { - rawDamage += ((attacker.getStrength() / 100) * 33); - } - - } - } return rawDamage; @@ -650,8 +714,8 @@ public class CombatService implements INetworkDispatch { if(r <= missChance) return HitType.MISS; } - float dodgeChance = (float) target.getSkillMod("display_only_dodge").getBase() / 10000; - + float dodgeChance = (float) (target.getSkillModBase("display_only_dodge") - attacker.getSkillModBase("display_only_opp_dodge_reduction")) / 10000; + r = random.nextFloat(); if(r <= dodgeChance) return HitType.DODGE; @@ -660,7 +724,7 @@ public class CombatService implements INetworkDispatch { WeaponObject weapon2 = (WeaponObject) core.objectService.getObject(((CreatureObject) target).getWeaponId()); if(weapon2 != null && weapon2.isMelee()) { - float parryChance = (float) target.getSkillMod("display_only_parry").getBase() / 10000; + float parryChance = (float) (target.getSkillModBase("display_only_parry") - attacker.getSkillModBase("display_only_parry_reduction"))/ 10000; r = random.nextFloat(); if(r <= parryChance) @@ -668,7 +732,7 @@ public class CombatService implements INetworkDispatch { } - float stChance = (float) attacker.getSkillMod("display_only_strikethrough").getBase() / 10000; + float stChance = (float) attacker.getSkillModBase("display_only_strikethrough") / 10000; r = random.nextFloat(); if(r <= stChance) @@ -676,9 +740,26 @@ public class CombatService implements INetworkDispatch { } - float critChance = (float) attacker.getSkillMod("display_only_critical").getBase() / 10000; + float critChance = 0; + + critChance += (command.getCriticalChance()); + + critChance += ((float) attacker.getSkillModBase("display_only_critical") / 100); + + critChance -= ((float) target.getSkillModBase("display_only_expertise_critical_hit_reduction") / 100); + + critChance += ((float) target.getSkillModBase("critical_hit_vulnerable") / 100); + + if(target.getSlottedObject("ghost") != null) + if(target.isPlayer()) { + critChance += attacker.getSkillModBase("expertise_critical_niche_pvp"); + critChance -= ((float) target.getSkillModBase("display_only_expertise_critical_hit_pvp_reduction") / 100); + } + + r = random.nextFloat(); - if(r <= critChance) + + if(r <= ((float) critChance / 100)) return HitType.CRITICAL; // TODO: Punishing blow once AI is implemented @@ -692,7 +773,7 @@ public class CombatService implements INetworkDispatch { float r; Random random = new Random(); - float blockChance = (float) target.getSkillMod("display_only_block").getBase() / 10000; + float blockChance = (float) (target.getSkillModBase("display_only_block") - attacker.getSkillModBase("display_only_opp_block_reduction"))/ 10000; r = random.nextFloat(); if(r <= blockChance) @@ -700,7 +781,7 @@ public class CombatService implements INetworkDispatch { if(command.getAttackType() == 0 || command.getAttackType() == 2 || command.getAttackType() == 3) { - float evasionChance = (float) target.getSkillMod("display_only_evasion").getBase() / 10000; + float evasionChance = (float) target.getSkillModBase("display_only_evasion") / 10000; r = random.nextFloat(); if(r <= evasionChance) @@ -708,10 +789,16 @@ public class CombatService implements INetworkDispatch { } - if(hitType == HitType.HIT) { + if(hitType == HitType.HIT && target.getSkillMod("display_only_glancing_blow") != null) { - float glanceChance = (float) target.getSkillMod("display_only_glancing_blow").getBase() / 10000; + float glanceChance = (float) target.getSkillModBase("display_only_glancing_blow") / 10000; + if(weapon.isRanged()) + glanceChance += target.getSkillModBase("expertise_glancing_blow_ranged"); + + if(weapon.isMelee()) + glanceChance += target.getSkillModBase("expertise_glancing_blow_melee"); + r = random.nextFloat(); if(r <= glanceChance) return HitType.GLANCE; @@ -724,7 +811,7 @@ public class CombatService implements INetworkDispatch { public void applyDamage(CreatureObject attacker, final CreatureObject target, int damage) { - if(target.getHealth() - damage <= 0) { + if(target.getHealth() - damage <= 0 && target.getSlottedObject("ghost") != null) { if(target.hasBuff("incapWeaken")) { deathblowPlayer(attacker, target); @@ -732,42 +819,61 @@ public class CombatService implements INetworkDispatch { } synchronized(target.getMutex()) { - target.setHealth(1); - target.setPosture((byte) 13); - target.setTurnRadius(0); - target.setSpeedMultiplierBase(0); - } - ScheduledFuture incapTask = scheduler.schedule(new Runnable() { - - @Override - public void run() { - - synchronized(target.getMutex()) { - - if(target.getPosture() != 13) - return; - - target.setPosture((byte) 0); - target.setTurnRadius(1); - target.setSpeedMultiplierBase(1); - - } - + if (core.mountService.isMounted(target)) { + core.mountService.dismount(target, (CreatureObject) target.getContainer()); } + target.setHealth(1); + target.setPosture(Posture.Incapacitated); + target.setTurnRadius(0); + target.setSpeedMultiplierBase(0); + } + ScheduledFuture incapTask = scheduler.schedule(() -> { + + synchronized(target.getMutex()) { + + if(target.getPosture() != 13) + return; + + target.setPosture(Posture.Upright); + target.setTurnRadius(1); + target.setSpeedMultiplierBase(1); + + } + }, target.getIncapTimer(), TimeUnit.SECONDS); target.setIncapTask(incapTask); - core.buffService.addBuffToCreature(target, "incapWeaken"); - if(target.getSlottedObject("ghost") != null) - attacker.sendSystemMessage("You incapacitate " + target.getCustomName() + ".", (byte) 0); + core.buffService.addBuffToCreature(target, "incapWeaken", target); + if(target.getSlottedObject("ghost") != null && attacker.getSlottedObject("ghost") != null) { + target.sendSystemMessage(OutOfBand.ProsePackage("@base_player:prose_victim_incap", "TT", attacker.getCustomName()), DisplayType.Broadcast); + attacker.sendSystemMessage(OutOfBand.ProsePackage("@base_player:prose_target_incap", "TT", target.getCustomName()), DisplayType.Broadcast); + } else {target.sendSystemMessage(OutOfBand.ProsePackage("@base_player:prose_victim_incap", "TT", "@" + attacker.getStfFilename() + ":" + attacker.getStfName()), DisplayType.Broadcast); } + return; + } else if(target.getHealth() - damage <= 0 && target.getAttachment("AI") != null) { + synchronized(target.getMutex()) { + target.setHealth(0); + target.setPosture(Posture.Dead); + } + attacker.removeDefender(target); + target.removeDefender(attacker); return; } synchronized(target.getMutex()) { target.setHealth(target.getHealth() - damage); } - + DamageTaken event = events.new DamageTaken(); + event.attacker = attacker; + event.damage = damage; + target.getEventBus().publish(event); } + public void doDrainHeal(CreatureObject receiver, int drainAmount) { + synchronized(receiver.getMutex()) { + receiver.setHealth(receiver.getHealth() + drainAmount); + } + + } + private boolean isInConeAngle(CreatureObject attacker, SWGObject target, int coneLength, int coneWidth, float directionX, float directionZ) { float radius = coneWidth / 2; @@ -786,13 +892,25 @@ public class CombatService implements INetworkDispatch { return true; - } + } public boolean attemptHeal(CreatureObject healer, CreatureObject target) { if(healer == target) return true; + PlayerObject healerPo = (PlayerObject) healer.getSlottedObject("ghost"); + + if (healerPo != null && !healerPo.getProfession().startsWith("medic")) { + return false; + } + + if (areInDuel(healer, target)) { + return false; + } + + if(target.getAttachment("AI") != null) return false; + if(healer.getFaction().equals(target.getFaction())) { if(healer.getFactionStatus() < target.getFactionStatus()) @@ -802,7 +920,7 @@ public class CombatService implements INetworkDispatch { } else { - if(target.getFactionStatus() == 0) + if(target.getFactionStatus() == FactionStatus.OnLeave) return true; return false; @@ -815,14 +933,14 @@ public class CombatService implements INetworkDispatch { boolean success = true; + if((command.getAttackType() == 0 || command.getAttackType() == 1 || command.getAttackType() == 3) && !attemptHeal(healer, target)) + target = healer; + if(target.getMaxHealth() == target.getHealth()) success = command.getAttackType() != 1; - if(!applySpecialCost(healer, weapon, command)) + if(success && !applySpecialCost(healer, weapon, command)) success = false; - - if((command.getAttackType() == 0 || command.getAttackType() == 1 || command.getAttackType() == 3) && !attemptHeal(healer, target)) - target = healer; if(!success) { IoSession session = healer.getClient().getSession(); @@ -844,6 +962,12 @@ public class CombatService implements INetworkDispatch { private void doSingleTargetHeal(CreatureObject healer, CreatureObject target, WeaponObject weapon, CombatCommand command, int actionCounter) { + if(command.getDotDuration() > 0) { + addHealOverTimeToCreature(healer, target, command); + return; + } + + int healAmount = command.getAddedDamage(); int healPotency = 0; @@ -857,8 +981,11 @@ public class CombatService implements INetworkDispatch { healPotency += healer.getSkillMod("expertise_healing_line_sm_heal").getBase(); if(healer.getSkillMod("expertise_healing_line_sp_heal") != null) healPotency += healer.getSkillMod("expertise_healing_line_sp_heal").getBase(); + if(healer.hasBuff("fs_buff_def_1_1")) + if(healer.getSkillMod("expertise_stance_healing_line_fs_heal") != null) + healPotency += healer.getSkillMod("expertise_stance_healing_line_fs_heal").getBase(); if(healPotency > 0) - healAmount += (healAmount * (healPotency / 100)); + healAmount += ((healAmount * healPotency) / 100); if(target.getSkillMod("expertise_healing_reduction") != null) healAmount *= (1 - target.getSkillMod("expertise_healing_reduction").getBase() / 100); @@ -882,7 +1009,7 @@ public class CombatService implements INetworkDispatch { if(!(obj instanceof CreatureObject)) continue; - if(obj instanceof CreatureObject && (((CreatureObject) obj).getPosture() == 14)) + if(obj instanceof CreatureObject && (((CreatureObject) obj).getPosture() == Posture.Dead)) continue; if(!core.simulationService.checkLineOfSight(target, obj)) @@ -898,17 +1025,64 @@ public class CombatService implements INetworkDispatch { } public void deathblowPlayer(CreatureObject attacker, CreatureObject target) { - target.stopIncapTask(); target.setIncapTask(null); - target.setPosture((byte) 14); - attacker.sendSystemMessage("You have killed " + target.getCustomName() + ".", (byte) 0); - target.sendSystemMessage("@base_player:victim_dead", (byte) 0); + target.setPosture(Posture.Dead); + + if (target.getSlottedObject("ghost") != null && attacker.getSlottedObject("ghost") != null) { + boolean bountyWindow = true; + + if (attacker.getPlayerObject().getBountyMissionId() != 0) { // Bounty Hunter is deathblowing (attacker) + bountyWindow = false; + MissionObject mission = (MissionObject) core.objectService.getObject(attacker.getPlayerObject().getBountyMissionId()); + + if (mission != null && mission.getBountyMarkId() == target.getObjectID()) { + + attacker.sendSystemMessage(OutOfBand.ProsePackage("@bounty_hunter:bounty_success_hunter", mission.getCreditReward(), "TT", target.getCustomName(), "TO", target.getObjectID()), DisplayType.Broadcast); + + target.sendSystemMessage(OutOfBand.ProsePackage("@bounty_hunter:bounty_success_target", mission.getCreditReward(), "TT", attacker.getCustomName()), DisplayType.Broadcast); + + core.missionService.handleMissionComplete(attacker, mission); + } + } else if (target.getPlayerObject().getBountyMissionId() != 0) { // Bounty Hunter is being deathblown (They're the target) + bountyWindow = false; + MissionObject mission = (MissionObject) core.objectService.getObject(target.getPlayerObject().getBountyMissionId()); + + if (mission != null && mission.getBountyMarkId() == attacker.getObjectID()) { + + attacker.sendSystemMessage(OutOfBand.ProsePackage("@bounty_hunter:bounty_failed_target", mission.getCreditReward(), "TT", target.getCustomName(), "TO", target.getObjectID()), DisplayType.Broadcast); + + target.sendSystemMessage(OutOfBand.ProsePackage("@bounty_hunter:bounty_failed_hunter", "TT", attacker.getCustomName()), DisplayType.Broadcast); + + core.missionService.handleMissionAbort(target, mission); + } + } + + if (target.getDuelList().contains(attacker)) { + bountyWindow = false; + handleEndDuel(target, attacker, false); + } else { + awardGcw(attacker, target); + } + + if (bountyWindow) { + core.playerService.sendSetBountyWindow(target, attacker); + } + } else { + attacker.sendSystemMessage("You have killed " + ((target.getCustomName() == null) ? target.getObjectName().getStfValue() : target.getCustomName()) + ".", DisplayType.Broadcast); + } + attacker.removeDefender(target); target.removeDefender(attacker); + target.setSpeedMultiplierBase(0); + target.setTurnRadius(0); + + if (attacker.getSlottedObject("ghost") != null) + target.sendSystemMessage(OutOfBand.ProsePackage("@base_player:prose_victim_dead", "TT", attacker.getCustomName()), DisplayType.Broadcast); + else + target.sendSystemMessage(OutOfBand.ProsePackage("@base_player:prose_victim_dead", "TT", "@" + attacker.getStfFilename() + ":" + attacker.getStfName()), DisplayType.Broadcast); core.playerService.sendCloningWindow(target, attacker.getSlottedObject("ghost") != null); - } public boolean areInDuel(CreatureObject creature1, CreatureObject creature2) { @@ -917,7 +1091,6 @@ public class CombatService implements INetworkDispatch { return true; return false; - } public void handleDuel(CreatureObject requester, CreatureObject target) { @@ -934,15 +1107,15 @@ public class CombatService implements INetworkDispatch { requester.getDuelList().add(target); requester.sendSystemMessage("You accept " + target.getCustomName() + "'s challenge.", (byte) 0); target.sendSystemMessage(requester.getCustomName() + " accepts your challenge.", (byte) 0); - target.getClient().getSession().write(new UpdatePVPStatusMessage(requester.getObjectID(), 55, requester.getFaction()).serialize()); - requester.getClient().getSession().write(new UpdatePVPStatusMessage(target.getObjectID(), 55, target.getFaction()).serialize()); + target.updatePvpStatus(); + requester.updatePvpStatus(); } } - public void handleEndDuel(CreatureObject requester, CreatureObject target) { + public void handleEndDuel(CreatureObject requester, CreatureObject target, boolean announce) { requester.getDuelList().remove(target); target.getDuelList().remove(requester); @@ -950,11 +1123,14 @@ public class CombatService implements INetworkDispatch { target.removeDefender(requester); requester.removeDefender(target); - target.getClient().getSession().write(new UpdatePVPStatusMessage(requester.getObjectID(), 0x16, requester.getFaction()).serialize()); - requester.getClient().getSession().write(new UpdatePVPStatusMessage(target.getObjectID(), 0x16, target.getFaction()).serialize()); + target.updatePvpStatus(); + requester.updatePvpStatus(); - requester.sendSystemMessage("You end your duel with " + target.getCustomName() + ".", (byte) 0); - target.sendSystemMessage(requester.getCustomName() + " ends your duel.", (byte) 0); + if(announce) + { + requester.sendSystemMessage("You end your duel with " + target.getCustomName() + ".", (byte) 0); + target.sendSystemMessage(requester.getCustomName() + " ends your duel.", (byte) 0); + } } @@ -966,7 +1142,7 @@ public class CombatService implements INetworkDispatch { success = false; if((command.getAttackType() == 0 || command.getAttackType() == 1 || command.getAttackType() == 3) && !attemptHeal(medic, target)) - target = medic; + success = false; if(!success) { IoSession session = medic.getClient().getSession(); @@ -982,8 +1158,7 @@ public class CombatService implements INetworkDispatch { else if(command.getAttackType() == 0 || command.getAttackType() == 2 || command.getAttackType() == 3) doAreaRevive(medic, target, weapon, command, actionCounter); - sendHealPackets(medic, target, weapon, command, actionCounter); - + //sendHealPackets(medic, target, weapon, command, actionCounter); // Is there a reason this is here (combat log...?) - it causes a player to come back from the dead die again. } private void doSingleTargetRevive(CreatureObject medic, CreatureObject target, WeaponObject weapon, CombatCommand command, int actionCounter) { @@ -998,11 +1173,11 @@ public class CombatService implements INetworkDispatch { CreatureObject creature = (CreatureObject) owner; - if(eventType != 0 || creature.getPosture() != 14) + if(eventType != 0 || creature.getPosture() != Posture.Dead) return; synchronized(creature.getMutex()) { - creature.setPosture((byte) 0); + creature.setPosture(Posture.Upright); creature.setTurnRadius(1); creature.setSpeedMultiplierBase(1); creature.setHealth(creature.getHealth() + 4000); @@ -1027,7 +1202,7 @@ public class CombatService implements INetworkDispatch { if(!(obj instanceof CreatureObject)) continue; - if(obj instanceof CreatureObject && (((CreatureObject) obj).getPosture() != 14)) + if(obj instanceof CreatureObject && (((CreatureObject) obj).getPosture() != Posture.Dead)) continue; if(!attemptHeal(medic, (CreatureObject) obj)) @@ -1096,32 +1271,28 @@ public class CombatService implements INetworkDispatch { return; if(target.getSkillMod("expertise_dot_absorption_all") != null) - damage *= (1 - target.getSkillMod("expertise_dot_absorption_all").getBase() / 100); + damage *= (1 - target.getSkillModBase("expertise_dot_absorption_all") / 100); switch(dot.getType()) { - case "acid": - baseArmor = target.getSkillMod("acid").getBase(); - case "heat": - baseArmor = target.getSkillMod("heat").getBase(); - case "cold": - baseArmor = target.getSkillMod("cold").getBase(); - case "electricity": - baseArmor = target.getSkillMod("electricity").getBase(); - case "energy": - baseArmor = target.getSkillMod("energy").getBase(); case "kinetic": - baseArmor = target.getSkillMod("electricity").getBase(); + baseArmor = target.getSkillModBase("electricity"); // Is this a mistake or is it legitimate? case "poison": - baseArmor = target.getSkillMod("acid").getBase(); + baseArmor = target.getSkillModBase("acid"); case "disease": // disease damages action in nge baseArmor = 0; case "bleeding": // elemental type unknown case "fire": - baseArmor = target.getSkillMod("heat").getBase(); + baseArmor = target.getSkillModBase("heat"); + default: + baseArmor = target.getSkillModBase(dot.getType()); } + if(target.getSkillMod("expertise_innate_reduction_all_player") != null) { + baseArmor *= (100 - target.getSkillMod("expertise_innate_reduction_all_player").getBase()) / 100; + } + if(baseArmor > 0) { float mitigation = (float) (90 * (1 - Math.exp(-0.000125 * baseArmor)) + baseArmor / 9000); mitigation /= 100; @@ -1136,33 +1307,198 @@ public class CombatService implements INetworkDispatch { applyDamage(attacker, target, damage); } + + public void doSelfBuff(CreatureObject creature, WeaponObject weapon, CombatCommand command, int actionCounter) { + + boolean success = true; + + if(!applySpecialCost(creature, weapon, command)) + success = false; + + if(!success) { + IoSession session = creature.getClient().getSession(); + CommandEnqueueRemove commandRemove = new CommandEnqueueRemove(creature.getObjectId(), actionCounter); + session.write(new ObjControllerMessage(0x0B, commandRemove).serialize()); + StartTask startTask = new StartTask(actionCounter, creature.getObjectID(), command.getCommandCRC(), CRC.StringtoCRC(command.getCooldownGroup()), -1); + session.write(new ObjControllerMessage(0x0B, startTask).serialize()); + return; + } + + if (creature.hasBuff("co_position_secured")) + core.buffService.removeBuffFromCreatureByName(creature, "co_position_secured"); + else + core.buffService.addBuffToCreature(creature, command.getBuffNameSelf(), creature); - public enum HitType{; - - public static final byte MISS = 0; - public static final byte DODGE = 1; - public static final byte PARRY = 2; - public static final byte STRIKETHROUGH = 3; - public static final byte CRITICAL = 4; - public static final byte PUNISHING = 5; - public static final byte HIT = 6; - public static final byte BLOCK = 7; - public static final byte EVASION = 8; - public static final byte GLANCE = 9; - + StartTask startTask = new StartTask(actionCounter, creature.getObjectID(), command.getCommandCRC(), CRC.StringtoCRC(command.getCooldownGroup()), command.getCooldown()); + ObjControllerMessage objController2 = new ObjControllerMessage(0x0B, startTask); + creature.getClient().getSession().write(objController2.serialize()); + + CommandEnqueueRemove commandRemove = new CommandEnqueueRemove(creature.getObjectID(), actionCounter); + ObjControllerMessage objController3 = new ObjControllerMessage(0x0B, commandRemove); + creature.getClient().getSession().write(objController3.serialize()); + + } - public enum ElementalType {; - - public static final int KINETIC = 1; - public static final int ENERGY = 2; - public static final int BLAST = 4; - public static final int STUN = 8; - public static final int HEAT = 32; - public static final int COLD = 64; - public static final int ACID = 128; - public static final int ELECTRICITY = 256; + public void addHealOverTimeToCreature(final CreatureObject healer, final CreatureObject target, final CombatCommand command) { + + if(target.getDotByName(command.getCommandName()) != null) { + + DamageOverTime oldDot = target.getDotByName(command.getCommandName()); + oldDot.getTask().cancel(true); + target.removeDot(oldDot); + + } + + final DamageOverTime dot = new DamageOverTime(command.getCommandName(), null, command.getDotType(), command.getDotDuration(), command.getDotIntensity()); + target.addDot(dot); + dot.setStartTime(System.currentTimeMillis()); + + final ScheduledFuture task = scheduler.scheduleAtFixedRate(new Runnable() { + @Override + public void run() { + + if(dot.getRemainingDuration() <= 0) { + target.removeDot(dot); + dot.getTask().cancel(true); + } + + doHealOverTimeTick(healer, target, command, dot); + + } + + + + }, 0, command.getDotDuration() / (command.getAddedDamage() / command.getDotIntensity()), TimeUnit.SECONDS); + + dot.setTask(task); + + } + + private void doHealOverTimeTick(CreatureObject healer, CreatureObject target, CombatCommand command, DamageOverTime dot) { + + int healAmount = command.getDotIntensity(); + int healPotency = 0; + + if(healer.getSkillMod("expertise_healing_all") != null) + healPotency += healer.getSkillMod("expertise_healing_all").getBase(); + if(healer.getSkillMod("expertise_healing_line_me_heal") != null) + healPotency += healer.getSkillMod("expertise_healing_line_me_heal").getBase(); + if(healer.getSkillMod("expertise_healing_line_of_heal") != null) + healPotency += healer.getSkillMod("expertise_healing_line_of_heal").getBase(); + if(healer.getSkillMod("expertise_healing_line_sm_heal") != null) + healPotency += healer.getSkillMod("expertise_healing_line_sm_heal").getBase(); + if(healer.getSkillMod("expertise_healing_line_sp_heal") != null) + healPotency += healer.getSkillMod("expertise_healing_line_sp_heal").getBase(); + if(healPotency > 0) + healAmount += (healAmount * (healPotency / 100)); + if(target.getSkillMod("expertise_healing_reduction") != null) + healAmount *= (1 - target.getSkillMod("expertise_healing_reduction").getBase() / 100); + + synchronized(target.getMutex()) { + target.setHealth(target.getHealth() + healAmount); + } + target.notifyObservers(new PlayClientEffectLocMessage("appearance/pt_heal_2.prt", target.getPlanet().getName(), target.getWorldPosition()), true); + + } + + public float getWeaponActionCostReduction(CreatureObject attacker, WeaponObject weapon) { + + int weaponType = weapon.getWeaponType(); + int actionReduction; + + if(weaponType == WeaponType.HEAVYWEAPON || weaponType == WeaponType.FLAMETHROWER) + actionReduction = attacker.getSkillModBase("expertise_action_weapon_3"); + else + actionReduction = attacker.getSkillModBase("expertise_action_weapon_" + Integer.toString(weaponType)); + + actionReduction += attacker.getSkillModBase("expertise_action_all"); + + return 1 + (actionReduction / 100); + + } + + public float getWeaponDamageIncrease(CreatureObject attacker, WeaponObject weapon) { + + int weaponType = weapon.getWeaponType(); + int weaponDmgIncrease; + + if(weaponType == WeaponType.HEAVYWEAPON || weaponType == WeaponType.FLAMETHROWER) + weaponDmgIncrease = attacker.getSkillModBase("expertise_damage_weapon_3"); + else + weaponDmgIncrease = attacker.getSkillModBase("expertise_damage_weapon_" + Integer.toString(weaponType)); + + if(weapon.isRanged()) + weaponDmgIncrease += attacker.getSkillModBase("expertise_damage_ranged"); + + if(weapon.isMelee()) + weaponDmgIncrease += attacker.getSkillModBase("expertise_damage_melee"); + + weaponDmgIncrease += attacker.getSkillModBase("expertise_damage_all"); + + + return 1 + (weaponDmgIncrease / 100); + + } + + public void endCombat(CreatureObject defender) { + Vector defenderList = new Vector(defender.getDefendersList()); + if (defenderList.size() > 0) { + defenderList.stream().forEach(attacker -> defender.removeDefender(attacker)); + } + } + + public void awardGcw(CreatureObject actor, CreatureObject target) { + try { + if (actor.getSlottedObject("ghost") == null || target.getSlottedObject("ghost") == null) { + return; + } + + PlayerObject targetPlayer = (PlayerObject) target.getSlottedObject("ghost"); + + if (!core.factionService.isFactionEnemy(actor, target) && target.isAttackableBy(actor)) { + return; + } + + Set inRange = new HashSet(); + + inRange.add(actor); + + actor.getObservers().stream().forEach(observer -> inRange.add((CreatureObject) observer.getParent())); + + for (CreatureObject rangedPlayer : inRange) { + if (!(rangedPlayer.getFaction().equals(actor.getFaction()) && target.isAttackableBy(rangedPlayer))){ + continue; + } + + if (!((rangedPlayer.getLevel() / target.getLevel() * 100) < 70)) { + continue; + } + + if (rangedPlayer.getSlottedObject("ghost") == null) { + continue; + } + + PlayerObject player = (PlayerObject) rangedPlayer.getSlottedObject("ghost"); + + float gcwPoints = 37.5f; + + gcwPoints *= targetPlayer.getCurrentRank(); + + float decay = (((float) player.getPvpKills()) / 100f * gcwPoints); + + gcwPoints = (((gcwPoints - decay) < 0) ? 0 : (gcwPoints - decay)); + + core.gcwService.addGcwPoints(rangedPlayer, (int) gcwPoints, GcwType.Player); + + actor.sendSystemMessage(OutOfBand.ProsePackage("@gcw:gcw_rank_pvp_kill_point_grant", (int) gcwPoints, "TT", target.getCustomName()), DisplayType.Broadcast); + } + } catch (Exception e) { + + } + } + } diff --git a/src/services/command/BaseSWGCommand.java b/src/services/command/BaseSWGCommand.java index d89c4455..5025939d 100644 --- a/src/services/command/BaseSWGCommand.java +++ b/src/services/command/BaseSWGCommand.java @@ -21,63 +21,331 @@ ******************************************************************************/ package services.command; +import engine.clientdata.ClientFileManager; +import engine.clientdata.visitors.DatatableVisitor; import engine.resources.common.CRC; +import java.util.ArrayList; +import java.util.List; + public class BaseSWGCommand implements Cloneable { private String commandName; private String clientEffectSelf; private String clientEffectTarget; - private int maxRangeToTarget; private int commandCRC; + private String characterAbility; + private int target; + private int targetType; + private boolean callOnTarget = false; + private int commandGroup; + private boolean disabled = true; + private float maxRangeToTarget; + private int godLevel; + private int displayGroup; + private boolean combatCommand = false; + private int validWeapon; + private int invalidWeapon; + private String cooldownGroup; + private float cooldown; + private float executeTime; + private float warmupTime; + private Byte[] invalidLocomotions; + private Long[] invalidStates; public BaseSWGCommand(String commandName) { + commandName.toLowerCase(); setCommandName(commandName); setCommandCRC(CRC.StringtoCRC(commandName)); + + try { + boolean foundCommand = false; + + String[] tableArray = new String[] { + "client_command_table", "client_command_table_ground", "client_command_table_space", + "command_table", "command_table_ground", "command_table_space" }; + + for (int n = 0; n < tableArray.length; n++) { + List invalidLocomotions = new ArrayList(); + List invalidStates = new ArrayList(); + + DatatableVisitor visitor2 = ClientFileManager.loadFile("datatables/command/" + tableArray[n] + ".iff", DatatableVisitor.class); + + for (int i = 0; i < visitor2.getRowCount(); i++) { + if (visitor2.getObject(i, 0) != null) { + if (((String) visitor2.getObject(i, 0)).equalsIgnoreCase(commandName)) { + int sub = 0; // Subtract due to command table structures being different + + characterAbility = (String) visitor2.getObject(i, 7); + + for (int l = (8 - sub); l <= (29 - sub); l++) { + if (!((Boolean) visitor2.getObject(i, l))) { + invalidLocomotions.add((byte) (l - (8 - sub))); + } + } + + if (tableArray[n].startsWith("client_") || tableArray[n].startsWith("command_table_")) { + sub += 1; + } + + if (!((Boolean) visitor2.getObject(i, 32-sub))) invalidStates.add(1L); + if (!((Boolean) visitor2.getObject(i, 33-sub))) invalidStates.add(2L); + if (!((Boolean) visitor2.getObject(i, 34-sub))) invalidStates.add(4L); + if (!((Boolean) visitor2.getObject(i, 35-sub))) invalidStates.add(8L); + if (!((Boolean) visitor2.getObject(i, 36-sub))) invalidStates.add(16L); + if (!((Boolean) visitor2.getObject(i, 37-sub))) invalidStates.add(32L); + if (!((Boolean) visitor2.getObject(i, 38-sub))) invalidStates.add(64L); + if (!((Boolean) visitor2.getObject(i, 39-sub))) invalidStates.add(128L); + if (!((Boolean) visitor2.getObject(i, 40-sub))) invalidStates.add(256L); + if (!((Boolean) visitor2.getObject(i, 41-sub))) invalidStates.add(512L); + if (!((Boolean) visitor2.getObject(i, 42-sub))) invalidStates.add(1024L); + if (!((Boolean) visitor2.getObject(i, 43-sub))) invalidStates.add(2048L); + if (!((Boolean) visitor2.getObject(i, 44-sub))) invalidStates.add(4096L); + if (!((Boolean) visitor2.getObject(i, 45-sub))) invalidStates.add(8192L); + if (!((Boolean) visitor2.getObject(i, 46-sub))) invalidStates.add(16384L); + if (!((Boolean) visitor2.getObject(i, 47-sub))) invalidStates.add(32768L); + if (!((Boolean) visitor2.getObject(i, 48-sub))) invalidStates.add(65536L); + if (!((Boolean) visitor2.getObject(i, 49-sub))) invalidStates.add(131072L); + if (!((Boolean) visitor2.getObject(i, 50-sub))) invalidStates.add(262144L); + if (!((Boolean) visitor2.getObject(i, 51-sub))) invalidStates.add(524288L); + if (!((Boolean) visitor2.getObject(i, 52-sub))) invalidStates.add(1048576L); + if (!((Boolean) visitor2.getObject(i, 53-sub))) invalidStates.add(2097152L); + if (!((Boolean) visitor2.getObject(i, 54-sub))) invalidStates.add(4194304L); + if (!((Boolean) visitor2.getObject(i, 55-sub))) invalidStates.add(8388608L); + if (!((Boolean) visitor2.getObject(i, 56-sub))) invalidStates.add(16777216L); + if (!((Boolean) visitor2.getObject(i, 57-sub))) invalidStates.add(33554432L); + if (!((Boolean) visitor2.getObject(i, 58-sub))) invalidStates.add(67108864L); + if (!((Boolean) visitor2.getObject(i, 59-sub))) invalidStates.add(134217728L); + + if (!tableArray[n].equals("client_command_table_space")) { + if (!((Boolean) visitor2.getObject(i, 60-sub))) invalidStates.add(268435456L); + if (!((Boolean) visitor2.getObject(i, 61-sub))) invalidStates.add(536870912L); + if (!((Boolean) visitor2.getObject(i, 62-sub))) invalidStates.add(1073741824L); + if (!((Boolean) visitor2.getObject(i, 63-sub))) invalidStates.add(2147483648L); + if (!((Boolean) visitor2.getObject(i, 64-sub))) invalidStates.add(4294967296L); + } else { + sub += 5; + } + + if (!tableArray[n].startsWith("client_") && !tableArray[n].startsWith("command_table_")) { + if (!((Boolean) visitor2.getObject(i, 65-sub))) invalidStates.add(8589934592L); + if (!((Boolean) visitor2.getObject(i, 66-sub))) invalidStates.add(17179869184L); + if (!((Boolean) visitor2.getObject(i, 67-sub))) invalidStates.add(34359738368L); + if (!((Boolean) visitor2.getObject(i, 68-sub))) invalidStates.add(68719476736L); + if (!((Boolean) visitor2.getObject(i, 69-sub))) invalidStates.add(137438953472L); + if (!((Boolean) visitor2.getObject(i, 70-sub))) invalidStates.add(274877906944L); + } else { + sub += 6; + } + + target = (Integer) visitor2.getObject(i, 72-sub); + targetType = (Integer) visitor2.getObject(i, 73-sub); + callOnTarget = (Boolean) visitor2.getObject(i, 76-sub); + commandGroup = (Integer) visitor2.getObject(i, 77-sub); + disabled = (Boolean) visitor2.getObject(i, 78-sub); + maxRangeToTarget = (Float) visitor2.getObject(i, 79-sub); + godLevel = (Integer) visitor2.getObject(i, 80-sub); + displayGroup = (Integer) visitor2.getObject(i, 81-sub); + combatCommand = (Boolean) visitor2.getObject(i, 82-sub); + validWeapon = (Integer) visitor2.getObject(i, 83-sub); + invalidWeapon = (Integer) visitor2.getObject(i, 84-sub); + cooldownGroup = (String) visitor2.getObject(i, 85-sub); + warmupTime = (Float) visitor2.getObject(i, 86-sub); + executeTime = (Float) visitor2.getObject(i, 87-sub); + cooldown = (Float) visitor2.getObject(i, 88-sub); + + this.invalidLocomotions = invalidLocomotions.toArray(new Byte[] { }); + this.invalidStates = invalidStates.toArray(new Long[] { }); + + foundCommand = true; + break; + } + } + } + + if (foundCommand) { + break; + } + } + } catch (InstantiationException | IllegalAccessException e) { + e.printStackTrace(); + } } - + public String getCommandName() { return commandName; } - + public void setCommandName(String commandName) { this.commandName = commandName; } - + public String getClientEffectSelf() { return clientEffectSelf; } - + public void setClientEffectSelf(String clientEffectSelf) { this.clientEffectSelf = clientEffectSelf; } - + public String getClientEffectTarget() { return clientEffectTarget; } - + public void setClientEffectTarget(String clientEffectTarget) { this.clientEffectTarget = clientEffectTarget; } - - public int getMaxRangeToTarget() { - return maxRangeToTarget; - } - - public void setMaxRangeToTarget(int maxRangeToTarget) { - this.maxRangeToTarget = maxRangeToTarget; - } - + public int getCommandCRC() { return commandCRC; } - + public void setCommandCRC(int commandCRC) { this.commandCRC = commandCRC; } - public Object clone() throws CloneNotSupportedException { - return super.clone(); - } - + public Object clone() throws CloneNotSupportedException { + return super.clone(); + } + + public boolean isGmCommand() { + return (godLevel > 0); + } + + public String getCharacterAbility() { + return characterAbility; + } + + public void setcharacterAbility(String characterAbility) { + this.characterAbility = characterAbility; + } + + public Byte[] getInvalidLocomotions() { + return invalidLocomotions; + } + + public Long[] getInvalidStates() { + return invalidStates; + } + + public int getTarget() { + return target; + } + + public void setTarget(int target) { + this.target = target; + } + + public int getTargetType() { + return targetType; + } + + public void setTargetType(int targetType) { + this.targetType = targetType; + } + + public boolean shouldCallOnTarget() { + return callOnTarget; + } + + public void setCallOnTarget(boolean callOnTarget) { + this.callOnTarget = callOnTarget; + } + + public int getCommandGroup() { + return commandGroup; + } + + public void setCommandGroup(int commandGroup) { + this.commandGroup = commandGroup; + } + + public boolean isDisabled() { + return disabled; + } + + public void setDisabled(boolean disabled) { + this.disabled = disabled; + } + + public float getMaxRangeToTarget() { + return maxRangeToTarget; + } + + public void setMaxRangeToTarget(float maxRangeToTarget) { + this.maxRangeToTarget = maxRangeToTarget; + } + + public int getGodLevel() { + return godLevel; + } + + public void setGodLevel(int godLevel) { + this.godLevel = godLevel; + } + + public int getDisplayGroup() { + return displayGroup; + } + + public void setDisplayGroup(int displayGroup) { + this.displayGroup = displayGroup; + } + + public boolean isCombatCommand() { + return combatCommand; + } + + public void setCombatCommand(boolean combatCommand) { + this.combatCommand = combatCommand; + } + + public int getValidWeapon() { + return validWeapon; + } + + public void setValidWeapon(int validWeapon) { + this.validWeapon = validWeapon; + } + + public int getInvalidWeapon() { + return invalidWeapon; + } + + public void setInvalidWeapon(int invalidWeapon) { + this.invalidWeapon = invalidWeapon; + } + + public String getCooldownGroup() { + return cooldownGroup; + } + + public void setCooldownGroup(String cooldownGroup) { + this.cooldownGroup = cooldownGroup; + } + + public float getCooldown() { + return cooldown; + } + + public void setCooldown(float cooldown) { + this.cooldown = cooldown; + } + + public float getExecuteTime() { + return executeTime; + } + + public void setExecuteTime(float executeTime) { + this.executeTime = executeTime; + } + + public float getWarmupTime() { + return warmupTime; + } + + public void setWarmupTime(float warmupTime) { + this.warmupTime = warmupTime; + } + } diff --git a/src/services/command/CombatCommand.java b/src/services/command/CombatCommand.java index 444d0895..dd761b02 100644 --- a/src/services/command/CombatCommand.java +++ b/src/services/command/CombatCommand.java @@ -29,20 +29,6 @@ import engine.clientdata.visitors.DatatableVisitor; public class CombatCommand extends BaseSWGCommand { - private String[] defaultAnimations = new String[]{}; - private String[] oneHandedAnimations = new String[]{}; - private String[] twoHandedAnimations = new String[]{}; - private String[] polearmAnimations = new String[]{}; - private String[] unarmedAnimations = new String[]{}; - private String[] pistolAnimations = new String[]{}; - private String[] carbineAnimations = new String[]{}; - private String[] lightRifleAnimations = new String[]{}; - private String[] rifleAnimations = new String[]{}; - private String[] heavyWpnAnimations = new String[]{}; - private String[] oneHandedLSAnimations = new String[]{}; - private String[] twoHandedLSAnimations = new String[]{}; - private String[] polearmLSAnimations = new String[]{}; - private String[] thrownAnimations = new String[]{}; private byte validTargetType; private byte hitType; private byte healType; @@ -67,17 +53,30 @@ public class CombatCommand extends BaseSWGCommand { private int damageType, elementalType, elementalValue; private String performanceSpam; private byte hitSpam; - private float cooldown; private String delayAttackEggTemplate; private String delayAttackParticle; private float initialAttackDelay; private float delayAttackInterval; private int delayAttackLoops; private int delayAttackEggPosition; - private String cooldownGroup; - private float executeTime; - private float warmupTime; private float vigorCost; // for commando kill meter and bm specials + private float criticalChance; + private int attack_rolls; + + private String[] defaultAnimations = new String[]{}; + private String[] oneHandedAnimations = new String[]{}; + private String[] twoHandedAnimations = new String[]{}; + private String[] polearmAnimations = new String[]{}; + private String[] unarmedAnimations = new String[]{}; + private String[] pistolAnimations = new String[]{}; + private String[] carbineAnimations = new String[]{}; + private String[] lightRifleAnimations = new String[]{}; + private String[] rifleAnimations = new String[]{}; + private String[] heavyWpnAnimations = new String[]{}; + private String[] oneHandedLSAnimations = new String[]{}; + private String[] twoHandedLSAnimations = new String[]{}; + private String[] polearmLSAnimations = new String[]{}; + private String[] thrownAnimations = new String[]{}; public CombatCommand(String commandName) { super(commandName); @@ -150,148 +149,21 @@ public class CombatCommand extends BaseSWGCommand { minDamage = (Integer) visitor.getObject(i, 77); maxDamage = (Integer) visitor.getObject(i, 78); maxRangeOverload = (Float) visitor.getObject(i, 79); - weaponCategory = ((Integer) visitor.getObject(i, 80)).byteValue(); - damageType = ((Integer) visitor.getObject(i, 81)).byteValue(); - elementalType = ((Integer) visitor.getObject(i, 82)).byteValue(); - elementalValue = (Integer) visitor.getObject(i, 83); + weaponCategory = ((Integer) visitor.getObject(i, 81)).byteValue(); + damageType = ((Integer) visitor.getObject(i, 82)).byteValue(); + elementalType = ((Integer) visitor.getObject(i, 83)); + elementalValue = (Integer) visitor.getObject(i, 84); performanceSpam = (String) visitor.getObject(i, 89); hitSpam = ((Integer) visitor.getObject(i, 90)).byteValue(); + attack_rolls = (Integer) visitor.getObject(i, 93); } } - - DatatableVisitor visitor2 = ClientFileManager.loadFile("datatables/command/command_table.iff", DatatableVisitor.class); - - for(int i = 0; i < visitor2.getRowCount(); i++) { - if(visitor2.getObject(i, 0) != null) { - if(((String) visitor2.getObject(i, 0)).equalsIgnoreCase(commandName)) { - - cooldownGroup = (String) visitor2.getObject(i, 85); - warmupTime = (Float) visitor2.getObject(i, 86); - executeTime = (Float) visitor2.getObject(i, 87); - cooldown = (Float) visitor2.getObject(i, 88); - - } - } - } - } catch (InstantiationException | IllegalAccessException e) { e.printStackTrace(); } } - - public String[] getDefaultAnimations() { - return defaultAnimations; - } - - public void setDefaultAnimations(String[] defaultAnimations) { - this.defaultAnimations = defaultAnimations; - } - - public String[] getOneHandedAnimations() { - return oneHandedAnimations; - } - - public void setOneHandedAnimations(String[] oneHandedAnimations) { - this.oneHandedAnimations = oneHandedAnimations; - } - - public String[] getTwoHandedAnimations() { - return twoHandedAnimations; - } - - public void setTwoHandedAnimations(String[] twoHandedAnimations) { - this.twoHandedAnimations = twoHandedAnimations; - } - - public String[] getPolearmAnimations() { - return polearmAnimations; - } - - public void setPolearmAnimations(String[] polearmAnimations) { - this.polearmAnimations = polearmAnimations; - } - - public String[] getUnarmedAnimations() { - return unarmedAnimations; - } - - public void setUnarmedAnimations(String[] unarmedAnimations) { - this.unarmedAnimations = unarmedAnimations; - } - - public String[] getPistolAnimations() { - return pistolAnimations; - } - - public void setPistolAnimations(String[] pistolAnimations) { - this.pistolAnimations = pistolAnimations; - } - - public String[] getCarbineAnimations() { - return carbineAnimations; - } - - public void setCarbineAnimations(String[] carbineAnimations) { - this.carbineAnimations = carbineAnimations; - } - - public String[] getLightRifleAnimations() { - return lightRifleAnimations; - } - - public void setLightRifleAnimations(String[] lightRifleAnimations) { - this.lightRifleAnimations = lightRifleAnimations; - } - - public String[] getRifleAnimations() { - return rifleAnimations; - } - - public void setRifleAnimations(String[] rifleAnimations) { - this.rifleAnimations = rifleAnimations; - } - - public String[] getHeavyWpnAnimations() { - return heavyWpnAnimations; - } - - public void setHeavyWpnAnimations(String[] heavyWpnAnimations) { - this.heavyWpnAnimations = heavyWpnAnimations; - } - - public String[] getOneHandedLSAnimations() { - return oneHandedLSAnimations; - } - - public void setOneHandedLSAnimations(String[] oneHandedLSAnimations) { - this.oneHandedLSAnimations = oneHandedLSAnimations; - } - - public String[] getTwoHandedLSAnimations() { - return twoHandedLSAnimations; - } - - public void setTwoHandedLSAnimations(String[] twoHandedLSAnimations) { - this.twoHandedLSAnimations = twoHandedLSAnimations; - } - - public String[] getPolearmLSAnimations() { - return polearmLSAnimations; - } - - public void setPolearmLSAnimations(String[] polearmLSAnimations) { - this.polearmLSAnimations = polearmLSAnimations; - } - - public String[] getThrownAnimations() { - return thrownAnimations; - } - - public void setThrownAnimations(String[] thrownAnimations) { - this.thrownAnimations = thrownAnimations; - } - + public byte getValidTargetType() { return validTargetType; } @@ -380,7 +252,7 @@ public class CombatCommand extends BaseSWGCommand { this.percentFromWeapon = percentFromWeapon; } - public float isBypassArmor() { + public float getBypassArmor() { return bypassArmor; } @@ -483,7 +355,7 @@ public class CombatCommand extends BaseSWGCommand { public void setCanBePunishing(boolean canBePunishing) { this.canBePunishing = canBePunishing; } - + public int getMinDamage() { return minDamage; } @@ -563,69 +435,7 @@ public class CombatCommand extends BaseSWGCommand { public void setHitSpam(byte hitSpam) { this.hitSpam = hitSpam; } - - public String getRandomAnimation(WeaponObject weapon) { - - int weaponType = weapon.getWeaponType(); - String[] animations; - - switch(weaponType) { - - case 0: - animations = rifleAnimations; - break; - case 1: - animations = carbineAnimations; - break; - case 2: - animations = pistolAnimations; - break; - case 3: - animations = heavyWpnAnimations; - break; - case 4: - animations = oneHandedAnimations; - break; - case 5: - animations = twoHandedAnimations; - break; - case 6: - animations = unarmedAnimations; - break; - case 7: - animations = polearmAnimations; - break; - case 8: - animations = thrownAnimations; - break; - case 9: - animations = oneHandedLSAnimations; - break; - case 10: - animations = twoHandedLSAnimations; - break; - case 11: - animations = polearmLSAnimations; - break; - - default: - animations = unarmedAnimations; - break; - - } - - return animations[new Random().nextInt(animations.length)]; - - } - - public float getCooldown() { - return cooldown; - } - - public void setCooldown(float cooldown) { - this.cooldown = cooldown; - } - + public String getDelayAttackEggTemplate() { return delayAttackEggTemplate; } @@ -674,30 +484,6 @@ public class CombatCommand extends BaseSWGCommand { this.delayAttackLoops = delayAttackLoops; } - public String getCooldownGroup() { - return cooldownGroup; - } - - public void setCooldownGroup(String cooldownGroup) { - this.cooldownGroup = cooldownGroup; - } - - public float getExecuteTime() { - return executeTime; - } - - public void setExecuteTime(float executeTime) { - this.executeTime = executeTime; - } - - public float getWarmupTime() { - return warmupTime; - } - - public void setWarmupTime(float warmupTime) { - this.warmupTime = warmupTime; - } - public float getVigorCost() { return vigorCost; } @@ -705,7 +491,186 @@ public class CombatCommand extends BaseSWGCommand { public void setVigorCost(float vigorCost) { this.vigorCost = vigorCost; } - - + public float getCriticalChance() { + return criticalChance; + } + + public void setCriticalChance(float criticalChance) { + this.criticalChance = criticalChance; + } + + public int getAttack_rolls() { + return attack_rolls; + } + + public void setAttack_rolls(int attack_rolls) { + this.attack_rolls = attack_rolls; + } + + public String[] getDefaultAnimations() { + return defaultAnimations; + } + + public void setDefaultAnimations(String[] defaultAnimations) { + this.defaultAnimations = defaultAnimations; + } + + public String[] getOneHandedAnimations() { + return oneHandedAnimations; + } + + public void setOneHandedAnimations(String[] oneHandedAnimations) { + this.oneHandedAnimations = oneHandedAnimations; + } + + public String[] getTwoHandedAnimations() { + return twoHandedAnimations; + } + + public void setTwoHandedAnimations(String[] twoHandedAnimations) { + this.twoHandedAnimations = twoHandedAnimations; + } + + public String[] getPolearmAnimations() { + return polearmAnimations; + } + + public void setPolearmAnimations(String[] polearmAnimations) { + this.polearmAnimations = polearmAnimations; + } + + public String[] getUnarmedAnimations() { + return unarmedAnimations; + } + + public void setUnarmedAnimations(String[] unarmedAnimations) { + this.unarmedAnimations = unarmedAnimations; + } + + public String[] getPistolAnimations() { + return pistolAnimations; + } + + public void setPistolAnimations(String[] pistolAnimations) { + this.pistolAnimations = pistolAnimations; + } + + public String[] getCarbineAnimations() { + return carbineAnimations; + } + + public void setCarbineAnimations(String[] carbineAnimations) { + this.carbineAnimations = carbineAnimations; + } + + public String[] getLightRifleAnimations() { + return lightRifleAnimations; + } + + public void setLightRifleAnimations(String[] lightRifleAnimations) { + this.lightRifleAnimations = lightRifleAnimations; + } + + public String[] getRifleAnimations() { + return rifleAnimations; + } + + public void setRifleAnimations(String[] rifleAnimations) { + this.rifleAnimations = rifleAnimations; + } + + public String[] getHeavyWpnAnimations() { + return heavyWpnAnimations; + } + + public void setHeavyWpnAnimations(String[] heavyWpnAnimations) { + this.heavyWpnAnimations = heavyWpnAnimations; + } + + public String[] getOneHandedLSAnimations() { + return oneHandedLSAnimations; + } + + public void setOneHandedLSAnimations(String[] oneHandedLSAnimations) { + this.oneHandedLSAnimations = oneHandedLSAnimations; + } + + public String[] getTwoHandedLSAnimations() { + return twoHandedLSAnimations; + } + + public void setTwoHandedLSAnimations(String[] twoHandedLSAnimations) { + this.twoHandedLSAnimations = twoHandedLSAnimations; + } + + public String[] getPolearmLSAnimations() { + return polearmLSAnimations; + } + + public void setPolearmLSAnimations(String[] polearmLSAnimations) { + this.polearmLSAnimations = polearmLSAnimations; + } + + public String[] getThrownAnimations() { + return thrownAnimations; + } + + public void setThrownAnimations(String[] thrownAnimations) { + this.thrownAnimations = thrownAnimations; + } + + public String getRandomAnimation(WeaponObject weapon) { + int weaponType = weapon.getWeaponType(); + String[] animations; + + switch (weaponType) { + case 0: + animations = rifleAnimations; + break; + case 1: + animations = carbineAnimations; + break; + case 2: + animations = pistolAnimations; + break; + case 3: + animations = heavyWpnAnimations; + break; + case 4: + animations = oneHandedAnimations; + break; + case 5: + animations = twoHandedAnimations; + break; + case 6: + animations = defaultAnimations; + break; + case 7: + animations = polearmAnimations; + break; + case 8: + animations = thrownAnimations; + break; + case 9: + animations = oneHandedLSAnimations; + break; + case 10: + animations = twoHandedLSAnimations; + break; + case 11: + animations = polearmLSAnimations; + break; + default: + animations = defaultAnimations; + break; + } + + if (animations.length == 0) { + animations = defaultAnimations; + } + + return animations[new Random().nextInt(animations.length)]; + } + } diff --git a/src/services/command/CommandService.java b/src/services/command/CommandService.java index 9d8a4487..b7359d8f 100644 --- a/src/services/command/CommandService.java +++ b/src/services/command/CommandService.java @@ -21,28 +21,34 @@ ******************************************************************************/ package services.command; +import java.io.UnsupportedEncodingException; import java.nio.ByteOrder; import java.util.Map; import java.util.Vector; +import java.util.concurrent.ConcurrentHashMap; +import java.util.concurrent.Executors; +import java.util.concurrent.ScheduledExecutorService; + import main.NGECore; import org.apache.mina.core.buffer.IoBuffer; import org.apache.mina.core.session.IoSession; +import engine.clientdata.ClientFileManager; +import engine.clientdata.visitors.DatatableVisitor; import engine.clients.Client; import engine.resources.common.CRC; +import engine.resources.common.RGB; import engine.resources.objects.SWGObject; import engine.resources.scene.Point3D; import engine.resources.service.INetworkDispatch; import engine.resources.service.INetworkRemoteEvent; import resources.common.*; - import protocol.swg.ObjControllerMessage; import protocol.swg.objectControllerObjects.CommandEnqueue; import protocol.swg.objectControllerObjects.CommandEnqueueRemove; -import protocol.swg.objectControllerObjects.ShowFlyText; import protocol.swg.objectControllerObjects.StartTask; - +import resources.objects.cell.CellObject; import resources.objects.creature.CreatureObject; import resources.objects.tangible.TangibleObject; import resources.objects.weapon.WeaponObject; @@ -50,124 +56,410 @@ import resources.objects.weapon.WeaponObject; public class CommandService implements INetworkDispatch { private Vector commandLookup = new Vector(); + private ConcurrentHashMap aliases = new ConcurrentHashMap(); + @SuppressWarnings("unused") private final ScheduledExecutorService scheduler = Executors.newScheduledThreadPool(1); private NGECore core; public CommandService(NGECore core) { this.core = core; } - - - @Override - public void insertOpcodes(Map swgOpcodes, Map objControllerOpcodes) { - - objControllerOpcodes.put(ObjControllerOpcodes.COMMAND_QUEUE_ENQUEUE, new INetworkRemoteEvent() { - - @Override - public void handlePacket(IoSession session, IoBuffer data) throws Exception { - - data.order(ByteOrder.LITTLE_ENDIAN); - Client client = core.getClient((Integer) session.getAttribute("connectionId")); - - if(client == null) { - System.out.println("NULL Client"); - return; - } - - CommandEnqueue commandEnqueue = new CommandEnqueue(); - commandEnqueue.deserialize(data); - - - BaseSWGCommand command = getCommandByCRC(commandEnqueue.getCommandCRC()); - - if(command == null) { - //System.out.println("Unknown Command CRC: " + commandEnqueue.getCommandCRC()); - return; - } - - // TODO: command filters for state, posture etc. - - if(client.getParent() == null) { - System.out.println("NULL Object"); - return; - } - - CreatureObject actor = (CreatureObject) client.getParent(); - - SWGObject target = core.objectService.getObject(commandEnqueue.getTargetID()); - - if(command instanceof CombatCommand) { - CombatCommand command2 = (CombatCommand) command.clone(); - processCombatCommand(actor, target, command2, commandEnqueue.getActionCounter(), commandEnqueue.getCommandArguments()); - return; - } - - core.scriptService.callScript("scripts/commands/", command.getCommandName(), "run", core, actor, target, commandEnqueue.getCommandArguments()); - - } - - }); - - + + public void registerAlias(String name, String target) { + aliases.put(CRC.StringtoCRC(name.toLowerCase()), CRC.StringtoCRC(target.toLowerCase())); } - public BaseSWGCommand registerCommand(String name) { - - BaseSWGCommand command = new BaseSWGCommand(name.toLowerCase()); - commandLookup.add(command); - return command; - - } - - public CombatCommand registerCombatCommand(String name) { - - CombatCommand command = new CombatCommand(name.toLowerCase()); - commandLookup.add(command); - return command; - - } - - public BaseSWGCommand getCommandByCRC(int CRC) { - - Vector commands = new Vector(commandLookup); // copy for thread safety - - for(BaseSWGCommand command : commands) { - if(command.getCommandCRC() == CRC) - return command; + public boolean callCommand(CreatureObject actor, SWGObject target, BaseSWGCommand command, int actionCounter, String commandArgs) { + if (actor == null) { + return false; } - return null; + + if (command == null) { + return false; + } + + if (command.getCharacterAbility().length() > 0 && !actor.hasAbility(command.getCharacterAbility()) && actor.getClient() != null) { + return false; + } + + if (command.isDisabled()) { + return false; + } + + if (actor.getClient() != null && command.getGodLevel() > actor.getPlayerObject().getGodLevel()) { + return false; + } + + if (actor.hasCooldown(command.getCooldownGroup()) || actor.hasCooldown(command.getCommandName())) { + return false; + } + + TangibleObject weapon = (TangibleObject) core.objectService.getObject(actor.getWeaponId()); + + if (weapon != null && weapon instanceof WeaponObject && ((WeaponObject) weapon).getWeaponType() == command.getInvalidWeapon()) { + return false; + } + + for (long state : command.getInvalidStates()) { + if ((actor.getStateBitmask() & state) == state) { + //return false; + } + } + + for (byte locomotion : command.getInvalidLocomotions()) { + if (actor.getLocomotion() == locomotion) { + return false; + } + } + + switch (command.getTargetType()) { + case 0: // Target Not Used For This Command + break; + case 1: // Other Only (objectId/targetName) + if (target == null) { + if (commandArgs != null && !commandArgs.equals("")) { + String name = commandArgs.split(" ")[0]; + + target = core.objectService.getObjectByFirstName(name); + + if (target == actor) { + target = null; + } + } + + break; + } + + if (target == actor) { + return false; + } + + if (target.getContainer() == actor || target.getGrandparent() == actor) { + break; + } + + if (command.getMaxRangeToTarget() != 0 && actor.getPosition().getDistance(target.getPosition()) > command.getMaxRangeToTarget()) { + return false; + } + + if (!target.isInQuadtree() && (target.getContainer() == null || !(target.getContainer() instanceof CellObject))) { + break; + } + + if (!core.simulationService.checkLineOfSight(actor, target)) { + actor.showFlyText("@combat_effects:cant_see", 1.5f, new RGB(72, 209, 204), 1, true); + return false; + } + + break; + case 2: // Anyone (objectId/targetName) + if (target == null) { + if (commandArgs != null && !commandArgs.equals("")) { + String name = commandArgs.split(" ")[0]; + + target = core.objectService.getObjectByFirstName(name); + + if (target == actor) { + target = null; + } + + // It's possible they use c cmdString to indicate if it should always be on self + if (name.contains("c")) { + //target = actor; + } + } + + break; + } + + if (target.getContainer() == actor || target.getGrandparent() == actor) { + break; + } + + if (command.getMaxRangeToTarget() != 0 && actor.getPosition().getDistance(target.getPosition()) > command.getMaxRangeToTarget()) { + return false; + } + + if (!target.isInQuadtree() && (target.getContainer() == null || !(target.getContainer() instanceof CellObject))) { + break; + } + + if (!core.simulationService.checkLineOfSight(actor, target)) { + actor.showFlyText("@combat_effects:cant_see", 1.5f, new RGB(72, 209, 204), 1, true); + return false; + } + + break; + case 3: // Free Target Mode (rally points, group waypoints) + target = null; + + if (commandArgs == null) { + break; + } + + String[] args = commandArgs.split(" "); + + float x = 0, y = 0, z = 0; + + try { + if (args.length == 2) { + x = Integer.valueOf(args[0]); + z = Integer.valueOf(args[1]); + } else if (args.length > 2) { + x = Integer.valueOf(args[0]); + y = Integer.valueOf(args[1]); + z = Integer.valueOf(args[2]); + } else { + return false; + } + } catch (NumberFormatException e) { + return false; + } + + Point3D position = new Point3D(x, y, z); + + if (command.getMaxRangeToTarget() != 0 && actor.getPosition().getDistance(position) > command.getMaxRangeToTarget()) { + return false; + } + + break; + case 4: // Any object + if (target == null) { + break; + } + + if (command.getMaxRangeToTarget() != 0 && actor.getPosition().getDistance(target.getPosition()) > command.getMaxRangeToTarget()) { + return false; + } + + if (!target.isInQuadtree() && (target.getContainer() == null || !(target.getContainer() instanceof CellObject))) { + break; + } + + if (!core.simulationService.checkLineOfSight(actor, target)) { + actor.showFlyText("@combat_effects:cant_see", 1.5f, new RGB(72, 209, 204), 1, true); + return false; + } + + break; + default: + break; + } + + switch (command.getTarget()) { + case 0: // Ally Only + if (target == null) { + target = actor; + } + + if (!(target instanceof TangibleObject)) { + return false; + } + + TangibleObject object = (TangibleObject) target; + + if (!object.getFaction().equals("") && !object.getFaction().equals(actor.getFaction())) { + return false; + } + + if (actor.getFactionStatus() < object.getFactionStatus()) { + return false; + } + + if (object.isAttackableBy(actor)) { + return false; + } + + // Without this we could be buffing ally NPCs and such + // Think this is checked later on + if (actor.getSlottedObject("ghost") != null && object.getSlottedObject("ghost") == null) { + return false; + } + + break; + case 1: // Enemy Only + if (target == null || !(target instanceof TangibleObject)) { + return false; + } + + TangibleObject targetObject = (TangibleObject) target; + + if (!targetObject.isAttackableBy(actor)) { + return false; + } + + break; + case 2: // Indifferent + break; + default: + break; + } + + if (command.shouldCallOnTarget()) { + if (target == null || !(target instanceof CreatureObject)) { + return false; + } + + actor = (CreatureObject) target; + } + + long warmupTime = (long) (command.getWarmupTime() * 1000f); + + if(warmupTime > 0) { + try { + Thread.sleep(warmupTime); + } catch (InterruptedException e) { + e.printStackTrace(); + } + } + + if(command instanceof CombatCommand) { + try { + processCommand(actor, target, (BaseSWGCommand) command.clone(), actionCounter, commandArgs); + } catch (CloneNotSupportedException e) { + e.printStackTrace(); + } + } + else + processCommand(actor, target, command, actionCounter, commandArgs); + + + return true; + } + + public void callCommand(SWGObject actor, String commandName, SWGObject target, String commandArgs) { + callCommand((CreatureObject) actor, target, getCommandByName(commandName), 0, commandArgs); + } + + public BaseSWGCommand getCommandByCRC(int commandCRC) { + Vector commands = new Vector(commandLookup); + + for (BaseSWGCommand command : commands) { + if (command.getCommandCRC() == commandCRC) { + return command; + } + } + + try { + String[] tableArray = new String[] { + "client_command_table", "command_table", "client_command_table_ground", "command_table_ground", + "client_command_table_space", "command_table_space" }; + + for (int n = 0; n < tableArray.length; n++) { + DatatableVisitor visitor = ClientFileManager.loadFile("datatables/command/" + tableArray[n] + ".iff", DatatableVisitor.class); + + for (int i = 0; i < visitor.getRowCount(); i++) { + if (visitor.getObject(i, 0) != null) { + String name = ((String) visitor.getObject(i, 0)).toLowerCase(); + + if (CRC.StringtoCRC(name) == commandCRC) { + if (isCombatCommand(name)) { + CombatCommand command = new CombatCommand(name.toLowerCase()); + commandLookup.add(command); + return command; + } else { + BaseSWGCommand command = new BaseSWGCommand(name.toLowerCase()); + commandLookup.add(command); + return command; + } + } + } + } + } + } catch (InstantiationException | IllegalAccessException e) { + e.printStackTrace(); + } + + return null; } public BaseSWGCommand getCommandByName(String name) { + Vector commands = new Vector(commandLookup); - Vector commands = new Vector(commandLookup); // copy for thread safety + name = name.toLowerCase(); - for(BaseSWGCommand command : commands) { - if(command.getCommandName().equalsIgnoreCase(name)) + for (BaseSWGCommand command : commands) { + if (command.getCommandName().equalsIgnoreCase(name)) { return command; + } } + + try { + String[] tableArray = new String[] { + "client_command_table", "command_table", "client_command_table_ground", "command_table_ground", + "client_command_table_space", "command_table_space" }; + + for (int n = 0; n < tableArray.length; n++) { + DatatableVisitor visitor = ClientFileManager.loadFile("datatables/command/" + tableArray[n] + ".iff", DatatableVisitor.class); + + for (int i = 0; i < visitor.getRowCount(); i++) { + if (visitor.getObject(i, 0) != null) { + String commandName = ((String) visitor.getObject(i, 0)).toLowerCase(); + + if (commandName.equalsIgnoreCase(name)) { + if (isCombatCommand(commandName)) { + CombatCommand command = new CombatCommand(commandName); + commandLookup.add(command); + return command; + } else { + BaseSWGCommand command = new BaseSWGCommand(commandName); + commandLookup.add(command); + return command; + } + } + } + } + } + } catch (InstantiationException | IllegalAccessException e) { + e.printStackTrace(); + } + return null; - + } + + public boolean isCombatCommand(String commandName) { + try { + DatatableVisitor visitor = ClientFileManager.loadFile("datatables/combat/combat_data.iff", DatatableVisitor.class); + + for (int i = 0; i < visitor.getRowCount(); i++) { + if (visitor.getObject(i, 0) != null && ((String) (visitor.getObject(i, 0))).equalsIgnoreCase(commandName)) { + return true; + } + } + } catch (Exception e) { + e.printStackTrace(); + } + + return false; + } + + public void processCommand(CreatureObject actor, SWGObject target, BaseSWGCommand command, int actionCounter, String commandArgs) { + if (command.getCooldown() > 0f) { + actor.addCooldown(command.getCooldownGroup(), command.getCooldown()); + } + + if (command instanceof CombatCommand) { + processCombatCommand(actor, target, (CombatCommand) command, actionCounter, commandArgs); + } else { + if (FileUtilities.doesFileExist("scripts/commands/" + command.getCommandName().toLowerCase() + ".py")) { + core.scriptService.callScript("scripts/commands/", command.getCommandName().toLowerCase(), "run", core, actor, target, commandArgs); + } else if (FileUtilities.doesFileExist("scripts/commands/combat/" + command.getCommandName().toLowerCase() + ".py")) { + core.scriptService.callScript("scripts/commands/combat/", command.getCommandName().toLowerCase(), "run", core, actor, target, commandArgs); + } + } } public void processCombatCommand(CreatureObject attacker, SWGObject target, CombatCommand command, int actionCounter, String commandArgs) { - - // Check if the person has access to this ability. - // Abilities (inc expertise ones) are added automatically as they level - // by reading the datatables. - if (!attacker.hasAbility(command.getCommandName())) { - return; - } - - if(FileUtilities.doesFileExist("scripts/commands/combat/" + command.getCommandName() + ".py")) + if (FileUtilities.doesFileExist("scripts/commands/combat/" + command.getCommandName() + ".py")) { core.scriptService.callScript("scripts/commands/combat/", command.getCommandName(), "setup", core, attacker, target, command); + } boolean success = true; //if((command.getHitType() == 5 || command.getHitType() == 7) && !(target instanceof CreatureObject)) // success = false; - if(!(command.getAttackType() == 2) && !(command.getHitType() == 5)) { + if(!(command.getAttackType() == 2) && !(command.getHitType() == 5) && !(command.getHitType() == 0)) { if(target == null || !(target instanceof TangibleObject) || target == attacker) success = false; } else { @@ -219,15 +511,11 @@ public class CommandService implements INetworkDispatch { if(target != attacker && success && !core.simulationService.checkLineOfSight(attacker, target)) { - - ShowFlyText los = new ShowFlyText(attacker.getObjectID(), attacker.getObjectID(), "combat_effects", "cant_see", (float) 1.5, new RGB(72, 209, 204), 1); - ObjControllerMessage objController = new ObjControllerMessage(0x1B, los); - attacker.getClient().getSession().write(objController.serialize()); + attacker.showFlyText("@combat_effects:cant_see", 1.5f, new RGB(72, 209, 204), 1, true); success = false; - } - if(!success) { + if(!success && attacker.getClient() != null) { IoSession session = attacker.getClient().getSession(); CommandEnqueueRemove commandRemove = new CommandEnqueueRemove(attacker.getObjectId(), actionCounter); session.write(new ObjControllerMessage(0x0B, commandRemove).serialize()); @@ -244,29 +532,237 @@ public class CommandService implements INetworkDispatch { core.combatService.doRevive(attacker, (CreatureObject) target, weapon, command, actionCounter); return; } - - core.combatService.doCombat(attacker, (TangibleObject) target, weapon, command, actionCounter); + + if(command.getHitType() == 0 && command.getBuffNameSelf() != null && command.getBuffNameSelf().length() > 0) { + core.combatService.doSelfBuff(attacker, weapon, command, actionCounter); + return; + } + for(int i = 0 ; i < command.getAttack_rolls(); i++) { + core.combatService.doCombat(attacker, (TangibleObject) target, weapon, command, actionCounter); + } + } } - - public void callCommand(CreatureObject actor, String commandName, SWGObject target, String commandArgs) { - if (actor == null) + + public void removeCommand(CreatureObject actor, int actionCounter, BaseSWGCommand command) { + if (actor == null || actor.getClient() == null || command == null) { return; + } - BaseSWGCommand command = getCommandByName(commandName); - - if (command == null) - return; - - core.scriptService.callScript("scripts/commands/", command.getCommandName(), "run", core, actor, target, commandArgs); - System.out.println("Script called."); + actor.getClient().getSession().write(new ObjControllerMessage(0x0B, new CommandEnqueueRemove(actor.getObjectId(), actionCounter)).serialize()); + actor.removeCooldown(actionCounter, command); } @Override - public void shutdown() { - // TODO Auto-generated method stub + @SuppressWarnings("unused") + public void insertOpcodes(Map swgOpcodes, Map objControllerOpcodes) { + + objControllerOpcodes.put(ObjControllerOpcodes.COMMAND_QUEUE_ENQUEUE, new INetworkRemoteEvent() { + + @Override + public void handlePacket(IoSession session, IoBuffer data) throws Exception { + data.order(ByteOrder.LITTLE_ENDIAN); + Client client = core.getClient(session); + + if (client == null) { + System.out.println("NULL Client"); + return; + } + + CommandEnqueue commandEnqueue = new CommandEnqueue(); + commandEnqueue.deserialize(data); + + int commandCRC = commandEnqueue.getCommandCRC(); + + if (aliases.containsKey(commandEnqueue.getCommandCRC())) { + commandCRC = aliases.get(commandCRC); + } + + BaseSWGCommand command = getCommandByCRC(commandCRC); + + if (command == null) { + //System.out.println("Unknown Command CRC: " + commandEnqueue.getCommandCRC()); + return; + } + + if (client.getParent() == null) { + System.out.println("NULL Object"); + return; + } + + CreatureObject actor = (CreatureObject) client.getParent(); + + SWGObject target = core.objectService.getObject(commandEnqueue.getTargetID()); + + if (!callCommand(actor, target, command, commandEnqueue.getActionCounter(), commandEnqueue.getCommandArguments())) { + // Call failScriptHook + removeCommand(actor, commandEnqueue.getActionCounter(), command); + } + } + + }); + + objControllerOpcodes.put(ObjControllerOpcodes.COMMAND_QUEUE_REMOVE, new INetworkRemoteEvent() { + + @Override + public void handlePacket(IoSession session, IoBuffer data) throws Exception { + + } + + }); + + objControllerOpcodes.put(ObjControllerOpcodes.CRAFT_FILLSLOT, new INetworkRemoteEvent() { + + @Override + public void handlePacket(IoSession session, IoBuffer data) throws Exception { + + data.order(ByteOrder.LITTLE_ENDIAN); + Client client = core.getClient(session); + + if(client == null) { + System.out.println("NULL Client"); + return; + } + + CommandEnqueue commandEnqueue = new CommandEnqueue(); + CreatureObject actor = (CreatureObject) client.getParent(); + SWGObject target = core.objectService.getObject(commandEnqueue.getTargetID()); + +// StringBuilder sb = new StringBuilder(); +// for (byte b : data.array()) { +// sb.append(String.format("%02X ", b)); +// } +// System.out.println(sb.toString()); + +// 05 00 46 5E CE 80 83 00 00 00 07 01 00 00 72 14 +// 09 00 00 00 00 00 00 00 00 00 04 2A 09 00 00 00 +// 00 00 01 00 00 00 00 00 00 00 04 00 00 00 00 00 +// 00 00 00 00 00 00 00 00 00 00 00 00 + + long playerId = data.getLong(); + data.getInt(); // 00 00 00 00 + long ingredientId = data.getLong(); + int slotNumber = data.getInt(); + int option = data.getInt(); + byte sequence = data.get(); +//core.craftingService.handleCraftFillSlot(playerId, ingredientId, slotNumber, option, sequence); + } + }); + + objControllerOpcodes.put(ObjControllerOpcodes.CRAFT_EMPTYSLOT, new INetworkRemoteEvent() { + + @Override + public void handlePacket(IoSession session, IoBuffer data) throws Exception { + + data.order(ByteOrder.LITTLE_ENDIAN); + Client client = core.getClient(session); + + if(client == null) { + System.out.println("NULL Client"); + return; + } + + CommandEnqueue commandEnqueue = new CommandEnqueue(); + CreatureObject actor = (CreatureObject) client.getParent(); + SWGObject target = core.objectService.getObject(commandEnqueue.getTargetID()); + + long playerId = data.getLong(); + data.getInt(); // 00 00 00 00 + int slotNumber = data.getInt(); + long ingredientId = data.getLong(); + byte sequence = data.get(); +//core.craftingService.handleCraftEmptySlot(playerId, ingredientId, slotNumber, sequence); + } + + }); + + + objControllerOpcodes.put(ObjControllerOpcodes.CRAFT_CUSTOMIZATION, new INetworkRemoteEvent() { + @Override + public void handlePacket(IoSession session, IoBuffer data) throws Exception { + data.order(ByteOrder.LITTLE_ENDIAN); + Client client = core.getClient(session); + if(client == null) { + System.out.println("NULL Client"); + return; + } + + long playerId = data.getLong(); + data.getInt(); // 00 00 00 00 UTF-16LE + + String enteredName = ""; + int length = 2*data.order(ByteOrder.LITTLE_ENDIAN).getInt(); + int bufferPosition = data.position(); + try + { + enteredName = new String(data.array(), bufferPosition, length, "UTF-16LE"); + } + catch (UnsupportedEncodingException e) + { + System.err.println("UnsupportedEncodingException while reading crafting customization name "); + } + + System.err.println("enteredName " + enteredName); + data.position(bufferPosition + length); + + byte modelNumber = data.get(); + int schematicQuantity = data.getInt(); + byte customizationList = data.get(); + for (int i=0;i<(int)customizationList;i++){ + int customizationSlot = data.getInt(); + int customizationValue = data.getInt(); + } + +//core.craftingService.handleCraftCustomization(playerId,enteredName,modelNumber,schematicQuantity,customizationList); + } + + }); + +// 05 00 46 5E CE 80 83 00 00 00 5A 01 00 00 75 59 +// 0F 00 00 00 00 00 00 00 00 00 1D 00 00 00 63 00 +// 72 00 61 00 66 00 74 00 69 00 6E 00 67 00 3A 00 +// 5B 00 65 00 78 00 6F 00 5F 00 70 00 72 00 6F 00 +// 74 00 65 00 69 00 6E 00 5F 00 77 00 61 00 66 00 +// 65 00 72 00 73 00 5D 00 FF E8 03 00 00 00 00 00 +// 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +// 00 00 00 00 00 00 00 00 00 00 00 00 + +// USTRING: CustomName +// BYTE: ModelNumber +// INT: SchematicQuantity +// BYTE: CustomizationList +// { +// INT: CustomizationSlot +// INT: CustomizationValue +// } + } - + + public void shutdown() { + + } + + public BaseSWGCommand registerCommand(String name) { + return getCommandByName(name); + } + + public CombatCommand registerCombatCommand(String name) { + BaseSWGCommand command = getCommandByName(name); + + if (command instanceof CombatCommand) { + return (CombatCommand) command; + } + + return null; + } + + public BaseSWGCommand registerGmCommand(String name) { + BaseSWGCommand command = getCommandByName(name); + //if(command != null) + //command.setGodLevel(5); // not sure if still needed after more recent commits + return command; + } + } diff --git a/src/services/equipment/BonusSetTemplate.java b/src/services/equipment/BonusSetTemplate.java new file mode 100644 index 00000000..f712c290 --- /dev/null +++ b/src/services/equipment/BonusSetTemplate.java @@ -0,0 +1,73 @@ +/******************************************************************************* + * Copyright (c) 2013 + * + * This File is part of NGECore2. + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see . + * + * Using NGEngine to work with NGECore2 is making a combined work based on NGEngine. + * Therefore all terms and conditions of the GNU Lesser General Public License cover the combination. + ******************************************************************************/ +package services.equipment; + +import java.util.Vector; + +import main.NGECore; + +import org.python.core.Py; +import org.python.core.PyObject; + +import engine.resources.objects.SWGObject; +import resources.objects.creature.CreatureObject; + +public class BonusSetTemplate +{ + private String name; + private Vector requiredWornItems; + + public BonusSetTemplate(String name) + { + this.name = name; + this.requiredWornItems = new Vector(); + } + + public void addRequiredItem(String item) + { + requiredWornItems.add(item); + } + + public String getName() + { + return this.name; + } + + public int getWornTemplateCount(CreatureObject creature) + { + int wornItems = 0; + for (Long itemId : creature.getEquipmentList().get()) + { + SWGObject item = NGECore.getInstance().objectService.getObject(itemId); + if(item == null) + continue; + if(requiredWornItems.contains(item.getTemplate()) || requiredWornItems.contains(item.getStfName())) wornItems++; + } + return wornItems; + } + + public void callScript(CreatureObject creature) + { + PyObject func = NGECore.getInstance().scriptService.getMethod("scripts/equipment/bonus_sets/", name, "handleChange"); + if(func != null) func.__call__(Py.java2py(NGECore.getInstance()), Py.java2py(creature), Py.java2py(this)); + } +} diff --git a/src/services/equipment/EquipmentService.java b/src/services/equipment/EquipmentService.java new file mode 100644 index 00000000..8b16291f --- /dev/null +++ b/src/services/equipment/EquipmentService.java @@ -0,0 +1,465 @@ +/******************************************************************************* + * Copyright (c) 2013 + * + * This File is part of NGECore2. + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see . + * + * Using NGEngine to work with NGECore2 is making a combined work based on NGEngine. + * Therefore all terms and conditions of the GNU Lesser General Public License cover the combination. + ******************************************************************************/ +package services.equipment; + +import java.io.IOException; +import java.nio.file.FileVisitResult; +import java.nio.file.FileVisitor; +import java.nio.file.Files; +import java.nio.file.Path; +import java.nio.file.Paths; +import java.nio.file.SimpleFileVisitor; +import java.nio.file.attribute.BasicFileAttributes; +import java.util.ArrayList; +import java.util.Map; +import java.util.Map.Entry; +import java.util.concurrent.ConcurrentHashMap; +import java.util.TreeMap; + +import org.python.core.Py; +import org.python.core.PyObject; + +import resources.datatables.FactionStatus; +import resources.objects.creature.CreatureObject; +import main.NGECore; +import engine.resources.container.Traverser; +import engine.resources.objects.SWGObject; +import engine.resources.service.INetworkDispatch; +import engine.resources.service.INetworkRemoteEvent; +import resources.objects.player.PlayerObject; +import resources.objects.tangible.TangibleObject; +import resources.objects.weapon.WeaponObject; + +public class EquipmentService implements INetworkDispatch { + + private NGECore core; + private Map bonusSetTemplates = new ConcurrentHashMap(); + + public EquipmentService(NGECore core) { + this.core = core; + } + + @Override + public void insertOpcodes(Map arg0, Map arg1) { + + } + + @Override + public void shutdown() { + + } + + + /* + Returns an array; + [0] = boolean, whether or not the item may be equipped; + [1] = string, in case of failure, why + */ + public Object[] canEquip(CreatureObject actor, SWGObject item) { + // TODO: Species restrictions + // TODO: Gender restrictions + + boolean result = true; + String message = ""; + + if (item == null) + { + result = false; + message = "null_item"; + return new Object[] { result, message }; + } + + if (item.getAttributes().toString().contains("cat_armor")) + { + if (actor.hasAbility("wear_all_armor")) result = true; + else + { + result = false; + message = "@error_message:insufficient_skill"; // I am unsure if this is the right message + return new Object[] { result, message }; + } + } + + if (item.getStringAttribute("class_required") != null) + { + String classRequired = item.getStringAttribute("class_required"); + String profession = ((PlayerObject) actor.getSlottedObject("ghost")).getProfession(); + + if (classRequired.contains(core.playerService.getFormalProfessionName(profession)) || classRequired.equals("None")) result = true; + else + { + result = false; + message = "@error_message:insufficient_skill"; // I am unsure if this is the right message + return new Object[] { result, message }; + } + } + + if (item.getStringAttribute("faction_restriction") != null) + { + if (item.getStringAttribute("faction_restriction").toLowerCase().contentEquals(actor.getFaction()) && actor.getFactionStatus() >= FactionStatus.Combatant) result = true; + else + { + result = false; + message = "@faction_recruiter:must_be_faction_member_use"; // will have to somehow manage prose %TO for faction name + return new Object[] { result, message }; + } + } + + if (item.getAttributes().containsKey("required_combat_level")) + { + if (actor.getLevel() >= item.getIntAttribute("required_combat_level")) result = true; + else + { + result = false; + message = "@error_message:insufficient_skill"; // I am unsure if this is the right message + return new Object[] { result, message }; + } + } + + if(item.getAttachment("unity") != null) + { + result = false; + message = "@unity:cannot_remove_ring"; + return new Object[] { result, message }; + } + + if(item.getTemplate().startsWith("object/weapon/") && item.getTemplate().contains("lightsaber") && item.getAttachment("hasColorCrystal") == null) item.setAttachment("hasColorCrystal", false); + + if(item.getAttachment("hasColorCrystal") != null && (Boolean) item.getAttachment("hasColorCrystal") == false) + { + result = false; + message = "@jedi_spam:lightsaber_no_color"; + return new Object[] { result, message }; + } + + result = true; + message = "success"; + return new Object[] { result, message }; + } + + public void equip(CreatureObject actor, SWGObject item) + { + String template = ((item.getAttachment("customServerTemplate") == null) ? item.getTemplate() : (item.getTemplate().split("shared_")[0] + "shared_" + ((String) item.getAttachment("customServerTemplate")) + ".iff")); + String serverTemplate = template.replace(".iff", ""); + + PyObject func = core.scriptService.getMethod("scripts/" + serverTemplate.split("shared_" , 2)[0].replace("shared_", ""), serverTemplate.split("shared_" , 2)[1], "equip"); + if(func != null) func.__call__(Py.java2py(core), Py.java2py(actor), Py.java2py(item)); + + // TODO: bio-link (assign it by objectID with setAttachment and then just display the customName for that objectID). + + if(!actor.getEquipmentList().contains(item.getObjectId())) + { + actor.addObjectToEquipList(item); + processItemAtrributes(actor, item, true); + } +} + + public void unequip(CreatureObject actor, SWGObject item) + { + String template = ((item.getAttachment("customServerTemplate") == null) ? item.getTemplate() : (item.getTemplate().split("shared_")[0] + "shared_" + ((String) item.getAttachment("customServerTemplate")) + ".iff")); + String serverTemplate = template.replace(".iff", ""); + + PyObject func = core.scriptService.getMethod("scripts/" + serverTemplate.split("shared_" , 2)[0].replace("shared_", ""), serverTemplate.split("shared_" , 2)[1], "unequip"); + if(func != null) func.__call__(Py.java2py(core), Py.java2py(actor), Py.java2py(item)); + + + if(actor.getEquipmentList().contains(item.getObjectId())) + { + actor.removeObjectFromEquipList(item); + processItemAtrributes(actor, item, false); + } + } + + public void processItemAtrributes(CreatureObject creature, SWGObject item, boolean equipping) + { + // TODO: crit enhancement from crafted weapons + // TODO: check for armor category in order to add resistance to certain DoT types + + Map attributes = new TreeMap(item.getAttributes()); + + if(equipping) + { + if(item.getStringAttribute("cat_wpn_damage.wpn_category") != null) core.skillModService.addSkillMod(creature, "display_only_critical", getWeaponCriticalChance(creature, item)); + if(item.getStringAttribute("proc_name") != null) core.buffService.addBuffToCreature(creature, item.getStringAttribute("proc_name").replace("@ui_buff:", ""), creature); + + for(Entry e : attributes.entrySet()) + { + if(e.getKey().startsWith("cat_skill_mod_bonus.@stat_n:")) + { + core.skillModService.addSkillMod(creature, e.getKey().replace("cat_skill_mod_bonus.@stat_n:", ""), Integer.parseInt((String) e.getValue())); + } + + if(e.getKey().startsWith("cat_stat_mod_bonus.@stat_n:")) + { + core.skillModService.addSkillMod(creature, e.getKey().replace("cat_stat_mod_bonus.@stat_n:", ""), Integer.parseInt((String) e.getValue())); + } + + if(e.getKey().startsWith("cat_attrib_mod_bonus.attr_health")) + { + creature.setMaxHealth(creature.getMaxHealth() + Integer.parseInt((String) e.getValue())); + } + + if(e.getKey().startsWith("cat_attrib_mod_bonus.attr_action")) + { + creature.setMaxAction(creature.getMaxAction() + Integer.parseInt((String) e.getValue())); + } + } + } + else + { + if(item.getStringAttribute("cat_wpn_damage.wpn_category") != null) core.skillModService.deductSkillMod(creature, "display_only_critical", getWeaponCriticalChance(creature, item)); + if(item.getStringAttribute("proc_name") != null) core.buffService.removeBuffFromCreatureByName(creature, item.getStringAttribute("proc_name").replace("@ui_buff:", "")); + + for(Entry e : attributes.entrySet()) + { + if(e.getKey().startsWith("cat_skill_mod_bonus.@stat_n:")) + { + core.skillModService.deductSkillMod(creature, e.getKey().replace("cat_skill_mod_bonus.@stat_n:", ""), Integer.parseInt((String) e.getValue())); + } + if(e.getKey().startsWith("cat_stat_mod_bonus.@stat_n:")) + { + core.skillModService.deductSkillMod(creature, e.getKey().replace("cat_stat_mod_bonus.@stat_n:", ""), Integer.parseInt((String) e.getValue())); + } + + if(e.getKey().startsWith("cat_attrib_mod_bonus.attr_health")) + { + creature.setMaxHealth(creature.getMaxHealth() - Integer.parseInt((String) e.getValue())); + } + if(e.getKey().startsWith("cat_attrib_mod_bonus.attr_action")) + { + creature.setMaxAction(creature.getMaxAction() - Integer.parseInt((String) e.getValue())); + } + } + } + + calculateArmorProtection(creature, equipping); + + if(item.getAttachment("setBonus") != null) + { + BonusSetTemplate bonus = bonusSetTemplates.get((String)item.getAttachment("setBonus")); + bonus.callScript(creature); + } + } + + private void calculateArmorProtection(CreatureObject creature, boolean equipping) + { + int wornArmourPieces = 0, forceProtection = 0; + Map protection = new TreeMap(); + + for(Long itemId : new ArrayList(creature.getEquipmentList())) + { + SWGObject item = core.objectService.getObject(itemId); + if(item == null) + continue; + Map attributes = new TreeMap(item.getAttributes()); + boolean incPieceCount = false; + + if(item.getStringAttribute("protection_level") != null) + { + forceProtection = getForceProtection(item); + break; + } + + for(Entry e : attributes.entrySet()) + { + if(e.getKey().startsWith("cat_armor_standard_protection")) + { + String protectionType = e.getKey().replace("cat_armor_standard_protection.armor_eff_", ""); + float modifier = Float.parseFloat(core.scriptService.getMethod("scripts/equipment/", "slot_protection", creature.getSlotNameForObject(item)).__call__().asString()) / 100; + Float protectionAmount = Float.parseFloat((String) e.getValue()) * modifier; + + if(protection.containsKey(protectionType)) protection.replace(protectionType, protection.get(protectionType) + protectionAmount); + else protection.put(protectionType, protectionAmount); + incPieceCount = true; + } + else if(e.getKey().startsWith("cat_armor_special_protection")) + { + String protectionType = e.getKey().replace("cat_armor_special_protection.special_protection_type_", ""); + float modifier = Float.parseFloat(core.scriptService.getMethod("scripts/equipment/", "slot_protection", creature.getSlotNameForObject(item)).__call__().asString()) / 100; + Float protectionAmount = Float.parseFloat((String) e.getValue()) * modifier; + + if(protection.containsKey(protectionType)) protection.replace(protectionType, protection.get(protectionType) + protectionAmount); + else protection.put(protectionType, protectionAmount); + incPieceCount = true; + } + } + if(incPieceCount) wornArmourPieces++; + } + + if(protection.size() == 0) + { + protection.put("kinetic", (float) 0); + protection.put("energy", (float) 0); + protection.put("heat", (float) 0); + protection.put("cold", (float) 0); + protection.put("acid", (float) 0); + protection.put("electricity", (float) 0); + } + + for(Entry e : protection.entrySet()) + { + core.skillModService.deductSkillMod(creature, e.getKey(), creature.getSkillModBase(e.getKey())); + core.skillModService.addSkillMod(creature, e.getKey(), forceProtection); + if(wornArmourPieces >= 3) core.skillModService.addSkillMod(creature, e.getKey(), (int) e.getValue().floatValue()); + } + } + + public void calculateLightsaberAttributes(CreatureObject actor, TangibleObject item, SWGObject targetContainer) + { + WeaponObject lightsaber = null; + TangibleObject lightsaberInventory = null; + long tunerId = 0; + + // Get our lightsaber weapon object + if(item.getContainer().getTemplate().startsWith("object/tangible/inventory/shared_lightsaber_inventory")) lightsaber = (WeaponObject) item.getGrandparent(); + else if(targetContainer.getTemplate().startsWith("object/tangible/inventory/shared_lightsaber_inventory")) lightsaber = (WeaponObject) targetContainer.getContainer(); + lightsaberInventory = (TangibleObject) lightsaber.getSlottedObject("saber_inv"); + + if(lightsaber.getAttachment("weaponBaseDamageMin") == null) lightsaber.setAttachment("weaponBaseDamageMin", lightsaber.getMinDamage()); + if(lightsaber.getAttachment("weaponBaseDamageMax") == null) lightsaber.setAttachment("weaponBaseDamageMax", lightsaber.getMaxDamage()); + + // Check if item is a lightsaber component + if(lightsaber == null) return; + if(lightsaberInventory == null) return; + if(lightsaber.getContainer() instanceof CreatureObject) + { + actor.sendSystemMessage("@jedi_spam:saber_not_while_equpped", (byte) 0); + return; + } + + if(!item.getTemplate().startsWith("object/tangible/component/weapon/lightsaber/")) + { + actor.sendSystemMessage("@jedi_spam:saber_not_crystal", (byte) 0); + return; + } + if(lightsaber.getAttachment("hasColorCrystal") == null) lightsaber.setAttachment("hasColorCrystal", false); + if(item.getAttributes().containsKey("@obj_attr_n:color") && (Boolean) lightsaber.getAttachment("hasColorCrystal") && !(targetContainer.getContainer() instanceof CreatureObject)) + { + actor.sendSystemMessage("@jedi_spam:saber_already_has_color", (byte) 0); + return; + } + + // Find our tuner + if(item.getAttachment("tunerId") == null) item.setAttachment("tunerId", 0); + tunerId = (int) item.getAttachment("tunerId"); + + // Check if player tuned the crystal + if(tunerId == 0) + { + actor.sendSystemMessage("@jedi_spam:saber_crystal_not_tuned", (byte) 0); + return; + } + if(tunerId != actor.getObjectId()) + { + actor.sendSystemMessage("@jedi_spam:saber_crystal_not_owner", (byte) 0); + return; + } + else item.getContainer().transferTo(actor, targetContainer, item); + + // Calculate attributes + lightsaber.setAttachment("hasColorCrystal", false); + + lightsaberInventory.viewChildren(lightsaberInventory, false, false, new Traverser() + { + WeaponObject saber; + TangibleObject saberInv; + + int minDamageBonus = 0; + int maxDamageBonus = 0; + Boolean hasColorCrystal = false; + + public void process(SWGObject item) + { + saber = (WeaponObject) item.getGrandparent(); + saberInv = (TangibleObject) saber.getSlottedObject("saber_inv"); + + if(item.getAttributes().get("@obj_attr_n:color") != null) // "Blade Color Modification" + { + int crystalColorIndex = resources.datatables.LightsaberColors.getByName((String) item.getAttributes().get("@obj_attr_n:color")); + + byte bladeType = crystalColorIndex > 256 ? (byte) (crystalColorIndex % 256) : 0x00; + byte bladeColor = crystalColorIndex > 256 ? (byte) 0x00 : (byte) crystalColorIndex; + + saber.setCustomizationVariable("private/alternate_shader_blade", bladeType); + saber.setCustomizationVariable("/private/index_color_blade", bladeColor); + + // System.out.println("bladeColorName: " + item.getAttributes().get("@obj_attr_n:color")); + // System.out.println("bladeColor: " + bladeColor); + // System.out.println("bladeType: " + bladeType); + // System.out.println(); + + hasColorCrystal = true; + } + else + { + minDamageBonus += Integer.parseInt(item.getAttributes().get("@obj_attr_n:mindamage")); // "Minimum Damage" + maxDamageBonus += Integer.parseInt(item.getAttributes().get("@obj_attr_n:maxdamage")); // "Maximum Damage" + } + + int saberBaseDamageMin = (int) saber.getAttachment("weaponBaseDamageMin"); + int saberBaseDamageMax = (int) saber.getAttachment("weaponBaseDamageMax"); + + saber.setMinDamage(saberBaseDamageMin + minDamageBonus); + saber.setMaxDamage(saberBaseDamageMax + maxDamageBonus); + + saber.setAttachment("hasColorCrystal", hasColorCrystal); + } + }); + } + + private int getWeaponCriticalChance(CreatureObject actor, SWGObject item) { + int weaponCriticalChance = 0; + String weaponCriticalSkillMod = (core.scriptService.getMethod("scripts/equipment/", "weapon_critical", "weap_" + item.getStringAttribute("cat_wpn_damage.wpn_category").replace("@obj_attr_n:wpn_category_", "")).__call__().asString()); + + if(actor.getSkillMod(weaponCriticalSkillMod) != null) + weaponCriticalChance = actor.getSkillModBase(weaponCriticalSkillMod); + + return weaponCriticalChance; + } + + private int getForceProtection(SWGObject item) { + return core.scriptService.getMethod("scripts/equipment/", "force_protection", item.getAttachment("type") + "_" + item.getStringAttribute("protection_level")).__call__().asInt(); + } + + public void addBonusSetTemplate(BonusSetTemplate bonusSet) + { + bonusSetTemplates.put(bonusSet.getName(), bonusSet); + } + + public void loadBonusSets() { + Path p = Paths.get("scripts/equipment/bonus_sets/"); + FileVisitor fv = new SimpleFileVisitor() + { + @Override + public FileVisitResult visitFile(Path file, BasicFileAttributes attrs) throws IOException + { + core.scriptService.callScript("scripts/equipment/bonus_sets/", file.getFileName().toString().replace(".py", ""), "addBonusSet", core); + return FileVisitResult.CONTINUE; + } + }; + try + { + Files.walkFileTree(p, fv); + } + catch (IOException e) { e.printStackTrace(); } + } +} diff --git a/src/services/gcw/FactionService.java b/src/services/gcw/FactionService.java new file mode 100644 index 00000000..a844c5e4 --- /dev/null +++ b/src/services/gcw/FactionService.java @@ -0,0 +1,553 @@ +/******************************************************************************* + * Copyright (c) 2013 + * + * This File is part of NGECore2. + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see . + * + * Using NGEngine to work with NGECore2 is making a combined work based on NGEngine. + * Therefore all terms and conditions of the GNU Lesser General Public License cover the combination. + ******************************************************************************/ +package services.gcw; + +import java.util.Map; +import java.util.Map.Entry; +import java.util.TreeMap; +import java.util.concurrent.Executors; +import java.util.concurrent.ScheduledExecutorService; +import java.util.concurrent.TimeUnit; +import java.util.concurrent.atomic.AtomicReference; + +import main.NGECore; + +import org.apache.mina.core.buffer.IoBuffer; +import org.apache.mina.core.session.IoSession; +import org.python.core.Py; +import org.python.core.PyObject; + +import protocol.swg.FactionResponseMessage; +import resources.common.FileUtilities; +import resources.common.Opcodes; +import resources.datatables.DisplayType; +import resources.datatables.FactionStatus; +import resources.datatables.Options; +import resources.datatables.PvpStatus; +import resources.objects.creature.CreatureObject; +import resources.objects.mission.MissionObject; +import resources.objects.player.PlayerObject; +import resources.objects.tangible.TangibleObject; +import engine.clientdata.ClientFileManager; +import engine.clientdata.StfTable; +import engine.clientdata.visitors.DatatableVisitor; +import engine.clients.Client; +import engine.resources.common.CRC; +import engine.resources.service.INetworkDispatch; +import engine.resources.service.INetworkRemoteEvent; + +public class FactionService implements INetworkDispatch { + + private NGECore core; + + private Map factionMap = new TreeMap(); + + private final ScheduledExecutorService scheduler = Executors.newScheduledThreadPool(1); + + private DatatableVisitor pvpFactions; + + public FactionService(NGECore core) { + this.core = core; + + try { + StfTable stf = new StfTable("clientdata/string/en/faction/faction_names.stf"); + + for (int s = 1; s < stf.getRowCount(); s++) { + String faction = stf.getStringById(s).getKey(); + + if (faction != null && faction != "") { + factionMap.put(faction, CRC.StringtoCRC(faction)); + } + } + + pvpFactions = ClientFileManager.loadFile("datatables/player/pvp_factions.iff", DatatableVisitor.class); + } catch (Exception e) { + e.printStackTrace(); + } + } + + public int getCRC(String faction) { + return CRC.StringtoCRC(faction); + } + + public String getName(int factionCrc) { + for (Entry entry : factionMap.entrySet()) { + if (factionCrc == entry.getValue()) { + return entry.getKey(); + } + } + + return ""; + } + + public void addFactionStanding(CreatureObject creature, String faction, int factionStanding) { + if (!isFaction(faction)) { + return; + } + + if (creature == null) { + return; + } + + PlayerObject player = (PlayerObject) creature.getSlottedObject("ghost"); + + if (player == null) { + return; + } + + player.modifyFactionStanding(faction, factionStanding); + } + + public void removeFactionStanding(CreatureObject creature, String faction, int factionStanding) { + if (!isFaction(faction)) { + return; + } + + if (creature == null) { + return; + } + + PlayerObject player = (PlayerObject) creature.getSlottedObject("ghost"); + + if (player == null) { + return; + } + + player.modifyFactionStanding(faction, -factionStanding); + } + + public void delegateFactionPoints(CreatureObject actor, CreatureObject target, String faction, int points) { + if (actor == null || actor.getSlottedObject("ghost") == null) { + return; + } + + if (target == null || actor.getSlottedObject("ghost") == null) { + return; + } + + if (!isFaction(faction)) { + return; + } + + if (points <= 0) { + return; + } + + + } + + public boolean isFaction(String faction) { + if (factionMap.containsKey(faction)) { + return true; + } + + return false; + } + + /* + * Returns true if target is an ally of object + * + * Will be useful for NPC AI, so they know who to help and who to be indifferent to. + */ + public boolean isFactionAlly(TangibleObject object, TangibleObject target) { + if (object == null || target == null) { + return false; + } + + String objectFaction = object.getFaction(); + String targetFaction = target.getFaction(); + + if (!isFaction(objectFaction) || !isFaction(targetFaction)) { + return false; + } + + if (FileUtilities.doesFileExist("scripts/faction/" + objectFaction + ".py")) { + PyObject method = core.scriptService.getMethod("scripts/faction/", objectFaction, "isAlly"); + + if (method != null && method.isCallable()) { + return ((method.__call__(Py.java2py(targetFaction)).asInt() == 1) ? true : false); + } + } + + return false; + } + + /* + * Returns true if target is an enemy of object + * + * Will be useful for NPC AI, so they know who to attack and who to be indifferent to. + */ + public boolean isFactionEnemy(TangibleObject object, TangibleObject target) { + if (object == null || target == null) { + return false; + } + + String objectFaction = object.getFaction(); + String targetFaction = target.getFaction(); + + if (!isFaction(objectFaction) || !isFaction(targetFaction)) { + return false; + } + + if (FileUtilities.doesFileExist("scripts/faction/" + objectFaction + ".py")) { + PyObject method = core.scriptService.getMethod("scripts/faction/", objectFaction, "isEnemy"); + + if (method != null && method.isCallable()) { + return ((method.__call__(Py.java2py(targetFaction)).asInt() == 1) ? true : false); + } + } + + return false; + } + + /* + * Calculates the target's pvp bitmask based on the person's + * faction standing and the enemy's options bitmask. + * + * This shouldn't be what we "set" the bitmask to, just + * what we use when calculating how to treat a target + * and when we send it. + * + * This should be used instead of getPvPBitmask where possible, but + * should not be used in setPvPBitmask. + * + * *** Updated this so it calculates if even a tangible object + * should see something as attackable (so it works for npcs and turrets). + * + * Also takes into account bounty targets and if it's a pet. + */ + public int calculatePvpStatus(TangibleObject object, TangibleObject target) { + PlayerObject ghost = (PlayerObject) object.getSlottedObject("ghost"); + + int pvpBitmask = 0; + + if (object == target) { + pvpBitmask |= PvpStatus.Self; + } + + if (target.getSlottedObject("ghost") != null) { + pvpBitmask |= PvpStatus.Player; + } + + if (target instanceof CreatureObject && ((CreatureObject) target).getOwnerId() > 0) { + target = (TangibleObject) core.objectService.getObject(((CreatureObject) target).getOwnerId()); + } + + if ((target.getPvpBitmask() & PvpStatus.GoingCovert) == PvpStatus.GoingCovert) { + pvpBitmask |= PvpStatus.GoingCovert; + } + + if ((target.getPvpBitmask() & PvpStatus.GoingOvert) == PvpStatus.GoingOvert) { + pvpBitmask |= PvpStatus.GoingOvert; + } + + if (target.getFactionStatus() == FactionStatus.SpecialForces) { + pvpBitmask |= PvpStatus.Overt; + } + + // Everything below assumes target is potentially attackable. + if (!target.getOption(Options.ATTACKABLE) || target.getOption(Options.INVULNERABLE)) { + return pvpBitmask; + } + + if (ghost != null && target.getSlottedObject("ghost") != null && + core.combatService.areInDuel((CreatureObject) object, (CreatureObject) target)) { + pvpBitmask |= (PvpStatus.Attackable | PvpStatus.Aggressive); + } + + if (object.getDefendersList().contains(target)) { + pvpBitmask |= (PvpStatus.Attackable | PvpStatus.Aggressive); + } + + AtomicReference ref = new AtomicReference(0); + + long targetId = target.getObjectID(); + + if (ghost != null && ghost.getBountyMissionId() != 0) { + if (((MissionObject) core.objectService.getObject(ghost.getBountyMissionId())).getBountyMarkId() == targetId) { + ref.set(PvpStatus.Attackable | PvpStatus.Aggressive); + } + } + + /*if (ghost != null && ghost.getProfession().contains("smuggler") && + target.getSlottedObject("datapad") != null) { + target.getSlottedObject("datapad").viewChildren(target, false, false, (mission) -> { + if (mission instanceof MissionObject && ((MissionObject) mission).getBountyMarkId() == object.getObjectID()) { + ref.set(PvpStatus.Attackable); + } + }); + }*/ + + pvpBitmask |= ref.get(); + + if (target instanceof CreatureObject && ((CreatureObject) target).getTefTime() > 0) { + //pvpBitmask |= PvpStatus.TEF; + } + + if (target.getFaction().length() > 0 && target.getFaction().equals(object.getFaction())) { + return pvpBitmask; + } + + if (target.getSlottedObject("ghost") == null && target.getFactionStatus() == FactionStatus.OnLeave) { + pvpBitmask |= PvpStatus.Attackable; + } + + if (target.getOption(Options.AGGRESSIVE)) { + pvpBitmask |= PvpStatus.Aggressive; + } + + if (object.getFactionStatus() == FactionStatus.OnLeave) { + return pvpBitmask; + } + + if (target.getFactionStatus() >= FactionStatus.Combatant) { + if (ghost != null) { + if (target.getSlottedObject("ghost") == null) { + pvpBitmask |= PvpStatus.Enemy; + + Integer factionStanding = ghost.getFactionStandingMap().get(target.getFaction()); + + if (factionStanding != null) { + if (factionStanding < 0) { + pvpBitmask |= PvpStatus.Aggressive; + } else { + pvpBitmask |= PvpStatus.Attackable; + } + } else { + pvpBitmask |= PvpStatus.Attackable; + } + + return pvpBitmask; + } + } else { + if (isFactionEnemy(object, target)) { + pvpBitmask |= PvpStatus.Attackable | PvpStatus.Enemy; + } + + if (isFactionEnemy(target, object)) { + pvpBitmask |= PvpStatus.Aggressive | PvpStatus.Enemy; + } + } + } + + if (target.getFactionStatus() == FactionStatus.SpecialForces) { + if (object.getFactionStatus() == FactionStatus.SpecialForces) { + pvpBitmask |= (PvpStatus.Attackable | PvpStatus.Aggressive | PvpStatus.Enemy); + } + } + + return pvpBitmask; + } + + public boolean isPvpFaction(String faction) { + if (!isFaction(faction)) { + return false; + } + + try { + for (int i = 0; i < pvpFactions.getRowCount(); i++) { + if (pvpFactions.getObject(i, 0) != null) { + if (((String) pvpFactions.getObject(i, 0)).equals(faction)) { + return true; + } + } + } + + } catch (Exception e) { + e.printStackTrace(); + } + + return false; + } + + public void join(CreatureObject actor, String faction) { + if (actor.getPvpBitmask() == PvpStatus.GoingCovert) { + actor.sendSystemMessage("@faction_recruiter:pvp_status_changing", DisplayType.Broadcast); + return; + } + + if (actor.getPvpBitmask() == PvpStatus.GoingOvert) { + actor.sendSystemMessage("@faction_recruiter:pvp_status_changing", DisplayType.Broadcast); + return; + } + + if (actor.getFaction().length() > 0) { + actor.sendSystemMessage("@faction_recruiter:resign_on_leave", DisplayType.Broadcast); + return; + } + + scheduler.schedule(() -> { + actor.setFaction(faction); + actor.setFactionStatus(FactionStatus.OnLeave); + actor.setPvpBitmask(0); + PlayerObject player = ((PlayerObject) actor.getSlottedObject("ghost")); + if (player != null) { + player.resetGcwPoints(); + player.resetPvpKills(); + player.setCurrentRank(1); + } + actor.updatePvpStatus(); + }, 1, TimeUnit.SECONDS); + } + + public void changeFactionStatus(CreatureObject actor, int factionStatus) { + long time = 1; + String message = ""; + + if (factionStatus == actor.getFactionStatus()) { + return; + } + + if (actor.getPvpBitmask() == PvpStatus.GoingCovert) { + actor.sendSystemMessage("@faction_recruiter:pvp_status_changing", DisplayType.Broadcast); + return; + } + + if (actor.getPvpBitmask() == PvpStatus.GoingOvert) { + actor.sendSystemMessage("@faction_recruiter:pvp_status_changing", DisplayType.Broadcast); + return; + } + + switch (factionStatus) { + case FactionStatus.OnLeave: + actor.setPvpStatus(PvpStatus.GoingCovert, true); + actor.updatePvpStatus(); + time = 300; + message = "on_leave_complete"; + break; + case FactionStatus.Combatant: + actor.setPvpStatus(PvpStatus.GoingCovert, true); + actor.updatePvpStatus(); + + switch (actor.getFactionStatus()) { + case FactionStatus.OnLeave: + actor.sendSystemMessage("@faction_recruiter:on_leave_to_covert", DisplayType.Broadcast); + time = 30; + break; + case FactionStatus.SpecialForces: + actor.sendSystemMessage("@faction_recruiter:overt_to_covert", DisplayType.Broadcast); + time = 300; + break; + } + + message = "covert_complete"; + break; + case FactionStatus.SpecialForces: + actor.sendSystemMessage("@faction_recruiter:covert_to_overt", DisplayType.Broadcast); + actor.setPvpStatus(PvpStatus.GoingOvert, true); + time = 30; + message = "overt_complete"; + break; + } + + final String finalMessage = message; + + scheduler.schedule(() -> { + actor.setPvpBitmask(0); + actor.setFactionStatus(factionStatus); + actor.updatePvpStatus(); + actor.sendSystemMessage("@faction_recruiter:" + finalMessage, DisplayType.Broadcast); + }, time, TimeUnit.SECONDS); + } + + public void resign(CreatureObject actor) { + if (actor.getPvpBitmask() == PvpStatus.GoingCovert) { + actor.sendSystemMessage("@faction_recruiter:pvp_status_changing", DisplayType.Broadcast); + return; + } + + if (actor.getPvpBitmask() == PvpStatus.GoingOvert) { + actor.sendSystemMessage("@faction_recruiter:pvp_status_changing", DisplayType.Broadcast); + return; + } + + if (actor.getFactionStatus() == FactionStatus.OnLeave) { + actor.sendSystemMessage("@faction_recruiter:resign_on_leave", DisplayType.Broadcast); + return; + } + + long time = 1; + + if (actor.getFactionStatus() == FactionStatus.SpecialForces) { + actor.sendSystemMessage("@faction_recruiter:sui_resig_complete_in_5", DisplayType.Broadcast); + actor.setPvpStatus(PvpStatus.GoingCovert, true); + actor.updatePvpStatus(); + time = 300; + } + + scheduler.schedule(() -> { + actor.setPvpBitmask(0); + actor.setFactionStatus(FactionStatus.OnLeave); + actor.setFaction(""); + PlayerObject player = ((PlayerObject) actor.getSlottedObject("ghost")); + if (player != null) { + player.resetGcwPoints(); + player.resetPvpKills(); + player.setCurrentRank(0); + } + actor.updatePvpStatus(); + actor.sendSystemMessage("@faction_recruiter:resign_complete", DisplayType.Broadcast); + }, time, TimeUnit.SECONDS); + } + + public Map getFactionMap() { + return factionMap; + } + + @Override + public void insertOpcodes(Map swgOpcodes, Map objControllerOpcodes) { + + swgOpcodes.put(Opcodes.FactionRequestMessage, new INetworkRemoteEvent() { + + @Override + public void handlePacket(IoSession session, IoBuffer buffer) throws Exception { + Client client = core.getClient(session); + + if (client == null) { + return; + } + + CreatureObject creature = (CreatureObject) client.getParent(); + + if (creature == null) { + return; + } + + PlayerObject player = (PlayerObject) creature.getSlottedObject("ghost"); + + if (player == null) { + return; + } + + session.write((new FactionResponseMessage(player.getFactionStandingMap(), 0)).serialize()); + } + + }); + } + + @Override + public void shutdown() { + // TODO Auto-generated method stub + + } + +} diff --git a/src/services/gcw/GCWService.java b/src/services/gcw/GCWService.java index e89c7e48..06dfa237 100644 --- a/src/services/gcw/GCWService.java +++ b/src/services/gcw/GCWService.java @@ -25,11 +25,15 @@ import java.math.BigDecimal; import java.math.MathContext; import java.nio.ByteOrder; import java.util.ArrayList; +import java.util.Calendar; +import java.util.Date; import java.util.Iterator; import java.util.List; import java.util.Map; import java.util.Map.Entry; +import java.util.TimeZone; import java.util.TreeMap; +import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.Executors; import java.util.concurrent.ScheduledExecutorService; import java.util.concurrent.TimeUnit; @@ -42,28 +46,42 @@ import org.python.google.common.collect.Multimap; import protocol.swg.GcwGroupsRsp; import protocol.swg.GcwRegionsReq; import protocol.swg.GcwRegionsRsp; - -import resources.common.FactionStatus; import resources.common.Opcodes; +import resources.common.OutOfBand; +import resources.common.collidables.CollidableCircle; +import resources.datatables.DisplayType; +import resources.datatables.FactionStatus; +import resources.datatables.GcwType; import resources.gcw.CurrentServerGCWZoneHistory; import resources.gcw.CurrentServerGCWZonePercent; import resources.gcw.OtherServerGCWZonePercent; import resources.objects.creature.CreatureObject; import resources.objects.guild.GuildObject; - +import resources.objects.player.PlayerObject; import main.NGECore; - import engine.clients.Client; +import engine.resources.database.ODBCursor; import engine.resources.objects.SWGObject; +import engine.resources.scene.Planet; import engine.resources.scene.Point2D; +import engine.resources.scene.Point3D; import engine.resources.service.INetworkDispatch; import engine.resources.service.INetworkRemoteEvent; public class GCWService implements INetworkDispatch { private NGECore core; + private GuildObject object; + + private static final int[] MOD2 = { 10250, 7250, 7250, 6750, 6750, 6750, 6750, 6750, 6750, 6750, 6750, 6750 }; + private static final int[] DECAY1 = { 0, 0, 0, 0, 0, 0, 2727, 2744, 2769, 2799, 2823, 2857 }; + private static final int[] DECAY2 = { 0, 0, 0, 0, 0, 0, 6000, 6500, 7200, 8200, 9600, 12000 }; + private static final int[] CONST2 = { 0, 0, 0, 0, 0, 0, 12200, 12200, 12900, 14100, 16200, 18700 }; + private static final int[] CONST4 = { 0, 0, 0, 0, 0, 0, 1950, 3550, 5600, 7800, 9350, 11100 }; + private Map> zoneMap() { return object.getZoneMap(); } + private Map> pvpZones = new ConcurrentHashMap>(); private final ScheduledExecutorService scheduler = Executors.newScheduledThreadPool(1); @@ -79,6 +97,8 @@ public class GCWService implements INetworkDispatch { private void afterInitialisation() { try { core.scriptService.callScript("scripts/", "gcwzones", "addZones", core); + core.scriptService.callScript("scripts/", "pvpzones", "addZones", core); + updateNextUpdateTime(); } catch (Exception e) { e.printStackTrace(); } @@ -285,6 +305,63 @@ public class GCWService implements INetworkDispatch { } } }, 2, 2, TimeUnit.DAYS); + + scheduler.scheduleAtFixedRate(new Runnable() { + @Override public void run() { gcwUpdate(); } + + private void gcwUpdate() { + int nextUpdateTime = (int) calculateNextUpdateTime(); + + ODBCursor cursor = core.getSWGObjectODB().getCursor(); + + while (cursor.hasNext()) { + SWGObject object = (SWGObject) cursor.next(); + + if (object == null) { + continue; + } + + if (core.objectService.getObject(object.getObjectID()) == null) { + object = core.objectService.getObject(object.getObjectID()); + } + + if (!(object instanceof CreatureObject)) { + continue; + } + + CreatureObject creature = (CreatureObject) object; + + if (creature.getSlottedObject("ghost") == null) { + continue; + } + + PlayerObject player = (PlayerObject) creature.getSlottedObject("ghost"); + + // TODO update statistics + + if (core.factionService.isPvpFaction(creature.getFaction())) { + updateGcwRank(creature); + player.addLifetimeGcwPoints(player.getGcwPoints()); + player.addLifetimePvpKills(player.getPvpKills()); + player.resetGcwPoints(); + player.resetPvpKills(); + + if (creature.getFaction().equals("rebel") && player.getCurrentRank() > player.getHighestRebelRank()) { + player.setHighestRebelRank(player.getCurrentRank()); + } + + if (creature.getFaction().equals("imperial") && player.getCurrentRank() > player.getHighestImperialRank()) { + player.setHighestImperialRank(player.getCurrentRank()); + } + + player.setNextUpdateTime(nextUpdateTime - player.getBornDate()); + } + } + + cursor.close(); + } + + }, calculateNextUpdateTime(), 6048000, TimeUnit.SECONDS); } public void addZone(String planet, String zone, float x, float z, float radius, int weight, int type) { @@ -365,6 +442,121 @@ public class GCWService implements INetworkDispatch { } } + public void addGcwPoints(CreatureObject actor, int gcwPoints, byte gcwType) { + if (actor == null) { + return; + } + + if (gcwPoints == 0) { + return; + } + + if (!core.factionService.isPvpFaction(actor.getFaction())) { + return; + } + + if (actor.getSlottedObject("ghost") == null) { + return; + } + + PlayerObject player = (PlayerObject) actor.getSlottedObject("ghost"); + + String planet = actor.getPlanet().getName(); + + String prefix = ((planet.startsWith("space")) ? (planet + "_space") : planet); + + switch (gcwType) { + case GcwType.Enemy: + adjustZone(planet, prefix + "_pve", actor.getFaction(), gcwPoints); + actor.sendSystemMessage(OutOfBand.ProsePackage("@gcw:gcw_rank_generic_point_grant", gcwPoints), DisplayType.Broadcast); + break; + case GcwType.Player: + adjustZone(planet, prefix + "_pvp", actor.getFaction(), gcwPoints); + break; + } + + String zone = getCurrentGcwRegion(actor); + + if (zone != null) { + adjustZone(planet, zone, actor.getFaction(), gcwPoints); + } + + player.setGcwPoints(player.getGcwPoints() + gcwPoints); + } + + /* Ported from javascript. + * Written for us by Hendrik of http://swg.activeframe.de. + */ + private double helper(int points, int rank) { + int faktor = points / (MOD2[rank-1] - 250 * rank); + int rt = points / (1 + faktor) - DECAY1[rank-1]; + + if (rank >= 7) { + if (points > DECAY2[rank-1] && rt > 0) { + rt = rt * (((17 - rank) / (14 - rank)) + (CONST2[rank-1] / (points - CONST4[rank-1]))); + } + } + + return Math.floor(rt); + } + + /* Ported from javascript. + * Written for us by Hendrik of http://swg.activeframe.de. + */ + public void updateGcwRank(CreatureObject actor) { + if (actor == null) { + return; + } + + if (actor.getFaction().length() == 0) { + return; + } + + if (actor.getSlottedObject("ghost") == null) { + return; + } + + PlayerObject player = (PlayerObject) actor.getSlottedObject("ghost"); + + int oldrank = player.getCurrentRank(); + int oldprogress = (int) ((player.getRankProgress() > 100) ? 100 : player.getRankProgress()); + int oldpoints = player.getGcwPoints(); + int newrank = oldrank; + int newprogress = oldprogress; + int oldranktotal = 0; + int oldrankprogress = 0; + int newranktotal = 0; + int newrankprogress = 0; + + oldrankprogress = oldprogress * 50; + oldranktotal = 5000 * (oldrank - 1) + oldrankprogress; + + newprogress = (int) helper(oldpoints, oldrank); + + if (newprogress < -2000) { + newprogress = -2000; + } + + newranktotal = oldranktotal + newprogress; + + if (oldrank == 7 && newprogress < 0 && newranktotal < 30000) { + newranktotal = 29999; + } + + newrank = (int) (Math.floor(newranktotal / 5000) + 1); + + if (newrank > 12) { + newrank = 12; + newranktotal = 12 * 5000 - 1; + } + + newrankprogress = newranktotal - (newrank - 1) * 5000; + newprogress = newrankprogress * 100 / 5000; + + player.setCurrentRank(newrank); + player.setRankProgress((float) Math.floor(newprogress)); + } + public List getSFPlayers() { List flagged = new ArrayList(); @@ -377,8 +569,8 @@ public class GCWService implements INetworkDispatch { } Iterator it = flagged.iterator(); - - while(it.hasNext()) { + + while (it.hasNext()) { SWGObject obj = it.next(); if (((CreatureObject) obj).getFactionStatus() != 2) { it.remove(); @@ -388,6 +580,109 @@ public class GCWService implements INetworkDispatch { return flagged; } + public String getCurrentGcwRegion(CreatureObject actor) { + try { + String planet = actor.getPlanet().getName(); + + if (zoneMap().containsKey(planet)) { + for (String zoneName : zoneMap().get(planet).keySet()) { + CurrentServerGCWZonePercent zone = zoneMap().get(planet).get(zoneName).clone(); + + if (zone.getRadius() > 0) { + List objects = core.simulationService.get(core.terrainService.getPlanetByName(planet), zone.getPosition().x, zone.getPosition().z, (int) zone.getRadius()); + + if (objects.contains(actor)) { + return zoneName; + } + } + } + } + } catch (Exception e) { + return null; + } + + return null; + } + + public int calculateNextUpdateTime() { + Calendar c = Calendar.getInstance(); + Date now = new Date(); + + c.setTime(now); + + c.setTimeZone(TimeZone.getTimeZone("GMT")); + + if (c.get(Calendar.DAY_OF_WEEK) == Calendar.THURSDAY && c.get(Calendar.HOUR_OF_DAY) >= 7) { + c.add(Calendar.DAY_OF_YEAR, 7); + } + + while (c.get(Calendar.DAY_OF_WEEK) != Calendar.THURSDAY) { + c.add(Calendar.DAY_OF_WEEK, 1); + } + + c.set(Calendar.HOUR_OF_DAY, 7); + c.set(Calendar.MINUTE, 0); + c.set(Calendar.SECOND, 0); + c.set(Calendar.MILLISECOND, 0); + + return (int) ((c.getTimeInMillis() - now.getTime()) / 1000L); + } + + public void updateNextUpdateTime() { + ODBCursor cursor = core.getSWGObjectODB().getCursor(); + + while (cursor.hasNext()) { + SWGObject object = (SWGObject) cursor.next(); + + if (object == null) { + continue; + } + + if (core.objectService.getObject(object.getObjectID()) == null) { + object = core.objectService.getObject(object.getObjectID()); + } + + if (!(object instanceof CreatureObject)) { + continue; + } + + CreatureObject creature = (CreatureObject) object; + + if (creature.getSlottedObject("ghost") == null) { + continue; + } + + PlayerObject player = (PlayerObject) creature.getSlottedObject("ghost"); + + player.setNextUpdateTime(player.getBornDate() + calculateNextUpdateTime()); + } + + cursor.close(); + } + + public long calculateResetTime() { + Calendar c = Calendar.getInstance(); + Date now = new Date(); + + c.setTime(now); + + int weekday = c.get(Calendar.DAY_OF_WEEK); + + if (weekday != Calendar.THURSDAY) { + int days = ((Calendar.WEDNESDAY - weekday + 2) % 7); + c.add(Calendar.DAY_OF_YEAR, days); + } else if (c.get(Calendar.HOUR_OF_DAY) >= 7) { + c.add(Calendar.DAY_OF_YEAR, 7); + } + + c.set(Calendar.HOUR_OF_DAY, 7); + c.set(Calendar.MINUTE, 0); + c.set(Calendar.SECOND, 0); + c.set(Calendar.MILLISECOND, 0); + + return c.getTimeInMillis(); + } + public void insertOpcodes(Map swgOpcodes, Map objControllerOpcodes) { swgOpcodes.put(Opcodes.GcwRegionsReq, new INetworkRemoteEvent() { @@ -400,7 +695,7 @@ public class GCWService implements INetworkDispatch { GcwRegionsReq gcwRegionsReq = new GcwRegionsReq(); gcwRegionsReq.deserialize(data); - Client client = core.getClient((Integer) session.getAttribute("connectionId")); + Client client = core.getClient(session); if (client == null || client.getSession() == null) { return; @@ -421,6 +716,25 @@ public class GCWService implements INetworkDispatch { } + public void addPvPZone(String planetName, float x, float z, float radius) { + Planet planet = core.terrainService.getPlanetByName(planetName); + if(planet == null) + return; + if(pvpZones.get(planet) == null) + pvpZones.put(planet, new ArrayList()); + CollidableCircle area = new CollidableCircle(new Point3D(x, 0, z), radius, planet); + PvPZone zone = new PvPZone(planet, area); + pvpZones.get(planet).add(zone); + core.simulationService.addCollidable(area, x, z); + } + + public boolean isInPvpZone(CreatureObject actor) { + List zones = pvpZones.get(actor.getPlanet()); + if(zones == null) + return false; + return zones.stream().anyMatch(z -> z.getArea().doesCollide(actor)); + } + @Override public void shutdown() { diff --git a/src/services/gcw/PvPZone.java b/src/services/gcw/PvPZone.java new file mode 100644 index 00000000..ab49ce30 --- /dev/null +++ b/src/services/gcw/PvPZone.java @@ -0,0 +1,110 @@ +/******************************************************************************* + * Copyright (c) 2013 + * + * This File is part of NGECore2. + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see . + * + * Using NGEngine to work with NGECore2 is making a combined work based on NGEngine. + * Therefore all terms and conditions of the GNU Lesser General Public License cover the combination. + ******************************************************************************/ +package services.gcw; + +import main.NGECore; +import net.engio.mbassy.listener.Handler; +import resources.common.collidables.AbstractCollidable; +import resources.common.collidables.AbstractCollidable.EnterEvent; +import resources.common.collidables.AbstractCollidable.ExitEvent; +import resources.datatables.FactionStatus; +import resources.datatables.PvpStatus; +import resources.objects.creature.CreatureObject; +import engine.resources.scene.Planet; +import engine.resources.scene.Point3D; + +public class PvPZone { + + private Planet planet; + private AbstractCollidable area; + private NGECore core = NGECore.getInstance(); + + + public PvPZone(Planet planet, AbstractCollidable area) { + this.planet = planet; + this.area = area; + area.getEventBus().subscribe(this); + } + + public Planet getPlanet() { + return planet; + } + + public void setPlanet(Planet planet) { + this.planet = planet; + } + + public AbstractCollidable getArea() { + return area; + } + + public void setArea(AbstractCollidable area) { + this.area = area; + } + + public void warpBack(CreatureObject actor) { + if (core.mountService.isMounted(actor)) { + actor = (CreatureObject) actor.getContainer(); + } + core.simulationService.teleport(actor, (Point3D) actor.getAttachment("lastValidPosition"), actor.getOrientation(), actor.getParentId()); + } + + @Handler + public void onEnter(EnterEvent event) { + + CreatureObject actor = (CreatureObject) event.object; + + if(!core.factionService.isPvpFaction(actor.getFaction()) || actor.getFactionStatus() == FactionStatus.OnLeave) { + actor.sendSystemMessage("@gcw:pvp_advanced_region_not_allowed", (byte) 0); + warpBack(actor); + return; + } + + if(actor.getLevel() < 75) { + actor.sendSystemMessage("@gcw:pvp_advanced_region_level_low", (byte) 0); + warpBack(actor); + return; + } + + if(actor.getPvpStatus(PvpStatus.GoingCovert) || actor.getPvpStatus(PvpStatus.GoingOvert)) { + actor.setPvpStatus(PvpStatus.GoingCovert | PvpStatus.GoingOvert, false); + actor.sendSystemMessage("@gcw:pvp_advanced_region_faction_type_change_cancel", (byte) 0); + } + + actor.setFactionStatus(FactionStatus.SpecialForces); + actor.updatePvpStatus(); + actor.sendSystemMessage("@gcw:pvp_advanced_region_entered", (byte) 0); + + } + + @Handler + public void onExit(ExitEvent event) { + + CreatureObject actor = (CreatureObject) event.object; + + actor.updatePvpStatus(); + actor.sendSystemMessage("@gcw:pvp_advanced_region_exited", (byte) 0); + + } + + +} diff --git a/src/services/guild/GuildService.java b/src/services/guild/GuildService.java deleted file mode 100644 index 1e0857c4..00000000 --- a/src/services/guild/GuildService.java +++ /dev/null @@ -1,134 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2013 - * - * This File is part of NGECore2. - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with this program. If not, see . - * - * Using NGEngine to work with NGECore2 is making a combined work based on NGEngine. - * Therefore all terms and conditions of the GNU Lesser General Public License cover the combination. - ******************************************************************************/ -package services.guild; - -import java.util.Map; - -import resources.guild.Guild; -import resources.objects.SWGList; -import resources.objects.guild.GuildObject; - -import main.NGECore; - -import engine.resources.objects.SWGObject; -import engine.resources.service.INetworkDispatch; -import engine.resources.service.INetworkRemoteEvent; - -public class GuildService implements INetworkDispatch { - - private NGECore core; - private GuildObject object; - - public GuildService(NGECore core) { - this.core = core; - - for (SWGObject swgObject : core.objectService.getObjectList().values()) { - if (swgObject.getTemplate().equals("object/guild/shared_guild_object.iff") && swgObject instanceof GuildObject) { - object = (GuildObject) swgObject; - } - } - - if (object == null) { - object = (GuildObject) this.core.objectService.createObject("object/guild/shared_guild_object.iff", core.terrainService.getPlanetList().get(0)); - } - } - - public Guild createGuild(String abbreviation, String name, SWGObject leader) { - int id = ((object.getGuildList().get(object.getGuildList().size()).getId()) + 1); - Guild guild = new Guild(id, abbreviation, name, leader); - - object.getGuildList().add(guild); - - return guild; - } - - public GuildObject getGuildObject() { - return object; - } - - public SWGList getGuildList() { - return object.getGuildList(); - } - - public Guild getGuildById(int id) { - for (int i = 0; i < object.getGuildList().size(); i++) { - if (object.getGuildList().get(i).getId() == id) { - return object.getGuildList().get(i); - } - } - - return null; - } - - public Guild getGuildByAbbreviation(String abbreviation) { - for (int i = 0; i < object.getGuildList().size(); i++) { - if (object.getGuildList().get(i).getAbbreviation().equals(abbreviation)) { - return object.getGuildList().get(i); - } - } - - return null; - } - - public Guild getGuildByName(String name) { - for (int i = 0; i < object.getGuildList().size(); i++) { - if (object.getGuildList().get(i).getName().equals(name)) { - return object.getGuildList().get(i); - } - } - - return null; - } - - public boolean removeGuild(int id) { - Guild guild = getGuildById(id); - - if (guild != null) { - object.getGuildList().add(guild); - return true; - } - - return false; - } - - public boolean removeGuild(String abbreviation) { - Guild guild = getGuildByAbbreviation(abbreviation); - - if (guild != null) { - object.getGuildList().add(guild); - return true; - } - - return false; - } - - @Override - public void insertOpcodes(Map swgOpcodes, Map objControllerOpcodes) { - - } - - @Override - public void shutdown() { - - } - -} diff --git a/src/services/housing/HouseTemplate.java b/src/services/housing/HouseTemplate.java new file mode 100644 index 00000000..78f7715f --- /dev/null +++ b/src/services/housing/HouseTemplate.java @@ -0,0 +1,81 @@ +package services.housing; + +import java.util.HashMap; +import java.util.Map; +import java.util.Vector; + +import engine.resources.scene.Point3D; + +public class HouseTemplate { + + private String deedTemplate; + private String buildingTemplate; + private int lotCost; + private int defaultItemLimit; + private int baseMaintenanceRate; + private Vector placeablePlanets; + private Map buildingSigns; + + public HouseTemplate(String deedTemplate, String buildingTemplate, int lotCost) { + this.deedTemplate = deedTemplate; + this.buildingTemplate = buildingTemplate; + this.lotCost = lotCost; + this.defaultItemLimit = 50; + this.baseMaintenanceRate = 8; + this.placeablePlanets = new Vector(); + this.buildingSigns = new HashMap(); + } + + public void addBuildingSign(String signTemplate, Point3D signPosition) { + buildingSigns.put(signTemplate, signPosition); + } + + public void addPlaceablePlanet(String planetName) { + this.placeablePlanets.add(planetName); + } + + public void setDefaultItemLimit(int itemLimit) { + this.defaultItemLimit = itemLimit; + } + + public String getDeedTemplate() { + return deedTemplate; + } + + public String getBuildingTemplate() { + return buildingTemplate; + } + + public Map getBuildingSigns() { + return buildingSigns; + } + + public Vector getPlaceablePlanets() { + return placeablePlanets; + } + + public boolean canBePlacedOn(String planetName) { + if (placeablePlanets.contains(planetName)) { + return true; + } + + return false; + } + + public int getLotCost() { + return lotCost; + } + + public int getDefaultItemLimit() { + return defaultItemLimit; + } + + public int getBaseMaintenanceRate() { + return baseMaintenanceRate; + } + + public void setBaseMaintenanceRate(int baseMaintenanceRate) { + this.baseMaintenanceRate = baseMaintenanceRate; + } + +} diff --git a/src/services/housing/HousingService.java b/src/services/housing/HousingService.java new file mode 100644 index 00000000..49ab652d --- /dev/null +++ b/src/services/housing/HousingService.java @@ -0,0 +1,782 @@ +/******************************************************************************* + * Copyright (c) 2013 + * + * This File is part of NGECore2. + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see . + * + * Using NGEngine to work with NGECore2 is making a combined work based on NGEngine. + * Therefore all terms and conditions of the GNU Lesser General Public License cover the combination. + ******************************************************************************/ +package services.housing; + +import java.io.IOException; +import java.nio.file.FileVisitResult; +import java.nio.file.FileVisitor; +import java.nio.file.Files; +import java.nio.file.Path; +import java.nio.file.Paths; +import java.nio.file.SimpleFileVisitor; +import java.nio.file.attribute.BasicFileAttributes; +import java.util.HashMap; +import java.util.Map; +import java.util.Random; +import java.util.Vector; +import java.util.concurrent.ConcurrentHashMap; +import main.NGECore; +import protocol.swg.EnterStructurePlacementModeMessage; +import resources.objects.building.BuildingObject; +import resources.objects.creature.CreatureObject; +import resources.objects.player.PlayerObject; +import resources.objects.tangible.TangibleObject; +import services.playercities.PlayerCity; +import services.sui.SUIWindow; +import services.sui.SUIWindow.SUICallback; +import services.sui.SUIWindow.Trigger; +import engine.resources.objects.SWGObject; +import engine.resources.scene.Point3D; +import engine.resources.scene.Quaternion; +import engine.resources.service.INetworkDispatch; +import engine.resources.service.INetworkRemoteEvent; + +public class HousingService implements INetworkDispatch { + + private NGECore core; + private Map housingTemplates = new ConcurrentHashMap(); + private Map houseToDeed = new ConcurrentHashMap(); + + public HousingService(NGECore core) { + this.core = core; + + Path p = Paths.get("scripts/houses/"); + + FileVisitor fv = new SimpleFileVisitor() { + @Override + public FileVisitResult visitFile(Path file, BasicFileAttributes attrs) throws IOException { + core.scriptService.callScript("scripts/houses/", file.getFileName().toString().replace(".py", ""), "setup", housingTemplates); + return FileVisitResult.CONTINUE; + } + }; + + try { + Files.walkFileTree(p, fv); + } catch (IOException e) { + e.printStackTrace(); + } + + housingTemplates.values().forEach((houseTemplate) -> houseToDeed.put(houseTemplate.getBuildingTemplate(), houseTemplate.getDeedTemplate())); + } + + public void enterStructureMode(CreatureObject actor, TangibleObject deed) { + if (!actor.getClient().isGM() && !core.terrainService.canBuildAtPosition(actor, actor.getWorldPosition().x, actor.getWorldPosition().z)) { + actor.sendSystemMessage("You may not place a structure here.", (byte) 0); // should probably load this from an stf + return; + } + + if (housingTemplates.containsKey(deed.getTemplate())) { + HouseTemplate houseTemplate = housingTemplates.get(deed.getTemplate()); + EnterStructurePlacementModeMessage packet = new EnterStructurePlacementModeMessage(deed, houseTemplate.getBuildingTemplate()); + actor.getClient().getSession().write(packet.serialize()); + } + } + + public void placeStructure(final CreatureObject actor, TangibleObject deed, float positionX, float positionZ, float rotation) { + HouseTemplate houseTemplate = housingTemplates.get(deed.getTemplate()); + int structureLotCost = houseTemplate.getLotCost(); + String structureTemplate = houseTemplate.getBuildingTemplate(); + + if (!houseTemplate.canBePlacedOn(actor.getPlanet().getName())) { + actor.sendSystemMessage("You may not place this structure on this planet.", (byte) 0); // should probably load this from an stf + return; + } + + if(!actor.getClient().isGM() && !core.terrainService.canBuildAtPosition(actor, positionX, positionZ)) { + actor.sendSystemMessage("You may not place a structure here.", (byte) 0); // should probably load this from an stf + return; + } + + // Lot stuff + if (!actor.getPlayerObject().deductLots(structureLotCost)) { + actor.sendSystemMessage("You do not have enough available lots to place this structure.", (byte) 0); // should probably load this from an stf + return; + } + + // Calculate our orientation and height + Quaternion quaternion = new Quaternion(1, 0, 0, 0); + quaternion = resources.common.MathUtilities.rotateQuaternion(quaternion, (float)((Math.PI/2) * rotation), new Point3D(0, 1, 0)); + + float positionY = core.terrainService.getHeight(actor.getPlanetId(), positionX, positionZ) + 2f; + + // Create the building + BuildingObject building = (BuildingObject) core.objectService.createObject(structureTemplate, 0, actor.getPlanet(), new Point3D(positionX, positionY, positionZ), quaternion); + core.simulationService.add(building, building.getPosition().x, building.getPosition().z, true); + + // Name the sign + TangibleObject sign = (TangibleObject) building.getAttachment("structureSign"); + String playerFirstName = actor.getCustomName().split(" ")[0]; + + if (sign != null) { + sign.setCustomName(playerFirstName + "'s House"); + } + + //building.add(sign); + + core.objectService.destroyObject(deed); + + // Structure management + Vector admins = new Vector<>(); + admins.add(actor.getObjectID()); + + building.setAttachment("sign", sign); // meh workaround + building.setAttachment("structureOwner", actor.getObjectID()); + building.setAttachment("structureAdmins", admins); + building.setDeedTemplate(deed.getTemplate()); + building.setMaintenanceAmount(houseTemplate.getBaseMaintenanceRate()); + building.setConditionDamage(100); // Ouch + + if (structureTemplate.contains("cityhall")){ + PlayerCity newCity = core.playerCityService.addNewPlayerCity(actor); + building.setAttachment("structureCity", newCity.getCityID()); + actor.setAttachment("residentCity", newCity.getCityID()); + } + + // Check for city founders joining a new city + PlayerCity cityActorIsIn = core.playerCityService.getCityObjectIsIn(actor); + + if (cityActorIsIn!=null){ + actor.setAttachment("Has24HZoningFor",cityActorIsIn.getCityID()); // for testing + + int cityActorHasZoning = (int)actor.getAttachment("Has24HZoningFor"); + if (cityActorIsIn!=null && cityActorHasZoning==cityActorIsIn.getCityID()){ + if (! cityActorIsIn.getCitizens().contains(actor.getObjectID())){ + building.setAttachment("structureCity", cityActorIsIn.getCityID()); + // actor.setAttachment("residentCity", cityActorIsIn.getCityID()); He must do it manually + cityActorIsIn.addCitizen(actor.getObjectID()); + cityActorIsIn.addNewStructure(building.getObjectID()); + } + } + } + + core.objectService.persistObject(building.getObjectID(), building, core.getSWGObjectODB()); + + } + + public void saveBuildings() { + core.objectService.getObjectList() + .values().stream() + .filter(obj -> obj instanceof BuildingObject && obj.getAttachment("structureOwner") != null) + .forEach(building -> core.objectService.persistObject(building.getObjectID(), building, core.getSWGObjectODB())); + } + + @SuppressWarnings("unchecked") + public boolean getPermissions(SWGObject player, SWGObject container) { + SWGObject structure = container.getContainer(); + Vector structureAdmins = (Vector) structure.getAttachment("structureAdmins"); + + if (structureAdmins != null && structureAdmins.contains(player.getObjectID())) { + return true; + } + + return false; + } + + public void createDestroySUIPage(final SWGObject owner, final TangibleObject target) { + + final BuildingObject building = (BuildingObject) target.getGrandparent(); + //final BuildingObject building = (BuildingObject) target.getAttachment("housing_parentstruct"); + //final BuildingObject building = (BuildingObject) core.objectService.getObject(target.getParentId()); + // harvester.getStfFilename(); installation_n .getTemplate(); + + if (building.getItemsList().size()>0){ + ((CreatureObject) owner).sendSystemMessage("@player_structure:clear_building_for_delete", (byte)1); + } + + String displayname = "@installation_n:"+building.getStfName(); + if (building.getCustomName()!=null) + displayname = building.getCustomName(); + final SUIWindow window = core.suiService.createSUIWindow("Script.listBox", owner, target, 0); + window.setProperty("bg.caption.lblTitle:Text", displayname); + window.setProperty("Prompt.lblPrompt:Text", "@player_structure:confirm_destruction_d1 " + + "@player_structure:confirm_destruction_d2 " + + "\n \n @player_structure:confirm_destruction_d3a " + + "\\#32CD32 @player_structure:confirm_destruction_d3b \\#FFFFFF " + + "@player_structure:confirm_destruction_d4 "); + if (building.getConditionDamage()<20 && building.getMaintenanceAmount()<3000){ + window.addListBoxMenuItem("@player_structure:redeed_confirmation \\#BB0000 @player_structure:can_redeed_no_suffix \\#FFFFFF ",1 ); + } else { + window.addListBoxMenuItem("@player_structure:redeed_confirmation \\#32CD32 @player_structure:can_redeed_yes_suffix \\#FFFFFF ",1 ); + } + if (building.getConditionDamage()<20){ + window.addListBoxMenuItem("@player_structure:redeed_condition \\#BB0000 " + building.getConditionDamage() + " \\#FFFFFF ",1 ); + } else { + window.addListBoxMenuItem("@player_structure:redeed_condition \\#32CD32 " + building.getConditionDamage() + " \\#FFFFFF ",1 ); + } + if (building.getMaintenanceAmount()<0){ + window.addListBoxMenuItem("@player_structure:redeed_maintenance \\#BB0000 " + (int)building.getMaintenanceAmount() + " \\#FFFFFF ",2 ); + } else { + window.addListBoxMenuItem("@player_structure:redeed_maintenance \\#32CD32 " + (int)building.getMaintenanceAmount() + " \\#FFFFFF ",2 ); + } + window.setProperty("btnOk:visible", "True"); + window.setProperty("btnCancel:visible", "True"); + window.setProperty("btnOk:Text", "@yes"); + window.setProperty("btnCancel:Text", "@no"); + Vector returnList = new Vector(); + returnList.add("List.lstList:SelectedRow"); + window.addHandler(0, "", Trigger.TRIGGER_OK, returnList, new SUICallback() { + @Override + public void process(SWGObject owner, int eventType, Vector returnList) { + core.suiService.closeSUIWindow(owner, 0); + createCodeWindow(owner, target); + } + }); + window.addHandler(1, "", Trigger.TRIGGER_CANCEL, returnList, new SUICallback() { + @Override + public void process(SWGObject owner, int eventType, Vector returnList) { + core.suiService.closeSUIWindow(owner, 0); + } + }); + core.suiService.openSUIWindow(window); + } + + public void createCodeWindow(SWGObject owner, TangibleObject target) { + + final BuildingObject building = (BuildingObject) target.getGrandparent(); + //final BuildingObject building = (BuildingObject) target.getAttachment("housing_parentstruct"); + //final BuildingObject building = (BuildingObject)target; + Random rnd = new Random(); + final int confirmCode = 100000 + rnd.nextInt(900000); + final SUIWindow window = core.suiService.createInputBox(2,"@player_structure:structure_status","@player_structure:structure_name_prompt", owner, target, 0); + window.setProperty("bg.caption.lblTitle:Text", "@player_structure:confirm_destruction_t"); + window.setProperty("Prompt.lblPrompt:Text", "@player_structure:your_structure_prefix " + + "\\#32CD32 @player_structure:will_redeed_confirm \\#FFFFFF "+ + "@player_structure:will_redeed_suffix " + + "\n \n Code: " + confirmCode); + + window.setProperty("btnOk:visible", "True"); + window.setProperty("btnCancel:visible", "True"); + window.setProperty("btnOk:Text", "@yes"); + window.setProperty("btnCancel:Text", "@no"); + Vector returnList = new Vector(); + returnList.add("txtInput:LocalText"); + + window.addHandler(0, "", Trigger.TRIGGER_OK, returnList, new SUICallback() { + @Override + public void process(SWGObject owner, int eventType, Vector returnList) { + CreatureObject crafter = (CreatureObject)owner; + core.suiService.closeSUIWindow(owner, 0); + if (returnList.get(0).equals(""+confirmCode)){ + // handle creation of correct deed in player inventory + PlayerObject player = (PlayerObject) crafter.getSlottedObject("ghost"); + HouseTemplate houseTemplate = housingTemplates.get(houseToDeed.get(building.getTemplate())); + + TangibleObject deed = (TangibleObject) core.objectService.createObject(houseTemplate.getDeedTemplate(), owner.getPlanet()); + + if (player.getLotsRemaining() + houseTemplate.getLotCost() > 10){ + // Something went wrong or hacking attempt + crafter.sendSystemMessage("Structure can't be redeeded. Maximum lot count exceeded.",(byte)1); + return; + } + + deed.setIntAttribute("@obj_attr_n:examine_maintenance_rate", houseTemplate.getBaseMaintenanceRate()); + deed.setIntAttribute("@obj_attr_n:examine_maintenance", (int) building.getMaintenanceAmount()); + + core.objectService.destroyObject(building.getObjectID()); + + SWGObject ownerInventory = owner.getSlottedObject("inventory"); + ownerInventory.add(deed); + + if (player.getLotsRemaining() + houseTemplate.getLotCost() <= 10) { + player.setLotsRemaining(player.getLotsRemaining() + houseTemplate.getLotCost()); + } + + crafter.sendSystemMessage("@player_structure:processing_destruction",(byte)1); + crafter.sendSystemMessage("@player_structure:deed_reclaimed",(byte)1); + + } else { + crafter.sendSystemMessage("@player_structure:incorrect_destroy_code",(byte)1); + } + + } + }); + window.addHandler(1, "", Trigger.TRIGGER_CANCEL, returnList, new SUICallback() { + @Override + public void process(SWGObject owner, int eventType, Vector returnList) { + core.suiService.closeSUIWindow(owner, 0); + } + }); + core.suiService.openSUIWindow(window); + } + + public void createPayMaintenanceSUIPage(SWGObject owner, TangibleObject target) { + CreatureObject creature = (CreatureObject) owner; + final BuildingObject building = (BuildingObject) target.getGrandparent(); + //final BuildingObject building = (BuildingObject) target.getAttachment("housing_parentstruct"); + final SUIWindow window = core.suiService.createSUIWindow("Script.transfer", owner, target, 10); + window.setProperty("bg.caption.lblTitle:Text", "@player_structure:select_amount"); + window.setProperty("Prompt.lblPrompt:Text", "@player_structure:select_maint_amount" + + "\n \n @player_structure:current_maint_pool : " + (int)building.getMaintenanceAmount()); + + window.setProperty("msgPayMaintenance", "transaction.txtInputFrom"); + + window.setProperty("transaction.lblFrom:Text", "@player_structure:total_funds"); + window.setProperty("transaction.lblTo:Text", "@player_structure:to_pay"); + window.setProperty("transaction.lblFrom", "@player_structure:total_funds"); + window.setProperty("transaction.lblTo", "@player_structure:to_pay"); + + window.setProperty("transaction.lblStartingFrom:Text", ""+creature.getCashCredits()); + window.setProperty("transaction.lblStartingTo:Text", "0"); + + window.setProperty("transaction:InputFrom", "555555"); + window.setProperty("transaction:InputTo", "666666"); + + window.setProperty("transaction:txtInputFrom", ""+creature.getCashCredits()); + window.setProperty("transaction:txtInputTo", "1"); + window.setProperty("transaction.txtInputFrom:Text", ""+creature.getCashCredits()); + window.setProperty("transaction.txtInputTo:Text", "" + "0"); + + window.setProperty("transaction.ConversionRatioFrom", "1"); + window.setProperty("transaction.ConversionRatioTo", "0"); + + window.setProperty("btnOk:visible", "True"); + window.setProperty("btnCancel:visible", "True"); + window.setProperty("btnOk:Text", "@ok"); + window.setProperty("btnCancel:Text", "@cancel"); + + Vector returnList = new Vector(); + returnList.add("transaction.txtInputFrom:Text"); + returnList.add("transaction.txtInputTo:Text"); + window.addHandler(0, "", Trigger.TRIGGER_OK, returnList, new SUICallback() { + @Override + public void process(SWGObject owner, int eventType, Vector returnList) { + CreatureObject crafter = (CreatureObject)owner; + crafter.setCashCredits(crafter.getCashCredits() - Integer.parseInt(returnList.get(1))); + building.setMaintenanceAmount(building.getMaintenanceAmount()+Float.parseFloat(returnList.get(1))); + String displayname = "the structure"; + if (building.getCustomName()!=null) + displayname = building.getCustomName(); + crafter.sendSystemMessage("You successfully make a payment of " + Integer.parseInt(returnList.get(1)) + " credits to " + displayname + ".", (byte) 0); + core.suiService.closeSUIWindow(owner, 0); + } + }); + window.addHandler(1, "", Trigger.TRIGGER_CANCEL, returnList, new SUICallback() { + @Override + public void process(SWGObject owner, int eventType, Vector returnList) { + core.suiService.closeSUIWindow(owner, 0); + } + }); + core.suiService.openSUIWindow(window); + } + + public void createRenameSUIPage(SWGObject owner, TangibleObject target) { + final SUIWindow window = core.suiService.createInputBox(2,"@player_structure:structure_status","@player_structure:structure_name_prompt", owner, target, 0); + Vector returnList = new Vector(); + returnList.add("txtInput:LocalText"); + final TangibleObject outerSurveyTool = target; + window.addHandler(0, "", Trigger.TRIGGER_OK, returnList, new SUICallback() { + @Override + public void process(SWGObject owner, int eventType, Vector returnList) { + core.housingService.handleSetName((CreatureObject)owner, (TangibleObject)outerSurveyTool,returnList.get(0)); + core.suiService.closeSUIWindow(owner, 0); + } + }); + core.suiService.openSUIWindow(window); + } + + public void handleSetName(CreatureObject owner, TangibleObject target,String name) { + + ((BuildingObject) target).setBuildingName(name,owner); + } + + public void createStatusSUIPage(SWGObject owner, TangibleObject target) { + final BuildingObject building = (BuildingObject) target.getGrandparent(); + //final BuildingObject building = (BuildingObject) target.getAttachment("housing_parentstruct"); + String displayname = "@installation_n:"+building.getStfName(); + if (building.getCustomName()!=null) + displayname = building.getCustomName(); + final SUIWindow window = core.suiService.createSUIWindow("Script.listBox", owner, target, 0); + window.setProperty("bg.caption.lblTitle:Text", "@player_structure:structure_status_t"); + window.setProperty("Prompt.lblPrompt:Text", "@player_structure:structure_name_prompt" + " " + displayname); + String ownerName = owner.getCustomName(); + if (ownerName.length()>0){ + String[] helper = ownerName.split(" "); + ownerName = helper[0]; + } + + String maintenancePool_string = ""+(int)building.getMaintenanceAmount(); + int hourlyMaintenance = building.getBMR(); + float totalNumberOfHours = (float)building.getMaintenanceAmount()/hourlyMaintenance; + float minuteFraction = ((totalNumberOfHours * 100) % 100) / 100; + int nDays = (int)totalNumberOfHours / 24; + float difference = totalNumberOfHours % 24; + int nHours = (int)difference; + int nMinutes = (int)(minuteFraction *60); + maintenancePool_string += " (" + nDays + " days, " + nHours + " hours, " + nMinutes + " minutes)"; + + window.addListBoxMenuItem("@player_structure:owner_prompt" + " " + ownerName, 0); + if (building.getPrivacy()==BuildingObject.PRIVATE) + window.addListBoxMenuItem("@player_structure:structure_private", 1); + else + window.addListBoxMenuItem("@player_structure:structure_public", 1); + window.addListBoxMenuItem("@player_structure:condition_prompt" + " " + target.getConditionDamage()+"%", 2); + window.addListBoxMenuItem("@player_structure:maintenance_pool_prompt " + maintenancePool_string, 3); + window.addListBoxMenuItem("@player_structure:maintenance_rate_prompt " + building.getBMR() + " cr/h", 4); // @player_structure:credits_per_hour + window.addListBoxMenuItem("@player_structure:maintenance_mods_prompt", 5); + window.addListBoxMenuItem("@player_structure:items_in_building_prompt " + building.getItemsList().size(), 6); + window.addListBoxMenuItem("@player_structure:total_house_storage " + building.getMaximumStorageCapacity(), 7); + + window.setProperty("btnOk:visible", "True"); + window.setProperty("btnCancel:visible", "True"); + window.setProperty("btnOk:Text", "@ok"); + window.setProperty("btnCancel:Text", "@cancel"); + Vector returnList = new Vector(); + returnList.add("List.lstList:SelectedRow"); + + window.addHandler(0, "", Trigger.TRIGGER_OK, returnList, new SUICallback() { + @Override + public void process(SWGObject owner, int eventType, Vector returnList) { + core.suiService.closeSUIWindow(owner, 0); + } + }); + core.suiService.openSUIWindow(window); + } + + public void declareResidency(SWGObject owner, TangibleObject target) { + final BuildingObject building = (BuildingObject) target.getGrandparent(); + //final BuildingObject building = (BuildingObject) target.getAttachment("housing_parentstruct"); + building.setResidency((CreatureObject)owner); + PlayerCity cityActorIsIn = core.playerCityService.getCityObjectIsIn(owner); + owner.setAttachment("residentCity", cityActorIsIn.getCityID()); + //owner.setResidence(); + } + + public void handleListAllItems(SWGObject owner, TangibleObject target) { + final BuildingObject building = (BuildingObject) target.getGrandparent(); + //final BuildingObject building = (BuildingObject) target.getAttachment("housing_parentstruct"); + String displayname = "@installation_n:"+building.getStfName(); + if (building.getCustomName()!=null) + displayname = building.getCustomName(); + final SUIWindow window = core.suiService.createSUIWindow("Script.listBox", owner, target, 0); + window.setProperty("bg.caption.lblTitle:Text", "@player_structure:find_items_find_all_house_items"); + window.setProperty("Prompt.lblPrompt:Text", "@player_structure:find_items_prompt"); + + Vector itemList = building.getItemsList(); + + for (int i=0;i returnList = new Vector(); + returnList.add("List.lstList:SelectedRow"); + window.addHandler(0, "", Trigger.TRIGGER_OK, returnList, new SUICallback() { + @Override + public void process(SWGObject owner, int eventType, Vector returnList) { + core.suiService.closeSUIWindow(owner, 0); + } + }); + core.suiService.openSUIWindow(window); + + + } + + public void handleDeleteAllItems(SWGObject owner, TangibleObject target) { + final BuildingObject building = (BuildingObject) target.getGrandparent(); + //final BuildingObject building = (BuildingObject) target.getAttachment("housing_parentstruct"); + //building.getItemsList().clear(); + // confirmation needed + confirmDeleteAllItems(owner, target); + } + + public void confirmDeleteAllItems(SWGObject owner, TangibleObject target) { + + final BuildingObject building = (BuildingObject) target.getGrandparent(); + //final BuildingObject building = (BuildingObject) target.getAttachment("housing_parentstruct"); + + Random rnd = new Random(); + final int confirmCode = 100000 + rnd.nextInt(900000); + final SUIWindow window = core.suiService.createInputBox(2,"@player_structure:structure_status","@player_structure:structure_name_prompt", owner, target, 0); + window.setProperty("bg.caption.lblTitle:Text", "@player_structure:confirm_destruction_t"); + window.setProperty("Prompt.lblPrompt:Text", "@player_structure:delete_all_items_d " + + "@player_structure:delete_all_items_prompt " + + "\n \n Code: " + confirmCode); + + window.setProperty("btnOk:visible", "True"); + window.setProperty("btnCancel:visible", "True"); + window.setProperty("btnOk:Text", "@yes"); + window.setProperty("btnCancel:Text", "@no"); + Vector returnList = new Vector(); + returnList.add("txtInput:LocalText"); + + window.addHandler(0, "", Trigger.TRIGGER_OK, returnList, new SUICallback() { + @Override + public void process(SWGObject owner, int eventType, Vector returnList) { + CreatureObject ownerC = (CreatureObject)owner; + core.suiService.closeSUIWindow(owner, 0); + if (returnList.get(0).equals(""+confirmCode)){ + confirmDeleteAllItems2ndStage(ownerC,building); + } else { + ownerC.sendSystemMessage("@player_structure:incorrect_destroy_code",(byte)1); + } + + } + }); + window.addHandler(1, "", Trigger.TRIGGER_CANCEL, returnList, new SUICallback() { + @Override + public void process(SWGObject owner, int eventType, Vector returnList) { + core.suiService.closeSUIWindow(owner, 0); + } + }); + core.suiService.openSUIWindow(window); + } + + public void confirmDeleteAllItems2ndStage(final CreatureObject ownerC, BuildingObject building) { + + final SUIWindow window = core.suiService.createMessageBox(2,"@player_structure:structure_status","@player_structure:structure_name_prompt", ownerC, building, 0); + window.setProperty("bg.caption.lblTitle:Text", "@player_structure:confirm_destruction_t"); + window.setProperty("Prompt.lblPrompt:Text", "@player_structure:delete_all_items_second_d"); + + window.setProperty("btnOk:visible", "True"); + window.setProperty("btnCancel:visible", "True"); + window.setProperty("btnOk:Text", "@yes"); + window.setProperty("btnCancel:Text", "@no"); + Vector returnList = new Vector(); + + window.addHandler(0, "", Trigger.TRIGGER_OK, returnList, new SUICallback() { + @Override + public void process(SWGObject owner, int eventType, Vector returnList) { + for (TangibleObject del : building.getItemsList()){ + core.objectService.destroyObject(del); + } + ownerC.sendSystemMessage("@player_structure:items_deleted",(byte)1); + core.suiService.closeSUIWindow(owner, 0); + } + }); + window.addHandler(1, "", Trigger.TRIGGER_CANCEL, returnList, new SUICallback() { + @Override + public void process(SWGObject owner, int eventType, Vector returnList) { + core.suiService.closeSUIWindow(owner, 0); + } + }); + core.suiService.openSUIWindow(window); + } + + public void handleFindLostItems(SWGObject owner, TangibleObject target) { + final BuildingObject building = (BuildingObject) target.getGrandparent(); + //final BuildingObject building = (BuildingObject) target.getAttachment("housing_parentstruct"); + String displayname = "@installation_n:"+building.getStfName(); + if (building.getCustomName()!=null) + displayname = building.getCustomName(); + final SUIWindow window = core.suiService.createSUIWindow("Script.listBox", owner, target, 0); + window.setProperty("bg.caption.lblTitle:Text", "@player_structure:find_items_find_all_house_items"); + window.setProperty("Prompt.lblPrompt:Text", "@player_structure:structure_name_prompt" + " " + displayname); + + Vector itemList = building.getItemsList(); + final Map itemIDMapping = new HashMap(); + + for (int i=0;i returnList = new Vector(); + returnList.add("List.lstList:SelectedRow"); + window.addHandler(0, "", Trigger.TRIGGER_OK, returnList, new SUICallback() { + @Override + public void process(SWGObject owner, int eventType, Vector returnList) { + + int index = Integer.parseInt(returnList.get(0)); + long foundItemID = (long) itemIDMapping.get(index); + TangibleObject foundItem = (TangibleObject) core.objectService.getObject(foundItemID); + //core.simulationService.transform(foundItem,owner.getPosition()); + foundItem.setPosition(owner.getPosition()); + core.suiService.closeSUIWindow(owner, 0); + } + }); + window.addHandler(1, "", Trigger.TRIGGER_CANCEL, returnList, new SUICallback() { + @Override + public void process(SWGObject owner, int eventType, Vector returnList) { + core.suiService.closeSUIWindow(owner, 0); + } + }); + core.suiService.openSUIWindow(window); + + + } + + public void handleSearchForItems(SWGObject owner, TangibleObject target) { + + final BuildingObject building = (BuildingObject) target.getGrandparent(); + //final BuildingObject building = (BuildingObject) target.getAttachment("housing_parentstruct"); + final SUIWindow window = core.suiService.createInputBox(2,"@player_structure:structure_status","@player_structure:structure_name_prompt", owner, target, 0); + window.setProperty("bg.caption.lblTitle:Text", "@player_structure:find_items_search_keyword_title"); + window.setProperty("Prompt.lblPrompt:Text", "@player_structure:find_items_search_keyword_prompt"); + + window.setProperty("btnOk:visible", "True"); + window.setProperty("btnCancel:visible", "True"); + window.setProperty("btnOk:Text", "@ok"); + window.setProperty("btnCancel:Text", "@cancel"); + Vector returnList = new Vector(); + returnList.add("txtInput:LocalText"); + window.addHandler(0, "", Trigger.TRIGGER_OK, returnList, new SUICallback() { + @Override + public void process(SWGObject owner, int eventType, Vector returnList) { + + String itemSearchName = (String) returnList.get(0); + Vector allItems = building.getItemsList(); + Vector foundItems = new Vector(); + + for (TangibleObject obj : allItems){ + String searchAttribute=obj.getCustomName(); + if (searchAttribute==null) + searchAttribute=obj.getTemplate(); + if (searchAttribute.toLowerCase().contains(itemSearchName.toLowerCase())){ + foundItems.add(obj); + } + } + if (foundItems.size()>0){ + ((CreatureObject) owner).sendSystemMessage("@player_structure:find_items_search_list_title", (byte) 1); + displayFoundItems(owner, target, foundItems); + } else { + ((CreatureObject) owner).sendSystemMessage("@player_structure:find_items_search_not_found", (byte) 1); + } + core.suiService.closeSUIWindow(owner, 0); + } + }); + window.addHandler(1, "", Trigger.TRIGGER_CANCEL, returnList, new SUICallback() { + @Override + public void process(SWGObject owner, int eventType, Vector returnList) { + core.suiService.closeSUIWindow(owner, 0); + } + }); + core.suiService.openSUIWindow(window); + } + + public void displayFoundItems(SWGObject owner, TangibleObject target, Vector foundItems) { + final BuildingObject building = (BuildingObject) target.getGrandparent(); + //final BuildingObject building = (BuildingObject) target.getAttachment("housing_parentstruct"); + final SUIWindow window = core.suiService.createSUIWindow("Script.listBox", owner, target, 0); + window.setProperty("bg.caption.lblTitle:Text", "@player_structure:find_items_search_keyword_title"); + window.setProperty("Prompt.lblPrompt:Text", "@player_structure:find_items_search_list_prompt"); + + Vector itemList = building.getItemsList(); + + final Map itemIDMapping = new HashMap(); + + for (int i=0;i returnList = new Vector(); + returnList.add("List.lstList:SelectedRow"); + window.addHandler(0, "", Trigger.TRIGGER_OK, returnList, new SUICallback() { + @Override + public void process(SWGObject owner, int eventType, Vector returnList) { + core.suiService.closeSUIWindow(owner, 0); + } + }); + window.addHandler(1, "", Trigger.TRIGGER_CANCEL, returnList, new SUICallback() { + @Override + public void process(SWGObject owner, int eventType, Vector returnList) { + core.suiService.closeSUIWindow(owner, 0); + } + }); + core.suiService.openSUIWindow(window); + } + + public void handlePermissionEntry(CreatureObject owner, TangibleObject target) { + final BuildingObject building = (BuildingObject) target.getGrandparent(); + //final BuildingObject building = (BuildingObject) target.getAttachment("housing_parentstruct"); + String listName = "ENTRY"; + building.setPermissionEntry(listName,owner); + } + + public void handlePermissionBan(CreatureObject owner, TangibleObject target) { + final BuildingObject building = (BuildingObject) target.getGrandparent(); + //final BuildingObject building = (BuildingObject) target.getAttachment("housing_parentstruct"); + String listName = "BAN"; + building.setPermissionBan(listName,owner); + } + + public void handlePermissionListModify(CreatureObject owner, SWGObject target, String commandArgs){ + + String[] commandSplit = commandArgs.split(" "); + if (commandSplit.length==3){ + if (core.characterService.playerExists(commandSplit[2]) && + core.characterService.getPlayerOID(commandSplit[2])>0){ + long playerOID = core.characterService.getPlayerOID(commandSplit[2]); + if (commandSplit[2].equals("ENTRY")){ + + if (commandSplit[0].equals("add")){ + ((BuildingObject)target).addPlayerToEntryList(owner, playerOID, commandSplit[2]); + } + if (commandSplit[0].equals("remove")){ + ((BuildingObject)target).removePlayerFromEntryList(owner, playerOID, commandSplit[2]); + } + } + if (commandSplit[2].equals("BAN")){ + + if (commandSplit[0].equals("add")){ + ((BuildingObject)target).addPlayerToBanList(owner, playerOID, commandSplit[2]); + } + if (commandSplit[0].equals("remove")){ + ((BuildingObject)target).removePlayerFromBanList(owner, playerOID, commandSplit[2]); + } + } + } else { + owner.sendSystemMessage(commandSplit[2]+ " is an invalid player name", (byte) 0); // modify_list_invalid_player %NO is an invalid player name. + } + } + if (commandSplit.length==2){ + owner.sendSystemMessage("No name was entered", (byte) 0); + } + + } + + public String fetchPrivacyString(TangibleObject object){ + //final BuildingObject building = (BuildingObject) object.getAttachment("housing_parentstruct"); + //return building.getPrivacyString(); + return ((BuildingObject) object.getGrandparent()).getPrivacyString(); + } + + + @Override + public void insertOpcodes(Map arg0, + Map arg1) { + // TODO Auto-generated method stub + + } + + @Override + public void shutdown() { + + } +} \ No newline at end of file diff --git a/src/services/map/MapService.java b/src/services/map/MapService.java index 29a6d1fe..007f4281 100644 --- a/src/services/map/MapService.java +++ b/src/services/map/MapService.java @@ -78,7 +78,7 @@ public class MapService implements INetworkDispatch { if(planet == null) return;*/ - Client client = core.getClient((Integer) session.getAttribute("connectionId")); + Client client = core.getClient(session); if(client == null || client.getSession() == null) return; @@ -105,7 +105,7 @@ public class MapService implements INetworkDispatch { public void addPlanet(Planet planet) { locationMap.put(planet, new Vector()); - core.scriptService.callScript("scripts/", "addLocations", "static_map_locations", core, planet); + core.scriptService.callScript("scripts/", "static_map_locations", "addLocations", core, planet); } public void addLocation(Planet planet, String name, float x, float y, byte category, byte subcategory, byte active) { @@ -117,6 +117,9 @@ public class MapService implements INetworkDispatch { public String getClosestCityName(SWGObject object) { + if(object.getPlanet() == null) + object.setPlanet(core.terrainService.getPlanetByID(object.getPlanetId())); + Vector locations = locationMap.get(object.getPlanet()); float closestDistance = Float.MAX_VALUE; String closestName = ""; diff --git a/src/services/mission/MissionObjective.java b/src/services/mission/MissionObjective.java new file mode 100644 index 00000000..df07879a --- /dev/null +++ b/src/services/mission/MissionObjective.java @@ -0,0 +1,65 @@ +/******************************************************************************* + * Copyright (c) 2013 + * + * This File is part of NGECore2. + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see . + * + * Using NGEngine to work with NGECore2 is making a combined work based on NGEngine. + * Therefore all terms and conditions of the GNU Lesser General Public License cover the combination. + ******************************************************************************/ +package services.mission; + +import java.io.Serializable; +import main.NGECore; + +import com.sleepycat.persist.model.Persistent; + +import resources.objects.creature.CreatureObject; +import resources.objects.mission.MissionObject; + +@Persistent(version=0) +public abstract class MissionObjective implements Serializable { + + private static final long serialVersionUID = 1L; + + protected long startTime; + protected boolean activated; + protected MissionObject parent; + private int objectivePhase; + + public MissionObjective() { } + + public MissionObjective(MissionObject parent) { + this.startTime = System.currentTimeMillis(); + this.activated = false; + this.parent = parent; + this.objectivePhase = 0; + } + + public abstract void activate(NGECore core, CreatureObject player); + public abstract void complete(NGECore core, CreatureObject player); + public abstract void abort(NGECore core, CreatureObject player); + public abstract void update(NGECore core, CreatureObject player); + + public long getStartTime() { return startTime; } + + public boolean isActivated() { return activated; } + public void setActive(boolean isActive) { this.activated = isActive; } + + public MissionObject getMissionObject() { return parent; } + + public int getObjectivePhase() { return objectivePhase; } + public void setObjectivePhase(int phase) { this.objectivePhase = phase; } +} diff --git a/src/services/mission/MissionService.java b/src/services/mission/MissionService.java new file mode 100644 index 00000000..60af71ec --- /dev/null +++ b/src/services/mission/MissionService.java @@ -0,0 +1,680 @@ +/******************************************************************************* + * Copyright (c) 2013 + * + * This File is part of NGECore2. + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see . + * + * Using NGEngine to work with NGECore2 is making a combined work based on NGEngine. + * Therefore all terms and conditions of the GNU Lesser General Public License cover the combination. + ******************************************************************************/ +package services.mission; + +import java.io.File; +import java.io.IOException; +import java.nio.ByteOrder; +import java.util.ArrayList; +import java.util.List; +import java.util.Map; +import java.util.Random; +import java.util.Vector; +import java.util.concurrent.ConcurrentHashMap; +import java.util.concurrent.atomic.AtomicBoolean; +import java.util.concurrent.atomic.AtomicInteger; + +import main.NGECore; + +import org.apache.mina.core.buffer.IoBuffer; +import org.apache.mina.core.session.IoSession; + +import protocol.swg.ObjControllerMessage; +import protocol.swg.objectControllerObjects.MissionAbort; +import protocol.swg.objectControllerObjects.MissionAcceptRequest; +import protocol.swg.objectControllerObjects.MissionAcceptResponse; +import protocol.swg.objectControllerObjects.MissionListRequest; +import resources.common.BountyListItem; +import resources.common.SpawnPoint; +import resources.common.ObjControllerOpcodes; +import resources.objectives.BountyMissionObjective; +import resources.objectives.DeliveryMissionObjective; +import resources.objectives.DestroyMissionObjective; +import resources.objectives.SurveyMissionObjective; +import resources.objects.creature.CreatureObject; +import resources.objects.mission.MissionObject; +import resources.objects.player.PlayerObject; +import resources.objects.resource.GalacticResource; +import resources.objects.resource.ResourceRoot; +import resources.objects.tangible.TangibleObject; +import engine.clientdata.StfTable; +import engine.clients.Client; +import engine.resources.common.CRC; +import engine.resources.common.NameGen; +import engine.resources.container.Traverser; +import engine.resources.database.ODBCursor; +import engine.resources.database.ObjectDatabase; +import engine.resources.objects.SWGObject; +import engine.resources.scene.Point3D; +import engine.resources.service.INetworkDispatch; +import engine.resources.service.INetworkRemoteEvent; + +public class MissionService implements INetworkDispatch { + + private NGECore core; + private NameGen nameGenerator; + // Use a HashMap for obtaining number of entries so we aren't using a visitor all the time. + private Map entryCounts = new ConcurrentHashMap(); + private Map bountyMap = new ConcurrentHashMap(); + private ObjectDatabase bountiesODB; + private Random ran = new Random(); + + public MissionService(NGECore core) { + this.core = core; + + try { nameGenerator = new NameGen("names.txt"); } + catch (IOException e) { e.printStackTrace(); } + + loadMissionEntryCounts(); + + bountiesODB = core.getBountiesODB(); + + cleanupBounties(); // delete any characters from the bounties odb if they no longer exist. + } + + @Override + public void insertOpcodes(Map swgOpcodes, Map objControllerOpcodes) { + + objControllerOpcodes.put(ObjControllerOpcodes.MISSION_ABORT, new INetworkRemoteEvent() { + + @Override + public void handlePacket(IoSession session, IoBuffer data) throws Exception { + Client client = core.getClient(session); + + if(client == null || client.getSession() == null) + return; + + CreatureObject creature = (CreatureObject) client.getParent(); + + if(creature == null) + return; + + data.order(ByteOrder.LITTLE_ENDIAN); + MissionAbort abort = new MissionAbort(); + abort.deserialize(data); + + MissionObject mission = (MissionObject) core.objectService.getObject(abort.getMissionId()); + + if (mission == null) + return; + + if (mission.getGrandparent().getObjectId() != creature.getObjectId()) + return; + + handleMissionAbort(creature, mission); + } + + }); + + objControllerOpcodes.put(ObjControllerOpcodes.MISSION_LIST_REQUEST, new INetworkRemoteEvent() { + + @Override + public void handlePacket(IoSession session, IoBuffer data) throws Exception { + Client client = core.getClient(session); + + if(client == null || client.getSession() == null) + return; + + CreatureObject object = (CreatureObject) client.getParent(); + + if(object == null) + return; + + data.order(ByteOrder.LITTLE_ENDIAN); + + MissionListRequest request = new MissionListRequest(); + request.deserialize(data); + + SWGObject terminal = core.objectService.getObject(request.getTerminalId()); + + if (terminal.getAttachment("terminalType") == null) + return; + + int terminalType = (int) terminal.getAttachment("terminalType"); + + switch(terminalType) { + case TerminalType.GENERIC: + handleMissionListRequest(core.objectService.getObject(request.getObjectId()), request.getTickCount(), TerminalType.GENERIC); + break; + + case TerminalType.BOUNTY: + if (!object.hasSkill("class_bountyhunter_phase1_novice")) { object.sendSystemMessage("@mission/mission_generic:not_bounty_hunter_terminal", (byte) 0); } + else { handleMissionListRequest(core.objectService.getObject(request.getObjectId()), request.getTickCount(), TerminalType.BOUNTY); } + break; + + case TerminalType.ARTISAN: + //handleMissionListRequest(core.objectService.getObject(request.getObjectId()), request.getTickCount(), TerminalType.ARTISAN); + break; + + case TerminalType.ENTERTAINER: + //handleMissionListRequest(core.objectService.getObject(request.getObjectId()), request.getTickCount(), TerminalType.ENTERTAINER); + break; + + default: break; + } + } + + }); + + objControllerOpcodes.put(ObjControllerOpcodes.MISSION_GENERIC_REQUEST, new INetworkRemoteEvent() { + + @Override + public void handlePacket(IoSession session, IoBuffer data) throws Exception { + Client client = core.getClient(session); + + if(client == null || client.getSession() == null) + return; + + SWGObject object = client.getParent(); + + if(object == null) + return; + + CreatureObject creature = (CreatureObject) object; + + data.order(ByteOrder.LITTLE_ENDIAN); + + MissionAcceptRequest request = new MissionAcceptRequest(); + request.deserialize(data); + + MissionObject mission = (MissionObject) core.objectService.getObject(request.getMissionObjId()); + + if (mission == null) + return; + + if (handleMissionAccept(creature, mission)) { + MissionAcceptResponse response = new MissionAcceptResponse(object.getObjectId(), mission.getObjectId(), request.getTerminalType(), (byte) 1); + object.getClient().getSession().write(new ObjControllerMessage(0x0B, response).serialize()); + } else { + MissionAcceptResponse response = new MissionAcceptResponse(object.getObjectId(), mission.getObjectId(), request.getTerminalType(), (byte) 0); + object.getClient().getSession().write(new ObjControllerMessage(0x0B, response).serialize()); + } + } + }); + } + + public void handleMissionAbort(CreatureObject creature, MissionObject mission) { + handleMissionAbort(creature, mission, false); + } + + /** + * Aborts the target mission for the specified player. If silent is true then MissionObjective.abort is not called. + * @param creature Target player used in MissionObjective.abort + * @param mission Mission to abort + * @param silent If true, called the MissionObjective.abort() method, otherwise it simply destroys the mission (false) + */ + public void handleMissionAbort(CreatureObject creature, MissionObject mission, boolean silent) { + MissionObjective objective = mission.getObjective(); + + if (objective != null && !silent) + objective.abort(core, creature); + + core.objectService.destroyObject(mission.getObjectId()); + } + + private void loadMissionEntryCounts() { + File missionFolder = new File("./clientdata/string/en/mission"); + File[] missionFiles = missionFolder.listFiles(); + + //int missionStrings = 0; + for (int i = 0; i < missionFiles.length; i++) { + if (missionFiles[i].getName().contains("_easy") || missionFiles[i].getName().contains("_medium") || missionFiles[i].getName().contains("_hard")) { + + String missionStf = "clientdata" + missionFiles[i].getAbsolutePath().split("clientdata")[1].replace("\\", "/"); + try { + StfTable stf = new StfTable(missionStf); + boolean gotCount = false; + + for (int s = 1; s < stf.getRowCount(); s++) { + + if (stf.getStringById(s).getKey() != null && stf.getStringById(s).getKey().equals("number_of_entries")) { + String finalStr = missionStf.split("clientdata/string/en/")[1].replace(".stf", ""); + entryCounts.put(finalStr, Integer.parseInt(stf.getStringById(s).getValue())); + gotCount = true; + } + } + if (gotCount == false) { + //System.out.println("!NO ENTRY COUNT FOR " + missionStf); + continue; + } + } catch (Exception e) { e.printStackTrace(); } + //missionStrings++; + } + } + //System.out.println("Loaded " + missionStrings + " mission entry counts."); + } + + + private int getRandomStringEntry(String missionStf) { + int ranEntryNum = 1; + + if (entryCounts.get(missionStf) != null) { ranEntryNum = ran.nextInt(entryCounts.get(missionStf)); } + //else { System.out.println(missionStf + " was not found in entryCount and is using entry #1"); } + if (missionStf.equals("mission/mission_deliver_neutral_hard") && ranEntryNum == 1) // m1s value is "mission_success_mail", so dont even use the mission + return 2; + if (ranEntryNum == 0) + return 1; + else + return ranEntryNum; + } + + private void handleMissionListRequest(final SWGObject player, int requestCounter, int type) { + CreatureObject creature = (CreatureObject) player; + + TangibleObject missionBag = (TangibleObject) creature.getSlottedObject("mission_bag"); + + if (missionBag == null || creature == null) + return; + + final AtomicInteger typeOneCount = new AtomicInteger(); + final AtomicInteger typeTwoCount = new AtomicInteger(); + + missionBag.viewChildren(creature, true, false, new Traverser() { + + @Override + public void process(SWGObject obj) { + + if (obj instanceof MissionObject == false) + return; + + MissionObject mission = (MissionObject) obj; + + if (typeOneCount.get() < 5) { + + if (type == TerminalType.GENERIC) + randomDeliveryMission(player, mission); + + else if (type == TerminalType.BOUNTY) + randomBountyMission(player, mission); + + else if (type == TerminalType.ARTISAN) + randomSurveyMission(player, mission); + + else + return; + + mission.setRepeatCount(requestCounter); + typeOneCount.incrementAndGet(); + + } else if (typeTwoCount.get() < 5) { + + if (type == TerminalType.GENERIC) // destroy + return; + + else if (type == TerminalType.ARTISAN) // crafting + return; + + else if (type == TerminalType.BOUNTY) + randomBountyMission(player, mission); + + else + return; + + mission.setRepeatCount(requestCounter); + typeTwoCount.incrementAndGet(); + } + } + }); + } + + public void handleMissionComplete(CreatureObject creature, MissionObject mission) { + MissionObjective objective = mission.getObjective(); + + if (objective == null) + return; + + objective.complete(core, creature); + } + + private boolean handleMissionAccept(CreatureObject creature, MissionObject mission) { + SWGObject missionBag = creature.getSlottedObject("mission_bag"); + + if (mission.getContainer() != missionBag) + return false; + + TangibleObject datapad = (TangibleObject) creature.getSlottedObject("datapad"); + + if (datapad == null) + return false; + + AtomicInteger missionCount = new AtomicInteger(); + AtomicBoolean hasBountyMission = new AtomicBoolean(false); + datapad.viewChildren(creature, true, false, new Traverser() { + + @Override + public void process(SWGObject obj) { + if (obj instanceof MissionObject) { + missionCount.incrementAndGet(); + + if (((MissionObject) obj).getMissionType().equals("bounty")) + hasBountyMission.set(true); + } + } + }); + + if (mission.getMissionType().equals("bounty")) { + if (hasBountyMission.get()) { + creature.sendSystemMessage("@bounty_hunter:already_have_target", (byte) 0); + return false; + } + } + + if (missionCount.get() == 2) { + creature.sendSystemMessage("@mission/mission_generic:too_many_missions", (byte) 0); + return false; + } + + missionBag.transferTo(creature, datapad, mission); + createMissionObjective(creature, mission); + return true; + } + + private MissionObjective createMissionObjective(CreatureObject creature, MissionObject mission) { + return createMissionObjective(creature, mission, false); + } + + private MissionObjective createMissionObjective(CreatureObject creature, MissionObject mission, boolean silent) { + switch(mission.getMissionType()) { + + case "deliver": + DeliveryMissionObjective deliveryObjective = new DeliveryMissionObjective(mission); + + mission.setObjective(deliveryObjective); + + if (!silent) + deliveryObjective.activate(core, creature); + + return deliveryObjective; + + case "destroy": + DestroyMissionObjective destroyObjective = new DestroyMissionObjective(mission); + + mission.setObjective(destroyObjective); + + if (!silent) + destroyObjective.activate(core, creature); + + return destroyObjective; + + case "bounty": + BountyMissionObjective bountyObjective = new BountyMissionObjective(mission); + + mission.setObjective(bountyObjective); + + if (!silent) + bountyObjective.activate(core, creature); + + return bountyObjective; + + case "survey": + SurveyMissionObjective surveyObjective = new SurveyMissionObjective(mission); + + mission.setObjective(surveyObjective); + + if (!silent) + surveyObjective.activate(core, creature); + + return surveyObjective; + default: + return null; + } + } + private void randomSurveyMission(SWGObject player, MissionObject mission) { + + byte generalType = (byte) (ran.nextInt(3) == 0 ? 1 : 0); + + // TODO: Change way of getting resources for planet. Possibly a map, would solve future concurrency problems. + Vector resources = core.resourceService.getSpawnedResourcesByPlanetAndType(player.getPlanetId(), generalType); + if (resources == null || resources.size() == 0) + return; + + // The level and reward calculations are taken from EMU. Can hardly find anything related to survey missions from NGE. + int maxLevel = 50; + int minLevel = 50; + float surveySkill = core.skillModService.getSkillModValue((CreatureObject) player, "surveying"); + + if (surveySkill > 30) { maxLevel += 10; } + if (surveySkill > 50) { maxLevel += 10; } + if (surveySkill > 70) { maxLevel += 10; } + if (surveySkill > 90) { maxLevel += 10; } + if (surveySkill > 100) { maxLevel += 5; } //Max mission level is 95. + + int randNumber = (maxLevel == minLevel ? 0 : ran.nextInt(maxLevel - minLevel)); // prevent bound error (can't randomize 0) + + int randLevel = minLevel + (5 * randNumber) / 5; + + if (randLevel > maxLevel) + randLevel = maxLevel; + + GalacticResource resource = resources.get(ran.nextInt(resources.size() - 1)); + + if (resource == null) + return; + + ResourceRoot family = resource.getResourceRoot(); + + mission.setMissionType("survey"); + + String missionStf = "mission/mission_npc_survey_neutral_easy"; + mission.setMissionStf(missionStf); + mission.setMissionId(getRandomStringEntry(missionStf)); + mission.setMissionDescription("m" + mission.getMissionId() + "d"); + mission.setMissionTitle("m" + mission.getMissionId() + "t"); + + mission.setCreator(nameGenerator.compose(2) + " " + nameGenerator.compose(3)); + + mission.setMissionLevel(randLevel); + + mission.setStartLocation(player.getPosition(), player.getPlanet().name); + + mission.setCreditReward(400 + (randLevel - minLevel) * 20 + ran.nextInt(100)); + + mission.setMissionTemplateObject(CRC.StringtoCRC(ResourceRoot.CONTAINER_TYPE_IFF_SIGNIFIER[family.getContainerType()])); // This should be the resource container obj + mission.setMissionTargetName(family.getResourceType() + family.getResourceClass()); + + } + + private void randomDeliveryMission(SWGObject player, MissionObject mission) { + mission.setMissionType("deliver"); + + String[] difficulties = { "easy", "medium", "hard" }; + + String missionStf = "mission/mission_deliver_neutral_" + difficulties[ran.nextInt(difficulties.length)]; + mission.setMissionStf(missionStf); + mission.setMissionId(getRandomStringEntry(missionStf)); + mission.setMissionDescription("m" + mission.getMissionId() + "d"); + mission.setMissionTitle("m" + mission.getMissionId() + "t"); + + mission.setCreator(nameGenerator.compose(2) + " " + nameGenerator.compose(3)); + + mission.setMissionLevel(5); + + // TODO: Use pre-defined commoner locations + Point3D startLocation = SpawnPoint.getRandomPosition(player.getPosition(), (float) 50, (float) 300, player.getPlanetId()); + Point3D destination = SpawnPoint.getRandomPosition(startLocation, (float) 50, (float) 500, player.getPlanetId()); + + mission.setStartLocation(startLocation, player.getPlanet().name); + mission.setDestination(destination, player.getPlanet().name); + + mission.setCreditReward((int) (200 + ((startLocation.getDistance2D(destination) / 10)))); + + mission.setMissionTemplateObject(CRC.StringtoCRC("object/tangible/mission/shared_mission_datadisk.iff")); + mission.setMissionTargetName("Datadisk"); + } + + private void randomBountyMission(SWGObject player, MissionObject mission) { + BountyListItem bountyTarget = null; + + if (bountyMap.size() > 0) { + boolean gotBounty = false; + int attempts = 0; + while (!gotBounty && attempts < 5) { + bountyTarget = getRandomBounty(); + + if (bountyTarget == null || bountyTarget.getAssignedHunters().size() >= 3 || bountyTarget.getCreditReward() < 20000 || bountyTarget.getObjectID() == player.getObjectId()) { + attempts++; + continue; + } + else + gotBounty = true; + } + if (attempts >= 5 && !gotBounty) + return; + } + if (bountyTarget == null) + return; + + mission.setMissionType("bounty"); + + String missionStf = "mission/mission_bounty_jedi"; + + mission.setMissionStf(missionStf); + if (!bountyTarget.getProfession().equals("")) { // TODO: Smuggler mission checks. + if (bountyTarget.getFaction().equals("rebel")) { + mission.setMissionTargetName("Rebel Bounty"); + mission.setMissionId(2); + mission.setCreator("The Galactic Empire"); + } else if (bountyTarget.getFaction().equals("imperial")) { + mission.setMissionTargetName("Imperial Bounty"); + mission.setMissionId(1); + mission.setCreator("The Alliance"); + } + mission.setMissionTitle("m" + mission.getMissionId() + "t"); + mission.setMissionDescription("m" + mission.getMissionId() + "d"); + } else { + // TODO: Dead code, but place-holder for implementation of smuggler missions. + if (bountyTarget.getFaction().equals("neutral")) { + mission.setMissionId(3); + } + else if (bountyTarget.getFaction().equals("rebel")) { + mission.setMissionId(2); + } + else if (bountyTarget.getFaction().equals("imperial")) { + mission.setMissionId(1); + } + mission.setMissionTitle("m" + mission.getMissionId() + "ts"); + mission.setMissionDescription("m" + mission.getMissionId() + "ds"); + } + + mission.setMissionLevel(95 + bountyTarget.getFailedAttempts()); + + mission.setCreditReward(bountyTarget.getCreditReward()); + + mission.setMissionTemplateObject(CRC.StringtoCRC("object/tangible/mission/shared_mission_bounty_jedi_target.iff")); + + mission.setBountyMarkId(bountyTarget.getObjectID()); + } + + public enum TerminalType {; + public static final int GENERIC = 1; + public static final int BOUNTY = 2; + public static final int ENTERTAINER = 3; + public static final int ARTISAN = 4; + public static final int EXPLORER = 5; + } + + public Map getBountyMap() { + return this.bountyMap; + } + + public BountyListItem getRandomBounty() { + int bountyListId = ran.nextInt(bountyMap.size()); + List bounties = new ArrayList(bountyMap.keySet()); + + return bountyMap.get(bounties.get(bountyListId)); + } + + public BountyListItem getBountyListItem(long objectId) { + if (bountyMap.containsKey(objectId)) + return bountyMap.get(objectId); + else return null; + } + + public BountyListItem createNewBounty(CreatureObject bountyTarget, long placer, int reward) { + PlayerObject player = (PlayerObject) bountyTarget.getSlottedObject("ghost"); + if (player == null) + return null; + + if (getBountyListItem(bountyTarget.getObjectID()) != null) + return null; + + BountyListItem bounty = new BountyListItem(bountyTarget.getObjectID(), reward, core.playerService.getFormalProfessionName(player.getProfession()), bountyTarget.getFaction(), bountyTarget.getCustomName()); + + if (placer != 0) + bounty.getBountyPlacers().add(placer); + + bountiesODB.put(bountyTarget.getObjectID(), bounty); + + bountyMap.put(bountyTarget.getObjectID(), bounty); + + //System.out.println("Created bounty of " + reward + " to " + bounty.getName()); + return bounty; + } + + public boolean addToExistingBounty(long bountyTarget, long placer, int amountToAdd) { + + BountyListItem bounty = getBountyListItem(bountyTarget); + + if (bounty == null) + return false; + + bounty.addBounty(amountToAdd); + + if (placer != 0 && !bounty.getBountyPlacers().contains(placer)) + bounty.getBountyPlacers().add(placer); + + bountiesODB.put(bounty.getObjectID(), bounty); + + //System.out.println("Added bounty of " + amountToAdd + " to " + bounty.getName()); + return true; + } + + public boolean removeBounty(long bountyTarget, boolean listRemove) { + if (listRemove) + bountyMap.remove(bountyTarget); + bountiesODB.remove(bountyTarget); + return true; + } + + public boolean removeBounty(long bountyTarget) { + return removeBounty(bountyTarget, true); + } + + private void cleanupBounties() { + List bounties = new ArrayList(); + ODBCursor cursor = bountiesODB.getCursor(); + while(cursor.hasNext()) { + BountyListItem bounty = (BountyListItem) cursor.next(); + + if (bounty != null && !core.characterService.playerExists(bounty.getObjectID())) { + bounties.add(bounty); + } + } + bounties.stream().mapToLong(b -> b.getObjectID()).forEach(bountiesODB::remove); + if (bounties.size() != 0) + System.out.println("Removed " + bounties.size() + " bounties."); + } + + @Override + public void shutdown() { + } +} diff --git a/src/services/object/DuplicateId.java b/src/services/object/DuplicateId.java new file mode 100644 index 00000000..55b03ab6 --- /dev/null +++ b/src/services/object/DuplicateId.java @@ -0,0 +1,51 @@ +/******************************************************************************* + * Copyright (c) 2013 + * + * This File is part of NGECore2. + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see . + * + * Using NGEngine to work with NGECore2 is making a combined work based on NGEngine. + * Therefore all terms and conditions of the GNU Lesser General Public License cover the combination. + ******************************************************************************/ +package services.object; + +import java.io.Serializable; + +import com.sleepycat.persist.model.Entity; +import com.sleepycat.persist.model.PrimaryKey; + +@Entity +public class DuplicateId implements Serializable { + + private static final long serialVersionUID = 1L; + + @PrimaryKey + private String key; + private long objectId; + + public DuplicateId(String key, long objectId) { + this.key = key; + this.objectId = objectId; + } + + public DuplicateId() { + + } + + public long getObjectId() { + return objectId; + } + +} diff --git a/src/services/object/ObjectId.java b/src/services/object/ObjectId.java new file mode 100644 index 00000000..1f8362fb --- /dev/null +++ b/src/services/object/ObjectId.java @@ -0,0 +1,43 @@ +/******************************************************************************* + * Copyright (c) 2013 + * + * This File is part of NGECore2. + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see . + * + * Using NGEngine to work with NGECore2 is making a combined work based on NGEngine. + * Therefore all terms and conditions of the GNU Lesser General Public License cover the combination. + ******************************************************************************/ +package services.object; + +import java.io.Serializable; + +import com.sleepycat.persist.model.Entity; +import com.sleepycat.persist.model.PrimaryKey; + +@Entity +public class ObjectId implements Serializable { + + private static final long serialVersionUID = 1L; + + @PrimaryKey + public long objectId; + + public ObjectId(long objectId) { + this.objectId = objectId; + } + + public ObjectId() { } + +} diff --git a/src/services/object/ObjectService.java b/src/services/object/ObjectService.java index b937da55..c2aa8e82 100644 --- a/src/services/object/ObjectService.java +++ b/src/services/object/ObjectService.java @@ -21,45 +21,80 @@ ******************************************************************************/ package services.object; +import java.io.FileNotFoundException; import java.io.IOException; import java.nio.ByteOrder; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; +import java.sql.Statement; import java.util.ArrayList; import java.util.Collections; +import java.util.HashMap; import java.util.Iterator; import java.util.List; import java.util.Map; import java.util.Random; +import java.util.Set; +import java.util.Vector; import java.util.concurrent.ConcurrentHashMap; +import java.util.concurrent.Executors; import java.util.concurrent.ScheduledExecutorService; +import java.util.concurrent.ScheduledFuture; +import java.util.concurrent.TimeUnit; +import java.util.concurrent.atomic.AtomicInteger; import java.util.concurrent.atomic.AtomicLong; import resources.common.*; +import resources.datatables.DisplayType; +import resources.datatables.Options; +import resources.datatables.PlayerFlags; +import resources.guild.Guild; +import resources.harvest.SurveyTool; import org.apache.mina.core.buffer.IoBuffer; import org.apache.mina.core.session.IoSession; import org.python.core.Py; import org.python.core.PyObject; +import com.sleepycat.je.Transaction; +import com.sleepycat.je.TransactionConfig; import com.sleepycat.persist.EntityCursor; +import com.sleepycat.persist.model.Entity; +import com.sleepycat.persist.model.PrimaryKey; -import protocol.swg.ChatOnGetFriendsList; import protocol.swg.CmdSceneReady; import protocol.swg.CmdStartScene; import protocol.swg.HeartBeatMessage; +import protocol.swg.ObjControllerMessage; import protocol.swg.ParametersMessage; import protocol.swg.SelectCharacter; +import protocol.swg.ServerTimeMessage; import protocol.swg.UnkByteFlag; +import protocol.swg.chat.ChatFriendsListUpdate; +import protocol.swg.chat.ChatOnChangeFriendStatus; +import protocol.swg.chat.ChatOnConnectAvatar; +import protocol.swg.chat.ChatOnGetFriendsList; +import protocol.swg.chat.ChatRoomList; +import protocol.swg.chat.ChatServerStatus; +import protocol.swg.objectControllerObjects.ShowFlyText; +import protocol.swg.chat.VoiceChatStatus; +import protocol.swg.objectControllerObjects.UiPlayEffect; import engine.clientdata.ClientFileManager; import engine.clientdata.visitors.CrcStringTableVisitor; +import engine.clientdata.visitors.DatatableVisitor; import engine.clientdata.visitors.WorldSnapshotVisitor; import engine.clientdata.visitors.WorldSnapshotVisitor.SnapshotChunk; import engine.clients.Client; import engine.resources.common.CRC; import engine.resources.container.Traverser; +import engine.resources.container.WorldCellPermissions; +import engine.resources.container.WorldPermissions; import engine.resources.database.DatabaseConnection; +import engine.resources.database.ODBCursor; +import engine.resources.database.ObjectDatabase; +import engine.resources.objects.Delta; +import engine.resources.objects.IPersistent; import engine.resources.objects.SWGObject; import engine.resources.scene.Planet; import engine.resources.scene.Point3D; @@ -67,53 +102,74 @@ import engine.resources.scene.Quaternion; import engine.resources.service.INetworkDispatch; import engine.resources.service.INetworkRemoteEvent; import main.NGECore; +import resources.objectives.BountyMissionObjective; import resources.objects.building.BuildingObject; import resources.objects.cell.CellObject; +import resources.objects.craft.DraftSchematic; import resources.objects.creature.CreatureObject; +import resources.objects.factorycrate.FactoryCrateObject; import resources.objects.group.GroupObject; import resources.objects.guild.GuildObject; +import resources.objects.harvester.HarvesterObject; +import resources.objects.installation.InstallationObject; +import resources.objects.intangible.IntangibleObject; +import resources.objects.manufacture.ManufactureSchematicObject; +import resources.objects.mission.MissionObject; import resources.objects.player.PlayerObject; +import resources.objects.resource.GalacticResource; +import resources.objects.resource.ResourceContainerObject; +import resources.objects.resource.ResourceRoot; import resources.objects.staticobject.StaticObject; import resources.objects.tangible.TangibleObject; import resources.objects.waypoint.WaypointObject; import resources.objects.weapon.WeaponObject; +import services.ai.AIActor; +import services.command.BaseSWGCommand; +import services.command.CombatCommand; +import services.bazaar.AuctionItem; +import services.chat.ChatRoom; +import services.equipment.EquipmentService; +import services.sui.SUIWindow; +import services.sui.SUIWindow.SUICallback; +import services.sui.SUIWindow.Trigger; @SuppressWarnings("unused") - public class ObjectService implements INetworkDispatch { private Map objectList = new ConcurrentHashMap(); - private NGECore core; - private DatabaseConnection databaseConnection; - private AtomicLong highestId = new AtomicLong(); - private Random random = new Random(); - private Map serverTemplates = new ConcurrentHashMap(); + private final ScheduledExecutorService scheduler = Executors.newScheduledThreadPool(1); + protected final Object objectMutex = new Object(); + private List loadServerTemplateTasks = Collections.synchronizedList(new ArrayList()); public ObjectService(final NGECore core) { this.core = core; databaseConnection = core.getDatabase1(); + Runtime.getRuntime().addShutdownHook(new Thread() { @Override public void run() { synchronized(objectList) { for(SWGObject obj : objectList.values()) { - if(obj.getSlottedObject("ghost") != null) { - ((CreatureObject) obj).createTransaction(core.getCreatureODB().getEnvironment()); - core.getCreatureODB().put((CreatureObject) obj, Long.class, CreatureObject.class, ((CreatureObject) obj).getTransaction()); + if(obj.getClient() != null && obj.getClient().getSession() != null) { + core.connectionService.disconnect(obj.getClient()); } } } + core.bazaarService.saveAllItems(); + core.housingService.saveBuildings(); + core.harvesterService.saveHarvesters(); + core.closeODBs(); } }); - long highestId; + long highestId; try { PreparedStatement ps = databaseConnection.preparedStatement("SELECT id FROM highestid WHERE id=(SELECT max(id) FROM highestid)"); @@ -127,7 +183,45 @@ public class ObjectService implements INetworkDispatch { } } - public SWGObject createObject(String Template, long objectID, Planet planet, Point3D position, Quaternion orientation) { + public void loadBuildings() { + ODBCursor cursor = core.getSWGObjectODB().getCursor(); + + while(cursor.hasNext()) { + final SWGObject building = (SWGObject) cursor.next(); + if(!(building instanceof BuildingObject) || building == null) + continue; + objectList.put(building.getObjectID(), building); + Planet planet = core.terrainService.getPlanetByID(building.getPlanetId()); + building.setPlanet(planet); + building.viewChildren(building, true, true, (object) -> { + objectList.put(object.getObjectID(), object); + if(object.getParentId() != 0 && object.getContainer() == null) + object.setParent(building); + object.getContainerInfo(object.getTemplate()); + }); + SWGObject sign = (SWGObject) building.getAttachment("sign"); + if(sign != null) { + sign.initializeBaselines(); + sign.initAfterDBLoad(); + objectList.put(sign.getObjectID(), sign); + } + } + + cursor.close(); + } + + public void loadServerTemplates() { + System.out.println("Loading server templates..."); + loadServerTemplateTasks.forEach(Runnable::run); + loadServerTemplateTasks.clear(); + System.out.println("Finished loading server templates..."); + } + + public SWGObject createObject(String Template, long objectID, Planet planet, Point3D position, Quaternion orientation, String customServerTemplate) { + return createObject(Template, objectID, planet, position, orientation, customServerTemplate, false, true); + } + + public SWGObject createObject(String Template, long objectID, Planet planet, Point3D position, Quaternion orientation, String customServerTemplate, boolean overrideSnapshot, boolean loadServerTemplate) { SWGObject object = null; CrcStringTableVisitor crcTable; try { @@ -139,8 +233,13 @@ public class ObjectService implements INetworkDispatch { } catch (InstantiationException | IllegalAccessException e) { e.printStackTrace(); } + + boolean isSnapshot = false; + if(objectID == 0) objectID = generateObjectID(); + else + isSnapshot = !overrideSnapshot; if(Template.startsWith("object/creature")) { @@ -150,17 +249,35 @@ public class ObjectService implements INetworkDispatch { object = new PlayerObject(objectID, planet); + } else if(Template.startsWith("object/tangible/survey_tool")) { + + object = new SurveyTool(objectID, planet, position, orientation, Template); + } else if(Template.startsWith("object/tangible")) { - object = new TangibleObject(objectID, planet, Template, position, orientation); + object = new TangibleObject(objectID, planet, position, orientation, Template); + } else if(Template.startsWith("object/intangible")) { + if (Template.equals("object/intangible/buy_back/shared_buy_back_container.iff")) // Container sends TANO baselines but is in intangible folder.. lolsoe. + object = new TangibleObject(objectID, planet, position, orientation, Template); + else + object = new IntangibleObject(objectID, planet, position, orientation,Template); + } else if(Template.startsWith("object/weapon")) { - object = new WeaponObject(objectID, planet, Template, position, orientation); + object = new WeaponObject(objectID, planet, position, orientation, Template); - } else if(Template.startsWith("object/building")){ + } else if(Template.startsWith("object/building") || Template.startsWith("object/static/worldbuilding/structures") || Template.startsWith("object/static/structure")){ object = new BuildingObject(objectID, planet, position, orientation, Template); + if(!isSnapshot && !overrideSnapshot && object.getPortalVisitor() != null) { + int cellCount = object.getPortalVisitor().cells.size() - 1; // -1 for index 0 cell which is outside the building and used for ai pathfinding + for (int i = 0; i < cellCount; i++) { + CellObject cell = (CellObject) createObject("object/cell/shared_cell.iff", planet); + cell.setCellNumber(i+1); + object.add(cell); + } + } } else if(Template.startsWith("object/cell")) { @@ -178,28 +295,110 @@ public class ObjectService implements INetworkDispatch { object = new GroupObject(objectID); + } else if(Template.startsWith("object/mobile")){ + + object = new CreatureObject(objectID, planet, position, orientation, Template); + } else if(Template.startsWith("object/waypoint")) { object = new WaypointObject(objectID, planet, position); - } else { + } else if(Template.startsWith("object/mission")) { - return null; + object = new MissionObject(objectID, planet, Template); + } else if(Template.startsWith("object/resource_container")) { + + object = new ResourceContainerObject(objectID, planet, position, orientation, Template); + + } else if(Template.startsWith("object/factory/shared_factory_crate")) { + + object = new FactoryCrateObject(objectID, planet, position, orientation, Template); + + } else if(Template.startsWith("object/draft_schematic")) { + + object = new DraftSchematic(objectID, planet, Template, position, orientation); + + } else if(Template.startsWith("object/manufacture_schematic")) { + + object = new ManufactureSchematicObject(objectID, planet, Template, position, orientation); + + } else if(Template.startsWith("object/installation/mining_ore/construction")) { + + float positionY = core.terrainService.getHeight(planet.getID(), position.x, position.z)-1f; + Point3D newpoint = new Point3D(position.x,positionY,position.z); + object = new InstallationObject(objectID, planet, newpoint, orientation, Template); + + } else if(Template.startsWith("object/installation/mining_ore") || Template.startsWith("object/installation/mining_liquid") || + Template.startsWith("object/installation/mining_gas") || Template.startsWith("object/installation/mining_organic") || + Template.startsWith("object/installation/generators")) { + + float positionY = core.terrainService.getHeight(planet.getID(), position.x, position.z)-1f; + Point3D newpoint = new Point3D(position.x,positionY,position.z); + object = new HarvesterObject(objectID, planet, newpoint, orientation, Template); + + } else { + return null; } object.setPlanetId(planet.getID()); - loadServerTemplate(object); + object.setAttachment("customServerTemplate", customServerTemplate); + + object.setisInSnapshot(isSnapshot); + synchronized(objectMutex) { + if(!core.getObjectIdODB().contains(objectID)) + core.getObjectIdODB().put(objectID, new ObjectId(objectID)); + } + // Set Options - easier to set them across the board here + // because we'll be spawning them despite most of them being unscripted. + // Any such settings can be completely reset with setOptionsBitmask + // in scripts and modified with setOptions(Options.X, true/false) + if (Template.startsWith("object/creature/") || Template.startsWith("object/mobile/")) { + if (Template.startsWith("object/mobile/beast_master/")) { + ((CreatureObject) object).setOptionsBitmask(Options.NONE); + } else if (Template.startsWith("object/mobile/vendor/")) { + ((CreatureObject) object).setOptionsBitmask(Options.INVULNERABLE | Options.USABLE); + } else if (Template.startsWith("object/mobile/vehicle/")) { + ((CreatureObject) object).setOptionsBitmask(Options.ATTACKABLE | Options.MOUNT); + } else if (Template.startsWith("object/mobile/hologram/")) { + ((CreatureObject) object).setOptionsBitmask(Options.INVULNERABLE); + } else if (Template.startsWith("object/mobile/")) { + ((CreatureObject) object).setOptionsBitmask(Options.ATTACKABLE); + } else if (Template.startsWith("object/creature/npc/theme_park/")) { + ((CreatureObject) object).setOptionsBitmask(Options.INVULNERABLE); + } else if (Template.startsWith("object/creature/npc/general/")) { + ((CreatureObject) object).setOptionsBitmask(Options.INVULNERABLE | Options.CONVERSABLE); + } else if (Template.startsWith("object/creature/droid/crafted/")) { + ((CreatureObject) object).setOptionsBitmask(Options.NONE); + } else if (Template.startsWith("object/creature/droid/")) { + ((CreatureObject) object).setOptionsBitmask(Options.ATTACKABLE | Options.INVULNERABLE); + } else if (Template.startsWith("object/creature/player/")) { + ((CreatureObject) object).setOptionsBitmask(Options.ATTACKABLE); + } + } else if (object instanceof TangibleObject) { + ((TangibleObject) object).setOptionsBitmask(Options.INVULNERABLE); + + if (Template.startsWith("object/tangible/vendor/")) { + ((TangibleObject) object).setOptionsBitmask(Options.INVULNERABLE | Options.USABLE); + } + } + + if(loadServerTemplate) + loadServerTemplate(object); + else { + final SWGObject pointer = object; + loadServerTemplateTasks.add(() -> loadServerTemplate(pointer)); + } objectList.put(objectID, object); - + return object; } public void loadServerTemplate(SWGObject object) { - String template = object.getTemplate(); + String template = ((object.getAttachment("customServerTemplate") == null) ? object.getTemplate() : (object.getTemplate().split("shared_")[0] + "shared_" + ((String) object.getAttachment("customServerTemplate")) + ".iff")); String serverTemplate = template.replace(".iff", ""); // check if template is empty(4 default lines) to reduce RAM usage(saves about 500 MB of RAM) try { @@ -216,20 +415,30 @@ public class ObjectService implements INetworkDispatch { } } + } catch (FileNotFoundException e) { + System.out.println("!File Not Found:" + template.toString()); } catch (IOException e) { - e.printStackTrace(); + System.out.println("!IO error " + template.toString()); } - + object.setAttachment("hasLoadedServerTemplate", new Boolean(true)); } public SWGObject createObject(String Template, Planet planet) { return createObject(Template, 0, planet, new Point3D(0, 0, 0), new Quaternion(1, 0, 0, 0)); } + public SWGObject createObject(String Template, Planet planet, String customServerTemplate) { + return createObject(Template, 0, planet, new Point3D(0, 0, 0), new Quaternion(1, 0, 0, 0), customServerTemplate); + } + public SWGObject createObject(String Template, Planet planet, float x, float z, float y) { return createObject(Template, 0, planet, new Point3D(x, y, z), new Quaternion(1, 0, 0, 0)); } + public SWGObject createObject(String Template, long objectID, Planet planet, Point3D position, Quaternion orientation) { + return createObject(Template, objectID, planet, position, orientation, null); + } + public void addObjectToScene(SWGObject object) { core.simulationService.add(object, object.getPosition().x, object.getPosition().z); @@ -241,9 +450,58 @@ public class ObjectService implements INetworkDispatch { return objectList.get(objectID); } - public Map getObjectList() { return objectList; } + public Map getObjectList() { + return objectList; + } + + public void destroyObject(final SWGObject object, int seconds) { + scheduler.schedule(new Runnable() { + + @Override + public void run() { + destroyObject(object); + } + + }, seconds, TimeUnit.SECONDS); + } public void destroyObject(SWGObject object) { + if (object == null) { + return; + } + + if (object.getAttachment("AI") != null && object.getAttachment("AI") instanceof AIActor && ((AIActor) object.getAttachment("AI")).getMobileTemplate().getRespawnTime() > 0) { + final long objectId = object.getObjectID(); + final String Template = object.getTemplate(); + final Planet planet = object.getPlanet(); + final Point3D position = object.getPosition(); + final Quaternion orientation = object.getOrientation(); + final long cellId = ((object.getContainer() == null) ? 0L : object.getContainer().getObjectID()); + final short level = ((object instanceof CreatureObject) ? ((CreatureObject) object).getLevel() : (short) 0); + + scheduler.schedule(new Runnable() { + + @Override + public void run() { + NGECore.getInstance().spawnService.spawnCreature(Template, objectId, planet.getName(), cellId, position.x, position.y, position.z, orientation.w, orientation.x, orientation.y, orientation.z, level); + } + + }, ((AIActor) object.getAttachment("AI")).getMobileTemplate().getRespawnTime(), TimeUnit.SECONDS); + } + + String filePath = "scripts/" + object.getTemplate().split("shared_" , 2)[0].replace("shared_", "") + object.getTemplate().split("shared_" , 2)[1].replace(".iff", "") + ".py"; + + if (FileUtilities.doesFileExist(filePath)) { + PyObject method = core.scriptService.getMethod("scripts/" + object.getTemplate().split("shared_" , 2)[0].replace("shared_", ""), object.getTemplate().split("shared_" , 2)[1].replace(".iff", ""), "destroy"); + + if (method != null && method.isCallable()) { + method.__call__(Py.java2py(core), Py.java2py(object)); + } + } + + if (object == null) { + return; + } object.viewChildren(object, true, true, new Traverser() { @Override @@ -252,7 +510,21 @@ public class ObjectService implements INetworkDispatch { } }); objectList.remove(object.getObjectID()); - //core.simulationService.remove(object, object.getPosition().x, object.getPosition().y); + SWGObject parent = object.getContainer(); + + if(parent != null) { + if(parent instanceof CreatureObject) { + core.equipmentService.unequip((CreatureObject) parent, object); + + ((CreatureObject) parent).removeObjectFromEquipList(object); + ((CreatureObject) parent).removeObjectFromAppearanceEquipList(object); + } + long parentId = object.getParentId(); + parent.remove(object); + object.setParentId(parentId); + } else { + core.simulationService.remove(object, object.getWorldPosition().x, object.getWorldPosition().z, true); + } } @@ -266,6 +538,9 @@ public class ObjectService implements INetworkDispatch { } public SWGObject getObjectByCustomName(String customName) { + if (customName == null) { + return null; + } synchronized(objectList) { @@ -278,24 +553,70 @@ public class ObjectService implements INetworkDispatch { } - EntityCursor cursor = core.getCreatureODB().getCursor(Long.class, CreatureObject.class); + ODBCursor cursor = core.getSWGObjectODB().getCursor(); - Iterator it = cursor.iterator(); - - while(it.hasNext()) { - if(it.next().getCustomName().equals(customName)) - return it.next(); + while (cursor.hasNext()) { + SWGObject object = (SWGObject) cursor.next(); + + if (object == null) { + continue; + } + + if (object.getCustomName() != null && customName.length() > 0 && object.getCustomName().equals(customName)) { + return object; + } } - + + return null; + } + + public SWGObject getObjectByFirstName(String customName) { + if (customName == null) { + return null; + } + + synchronized(objectList) { + for(SWGObject obj : objectList.values()) { + if(obj == null) + continue; + if(obj.getCustomName() == null) + continue; + if(obj.getCustomName().startsWith(customName)) + return obj; + } + + } + + ODBCursor cursor = core.getSWGObjectODB().getCursor(); + + while (cursor.hasNext()) { + SWGObject object = (SWGObject) cursor.next(); + + if (object == null) { + continue; + } + + if (object.getCustomName() != null && customName.length() > 0 && object.getCustomName().startsWith(customName)) { + return object; + } + } + cursor.close(); return null; - } public CreatureObject getCreatureFromDB(long objectId) { - return core.getCreatureODB().get(new Long(objectId), Long.class, CreatureObject.class); + SWGObject object = (SWGObject) core.getSWGObjectODB().get(objectId); + if(!(object instanceof CreatureObject)) + return null; + if (object != null && getObject(object.getObjectID()) == null) { + loadServerTemplate(object); + object.viewChildren(object, true, true, (child) -> loadServerTemplate(child)); + } + + return (CreatureObject) object; } - private long generateObjectID() { + public long generateObjectID() { /*Random random = new Random(); long objectID = random.nextInt(); @@ -308,24 +629,188 @@ public class ObjectService implements INetworkDispatch { return objectID;*/ - long newId = highestId.incrementAndGet(); - PreparedStatement ps2; - - try { - ps2 = databaseConnection.preparedStatement("UPDATE highestid SET id=" + newId + " WHERE id=" + (newId-1)); - ps2.executeUpdate(); - ps2.close(); - } catch (SQLException e) { - e.printStackTrace(); + long newId = 0; + boolean found = false; + // stack overflow when using recursion + synchronized(objectMutex) { + while(!found) { + newId = highestId.incrementAndGet(); + PreparedStatement ps2; + try { + ps2 = databaseConnection.preparedStatement("UPDATE highestid SET id=" + newId + " WHERE id=(SELECT MAX(id) FROM highestid)"); + ps2.executeUpdate(); + ps2.close(); + } catch (SQLException e) { + e.printStackTrace(); + } + if(objectList.containsKey(newId) || core.getObjectIdODB().contains(newId)) + found = false; + else + found = true; + } } - if(getObject(newId) == null) - return newId; - else - return generateObjectID(); + return newId; } - + + public long getDOId(String planet, String template, int type, long containerId, int cellNumber, float x1, float y, float z1) { + SWGObject container = getObject(containerId); + float x = ((container == null) ? x1 : container.getPosition().x + x1); + float z = ((container == null) ? z1 : container.getPosition().z + z1); + String key = "" + CRC.StringtoCRC(planet) + CRC.StringtoCRC(template) + type + containerId + cellNumber + x + y + z; + + long objectId = 0; + + if (core.getDuplicateIdODB().contains(key)) { + objectId = ((DuplicateId) core.getDuplicateIdODB().get(key)).getObjectId(); + } else { + objectId = generateObjectID(); + core.getDuplicateIdODB().put(key, new DuplicateId(key, objectId)); + } + + return objectId; + } + + public void useObject(CreatureObject creature, final SWGObject object) { + if (creature == null || object == null) { + return; + } + + // Bio-Linking + String bl = object.getStringAttribute("bio_link"); + if (bl!=null){ + if (! object.getContainer().getTemplate().contains("shared_character_inventory")){ + creature.sendSystemMessage("@base_player:must_biolink_to_use_from_inventory", (byte)1); + return; + } + if (! bl.contains("@obj_attr_n:bio_link_pending") && ! bl.contains(creature.getCustomName())){ + creature.sendSystemMessage("@base_player:not_linked_to_holder", (byte)1); + return; + } + if (bl.contains("@obj_attr_n:bio_link_pending")){ + creature.setAttachment("BioLinkItemCandidate", object.getObjectID()); + SUIWindow window = core.suiService.createSUIWindow("Script.messageBox", creature, creature, 0); + window.setProperty("bg.caption.lblTitle:Text", "@sui:bio_link_item_title"); + window.setProperty("Prompt.lblPrompt:Text", "@sui:bio_link_item_prompt"); + window.setProperty("btnCancel:visible", "True"); + window.setProperty("btnOk:visible", "True"); + window.setProperty("btnUpdate:visible", "False"); + window.setProperty("btnCancel:Text", "@cancel"); + window.setProperty("btnOk:Text", "@ui_radial:bio_link"); + Vector returnList = new Vector(); + returnList.add("List.lstList:SelectedRow"); + window.addHandler(0, "", Trigger.TRIGGER_OK, returnList, new SUICallback() { + @Override + public void process(SWGObject owner, int eventType, Vector returnList) { + ((CreatureObject)owner).sendSystemMessage("@base_player:item_bio_linked", (byte)1); + object.setStringAttribute("bio_link", owner.getCustomName()); + object.setAttachment("bio_link_PlayerID", owner.getObjectID()); + return; + } + }); + window.addHandler(1, "", Trigger.TRIGGER_CANCEL, returnList, new SUICallback() { + @Override + public void process(SWGObject owner, int eventType, Vector returnList) { + return; + } + }); + core.suiService.openSUIWindow(window); + return; + } + } + + creature.setUseTarget(object); + + int reuse_time; + + try { + reuse_time = object.getIntAttribute("reuse_time"); + } catch (NumberFormatException e) { + reuse_time = 0; + } + + try { + DatatableVisitor visitor = ClientFileManager.loadFile("datatables/timer/template_command_mapping.iff", DatatableVisitor.class); + + boolean foundTemplate = false; + + for (int i = 0; i < visitor.getRowCount(); i++) { + if (visitor.getObject(i, 0) != null && ((String) (visitor.getObject(i, 0))).equalsIgnoreCase(object.getTemplate())) { + String commandName = (String) visitor.getObject(i, 1); + String cooldownGroup = (String) visitor.getObject(i, 2); + String animation = (String) visitor.getObject(i, 3); + + if (commandName.length() > 0) { + BaseSWGCommand command = core.commandService.getCommandByName(commandName); + + if (command instanceof CombatCommand && animation.length() > 0) { + ((CombatCommand) command).setDefaultAnimations(new String[] { animation }); + } + + if (core.commandService.callCommand(creature, object, command, 0, "")) { + core.commandService.removeCommand(creature, 0, command); + return; + } + } else if (cooldownGroup.length() > 0) { + if (creature.hasCooldown(cooldownGroup)) { + return; + } + + creature.addCooldown(cooldownGroup, reuse_time); + } + + foundTemplate = true; + + break; + } + } + + if (!foundTemplate && reuse_time > 0) { + if (creature.hasCooldown(object.getTemplate())) { + return; + } + + creature.addCooldown(object.getTemplate(), reuse_time); + } + } catch (Exception e) { + e.printStackTrace(); + } + + if (object instanceof TangibleObject) { + TangibleObject item = (TangibleObject) object; + int uses = item.getUses(); + + if (uses > 0) { + item.setUses(uses--); + + if (item.getUses() == 0) { + destroyObject(object); + } + } + } + + if (object.getStringAttribute("proc_name") != null) { + core.buffService.addBuffToCreature(creature, object.getStringAttribute("proc_name").replace("@ui_buff:", ""), creature); + } + + String filePath = "scripts/" + object.getTemplate().split("shared_" , 2)[0].replace("shared_", "") + object.getTemplate().split("shared_" , 2)[1].replace(".iff", "") + ".py"; + + if (FileUtilities.doesFileExist(filePath)) { + filePath = "scripts/" + object.getTemplate().split("shared_" , 2)[0].replace("shared_", ""); + String fileName = object.getTemplate().split("shared_" , 2)[1].replace(".iff", ""); + + PyObject method1 = core.scriptService.getMethod("scripts/" + object.getTemplate().split("shared_" , 2)[0].replace("shared_", ""), object.getTemplate().split("shared_" , 2)[1].replace(".iff", ""), "use"); + PyObject method2 = core.scriptService.getMethod("scripts/" + object.getTemplate().split("shared_" , 2)[0].replace("shared_", ""), object.getTemplate().split("shared_" , 2)[1].replace(".iff", ""), "useObject"); + + if (method1 != null && method1.isCallable()) { + method1.__call__(Py.java2py(core), Py.java2py(creature), Py.java2py(object)); + } else if (method2 != null && method2.isCallable()) { + method2.__call__(Py.java2py(core), Py.java2py(creature), Py.java2py(object)); + } + } + } + public void insertTimedEventBindings(ScheduledExecutorService executor) { } @@ -343,7 +828,7 @@ public class ObjectService implements INetworkDispatch { selectCharacter.deserialize(data); long objectId = selectCharacter.getCharacterId(); - Client client = core.getClient((Integer) session.getAttribute("connectionId")); + Client client = core.getClient(session); if(client == null) { System.out.println("NULL Client"); return; @@ -358,9 +843,28 @@ public class ObjectService implements INetworkDispatch { } else { + if (!(getObject(objectId) instanceof CreatureObject)) + return; + creature = (CreatureObject) getObject(objectId); + if(creature.getAttachment("disconnectTask") != null && creature.getClient() != null && !creature.getClient().getSession().isClosing()) + return; + } + + PlayerObject ghost = (PlayerObject) creature.getSlottedObject("ghost"); + + if(ghost == null) + return; + + ghost.clearFlagBitmask(PlayerFlags.LD); + + if(creature.getAttachment("disconnectTask") != null) { + ((ScheduledFuture) creature.getAttachment("disconnectTask")).cancel(true); + } + creature.getAwareObjects().removeAll(creature.getAwareObjects()); + creature.setAttachment("disconnectTask", null); creature.setClient(client); Planet planet = core.terrainService.getPlanetByID(creature.getPlanetId()); @@ -369,67 +873,133 @@ public class ObjectService implements INetworkDispatch { objectList.put(creature.getObjectID(), creature); - creature.viewChildren(creature, true, true, new Traverser() { - - @Override - public void process(SWGObject object) { - objectList.put(object.getObjectID(), object); - } - + creature.viewChildren(creature, true, true, (object) -> { + objectList.put(object.getObjectID(), object); }); - creature.viewChildren(creature, true, true, new Traverser() { - - @Override - public void process(SWGObject object) { - if(object.getParentId() != 0 && object.getContainer() == null) - object.setParent(getObject(object.getParentId())); - object.getContainerInfo(object.getTemplate()); - if(getObject(object.getObjectID()) == null) - objectList.put(object.getObjectID(), object); - } - - }); + creature.viewChildren(creature, true, true, (object) -> { + if(object.getMutex() == null) + object.initAfterDBLoad(); + if(object.getParentId() != 0 && object.getContainer() == null) + object.setParent(getObject(object.getParentId())); + object.getContainerInfo(object.getTemplate()); + if(getObject(object.getObjectID()) == null) + objectList.put(object.getObjectID(), object); + }); if(creature.getParentId() != 0) { SWGObject parent = getObject(creature.getParentId()); + System.out.println("Building: " + parent.getContainer().getTemplate()); parent._add(creature); } Point3D position = creature.getPosition(); - + if(Float.isNaN(position.x) || Float.isNaN(position.y) || Float.isNaN(position.z)) { + creature.setPosition(new Point3D(0, 0, 0)); + position = creature.getPosition(); + } + + HeartBeatMessage heartBeat = new HeartBeatMessage(); + session.write(heartBeat.serialize()); + UnkByteFlag unkByteFlag = new UnkByteFlag(); session.write(unkByteFlag.serialize()); + core.buffService.clearBuffs(creature); + + CmdStartScene startScene = new CmdStartScene((byte) 0, objectId, creature.getPlanet().getPath(), creature.getTemplate(), position.x, position.y, position.z, core.getGalacticTime() / 1000, 0); + session.write(startScene.serialize()); + + ChatServerStatus chatServerStatus = new ChatServerStatus(); + client.getSession().write(chatServerStatus.serialize()); + + VoiceChatStatus voiceStatus = new VoiceChatStatus(); + client.getSession().write(voiceStatus.serialize()); + ParametersMessage parameters = new ParametersMessage(); session.write(parameters.serialize()); - core.buffService.clearBuffs(creature); - - core.chatService.loadMailHeaders(client); - - HeartBeatMessage heartBeat = new HeartBeatMessage(); - session.write(heartBeat.serialize()); - - CmdStartScene startScene = new CmdStartScene((byte) 0, objectId, creature.getPlanet().getPath(), creature.getTemplate(), position.x, position.y, position.z, System.currentTimeMillis() / 1000, 0); - session.write(startScene.serialize()); - creature.makeAware(creature); + ChatOnConnectAvatar chatConnect = new ChatOnConnectAvatar(); + creature.getClient().getSession().write(chatConnect.serialize()); creature.makeAware(core.guildService.getGuildObject()); - + core.chatService.loadMailHeaders(client); + core.simulationService.handleZoneIn(client); - CmdSceneReady sceneReady = new CmdSceneReady(); - client.getSession().write(sceneReady.serialize()); + creature.makeAware(creature); - PlayerObject ghost = (PlayerObject) creature.getSlottedObject("ghost"); + //ChatOnGetFriendsList friendsListMessage = new ChatOnGetFriendsList(ghost); + //client.getSession().write(friendsListMessage.serialize()); - ChatOnGetFriendsList friendsListMessage = new ChatOnGetFriendsList(ghost); - client.getSession().write(friendsListMessage.serialize()); + if (ghost != null) { + //ghost.clearFlagBitmask(PlayerFlags.LD); + String objectShortName = creature.getCustomName().toLowerCase(); + + if (creature.getCustomName().contains(" ")) { + String[] splitName = creature.getCustomName().toLowerCase().split(" "); + objectShortName = splitName[0].toLowerCase(); + } + + core.chatService.playerStatusChange(objectShortName, (byte) 1); + + if (!ghost.getFriendList().isEmpty()) { + + // Find out what friends are online/offline + for (String friend : ghost.getFriendList()) { + SWGObject friendObject = core.chatService.getObjectByFirstName(friend); + + if(friendObject != null && friendObject.isInQuadtree()) { + ChatFriendsListUpdate onlineNotifyStatus = new ChatFriendsListUpdate(friend, (byte) 1); + client.getSession().write(onlineNotifyStatus.serialize()); + + } else { + ChatFriendsListUpdate onlineNotifyStatus = new ChatFriendsListUpdate(friend, (byte) 0); + client.getSession().write(onlineNotifyStatus.serialize()); + } + } + } + + List joinedChannels = ghost.getJoinedChatChannels(); + for (Integer roomId : joinedChannels) { + ChatRoom room = core.chatService.getChatRoom(roomId); + + if (room != null) { core.chatService.joinChatRoom(objectShortName, roomId); } + // work-around for any channels that may have been deleted, or only spawn on server startup, that were added to the joined channels + else { ghost.removeChannel(roomId); } + } + } + + creature.sendSystemMessage(core.getMotd(), DisplayType.Chat); + + if (creature.getGuildId() != 0) { + Guild guild = core.guildService.getGuildById(creature.getGuildId()); + + if (guild != null && guild.getMembers().containsKey(creature.getObjectID())) { + core.guildService.sendGuildMotd(creature, guild); + } + } + + if (core.getBountiesODB().contains(creature.getObjectID())) + core.missionService.getBountyMap().put(creature.getObjectID(), (BountyListItem) core.getBountiesODB().get(creature.getObjectID())); + + if (creature.getSlottedObject("datapad") != null) { + creature.getSlottedObject("datapad").viewChildren(creature, true, false, new Traverser() { + + @Override + public void process(SWGObject obj) { + if (obj instanceof MissionObject) { + MissionObject mission = (MissionObject) obj; + if (mission.getMissionType().equals("bounty")) { + ((BountyMissionObjective) mission.getObjective()).checkBountyActiveStatus(core); + } + } + } + }); + } core.playerService.postZoneIn(creature); - } }); @@ -447,12 +1017,19 @@ public class ObjectService implements INetworkDispatch { int counter = 0; for(SnapshotChunk chunk : visitor.getChunks()) { ++counter; - SWGObject obj = createObject(visitor.getName(chunk.nameId), chunk.id, planet, new Point3D(chunk.xPosition, chunk.yPosition, chunk.zPosition), new Quaternion(chunk.orientationW, chunk.orientationX, chunk.orientationY, chunk.orientationZ)); + // Since the ids are just ints, they append 0xFFFF86F9 to them + // This is demonstated in the packet sent to the server when you /target client-spawned buildouts + // This is done for buildouts; uncertain about snapshot objects so it's commented for now + //long objectId = Delta.createBuffer(8).putInt(chunk.id).putInt(0xF986FFFF).flip().getLong(); // Not sure what extension they add to 4-byte-only snapshot objectIds. With buildouts they add 0xFFFF86F9. This is demonstated in the packet sent to the server when you /target client-spawned objects + int objectId = chunk.id; + SWGObject obj = createObject(visitor.getName(chunk.nameId), objectId, planet, new Point3D(chunk.xPosition, chunk.yPosition, chunk.zPosition), new Quaternion(chunk.orientationW, chunk.orientationX, chunk.orientationY, chunk.orientationZ), null, false, false); if(obj != null) { + obj.setContainerPermissions(WorldPermissions.WORLD_PERMISSIONS); obj.setisInSnapshot(true); obj.setParentId(chunk.parentId); if(obj instanceof CellObject) { ((CellObject) obj).setCellNumber(chunk.cellNumber); + obj.setContainerPermissions(WorldCellPermissions.WORLD_CELL_PERMISSIONS); } } //System.out.print("\rLoading Object [" + counter + "/" + visitor.getChunks().size() + "] : " + visitor.getName(chunk.nameId)); @@ -463,12 +1040,265 @@ public class ObjectService implements INetworkDispatch { if(obj.getParentId() != 0 && getObject(obj.getParentId()) != null) { SWGObject parent = getObject(obj.getParentId()); parent.add(obj); - } + } } } System.out.println("Finished loading client objects for: " + planet.getName()); } + /** + * Creates a child object and places it at a position and orientation offset from the parent object. + * @param parent The parent Object. + * @param template The template file of the child. + * @param position The position as an offset to the parent object. + * @param orientation The orientation as an offset to the parent object. + */ + @SuppressWarnings("unchecked") + public SWGObject createChildObject(SWGObject parent, String template, Point3D position, Quaternion orientation, int cellNumber) { + + if(cellNumber == -1) { + + float radians = parent.getRadians(); + Point3D parentPos = parent.getWorldPosition(); + + float x = (float) ((Math.cos(radians) * position.x) + (Math.sin(radians) * position.z)); + float y = position.y + parentPos.y; + float z = (float) ((Math.cos(radians) * position.z) - (Math.sin(radians) * position.x)); + + x += parentPos.x; + z += parentPos.z; + + position = new Point3D(x, y, z); + orientation = MathUtilities.rotateQuaternion(orientation, radians, new Point3D(0, 1, 0)); + + } + + SWGObject child = createObject(template, 0, parent.getPlanet(), position, orientation); + child.setContainerPermissions(WorldPermissions.WORLD_PERMISSIONS); + if(parent.getAttachment("childObjects") == null) + parent.setAttachment("childObjects", new Vector()); + + ((Vector) parent.getAttachment("childObjects")).add(child); + + if(cellNumber != -1) + child.setAttachment("cellNumber", cellNumber); + + //core.simulationService.add(child, x, z); + return child; + } + + public SWGObject createChildObject(SWGObject parent, String template, float x, float y, float z, float qy, float qw) { + return createChildObject(parent, template, new Point3D(x, y, z), new Quaternion(qw, 0, qy, 0), -1); + } + + public SWGObject createChildObject(SWGObject parent, String template, float x, float y, float z, float qy, float qw, int cellNumber) { + return createChildObject(parent, template, new Point3D(x, y, z), new Quaternion(qw, 0, qy, 0), cellNumber); + } + + public void loadBuildoutObjects(Planet planet) throws InstantiationException, IllegalAccessException { + + DatatableVisitor buildoutTable = ClientFileManager.loadFile("datatables/buildout/areas_" + planet.getName() + ".iff", DatatableVisitor.class); + + for (int i = 0; i < buildoutTable.getRowCount(); i++) { + + String areaName = (String) buildoutTable.getObject(i, 0); + float x1 = (Float) buildoutTable.getObject(i, 1); + float z1 = (Float) buildoutTable.getObject(i, 2); + + readBuildoutDatatable(ClientFileManager.loadFile("datatables/buildout/" + planet.getName() + "/" + areaName + ".iff", DatatableVisitor.class), planet, x1, z1); + + } + } + + public void readBuildoutDatatable(DatatableVisitor buildoutTable, Planet planet, float x1, float z1) throws InstantiationException, IllegalAccessException { + + CrcStringTableVisitor crcTable = ClientFileManager.loadFile("misc/object_template_crc_string_table.iff", CrcStringTableVisitor.class); + List persistentBuildings = new ArrayList(); + Map duplicate = new HashMap(); + + for (int i = 0; i < buildoutTable.getRowCount(); i++) { + + String template; + + if(buildoutTable.getColumnCount() <= 11) + template = crcTable.getTemplateString((Integer) buildoutTable.getObject(i, 0)); + else + template = crcTable.getTemplateString((Integer) buildoutTable.getObject(i, 3)); + + if(template != null) { + + float px, py, pz, qw, qx, qy, qz, radius; + long objectId = 0, containerId = 0; + int type = 0, cellIndex = 0, portalCRC; + + if(buildoutTable.getColumnCount() <= 11) { + + cellIndex = (Integer) buildoutTable.getObject(i, 1); + px = (Float) buildoutTable.getObject(i, 2); + py = (Float) buildoutTable.getObject(i, 3); + pz = (Float) buildoutTable.getObject(i, 4); + qw = (Float) buildoutTable.getObject(i, 5); + qx = (Float) buildoutTable.getObject(i, 6); + qy = (Float) buildoutTable.getObject(i, 7); + qz = (Float) buildoutTable.getObject(i, 8); + radius = (Float) buildoutTable.getObject(i, 9); + portalCRC = (Integer) buildoutTable.getObject(i, 10); + + } else { + + // Since the ids are just ints, they append 0xFFFF86F9 to them + // This is demonstated in the packet sent to the server when you /target client-spawned objects + objectId = (((Integer) buildoutTable.getObject(i, 0) == 0) ? 0 : Delta.createBuffer(8).putInt((Integer) buildoutTable.getObject(i, 0)).putInt(0xF986FFFF).flip().getLong()); + containerId = (((Integer) buildoutTable.getObject(i, 1) == 0) ? 0 : Delta.createBuffer(8).putInt((Integer) buildoutTable.getObject(i, 1)).putInt(0xF986FFFF).flip().getLong()); + type = (Integer) buildoutTable.getObject(i, 2); + cellIndex = (Integer) buildoutTable.getObject(i, 4); + + px = (Float) buildoutTable.getObject(i, 5); + py = (Float) buildoutTable.getObject(i, 6); + pz = (Float) buildoutTable.getObject(i, 7); + qw = (Float) buildoutTable.getObject(i, 8); + qx = (Float) buildoutTable.getObject(i, 9); + qy = (Float) buildoutTable.getObject(i, 10); + qz = (Float) buildoutTable.getObject(i, 11); + radius = (Float) buildoutTable.getObject(i, 12); + portalCRC = (Integer) buildoutTable.getObject(i, 13); + + } + + // Treeku - Refactored to work around duplicate objectIds + // Required for instances/heroics which are duplicated ie. 10 times + if(!template.equals("object/cell/shared_cell.iff") && objectId != 0 && getObject(objectId) != null) { + SWGObject object = getObject(objectId); + + // Same coordinates is a true duplicate + if ((px + ((containerId == 0) ? 0 : x1)) == object.getPosition().x && + py == object.getPosition().y && + (pz + ((containerId == 0) ? 0 : z1)) == object.getPosition().z) { + //System.out.println("Duplicate buildout object: " + template); + continue; + } + } + + if (duplicate.containsKey(containerId)) { + containerId = duplicate.get(containerId); + } + + String planetName = planet.getName(); + + // TODO needs to a way to work for mustafar and kashyyyk which both have instances + if (objectId != 0 && getObject(objectId) != null && (planetName.contains("dungeon") || planetName.contains("adventure"))) { + SWGObject container = getObject(containerId); + float x = (px + ((container == null) ? x1 : container.getPosition().x)); + float z = (pz + ((container == null) ? z1 : container.getPosition().z)); + String key = "" + CRC.StringtoCRC(planet.getName()) + CRC.StringtoCRC(template) + type + containerId + cellIndex + x + py + z; + long newObjectId = 0; + + if (core.getDuplicateIdODB().contains(key)) { + newObjectId = ((DuplicateId) core.getDuplicateIdODB().get(key)).getObjectId(); + } else { + newObjectId = generateObjectID(); + core.getDuplicateIdODB().put(key, new DuplicateId(key, newObjectId)); + } + + duplicate.put(objectId, newObjectId); + objectId = newObjectId; + } + + List containers = new ArrayList(); + SWGObject object; + if(objectId != 0 && containerId == 0) { + if(portalCRC != 0) { + if (core.getSWGObjectODB().contains(objectId) && !duplicate.containsValue(objectId)) + continue; + containers.add(objectId); + object = createObject(template, objectId, planet, new Point3D(px + x1, py, pz + z1), new Quaternion(qw, qx, qy, qz), null, true, false); + object.setAttachment("childObjects", null); + + /*if (!duplicate.containsValue(objectId)) { + ((BuildingObject) object).createTransaction(core.getBuildingODB().getEnvironment()); + core.getBuildingODB().put((BuildingObject) object, Long.class, BuildingObject.class, ((BuildingObject) object).getTransaction()); + ((BuildingObject) object).getTransaction().commitSync(); + }*/ + } else { + object = createObject(template, 0, planet, new Point3D(px + x1, py, pz + z1), new Quaternion(qw, qx, qy, qz), null, false, false); + } + if(object == null) + continue; + object.setContainerPermissions(WorldPermissions.WORLD_PERMISSIONS); + if(radius > 256) + object.setAttachment("bigSpawnRange", new Boolean(true)); + if (!duplicate.containsValue(objectId) && object instanceof BuildingObject && portalCRC != 0) + persistentBuildings.add((BuildingObject) object); + } else if(containerId != 0) { + object = createObject(template, 0, planet, new Point3D(px, py, pz), new Quaternion(qw, qx, qy, qz), null, false, false); + if(containers.contains(containerId)) { + object.setContainerPermissions(WorldPermissions.WORLD_PERMISSIONS); + object.setisInSnapshot(false); + containers.add(objectId); + } + if(object instanceof CellObject && cellIndex != 0) { + object.setContainerPermissions(WorldCellPermissions.WORLD_CELL_PERMISSIONS); + ((CellObject) object).setCellNumber(cellIndex); + } + SWGObject parent = getObject(containerId); + + if(parent != null && object != null) { + if(parent instanceof BuildingObject && ((BuildingObject) parent).getCellByCellNumber(cellIndex) != null) + continue; + parent.add(object); + } + } else { + object = createObject(template, 0, planet, new Point3D(px + x1, py, pz + z1), new Quaternion(qw, qx, qy, qz), null, false, false); + object.setContainerPermissions(WorldPermissions.WORLD_PERMISSIONS); + } + + if (object != null && object instanceof TangibleObject && !(object instanceof CreatureObject)) { + ((TangibleObject) object).setStaticObject(true); + } + + //System.out.println("Spawning: " + template + " at: X:" + object.getPosition().x + " Y: " + object.getPosition().y + " Z: " + object.getPosition().z); + if(object != null) + object.setAttachment("isBuildout", new Boolean(true)); + } + + + } + + for(BuildingObject building : persistentBuildings) { + core.getSWGObjectODB().put(building.getObjectID(), building); + destroyObject(building); + } + + } + + public int objsInContainer(SWGObject owner, TangibleObject container) { + if (owner == null) { + Console.println("Owner null!"); + } + if (container == null) { + Console.println("Container is null!"); + } + final AtomicInteger count = new AtomicInteger(); + + container.viewChildren(owner, false, false, new Traverser() { + + @Override + public void process(SWGObject child) { + count.getAndIncrement(); + } + + }); + + return count.get(); + } + + public void persistObject(long key, Object value, ObjectDatabase odb) { + odb.put(key, value); + } + + public void deletePersistentObject(long key, ObjectDatabase odb) { + odb.remove(key); + } } diff --git a/src/services/object/ObjectTransactionManager.java b/src/services/object/ObjectTransactionManager.java deleted file mode 100644 index f4fcfc6a..00000000 --- a/src/services/object/ObjectTransactionManager.java +++ /dev/null @@ -1,98 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2013 - * - * This File is part of NGECore2. - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with this program. If not, see . - * - * Using NGEngine to work with NGECore2 is making a combined work based on NGEngine. - * Therefore all terms and conditions of the GNU Lesser General Public License cover the combination. - ******************************************************************************/ -package services.object; - -import java.util.Collection; -import java.util.Iterator; - -import com.sleepycat.je.Transaction; - -import engine.resources.objects.IPersistent; -import engine.resources.objects.SWGObject; - - -/** - * This Class is used to periodically save all Objects using transactions to disk. - * Remember that you still need commit transactions manually whenever an object using transactions is removed from zone i.e. when a player logs out. - * @author Light - */ -public class ObjectTransactionManager implements Runnable { - - private ObjectService objService; - private int cycleTime; - - /** - * - * @param objService ObjectService - * @param cycleTime Time between each full object save in ms. - */ - public ObjectTransactionManager(ObjectService objService, int cycleTime) { - - this.objService = objService; - this.cycleTime = cycleTime; - - } - - - @Override - public void run() { - - try { - - Thread.sleep(cycleTime); - - Collection swgObjects = objService.getObjectList().values(); - - synchronized(swgObjects) { - - Iterator it = swgObjects.iterator(); - - while(it.hasNext()) { - - SWGObject obj = it.next(); - - if(obj instanceof IPersistent && !obj.isInSnapshot() && obj.isPersistent()) { - - if(((IPersistent) obj).getTransaction() == null) - continue; - - if(!((IPersistent) obj).getTransaction().isValid()) - continue; - - Transaction txn = ((IPersistent) obj).getTransaction(); - txn.commitSync(); - - } - - } - - } - - } catch (InterruptedException e) { - e.printStackTrace(); - } - - } - -} - - diff --git a/src/services/pet/MountService.java b/src/services/pet/MountService.java new file mode 100644 index 00000000..c1d836d5 --- /dev/null +++ b/src/services/pet/MountService.java @@ -0,0 +1,784 @@ +/******************************************************************************* + * Copyright (c) 2013 + * + * This File is part of NGECore2. + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see . + * + * Using NGEngine to work with NGECore2 is making a combined work based on NGEngine. + * Therefore all terms and conditions of the GNU Lesser General Public License cover the combination. + ******************************************************************************/ +package services.pet; + +import java.util.ArrayList; +import java.util.List; +import java.util.Map; +import java.util.concurrent.atomic.LongAdder; + +import protocol.swg.UpdateContainmentMessage; +import main.NGECore; +import resources.common.OutOfBand; +import resources.datatables.DisplayType; +import resources.datatables.Options; +import resources.datatables.Posture; +import resources.datatables.State; +import resources.objects.building.BuildingObject; +import resources.objects.creature.CreatureObject; +import resources.objects.player.PlayerObject; +import engine.clientdata.ClientFileManager; +import engine.clientdata.visitors.DatatableVisitor; +import engine.resources.container.Traverser; +import engine.resources.objects.SWGObject; +import engine.resources.service.INetworkDispatch; +import engine.resources.service.INetworkRemoteEvent; + +public class MountService implements INetworkDispatch { + + private NGECore core; + + public MountService(NGECore core) { + this.core = core; + } + + // Creature mounts are considered pets as well + // Pet abilities and petId is in PLAY9 + + // The functions for vehicles, mounts and pets are similar, but not the same + // Hence the multiple services. + + public void generateVehicle(CreatureObject actor, SWGObject deed, String vehicleTemplate, String pcdTemplate) { + if (actor == null || vehicleTemplate == null || pcdTemplate == null) { + return; + } + + if (actor.getSlottedObject("ghost") == null) { + actor.sendSystemMessage(OutOfBand.ProsePackage("@pet/pet_menu:failed_to_call_vehicle"), DisplayType.Broadcast); + return; + } + + SWGObject datapad = actor.getSlottedObject("datapad"); + + if (datapad == null) { + return; + } + + // Unsure if these are the right attributes. It doesn't generate the vehicle if the datapad has max # of vehicles. + //if (datapad.getIntAttribute("data_size") >= datapad.getIntAttribute("datapad_slots")) { + //actor.sendSystemMessage(OutOfBand.ProsePackage("@pet/pet_menu:has_max_vehicle"), DisplayType.Broadcast); + //return; + //} + + if (actor.getTefTime() > 0){ + actor.sendSystemMessage(OutOfBand.ProsePackage("@pet/pet_menu:prose_cant_generate_yet", actor.getTefTime()), DisplayType.Broadcast); + return; + } + + SWGObject pcd = core.objectService.createObject(pcdTemplate, actor.getPlanet()); + + if (pcd == null) { + return; + } + + if (pcd.getSlottedObject("inventory") == null) { + pcd.add(core.objectService.createObject("object/tangible/inventory/shared_character_inventory.iff", pcd.getPlanet())); + } + + CreatureObject vehicle = (CreatureObject) core.objectService.createObject(vehicleTemplate, actor.getPlanet()); + + if (vehicle == null) { + return; + } + + vehicle.setOptions(Options.MOUNT | Options.ATTACKABLE, true); + + vehicle.setOwnerId(actor.getObjectID()); + + pcd.setAttachment("companionId", vehicle.getObjectID()); + + pcd.getSlottedObject("inventory").add(vehicle); + + datapad.add(pcd); + + if (deed != null) { + core.objectService.destroyObject(deed); + } + + actor.sendSystemMessage(OutOfBand.ProsePackage("@pet/pet_menu:device_added"), DisplayType.Broadcast); + + call(actor, pcd); + } + + public void generateMount(CreatureObject actor, SWGObject deed, String vehicleTemplate, String pcdTemplate) { + return; // NOT IMPLEMENTED + } + + public void call(CreatureObject actor, SWGObject pcd) { + if (actor == null) { + return; + } + + if (pcd == null) { + actor.sendSystemMessage(OutOfBand.ProsePackage("@pet/pet_menu:cant_call"), DisplayType.Broadcast); + return; + } + + if (isMounted(actor)) { + actor.sendSystemMessage(OutOfBand.ProsePackage("@pet/pet_menu:cannot_call_another_rideable"), DisplayType.Broadcast); + return; + } + + if (actor.isInCombat()) { + actor.sendSystemMessage(OutOfBand.ProsePackage("@pet/pet_menu:cannot_call_in_combat"), DisplayType.Broadcast); + return; + } + + if (actor.getContainer() != null) { + actor.sendSystemMessage(OutOfBand.ProsePackage("@pet/pet_menu:cannot_call_indoors"), DisplayType.Broadcast); + return; + } + + if (actor.getPosture() == Posture.Dead) { + actor.sendSystemMessage(OutOfBand.ProsePackage("@pet/pet_menu:cannot_call_while_dead"), DisplayType.Broadcast); + return; + } + + if (pcd.getSlottedObject("inventory") == null) { + actor.sendSystemMessage(OutOfBand.ProsePackage("@pet/pet_menu:cant_call"), DisplayType.Broadcast); + return; + } + + if (pcd.getStringAttribute("required_faction") != null && pcd.getStringAttribute("required_faction").length() > 0) { + if (!actor.getFaction().equals(pcd.getStringAttribute("required_faction"))) { + actor.sendSystemMessage(OutOfBand.ProsePackage("@pet/pet_menu:officer_faction"), DisplayType.Broadcast); + return; + } + } + + PlayerObject player = (PlayerObject) actor.getSlottedObject("ghost"); + + if (player == null) { + return; + } + + CreatureObject mount = (CreatureObject) core.objectService.getObject((Long) pcd.getAttachment("companionId")); + + if (mount == null) { + // Somehow the vehicle object has got lost + actor.sendSystemMessage(OutOfBand.ProsePackage("@pet/pet_menu:cant_call"), DisplayType.Broadcast); + return; + } + + mount.setAttachment("pcdAppearanceFilename", pcd.getTemplateData().getAttribute("appearanceFilename")); + + mount.setFaction(actor.getFaction()); + mount.setFactionStatus(actor.getFactionStatus()); + mount.setOwnerId(actor.getObjectID()); + + if (pcd.getTemplate().contains("vehicle")) { + callVehicle(actor, pcd, player, mount); + } else { + callMount(actor, pcd, player, mount); + } + } + + private void callVehicle(CreatureObject actor, SWGObject pcd, PlayerObject player, CreatureObject mount) { + if ((mount.getLevel() - actor.getLevel()) > 5) { + actor.sendSystemMessage(OutOfBand.ProsePackage("@pet/pet_menu:cant_call_level"), DisplayType.Broadcast); + return; + } + + // FIXME Movement skillmod should always be used instead of CREO4 speed vars directly. Movement skillmod should NEVER be 0 unless rooted. Currently it is, which is wrong. + //if (actor.getSkillModBase("movement") == 0) { + //actor.sendSystemMessage(OutOfBand.ProsePackage("@pet/pet_menu:cant_call_vehicle_rooted"), DisplayType.Broadcast); + //return; + //} + + if (actor.getPlanet().getName().contains("kashyyyk") && !actor.getPlanet().getName().contains("_main")) { + actor.sendSystemMessage(OutOfBand.ProsePackage("@pet/pet_menu:vehicle_restricted_scene"), DisplayType.Broadcast); + //mount_restricted_scene for creature mounts + return; + } + + if (player.isCallingCompanion()) { + actor.sendSystemMessage(OutOfBand.ProsePackage("@pet/pet_menu:cant_call_1sec"), DisplayType.Broadcast); + return; + } + + storeAll(actor); + + player.setCallingCompanion(true); + + if (actor.getTefTime() > 0) { + actor.sendSystemMessage(OutOfBand.ProsePackage("@pet/pet_menu:call_vehicle_delay", actor.getTefTime()), DisplayType.Broadcast); + } + + try { + while (actor.getTefTime() > 0) { + Thread.sleep(3000); + } + } catch (InterruptedException e) { + e.printStackTrace(); + } + + SWGObject datapad = actor.getSlottedObject("datapad"); + + if (datapad == null) { + return; + } + + datapad.viewChildren(actor, false, false, new Traverser() { + + public void process(SWGObject pcd) { + if (pcd.getAttachment("companionId") != null && mount.getObjectID() == ((Long) pcd.getAttachment("companionId"))) { + if (pcd.getSlottedObject("inventory") != null) { + LongAdder adder = new LongAdder(); + pcd.getSlottedObject("inventory").viewChildren(actor, false, false, (obj) -> adder.increment()); + + if (adder.intValue() == 1) { + pcd.getSlottedObject("inventory").remove(mount); + mount.setPosition(actor.getPosition().clone()); + mount.setOrientation(actor.getOrientation().clone()); + mount.setPlanet(actor.getPlanet()); + core.simulationService.add(mount, actor.getWorldPosition().x, actor.getWorldPosition().z, false); + } + } + } + } + + }); + + player.setCallingCompanion(false); + } + + private void callMount(CreatureObject actor, SWGObject pcd, PlayerObject player, CreatureObject mount) { + return; // NOT IMPLEMENTED + } + + public void damage(CreatureObject mount) { + // alter components to progressively reduce the painting. + //stfs + //customization_fading_veh + //customization_gone_veh + + if (mount == null) { + return; + } + + CreatureObject owner = (CreatureObject) core.objectService.getObject(mount.getOwnerId()); + + if (!mount.getTemplate().contains("vehicle")) { + dismount(owner, mount); + store(owner, mount); + mount.setConditionDamage(0); + return; + } + + if (mount.getConditionDamage() >= mount.getMaximumCondition()) { + disable(mount); + } + } + + public void disable(CreatureObject mount) { + mount.setOptions(Options.DISABLED, true); + + mount.viewChildren(mount, false, false, new Traverser() { + + public void process(SWGObject object) { + if (object == null || !(object instanceof CreatureObject)) { + return; + } + + CreatureObject rider = (CreatureObject) object; + + dismount(rider, mount); + + rider.sendSystemMessage(OutOfBand.ProsePackage("@pet/pet_menu:veh_disabled"), DisplayType.Broadcast); + } + + }); + } + + public boolean canRepair(CreatureObject actor, CreatureObject mount) { + if (actor == null || mount == null) { + return false; + } + + if (!mount.getOption(Options.MOUNT)) { + return false; + } + + if (!mount.getTemplate().contains("vehicle")) { + return false; + } + + if (mount.getOwnerId() != actor.getObjectID()) { + return false; + } + + if (mount.getOption(Options.DISABLED)) { + return false; + } + + if (mount.getConditionDamage() == 0) { + return false; + } + + List surroundings = core.simulationService.get(mount.getPlanet(), mount.getPosition().x, mount.getPosition().z, 32); + + for (SWGObject object : surroundings) { + if (object instanceof BuildingObject) { + if (object.getTemplate().contains("garage")) { + return true; + } + } + } + + return false; + } + + public void repair(CreatureObject repairer, CreatureObject mount) { + if (repairer == null || mount == null) { + return; + } + + if (!mount.getOption(Options.MOUNT)) { + return; + } + + if (core.objectService.getObject(mount.getOwnerId()) != repairer) { + return; + } + + if (mount.getOption(Options.DISABLED)) { + repairer.sendSystemMessage(OutOfBand.ProsePackage("@pet/pet_menu:cannot_repair_disabled"), DisplayType.Broadcast); + return; + } + + if (mount.getConditionDamage() == 0) { + repairer.sendSystemMessage(OutOfBand.ProsePackage("@pet/pet_menu:undamaged_vehicle"), DisplayType.Broadcast); + return; + } + + // This should produce an SUI window regarding cost and cost might be determined differently. + // But at the moment it's not important. + + if (!canRepair(repairer, mount)) { + repairer.sendSystemMessage(OutOfBand.ProsePackage("@pet/pet_menu:repair_unrecognized_garages"), DisplayType.Broadcast); + return; + } + + int cost = mount.getConditionDamage(); + + if (repairer.getCashCredits() < cost) { + repairer.sendSystemMessage(OutOfBand.ProsePackage("@pet/pet_menu:repair_failed_due_to_funds"), DisplayType.Broadcast); + return; + } + + mount.setConditionDamage(0); + + mount.setOptions(Options.DISABLED, false); + + repairer.sendSystemMessage(OutOfBand.ProsePackage("@pet/pet_menu:repaired_to_max"), DisplayType.Broadcast); + } + + public void mount(CreatureObject rider, CreatureObject mount) { + // Check if mount may be mounted // This is already checked in canMount + + if (rider == null) { + return; + } + + if (mount == null) { + return; + } + + if (!mount.getOption(Options.MOUNT)) { + return; + } + + if (mount.getOption(Options.DISABLED)) { + rider.sendSystemMessage(OutOfBand.ProsePackage("@pet/pet_menu:cant_mount_veh_disabled"), DisplayType.Broadcast); + return; + } + + if (rider.isInStealth()) { + rider.sendSystemMessage(OutOfBand.ProsePackage("@pet/pet_menu:no_mount_stealth"), DisplayType.Broadcast); + return; + } + + if (!canMount(rider, mount)) { + rider.sendSystemMessage(OutOfBand.ProsePackage("@pet/pet_menu:cant_mount"), DisplayType.Broadcast); + return; + } + + mount._add(rider); + mount.notifyObservers(new UpdateContainmentMessage(rider.getObjectID(), mount.getObjectID(), 4), true); + core.simulationService.remove(rider, rider.getWorldPosition().x, rider.getWorldPosition().z, false); + + rider.setState(State.RidingMount, true); + mount.setState(State.MountedCreature, true); + + // For some reason SOE decided the mount would need the following posture to be set for the character to have the driving or riding animation. + mount.setPosture((mount.getTemplate().contains("vehicle")) ? Posture.DrivingVehicle : Posture.RidingCreature); + + if (!mount.getSlotNameForObject(rider).equals("rider1")) { + core.buffService.addBuffToCreature(rider, "vehicle_passenger", mount); + } + } + + public CreatureObject getMount(SWGObject pcd) { + if (pcd == null) { + return null; + } + + if (pcd.getAttachment("companionId") == null) { + return null; + } + + CreatureObject mount = (CreatureObject) core.objectService.getObject((Long) pcd.getAttachment("companionId")); + + if (mount == null) { + return null; + } + + if (mount.getContainer() != null) { + return null; + } + + return mount; + } + + public CreatureObject getCompanion(CreatureObject actor) { + if (actor == null) { + return null; + } + + if (isMounted(actor)) { + return (CreatureObject) actor.getContainer(); + } + + SWGObject datapad = actor.getSlottedObject("datapad"); + + if (datapad == null) { + return null; + } + + final List companions = new ArrayList(); + + datapad.viewChildren(actor, false, false, new Traverser() { + + public void process(SWGObject pcd) { + if (pcd.getAttachment("companionId") != null) { + if (pcd.getSlottedObject("inventory") != null) { + LongAdder adder = new LongAdder(); + pcd.getSlottedObject("inventory").viewChildren(actor, false, false, (obj) -> adder.increment()); + + if (adder.intValue() == 0) { + CreatureObject companion = (CreatureObject) core.objectService.getObject((Long) pcd.getAttachment("companionId")); + companions.add(companion); + } + } + } + } + + }); + + if (companions.size() > 0) { + return companions.get(0); + } else { + return null; + } + } + + public boolean isMounted(CreatureObject rider) { + if (rider.getContainer() == null) { + return false; + } + + if (!(rider.getContainer() instanceof CreatureObject)) { + return false; + } + + CreatureObject mount = (CreatureObject) rider.getContainer(); + + if (!mount.getOption(Options.MOUNT)) { + return false; + } + + return true; + } + + public boolean isMounted(SWGObject actor, CreatureObject mount) { + return actor.getContainer() == mount; + } + + public boolean canMount(CreatureObject rider, CreatureObject mount) { + if (mount == null) { + return false; + } + + if (!mount.getOption(Options.MOUNT)) { + return false; + } + + if (isMounted(rider)) { + return false; + } + + if (rider.getObjectID() == mount.getOwnerId()) { + return true; + } + + // It's a potential passenger + + // See if there's driver first + if (mount.getSlottedObject("rider") == null) { + return false; + } + + // Check if there are any passenger slots left + + LongAdder adder = new LongAdder(); + + try { + mount.viewChildren(mount, false, false, (object) -> adder.increment()); + } catch(Exception ex) { + + } + + int passengers = adder.intValue(); + + try { + DatatableVisitor visitor = ClientFileManager.loadFile("datatables/mount/saddle_appearance_map.iff", DatatableVisitor.class); + + for (int i = 0; i < visitor.getRowCount(); i++) { + if (visitor.getObject(i, 2).equals(mount.getAttachment("pcdAppearanceFilename"))) { // saddle_appearance_filename + if (passengers >= (int) visitor.getObject(i, 1)) { // saddle_capacity + return false; + } + + break; + } + } + } catch (Exception e) { + e.printStackTrace(); + } + + CreatureObject owner = (CreatureObject) NGECore.getInstance().objectService.getObject(mount.getOwnerId()); + + if (owner == null) { + return false; + } + + if (owner.isAttackableBy(rider)) { + return false; + } + + if (rider.getGroupId() == 0 || rider.getGroupId() != owner.getGroupId()) { + return false; + } + + return true; + } + + public void dismount(CreatureObject rider, CreatureObject mount) { + + if (rider == null || mount == null) { + return; + } + + if (!isMounted(rider)) { + return; + } + + if (!mount.getOption(Options.MOUNT)) { + return; + } + + // Dismount all passengers + if (rider.getObjectID() == mount.getOwnerId()) { + + mount.viewChildren(mount, false, false, new Traverser() + { + public void process(SWGObject passenger) + { + if (passenger.getObjectId() != mount.getOwnerId()) dismount((CreatureObject) passenger, mount); + } + + }); + } + + // Remove rider from mount + mount._remove(rider); + + // Set mount states and stuff + if (rider.getObjectID() == mount.getOwnerId()) { + mount.setStateBitmask(mount.getOptionsBitmask() & ~State.MountedCreature); + mount.setState(State.MountedCreature, false); + } + + // Set rider states and stuff + rider.setStateBitmask(rider.getOptionsBitmask() & ~State.RidingMount); + rider.setState(State.RidingMount, false); + rider.setPosture(Posture.Upright); + + // Update observers and quadtree + mount.notifyObservers(new UpdateContainmentMessage(rider.getObjectID(), 0, -1), true); + core.simulationService.teleport(rider, mount.getWorldPosition(), mount.getOrientation(), 0); + core.simulationService.add(rider, mount.getWorldPosition().x, mount.getWorldPosition().z, false); + + core.buffService.clearBuffs(mount); + core.buffService.removeBuffFromCreature(rider, rider.getBuffByName("vehicle_passenger")); + + // Store mount if it's a creature + if (!mount.getTemplate().contains("vehicle") && rider.getObjectID() == mount.getOwnerId()) { + store(rider, mount); + } + } + + /* + * They seem to have been stored in the inventory of the pcd object. + * Judging by the fact pcds have inventories and many other things don't. + */ + public void store(CreatureObject storer, CreatureObject mount) { + if (mount.getContainer() != null) { + return; + } + + if (mount.getOwnerId() == 0) { + return; + } + + CreatureObject owner = (CreatureObject) core.objectService.getObject(mount.getOwnerId()); + + if (owner == null || storer == null || owner != storer) { + return; + } + + PlayerObject player = (PlayerObject) owner.getSlottedObject("ghost"); + + if (player.isCallingCompanion()) { + storer.sendSystemMessage(OutOfBand.ProsePackage("@pet/pet_menu:cant_store_1sec"), DisplayType.Broadcast); + return; + } + + if (isMounted(owner, mount)) { + storer.sendSystemMessage(OutOfBand.ProsePackage("@pet/pet_menu:must_dismount"), DisplayType.Broadcast); + return; + } + + if (owner.getTefTime() > 0) { + owner.sendSystemMessage(OutOfBand.ProsePackage("@pet/pet_menu:prose_cant_store_yet", owner.getTefTime()), DisplayType.Broadcast); + return; + } + + SWGObject datapad = owner.getSlottedObject("datapad"); + + if (datapad == null) { + return; + } + + datapad.viewChildren(owner, false, false, new Traverser() { + + public void process(SWGObject pcd) { + if (pcd.getAttachment("companionId") != null && mount.getObjectID() == ((Long) pcd.getAttachment("companionId"))) { + if (pcd.getSlottedObject("inventory") != null) { + LongAdder adder = new LongAdder(); + pcd.getSlottedObject("inventory").viewChildren(owner, false, false, (obj) -> adder.increment()); + + if (adder.intValue() == 0) { + core.simulationService.remove(mount, mount.getWorldPosition().x, mount.getWorldPosition().z, true); + pcd.getSlottedObject("inventory").add(mount); + } + } + } + } + + }); + } + + public void storeAll(CreatureObject actor) { + if (actor == null) { + return; + } + + while (getCompanion(actor) != null) { + SWGObject mount = getCompanion(actor); + + SWGObject datapad = actor.getSlottedObject("datapad"); + + if (datapad == null) { + return; + } + + datapad.viewChildren(actor, false, false, new Traverser() { + + public void process(SWGObject pcd) { + if (pcd.getAttachment("companionId") != null && mount.getObjectID() == ((Long) pcd.getAttachment("companionId"))) { + if (pcd.getSlottedObject("inventory") != null) { + LongAdder adder = new LongAdder(); + pcd.getSlottedObject("inventory").viewChildren(actor, false, false, (obj) -> adder.increment()); + + if (adder.intValue() == 0) { + core.simulationService.remove(mount, mount.getWorldPosition().x, mount.getWorldPosition().z, true); + pcd.getSlottedObject("inventory").add(mount); + } + } + } + } + + }); + } + } + + public void destroy(CreatureObject destroyer, SWGObject pcd) { + if (destroyer == null || pcd == null || pcd.getGrandparent() == null) { + return; + } + + if (destroyer.getObjectID() != pcd.getGrandparent().getObjectID()) { + return; + } + + if (pcd.getAttachment("companionId") == null) { + return; + } + + CreatureObject mount = (CreatureObject) core.objectService.getObject((Long) pcd.getAttachment("companionId")); + + dismount(destroyer, mount); + + store(destroyer, mount); + + String type = mount.getTemplate(); + + core.objectService.destroyObject(mount); + core.objectService.destroyObject(pcd); + + if (type.contains("vehicle")) { + destroyer.sendSystemMessage(OutOfBand.ProsePackage("@pet/pet_menu:vehicle_released"), DisplayType.Broadcast); + } else { + destroyer.sendSystemMessage(OutOfBand.ProsePackage("@pet/pet_menu:pet_released"), DisplayType.Broadcast); + } + } + + public void insertOpcodes(Map arg0, Map arg1) { + + } + + public void shutdown() { + + } + +} diff --git a/src/services/playercities/PlayerCity.java b/src/services/playercities/PlayerCity.java new file mode 100644 index 00000000..6caaf000 --- /dev/null +++ b/src/services/playercities/PlayerCity.java @@ -0,0 +1,857 @@ +/******************************************************************************* + * Copyright (c) 2013 + * + * This File is part of NGECore2. + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see . + * + * Using NGEngine to work with NGECore2 is making a combined work based on NGEngine. + * Therefore all terms and conditions of the GNU Lesser General Public License cover the combination. + ******************************************************************************/ +package services.playercities; + +import java.io.Serializable; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Date; +import java.util.List; +import java.util.Vector; + +import resources.objects.building.BuildingObject; +import resources.objects.creature.CreatureObject; +import resources.objects.waypoint.WaypointObject; +import services.chat.Mail; +import services.chat.WaypointAttachment; +import main.NGECore; +import engine.resources.objects.SWGObject; +import engine.resources.scene.Point3D; + +/** + * @author Charon + */ + +public class PlayerCity implements Serializable { + + private static final long serialVersionUID = 1L; + + public static final int DESERTED = 0; + public static final int NEWCITY = 0; + public static final int OUTPOST = 1; + public static final int VILLAGE = 2; + public static final int TOWNSHIP = 3; + public static final int CITY = 4; + public static final int METROPOLIS = 5; + + public static final int CLONE_LAB = 1; + public static final int DNA_LABORATORY = 2; + public static final int ENCORE_PERFORMANCE = 3; + public static final int ENTERTAINMENT_DISTRICT = 4; + public static final int IMPROVED_JOB_MARKET = 5; + public static final int MANUFACTURING_CENTER = 6; + public static final int MEDICAL_CENTER = 7; + public static final int RESEARCH_CENTER = 8; + public static final int SAMPLE_RICH = 9; + public static final int INDUSTRIAL_SOCIETY = 10; + public static final int SCIENTIFIC_SOCIETY = 11; + public static final int STRONGHOLD = 12; + + public static final String[] specialisationSTFNames = new String[]{"city_spec_cloning", + "city_spec_bm_incubator", + "city_spec_storyteller", + "city_spec_entertainer", + "city_spec_missions", + "city_spec_industry", + "city_spec_doctor", + "city_spec_research", + "city_spec_sample_rich", + "city_spec_master_manufacturing", + "city_spec_master_healing", + "city_spec_stronghold"}; + + public static final int BANK = 1; + public static final int CLONING_FACILITY = 2; + public static final int GARAGE = 3; + public static final int MEDIUM_GARDEN = 4; + public static final int LARGE_GARDEN = 5; + public static final int SHUTTLEPORT = 6; + + + private String cityName = ""; + private int cityID = -1; + private Point3D cityCenterPosition = new Point3D(0,0,0); + private int cityRadius = 0; + private int cityRank = 0; + private int specialization = -1; + private long mayorID = 0L; + private int cityTreasury = 0; + private int maintenanceFee = 0; + private int GCW_Alignment = 0; + private long nextElectionDate = 0L; + private long nextCityUpdate = 0L; + private long foundationTime = 0L; + private int incomeTax = 0; + private int propertyTax = 0; + private int salesTax = 0; + private int travelTax = 0; + private int garageTax = 0; + private boolean founded = false; + private boolean shuttlePort = false; + private boolean registered = false; + private boolean zoningEnabled = false; + + //private final long cityUpdateSpan = 7*86400*1000; + private final long cityUpdateSpan = 100*1000; + + //private final long legislationPeriod = 21*86400*1000; + private final long legislationPeriod = 100*1000; + + private Vector placedStructures = new Vector(); + private Vector citizens = new Vector(); + private Vector electionCandidates = new Vector(); + private Vector electionVotes = new Vector(); + private Vector cityBanList = new Vector(); + private Vector militiaList = new Vector(); + private Vector foundersList = new Vector(); + + public PlayerCity(){} + + public PlayerCity(CreatureObject founder, int cityID){ + + setCityCenterPosition(founder.getPosition()); + setCityRadius(150); + setFoundationTime(System.currentTimeMillis()); + setMaintenanceFee(1); + setNextCityUpdate(foundationTime+cityUpdateSpan); + setNextElectionDate(foundationTime+legislationPeriod); + citizens.add(founder.getObjectID()); + this.cityID = cityID; + setMayorID(founder.getObjectID()); + } + + public void handleGrantZoning() { + + } + + public void handleBuildRequest() { + + } + + public void checkPlacementPermission() { + + } + + public void processElection() { + // ToDo: handle everything + long winnerID = mayorID; + mayorID = winnerID; + electionVotes.clear(); + electionCandidates.clear(); + electionCandidates.add(mayorID); + setNextElectionDate(System.currentTimeMillis()+legislationPeriod); + } + + public void processCityUpdate() { + // has something changed? + System.out.println("processCityUpdate"); + int censusResult = citizens.size(); + int currentRank = getRank(); + + switch (currentRank) { + case NEWCITY : if (censusResult>=5){ + setRank(++currentRank); // Expand to Outpost + sendCityExpandMailAll(); + } + + if (censusResult<5){ + // kill city + } + break; + + case OUTPOST : if (censusResult>=10){ + setRank(++currentRank); // Expand to Village + sendCityExpandMailAll(); + } + if (censusResult<5){ + setRank(--currentRank); // Contract to Deserted + sendCityContractMailAll(); + } + break; + + case VILLAGE : if (censusResult>=15){ + setRank(++currentRank); // Expand to Township + sendCityExpandMailAll(); + } + if (censusResult<10){ + setRank(--currentRank); // Contract to Outpost + sendCityContractMailAll(); + } + break; + + case TOWNSHIP : if (censusResult>=30){ + setRank(++currentRank); // Expand to City + sendCityExpandMailAll(); + } + if (censusResult<15){ + setRank(--currentRank); // Contract to Village + sendCityContractMailAll(); + } + break; + + case CITY : if (censusResult>=40){ + setRank(++currentRank); // Expand to Metropolis + sendCityExpandMailAll(); + } + if (censusResult<15){ + setRank(--currentRank); // Contract to Township + sendCityContractMailAll(); + } + break; + + case METROPOLIS : if (censusResult<40){ + setRank(--currentRank); // Contract to City + sendCityContractMailAll(); + } + break; + + + } + + // collect taxes + for (long citizen : citizens){ + CreatureObject citizenObject = (CreatureObject) NGECore.getInstance().objectService.getObject(citizen); + + // ToDo: Handle tax evaders etc. + int incomeTax = getIncomeTax(); + citizenObject.setBankCredits(citizenObject.getBankCredits()-incomeTax); + cityTreasury += incomeTax; + + int propertyTaxRate = getPropertyTax()/100; + Vector allStructuresOfCitizen = new Vector(); // Collect the structures + int cumulatedPropertyTax = 0; + for (BuildingObject structure : allStructuresOfCitizen){ + cumulatedPropertyTax += propertyTaxRate*structure.getBMR(); + } + + citizenObject.setBankCredits(citizenObject.getBankCredits()-cumulatedPropertyTax); + cityTreasury += cumulatedPropertyTax; + } + + demolishHighRankStructures(); + setNextCityUpdate(System.currentTimeMillis()+cityUpdateSpan); + } + + public void cityFixUp(){ + + } + + public void demolishHighRankStructures() { + // Check if there are any structures in the city + // that require a higher rank than the current one + synchronized(placedStructures){ + Vector wreckingBall = new Vector(); + for (long structureID : placedStructures){ + SWGObject structure = NGECore.getInstance().objectService.getObject(structureID); + int structureCode = (int) structure.getAttachment("CityStructureCode"); + + if (structureCode==BANK && cityRank<2){ + wreckingBall.add(structure); + } + + if (structureCode==CLONING_FACILITY && cityRank<3){ + wreckingBall.add(structure); + } + + if (structureCode==GARAGE && cityRank<2){ + wreckingBall.add(structure); + } + + if (structureCode==MEDIUM_GARDEN && cityRank<2){ + wreckingBall.add(structure); + } + + if (structureCode==LARGE_GARDEN && cityRank<3){ + wreckingBall.add(structure); + } + + if (structureCode==SHUTTLEPORT && cityRank<4){ + wreckingBall.add(structure); + } + } + + for (SWGObject wreck : wreckingBall){ + placedStructures.remove(wreck.getObjectID()); + NGECore.getInstance().objectService.destroyObject(wreck.getObjectID()); + } + } + } + + public boolean checkFoundationSuccess() { + + Vector founders = getFoundersList(); + Vector citizenList = getCitizens(); + int founderCitizenCount = 0; + for (long founderId : founders){ + CreatureObject citizenObject = (CreatureObject) NGECore.getInstance().objectService.getObject(founderId); + if (citizenList.contains(founderId) && (long)citizenObject.getAttachment("residentCity")==this.getCityID()) + founderCitizenCount++; + } + if (founderCitizenCount==founders.size()){ + return true; // All founders are citizens now + + } + + return false; + } + + public void calculateMaintenance() { + + } + + public void handleBanRequest() { + + } + + public void handlePardonRequest() { + + } + + public int getRank() { + return cityRank; + } + + public void setRank(int cityRank) { + this.cityRank = cityRank; + } + + public int getSpecialization() { + return specialization; + } + + public void setSpecialization(int specialization) { + this.specialization = specialization; + sendSpecUpdateMail(specialization); + } + + public long getMayorID() { + return mayorID; + } + + public void setMayorID(long mayorID) { + this.mayorID = mayorID; + } + + public int getCityTreasury() { + return cityTreasury; + } + + public void setCityTreasury(int cityTreasury) { + this.cityTreasury = cityTreasury; + } + + public int getMaintenanceFee() { + return maintenanceFee; + } + + public void setMaintenanceFee(int maintenanceFee) { + this.maintenanceFee = maintenanceFee; + } + + public int getGCW_Alignment() { + return GCW_Alignment; + } + + public void setGCW_Alignment(int gCW_Alignment) { + GCW_Alignment = gCW_Alignment; + } + + public Vector getPlacedStructures() { + synchronized(placedStructures){ + return placedStructures; + } + } + + public void setPlacedStructures(Vector placedStructures) { + synchronized(placedStructures){ + this.placedStructures = placedStructures; + } + } + + public void addNewStructure(long newStructure) { + synchronized(placedStructures){ + this.placedStructures.add(newStructure); + } + } + + public Vector getCitizens() { + synchronized(citizens){ + return citizens; + } + } + + public void setCitizens(Vector citizens) { + synchronized(citizens){ + this.citizens = citizens; + } + } + + public void addCitizen(long citizen) { + synchronized(citizens){ + this.citizens.add(citizen); + } + CreatureObject citizenObject = (CreatureObject) NGECore.getInstance().objectService.getObject(citizen); + sendNewCitizenMailAll(citizenObject); + sendNewCitizenMail(citizenObject); + } + + public void removeCitizen(long citizen) { + synchronized(citizens){ + this.citizens.remove(citizen); + } + } + + public long getNextElectionDate() { + return nextElectionDate; + } + + public void setNextElectionDate(long nextElectionDate) { + this.nextElectionDate = nextElectionDate; + } + + public Vector getElectionCandidates() { + return electionCandidates; + } + + public void setElectionCandidates(Vector electionCandidates) { + this.electionCandidates = electionCandidates; + } + + public long getNextCityUpdate() { + return nextCityUpdate; + } + + public void setNextCityUpdate(long nextCityUpdate) { + this.nextCityUpdate = nextCityUpdate; + } + + public Vector getCityBanList() { + return cityBanList; + } + + public void setCityBanList(Vector cityBanList) { + this.cityBanList = cityBanList; + } + + public Vector getElectionVotes() { + return electionVotes; + } + + public void addToElectionVotes(byte vote) { + electionVotes.add(vote); + } + + public void addToTreasury(int amountToAdd) { + cityTreasury += amountToAdd; + } + + public void removeFromTreasury(int amountToDeduct) { + cityTreasury -= amountToDeduct; + } + + // Stalinesque method :D + public void setElectionVotes(Vector electionVotes) { + this.electionVotes = electionVotes; + } + + public Point3D getCityCenterPosition() { + return cityCenterPosition; + } + + public void setCityCenterPosition(Point3D cityCenterPosition) { + this.cityCenterPosition = cityCenterPosition; + } + + public int getCityRadius() { + return cityRadius; + } + + public void setCityRadius(int cityRadius) { + this.cityRadius = cityRadius; + } + + public Vector getMilitiaList() { + return militiaList; + } + + public void setMilitiaList(Vector militiaList) { + this.militiaList = militiaList; + } + + public Vector getFoundersList() { + return foundersList; + } + + public void setFoundersList(Vector foundersList) { + this.foundersList = foundersList; + } + + public long getFoundationTime() { + return foundationTime; + } + + public void setFoundationTime(long foundationTime) { + this.foundationTime = foundationTime; + } + + public boolean isFounded() { + return founded; + } + + public void setFounded(boolean founded) { + this.founded = founded; + } + + public String getCityName() { + return cityName; + } + + public void setCityName(String cityName) { + this.cityName = cityName; + sendNameChangeMail(cityName); + return; + } + + public int getCityID() { + return cityID; + } + + public void setCityID(int cityID) { + this.cityID = cityID; + } + + public int getIncomeTax() { + return incomeTax; + } + + public void setIncomeTax(int incomeTax) { + this.incomeTax = incomeTax; + } + + public int getPropertyTax() { + return propertyTax; + } + + public void setPropertyTax(int propertyTax) { + this.propertyTax = propertyTax; + } + + public int getSalesTax() { + return salesTax; + } + + public void setSalesTax(int salesTax) { + this.salesTax = salesTax; + } + + public int getTravelTax() { + return travelTax; + } + + public void setTravelTax(int travelTax) { + this.travelTax = travelTax; + } + + public int getGarageTax() { + return garageTax; + } + + public void setGarageTax(int garageTax) { + this.garageTax = garageTax; + } + + public boolean hasShuttlePort() { + return shuttlePort; + } + + public void setShuttlePort(boolean shuttlePort) { + this.shuttlePort = shuttlePort; + } + + public boolean isRegistered() { + return registered; + } + + public void setRegistered(boolean registered) { + this.registered = registered; + } + + public boolean isZoningEnabled() { + return zoningEnabled; + } + + public void setZoningEnabled(boolean zoningEnabled) { + this.zoningEnabled = zoningEnabled; + } + + public boolean isMilitiaMember(long actor){ + if (getMilitiaList().contains(actor)) + return true; + + return false; + } + + public boolean hasCitizen(long actor){ + if (getCitizens().contains(actor)) + return true; + + return false; + } + + public static String[] getSpecialisationSTFNames() { + return specialisationSTFNames; + } + + public List getSpecializationSTFNamesAsList() { + return Arrays.asList(specialisationSTFNames); + } + + public void sendSpecUpdateMail(int cityID) { + // city_version_update_subject_4 + // city_version_update_body_4 + Vector citizenList = getCitizens(); + for (long citizen : citizenList){ +// CreatureObject citizenObject = (CreatureObject) NGECore.getInstance().objectService.getObject(citizen); + Mail actorMail = new Mail(); + actorMail.setMailId(NGECore.getInstance().chatService.generateMailId()); + actorMail.setRecieverId(citizen); + actorMail.setStatus(Mail.NEW); + actorMail.setTimeStamp((int) (new Date().getTime() / 1000)); + actorMail.setMessage("@city/city:city_version_update_body_4"); + actorMail.setSubject("@city/city:city_version_update_subject_4"); + actorMail.setSenderName("City " + this.cityName); + +// List attachments = new ArrayList(); +// WaypointAttachment attachment = new WaypointAttachment(); +// attachment.active = false; +// attachments.add(attachment); +// attachment.cellID = constructionWaypoint.getCellId(); +// attachment.color = (byte)1; +// attachment.name = "City"; +// attachment.planetCRC = engine.resources.common.CRC.StringtoCRC(citizenObject.getPlanet().getName()); +// attachment.positionX = object.getPosition().x; +// attachment.positionY = 0; +// attachment.positionZ = object.getPosition().z; +// actorMail.setAttachments(attachments); + + NGECore.getInstance().chatService.storePersistentMessage(actorMail); +// if (newCitizen.getClient()!=null) +// NGECore.getInstance().chatService.sendPersistentMessageHeader(newCitizen.getClient(), actorMail); + + } + } + + public void sendNameChangeMail(String name) { + + } + + public void sendNewCitizenMailAll(CreatureObject newCitizen) { + + Vector citizenList = getCitizens(); + for (long citizen : citizenList){ + CreatureObject citizenObject = (CreatureObject) NGECore.getInstance().objectService.getObject(citizen); + Mail actorMail = new Mail(); + actorMail.setMailId(NGECore.getInstance().chatService.generateMailId()); + actorMail.setRecieverId(citizen); + actorMail.setStatus(Mail.NEW); + actorMail.setTimeStamp((int) (new Date().getTime() / 1000)); + actorMail.setMessage("@city/city:new_city_citizen_body"); + actorMail.setSubject("@city/city:new_city_citizen_subject"); + actorMail.setSenderName("City " + this.cityName); + + List attachments = new ArrayList(); + WaypointObject constructionWaypoint = (WaypointObject)NGECore.getInstance().objectService.createObject("object/waypoint/shared_world_waypoint_blue.iff", citizenObject.getPlanet(), citizenObject.getPosition().x, 0 ,citizenObject.getPosition().z); + WaypointAttachment attachment = new WaypointAttachment(); + attachment.active = false; + attachment.cellID = constructionWaypoint.getCellId(); + attachment.color = (byte)1; + attachment.name = "City"; + attachment.planetCRC = engine.resources.common.CRC.StringtoCRC(citizenObject.getPlanet().getName()); + attachment.positionX = citizenObject.getPosition().x; + attachment.positionY = 0; + attachment.positionZ = citizenObject.getPosition().z; + attachments.add(attachment); + actorMail.setWaypointAttachments(attachments); + + NGECore.getInstance().chatService.storePersistentMessage(actorMail); + if (newCitizen.getClient()!=null) + NGECore.getInstance().chatService.sendPersistentMessageHeader(newCitizen.getClient(), actorMail); + + } + } + + public void sendNewCitizenMail(CreatureObject citizen) { + + Mail actorMail = new Mail(); + actorMail.setMailId(NGECore.getInstance().chatService.generateMailId()); + actorMail.setRecieverId(citizen.getObjectID()); + actorMail.setStatus(Mail.NEW); + actorMail.setTimeStamp((int) (new Date().getTime() / 1000)); + actorMail.setMessage("@city/city:new_city_citizen_other_body"); + actorMail.setSubject("@city/city:new_city_citizen_other_subject"); + actorMail.setSenderName("City " + this.cityName); + + List attachments = new ArrayList(); + WaypointObject constructionWaypoint = (WaypointObject)NGECore.getInstance().objectService.createObject("object/waypoint/shared_world_waypoint_blue.iff", citizen.getPlanet(), citizen.getPosition().x, 0 ,citizen.getPosition().z); + WaypointAttachment attachment = new WaypointAttachment(); + attachment.active = false; + attachment.cellID = constructionWaypoint.getCellId(); + attachment.color = (byte)1; + attachment.name = "City"; + attachment.planetCRC = engine.resources.common.CRC.StringtoCRC(citizen.getPlanet().getName()); + attachment.positionX = citizen.getPosition().x; + attachment.positionY = 0; + attachment.positionZ = citizen.getPosition().z; + attachments.add(attachment); + actorMail.setWaypointAttachments(attachments); + + + NGECore.getInstance().chatService.storePersistentMessage(actorMail); + NGECore.getInstance().chatService.sendPersistentMessageHeader(citizen.getClient(), actorMail); + } + + public void sendCitizenLeftMailAll(CreatureObject newCitizen) { + + Vector citizenList = getCitizens(); + for (long citizen : citizenList){ + CreatureObject citizenObject = (CreatureObject) NGECore.getInstance().objectService.getObject(citizen); + Mail actorMail = new Mail(); + actorMail.setMailId(NGECore.getInstance().chatService.generateMailId()); + actorMail.setRecieverId(citizen); + actorMail.setStatus(Mail.NEW); + actorMail.setTimeStamp((int) (new Date().getTime() / 1000)); + actorMail.setMessage("@city/city:lost_citizen_body"); + actorMail.setSubject("@city/city:lost_citizen_subject"); + actorMail.setSenderName("City " + this.cityName); + + List attachments = new ArrayList(); + WaypointObject constructionWaypoint = (WaypointObject)NGECore.getInstance().objectService.createObject("object/waypoint/shared_world_waypoint_blue.iff", citizenObject.getPlanet(), citizenObject.getPosition().x, 0 ,citizenObject.getPosition().z); + WaypointAttachment attachment = new WaypointAttachment(); + attachment.active = false; + attachment.cellID = constructionWaypoint.getCellId(); + attachment.color = (byte)1; + attachment.name = "City"; + attachment.planetCRC = engine.resources.common.CRC.StringtoCRC(citizenObject.getPlanet().getName()); + attachment.positionX = citizenObject.getPosition().x; + attachment.positionY = 0; + attachment.positionZ = citizenObject.getPosition().z; + attachments.add(attachment); + actorMail.setWaypointAttachments(attachments); + + NGECore.getInstance().chatService.storePersistentMessage(actorMail); + if (newCitizen.getClient()!=null) + NGECore.getInstance().chatService.sendPersistentMessageHeader(newCitizen.getClient(), actorMail); + + } + } + + public void sendCityExpandMailAll() { + + Vector citizenList = getCitizens(); + for (long citizen : citizenList){ + CreatureObject citizenObject = (CreatureObject) NGECore.getInstance().objectService.getObject(citizen); + Mail actorMail = new Mail(); + actorMail.setMailId(NGECore.getInstance().chatService.generateMailId()); + actorMail.setRecieverId(citizen); + actorMail.setStatus(Mail.NEW); + actorMail.setTimeStamp((int) (new Date().getTime() / 1000)); + actorMail.setMessage("@city/city:city_expand_body"); + actorMail.setSubject("@city/city:city_expand_subject"); + actorMail.setSenderName("City " + this.cityName); + + List attachments = new ArrayList(); + WaypointObject constructionWaypoint = (WaypointObject)NGECore.getInstance().objectService.createObject("object/waypoint/shared_world_waypoint_blue.iff", citizenObject.getPlanet(), citizenObject.getPosition().x, 0 ,citizenObject.getPosition().z); + WaypointAttachment attachment = new WaypointAttachment(); + attachment.active = false; + attachment.cellID = constructionWaypoint.getCellId(); + attachment.color = (byte)1; + attachment.name = "City"; + attachment.planetCRC = engine.resources.common.CRC.StringtoCRC(citizenObject.getPlanet().getName()); + attachment.positionX = citizenObject.getPosition().x; + attachment.positionY = 0; + attachment.positionZ = citizenObject.getPosition().z; + attachments.add(attachment); + actorMail.setWaypointAttachments(attachments); + + NGECore.getInstance().chatService.storePersistentMessage(actorMail); + + } + } + + public void sendCityContractMailAll() { + + Vector citizenList = getCitizens(); + for (long citizen : citizenList){ + CreatureObject citizenObject = (CreatureObject) NGECore.getInstance().objectService.getObject(citizen); + Mail actorMail = new Mail(); + actorMail.setMailId(NGECore.getInstance().chatService.generateMailId()); + actorMail.setRecieverId(citizen); + actorMail.setStatus(Mail.NEW); + actorMail.setTimeStamp((int) (new Date().getTime() / 1000)); + actorMail.setMessage("@city/city:city_contract_body"); + actorMail.setSubject("@city/city:city_contract_subject"); + actorMail.setSenderName("City " + this.cityName); + + List attachments = new ArrayList(); + WaypointObject constructionWaypoint = (WaypointObject)NGECore.getInstance().objectService.createObject("object/waypoint/shared_world_waypoint_blue.iff", citizenObject.getPlanet(), citizenObject.getPosition().x, 0 ,citizenObject.getPosition().z); + WaypointAttachment attachment = new WaypointAttachment(); + attachment.active = false; + attachment.cellID = constructionWaypoint.getCellId(); + attachment.color = (byte)1; + attachment.name = "City"; + attachment.planetCRC = engine.resources.common.CRC.StringtoCRC(citizenObject.getPlanet().getName()); + attachment.positionX = citizenObject.getPosition().x; + attachment.positionY = 0; + attachment.positionZ = citizenObject.getPosition().z; + attachments.add(attachment); + actorMail.setWaypointAttachments(attachments); + + NGECore.getInstance().chatService.storePersistentMessage(actorMail); + } + } + + + + + // Test method to be deleted later + public void Add10MoreCitizens() { + synchronized(citizens){ + for (int i=0;i<10;i++){ + this.citizens.add(this.getMayorID()); + } + + } + } + + + // Test method to be deleted later + public void Deduct10Citizens() { + int citizenCount = this.getCitizens().size(); + synchronized(citizens){ + this.citizens.clear(); + + for (int i=0;i + * + * This File is part of NGECore2. + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see . + * + * Using NGEngine to work with NGECore2 is making a combined work based on NGEngine. + * Therefore all terms and conditions of the GNU Lesser General Public License cover the combination. + ******************************************************************************/ +package services.playercities; + +import java.util.Collections; +import java.util.Map; +import java.util.Vector; +import java.util.concurrent.Executors; +import java.util.concurrent.ScheduledExecutorService; +import java.util.concurrent.TimeUnit; + +import resources.objects.building.BuildingObject; +import resources.objects.creature.CreatureObject; +import resources.objects.tangible.TangibleObject; +import services.sui.SUIWindow; +import services.sui.SUIWindow.SUICallback; +import services.sui.SUIWindow.Trigger; +import engine.resources.objects.SWGObject; +import engine.resources.scene.Point3D; +import engine.resources.service.INetworkDispatch; +import engine.resources.service.INetworkRemoteEvent; +import main.NGECore; + +/** + * @author Charon + */ + +public class PlayerCityService implements INetworkDispatch { + + private NGECore core; + private final ScheduledExecutorService scheduler = Executors.newScheduledThreadPool(1); + + private Vector playerCities = new Vector(); + private int cityID = 0; // This must be persisted or handled via objectservice somehow + + // static helper variable to be deleted later + public static boolean sandboxCityBuilt = false; + + public PlayerCityService(NGECore core) { + this.core = core; + + scheduler.scheduleAtFixedRate(() -> { + administratePlayerCities(); + }, 0, 1, TimeUnit.MINUTES); + } + + public void administratePlayerCities() { + synchronized(playerCities){ + Vector unfoundedCities = new Vector(); + for (PlayerCity city : playerCities){ + + if (city.getNextCityUpdate()<=System.currentTimeMillis()) + city.processCityUpdate(); + + if (city.getNextElectionDate()<=System.currentTimeMillis()) + city.processElection(); + + if (! city.isFounded() && city.getFoundationTime()<=System.currentTimeMillis()-(60*60*24*1000)){ + if (! city.checkFoundationSuccess()) + unfoundedCities.add(city); + } + } + + if (unfoundedCities.size()>0){ + playerCities.removeAll(unfoundedCities); + } + playerCities.removeAll(Collections.singleton(null)); + } + } + + public PlayerCity addNewPlayerCity(CreatureObject founder) { + PlayerCity newCity = null; + synchronized(playerCities){ + newCity = new PlayerCity(founder,cityID++); + playerCities.add(newCity); + } + newCitySUI1(founder,newCity); + return newCity; + } + + public PlayerCity getCityObjectIsIn(SWGObject object) { + PlayerCity foundCity = null; + synchronized(playerCities){ + for (PlayerCity city : playerCities){ + int radius = city.getCityRadius(); + float distance = object.getWorldPosition().getDistance2D(city.getCityCenterPosition()); + if (distance returnList = new Vector(); + returnList.add("txtInput:LocalText"); + window.addHandler(0, "", Trigger.TRIGGER_OK, returnList, new SUICallback() { + @Override + public void process(SWGObject owner, int eventType, Vector returnList) { + if (returnList.size()==0) + return; + PlayerCity playerCity = main.NGECore.getInstance().playerCityService.getPlayerCity((CreatureObject) owner); + playerCity.setCityName(returnList.get(0)); + //owner.sendSystemMessage("@city/city:name_changed", 0); + core.suiService.closeSUIWindow(owner, 0); + newCitySUI2((CreatureObject) owner, playerCity); + } + }); + core.suiService.openSUIWindow(window); + } + + public void newCitySUI2(CreatureObject citizen, final PlayerCity newCity) { + final SUIWindow window = core.suiService.createSUIWindow("Script.messageBox", citizen, citizen, 0); + window.setProperty("bg.caption.lblTitle:Text", "@city/city:rank0"); + window.setProperty("Prompt.lblPrompt:Text", "@city/city:new_city_body"); + window.setProperty("btnOk:visible", "True"); + window.setProperty("btnCancel:visible", "True"); + window.setProperty("btnOk:Text", "@ok"); + window.setProperty("btnCancel:Text", "@cancel"); + Vector returnList = new Vector(); + window.addHandler(0, "", Trigger.TRIGGER_OK, returnList, new SUICallback() { + @Override + public void process(SWGObject owner, int eventType, Vector returnList) { + core.suiService.closeSUIWindow(owner, 0); + } + }); + core.suiService.openSUIWindow(window); + } + + + // Test method to be deleted later + public void buildSandboxTestCity(CreatureObject founder) { + + if (sandboxCityBuilt) + return; + + float positionX = 2170.0F; + float positionY = 1.0F; + float positionZ = -4659.0F; + + String structureTemplate = "object/building/player/city/shared_cityhall_tatooine.iff"; + + BuildingObject cityHall = (BuildingObject) core.objectService.createObject(structureTemplate, 0, founder.getPlanet(), new Point3D(positionX, positionY, positionZ), founder.getOrientation()); + core.simulationService.add(cityHall, cityHall.getPosition().x, cityHall.getPosition().z, true); + + SWGObject sign = core.objectService.createChildObject((SWGObject)cityHall, "object/tangible/sign/player/shared_house_address.iff", -7.39F, 2.36F, 2, -1, 0, -1); + cityHall.setAttachment("structureSign", sign); + + PlayerCity sandboxCity = null; + synchronized(playerCities){ + sandboxCity = new PlayerCity(founder,cityID++); + sandboxCity.setCityName("Sandbox City"); + playerCities.add(sandboxCity); + } + + cityHall.setAttachment("structureCity", sandboxCity.getCityID()); + founder.setAttachment("residentCity", sandboxCity.getCityID()); + // Name the sign +// TangibleObject sign = (TangibleObject) cityHall.getAttachment("structureSign"); +// String playerFirstName = founder.getCustomName().split(" ")[0]; +// +// if (sign !=null) +// sign.setCustomName2(playerFirstName + "'s House"); + + + + // Structure management + Vector admins = new Vector<>(); + admins.add(founder.getObjectID()); + + cityHall.setAttachment("structureOwner", founder.getObjectID()); + cityHall.setAttachment("structureAdmins", admins); + cityHall.setDeedTemplate("object/tangible/deed/city_deed/shared_cityhall_tatooine_deed.iff"); + cityHall.setBMR(325); + cityHall.setConditionDamage(100); + + + positionY = core.terrainService.getHeight(founder.getPlanetId(), positionX, positionZ); + founder.setPosition(new Point3D(positionX,positionY,positionZ+50)); + core.simulationService.teleport(founder, new Point3D(positionX,positionY,positionZ+50), founder.getOrientation(), 0); + + TangibleObject swoopDeed = (TangibleObject) core.objectService.createObject("object/tangible/deed/vehicle_deed/shared_speederbike_swoop_deed.iff", founder.getPlanet()); + SWGObject inventory = founder.getSlottedObject("inventory"); + inventory.add(swoopDeed); + + TangibleObject shuttleportDeed = (TangibleObject) core.objectService.createObject("object/tangible/deed/city_deed/shared_shuttleport_tatooine_deed.iff", founder.getPlanet()); + inventory.add(shuttleportDeed); + + TangibleObject garden1 = (TangibleObject) core.objectService.createObject("object/tangible/deed/city_deed/shared_garden_tatooine_sml_01_deed.iff", founder.getPlanet()); + inventory.add(garden1); + + + //structureTemplate = "object/building/player/city/shared_shuttleport_tatooine.iff"; + structureTemplate = "object/building/tatooine/shared_shuttleport_tatooine.iff"; + positionX = 2170.0F; + positionY = 1.0F; + positionZ = -4559.0F; + positionY = core.terrainService.getHeight(founder.getPlanetId(), positionX, positionZ); + + //StructureObject shuttlePort = (StructureObject) core.objectService.createObject(structureTemplate, 0, founder.getPlanet(), new Point3D(positionX, positionY, positionZ), founder.getOrientation()); + //BuildingObject shuttlePort = (BuildingObject) core.objectService.createObject(structureTemplate, 0, founder.getPlanet(), new Point3D(positionX, positionY, positionZ), founder.getOrientation()); + //shuttlePort.setAttachment("cellsSorted", new Boolean(true)); + //"bigSpawnRange" + + //core.simulationService.add(shuttlePort, shuttlePort.getPosition().x, shuttlePort.getPosition().z, true); +// sign = core.objectService.createChildObject((SWGObject)shuttlePort, "object/tangible/sign/player/shared_house_address.iff", -7.39F, 2.36F, 2, -1, 0, -1); +// shuttlePort.setAttachment("structureSign", sign); + + // Structure management + admins = new Vector<>(); + admins.add(founder.getObjectID()); + +// shuttlePort.setAttachment("structureOwner", founder.getObjectID()); +// shuttlePort.setAttachment("structureAdmins", admins); +// shuttlePort.setDeedTemplate("object/tangible/deed/city_deed/shared_cityhall_tatooine_deed.iff"); +// shuttlePort.setBMR(12); +// shuttlePort.setConditionDamage(100); + + sandboxCityBuilt = true; + } + + + @Override + public void insertOpcodes(Map arg0, + Map arg1) { + // TODO Auto-generated method stub + + } + + @Override + public void shutdown() { + // TODO Auto-generated method stub + + } +} diff --git a/src/services/resources/HarvesterService.java b/src/services/resources/HarvesterService.java new file mode 100644 index 00000000..d9d79383 --- /dev/null +++ b/src/services/resources/HarvesterService.java @@ -0,0 +1,1241 @@ +/******************************************************************************* + * Copyright (c) 2013 + * + * This File is part of NGECore2. + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see . + * + * Using NGEngine to work with NGECore2 is making a combined work based on NGEngine. + * Therefore all terms and conditions of the GNU Lesser General Public License cover the combination. + ******************************************************************************/ +package services.resources; + +import java.nio.ByteOrder; +import java.util.ArrayList; +import java.util.Collections; +import java.util.Comparator; +import java.util.Date; +import java.util.List; +import java.util.Map; +import java.util.Random; +import java.util.Vector; +import java.util.concurrent.ExecutionException; +import java.util.concurrent.Executors; +import java.util.concurrent.ScheduledExecutorService; +import java.util.concurrent.ScheduledFuture; +import java.util.concurrent.TimeUnit; + +import org.apache.mina.core.buffer.IoBuffer; +import org.apache.mina.core.session.IoSession; + +import protocol.swg.EnterStructurePlacementModeMessage; +import protocol.swg.SceneCreateObjectByCrc; +import protocol.swg.SceneDestroyObject; +import protocol.swg.SceneEndBaselines; +import main.NGECore; +import engine.clients.Client; +import engine.resources.common.CRC; +import engine.resources.container.Traverser; +import engine.resources.database.ODBCursor; +import engine.resources.objects.SWGObject; +import engine.resources.scene.Planet; +import engine.resources.scene.Point3D; +import engine.resources.scene.Quaternion; +import engine.resources.service.INetworkDispatch; +import engine.resources.service.INetworkRemoteEvent; +import resources.common.ObjControllerOpcodes; +import resources.objects.creature.CreatureObject; +import resources.objects.harvester.HarvesterMessageBuilder; +import resources.objects.harvester.HarvesterObject; +import resources.objects.installation.InstallationObject; +import resources.objects.player.PlayerObject; +import resources.objects.resource.GalacticResource; +import resources.objects.resource.ResourceContainerObject; +import resources.objects.resource.ResourceRoot; +import resources.objects.tangible.TangibleObject; +import resources.objects.waypoint.WaypointObject; +import services.chat.Mail; +import services.chat.WaypointAttachment; +import services.sui.SUIWindow; +import services.sui.SUIWindow.SUICallback; +import services.sui.SUIWindow.Trigger; + +/** + * @author Charon + */ + +public class HarvesterService implements INetworkDispatch { + + private NGECore core; + private final ScheduledExecutorService scheduler = Executors.newScheduledThreadPool(1); + + private Vector allHarvesters = new Vector(); + private Vector allConstructors = new Vector(); + + public HarvesterService(NGECore core) { + this.core = core; + //core.commandService.registerCommand("permissionlistmodify"); + //core.commandService.registerCommand("harvesterselectresource"); + //core.commandService.registerCommand("harvesteractivate"); + //core.commandService.registerCommand("harvesterdeactivate"); + //core.commandService.registerCommand("harvesterdiscardhopper"); + //core.commandService.registerCommand("harvestergetresourcedata"); + //core.commandService.registerCommand("resourceemptyhopper"); + //core.commandService.registerCommand("placestructure"); + //generateNoBuildData(); + scheduleHarvesterService(); + } + + public void loadHarvesters() { + ODBCursor cursor = core.getSWGObjectODB().getCursor(); + + while(cursor.hasNext()) { + final SWGObject harvester = (SWGObject) cursor.next(); + if(!(harvester instanceof HarvesterObject) || harvester == null) + continue; + core.objectService.getObjectList().put(harvester.getObjectID(), harvester); + Planet planet = core.terrainService.getPlanetByID(harvester.getPlanetId()); + harvester.setPlanet(planet); + harvester.viewChildren(harvester, true, true, (object) -> { + core.objectService.getObjectList().put(object.getObjectID(), object); + if(object.getParentId() != 0 && object.getContainer() == null) + object.setParent(harvester); + object.getContainerInfo(object.getTemplate()); + }); + allHarvesters.add((HarvesterObject) harvester); + } + + cursor.close(); + } + + public void saveHarvesters() { + for(HarvesterObject harvester : allHarvesters) { + core.objectService.persistObject(harvester.getObjectID(), harvester, core.getSWGObjectODB()); + } + } + + + @Override + public void insertOpcodes(Map swgOpcodes, Map objControllerOpcodes) { + + objControllerOpcodes.put(ObjControllerOpcodes.RESOURCE_EMPTY_HOPPER, new INetworkRemoteEvent() { + + @Override + public void handlePacket(IoSession session, IoBuffer data) throws Exception { + data.order(ByteOrder.LITTLE_ENDIAN); + Client client = core.getClient(session); + +// StringBuilder sb = new StringBuilder(); +// for (byte b : data.array()) { +// sb.append(String.format("%02X ", b)); +// } +// System.out.println(sb.toString()); + + /* + 05 00 46 5E CE 80 83 00 00 00 ED 00 00 00 3E 45 + 04 00 00 00 00 00 00 00 00 00 3E 45 04 00 00 00 + 00 00 90 52 05 00 00 00 00 00 D7 35 05 00 00 00 + 00 00 01 00 00 00 00 07 + */ + + long playerId = data.getLong(); // 3E 45 04 00 00 00 00 00 + data.getInt(); // 00 00 00 00 + data.getLong(); // 3E 45 04 00 00 00 00 00 + long harvesterId = data.getLong(); // 1E 55 05 00 00 00 00 00 + //long containerId = data.getLong(); // 1E 55 05 00 00 00 00 00 Resources ID + long resourceId = data.getLong(); // 1E 55 05 00 00 00 00 00 Resources ID + int stackCount = data.getInt(); // Stack count + byte actionMode = data.get(); // 0 for retrieving, 1 for discarding + byte updateCount = data.get(); // updateCount + + CreatureObject actor = (CreatureObject) client.getParent(); + SWGObject target = core.objectService.getObject(harvesterId); + + handleEmptyHopper(actor, target, harvesterId, resourceId, stackCount, actionMode, updateCount); + } + }); + + } + + + public void scheduleHarvesterService(){ + + final ScheduledFuture task = scheduler.scheduleAtFixedRate(new Runnable() { + + @Override + public void run() { + ServiceProcessing(); + } + + }, 10, 5000, TimeUnit.MILLISECONDS); + + ExecutionSurveillanceThread executionSurveillance = new ExecutionSurveillanceThread(task); + executionSurveillance.start(); + } + + class ExecutionSurveillanceThread extends Thread { + ScheduledFuture task; + + public ExecutionSurveillanceThread(ScheduledFuture task) { + this.task = task; + } + + public void run() { + try { + try { + task.get(); + } catch (InterruptedException e1) { + System.err.println("InterruptedException IN HARVESTERSERVICE !!! " + e1.getMessage()); + } + } catch (ExecutionException e2) { + System.err.println("EXCEPTION IN HARVESTERSERVICE !!! " + e2.getMessage()); + System.err.println("EXCEPTION CAUSE : " + e2.getCause()); + } + } + } + + public void ServiceProcessing(){ + synchronized(allHarvesters){ + for (HarvesterObject harvester : allHarvesters){ + if (harvester!=null) + updateHarvester(harvester); + } + allHarvesters.removeAll(Collections.singleton(null)); + } + synchronized(allConstructors){ + Vector removeConstructors = new Vector(); + for (InstallationObject constructor : allConstructors){ + boolean readyToBuild = checkBuildTime(constructor); + if (readyToBuild) + removeConstructors.add(constructor); + } + allConstructors.removeAll(removeConstructors); + allConstructors.removeAll(Collections.singleton(null)); + } + } + + + public void addHarvester(SWGObject harvester){ + synchronized(allHarvesters){ + if (harvester!=null) + allHarvesters.add((HarvesterObject)harvester); + } + } + + public void removeHarvester(SWGObject harvester){ + synchronized(allHarvesters){ + if (harvester!=null) + allHarvesters.remove((HarvesterObject)harvester); + } + } + + public boolean checkBuildTime(InstallationObject installation){ + boolean value = false; + long startTime = (long) installation.getAttachment("ConstructionStart"); + if (startTime+50000){ + String[] helper = ownerName.split(" "); + ownerName = helper[0]; + } + + String maintenancePool_string = ""+(int)harvester.getMaintenanceAmount(); + int hourlyMaintenance = harvester.getMaintenanceCost(); + float totalNumberOfHours = (float)harvester.getMaintenanceAmount()/hourlyMaintenance; + float minuteFraction = ((totalNumberOfHours * 100) % 100) / 100; + int nDays = (int)totalNumberOfHours / 24; + float difference = totalNumberOfHours % 24; + int nHours = (int)difference; + int nMinutes = (int)(minuteFraction *60); + maintenancePool_string += " (" + nDays + " days, " + nHours + " hours, " + nMinutes + " minutes)"; + // Power reserves calculation + String powerReserves_string = ""+(int)harvester.getPowerLevel(); + int hourlyPower = harvester.getPowerCost(); + totalNumberOfHours = (float)harvester.getPowerLevel()/hourlyPower; + minuteFraction = ((totalNumberOfHours * 100) % 100) / 100; + nDays = (int)totalNumberOfHours / 24; + difference = totalNumberOfHours % 24; + nHours = (int)difference; + nMinutes = (int)(minuteFraction *60); + powerReserves_string += " (" + nDays + " days, " + nHours + " hours, " + nMinutes + " minutes)"; + + window.addListBoxMenuItem("@player_structure:owner_prompt" + " " + ownerName, 0); + window.addListBoxMenuItem("@player_structure:structure_public", 1); + window.addListBoxMenuItem("@player_structure:condition_prompt" + " " + target.getConditionDamage(), 2); + window.addListBoxMenuItem("@player_structure:maintenance_pool_prompt " + maintenancePool_string, 3); + window.addListBoxMenuItem("@player_structure:maintenance_rate_prompt " + harvester.getMaintenanceCost() + " cr/h", 4); // @player_structure:credits_per_hour + window.addListBoxMenuItem("@player_structure:maintenance_mods_prompt", 5); + window.addListBoxMenuItem("@player_structure:power_reserve_prompt " + powerReserves_string, 6); + window.addListBoxMenuItem("@player_structure:power_consumption_prompt " + harvester.getPowerCost() + " @player_structure:units_per_hour", 7); + window.setProperty("btnOk:visible", "True"); + window.setProperty("btnCancel:visible", "True"); + window.setProperty("btnOk:Text", "@ok"); + window.setProperty("btnCancel:Text", "@cancel"); + Vector returnList = new Vector(); + returnList.add("List.lstList:SelectedRow"); + + window.addHandler(0, "", Trigger.TRIGGER_OK, returnList, new SUICallback() { + @Override + public void process(SWGObject owner, int eventType, Vector returnList) { + core.suiService.closeSUIWindow(owner, 0); + } + }); + core.suiService.openSUIWindow(window); + } + + public void createPayMaintenanceSUIPage(SWGObject owner, TangibleObject target) { + CreatureObject creature = (CreatureObject) owner; + final HarvesterObject harvester = (HarvesterObject)target; + final SUIWindow window = core.suiService.createSUIWindow("Script.transfer", owner, target, 10); + window.setProperty("bg.caption.lblTitle:Text", "@player_structure:select_amount"); + window.setProperty("Prompt.lblPrompt:Text", "@player_structure:select_maint_amount" + + "\n \n @player_structure:current_maint_pool : " + (int)harvester.getMaintenanceAmount()); + + window.setProperty("msgPayMaintenance", "transaction.txtInputFrom"); + + window.setProperty("transaction.lblFrom:Text", "@player_structure:total_funds"); + window.setProperty("transaction.lblTo:Text", "@player_structure:to_pay"); + window.setProperty("transaction.lblFrom", "@player_structure:total_funds"); + window.setProperty("transaction.lblTo", "@player_structure:to_pay"); + + window.setProperty("transaction.lblStartingFrom:Text", ""+creature.getCashCredits()); + window.setProperty("transaction.lblStartingTo:Text", "0"); + + window.setProperty("transaction:InputFrom", "555555"); + window.setProperty("transaction:InputTo", "666666"); + + window.setProperty("transaction:txtInputFrom", ""+creature.getCashCredits()); + window.setProperty("transaction:txtInputTo", "1"); + window.setProperty("transaction.txtInputFrom:Text", ""+creature.getCashCredits()); + window.setProperty("transaction.txtInputTo:Text", "" + "0"); + + window.setProperty("transaction.ConversionRatioFrom", "1"); + window.setProperty("transaction.ConversionRatioTo", "0"); + + window.setProperty("btnOk:visible", "True"); + window.setProperty("btnCancel:visible", "True"); + window.setProperty("btnOk:Text", "@ok"); + window.setProperty("btnCancel:Text", "@cancel"); + + Vector returnList = new Vector(); + returnList.add("transaction.txtInputFrom:Text"); + returnList.add("transaction.txtInputTo:Text"); + window.addHandler(0, "", Trigger.TRIGGER_OK, returnList, new SUICallback() { + @Override + public void process(SWGObject owner, int eventType, Vector returnList) { + CreatureObject crafter = (CreatureObject)owner; + crafter.setCashCredits(crafter.getCashCredits() - Integer.parseInt(returnList.get(1))); + harvester.setMaintenanceAmount(harvester.getMaintenanceAmount()+Float.parseFloat(returnList.get(1))); + //String displayname = "@installation_n:"+harvester.getStfName(); + String displayname = "the structure"; + if (harvester.getCustomName()!=null) + displayname = harvester.getCustomName(); + crafter.sendSystemMessage("You successfully make a payment of " + Integer.parseInt(returnList.get(1)) + " credits to " + displayname + ".", (byte) 0); + core.suiService.closeSUIWindow(owner, 0); + } + }); + window.addHandler(1, "", Trigger.TRIGGER_CANCEL, returnList, new SUICallback() { + @Override + public void process(SWGObject owner, int eventType, Vector returnList) { + core.suiService.closeSUIWindow(owner, 0); + } + }); + core.suiService.openSUIWindow(window); + } + + public void createRenameSUIPage(SWGObject owner, TangibleObject target) { + //updateHarvester(owner, target); + final SUIWindow window = core.suiService.createInputBox(2,"@player_structure:structure_status","@player_structure:structure_name_prompt", owner, target, 0); + Vector returnList = new Vector(); + returnList.add("txtInput:LocalText"); + final TangibleObject outerSurveyTool = target; + window.addHandler(0, "", Trigger.TRIGGER_OK, returnList, new SUICallback() { + @Override + public void process(SWGObject owner, int eventType, Vector returnList) { + core.harvesterService.handleSetName((CreatureObject)owner, (TangibleObject)outerSurveyTool,returnList.get(0)); + core.suiService.closeSUIWindow(owner, 0); + } + }); + core.suiService.openSUIWindow(window); + } + + + public void createDestroySUIPage(final SWGObject owner, final TangibleObject target) { + + // "\\#32CD32 @player_structure:confirm_destruction_d3b \#" + + final HarvesterObject harvester = (HarvesterObject)target; + // harvester.getStfFilename(); installation_n .getTemplate(); + String displayname = "@installation_n:"+harvester.getStfName(); + if (harvester.getCustomName()!=null) + displayname = harvester.getCustomName(); + final SUIWindow window = core.suiService.createSUIWindow("Script.listBox", owner, target, 0); + window.setProperty("bg.caption.lblTitle:Text", displayname); + window.setProperty("Prompt.lblPrompt:Text", "@player_structure:confirm_destruction_d1 " + + "@player_structure:confirm_destruction_d2 " + + "\n \n @player_structure:confirm_destruction_d3a " + + "\\#32CD32 @player_structure:confirm_destruction_d3b \\#FFFFFF " + + "@player_structure:confirm_destruction_d4 "); + if (harvester.getConditionDamage()<20 && harvester.getMaintenanceAmount()<3000){ + window.addListBoxMenuItem("@player_structure:redeed_confirmation \\#BB0000 @player_structure:can_redeed_no_suffix \\#FFFFFF ",1 ); + } else { + window.addListBoxMenuItem("@player_structure:redeed_confirmation \\#32CD32 @player_structure:can_redeed_yes_suffix \\#FFFFFF ",1 ); + } + if (harvester.getConditionDamage()<20){ + window.addListBoxMenuItem("@player_structure:redeed_condition \\#BB0000 " + harvester.getConditionDamage() + " \\#FFFFFF ",1 ); + } else { + window.addListBoxMenuItem("@player_structure:redeed_condition \\#32CD32 " + harvester.getConditionDamage() + " \\#FFFFFF ",1 ); + } + if (harvester.getMaintenanceAmount()<0){ + window.addListBoxMenuItem("@player_structure:redeed_maintenance \\#BB0000 " + (int)harvester.getMaintenanceAmount() + " \\#FFFFFF ",2 ); + } else { + window.addListBoxMenuItem("@player_structure:redeed_maintenance \\#32CD32 " + (int)harvester.getMaintenanceAmount() + " \\#FFFFFF ",2 ); + } + window.setProperty("btnOk:visible", "True"); + window.setProperty("btnCancel:visible", "True"); + window.setProperty("btnOk:Text", "@yes"); + window.setProperty("btnCancel:Text", "@no"); + Vector returnList = new Vector(); + returnList.add("List.lstList:SelectedRow"); + window.addHandler(0, "", Trigger.TRIGGER_OK, returnList, new SUICallback() { + @Override + public void process(SWGObject owner, int eventType, Vector returnList) { + core.suiService.closeSUIWindow(owner, 0); + createCodeWindow(owner, target); + } + }); + window.addHandler(1, "", Trigger.TRIGGER_CANCEL, returnList, new SUICallback() { + @Override + public void process(SWGObject owner, int eventType, Vector returnList) { + core.suiService.closeSUIWindow(owner, 0); + } + }); + core.suiService.openSUIWindow(window); + } + + public void createCodeWindow(SWGObject owner, TangibleObject target) { + + // "\\#32CD32 @player_structure:confirm_destruction_d3b \#" + + final HarvesterObject harvester = (HarvesterObject)target; + // harvester.getStfFilename(); installation_n .getTemplate(); + Random rnd = new Random(); + final int confirmCode = 100000 + rnd.nextInt(900000); + final SUIWindow window = core.suiService.createInputBox(2,"@player_structure:structure_status","@player_structure:structure_name_prompt", owner, target, 0); + window.setProperty("bg.caption.lblTitle:Text", "@player_structure:confirm_destruction_t"); + window.setProperty("Prompt.lblPrompt:Text", "@player_structure:your_structure_prefix " + + "\\#32CD32 @player_structure:will_redeed_confirm \\#FFFFFF "+ + "@player_structure:will_redeed_suffix " + + "\n \n Code: " + confirmCode); + + window.setProperty("btnOk:visible", "True"); + window.setProperty("btnCancel:visible", "True"); + window.setProperty("btnOk:Text", "@yes"); + window.setProperty("btnCancel:Text", "@no"); + Vector returnList = new Vector(); + returnList.add("txtInput:LocalText"); + + window.addHandler(0, "", Trigger.TRIGGER_OK, returnList, new SUICallback() { + @Override + public void process(SWGObject owner, int eventType, Vector returnList) { + CreatureObject crafter = (CreatureObject)owner; + core.suiService.closeSUIWindow(owner, 0); + if (returnList.get(0).equals(""+confirmCode)){ + // handle creation of correct deed in player inventory + PlayerObject player = (PlayerObject) crafter.getSlottedObject("ghost"); + String deedTemplate = harvester.getDeedTemplate(); + TangibleObject deed = (TangibleObject) core.objectService.createObject(deedTemplate, owner.getPlanet()); + + if (player.getLotsRemaining() + (Integer) deed.getAttachment("LotRequirement") > 10) { + // Something went wrong or hacking attempt + crafter.sendSystemMessage("Structure can't be redeeded. Maximum lot count exceeded.",(byte)1); + return; + } + + deed.setAttachment("StructureTemplate", harvester.getTemplate()); + + if (harvester.getMaintenanceAmount() > 0) { + deed.setIntAttribute("examine_maintenance", (int) harvester.getMaintenanceAmount()); + } + + if (harvester.getPowerLevel() > 0) { + deed.setIntAttribute("examine_power", (int) harvester.getPowerLevel()); + } + + deed.setIntAttribute("examine_hoppersize", harvester.getOutputHopperCapacity()); + deed.setIntAttribute("examine_extractionrate", harvester.getBER()); + + removeHarvester(harvester); + core.objectService.destroyObject(harvester.getObjectID()); + + SWGObject crafterInventory = owner.getSlottedObject("inventory"); + crafterInventory.add(deed); + + if (player.getLotsRemaining() + (Integer) deed.getAttachment("LotRequirement") <= 10) { + player.setLotsRemaining(player.getLotsRemaining() + (Integer) deed.getAttachment("LotRequirement")); + } + + crafter.sendSystemMessage("@player_structure:processing_destruction",(byte)1); + crafter.sendSystemMessage("@player_structure:deed_reclaimed",(byte)1); + + } else { + crafter.sendSystemMessage("@player_structure:incorrect_destroy_code",(byte)1); + } + + } + }); + window.addHandler(1, "", Trigger.TRIGGER_CANCEL, returnList, new SUICallback() { + @Override + public void process(SWGObject owner, int eventType, Vector returnList) { + core.suiService.closeSUIWindow(owner, 0); + } + }); + core.suiService.openSUIWindow(window); + } + + public void handleOperateMachinery(CreatureObject owner, TangibleObject target) { + + HarvesterObject harvester = (HarvesterObject) target; + harvester.operateMachinery(owner); + } + + public void handleDestroy(SWGObject owner, TangibleObject target) { + + HarvesterObject harvester = (HarvesterObject) target; + // Assemble resources at that spot + // For later, it might be needed to also pass the template to differentiate liquid resources + Vector planetVector = core.resourceService.getSpawnedResourcesByPlanetAndHarvesterType(target.getPlanetId(),harvester.getHarvester_type()); + HarvesterMessageBuilder messenger = new HarvesterMessageBuilder((HarvesterObject)target); + owner.getClient().getSession().write(messenger.buildHINOBaseline7((HarvesterObject)target, planetVector)); + } + + public void handleSetName(CreatureObject owner, TangibleObject target,String name) { + + ((HarvesterObject) target).setHarvesterName(name,owner); + } + + public void handleDepositPower(SWGObject owner, TangibleObject target) { + + CreatureObject creature = (CreatureObject) owner; + final HarvesterObject harvester = (HarvesterObject) target; + int playerEnergyLevel = 0; + playerEnergyLevel = calculateTotalPlayerEnergy(creature); + + final SUIWindow window = core.suiService.createSUIWindow("Script.transfer", owner, target, 10); + window.setProperty("bg.caption.lblTitle:Text", "@player_structure:add_power"); + window.setProperty("Prompt.lblPrompt:Text", "@player_structure:select_power_amount"+ + "\n \n @player_structure:current_power_value " + (int)harvester.getPowerLevel()); + window.setProperty("transaction.txtInputFrom:Text", "" + playerEnergyLevel); + window.setProperty("transaction.txtInputTo:Text", "" + "0"); + window.setProperty("transaction.lblFrom:Text", "@player_structure:total_energy"); + window.setProperty("transaction.lblTo:Text", "@player_structure:to_deposit"); + window.setProperty("transaction:InputFrom", "5555"); + window.setProperty("transaction:InputTo", "6666"); + window.setProperty("transaction.lblStartingFrom:Text", ""+playerEnergyLevel); + window.setProperty("transaction.lblStartingTo:Text", "0"); + window.setProperty("transaction.ConversionRatioFrom", "0"); + window.setProperty("transaction.ConversionRatioTo", "1"); + window.setProperty("btnOk:visible", "True"); + window.setProperty("btnCancel:visible", "True"); + window.setProperty("btnOk:Text", "@ok"); + window.setProperty("btnCancel:Text", "@cancel"); + + Vector returnList = new Vector(); + returnList.add("transaction.txtInputFrom:Text"); + returnList.add("transaction.txtInputTo:Text"); + window.addHandler(0, "", Trigger.TRIGGER_OK, returnList, new SUICallback() { + @Override + public void process(SWGObject owner, int eventType, Vector returnList) { + CreatureObject crafter = (CreatureObject)owner; + harvester.setPowerLevel(harvester.getPowerLevel()+Integer.parseInt(returnList.get(1))); + updateEnergyInventoryContainers(crafter,Integer.parseInt(returnList.get(1))); + crafter.sendSystemMessage("You successfully deposit " + Integer.parseInt(returnList.get(1)) + " units of energy.", (byte) 0); + crafter.sendSystemMessage("Energy reserves now at " + (int)harvester.getPowerLevel() + " units.", (byte) 0); + core.suiService.closeSUIWindow(owner, 0); + } + }); + window.addHandler(1, "", Trigger.TRIGGER_CANCEL, returnList, new SUICallback() { + @Override + public void process(SWGObject owner, int eventType, Vector returnList) { + core.suiService.closeSUIWindow(owner, 0); + } + }); + core.suiService.openSUIWindow(window); + } + + public int calculateTotalPlayerEnergy(CreatureObject owner){ + // final int energy = 0; Doesn't work with generic types + int energy = 0; + final Vector energyVector = new Vector(); + TangibleObject playerInventory = (TangibleObject) owner.getSlottedObject("inventory"); + playerInventory.viewChildren(owner, false, false, new Traverser() { + @Override + public void process(SWGObject obj) { + + if (obj instanceof ResourceContainerObject){ + ResourceContainerObject container = (ResourceContainerObject) obj; + if (container.getResourceClass()==null)System.out.println("container.getResourceClass()==null " + container.getTemplate()); + if (container.getResourceClass().equals("Radioactive") || + container.getResourceClass().equals("Wind Renewable Energy") || + container.getResourceClass().equals("Solar Renewable Energy") || + container.getResourceClass().equals("Geothermal Renewable Energy") || + container.getResourceClass().equals("Tidal Renewable Energy") || + container.getResourceClass().equals("Hydron-3 Renewable Energy")) { + energyVector.add(container.getStackCount()); + } + } + } + /* + public void process(SWGObject a1) { + if(!(a1 instanceof PlayerObject) && a1 != null) { + if(a1.getClient() != null && a1 != a.this$0) { + a1.makeAware(a.this$0); + } + a.this$0.makeAware(a1); + } + } + } + */ + }); + + for (Integer value : energyVector){ + energy += value; + } + return energy; + } + + /* + * This is deducting the deposited power from the inventory + */ + public void updateEnergyInventoryContainers(SWGObject owner, int deductedEnergy){ + + final Vector containerVector = new Vector(); + TangibleObject playerInventory = (TangibleObject) owner.getSlottedObject("inventory"); + playerInventory.viewChildren(owner, false, false, new Traverser() { + @Override + public void process(SWGObject obj) { + // is energy resource? + if (obj instanceof ResourceContainerObject){ + ResourceContainerObject container = (ResourceContainerObject) obj; + if (container.getResourceClass().equals("Radioactive") || + container.getResourceClass().equals("Wind Renewable Energy") || + container.getResourceClass().equals("Solar Renewable Energy") || + container.getResourceClass().equals("Geothermal Renewable Energy") || + container.getResourceClass().equals("Tidal Renewable Energy") || + container.getResourceClass().equals("Hydron-3 Renewable Energy")) { + containerVector.add(container); + } + } + } + }); + + Comparator comp = new ResourceContainerObjectComparator(); + Collections.sort(containerVector, comp); + + for (int i=containerVector.size()-1;i >= 0; i--){ + int containerEnergy = containerVector.get(i).getStackCount(); + if (containerEnergy <= deductedEnergy){ + deductedEnergy -= containerEnergy; + playerInventory.remove(containerVector.get(i)); + } else { + containerEnergy -= deductedEnergy; + containerVector.get(i).setStackCount(containerEnergy,(CreatureObject)owner); + playerInventory._remove(containerVector.get(i)); + playerInventory._add(containerVector.get(i)); + +// ResourceMessenger messenger = new ResourceMessenger(IoBuffer.allocate(1)); +// owner.getClient().getSession().write(messenger.serialize_buildRCNO3Delta(containerVector.get(i).getObjectID(),containerEnergy)); + } + } + } + + public class ResourceContainerObjectComparator implements Comparator { + + @Override + public int compare(ResourceContainerObject b1, ResourceContainerObject b2) { + if (b1.getStackCount() == b2.getStackCount()) { + return 0; + } + if (b1.getStackCount() > b2.getStackCount()) { + return 1; + } + if (b1.getStackCount() < b2.getStackCount()) { + return -1; + } + return 0; + } + } + + public void handlePermissionAdmin(CreatureObject owner, TangibleObject target) { + + String listName = "ADMIN"; + ((HarvesterObject) target).setPermissionAdmin(listName,owner); + } + + public void handlePermissionHopper(CreatureObject owner, TangibleObject target) { + + String listName = "HOPPER"; + ((HarvesterObject) target).setPermissionHopper(listName,owner); + } + + public void handlePermissionListModify(CreatureObject crafter, SWGObject target, String commandArgs){ + + String[] commandSplit = commandArgs.split(" "); + if (commandSplit.length==3){ + if (core.characterService.playerExists(commandSplit[2])){ + if (commandSplit[2].equals("ADMIN")){ + Vector adminList = ((HarvesterObject)target).getAdminList(); + if (commandSplit[0].equals("add") && (!adminList.contains(commandSplit[2]))){ + crafter.sendSystemMessage(commandSplit[2] + " added as administrator", (byte) 0); + adminList.add(commandSplit[2]); + ((HarvesterObject)target).setAdminList(adminList); + } + if (commandSplit[0].equals("remove") && (adminList.contains(commandSplit[2]))){ + crafter.sendSystemMessage(commandSplit[2] + " removed as administrator", (byte) 0); + adminList.remove(commandSplit[2]); + ((HarvesterObject)target).setAdminList(adminList); + } + } + if (commandSplit[2].equals("HOPPER")){ + Vector hopperList = ((HarvesterObject)target).getHopperList(); + if (commandSplit[0].equals("add") && (!hopperList.contains(commandSplit[2]))){ + crafter.sendSystemMessage(commandSplit[2] + " added as administrator", (byte) 0); + hopperList.add(commandSplit[2]); + ((HarvesterObject)target).setHopperList(hopperList); + } + if (commandSplit[0].equals("remove") && (hopperList.contains(commandSplit[2]))){ + crafter.sendSystemMessage(commandSplit[2] + " removed as administrator", (byte) 0); + hopperList.remove(commandSplit[2]); + ((HarvesterObject)target).setHopperList(hopperList); + } + } + } else { + crafter.sendSystemMessage(commandSplit[2]+ " is an invalid player name", (byte) 0); + } + } + if (commandSplit.length==2){ + crafter.sendSystemMessage("No name was entered", (byte) 0); + } + + } + + public void handleHarvesterSelectResourceCommand(CreatureObject owner, SWGObject target, String commandArgs){ + + long selectedResourceId = Long.parseLong(commandArgs); + GalacticResource resource = core.resourceService.findResourceById(selectedResourceId); + ((HarvesterObject) target).setSelectedHarvestResource(resource,owner); + } + + public void handleHarvesterActivateCommand(CreatureObject owner, SWGObject target, String commandArgs){ + + + if (((HarvesterObject)target).getPowerLevel()<=0 && !((HarvesterObject)target).isGenerator()){ + ((CreatureObject)owner).sendSystemMessage("The installation is lacking power.", (byte) 0); + return; + } + if (((HarvesterObject)target).getMaintenanceAmount()<=0){ + ((CreatureObject)owner).sendSystemMessage("The installation is lacking maintenance.", (byte) 0); + return; + } + + + ((HarvesterObject)target).activateHarvester(owner); + } + + public void handleHarvesterDeactivateCommand(CreatureObject owner, SWGObject target, String commandArgs){ + + ((HarvesterObject)target).deactivateHarvester(owner); + } + + public void handleEmptyHopper(CreatureObject owner,SWGObject target,long harvesterId, long resourceId, int stackcount, byte actionMode, byte updateCount){ + + HarvesterMessageBuilder messenger = new HarvesterMessageBuilder((HarvesterObject)target); + //DiscardResourceResponse + owner.getClient().getSession().write(messenger.buildDiscardResourceResponse((HarvesterObject)target, actionMode, updateCount,owner)); + + + ResourceContainerObject foundContainer = null; + Vector hopperContent = ((HarvesterObject) target).getOutputHopperContent(); + for (ResourceContainerObject cont : hopperContent){ + if (cont.getReferenceID()==resourceId){ + foundContainer = cont; + } + } + if (foundContainer==null) + return; // something went wrong + + if (foundContainer.getStackCount()==stackcount){ + ((HarvesterObject) target).setCurrentHarvestedCountFloat(1); + foundContainer.setStackCount(0, owner); + } else { + ((HarvesterObject) target).setCurrentHarvestedCountFloat(foundContainer.getStackCount()-stackcount); + foundContainer.setStackCount(foundContainer.getStackCount()-stackcount,owner); + } + ((HarvesterObject) target).setOutputHopperContent(hopperContent); + + // <<< + Vector planetResourcesVector = core.resourceService.getSpawnedResourcesByPlanetAndHarvesterType(target.getPlanetId(),((HarvesterObject)target).getHarvester_type()); + owner.getClient().getSession().write(messenger.buildHINOBaseline7((HarvesterObject)target, planetResourcesVector)); + owner.getClient().getSession().write(messenger.buildHINO7ExperimentalDelta2((HarvesterObject)target)); + // >> + + hopperContent = ((HarvesterObject) target).getOutputHopperContent(); + for (ResourceContainerObject cont : hopperContent){ + if (cont.getReferenceID()==resourceId){ + foundContainer = cont; + } + } + + // create retrieved resource container + GalacticResource sampleResource = core.resourceService.findResourceById(resourceId); + String resourceContainerIFF = ResourceRoot.CONTAINER_TYPE_IFF_SIGNIFIER[sampleResource.getResourceRoot().getContainerType()]; + ResourceContainerObject containerObject = (ResourceContainerObject) core.objectService.createObject(resourceContainerIFF, owner.getPlanet()); + containerObject.initializeStats(sampleResource); + containerObject.setProprietor(owner); + containerObject.setStackCount(stackcount,owner); + containerObject.setIffFileName(resourceContainerIFF); + SWGObject crafterInventory = owner.getSlottedObject("inventory"); +// containerObject.sendBaselines(owner.getClient()); +// SceneEndBaselines sceneEndBaselinesMsg = new SceneEndBaselines(containerObject.getObjectID()); +// owner.getClient().getSession().write(sceneEndBaselinesMsg.serialize()); +// tools.CharonPacketUtils.printAnalysis(sceneEndBaselinesMsg.serialize()); + crafterInventory.add(containerObject); + } + + + public void handleEmptyHarvester(CreatureObject owner, SWGObject target, String commandArgs){ + + HarvesterMessageBuilder messenger = new HarvesterMessageBuilder((HarvesterObject)target); + Vector hopperContent = ((HarvesterObject) target).getOutputHopperContent(); + Vector deleteContent = new Vector(); + + for (ResourceContainerObject cont : hopperContent){ + ResourceContainerObject foundContainer = cont; + + if (foundContainer==null) + return; // something went wrong + + long resourceId = foundContainer.getReferenceID(); + int stackcount = foundContainer.getStackCount(); + + SceneDestroyObject destroyObjectMsg = new SceneDestroyObject(resourceId); + owner.getClient().getSession().write(destroyObjectMsg.serialize()); + + // create retrieved resource container + GalacticResource sampleResource = core.resourceService.findResourceById(resourceId); + String resourceContainerIFF = ResourceRoot.CONTAINER_TYPE_IFF_SIGNIFIER[sampleResource.getResourceRoot().getContainerType()]; + ResourceContainerObject containerObject = (ResourceContainerObject) core.objectService.createObject(resourceContainerIFF, owner.getPlanet()); + containerObject.initializeStats(sampleResource); + containerObject.setProprietor(owner); + containerObject.setStackCount(stackcount,owner); + containerObject.setIffFileName(resourceContainerIFF); + + SWGObject crafterInventory = owner.getSlottedObject("inventory"); + +// SceneCreateObjectByCrc createObjectMsg = new SceneCreateObjectByCrc(objectId, owner.getOrientation().x, owner.getOrientation().y, owner.getOrientation().z, owner.getOrientation().w, owner.getPosition().x, owner.getPosition().y, owner.getPosition().z, resCRC, (byte) 0); +// owner.getClient().getSession().write(createObjectMsg.serialize()); +// tools.CharonPacketUtils.printAnalysis(createObjectMsg.serialize()); +// +// containerObject.sendBaselines(owner.getClient()); +// +// SceneEndBaselines sceneEndBaselinesMsg = new SceneEndBaselines(containerObject.getObjectID()); +// owner.getClient().getSession().write(sceneEndBaselinesMsg.serialize()); +// tools.CharonPacketUtils.printAnalysis(sceneEndBaselinesMsg.serialize()); + + crafterInventory.add(containerObject); + + if (cont.getReferenceID()!=((HarvesterObject) target).getSelectedHarvestResource().getId()){ + deleteContent.add(cont); + } else { + ((HarvesterObject) target).setCurrentHarvestedCountFloat(0); + foundContainer.setStackCount(0,owner); + } + } + hopperContent.removeAll(deleteContent); + + ((HarvesterObject) target).setOutputHopperContent(hopperContent); + + Vector planetResourcesVector = core.resourceService.getSpawnedResourcesByPlanetAndHarvesterType(target.getPlanetId(),((HarvesterObject)target).getHarvester_type()); + owner.getClient().getSession().write(messenger.buildHINOBaseline7((HarvesterObject)target, planetResourcesVector)); + owner.getClient().getSession().write(messenger.buildHINO7ExperimentalDelta2((HarvesterObject)target)); + } + + public void updateHarvester(HarvesterObject harvester){ + + CreatureObject owner = (CreatureObject)core.objectService.getObject(harvester.getOwner()); + + if(harvester.isActivated()) + { + // Check maintenance and power + if (harvester.getMaintenanceAmount()<=0){ + owner.sendSystemMessage("The installation is lacking maintenance.", (byte) 0); + // ToDo: Send mail + harvester.deactivateHarvester(owner); + return; + } + + if (harvester.getPowerLevel()<=0 && !harvester.isGenerator()){ + owner.sendSystemMessage("The installation is lacking power.", (byte) 0); + // ToDo: Send mail + harvester.deactivateHarvester(owner); + return; + } + + harvester.setMaintenanceAmount(harvester.getMaintenanceAmount()-(harvester.getMaintenanceCost()/3600.0F)); + harvester.setPowerLevel(harvester.getPowerLevel()-(harvester.getPowerCost()/3600.0F)); + + Vector outputHopperContent = harvester.getOutputHopperContent(); + GalacticResource currentResource = harvester.getSelectedHarvestResource(); + ResourceContainerObject hopperContainer = hopperHasContainer(currentResource, outputHopperContent); + // check if output hopper contains already a container with the selected harvest resource + if(hopperContainer==null) + { + + //ResourceContainerObject container = new ResourceContainerObject(); + String resourceContainerIFF = ResourceRoot.CONTAINER_TYPE_IFF_SIGNIFIER[currentResource.getResourceRoot().getContainerType()]; + ResourceContainerObject container = (ResourceContainerObject) core.objectService.createObject(resourceContainerIFF, harvester.getPlanet()); + container.initializeStats(harvester.getSelectedHarvestResource()); + container.setStackCount(0,false); + harvester.setCurrentHarvestedCountFloat(0.0F); + outputHopperContent.add(container); + harvester.setOutputHopperContent(outputHopperContent); + harvester.createNewHopperContainer(); + + } else { + + harvester.continueHopperContainer(); + + // add harvested amount + int BER = harvester.getBER(); + //BER = 15; + float minuteRate = harvester.getActualExtractionRate(); + float updateRate = minuteRate / 60; + harvester.setCurrentHarvestedCountFloat(harvester.getCurrentHarvestedCountFloat()+updateRate); + + int oldStackCount = hopperContainer.getStackCount(); + int newStackCount = (int) (harvester.getCurrentHarvestedCountFloat()); + if (newStackCount>oldStackCount){ + for (ResourceContainerObject iterContainer : outputHopperContent){ + if (iterContainer.getReferenceID()==hopperContainer.getReferenceID()){ + iterContainer.setStackCount(newStackCount,owner); // updates collection + } + } + harvester.setOutputHopperContent(outputHopperContent); + //((CreatureObject)harvester.getOwner()).getClient().getSession().write(messenger.buildHINO7ExperimentalDelta2(harvester)); + } + harvester.setCurrentHarvestedCountFloat(harvester.getCurrentHarvestedCountFloat()+updateRate); + } + } + } + + private ResourceContainerObject hopperHasContainer(GalacticResource resource, Vector outputHopperContent){ + ResourceContainerObject container = null; + for (ResourceContainerObject iterContainer : outputHopperContent){ + if (iterContainer.getReferenceID()==resource.getId()){ + return iterContainer; + } + } + return container; + } + + public void constructionSite(CreatureObject actor, SWGObject target, long objectId, float posX, float posZ, float dir){ + SWGObject usedDeed = actor.getUseTarget(); //(SWGObject)actor.getAttachment("LastUsedDeed"); + String constructorTemplate = (String) usedDeed.getAttachment("ConstructorTemplate"); + //String structureTemplate = "object/installation/mining_ore/construction/shared_construction_mining_ore_harvester_style_1.iff"; + + float positionY = core.terrainService.getHeight(actor.getPlanetId(), posX, posZ) + 2f; + Quaternion quaternion = new Quaternion(1, 0, 0, 0); + quaternion = resources.common.MathUtilities.rotateQuaternion(quaternion, (float)((Math.PI/2) * dir), new Point3D(0, 1, 0)); + InstallationObject installation = (InstallationObject) core.objectService.createObject(constructorTemplate, 0, actor.getPlanet(), new Point3D(posX, positionY, posZ), quaternion); + + if (!usedDeed.getAttributes().containsKey("examine_extractionrate")) { + usedDeed.setIntAttribute("examine_extractionrate", 0); + } + + if (!usedDeed.getAttributes().containsKey("examine_hoppersize")) { + usedDeed.setIntAttribute("examine_hoppersize", 0); + } + + if (!usedDeed.getAttributes().containsKey("examine_maintenance")) { + usedDeed.setIntAttribute("examine_maintenance", 0); + } + + if (!usedDeed.getAttributes().containsKey("examine_power")) { + usedDeed.setIntAttribute("examine_power", 0); + } + + installation.setAttachment("ConstructionStart", System.currentTimeMillis()); + installation.setAttachment("ownerId", actor.getObjectID()); + installation.setAttachment("StructureTemplate", usedDeed.getAttachment("StructureTemplate")); + installation.setAttachment("Deed_DeedTemplate", usedDeed.getTemplate()); + installation.setAttachment("Deed_BER", usedDeed.getIntAttribute("examine_extractionrate")); + installation.setAttachment("Deed_Capacity", usedDeed.getIntAttribute("examine_hoppersize")); + installation.setAttachment("Deed_DeedLots", usedDeed.getAttachment("LotRequirement")); + installation.setAttachment("Deed_SurplusMaintenance", usedDeed.getIntAttribute("examine_maintenance")); + installation.setAttachment("Deed_SurplusPower", usedDeed.getIntAttribute("examine_power")); + + // destroy deed + core.objectService.destroyObject(usedDeed); + + core.simulationService.add(installation, posX, posZ, true); + + PlayerObject player = (PlayerObject) actor.getSlottedObject("ghost"); + player.setLotsRemaining(player.getLotsRemaining() - (int) usedDeed.getAttachment("LotRequirement")); + synchronized(allConstructors){ + allConstructors.add(installation); + } + } + + public void placeHarvester(SWGObject object) { + CreatureObject actor = (CreatureObject) NGECore.getInstance().objectService.getObject((Long) object.getAttachment("ownerId")); + String structureTemplate = (String) object.getAttachment("StructureTemplate"); + HarvesterObject harvester = (HarvesterObject) NGECore.getInstance().objectService.createObject(structureTemplate, actor.getPlanet()); + Vector adminList = harvester.getAdminList(); + //String[] fullName = ((CreatureObject)actor).getCustomName().split(" "); + adminList.add(actor.getCustomName()); + // Set BER and outputhopper capacity here, take it from deed + harvester.setBER((int)object.getAttachment("Deed_BER")); + harvester.setSpecRate((int)(1.5F*(int)object.getAttachment("Deed_BER"))); + harvester.setOutputHopperCapacity((int)object.getAttachment("Deed_Capacity")); + harvester.setDeedTemplate((String)object.getAttachment("Deed_DeedTemplate")); + if ((int)object.getAttachment("Deed_SurplusMaintenance")>0){ + harvester.setMaintenanceAmount((int)object.getAttachment("Deed_SurplusMaintenance")); + } + if ((int)object.getAttachment("Deed_SurplusPower")>0){ + harvester.setPowerLevel((int)object.getAttachment("Deed_SurplusPower")); + } + + + // build harvester + float positionY = NGECore.getInstance().terrainService.getHeight(actor.getPlanetId(), object.getPosition().x, object.getPosition().z); + harvester.setPosition(new Point3D(object.getPosition().x,positionY, object.getPosition().z)); + core.simulationService.add(harvester, harvester.getPosition().x, harvester.getPosition().z, true); + addHarvester(harvester); + + PlayerObject player = (PlayerObject) actor.getSlottedObject("ghost"); + WaypointObject constructionWaypoint = (WaypointObject)NGECore.getInstance().objectService.createObject("object/waypoint/shared_world_waypoint_blue.iff", actor.getPlanet(), harvester.getPosition().x, 0 ,harvester.getPosition().z); + String displayname = "@installation_n:"+harvester.getStfName(); + constructionWaypoint.setName(displayname); + constructionWaypoint.setPlanetCRC(engine.resources.common.CRC.StringtoCRC(actor.getPlanet().getName())); + constructionWaypoint.setPosition(new Point3D(object.getPosition().x,0, object.getPosition().z)); + player.waypointAdd(constructionWaypoint); + constructionWaypoint.setPosition(new Point3D(object.getPosition().x,0, object.getPosition().z)); + constructionWaypoint.setActive(true); + constructionWaypoint.setColor((byte)1); + constructionWaypoint.setStringAttribute("", ""); + player.waypointAdd(constructionWaypoint); + constructionWaypoint.setName(displayname); + constructionWaypoint.setPlanetCRC(engine.resources.common.CRC.StringtoCRC(actor.getPlanet().getName())); + player.setLastSurveyWaypoint(constructionWaypoint); + + List attachments = new ArrayList(); + WaypointAttachment attachment = new WaypointAttachment(); + attachment.active = true; + attachment.cellID = constructionWaypoint.getCellId(); + attachment.color = (byte)1; + attachment.name = displayname; + attachment.planetCRC = engine.resources.common.CRC.StringtoCRC(actor.getPlanet().getName()); + attachment.positionX = object.getPosition().x; + attachment.positionY = 0; + attachment.positionZ = object.getPosition().z; + attachments.add(attachment); + + // remove constructor + NGECore.getInstance().objectService.destroyObject(object); + + // ToDo: waypoint attachment fix + Date date = new Date(); + Mail constructionNotificationMail = new Mail(); + constructionNotificationMail.setSenderName("Structure Service"); + constructionNotificationMail.setSubject("Your structure"); + constructionNotificationMail.setRecieverId(actor.getObjectID()); + constructionNotificationMail.setTimeStamp((int) (date.getTime() / 1000)); + constructionNotificationMail.setMailId(NGECore.getInstance().chatService.generateMailId()); + String message = "Your construction is ready"; + constructionNotificationMail.setMessage(message); + constructionNotificationMail.setStatus(Mail.NEW); + constructionNotificationMail.setWaypointAttachments(attachments); + //NGECore.getInstance().chatService.sendPersistentMessage(actor.getClient(), constructionNotificationMail); + NGECore.getInstance().chatService.storePersistentMessage(constructionNotificationMail); + NGECore.getInstance().chatService.sendPersistentMessageHeader(actor.getClient(), constructionNotificationMail); + //core.objectService.persistObject(harvester.getObjectID(), harvester, core.getSWGObjectODB()); + } + + + public void enterStructurePlacementMode(CreatureObject actor, SWGObject object){ + + if (!actor.getClient().isGM() && !core.terrainService.canBuildAtPosition(actor,actor.getPosition().x,actor.getPosition().z)){ + actor.sendSystemMessage("@player_structure:not_permitted", (byte) 0); + return; + } + + PlayerObject player = (PlayerObject) actor.getSlottedObject("ghost"); + if (((Integer) object.getAttachment("LotRequirement")) > player.getLotsRemaining()){ + actor.sendSystemMessage("@player_structure:not_enough_lots", (byte) 0); + return; + } + + String structureTemplate = (String) object.getAttachment("StructureTemplate"); + //String temp = "object/installation/mining_ore/shared_mining_ore_harvester_style_1.iff"; + EnterStructurePlacementModeMessage placementMsg = new EnterStructurePlacementModeMessage(actor,structureTemplate); + actor.getClient().getSession().write(placementMsg.serialize()); + } + + + public void handlePlaceStructureCommand(CreatureObject crafter, SWGObject target, String commandArgs){ + + // 511379 3516.08 -4804.08 0 + // Split Args by Delimiter + long objectId = crafter.getObjectID(); + float posX = crafter.getPosition().x; + float posZ = crafter.getPosition().z; + float dir = 0; + String[] splitter = commandArgs.split(" "); + if (splitter.length==4){ //QA + objectId = Long.parseLong(splitter[0]); + posX = Float.parseFloat(splitter[1]); + posZ = Float.parseFloat(splitter[2]); + dir = Float.parseFloat(splitter[3]); + } + + constructionSite(crafter, target, objectId, posX, posZ, dir); + } + + + // helper method to simulate a harvester deed in the player inventory + // that contains BER,cap,template info about the harvester + public void createExampleDeed(CreatureObject actor){ + + String templateString="object/tangible/deed/harvester_deed/shared_harvester_ore_s1_deed.iff"; + TangibleObject deed = (TangibleObject) core.objectService.createObject(templateString, actor.getPlanet()); + deed.setCustomName("Example Harvester Deed"); + deed.setAttachment("StructureTemplate", "object/installation/mining_ore/shared_mining_ore_harvester_style_1.iff"); + deed.setIntAttribute("examine_hoppersize", 27344); + deed.setIntAttribute("examine_extractionrate", 15); + + TangibleObject playerInventory = (TangibleObject) actor.getSlottedObject("inventory"); + playerInventory.add(deed); + + deed.setParent(playerInventory); + + core.resourceService.spawnSpecificResourceContainer("Radioactive", actor, 50); + core.resourceService.spawnSpecificResourceContainer("Radioactive", actor, 501); + core.resourceService.spawnSpecificResourceContainer("Radioactive", actor, 3); + core.resourceService.spawnSpecificResourceContainer("Radioactive", actor, 66); +// core.resourceService.spawnSpecificResourceContainer("Steel", actor, 50); +// core.resourceService.spawnSpecificResourceContainer("Fiberplast", actor, 50); + + } + + + // Stress Test (Server) for many harvesters running in the service + // 200 are running fine, 400 also + public void moduleTestManyHarvesters(CreatureObject actor){ + // assuming an average number of 200 harvesters per planet + for (int i=0;i<400;i++){ + createSingleTestHarvester(actor,i); + } + } + + public void createSingleTestHarvester(CreatureObject actor,int counter){ + // determine random position + String structureTemplate = "object/installation/mining_ore/shared_mining_ore_harvester_style_1.iff"; + HarvesterObject harvester = (HarvesterObject) core.objectService.createObject(structureTemplate, actor.getPlanet()); + long objectId = harvester.getObjectID(); + Vector adminList = harvester.getAdminList(); + String[] fullName = ((CreatureObject)actor).getCustomName().split(" "); + adminList.add(fullName[0]); + harvester.setAdminList(adminList); + // Set BER and outputhopper capacity here, take it from deed + harvester.setBER(8); + harvester.setOutputHopperCapacity(27344); + harvester.setMaintenanceAmount(2993); + harvester.setMaintenanceCost(30); + harvester.setPowerLevel(14714); + harvester.setPowerCost(25); + + Random generator = new Random(); + generator = new Random(); // Exclude mountains at the edge of the maps + int spawnCoordsX = generator.nextInt(15000) - 7500; + int spawnCoordsZ = generator.nextInt(15000) - 7500; + + // build harvester + int resCRC = CRC.StringtoCRC(structureTemplate); + Quaternion quaternion = new Quaternion(1, 0, 0, 0); + quaternion = resources.common.MathUtilities.rotateQuaternion(quaternion, (float)((Math.PI/2) * 1), new Point3D(0, 1, 0)); + float positionY = core.terrainService.getHeight(actor.getPlanetId(), spawnCoordsX, spawnCoordsZ)+ 2f; + SceneCreateObjectByCrc createObjectMsg = new SceneCreateObjectByCrc(objectId,quaternion.x,quaternion.y, quaternion.z, quaternion.w, spawnCoordsX, positionY, spawnCoordsZ, resCRC, (byte) 0); + actor.getClient().getSession().write(createObjectMsg.serialize()); + tools.CharonPacketUtils.printAnalysis(createObjectMsg.serialize()); + + resources.objects.installation.InstallationMessageBuilder messenger = new resources.objects.installation.InstallationMessageBuilder((InstallationObject)harvester); + actor.getClient().getSession().write(messenger.buildBaseline3((InstallationObject)harvester)); + SceneEndBaselines sceneEndBaselinesMsg = new SceneEndBaselines(harvester.getObjectID()); + actor.getClient().getSession().write(sceneEndBaselinesMsg.serialize()); + tools.CharonPacketUtils.printAnalysis(sceneEndBaselinesMsg.serialize()); + + // select resource + long selectedResourceId = core.resourceService.getAllSpawnedResources().get(51).getId(); + GalacticResource resource = core.resourceService.findResourceById(selectedResourceId); + harvester.setSelectedHarvestResource(resource,actor); + + + // activate harvester + harvester.activateHarvester(actor); + HarvesterMessageBuilder messenger2 = new HarvesterMessageBuilder(harvester); + actor.getClient().getSession().write(messenger2.buildHINO3Delta(harvester,(byte)1)); + actor.getClient().getSession().write(messenger2.buildHINO7ActivateDelta2(harvester)); + + + //create waypoint + if (counter<200){ + PlayerObject player = (PlayerObject) actor.getSlottedObject("ghost"); + WaypointObject constructionWaypoint = (WaypointObject)core.objectService.createObject("object/waypoint/shared_world_waypoint_blue.iff", actor.getPlanet(), harvester.getPosition().x, 0 ,harvester.getPosition().z); + String displayname = "@installation_n:"+harvester.getStfName() + " " + counter; + constructionWaypoint.setName(displayname); + constructionWaypoint.setPlanetCRC(engine.resources.common.CRC.StringtoCRC(actor.getPlanet().getName())); + constructionWaypoint.setPosition(new Point3D(spawnCoordsX,0, spawnCoordsZ)); + player.waypointAdd(constructionWaypoint); + constructionWaypoint.setPosition(new Point3D(spawnCoordsX,0, spawnCoordsZ)); + constructionWaypoint.setActive(true); + constructionWaypoint.setColor((byte)1); + constructionWaypoint.setStringAttribute("", ""); + player.waypointAdd(constructionWaypoint); + constructionWaypoint.setName(displayname); + constructionWaypoint.setPlanetCRC(engine.resources.common.CRC.StringtoCRC(actor.getPlanet().getName())); + player.setLastSurveyWaypoint(constructionWaypoint); + } + + allHarvesters.add(harvester); + } + + @Override + public void shutdown() { + // TODO Auto-generated method stub + + } +} \ No newline at end of file diff --git a/src/services/resources/ResourceService.java b/src/services/resources/ResourceService.java new file mode 100644 index 00000000..78612dd9 --- /dev/null +++ b/src/services/resources/ResourceService.java @@ -0,0 +1,11642 @@ +/******************************************************************************* + * Copyright (c) 2013 + * + * This File is part of NGECore2. + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see . + * + * Using NGEngine to work with NGECore2 is making a combined work based on NGEngine. + * Therefore all terms and conditions of the GNU Lesser General Public License cover the combination. + ******************************************************************************/ +package services.resources; + +import java.util.Hashtable; +import java.util.Map; +import java.util.Random; +import java.util.Vector; +import java.util.concurrent.Executors; +import java.util.concurrent.ScheduledExecutorService; +import java.util.concurrent.TimeUnit; + +import main.NGECore; +import engine.resources.database.ODBCursor; +import engine.resources.objects.SWGObject; +import engine.resources.scene.Planet; +import engine.resources.scene.Point3D; +import engine.resources.scene.Quaternion; +import engine.resources.service.INetworkDispatch; +import engine.resources.service.INetworkRemoteEvent; +import resources.datatables.MilkState; +import resources.objects.creature.CreatureObject; +import resources.objects.harvester.HarvesterObject; +import resources.objects.resource.GalacticResource; +import resources.objects.resource.ResourceContainerObject; +import resources.objects.resource.ResourceRoot; +import services.ai.AIActor; + +/** + * @author Charon + */ + +public class ResourceService implements INetworkDispatch { + + private NGECore core; + private final ScheduledExecutorService scheduler = Executors.newScheduledThreadPool(1); + private boolean enableResourceHistory = true; // Set this to false, to prevent persistence of resources into history Db + + private Hashtable resourceRootTable = new Hashtable(); // synchronized + private Vector ironRoots = new Vector(); + private Vector aluminumRoots = new Vector(); + private Vector steelRoots = new Vector(); + private Vector copperRoots = new Vector(); + private Vector oreExtrusiveRoots = new Vector(); + private Vector oreIntrusiveRoots = new Vector(); + private Vector oreCarbonateRoots = new Vector(); + private Vector crystallineGemstoneRoots = new Vector(); + private Vector amorphousGemstoneRoots = new Vector(); + private Vector radioactiveRoots = new Vector(); + private Vector petrochemicalSolidRoots = new Vector(); + private Vector petrochemicalLiquidRoots = new Vector(); + private Vector polymerRoots = new Vector(); + private Vector lubricatingOilRoots = new Vector(); + private Vector reactiveGasRoots = new Vector(); + + private Vector planetaryPool4Roots = new Vector(); + private Vector corelliaPool4Roots = new Vector(); + private Vector dantooinePool4Roots = new Vector(); + private Vector dathomirPool4Roots = new Vector(); + private Vector endorPool4Roots = new Vector(); + private Vector kashyyykPool4Roots = new Vector(); + private Vector lokPool4Roots = new Vector(); + private Vector mustafarPool4Roots = new Vector(); + private Vector nabooPool4Roots = new Vector(); + private Vector roriPool4Roots = new Vector(); + private Vector talusPool4Roots = new Vector(); + private Vector tattoinePool4Roots = new Vector(); + private Vector yavinPool4Roots = new Vector(); + // For new future planet's resources add: +// private Vector NEWPLANETPool4Roots = new Vector(); + private Vector JTLRoots = new Vector(); + + private Vector allSpawnedResources = new Vector(); // needs persistance + private Vector completeResourceNameHistory = new Vector(); // needs persistance + private Vector spawnedResourcesPool1 = new Vector(); + private Vector spawnedResourcesPool2 = new Vector(); + private Vector spawnedResourcesPool3 = new Vector(); + private Vector spawnedResourcesPool4 = new Vector(); + + int totalSpawnedResourcesNumber = 0; + boolean bigBangOccured = false; + + short[] minCapArray = new short[]{300,300,300,300,300,300,300,300,300,300,300}; + short[] maxCapArray = new short[]{800,800,800,800,800,800,800,800,800,800,800}; + short[] minUnCappedArray = new short[]{1,1,1,1,1,1,1,1,1,1,1}; + short[] maxUnCappedArray = new short[]{1000,1000,1000,1000,1000,1000,1000,1000,1000,1000,1000}; + + public ResourceService(NGECore core) { + this.core = core; + //EntityCursor cursor = core.getResourceRootsODB().getCursor(Integer.class, ResourceRoot.class); + //Iterator it = cursor.iterator(); + //if(!it.hasNext()) { +// if(core.getResourceRootsODB()==null) { +// createCollections(); +// createCollections2(); +// createCollections3(); +// } else { + ODBCursor cursor = core.getResourceRootsODB().getCursor(); + if(!cursor.hasNext()) { + createCollections(); + createCollections2(); + createCollections3(); + } +// } + core.commandService.registerCommand("harvestcorpse"); + core.commandService.registerCommand("milkcreature"); + core.commandService.registerCommand("resourcecontainersplit"); + core.commandService.registerCommand("resourcecontainertransfer"); + core.commandService.registerCommand("factorycratesplit"); + start(); + } + + //"Cold Res","Cond","Decay Res","Heat Res","Malle","Shock Res","Unit Tough","Entangle Res","Pot E","OQ","Flavor" + + // loads the resource roots at server start + public void loadResourceRoots() { + ODBCursor cursor = core.getResourceRootsODB().getCursor(); + int loadedResourceRootsCounter = 0; + System.out.println("Loading resource roots..."); + while(cursor.hasNext()) { + final ResourceRoot resourceRoot = (ResourceRoot) cursor.next(); + System.err.println("resourceRoot loaded ID: " + resourceRoot.getResourceRootID() + " " + resourceRoot.getResourceFileName()); + core.resourceService.add_resourceRoot(resourceRoot); + loadedResourceRootsCounter++; + } + + if (loadedResourceRootsCounter==0){ + //big bang will take care of it + } + //System.err.println("loadedResourceRootsCounter " + loadedResourceRootsCounter); + cursor.close(); + System.out.println("Finished loading resource roots."); + } + + // loads the currently spawned resources at server start + public void loadResources() { + ODBCursor cursor = core.getResourcesODB().getCursor(); + int loadedResourceCounter = 0; + System.out.println("Loading resources..."); + while(cursor.hasNext()) { + final GalacticResource resource = (GalacticResource) cursor.next(); + System.err.println("resource " + resource.getName() + " rootID " + resource.getResourceRootID()); + core.objectService.getObjectList().put(resource.getId(), resource); + + // re-reference ResourceRoot + int resourceRootID = resource.getResourceRootID(); + ResourceRoot resourceRoot = core.resourceService.retrieveResourceRootReference(resourceRootID); + resource.setResourceRoot(resourceRoot); + + // recreate the collections + core.resourceService.addSpawnedResource(resource); + byte pool = resource.getPoolNumber(); + switch (pool){ + case 1: + core.resourceService.add_spawnedResourcesPool1(resource); + break; + case 2: + core.resourceService.add_spawnedResourcesPool2(resource); + break; + case 3: + core.resourceService.add_spawnedResourcesPool3(resource); + break; + case 4: + core.resourceService.add_spawnedResourcesPool4(resource); + break; + default: + System.err.println("Loaded resource " + resource.getName() + " has no valid pool value!"); + resource.setPoolNumber((byte)4); // Make it a pool 4 + } + + loadedResourceCounter++; + } + + if (loadedResourceCounter==0){ + core.resourceService.kickOffBigBang(); // spawn resources initially once + } + + cursor.close(); + System.out.println("Finished loading resources."); + } + + public SWGObject createResource() { + SWGObject object = null; + Planet planet = core.terrainService.getPlanetByID(1); + Point3D position = new Point3D(0,0,0); + Quaternion orientation = new Quaternion(1,1,1,1); + String Template = "object/resource_container/base/shared_base_resource_container.iff"; + boolean isSnapshot = false; + + long objectID = core.objectService.generateObjectID(); + + object = new GalacticResource(objectID, planet, position, orientation, Template); + + object.setPlanetId(planet.getID()); + + object.setAttachment("customServerTemplate", Template); + + object.setisInSnapshot(isSnapshot); + + core.objectService.getObjectList().put(objectID, object); + + return object; + } + + public void createCollections(){ + + // For testing purposes the Hashtable is being put together here + // After first test phase, it will be read in from the database + + ResourceRoot resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("aluminum_titanium"); + resourceRoot.setResourceClass("Aluminum"); + resourceRoot.setResourceType("Titanium"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_MINERAL); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_INORGANIC_MINERALS); + //Titanium Aluminum: CR 1 - 174, CD 300 - 408, DR 1 - 174, HR 200 - 330, MA 300 - 452, SR 300 - 430, UT 300 - 430 + minCapArray = new short[]{(short)1 ,(short)300,(short)1 ,(short)200,(short)300,(short)300,(short)300,(short)0,(short)0,(short)1 ,(short)0}; + maxCapArray = new short[]{(short)174,(short)408,(short)174,(short)330,(short)452,(short)430,(short)430,(short)1,(short)1,(short)1000,(short)1}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(0, resourceRoot); + aluminumRoots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("aluminum_agrinium"); + resourceRoot.setResourceClass("Aluminum"); + resourceRoot.setResourceType("Agrinium"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_MINERAL); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_INORGANIC_MINERALS); + // Agrinium Aluminum: CR 94 - 307, CD 358 - 492, DR 94 - 307, HR 270 - 430, MA 382 - 568, SR 370 - 530, UT 370 - 530 + minCapArray = new short[]{(short)94 ,(short)358,(short)94 ,(short)270,(short)382,(short)370,(short)370,(short)0,(short)0,(short)1 ,(short)0}; + maxCapArray = new short[]{(short)307 ,(short)492,(short)307 ,(short)430,(short)568,(short)530,(short)530,(short)1,(short)1,(short)1000,(short)1}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(1, resourceRoot); + aluminumRoots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("aluminum_chromium"); + resourceRoot.setResourceClass("Aluminum"); + resourceRoot.setResourceType("Chromium"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_MINERAL); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_INORGANIC_MINERALS); + // Chromium Aluminum: CR 227 - 440, CD 442 - 575, DR 227 - 440, HR 370 - 530, MA 498 - 685, SR 470 - 630, UT 470 - 630 + minCapArray = new short[]{(short)227 ,(short)442,(short)227 ,(short)370,(short)498,(short)470,(short)470,(short)0,(short)0,(short)1 ,(short)0}; + maxCapArray = new short[]{(short)440 ,(short)575,(short)440 ,(short)530,(short)685,(short)630,(short)630,(short)1,(short)1,(short)1000,(short)1}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(2, resourceRoot); + aluminumRoots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("aluminum_duralumin"); + resourceRoot.setResourceClass("Aluminum"); + resourceRoot.setResourceType("Duralumin"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_MINERAL); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_INORGANIC_MINERALS); + // Duralumin Aluminum: CR 361 - 574, CD 525 - 658, DR 361 - 574, HR 470 - 630, MA 615 - 802, SR 570 - 730, UT 570 - 730 + minCapArray = new short[]{(short)361 ,(short)525,(short)361 ,(short)470,(short)615,(short)570,(short)570,(short)0,(short)0,(short)1 ,(short)0}; + maxCapArray = new short[]{(short)574 ,(short)658,(short)574 ,(short)630,(short)802,(short)730,(short)730,(short)1,(short)1,(short)1000,(short)1}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(3, resourceRoot); + aluminumRoots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("aluminum_linksteel"); + resourceRoot.setResourceClass("Aluminum"); + resourceRoot.setResourceType("Link-Steel"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_MINERAL); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_INORGANIC_MINERALS); + // Link-Steel Aluminum: CR 494 - 707, CD 608 - 742, DR 494 - 707, HR 570 - 730, MA 732 - 918, SR 670 - 830, UT 670 - 830 + minCapArray = new short[]{(short)494 ,(short)608,(short)494 ,(short)570,(short)732,(short)670,(short)670,(short)0,(short)0,(short)1 ,(short)0}; + maxCapArray = new short[]{(short)707 ,(short)742,(short)707 ,(short)730,(short)918,(short)830,(short)830,(short)1,(short)1,(short)1000,(short)1}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(4, resourceRoot); + aluminumRoots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("aluminum_phrik"); + resourceRoot.setResourceClass("Aluminum"); + resourceRoot.setResourceType("Phrik"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_MINERAL); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_INORGANIC_MINERALS); + // Phrik Aluminum: CR 627 - 800, CD 692 - 800, DR 627 - 800, HR 670 - 800, MA 848 - 1000, SR 770 - 900, UT 770 - 900 + minCapArray = new short[]{(short)672 ,(short)692,(short)627 ,(short)670,(short)848 ,(short)770,(short)770,(short)0,(short)0,(short)1 ,(short)0}; + maxCapArray = new short[]{(short)800 ,(short)800,(short)800 ,(short)800,(short)1000,(short)900,(short)900,(short)1,(short)1,(short)1000,(short)1}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(5, resourceRoot); + aluminumRoots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("copper_desh"); + resourceRoot.setResourceClass("Copper"); + resourceRoot.setResourceType("Desh"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_MINERAL); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_INORGANIC_MINERALS); + // Desh Copper: CR 1 - 116, CD 500 - 572, DR 1 - 102, HR 200 - 265, MA 500 - 572, SR 300 - 372, UT 300 - 372 + minCapArray = new short[]{(short)1 ,(short)500,(short)1 ,(short)200,(short)500 ,(short)300,(short)300,(short)0,(short)0,(short)1 ,(short)0}; + maxCapArray = new short[]{(short)116 ,(short)572,(short)102 ,(short)265,(short)572 ,(short)372,(short)372,(short)1,(short)1,(short)1000,(short)1}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(6, resourceRoot); + copperRoots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("copper_thallium"); + resourceRoot.setResourceClass("Copper"); + resourceRoot.setResourceType("Thallium"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_MINERAL); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_INORGANIC_MINERALS); + // Thallium Copper: CR 63 - 205, CD 539 - 628, DR 55 - 180, HR 235 - 315, MA 539 - 628, SR 339 - 428, UT 339 - 428 + minCapArray = new short[]{(short)63 ,(short)539,(short)55 ,(short)235,(short)539 ,(short)339,(short)339,(short)0,(short)0,(short)1 ,(short)0}; + maxCapArray = new short[]{(short)205 ,(short)628,(short)180 ,(short)315,(short)628 ,(short)428,(short)428,(short)1,(short)1,(short)1000,(short)1}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(7, resourceRoot); + copperRoots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("copper_beyrllius"); + resourceRoot.setResourceClass("Copper"); + resourceRoot.setResourceType("Beyrllius"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_MINERAL); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_INORGANIC_MINERALS); + //Beyrllius Copper: CR 152 - 294, CD 594 - 683, DR 133 - 257, HR 285 - 365, MA 594 - 683, SR 394 - 483, UT 394 - 483 + minCapArray = new short[]{(short)152 ,(short)594,(short)133 ,(short)285,(short)594 ,(short)394,(short)394,(short)0,(short)0,(short)1 ,(short)0}; + maxCapArray = new short[]{(short)294 ,(short)683,(short)257 ,(short)365,(short)683 ,(short)483,(short)483,(short)1,(short)1,(short)1000,(short)1}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(8, resourceRoot); + copperRoots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("copper_codoan"); + resourceRoot.setResourceClass("Copper"); + resourceRoot.setResourceType("Codoan"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_MINERAL); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_INORGANIC_MINERALS); + //Codoan Copper: CR 241 - 383, CD 650 - 739, DR 211 - 335, HR 335 - 415, MA 650 - 739, SR 450 - 539, UT 450 - 539 + minCapArray = new short[]{(short)241 ,(short)650,(short)211 ,(short)335,(short)650 ,(short)450,(short)450,(short)0,(short)0,(short)1 ,(short)0}; + maxCapArray = new short[]{(short)383 ,(short)739,(short)335 ,(short)415,(short)739 ,(short)539,(short)593,(short)1,(short)1,(short)1000,(short)1}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(9, resourceRoot); + copperRoots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("copper_diatium"); + resourceRoot.setResourceClass("Copper"); + resourceRoot.setResourceType("Diatium"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_MINERAL); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_INORGANIC_MINERALS); + //Diatium Copper: CR 329 - 472, CD 706 - 794, DR 288 - 413, HR 385 - 465, MA 706 - 794, SR 506 - 594, UT 506 - 594 + minCapArray = new short[]{(short)329 ,(short)706,(short)288 ,(short)385,(short)706 ,(short)506,(short)506,(short)0,(short)0,(short)0 ,(short)0}; + maxCapArray = new short[]{(short)472 ,(short)794,(short)413 ,(short)465,(short)794 ,(short)594,(short)594,(short)1,(short)1,(short)1000,(short)1}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(10, resourceRoot); + copperRoots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("copper_kelsh"); + resourceRoot.setResourceClass("Copper"); + resourceRoot.setResourceType("Kelsh"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_MINERAL); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_INORGANIC_MINERALS); + //Kelsh Copper: CR 418 - 560, CD 761 - 850, DR 366 - 490, HR 435 - 515, MA 761 - 850, SR 561 - 650, UT 561 - 650 + minCapArray = new short[]{(short)418 ,(short)761,(short)366 ,(short)435,(short)761 ,(short)561,(short)561,(short)0,(short)0,(short)1 ,(short)0}; + maxCapArray = new short[]{(short)560 ,(short)850,(short)490 ,(short)515,(short)850 ,(short)650,(short)650,(short)1,(short)1,(short)1000,(short)1}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(11, resourceRoot); + copperRoots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("copper_mythra"); + resourceRoot.setResourceClass("Copper"); + resourceRoot.setResourceType("Mythra"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_MINERAL); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_INORGANIC_MINERALS); + //Mythra Copper: CR 507 - 649, CD 817 - 906, DR 444 - 568, HR 485 - 565, MA 817 - 906, SR 617 - 706, UT 617 - 706 + minCapArray = new short[]{(short)507 ,(short)817,(short)444 ,(short)485,(short)817 ,(short)617,(short)617,(short)0,(short)0,(short)1 ,(short)0}; + maxCapArray = new short[]{(short)649 ,(short)906,(short)568 ,(short)565,(short)906 ,(short)706,(short)706,(short)1,(short)1,(short)1000,(short)1}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(12, resourceRoot); + copperRoots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("copper_platinite"); + resourceRoot.setResourceClass("Copper"); + resourceRoot.setResourceType("Platinite"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_MINERAL); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_INORGANIC_MINERALS); + //Platinite Copper: CR 596 - 738, CD 872 - 961, DR 521 - 646, HR 535 - 615, MA 872 - 961, SR 672 - 761, UT 672 - 761 + minCapArray = new short[]{(short)596 ,(short)872,(short)521 ,(short)535,(short)872 ,(short)672,(short)672,(short)0,(short)0,(short)1 ,(short)0}; + maxCapArray = new short[]{(short)738 ,(short)961,(short)646 ,(short)615,(short)961 ,(short)761,(short)761,(short)1,(short)1,(short)1000,(short)1}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(13, resourceRoot); + copperRoots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("copper_polysteel"); + resourceRoot.setResourceClass("Copper"); + resourceRoot.setResourceType("Polysteel"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_MINERAL); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_INORGANIC_MINERALS); + //Polysteel Copper: CR 685 - 800, CD 928 - 1000, DR 599 - 700, HR 585 - 650, MA 928 - 1000, SR 728 - 800, UT 728 - 800 + minCapArray = new short[]{(short)685 ,(short)928 ,(short)599 ,(short)585,(short)928 ,(short)728,(short)728,(short)0,(short)0,(short)1 ,(short)0}; + maxCapArray = new short[]{(short)800 ,(short)1000,(short)700 ,(short)650,(short)1000 ,(short)800,(short)800,(short)1,(short)1,(short)1000,(short)1}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(14, resourceRoot); + copperRoots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("copper_borocarbitic"); + resourceRoot.setResourceClass("Copper"); + resourceRoot.setResourceType("Borocarbitic"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_MINERAL); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_INORGANIC_MINERALS); + //Conductive Borcarbitic Copper: None CR CD DR HR MA OQ SR UT + minCapArray = new short[]{(short)1 ,(short)1 ,(short)1 ,(short)1 ,(short)1 ,(short)1 ,(short)1 ,(short)0,(short)0,(short)1 ,(short)0}; + maxCapArray = new short[]{(short)1000,(short)1000,(short)1000 ,(short)1000,(short)1000,(short)1000,(short)1000,(short)1,(short)1,(short)1000,(short)1}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(15, resourceRoot); + copperRoots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("iron_plumbum"); + resourceRoot.setResourceClass("Iron"); + resourceRoot.setResourceType("Plumbum"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_MINERAL); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_INORGANIC_MINERALS); + // Plumbum Iron: CR 1 - 131, CD 1 - 82, DR 300 - 414, HR 500 - 581, MA 1 - 98, SR 400 - 498, UT 400 - 498 + minCapArray = new short[]{(short)1 ,(short)1 ,(short)300 ,(short)500,(short)1 ,(short)400,(short)400,(short)0,(short)0,(short)1 ,(short)0}; + maxCapArray = new short[]{(short)131,(short)82,(short)414 ,(short)581,(short)98 ,(short)498,(short)498,(short)1,(short)1,(short)1000,(short)1}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(16, resourceRoot); + ironRoots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("iron_polonium"); + resourceRoot.setResourceClass("Iron"); + resourceRoot.setResourceType("Polonium"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_MINERAL); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_INORGANIC_MINERALS); + //Polonium Iron: CR 71 - 231, CD 45 - 144, DR 361 - 501, HR 544 - 644, MA 53 - 173, SR 453 - 573, UT 453 - 573 + minCapArray = new short[]{(short)71 ,(short)45 ,(short)361 ,(short)544,(short)53 ,(short)453,(short)453,(short)0,(short)0,(short)1 ,(short)0}; + maxCapArray = new short[]{(short)231,(short)144,(short)501 ,(short)644,(short)173 ,(short)573,(short)573,(short)1,(short)1,(short)1000,(short)1}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(17, resourceRoot); + ironRoots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("iron_axidite"); + resourceRoot.setResourceClass("Iron"); + resourceRoot.setResourceType("Axidite"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_MINERAL); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_INORGANIC_MINERALS); + //Axidite Iron: CR 171 - 331, CD 107 - 207, DR 449 - 589, HR 606 - 706, MA 128 - 248, SR 528 - 648, UT 528 - 648 + minCapArray = new short[]{(short)171,(short)107,(short)559 ,(short)606,(short)128 ,(short)528,(short)528,(short)0,(short)0,(short)1 ,(short)0}; + maxCapArray = new short[]{(short)331,(short)207,(short)589 ,(short)706,(short)238 ,(short)648,(short)648,(short)1,(short)1,(short)1000,(short)1}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(18, resourceRoot); + ironRoots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("iron_bronzium"); + resourceRoot.setResourceClass("Iron"); + resourceRoot.setResourceType("Bronzium"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_MINERAL); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_INORGANIC_MINERALS); + //Bronzium Iron: CR 271 - 430, CD 169 - 269, DR 536 - 676, HR 669 - 769, MA 203 - 323, SR 603 - 723, UT 603 - 723 + minCapArray = new short[]{(short)271,(short)169,(short)536 ,(short)669,(short)203 ,(short)603,(short)603,(short)0,(short)0,(short)1 ,(short)0}; + maxCapArray = new short[]{(short)430,(short)269,(short)676 ,(short)769,(short)323 ,(short)723,(short)723,(short)1,(short)1,(short)1000,(short)1}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(19, resourceRoot); + ironRoots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("iron_colat"); + resourceRoot.setResourceClass("Iron"); + resourceRoot.setResourceType("Colat"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_MINERAL); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_INORGANIC_MINERALS); + //Colat Iron: CR 371 - 530, CD 232 - 332, DR 624 - 764, HR 731 - 831, MA 278 - 398, SR 678 - 798, UT 678 - 798 + minCapArray = new short[]{(short)371,(short)232,(short)624 ,(short)731,(short)278 ,(short)678,(short)678,(short)0,(short)0,(short)1 ,(short)0}; + maxCapArray = new short[]{(short)530,(short)332,(short)764 ,(short)831,(short)398 ,(short)798,(short)798,(short)1,(short)1,(short)1000,(short)1}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(20, resourceRoot); + ironRoots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("iron_dolovite"); + resourceRoot.setResourceClass("Iron"); + resourceRoot.setResourceType("Dolovite"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_MINERAL); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_INORGANIC_MINERALS); + //Dolovite Iron: CR 470 - 630, CD 294 - 394, DR 711 - 851, HR 794 - 894, MA 353 - 473, SR 753 - 873, UT 753 - 873 + minCapArray = new short[]{(short)470,(short)294,(short)711 ,(short)794,(short)353 ,(short)753,(short)753,(short)0,(short)0,(short)1 ,(short)0}; + maxCapArray = new short[]{(short)630,(short)394,(short)851 ,(short)894,(short)473 ,(short)873,(short)873,(short)1,(short)1,(short)1000,(short)1}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(21, resourceRoot); + ironRoots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("iron_doonium"); + resourceRoot.setResourceClass("Iron"); + resourceRoot.setResourceType("Doonium"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_MINERAL); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_INORGANIC_MINERALS); + //Doonium Iron: CR 570 - 730, CD 357 - 456, DR 799 - 939, HR 856 - 956, MA 428 - 548, SR 828 - 948, UT 828 - 948 + minCapArray = new short[]{(short)570,(short)357,(short)799 ,(short)856,(short)428 ,(short)828,(short)828,(short)0,(short)0,(short)1 ,(short)0}; + maxCapArray = new short[]{(short)730,(short)456,(short)939 ,(short)956,(short)548 ,(short)948,(short)948,(short)1,(short)1,(short)1000,(short)1}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(22, resourceRoot); + ironRoots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("iron_kammris"); + resourceRoot.setResourceClass("Iron"); + resourceRoot.setResourceType("Kammris"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_MINERAL); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_INORGANIC_MINERALS); + //Kammris Iron: CR 670 - 800, CD 419 - 500, DR 886 - 1000, HR 919 - 1000, MA 503 - 600, SR 903 - 1000, UT 903 - 1000 + minCapArray = new short[]{(short)670,(short)419,(short)886 ,(short)919 ,(short)503 ,(short)903 ,(short)903 ,(short)0,(short)0,(short)1 ,(short)0}; + maxCapArray = new short[]{(short)800,(short)500,(short)1000,(short)1000,(short)600 ,(short)1000,(short)1000,(short)1,(short)1,(short)1000,(short)1}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(23, resourceRoot); + ironRoots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("steel_rhodium"); + resourceRoot.setResourceClass("Steel"); + resourceRoot.setResourceType("Rhodium"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_MINERAL); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_INORGANIC_MINERALS); + //Rhodium Steel: CR 1 - 105, CD 1 - 85, DR 500 - 565, HR 600 - 652, MA 1 - 53, SR 500 - 565, UT 400 - 478 + minCapArray = new short[]{(short)1, (short)1 ,(short)500 ,(short)600 ,(short)1 ,(short)500,(short)400,(short)0,(short)0,(short)1 ,(short)0}; + maxCapArray = new short[]{(short)105,(short)85,(short)565 ,(short)652 ,(short)53 ,(short)565,(short)478,(short)1,(short)1,(short)1000,(short)1}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(24, resourceRoot); + steelRoots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("steel_kiirium"); + resourceRoot.setResourceClass("Steel"); + resourceRoot.setResourceType("Kiirium"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_MINERAL); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_INORGANIC_MINERALS); + //Kiirium Steel: CR 57 - 185, CD 46 - 150, DR 535 - 615, HR 628 - 692, MA 29 - 93, SR 535 - 615, UT 442 - 538 + minCapArray = new short[]{(short)57, (short)46 ,(short)535 ,(short)628 ,(short)29 ,(short)535,(short)442,(short)0,(short)0,(short)1 ,(short)0}; + maxCapArray = new short[]{(short)185,(short)150,(short)615 ,(short)692 ,(short)93 ,(short)615,(short)538,(short)1,(short)1,(short)1000,(short)1}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(25, resourceRoot); + steelRoots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("steel_cubirian"); + resourceRoot.setResourceClass("Steel"); + resourceRoot.setResourceType("Cubirian"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_MINERAL); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_INORGANIC_MINERALS); + //Cubirian Steel: CR 137 - 265, CD 111 - 215, DR 585 - 665, HR 668 - 732, MA 69 - 133, SR 585 - 665, UT 502 - 598 + minCapArray = new short[]{(short)137,(short)111,(short)585 ,(short)668 ,(short)69 ,(short)585,(short)502,(short)0,(short)0,(short)1 ,(short)0}; + maxCapArray = new short[]{(short)265,(short)215,(short)665 ,(short)732 ,(short)133,(short)665,(short)598,(short)1,(short)1,(short)1000,(short)1}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(26, resourceRoot); + steelRoots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("steel_thoranium"); + resourceRoot.setResourceClass("Steel"); + resourceRoot.setResourceType("Thoranium"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_MINERAL); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_INORGANIC_MINERALS); + //Thoranium Steel: CR 217 - 345, CD 176 - 280, DR 635 - 715, HR 708 - 772, MA 109 - 173, SR 635 - 715, UT 562 - 658 + minCapArray = new short[]{(short)217,(short)176,(short)635 ,(short)708 ,(short)109,(short)635,(short)562,(short)0,(short)0,(short)1 ,(short)0}; + maxCapArray = new short[]{(short)345,(short)280,(short)715 ,(short)772 ,(short)173,(short)715,(short)658,(short)1,(short)1,(short)1000,(short)1}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(27, resourceRoot); + steelRoots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("steel_neutronium"); + resourceRoot.setResourceClass("Steel"); + resourceRoot.setResourceType("Neutronium"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_MINERAL); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_INORGANIC_MINERALS); + //Neutronium Steel: CR 297 - 424, CD 241 - 345, DR 685 - 765, HR 748 - 812, MA 149 - 212, SR 685 - 765, UT 622 - 718 + minCapArray = new short[]{(short)297,(short)241,(short)685 ,(short)748 ,(short)149,(short)685,(short)622,(short)0,(short)0,(short)1 ,(short)0}; + maxCapArray = new short[]{(short)424,(short)345,(short)765 ,(short)812 ,(short)212,(short)765,(short)718,(short)1,(short)1,(short)1000,(short)1}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(28, resourceRoot); + steelRoots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("steel_duranium"); + resourceRoot.setResourceClass("Steel"); + resourceRoot.setResourceType("Duranium"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_MINERAL); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_INORGANIC_MINERALS); + //Duranium Steel: CR 377 - 504, CD 306 - 410, DR 735 - 815, HR 788 - 852, MA 189 - 252, SR 735 - 815, UT 682 - 778 + minCapArray = new short[]{(short)377,(short)306,(short)735 ,(short)788 ,(short)189,(short)735,(short)682,(short)0,(short)0,(short)1 ,(short)0}; + maxCapArray = new short[]{(short)504,(short)410,(short)815 ,(short)852 ,(short)252,(short)815,(short)778,(short)1,(short)1,(short)1000,(short)1}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(29, resourceRoot); + steelRoots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("steel_ditanium"); + resourceRoot.setResourceClass("Steel"); + resourceRoot.setResourceType("Ditanium"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_MINERAL); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_INORGANIC_MINERALS); + //Ditanium Steel: CR 456 - 584, CD 371 - 475, DR 785 - 865, HR 828 - 892, MA 228 - 292, SR 785 - 865, UT 742 - 838 + minCapArray = new short[]{(short)456,(short)371,(short)785 ,(short)828 ,(short)228,(short)785,(short)742,(short)0,(short)0,(short)1 ,(short)0}; + maxCapArray = new short[]{(short)584,(short)475,(short)865 ,(short)892 ,(short)292,(short)865,(short)838,(short)1,(short)1,(short)1000,(short)1}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(30, resourceRoot); + steelRoots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("steel_quadranium"); + resourceRoot.setResourceClass("Steel"); + resourceRoot.setResourceType("Quadranium"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_MINERAL); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_INORGANIC_MINERALS); + //Quadranium Steel: CR 536 - 664, CD 436 - 540, DR 835 - 915, HR 868 - 932, MA 268 - 332, SR 835 - 915, UT 802 - 898 + minCapArray = new short[]{(short)536,(short)436,(short)835 ,(short)868 ,(short)268,(short)835,(short)802,(short)0,(short)0,(short)1 ,(short)0}; + maxCapArray = new short[]{(short)664,(short)540,(short)915 ,(short)932 ,(short)332,(short)915,(short)898,(short)1,(short)1,(short)1000,(short)1}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(31, resourceRoot); + steelRoots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("steel_carbonite"); + resourceRoot.setResourceClass("Steel"); + resourceRoot.setResourceType("Carbonite"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_MINERAL); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_INORGANIC_MINERALS); + //Carbonite Steel: CR 616 - 744, CD 501 - 605, DR 885 - 965, HR 908 - 972, MA 308 - 372, SR 885 - 965, UT 862 - 958 + minCapArray = new short[]{(short)616,(short)501,(short)885 ,(short)908 ,(short)308,(short)885,(short)862,(short)0,(short)0,(short)1 ,(short)0}; + maxCapArray = new short[]{(short)744,(short)605,(short)965 ,(short)972 ,(short)372,(short)965,(short)958,(short)1,(short)1,(short)1000,(short)1}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(32, resourceRoot); + steelRoots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("steel_duralloy"); + resourceRoot.setResourceClass("Steel"); + resourceRoot.setResourceType("Duralloy"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_MINERAL); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_INORGANIC_MINERALS); + //Duralloy Steel: CR 696 - 800, CD 566 - 650, DR 935 - 1000, HR 948 - 1000, MA 348 - 400, SR 935 - 1000, UT 922 - 1000 + minCapArray = new short[]{(short)696,(short)566,(short)935 ,(short)948 ,(short)348,(short)935 ,(short)922 ,(short)0,(short)0,(short)1 ,(short)0}; + maxCapArray = new short[]{(short)800,(short)650,(short)1000,(short)1000,(short)400,(short)1000,(short)1000,(short)1,(short)1,(short)1000,(short)1}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(33, resourceRoot); + steelRoots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("ore_carbonate_alantium"); + resourceRoot.setResourceClass("Carbonate Ore"); + resourceRoot.setResourceType("Alantium"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_MINERAL); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_INORGANIC_MINERALS); + ////"Cold Res","Cond","Decay Res","Heat Res","Malle","Shock Res","Unit Tough","Entangle Res","Pot E","OQ","Flavor" + // Alantium Carbonate Ore: CR 300 - 414, DR 1 - 115, HR 400 - 498, MA 300 - 414, SR 1 - 115, UT 200 - 330 + minCapArray = new short[]{(short)300,(short)0,(short)1 ,(short)400,(short)300,(short)1 ,(short)200,(short)0,(short)0,(short)1 ,(short)0}; + maxCapArray = new short[]{(short)414,(short)1,(short)115,(short)498,(short)414,(short)115,(short)330,(short)1,(short)1,(short)1000,(short)1}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(34, resourceRoot); + oreCarbonateRoots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("ore_carbonate_barthierium"); + resourceRoot.setResourceClass("Carbonate Ore"); + resourceRoot.setResourceType("Barthierium"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_MINERAL); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_INORGANIC_MINERALS); + //Barthierium Carbonate Ore: CR 361 - 501, DR 62 - 202, HR 453 - 573, MA 361 - 501, SR 62 - 202, UT 270 - 430 + minCapArray = new short[]{(short)361,(short)0,(short)62 ,(short)453,(short)361,(short)62 ,(short)270,(short)0,(short)0,(short)1 ,(short)0}; + maxCapArray = new short[]{(short)501,(short)1,(short)202 ,(short)573,(short)501,(short)202,(short)430,(short)1,(short)1,(short)1000,(short)1}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(35, resourceRoot); + oreCarbonateRoots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("ore_carbonate_chromite"); + resourceRoot.setResourceClass("Carbonate Ore"); + resourceRoot.setResourceType("Chromite"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_MINERAL); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_INORGANIC_MINERALS); + //Chromite Carbonate Ore: CR 449 - 589, DR 150 - 289, HR 528 - 648, MA 449 - 589, SR 150 - 289, UT 370 - 530 + minCapArray = new short[]{(short)449,(short)0,(short)150,(short)528,(short)449,(short)150,(short)370,(short)0,(short)0,(short)1 ,(short)0}; + maxCapArray = new short[]{(short)598,(short)1,(short)298,(short)648,(short)598,(short)289,(short)530,(short)1,(short)1,(short)1000,(short)1}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(36, resourceRoot); + oreCarbonateRoots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("ore_carbonate_frasium"); + resourceRoot.setResourceClass("Carbonate Ore"); + resourceRoot.setResourceType("Frasium"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_MINERAL); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_INORGANIC_MINERALS); + //Frasium Carbonate Ore: CR 536 - 676, DR 237 - 377, HR 603 - 723, MA 536 - 676, SR 237 - 377, UT 470 - 630 + minCapArray = new short[]{(short)536,(short)0,(short)237,(short)603,(short)536,(short)237,(short)470,(short)0,(short)0,(short)1 ,(short)0}; + maxCapArray = new short[]{(short)676,(short)1,(short)377,(short)723,(short)676,(short)377,(short)630,(short)1,(short)1,(short)1000,(short)1}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(37, resourceRoot); + oreCarbonateRoots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("ore_carbonate_lommite"); + resourceRoot.setResourceClass("Carbonate Ore"); + resourceRoot.setResourceType("Lommite"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_MINERAL); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_INORGANIC_MINERALS); + //Lommite Carbonate Ore: CR 624 - 764, DR 324 - 464, HR 678 - 798, MA 624 - 764, SR 324 - 464, UT 570 - 730 + minCapArray = new short[]{(short)624,(short)0,(short)324,(short)678,(short)624,(short)324,(short)570,(short)0,(short)0,(short)1 ,(short)0}; + maxCapArray = new short[]{(short)764,(short)1,(short)464,(short)798,(short)764,(short)464,(short)730,(short)1,(short)1,(short)1000,(short)1}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(38, resourceRoot); + oreCarbonateRoots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("ore_carbonate_ostrine"); + resourceRoot.setResourceClass("Carbonate Ore"); + resourceRoot.setResourceType("Ostrine"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_MINERAL); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_INORGANIC_MINERALS); + // Ostrine Carbonate Ore: CR 711 - 851, DR 412 - 551, HR 753 - 873, MA 711 - 851, SR 412 - 551, UT 670 - 830 + minCapArray = new short[]{(short)711,(short)0,(short)412,(short)753,(short)711,(short)412,(short)670,(short)0,(short)0,(short)1 ,(short)0}; + maxCapArray = new short[]{(short)851,(short)1,(short)551,(short)873,(short)851,(short)551,(short)830,(short)1,(short)1,(short)1000,(short)1}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(39, resourceRoot); + oreCarbonateRoots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("ore_carbonate_varium"); + resourceRoot.setResourceClass("Carbonate Ore"); + resourceRoot.setResourceType("Varium"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_MINERAL); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_INORGANIC_MINERALS); + //Varium Carbonate Ore: CR 799 - 939, DR 499 - 639, HR 828 - 948, MA 799 - 939, SR 499 - 639, UT 770 - 930 + minCapArray = new short[]{(short)799,(short)0,(short)499,(short)828,(short)799,(short)499,(short)770,(short)0,(short)0,(short)1 ,(short)0}; + maxCapArray = new short[]{(short)939,(short)1,(short)639,(short)948,(short)939,(short)639,(short)930,(short)1,(short)1,(short)1000,(short)1}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(40, resourceRoot); + oreCarbonateRoots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("ore_carbonate_zinsiam"); + resourceRoot.setResourceClass("Carbonate Ore"); + resourceRoot.setResourceType("Zinsiam"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_MINERAL); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_INORGANIC_MINERALS); + //Zinsiam Carbonate Ore: CR 886 - 1000, DR 586 - 700, HR 903 - 1000, MA 886 - 1000, SR 586 - 700, UT 870 - 1000 + minCapArray = new short[]{(short)886 ,(short)0,(short)586,(short)903 ,(short)886 ,(short)586,(short)870 ,(short)0,(short)0,(short)1 ,(short)0}; + maxCapArray = new short[]{(short)1000,(short)1,(short)700,(short)1000,(short)1000,(short)700,(short)1000,(short)1,(short)1,(short)1000,(short)1}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(41, resourceRoot); + oreCarbonateRoots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("ore_siliclastic_ardanium"); + resourceRoot.setResourceClass("Siliclastic Ore"); + resourceRoot.setResourceType("Ardanium"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_MINERAL); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_INORGANIC_MINERALS); + // Ardanium Siliclastic Ore: CR 300 - 452, DR 1 - 152, HR 300 - 452, MA 300 - 452, SR 1 - 131, UT 1 - 152 + minCapArray = new short[]{(short)300,(short)0,(short)1 ,(short)300 ,(short)300,(short)1 ,(short)1 ,(short)0,(short)0,(short)1 ,(short)0}; + maxCapArray = new short[]{(short)452,(short)1,(short)152,(short)452 ,(short)452,(short)131,(short)152,(short)1,(short)1,(short)1000,(short)1}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(42, resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("ore_siliclastic_cortosis"); + resourceRoot.setResourceClass("Siliclastic Ore"); + resourceRoot.setResourceType("Cortosis"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_MINERAL); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_INORGANIC_MINERALS); + //Cortosis Siliclastic Ore: CR 382 - 568, DR 83 - 269, HR 382 - 568, MA 382 - 568, SR 71 - 231, UT 83 - 269 + minCapArray = new short[]{(short)382,(short)0,(short)83 ,(short)382 ,(short)382,(short)71 ,(short)83 ,(short)0,(short)0,(short)1 ,(short)0}; + maxCapArray = new short[]{(short)568,(short)1,(short)269,(short)568 ,(short)568,(short)231,(short)269,(short)1,(short)1,(short)1000,(short)1}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(43, resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("ore_siliclastic_crism"); + resourceRoot.setResourceClass("Siliclastic Ore"); + resourceRoot.setResourceType("Crism"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_MINERAL); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_INORGANIC_MINERALS); + //Crism Siliclastic Ore: CR 498 - 685, DR 199 - 385, HR 498 - 685, MA 498 - 685, SR 171 - 330, UT 199 - 385 + minCapArray = new short[]{(short)498,(short)0,(short)199,(short)498 ,(short)498,(short)171,(short)199,(short)0,(short)0,(short)1 ,(short)0}; + maxCapArray = new short[]{(short)685,(short)1,(short)385,(short)685 ,(short)685,(short)330,(short)385,(short)1,(short)1,(short)1000,(short)1}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(44, resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("ore_siliclastic_malab"); + resourceRoot.setResourceClass("Siliclastic Ore"); + resourceRoot.setResourceType("Malab"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_MINERAL); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_INORGANIC_MINERALS); + //Malab Siliclastic Ore: CR 615 - 802, DR 316 - 502, HR 615 - 802, MA 615 - 802, SR 271 - 430, UT 316 - 502 + minCapArray = new short[]{(short)615,(short)0,(short)316,(short)615 ,(short)615,(short)271,(short)316,(short)0,(short)0,(short)1 ,(short)0}; + maxCapArray = new short[]{(short)802,(short)1,(short)502,(short)802 ,(short)802,(short)430,(short)502,(short)1,(short)1,(short)1000,(short)1}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(45, resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("ore_siliclastic_robindun"); + resourceRoot.setResourceClass("Siliclastic Ore"); + resourceRoot.setResourceType("Robindun"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_MINERAL); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_INORGANIC_MINERALS); + //Robindun Siliclastic Ore: CR 732 - 918, DR 432 - 618, HR 732 - 918, MA 732 - 918, SR 370 - 530, UT 432 - 618 + minCapArray = new short[]{(short)732,(short)0,(short)432,(short)732 ,(short)732,(short)370,(short)432,(short)0,(short)0,(short)1 ,(short)0}; + maxCapArray = new short[]{(short)918,(short)1,(short)618,(short)918 ,(short)918,(short)530,(short)618,(short)1,(short)1,(short)1000,(short)1}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(46, resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("ore_siliclastic_tertian"); + resourceRoot.setResourceClass("Siliclastic Ore"); + resourceRoot.setResourceType("Tertian"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_MINERAL); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_INORGANIC_MINERALS); + //Tertian Siliclastic Ore: CR 848 - 1000, DR 549 - 700, HR 848 - 1000, MA 848 - 1000, SR 470 - 600, UT 549 - 700 + minCapArray = new short[]{(short)848 ,(short)0,(short)549,(short)848 ,(short)848 ,(short)470,(short)549,(short)0,(short)0,(short)1 ,(short)0}; + maxCapArray = new short[]{(short)1000,(short)1,(short)700,(short)1000,(short)1000,(short)600,(short)700,(short)1,(short)1,(short)1000,(short)1}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(47, resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("ore_extrusive_bene"); + resourceRoot.setResourceClass("Extrusive Ore"); + resourceRoot.setResourceType("Bene"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_MINERAL); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_INORGANIC_MINERALS); + //Bene Extrusive Ore: CR 200 - 304, DR 300 - 391, HR 400 - 478, MA 1 - 79, SR 400 - 478, UT 400 - 478 + minCapArray = new short[]{(short)200,(short)0,(short)300,(short)400,(short)1 ,(short)400,(short)400,(short)0,(short)0,(short)1 ,(short)0}; + maxCapArray = new short[]{(short)304,(short)1,(short)391,(short)478,(short)79,(short)478,(short)478,(short)1,(short)1,(short)1000,(short)1}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(48, resourceRoot); + oreExtrusiveRoots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("ore_extrusive_chronamite"); + resourceRoot.setResourceClass("Extrusive Ore"); + resourceRoot.setResourceType("Chronamite"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_MINERAL); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_INORGANIC_MINERALS); + //Chronamite Extrusive Ore: CR 256 - 384, DR 349 - 461, HR 442 - 538, MA 43 - 139, SR 442 - 538, UT 442 - 538 + minCapArray = new short[]{(short)256,(short)0,(short)349,(short)442,(short)43 ,(short)442,(short)442,(short)0,(short)0,(short)1 ,(short)0}; + maxCapArray = new short[]{(short)384,(short)1,(short)461,(short)538,(short)139,(short)538,(short)538,(short)1,(short)1,(short)1000,(short)1}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(49, resourceRoot); + oreExtrusiveRoots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("ore_extrusive_ilimium"); + resourceRoot.setResourceClass("Extrusive Ore"); + resourceRoot.setResourceType("Ilimium"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_MINERAL); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_INORGANIC_MINERALS); + //Ilimium Extrusive Ore: CR 336 - 464, DR 419 - 531, HR 502 - 598, MA 103 - 199, SR 502 - 598, UT 502 - 598 + minCapArray = new short[]{(short)336,(short)0,(short)419,(short)502,(short)103,(short)502,(short)502,(short)0,(short)0,(short)1 ,(short)0}; + maxCapArray = new short[]{(short)464,(short)1,(short)531,(short)598,(short)199,(short)598,(short)598,(short)1,(short)1,(short)1000,(short)1}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(50, resourceRoot); + oreExtrusiveRoots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("ore_extrusive_kalonterium"); + resourceRoot.setResourceClass("Extrusive Ore"); + resourceRoot.setResourceType("Kalonterium"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_MINERAL); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_INORGANIC_MINERALS); + //Kalonterium Extrusive Ore: CR 416 - 544, DR 489 - 601, HR 562 - 658, MA 163 - 259, SR 562 - 658, UT 562 - 658 + minCapArray = new short[]{(short)416,(short)0,(short)489,(short)562,(short)163,(short)562,(short)562,(short)0,(short)0,(short)1 ,(short)0}; + maxCapArray = new short[]{(short)544,(short)1,(short)601,(short)658,(short)259,(short)658,(short)658,(short)1,(short)1,(short)1000,(short)1}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(51, resourceRoot); + oreExtrusiveRoots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("ore_extrusive_keschel"); + resourceRoot.setResourceClass("Extrusive Ore"); + resourceRoot.setResourceType("Keschel"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_MINERAL); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_INORGANIC_MINERALS); + //Keschel Extrusive Ore: CR 496 - 624, DR 559 - 671, HR 622 - 718, MA 223 - 318, SR 622 - 718, UT 622 - 718 + minCapArray = new short[]{(short)496,(short)0,(short)559,(short)622,(short)223,(short)622,(short)622,(short)0,(short)0,(short)1 ,(short)0}; + maxCapArray = new short[]{(short)624,(short)1,(short)671,(short)718,(short)318,(short)718,(short)718,(short)1,(short)1,(short)1000,(short)1}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(52, resourceRoot); + oreExtrusiveRoots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("ore_extrusive_lidium"); + resourceRoot.setResourceClass("Extrusive Ore"); + resourceRoot.setResourceType("Lidium"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_MINERAL); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_INORGANIC_MINERALS); + //Lidium Extrusive Ore: CR 576 - 704, DR 629 - 741, HR 682 - 778, MA 283 - 378, SR 682 - 778, UT 682 - 778 + minCapArray = new short[]{(short)576,(short)0,(short)629,(short)682,(short)283,(short)682,(short)682,(short)0,(short)0,(short)1 ,(short)0}; + maxCapArray = new short[]{(short)704,(short)1,(short)741,(short)778,(short)378,(short)778,(short)778,(short)1,(short)1,(short)1000,(short)1}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(53, resourceRoot); + oreExtrusiveRoots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("ore_extrusive_maranium"); + resourceRoot.setResourceClass("Extrusive Ore"); + resourceRoot.setResourceType("Maranium"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_MINERAL); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_INORGANIC_MINERALS); + //Maranium Extrusive Ore: CR 656 - 784, DR 699 - 811, HR 742 - 838, MA 342 - 438, SR 742 - 838, UT 742 - 838 + minCapArray = new short[]{(short)656,(short)0,(short)699,(short)742,(short)342,(short)742,(short)742,(short)0,(short)0,(short)1 ,(short)0}; + maxCapArray = new short[]{(short)784,(short)1,(short)811,(short)838,(short)438,(short)838,(short)838,(short)1,(short)1,(short)1000,(short)1}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(54, resourceRoot); + oreExtrusiveRoots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("ore_extrusive_pholokite"); + resourceRoot.setResourceClass("Extrusive Ore"); + resourceRoot.setResourceType("Pholokite"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_MINERAL); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_INORGANIC_MINERALS); + // Pholokite Extrusive Ore: CR 736 - 864, DR 769 - 881, HR 802 - 898, MA 402 - 498, SR 802 - 898, UT 802 - 898 + minCapArray = new short[]{(short)736,(short)0,(short)769,(short)802,(short)402,(short)802,(short)802,(short)0,(short)0,(short)1 ,(short)0}; + maxCapArray = new short[]{(short)864,(short)1,(short)881,(short)898,(short)498,(short)898,(short)898,(short)1,(short)1,(short)1000,(short)1}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(55, resourceRoot); + oreExtrusiveRoots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("ore_extrusive_quadrenium"); + resourceRoot.setResourceClass("Extrusive Ore"); + resourceRoot.setResourceType("Quadrenium"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_MINERAL); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_INORGANIC_MINERALS); + //Quadrenium Extrusive Ore: CR 816 - 944, DR 839 - 951, HR 862 - 958, MA 462 - 558, SR 862 - 958, UT 862 - 958 + minCapArray = new short[]{(short)816,(short)0,(short)839,(short)862,(short)462,(short)862,(short)862,(short)0,(short)0,(short)1 ,(short)0}; + maxCapArray = new short[]{(short)944,(short)1,(short)951,(short)958,(short)558,(short)958,(short)958,(short)1,(short)1,(short)1000,(short)1}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(56, resourceRoot); + oreExtrusiveRoots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("ore_extrusive_vintrium"); + resourceRoot.setResourceClass("Extrusive Ore"); + resourceRoot.setResourceType("Vintrium"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_MINERAL); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_INORGANIC_MINERALS); + // Vintrium Extrusive Ore: CR 896 - 1000, DR 909 - 1000, HR 922 - 1000, MA 522 - 600, SR 922 - 1000, UT 922 - 1000 + minCapArray = new short[]{(short)896 ,(short)0,(short)909 ,(short)922 ,(short)522,(short)922 ,(short)922 ,(short)0,(short)0,(short)1 ,(short)0}; + maxCapArray = new short[]{(short)1000,(short)1,(short)1000,(short)1000,(short)600,(short)1000,(short)1000,(short)1,(short)1,(short)1000,(short)1}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(57, resourceRoot); + oreExtrusiveRoots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("ore_intrusive_berubium"); + resourceRoot.setResourceClass("Intrusive Ore"); + resourceRoot.setResourceType("Berubium"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_MINERAL); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_INORGANIC_MINERALS); + //Berubium Intrusive Ore: CR 200 - 316, DR 300 - 401, HR 700 - 743, MA 1 - 88, SR 500 - 572, UT 400 - 487 + minCapArray = new short[]{(short)200,(short)0,(short)300,(short)700,(short)1 ,(short)500,(short)400,(short)0,(short)0,(short)1 ,(short)0}; + maxCapArray = new short[]{(short)316,(short)1,(short)401,(short)743,(short)88,(short)572,(short)487,(short)1,(short)1,(short)1000,(short)1}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(58, resourceRoot); + oreIntrusiveRoots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("ore_intrusive_chanlon"); + resourceRoot.setResourceClass("Intrusive Ore"); + resourceRoot.setResourceType("Chanlon"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_MINERAL); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_INORGANIC_MINERALS); + //Chanlon Intrusive Ore: CR 262 - 404, DR 354 - 479, HR 723 - 777, MA 48 - 154, SR 539 - 628, UT 447 - 553 + minCapArray = new short[]{(short)262,(short)0,(short)354,(short)723,(short)48 ,(short)539,(short)447,(short)0,(short)0,(short)1 ,(short)0}; + maxCapArray = new short[]{(short)404,(short)1,(short)479,(short)777,(short)154,(short)628,(short)553,(short)1,(short)1,(short)1000,(short)1}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(59, resourceRoot); + oreIntrusiveRoots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("ore_intrusive_corintium"); + resourceRoot.setResourceClass("Intrusive Ore"); + resourceRoot.setResourceType("Corintium"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_MINERAL); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_INORGANIC_MINERALS); + //Corintium Intrusive Ore: CR 351 - 493, DR 432 - 557, HR 757 - 810, MA 114 - 221, SR 594 - 683, UT 513 - 620 + minCapArray = new short[]{(short)351,(short)0,(short)432,(short)757,(short)114,(short)594,(short)513,(short)0,(short)0,(short)1 ,(short)0}; + maxCapArray = new short[]{(short)493,(short)1,(short)557,(short)810,(short)221,(short)683,(short)620,(short)1,(short)1,(short)1000,(short)1}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(60, resourceRoot); + oreIntrusiveRoots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("ore_intrusive_derillium"); + resourceRoot.setResourceClass("Intrusive Ore"); + resourceRoot.setResourceType("Derillium"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_MINERAL); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_INORGANIC_MINERALS); + //Derillium Intrusive Ore: CR 440 - 582, DR 510 - 634, HR 790 - 843, MA 181 - 287, SR 650 - 739, UT 580 - 687 + minCapArray = new short[]{(short)440,(short)0,(short)510,(short)790,(short)181,(short)650,(short)580,(short)0,(short)0,(short)1 ,(short)0}; + maxCapArray = new short[]{(short)582,(short)1,(short)634,(short)843,(short)287,(short)739,(short)687,(short)1,(short)1,(short)1000,(short)1}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(61, resourceRoot); + oreIntrusiveRoots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("ore_intrusive_oridium"); + resourceRoot.setResourceClass("Intrusive Ore"); + resourceRoot.setResourceType("Oridium"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_MINERAL); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_INORGANIC_MINERALS); + //Oridium Intrusive Ore: CR 529 - 671, DR 588 - 712, HR 823 - 877, MA 247 - 354, SR 706 - 794, UT 647 - 753 + minCapArray = new short[]{(short)529,(short)0,(short)588,(short)823,(short)247,(short)706,(short)647,(short)0,(short)0,(short)1 ,(short)0}; + maxCapArray = new short[]{(short)671,(short)1,(short)712,(short)877,(short)354,(short)794,(short)753,(short)1,(short)1,(short)1000,(short)1}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(62, resourceRoot); + oreIntrusiveRoots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("ore_intrusive_dylinium"); + resourceRoot.setResourceClass("Intrusive Ore"); + resourceRoot.setResourceType("Dylinium"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_MINERAL); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_INORGANIC_MINERALS); + //Dylinium Intrusive Ore: CR 618 - 760, DR 666 - 790, HR 857 - 910, MA 314 - 420, SR 761 - 850, UT 713 - 820 + minCapArray = new short[]{(short)618,(short)0,(short)666,(short)857,(short)314,(short)761,(short)713,(short)0,(short)0,(short)1 ,(short)0}; + maxCapArray = new short[]{(short)760,(short)1,(short)790,(short)910,(short)420,(short)850,(short)820,(short)1,(short)1,(short)1000,(short)1}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(63, resourceRoot); + oreIntrusiveRoots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("ore_intrusive_hollinium"); + resourceRoot.setResourceClass("Intrusive Ore"); + resourceRoot.setResourceType("Hollinium"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_MINERAL); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_INORGANIC_MINERALS); + //Hollinium Intrusive Ore: CR 707 - 849, DR 743 - 868, HR 890 - 943, MA 380 - 487, SR 817 - 906, UT 780 - 887 + minCapArray = new short[]{(short)707,(short)0,(short)743,(short)890,(short)380,(short)817,(short)780,(short)0,(short)0,(short)1 ,(short)0}; + maxCapArray = new short[]{(short)849,(short)1,(short)868,(short)943,(short)487,(short)906,(short)887,(short)1,(short)1,(short)1000,(short)1}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(64, resourceRoot); + oreIntrusiveRoots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("ore_intrusive_ionite"); + resourceRoot.setResourceClass("Intrusive Ore"); + resourceRoot.setResourceType("Ionite"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_MINERAL); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_INORGANIC_MINERALS); + //Ionite Intrusive Ore: CR 796 - 938, DR 821 - 946, HR 923 - 977, MA 447 - 553, SR 872 - 961, UT 847 - 953 + minCapArray = new short[]{(short)796,(short)0,(short)821,(short)923,(short)447,(short)872,(short)847,(short)0,(short)0,(short)1 ,(short)0}; + maxCapArray = new short[]{(short)938,(short)1,(short)946,(short)977,(short)553,(short)961,(short)953,(short)1,(short)1,(short)1000,(short)1}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(65, resourceRoot); + oreIntrusiveRoots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("ore_intrusive_katrium"); + resourceRoot.setResourceClass("Intrusive Ore"); + resourceRoot.setResourceType("Katrium"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_MINERAL); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_INORGANIC_MINERALS); + //Katrium Intrusive Ore: CR 884 - 1000, DR 899 - 1000, HR 957 - 1000, MA 513 - 600, SR 928 - 1000, UT 913 - 1000 + minCapArray = new short[]{(short)884 ,(short)0,(short)899 ,(short)957 ,(short)513,(short)928 ,(short)913 ,(short)0,(short)0,(short)1 ,(short)0}; + maxCapArray = new short[]{(short)1000,(short)1,(short)1000,(short)1000,(short)600,(short)1000,(short)1000,(short)1,(short)1,(short)1000,(short)1}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(66, resourceRoot); + oreIntrusiveRoots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("armophous_bospridium"); + resourceRoot.setResourceClass("Amorphous Gemstone"); + resourceRoot.setResourceType("Bospridium"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_MINERAL); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_INORGANIC_MINERALS); + //"Cold Res","Cond","Decay Res","Heat Res","Malle","Shock Res","Unit Tough","Entangle Res","Pot E","OQ","Flavor" + //Bospridium Armophous Gemstone: ER 1 - 105, CR 1 - 131, DR 1 - 131, HR 600 - 652, MA 1 - 79, SR 1 - 131, UT 1 - 131 + minCapArray = new short[]{(short)1 ,(short)0,(short)1 ,(short)600,(short)1 ,(short)1 ,(short)1 ,(short)1 ,(short)0,(short)1 ,(short)0}; + maxCapArray = new short[]{(short)131,(short)1,(short)131,(short)652,(short)79,(short)131,(short)131,(short)105,(short)1,(short)1000,(short)1}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(67, resourceRoot); + amorphousGemstoneRoots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("armophous_baradium"); + resourceRoot.setResourceClass("Amorphous Gemstone"); + resourceRoot.setResourceType("Baradium"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_MINERAL); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_INORGANIC_MINERALS); + //Baradium Armophous Gemstone: ER 57 - 185, CR 71 - 231, DR 71 - 231, HR 628 - 692, MA 43 - 139, SR 71 - 231, UT 71 - 231 + minCapArray = new short[]{(short)71 ,(short)0,(short)71 ,(short)628,(short)43 ,(short)71 ,(short)71 ,(short)57 ,(short)0,(short)1 ,(short)0}; + maxCapArray = new short[]{(short)231,(short)1,(short)231,(short)692,(short)139,(short)231,(short)231,(short)185,(short)1,(short)1000,(short)1}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(68, resourceRoot); + amorphousGemstoneRoots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("armophous_regvis"); + resourceRoot.setResourceClass("Amorphous Gemstone"); + resourceRoot.setResourceType("Regvis"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_MINERAL); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_INORGANIC_MINERALS); + //Regvis Armophous Gemstone: ER 137 - 265, CR 171 - 331, DR 171 - 331, HR 668 - 732, MA 103 - 199, SR 171 - 331, UT 171 - 331 + minCapArray = new short[]{(short)171,(short)0,(short)171,(short)668,(short)103,(short)171,(short)171,(short)137,(short)0,(short)1 ,(short)0}; + maxCapArray = new short[]{(short)331,(short)1,(short)331,(short)732,(short)199,(short)331,(short)331,(short)265,(short)1,(short)1000,(short)1}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(69, resourceRoot); + amorphousGemstoneRoots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("armophous_plexite"); + resourceRoot.setResourceClass("Amorphous Gemstone"); + resourceRoot.setResourceType("Plexite"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_MINERAL); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_INORGANIC_MINERALS); + //Plexite Armophous Gemstone: ER 217 - 345, CR 271 - 431, DR 271 - 431, HR 708 - 772, MA 163 - 259, SR 271 - 431, UT 271 - 431 + minCapArray = new short[]{(short)271,(short)0,(short)271,(short)708,(short)163,(short)271,(short)271,(short)217,(short)0,(short)1 ,(short)0}; + maxCapArray = new short[]{(short)431,(short)1,(short)431,(short)772,(short)259,(short)431,(short)431,(short)345,(short)1,(short)1000,(short)1}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(70, resourceRoot); + amorphousGemstoneRoots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("armophous_rudic"); + resourceRoot.setResourceClass("Amorphous Gemstone"); + resourceRoot.setResourceType("Rudic"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_MINERAL); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_INORGANIC_MINERALS); + //Rudic Armophous Gemstone: ER 297 - 424, CR 371 - 530, DR 371 - 530, HR 748 - 812, MA 223 - 318, SR 371 - 530, UT 371 - 530 + minCapArray = new short[]{(short)371,(short)0,(short)371,(short)748,(short)223,(short)371,(short)371,(short)297,(short)0,(short)1 ,(short)0}; + maxCapArray = new short[]{(short)530,(short)1,(short)530,(short)812,(short)318,(short)530,(short)530,(short)424,(short)1,(short)1000,(short)1}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(71, resourceRoot); + amorphousGemstoneRoots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("armophous_ryll"); + resourceRoot.setResourceClass("Amorphous Gemstone"); + resourceRoot.setResourceType("Ryll"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_MINERAL); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_INORGANIC_MINERALS); + //Ryll Armophous Gemstone: ER 377 - 504, CR 471 - 630, DR 471 - 630, HR 788 - 852, MA 283 - 378, SR 471 - 630, UT 471 - 630 + minCapArray = new short[]{(short)471,(short)0,(short)471,(short)788,(short)283,(short)471,(short)471,(short)377,(short)0,(short)1 ,(short)0}; + maxCapArray = new short[]{(short)630,(short)1,(short)630,(short)852,(short)378,(short)630,(short)630,(short)504,(short)1,(short)1000,(short)1}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(72, resourceRoot); + amorphousGemstoneRoots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("armophous_sedrellium"); + resourceRoot.setResourceClass("Amorphous Gemstone"); + resourceRoot.setResourceType("sedrellium"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_MINERAL); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_INORGANIC_MINERALS); + //Sedrellium Armophous Gemstone: ER 456 - 584, CR 570 - 730, DR 570 - 730, HR 828 - 892, MA 342 - 438, SR 570 - 730, UT 570 - 730 + minCapArray = new short[]{(short)570,(short)0,(short)570,(short)828,(short)342,(short)570,(short)570,(short)456,(short)0,(short)1 ,(short)0}; + maxCapArray = new short[]{(short)730,(short)1,(short)730,(short)892,(short)438,(short)730,(short)730,(short)584,(short)1,(short)1000,(short)1}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(73, resourceRoot); + amorphousGemstoneRoots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("armophous_stygium"); + resourceRoot.setResourceClass("Amorphous Gemstone"); + resourceRoot.setResourceType("Stygium"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_MINERAL); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_INORGANIC_MINERALS); + //Stygium Armophous Gemstone: ER 536 - 664, CR 670 - 830, DR 670 - 830, HR 868 - 932, MA 402 - 498, SR 670 - 830, UT 670 - 830 + minCapArray = new short[]{(short)670,(short)0,(short)670,(short)868,(short)402,(short)670,(short)670,(short)536,(short)0,(short)1 ,(short)0}; + maxCapArray = new short[]{(short)830,(short)1,(short)830,(short)932,(short)498,(short)830,(short)830,(short)664,(short)1,(short)1000,(short)1}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(74, resourceRoot); + amorphousGemstoneRoots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("armophous_vendusii"); + resourceRoot.setResourceClass("Amorphous Gemstone"); + resourceRoot.setResourceType("Vendusii"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_MINERAL); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_INORGANIC_MINERALS); + //Vendusii Armophous Gemstone: ER 616 - 744, CR 770 - 930, DR 770 - 930, HR 908 - 972, MA 462 - 558, SR 770 - 930, UT 770 - 930 + minCapArray = new short[]{(short)770,(short)0,(short)770,(short)908,(short)462,(short)770,(short)770,(short)616,(short)0,(short)1 ,(short)0}; + maxCapArray = new short[]{(short)930,(short)1,(short)930,(short)972,(short)558,(short)930,(short)930,(short)744,(short)1,(short)1000,(short)1}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(75, resourceRoot); + amorphousGemstoneRoots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("armophous_baltaran"); + resourceRoot.setResourceClass("Amorphous Gemstone"); + resourceRoot.setResourceType("Baltaran"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_MINERAL); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_INORGANIC_MINERALS); + //Bal'ta'ran Armophous Gemstone: ER 696 - 800, CR 870 - 1000, DR 870 - 1000, HR 948 - 1000, MA 522 - 600, SR 870 - 1000, UT 870 - 1000 + minCapArray = new short[]{(short)870 ,(short)0,(short)870 ,(short)948 ,(short)522,(short)870 ,(short)870 ,(short)696,(short)0,(short)1 ,(short)0}; + maxCapArray = new short[]{(short)1000,(short)1,(short)1000,(short)1000,(short)600,(short)1000,(short)1000,(short)800,(short)1,(short)1000,(short)1}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(76, resourceRoot); + amorphousGemstoneRoots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("crystalline_byrothsis"); + resourceRoot.setResourceClass("Crystalline Gemstone"); + resourceRoot.setResourceType("Byrothsis"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_MINERAL); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_INORGANIC_MINERALS); + //"Cold Res","Cond","Decay Res","Heat Res","Malle","Shock Res","Unit Tough","Entangle Res","Pot E","OQ","Flavor" + //Byrothsis Crystalline Gemstone: ER 500 - 581, CR 1 - 163, DR 1 - 163, HR 700 - 749, MA 1 - 66, SR 300 - 414, UT 300 - 414 + minCapArray = new short[]{(short)1 ,(short)0,(short)1 ,(short)700 ,(short)1 ,(short)300,(short)300,(short)500,(short)0,(short)1 ,(short)0}; + maxCapArray = new short[]{(short)163,(short)1,(short)163,(short)749 ,(short)66,(short)414,(short)414,(short)581,(short)1,(short)1000,(short)1}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(77, resourceRoot); + crystallineGemstoneRoots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("crystalline_gallinorian"); + resourceRoot.setResourceClass("Crystalline Gemstone"); + resourceRoot.setResourceType("Gallinorian"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_MINERAL); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_INORGANIC_MINERALS); + //Gallinorian Rainbow Crystalline Gemstone: ER 544 - 644, CR 88 - 288, DR 88 - 288, HR 726 - 786, MA 36 - 116, SR 361 - 501, UT 361 - 501 + minCapArray = new short[]{(short)88 ,(short)0,(short)88 ,(short)726 ,(short)36 ,(short)361,(short)361,(short)544,(short)0,(short)1 ,(short)0}; + maxCapArray = new short[]{(short)288,(short)1,(short)288,(short)786 ,(short)116,(short)501,(short)501,(short)644,(short)1,(short)1000,(short)1}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(78, resourceRoot); + crystallineGemstoneRoots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("crystalline_green_diamond"); + resourceRoot.setResourceClass("Crystalline Gemstone"); + resourceRoot.setResourceType("Green Diamond"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_MINERAL); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_INORGANIC_MINERALS); + //Green Diamond Crystalline Gemstone: ER 606 - 706, CR 213 - 413, DR 213 - 413, HR 764 - 824, MA 86 - 166, SR 449 - 589, UT 449 - 589 + minCapArray = new short[]{(short)213,(short)0,(short)213,(short)764 ,(short)86 ,(short)449,(short)449,(short)606,(short)0,(short)1 ,(short)0}; + maxCapArray = new short[]{(short)413,(short)1,(short)413,(short)824 ,(short)166,(short)589,(short)589,(short)706,(short)1,(short)1000,(short)1}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(79, resourceRoot); + crystallineGemstoneRoots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("crystalline_laboi_mineral_crystal"); + resourceRoot.setResourceClass("Crystalline Gemstone"); + resourceRoot.setResourceType("Laboi Mineral Crystal"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_MINERAL); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_INORGANIC_MINERALS); + //Laboi Mineral Crystal Crystalline Gemstone: ER 856 - 956, CR 713 - 913, DR 713 - 913, HR 914 - 974, MA 285 - 365, SR 799 - 939, UT 799 - 939 + minCapArray = new short[]{(short)713,(short)0,(short)713,(short)914 ,(short)285,(short)799,(short)799,(short)856,(short)0,(short)1 ,(short)0}; + maxCapArray = new short[]{(short)913,(short)1,(short)913,(short)974 ,(short)365,(short)939,(short)939,(short)956,(short)1,(short)1000,(short)1}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(80, resourceRoot); + crystallineGemstoneRoots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("crystalline_kerol_firegem"); + resourceRoot.setResourceClass("Crystalline Gemstone"); + resourceRoot.setResourceType("Kerol Fire-Gem"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_MINERAL); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_INORGANIC_MINERALS); + //Kerol Fire-Gem Crystalline Gemstone: ER 669 - 769, CR 338 - 538, DR 338 - 538, HR 801 - 861, MA 136 - 215, SR 536 - 676, UT 536 - 676 + minCapArray = new short[]{(short)338,(short)0,(short)338,(short)801 ,(short)136,(short)536,(short)536,(short)669,(short)0,(short)1 ,(short)0}; + maxCapArray = new short[]{(short)538,(short)1,(short)538,(short)861 ,(short)215,(short)676,(short)676,(short)769,(short)1,(short)1000,(short)1}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(81, resourceRoot); + crystallineGemstoneRoots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("crystalline_seafah_jewel"); + resourceRoot.setResourceClass("Crystalline Gemstone"); + resourceRoot.setResourceType("Seafah Jewel"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_MINERAL); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_INORGANIC_MINERALS); + //Seafah Jewel Crystalline Gemstone: ER 731 - 831, CR 463 - 663, DR 463 - 663, HR 839 - 899, MA 186 - 265, SR 624 - 764, UT 624 - 764 + minCapArray = new short[]{(short)463,(short)0,(short)463,(short)839 ,(short)186,(short)624,(short)624,(short)731,(short)0,(short)1 ,(short)0}; + maxCapArray = new short[]{(short)663,(short)1,(short)663,(short)899 ,(short)265,(short)764,(short)764,(short)831,(short)1,(short)1000,(short)1}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(82, resourceRoot); + crystallineGemstoneRoots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("crystalline_sormahil_firegem"); + resourceRoot.setResourceClass("Crystalline Gemstone"); + resourceRoot.setResourceType("Sormahil Fire-Gem"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_MINERAL); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_INORGANIC_MINERALS); + //Sormahil Fire Gem Crystalline Gemstone: ER 794 - 894, CR 588 - 788, DR 588 - 788, HR 876 - 936, MA 235 - 315, SR 711 - 851, UT 711 - 851 + minCapArray = new short[]{(short)588,(short)0,(short)588,(short)876 ,(short)235,(short)711,(short)711,(short)794,(short)0,(short)1 ,(short)0}; + maxCapArray = new short[]{(short)788,(short)1,(short)788,(short)936 ,(short)315,(short)851,(short)851,(short)894,(short)1,(short)1000,(short)1}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(83, resourceRoot); + crystallineGemstoneRoots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("crystalline_laboi_mineral"); + resourceRoot.setResourceClass("Crystalline Gemstone"); + resourceRoot.setResourceType("Laboi mineral"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_MINERAL); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_INORGANIC_MINERALS); + //Laboi Mineral Crystal Crystalline Gemstone: ER 856 - 956, CR 713 - 913, DR 713 - 913, HR 914 - 974, MA 285 - 365, SR 799 - 939, UT 799 - 939 + minCapArray = new short[]{(short)713,(short)0,(short)713,(short)914 ,(short)285,(short)799,(short)799,(short)856,(short)0,(short)1 ,(short)0}; + maxCapArray = new short[]{(short)913,(short)1,(short)913,(short)974 ,(short)365,(short)939,(short)939,(short)956,(short)1,(short)1000,(short)1}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(84, resourceRoot); + crystallineGemstoneRoots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("crystalline_vertex"); + resourceRoot.setResourceClass("Crystalline Gemstone"); + resourceRoot.setResourceType("Vertex"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_MINERAL); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_INORGANIC_MINERALS); + // Vertex Crystalline Gemstone: ER 919 - 1000, CR 838 - 1000, DR 838 - 1000, HR 951 - 1000, MA 335 - 400, SR 886 - 1000, UT 886 - 1000 + minCapArray = new short[]{(short)838 ,(short)0,(short)838 ,(short)951 ,(short)335,(short)886 ,(short)886 ,(short)919 ,(short)0,(short)1 ,(short)0}; + maxCapArray = new short[]{(short)1000,(short)1,(short)1000,(short)1000,(short)400,(short)1000,(short)1000,(short)1000,(short)1,(short)1000,(short)1}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(85, resourceRoot); + crystallineGemstoneRoots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("radioactive_type1"); + resourceRoot.setResourceClass("Radioactive"); + resourceRoot.setResourceType("Class 1"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_MINERAL); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_ENERGY_RADIOACTIVE); + //"Cold Res","Cond","Decay Res","Heat Res","Malle","Shock Res","Unit Tough","Entangle Res","Pot E","OQ","Flavor" + //Class 1 Radioactive: DR 400 - 474, PE 500 - 593 + minCapArray = new short[]{(short)0,(short)0,(short)400,(short)0,(short)0,(short)0,(short)0,(short)0,(short)500,(short)1 ,(short)0}; + maxCapArray = new short[]{(short)1,(short)1,(short)474,(short)1,(short)1,(short)1,(short)1,(short)1,(short)593,(short)1000,(short)1}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(86, resourceRoot); + radioactiveRoots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("radioactive_type2"); + resourceRoot.setResourceClass("Radioactive"); + resourceRoot.setResourceType("Class 2"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_MINERAL); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_ENERGY_RADIOACTIVE); + //Class 2 Radioactive: DR 440 - 531, PE 550 - 664 + minCapArray = new short[]{(short)0,(short)0,(short)400,(short)0,(short)0,(short)0,(short)0,(short)0,(short)550,(short)1 ,(short)0}; + maxCapArray = new short[]{(short)1,(short)1,(short)531,(short)1,(short)1,(short)1,(short)1,(short)1,(short)664,(short)1000,(short)1}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(87, resourceRoot); + radioactiveRoots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("radioactive_type3"); + resourceRoot.setResourceClass("Radioactive"); + resourceRoot.setResourceType("Class 3"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_MINERAL); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_ENERGY_RADIOACTIVE); + //Class 3 Radioactive: DR 497 - 589, PE 621 - 736 + minCapArray = new short[]{(short)0,(short)0,(short)497,(short)0,(short)0,(short)0,(short)0,(short)0,(short)621,(short)1 ,(short)0}; + maxCapArray = new short[]{(short)1,(short)1,(short)589,(short)1,(short)1,(short)1,(short)1,(short)1,(short)736,(short)1000,(short)1}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(88, resourceRoot); + radioactiveRoots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("radioactive_type4"); + resourceRoot.setResourceClass("Radioactive"); + resourceRoot.setResourceType("Class 4"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_MINERAL); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_ENERGY_RADIOACTIVE); + //Class 4 Radioactive: DR 554 - 646, PE 693 - 807 + minCapArray = new short[]{(short)0,(short)0,(short)554,(short)0,(short)0,(short)0,(short)0,(short)0,(short)693,(short)1 ,(short)0}; + maxCapArray = new short[]{(short)1,(short)1,(short)646,(short)1,(short)1,(short)1,(short)1,(short)1,(short)807,(short)1000,(short)1}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(89, resourceRoot); + radioactiveRoots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("radioactive_type5"); + resourceRoot.setResourceClass("Radioactive"); + resourceRoot.setResourceType("Class 5"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_MINERAL); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_ENERGY_RADIOACTIVE); + //Class 5 Radioactive: DR 611 - 703, PE 764 - 879 + minCapArray = new short[]{(short)0,(short)0,(short)611,(short)0,(short)0,(short)0,(short)0,(short)0,(short)764,(short)1 ,(short)0}; + maxCapArray = new short[]{(short)1,(short)1,(short)703,(short)1,(short)1,(short)1,(short)1,(short)1,(short)879,(short)1000,(short)1}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(90, resourceRoot); + radioactiveRoots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("radioactive_type6"); + resourceRoot.setResourceClass("Radioactive"); + resourceRoot.setResourceType("Class 6"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_MINERAL); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_ENERGY_RADIOACTIVE); + //Class 6 Radioactive: DR 669 - 760, PE 836 - 950 + minCapArray = new short[]{(short)0,(short)0,(short)669,(short)0,(short)0,(short)0,(short)0,(short)0,(short)836,(short)1 ,(short)0}; + maxCapArray = new short[]{(short)1,(short)1,(short)760,(short)1,(short)1,(short)1,(short)1,(short)1,(short)950,(short)1000,(short)1}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(91, resourceRoot); + radioactiveRoots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("radioactive_type7"); + resourceRoot.setResourceClass("Radioactive"); + resourceRoot.setResourceType("Class 7"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_MINERAL); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_ENERGY_RADIOACTIVE); + //Class 7 Radioactive: DR 726 - 800, PE 907 - 1000 + minCapArray = new short[]{(short)0,(short)0,(short)726,(short)0,(short)0,(short)0,(short)0,(short)0,(short)907 ,(short)1 ,(short)0}; + maxCapArray = new short[]{(short)1,(short)1,(short)800,(short)1,(short)1,(short)1,(short)1,(short)1,(short)1000,(short)1000,(short)1}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(92, resourceRoot); + radioactiveRoots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("metal_ferrous_unknown"); + resourceRoot.setResourceClass("Ferrous Metal"); + resourceRoot.setResourceType("Unknown"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_MINERAL); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_INORGANIC_MINERALS); + //Unknown Ferrous: CR 1 - 800, CD 1 - 600, DR 300 - 1000, HR 300 - 1000, MA 1 - 600, SR 400 - 1000, UT 400 - 1000 + minCapArray = new short[]{(short)1 ,(short)1 ,(short)300 ,(short)300 ,(short)1 ,(short)400 ,(short)400 ,(short)0,(short)0,(short)1 ,(short)0}; + maxCapArray = new short[]{(short)800,(short)650,(short)1000,(short)1000,(short)600,(short)1000,(short)1000,(short)1,(short)1,(short)1000,(short)1}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(93, resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("metal_nonferrous_unknown"); + resourceRoot.setResourceClass("Non-Ferrous"); + resourceRoot.setResourceType("Unknown"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_MINERAL); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_INORGANIC_MINERALS); + //Unknown Non-Ferrous: CR 1 - 800, CD 300 - 1000, DR 1 - 700, HR 200 - 800, MA 300 - 1000, SR 300 - 900, UT 300 - 1000 + minCapArray = new short[]{(short)1 ,(short)300 ,(short)1 ,(short)200,(short)300 ,(short)300,(short)300 ,(short)0,(short)0,(short)1 ,(short)0}; + maxCapArray = new short[]{(short)800,(short)1000,(short)700,(short)800,(short)1000,(short)900,(short)1000,(short)1,(short)1,(short)1000,(short)1}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(94, resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("ore_sedimentary_unknown"); + resourceRoot.setResourceClass("Sedimentary Ore"); + resourceRoot.setResourceType("Unknown"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_MINERAL); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_INORGANIC_MINERALS); + //"Cold Res","Cond","Decay Res","Heat Res","Malle","Shock Res","Unit Tough","Entangle Res","Pot E","OQ","Flavor" + //Unknown Sedimentary Ore: CR 300 - 1000, DR 1 - 700, HR 300 - 1000, MA 300 - 1000, SR 1 - 700 + minCapArray = new short[]{(short)300 ,(short)0,(short)1 ,(short)300 ,(short)300 ,(short)1 ,(short)1 ,(short)0,(short)0,(short)1 ,(short)0}; + maxCapArray = new short[]{(short)1000,(short)1,(short)700,(short)1000,(short)1000,(short)700,(short)1000,(short)1,(short)1,(short)1000,(short)1}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(95, resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("ore_igneous_unknown"); + resourceRoot.setResourceClass("Igneous Ore"); + resourceRoot.setResourceType("Unknown"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_MINERAL); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_INORGANIC_MINERALS); + //Unknown Igneous Ore: CR 200 - 1000, DR 300 - 1000, HR 400 - 1000, MA 1 - 800, SR 400 - 1000, UT 400 - 1000 + minCapArray = new short[]{(short)200 ,(short)0,(short)300 ,(short)400 ,(short)1 ,(short)400 ,(short)400 ,(short)0,(short)0,(short)1 ,(short)0}; + maxCapArray = new short[]{(short)1000,(short)1,(short)1000,(short)1000,(short)800,(short)1000,(short)1000,(short)1,(short)1,(short)1000,(short)1}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(96, resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("gemstone_unknown"); + resourceRoot.setResourceClass("Gemstone"); + resourceRoot.setResourceType("Unknown"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_MINERAL); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_INORGANIC_MINERALS); + //Unknown Gemstone: HR 600 - 1000, MA 1 - 600 + minCapArray = new short[]{(short)1 ,(short)0,(short)1 ,(short)600 ,(short)1 ,(short)1 ,(short)1 ,(short)1 ,(short)0,(short)1 ,(short)0}; + maxCapArray = new short[]{(short)1000,(short)1,(short)1000,(short)1000,(short)600,(short)1000,(short)1000,(short)1000,(short)1,(short)1000,(short)1}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(97, resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("radioactive_unknown"); + resourceRoot.setResourceClass("Radioactive"); + resourceRoot.setResourceType("Unknown"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_MINERAL); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_ENERGY_RADIOACTIVE); + //"Cold Res","Cond","Decay Res","Heat Res","Malle","Shock Res","Unit Tough","Entangle Res","Pot E","OQ","Flavor" + // Unknown Radioactive: DR 1 - 800 + minCapArray = new short[]{(short)0,(short)0,(short)1 ,(short)0,(short)0,(short)0,(short)0,(short)0,(short)1 ,(short)1 ,(short)0}; + maxCapArray = new short[]{(short)1,(short)1,(short)800,(short)1,(short)1,(short)1,(short)1,(short)1,(short)1000,(short)1000,(short)1}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(98, resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("petrochem_fuel_solid_type1"); + resourceRoot.setResourceClass("Petro Fuel"); + resourceRoot.setResourceType("Class 1 Solid"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_CHEMICAL); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_INORGANIC_CHEMICALS); + //Class 1 Solid Petrochemical: DR 1 - 149, PE 300 - 430 + minCapArray = new short[]{(short)0,(short)0,(short)1 ,(short)0,(short)0,(short)0,(short)0,(short)0,(short)300,(short)1 ,(short)0}; + maxCapArray = new short[]{(short)1,(short)1,(short)149,(short)1,(short)1,(short)1,(short)1,(short)1,(short)430,(short)1000,(short)1}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(99, resourceRoot); + petrochemicalSolidRoots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("petrochem_fuel_solid_type2"); + resourceRoot.setResourceClass("Petro Fuel"); + resourceRoot.setResourceType("Class 2 Solid"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_CHEMICAL); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_INORGANIC_CHEMICALS); + //Class 2 Solid Petrochemical: DR 81 - 264, PE 370 - 530 + minCapArray = new short[]{(short)0,(short)0,(short)81 ,(short)0,(short)0,(short)0,(short)0,(short)0,(short)370,(short)1 ,(short)0}; + maxCapArray = new short[]{(short)1,(short)1,(short)264,(short)1,(short)1,(short)1,(short)1,(short)1,(short)530,(short)1000,(short)1}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(100, resourceRoot); + petrochemicalSolidRoots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("petrochem_fuel_solid_type3"); + resourceRoot.setResourceClass("Petro Fuel"); + resourceRoot.setResourceType("Class 3 Solid"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_CHEMICAL); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_INORGANIC_CHEMICALS); + //Class 3 Solid Petrochemical: DR 195 - 378, PE 470 - 630 + minCapArray = new short[]{(short)0,(short)0,(short)195,(short)0,(short)0,(short)0,(short)0,(short)0,(short)470,(short)1 ,(short)0}; + maxCapArray = new short[]{(short)1,(short)1,(short)378,(short)1,(short)1,(short)1,(short)1,(short)1,(short)630,(short)1000,(short)1}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(101, resourceRoot); + petrochemicalSolidRoots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("petrochem_fuel_solid_type4"); + resourceRoot.setResourceClass("Petro Fuel"); + resourceRoot.setResourceType("Class 4 Solid"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_CHEMICAL); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_INORGANIC_CHEMICALS); + //Class 4 Solid Petrochemical: DR 309 - 492, PE 570 - 730 + minCapArray = new short[]{(short)0,(short)0,(short)309,(short)0,(short)0,(short)0,(short)0,(short)0,(short)570,(short)1 ,(short)0}; + maxCapArray = new short[]{(short)1,(short)1,(short)492,(short)1,(short)1,(short)1,(short)1,(short)1,(short)730,(short)1000,(short)1}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(102, resourceRoot); + petrochemicalSolidRoots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("petrochem_fuel_solid_type5"); + resourceRoot.setResourceClass("Petro Fuel"); + resourceRoot.setResourceType("Class 5 Solid"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_CHEMICAL); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_INORGANIC_CHEMICALS); + //Class 5 Solid Petrochemical: DR 423 - 606, PE 670 - 830 + minCapArray = new short[]{(short)0,(short)0,(short)423,(short)0,(short)0,(short)0,(short)0,(short)0,(short)670,(short)1 ,(short)0}; + maxCapArray = new short[]{(short)1,(short)1,(short)606,(short)1,(short)1,(short)1,(short)1,(short)1,(short)830,(short)1000,(short)1}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(103, resourceRoot); + petrochemicalSolidRoots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("petrochem_fuel_solid_type6"); + resourceRoot.setResourceClass("Petro Fuel"); + resourceRoot.setResourceType("Class 6 Solid"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_CHEMICAL); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_INORGANIC_CHEMICALS); + //Class 6 Solid Petrochemical: DR 537 - 720, PE 770 - 930 + minCapArray = new short[]{(short)0,(short)0,(short)537,(short)0,(short)0,(short)0,(short)0,(short)0,(short)770,(short)1 ,(short)0}; + maxCapArray = new short[]{(short)1,(short)1,(short)720,(short)1,(short)1,(short)1,(short)1,(short)1,(short)930,(short)1000,(short)1}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(104, resourceRoot); + petrochemicalSolidRoots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("petrochem_fuel_solid_type7"); + resourceRoot.setResourceClass("Petro Fuel"); + resourceRoot.setResourceType("Class 7 Solid"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_CHEMICAL); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_INORGANIC_CHEMICALS); + //Class 7 Solid Petrochemical: DR 652 - 800, PE 870 - 1000 + minCapArray = new short[]{(short)0,(short)0,(short)652,(short)0,(short)0,(short)0,(short)0,(short)0,(short)870 ,(short)1 ,(short)0}; + maxCapArray = new short[]{(short)1,(short)1,(short)800,(short)1,(short)1,(short)1,(short)1,(short)1,(short)1000,(short)1000,(short)1}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(105, resourceRoot); + petrochemicalSolidRoots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("petrochem_fuel_solid_unknown"); + resourceRoot.setResourceClass("Petro Fuel"); + resourceRoot.setResourceType("Uknown Solid"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_CHEMICAL); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_INORGANIC_CHEMICALS); + // DR,PE,OQ 1-1000 + minCapArray = new short[]{(short)0,(short)0,(short)1 ,(short)0,(short)0,(short)0,(short)0,(short)0,(short)1 ,(short)1 ,(short)0}; + maxCapArray = new short[]{(short)1,(short)1,(short)1000,(short)1,(short)1,(short)1,(short)1,(short)1,(short)1000,(short)1000,(short)1}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(106, resourceRoot); + petrochemicalSolidRoots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("petrochem_fuel_liquid_type1"); + resourceRoot.setResourceClass("Petro Fuel"); + resourceRoot.setResourceType("Class 1 Liquid"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_CHEMICAL); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_INORGANIC_CHEMICALS); + //Class 1 Liquid Petrochemical: DR 1 - 600 + minCapArray = new short[]{(short)0,(short)0,(short)1 ,(short)0,(short)0,(short)0,(short)0,(short)0,(short)1 ,(short)1 ,(short)0}; + maxCapArray = new short[]{(short)1,(short)1,(short)600,(short)1,(short)1,(short)1,(short)1,(short)1,(short)1000,(short)1000,(short)1}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(107, resourceRoot); + petrochemicalLiquidRoots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("petrochem_fuel_liquid_type2"); + resourceRoot.setResourceClass("Petro Fuel"); + resourceRoot.setResourceType("Class 2 Liquid"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_CHEMICAL); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_INORGANIC_CHEMICALS); + minCapArray = new short[]{(short)0,(short)0,(short)1 ,(short)0,(short)0,(short)0,(short)0,(short)0,(short)1 ,(short)1 ,(short)0}; + maxCapArray = new short[]{(short)1,(short)1,(short)600,(short)1,(short)1,(short)1,(short)1,(short)1,(short)1000,(short)1000,(short)1}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(108, resourceRoot); + petrochemicalLiquidRoots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("petrochem_fuel_liquid_type3"); + resourceRoot.setResourceClass("Petro Fuel"); + resourceRoot.setResourceType("Class 3 Liquid"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_CHEMICAL); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_INORGANIC_CHEMICALS); + minCapArray = new short[]{(short)0,(short)0,(short)1 ,(short)0,(short)0,(short)0,(short)0,(short)0,(short)1 ,(short)1 ,(short)0}; + maxCapArray = new short[]{(short)1,(short)1,(short)600,(short)1,(short)1,(short)1,(short)1,(short)1,(short)1000,(short)1000,(short)1}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(109, resourceRoot); + petrochemicalLiquidRoots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("petrochem_fuel_liquid_type4"); + resourceRoot.setResourceClass("Petro Fuel"); + resourceRoot.setResourceType("Class 4 Liquid"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_CHEMICAL); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_INORGANIC_CHEMICALS); + minCapArray = new short[]{(short)0,(short)0,(short)1 ,(short)0,(short)0,(short)0,(short)0,(short)0,(short)1 ,(short)1 ,(short)0}; + maxCapArray = new short[]{(short)1,(short)1,(short)600,(short)1,(short)1,(short)1,(short)1,(short)1,(short)1000,(short)1000,(short)1}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(110, resourceRoot); + petrochemicalLiquidRoots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("petrochem_fuel_liquid_type5"); + resourceRoot.setResourceClass("Petro Fuel"); + resourceRoot.setResourceType("Class 5 Liquid"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_CHEMICAL); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_INORGANIC_CHEMICALS); + minCapArray = new short[]{(short)0,(short)0,(short)1 ,(short)0,(short)0,(short)0,(short)0,(short)0,(short)1 ,(short)1 ,(short)0}; + maxCapArray = new short[]{(short)1,(short)1,(short)600,(short)1,(short)1,(short)1,(short)1,(short)1,(short)1000,(short)1000,(short)1}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(111, resourceRoot); + petrochemicalLiquidRoots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("petrochem_fuel_liquid_type6"); + resourceRoot.setResourceClass("Petro Fuel"); + resourceRoot.setResourceType("Class 6 Liquid"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_CHEMICAL); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_INORGANIC_CHEMICALS); + minCapArray = new short[]{(short)0,(short)0,(short)1 ,(short)0,(short)0,(short)0,(short)0,(short)0,(short)1 ,(short)1 ,(short)0}; + maxCapArray = new short[]{(short)1,(short)1,(short)600,(short)1,(short)1,(short)1,(short)1,(short)1,(short)1000,(short)1000,(short)1}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(112, resourceRoot); + petrochemicalLiquidRoots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("petrochem_fuel_liquid_type7"); + resourceRoot.setResourceClass("Petro Fuel"); + resourceRoot.setResourceType("Class 7 Liquid"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_CHEMICAL); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_INORGANIC_CHEMICALS); + minCapArray = new short[]{(short)0,(short)0,(short)1 ,(short)0,(short)0,(short)0,(short)0,(short)0,(short)1 ,(short)1 ,(short)0}; + maxCapArray = new short[]{(short)1,(short)1,(short)600,(short)1,(short)1,(short)1,(short)1,(short)1,(short)1000,(short)1000,(short)1}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(113, resourceRoot); + petrochemicalLiquidRoots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("petrochem_fuel_liquid_unknown"); + resourceRoot.setResourceClass("Petro Fuel"); + resourceRoot.setResourceType("Unknown Liquid"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_CHEMICAL); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_INORGANIC_CHEMICALS); + minCapArray = new short[]{(short)0,(short)0,(short)1 ,(short)0,(short)0,(short)0,(short)0,(short)0,(short)1 ,(short)1 ,(short)0}; + maxCapArray = new short[]{(short)1,(short)1,(short)1000,(short)1,(short)1,(short)1,(short)1,(short)1,(short)1000,(short)1000,(short)1}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(114, resourceRoot); + petrochemicalLiquidRoots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("petrochem_inert_lubricating_oil"); + resourceRoot.setResourceClass("Oil"); + resourceRoot.setResourceType("Lubricating"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_CHEMICAL); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_INORGANIC_CHEMICALS); + minCapArray = new short[]{(short)0,(short)0,(short)1 ,(short)0,(short)0,(short)0,(short)0,(short)0,(short)0,(short)1 ,(short)0}; + maxCapArray = new short[]{(short)1,(short)1,(short)1000,(short)1,(short)1,(short)1,(short)1,(short)1,(short)1,(short)1000,(short)1}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(115, resourceRoot); + lubricatingOilRoots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("petrochem_inert_polymer"); + resourceRoot.setResourceClass("Polymer"); + resourceRoot.setResourceType("Polymer"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_CHEMICAL); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_INORGANIC_CHEMICALS); + //"Cold Res","Cond","Decay Res","Heat Res","Malle","Shock Res","Unit Tough","Entangle Res","Pot E","OQ","Flavor" + minCapArray = new short[]{(short)0,(short)0,(short)1 ,(short)0,(short)1 ,(short)1 ,(short)1 ,(short)0,(short)0,(short)1 ,(short)0}; + maxCapArray = new short[]{(short)1,(short)1,(short)1000,(short)1,(short)1000,(short)1000,(short)1000,(short)1,(short)1,(short)1000,(short)1}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(116, resourceRoot); + polymerRoots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("gas_inert_hydron3"); + resourceRoot.setResourceClass("Inert Gas"); + resourceRoot.setResourceType("Hydron3"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_GAS); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_INORGANIC_GAS); + //Hydron-3 Inert Gas: DR 1 - 81 + minCapArray = new short[]{(short)0,(short)0,(short)1 ,(short)0,(short)0,(short)0,(short)0,(short)0,(short)0,(short)1 ,(short)0}; + maxCapArray = new short[]{(short)1,(short)1,(short)81,(short)1,(short)1,(short)1,(short)1,(short)1,(short)1,(short)1000,(short)1}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(117, resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("gas_inert_malium"); + resourceRoot.setResourceClass("Inert Gas"); + resourceRoot.setResourceType("Malium"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_GAS); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_INORGANIC_GAS); + //Malium Inert Gas: DR 44 - 142 + minCapArray = new short[]{(short)0,(short)0,(short)44,(short)0,(short)0,(short)0,(short)0,(short)0,(short)0,(short)1 ,(short)0}; + maxCapArray = new short[]{(short)1,(short)1,(short)142,(short)1,(short)1,(short)1,(short)1,(short)1,(short)1,(short)1000,(short)1}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(118, resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("gas_inert_bilal"); + resourceRoot.setResourceClass("Inert Gas"); + resourceRoot.setResourceType("Bilal"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_GAS); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_INORGANIC_GAS); + //Bilal Inert Gas: DR 105 - 204 + minCapArray = new short[]{(short)0,(short)0,(short)105,(short)0,(short)0,(short)0,(short)0,(short)0,(short)0,(short)1 ,(short)0}; + maxCapArray = new short[]{(short)1,(short)1,(short)204,(short)1,(short)1,(short)1,(short)1,(short)1,(short)1,(short)1000,(short)1}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(119, resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("gas_inert_corthel"); + resourceRoot.setResourceClass("Inert Gas"); + resourceRoot.setResourceType("Corthel"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_GAS); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_INORGANIC_GAS); + //Corthel Inert Gas: DR 167 - 265 + minCapArray = new short[]{(short)0,(short)0,(short)167,(short)0,(short)0,(short)0,(short)0,(short)0,(short)0,(short)1 ,(short)0}; + maxCapArray = new short[]{(short)1,(short)1,(short)265,(short)1,(short)1,(short)1,(short)1,(short)1,(short)1,(short)1000,(short)1}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(120, resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("gas_inert_culsion"); + resourceRoot.setResourceClass("Inert Gas"); + resourceRoot.setResourceType("Culsion"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_GAS); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_INORGANIC_GAS); + //Culsion Inert Gas: DR 228 - 327 + minCapArray = new short[]{(short)0,(short)0,(short)228,(short)0,(short)0,(short)0,(short)0,(short)0,(short)0,(short)1 ,(short)0}; + maxCapArray = new short[]{(short)1,(short)1,(short)327,(short)1,(short)1,(short)1,(short)1,(short)1,(short)1,(short)1000,(short)1}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(121, resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("gas_inert_dioxis"); + resourceRoot.setResourceClass("Inert Gas"); + resourceRoot.setResourceType("Dioxis"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_GAS); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_INORGANIC_GAS); + //Dioxis Inert Gas: DR 290 - 388 + minCapArray = new short[]{(short)0,(short)0,(short)290,(short)0,(short)0,(short)0,(short)0,(short)0,(short)0,(short)1 ,(short)0}; + maxCapArray = new short[]{(short)1,(short)1,(short)388,(short)1,(short)1,(short)1,(short)1,(short)1,(short)1,(short)1000,(short)1}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(122, resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("gas_inert_hurlothrombic"); + resourceRoot.setResourceClass("Inert Gas"); + resourceRoot.setResourceType("Hurlothrombic"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_GAS); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_INORGANIC_GAS); + //Hurlothrombic Inert Gas: DR 351 - 450 + minCapArray = new short[]{(short)0,(short)0,(short)351,(short)0,(short)0,(short)0,(short)0,(short)0,(short)0,(short)1 ,(short)0}; + maxCapArray = new short[]{(short)1,(short)1,(short)450,(short)1,(short)1,(short)1,(short)1,(short)1,(short)1,(short)1000,(short)1}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(123, resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("gas_inert_kaylon"); + resourceRoot.setResourceClass("Inert Gas"); + resourceRoot.setResourceType("Kaylon"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_GAS); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_INORGANIC_GAS); + //Kaylon Inert Gas: DR 413 - 511 + minCapArray = new short[]{(short)0,(short)0,(short)413,(short)0,(short)0,(short)0,(short)0,(short)0,(short)0,(short)1 ,(short)0}; + maxCapArray = new short[]{(short)1,(short)1,(short)511,(short)1,(short)1,(short)1,(short)1,(short)1,(short)1,(short)1000,(short)1}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(124, resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("gas_inert_korfaise"); + resourceRoot.setResourceClass("Inert Gas"); + resourceRoot.setResourceType("Korfaise"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_GAS); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_INORGANIC_GAS); + //Korfaise Inert Gas: DR 474 - 573 + minCapArray = new short[]{(short)0,(short)0,(short)474,(short)0,(short)0,(short)0,(short)0,(short)0,(short)0,(short)1 ,(short)0}; + maxCapArray = new short[]{(short)1,(short)1,(short)573,(short)1,(short)1,(short)1,(short)1,(short)1,(short)1,(short)1000,(short)1}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(125, resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("gas_inert_methanagen"); + resourceRoot.setResourceClass("Inert Gas"); + resourceRoot.setResourceType("Methanagen"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_GAS); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_INORGANIC_GAS); + //Methanagen Inert Gas: DR 536 - 634 + minCapArray = new short[]{(short)0,(short)0,(short)536,(short)0,(short)0,(short)0,(short)0,(short)0,(short)0,(short)1 ,(short)0}; + maxCapArray = new short[]{(short)1,(short)1,(short)634,(short)1,(short)1,(short)1,(short)1,(short)1,(short)1,(short)1000,(short)1}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(126, resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("gas_inert_mirth"); + resourceRoot.setResourceClass("Inert Gas"); + resourceRoot.setResourceType("Mirth"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_GAS); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_INORGANIC_GAS); + //Mirth Inert Gas: DR 597 - 696 + minCapArray = new short[]{(short)0,(short)0,(short)597,(short)0,(short)0,(short)0,(short)0,(short)0,(short)0,(short)1 ,(short)0}; + maxCapArray = new short[]{(short)1,(short)1,(short)696,(short)1,(short)1,(short)1,(short)1,(short)1,(short)1,(short)1000,(short)1}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(127, resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("gas_inert_obah"); + resourceRoot.setResourceClass("Inert Gas"); + resourceRoot.setResourceType("Obah"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_GAS); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_INORGANIC_GAS); + //Obah Inert Gas: DR 659 - 757 + minCapArray = new short[]{(short)0,(short)0,(short)659,(short)0,(short)0,(short)0,(short)0,(short)0,(short)0,(short)1 ,(short)0}; + maxCapArray = new short[]{(short)1,(short)1,(short)757,(short)1,(short)1,(short)1,(short)1,(short)1,(short)1,(short)1000,(short)1}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(128, resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("gas_inert_rethin"); + resourceRoot.setResourceClass("Inert Gas"); + resourceRoot.setResourceType("Rethin"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_GAS); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_INORGANIC_GAS); + //Rethin Inert Gas: DR 720 - 800 + minCapArray = new short[]{(short)0,(short)0,(short)720,(short)0,(short)0,(short)0,(short)0,(short)0,(short)0,(short)1 ,(short)0}; + maxCapArray = new short[]{(short)1,(short)1,(short)800,(short)1,(short)1,(short)1,(short)1,(short)1,(short)1,(short)1000,(short)1}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(129, resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("gas_inert_unknown"); + resourceRoot.setResourceClass("Inert Gas"); + resourceRoot.setResourceType("Unknown"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_GAS); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_INORGANIC_GAS); + minCapArray = new short[]{(short)0,(short)0,(short)1 ,(short)0,(short)0,(short)0,(short)0,(short)0,(short)0,(short)1 ,(short)0}; + maxCapArray = new short[]{(short)1,(short)1,(short)1000,(short)1,(short)1,(short)1,(short)1,(short)1,(short)1,(short)1000,(short)1}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(130, resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("gas_reactive_eleton"); + resourceRoot.setResourceClass("Reactive Gas"); + resourceRoot.setResourceType("Eleton"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_GAS); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_INORGANIC_GAS); + //Eleton Reactive Gas: DR 1? - 400? + minCapArray = new short[]{(short)0,(short)0,(short)1 ,(short)0,(short)0,(short)0,(short)0,(short)0,(short)0,(short)1 ,(short)0}; + maxCapArray = new short[]{(short)1,(short)1,(short)400,(short)1,(short)1,(short)1,(short)1,(short)1,(short)1,(short)1000,(short)1}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(131, resourceRoot); + reactiveGasRoots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("gas_reactive_irolunn"); + resourceRoot.setResourceClass("Reactive Gas"); + resourceRoot.setResourceType("Irolunn"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_GAS); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_INORGANIC_GAS); + //Irolunn Reactive Gas: DR 100? - 600? + minCapArray = new short[]{(short)0,(short)0,(short)100,(short)0,(short)0,(short)0,(short)0,(short)0,(short)0,(short)1 ,(short)0}; + maxCapArray = new short[]{(short)1,(short)1,(short)600,(short)1,(short)1,(short)1,(short)1,(short)1,(short)1,(short)1000,(short)1}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(132, resourceRoot); + reactiveGasRoots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("gas_reactive_methane"); + resourceRoot.setResourceClass("Reactive Gas"); + resourceRoot.setResourceType("Methane"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_GAS); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_INORGANIC_GAS); + //Methane Reactive Gas: DR 200? - 700? + minCapArray = new short[]{(short)0,(short)0,(short)200,(short)0,(short)0,(short)0,(short)0,(short)0,(short)0,(short)1 ,(short)0}; + maxCapArray = new short[]{(short)1,(short)1,(short)700,(short)1,(short)1,(short)1,(short)1,(short)1,(short)1,(short)1000,(short)1}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(133, resourceRoot); + reactiveGasRoots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("gas_reactive_orveth"); + resourceRoot.setResourceClass("Reactive Gas"); + resourceRoot.setResourceType("Orveth"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_GAS); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_INORGANIC_GAS); + //Orveth Reactive Gas: DR 300? - 800? + minCapArray = new short[]{(short)0,(short)0,(short)300,(short)0,(short)0,(short)0,(short)0,(short)0,(short)0,(short)1 ,(short)0}; + maxCapArray = new short[]{(short)1,(short)1,(short)800,(short)1,(short)1,(short)1,(short)1,(short)1,(short)1,(short)1000,(short)1}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(134, resourceRoot); + reactiveGasRoots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("gas_reactive_sig"); + resourceRoot.setResourceClass("Reactive Gas"); + resourceRoot.setResourceType("Sig"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_GAS); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_INORGANIC_GAS); + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + //Sig Reactive Gas: DR 300? - 900? + minCapArray = new short[]{(short)0,(short)0,(short)300,(short)0,(short)0,(short)0,(short)0,(short)0,(short)0,(short)1 ,(short)0}; + maxCapArray = new short[]{(short)1,(short)1,(short)900,(short)1,(short)1,(short)1,(short)1,(short)1,(short)1,(short)1000,(short)1}; + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(135, resourceRoot); + reactiveGasRoots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("gas_reactive_skevon"); + resourceRoot.setResourceClass("Reactive Gas"); + resourceRoot.setResourceType("Skevon"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_GAS); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_INORGANIC_GAS); + //Skevon Reactive Gas: DR 400? - 900? + minCapArray = new short[]{(short)0,(short)0,(short)400,(short)0,(short)0,(short)0,(short)0,(short)0,(short)0,(short)1 ,(short)0}; + maxCapArray = new short[]{(short)1,(short)1,(short)900,(short)1,(short)1,(short)1,(short)1,(short)1,(short)1,(short)1000,(short)1}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(136, resourceRoot); + reactiveGasRoots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("gas_reactive_tolium"); + resourceRoot.setResourceClass("Reactive Gas"); + resourceRoot.setResourceType("Tolium"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_GAS); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_INORGANIC_GAS); + //Tolium Reactive Gas: DR 500? - 1000? + minCapArray = new short[]{(short)0,(short)0,(short)500 ,(short)0,(short)0,(short)0,(short)0,(short)0,(short)0,(short)1 ,(short)0}; + maxCapArray = new short[]{(short)1,(short)1,(short)1000,(short)1,(short)1,(short)1,(short)1,(short)1,(short)1,(short)1000,(short)1}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(137, resourceRoot); + reactiveGasRoots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("gas_reactive_unknown"); + resourceRoot.setResourceClass("Reactive Gas"); + resourceRoot.setResourceType("Unknown"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_GAS); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_INORGANIC_GAS); + minCapArray = new short[]{(short)0,(short)0,(short)1 ,(short)0,(short)0,(short)0,(short)0,(short)0,(short)0,(short)1 ,(short)0}; + maxCapArray = new short[]{(short)1,(short)1,(short)1000,(short)1,(short)1,(short)1,(short)1,(short)1,(short)1,(short)1000,(short)1}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(138, resourceRoot); + reactiveGasRoots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("water_vapor_corellia"); + resourceRoot.setResourceClass("Water Vapor"); + resourceRoot.setResourceType("Corellian"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_GAS); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_INORGANIC_WATER); + minCapArray = new short[]{(short)0,(short)0,(short)1 ,(short)0,(short)0,(short)0,(short)0,(short)0,(short)0,(short)600 ,(short)0}; + maxCapArray = new short[]{(short)1,(short)1,(short)1000,(short)1,(short)1,(short)1,(short)1,(short)1,(short)1,(short)1000,(short)1}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(139, resourceRoot); + corelliaPool4Roots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("water_vapor_dantooine"); + resourceRoot.setResourceClass("Water Vapor"); + resourceRoot.setResourceType("Dantooine"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_WATER); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_INORGANIC_WATER); + minCapArray = new short[]{(short)0,(short)0,(short)1 ,(short)0,(short)0,(short)0,(short)0,(short)0,(short)0,(short)600 ,(short)0}; + maxCapArray = new short[]{(short)1,(short)1,(short)1000,(short)1,(short)1,(short)1,(short)1,(short)1,(short)1,(short)1000,(short)1}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(140, resourceRoot); + dantooinePool4Roots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("water_vapor_dathomir"); + resourceRoot.setResourceClass("Water Vapor"); + resourceRoot.setResourceType("Dathomir"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_WATER); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_INORGANIC_WATER); + minCapArray = new short[]{(short)0,(short)0,(short)1 ,(short)0,(short)0,(short)0,(short)0,(short)0,(short)0,(short)600 ,(short)0}; + maxCapArray = new short[]{(short)1,(short)1,(short)1000,(short)1,(short)1,(short)1,(short)1,(short)1,(short)1,(short)1000,(short)1}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(141, resourceRoot); + dathomirPool4Roots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("water_vapor_endor"); + resourceRoot.setResourceClass("Water Vapor"); + resourceRoot.setResourceType("Endorian"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_WATER); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_INORGANIC_WATER); + minCapArray = new short[]{(short)0,(short)0,(short)1 ,(short)0,(short)0,(short)0,(short)0,(short)0,(short)0,(short)600 ,(short)0}; + maxCapArray = new short[]{(short)1,(short)1,(short)1000,(short)1,(short)1,(short)1,(short)1,(short)1,(short)1,(short)1000,(short)1}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(142, resourceRoot); + endorPool4Roots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("water_vapor_lok"); + resourceRoot.setResourceClass("Water Vapor"); + resourceRoot.setResourceType("Lokian"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_WATER); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_INORGANIC_WATER); + minCapArray = new short[]{(short)0,(short)0,(short)1 ,(short)0,(short)0,(short)0,(short)0,(short)0,(short)0,(short)600 ,(short)0}; + maxCapArray = new short[]{(short)1,(short)1,(short)1000,(short)1,(short)1,(short)1,(short)1,(short)1,(short)1,(short)1000,(short)1}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(143, resourceRoot); + lokPool4Roots.addElement(resourceRoot); + + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("water_vapor_naboo"); + resourceRoot.setResourceClass("Water Vapor"); + resourceRoot.setResourceType("Nabooian"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_WATER); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_INORGANIC_WATER); + minCapArray = new short[]{(short)0,(short)0,(short)1 ,(short)0,(short)0,(short)0,(short)0,(short)0,(short)0,(short)600 ,(short)0}; + maxCapArray = new short[]{(short)1,(short)1,(short)1000,(short)1,(short)1,(short)1,(short)1,(short)1,(short)1,(short)1000,(short)1}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(144, resourceRoot); + nabooPool4Roots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("water_vapor_rori"); + resourceRoot.setResourceClass("Water Vapor"); + resourceRoot.setResourceType("Rori"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_WATER); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_INORGANIC_WATER); + minCapArray = new short[]{(short)0,(short)0,(short)1 ,(short)0,(short)0,(short)0,(short)0,(short)0,(short)0,(short)600 ,(short)0}; + maxCapArray = new short[]{(short)1,(short)1,(short)1000,(short)1,(short)1,(short)1,(short)1,(short)1,(short)1,(short)1000,(short)1}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(145, resourceRoot); + roriPool4Roots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("water_vapor_talus"); + resourceRoot.setResourceClass("Water Vapor"); + resourceRoot.setResourceType("Talusian"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_WATER); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_INORGANIC_WATER); + minCapArray = new short[]{(short)0,(short)0,(short)1 ,(short)0,(short)0,(short)0,(short)0,(short)0,(short)0,(short)600 ,(short)0}; + maxCapArray = new short[]{(short)1,(short)1,(short)1000,(short)1,(short)1,(short)1,(short)1,(short)1,(short)1,(short)1000,(short)1}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(146, resourceRoot); + talusPool4Roots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("water_vapor_tatooine"); + resourceRoot.setResourceClass("Water Vapor"); + resourceRoot.setResourceType("Tatooinian"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_WATER); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_INORGANIC_WATER); + minCapArray = new short[]{(short)0,(short)0,(short)1 ,(short)0,(short)0,(short)0,(short)0,(short)0,(short)0,(short)600 ,(short)0}; + maxCapArray = new short[]{(short)1,(short)1,(short)1000,(short)1,(short)1,(short)1,(short)1,(short)1,(short)1,(short)1000,(short)1}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(147, resourceRoot); + tattoinePool4Roots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("water_vapor_yavin4"); + resourceRoot.setResourceClass("Water Vapor"); + resourceRoot.setResourceType("Yavinian"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_WATER); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_INORGANIC_WATER); + minCapArray = new short[]{(short)0,(short)0,(short)1 ,(short)0,(short)0,(short)0,(short)0,(short)0,(short)0,(short)600 ,(short)0}; + maxCapArray = new short[]{(short)1,(short)1,(short)1000,(short)1,(short)1,(short)1,(short)1,(short)1,(short)1,(short)1000,(short)1}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(148, resourceRoot); + yavinPool4Roots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("energy_renewable_unlimited_wind_corellia"); + resourceRoot.setResourceClass("Wind Renewable Energy"); + resourceRoot.setResourceType("Corellian"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_WIND); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_ENERGY_LIQUID); + minCapArray = new short[]{(short)0,(short)0,(short)0,(short)0,(short)0,(short)0,(short)0,(short)0,(short)1 ,(short)500,(short)0}; + maxCapArray = new short[]{(short)1,(short)1,(short)1,(short)1,(short)1,(short)1,(short)1,(short)1,(short)400,(short)500,(short)1}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(149, resourceRoot); + corelliaPool4Roots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("energy_renewable_unlimited_wind_dantooine"); + resourceRoot.setResourceClass("Wind Renewable Energy"); + resourceRoot.setResourceType("Dantooine"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_WIND); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_ENERGY_LIQUID); + minCapArray = new short[]{(short)0,(short)0,(short)0,(short)0,(short)0,(short)0,(short)0,(short)0,(short)1 ,(short)500,(short)0}; + maxCapArray = new short[]{(short)1,(short)1,(short)1,(short)1,(short)1,(short)1,(short)1,(short)1,(short)400,(short)500,(short)1}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(150, resourceRoot); + dantooinePool4Roots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("energy_renewable_unlimited_wind_dathomir"); + resourceRoot.setResourceClass("Wind Renewable Energy"); + resourceRoot.setResourceType("Dathomir"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_WIND); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_ENERGY_LIQUID); + minCapArray = new short[]{(short)0,(short)0,(short)0,(short)0,(short)0,(short)0,(short)0,(short)0,(short)1 ,(short)500,(short)0}; + maxCapArray = new short[]{(short)1,(short)1,(short)1,(short)1,(short)1,(short)1,(short)1,(short)1,(short)400,(short)500,(short)1}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(151, resourceRoot); + dathomirPool4Roots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("energy_renewable_unlimited_wind_endor"); + resourceRoot.setResourceClass("Wind Renewable Energy"); + resourceRoot.setResourceType("Endorian"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_WIND); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_ENERGY_LIQUID); + minCapArray = new short[]{(short)0,(short)0,(short)0,(short)0,(short)0,(short)0,(short)0,(short)0,(short)1 ,(short)500,(short)0}; + maxCapArray = new short[]{(short)1,(short)1,(short)1,(short)1,(short)1,(short)1,(short)1,(short)1,(short)400,(short)500,(short)1}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(152, resourceRoot); + endorPool4Roots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("energy_renewable_unlimited_wind_lok"); + resourceRoot.setResourceClass("Wind Renewable Energy"); + resourceRoot.setResourceType("Lokian"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_WIND); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_ENERGY_LIQUID); + minCapArray = new short[]{(short)0,(short)0,(short)0,(short)0,(short)0,(short)0,(short)0,(short)0,(short)1 ,(short)500,(short)0}; + maxCapArray = new short[]{(short)1,(short)1,(short)1,(short)1,(short)1,(short)1,(short)1,(short)1,(short)400,(short)500,(short)1}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(153, resourceRoot); + lokPool4Roots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("energy_renewable_unlimited_wind_naboo"); + resourceRoot.setResourceClass("Wind Renewable Energy"); + resourceRoot.setResourceType("Nabooian"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_WIND); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_ENERGY_LIQUID); + minCapArray = new short[]{(short)0,(short)0,(short)0,(short)0,(short)0,(short)0,(short)0,(short)0,(short)1 ,(short)500,(short)0}; + maxCapArray = new short[]{(short)1,(short)1,(short)1,(short)1,(short)1,(short)1,(short)1,(short)1,(short)400,(short)500,(short)1}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(154, resourceRoot); + nabooPool4Roots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("energy_renewable_unlimited_wind_rori"); + resourceRoot.setResourceClass("Wind Renewable Energy"); + resourceRoot.setResourceType("Rori"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_WIND); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_ENERGY_LIQUID); + minCapArray = new short[]{(short)0,(short)0,(short)0,(short)0,(short)0,(short)0,(short)0,(short)0,(short)1 ,(short)500,(short)0}; + maxCapArray = new short[]{(short)1,(short)1,(short)1,(short)1,(short)1,(short)1,(short)1,(short)1,(short)400,(short)500,(short)1}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(155, resourceRoot); + roriPool4Roots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("energy_renewable_unlimited_wind_talus"); + resourceRoot.setResourceClass("Wind Renewable Energy"); + resourceRoot.setResourceType("Talusian"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_WIND); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_ENERGY_LIQUID); + minCapArray = new short[]{(short)0,(short)0,(short)0,(short)0,(short)0,(short)0,(short)0,(short)0,(short)1 ,(short)500,(short)0}; + maxCapArray = new short[]{(short)1,(short)1,(short)1,(short)1,(short)1,(short)1,(short)1,(short)1,(short)400,(short)500,(short)1}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(156, resourceRoot); + talusPool4Roots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("energy_renewable_unlimited_wind_tatooine"); + resourceRoot.setResourceClass("Wind Renewable Energy"); + resourceRoot.setResourceType("Tatooinian"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_WIND); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_ENERGY_LIQUID); + minCapArray = new short[]{(short)0,(short)0,(short)0,(short)0,(short)0,(short)0,(short)0,(short)0,(short)1 ,(short)500,(short)0}; + maxCapArray = new short[]{(short)1,(short)1,(short)1,(short)1,(short)1,(short)1,(short)1,(short)1,(short)400,(short)500,(short)1}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(157, resourceRoot); + tattoinePool4Roots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("energy_renewable_unlimited_wind_yavin4"); + resourceRoot.setResourceClass("Wind Renewable Energy"); + resourceRoot.setResourceType("Yavinian"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_WIND); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_ENERGY_LIQUID); + minCapArray = new short[]{(short)0,(short)0,(short)0,(short)0,(short)0,(short)0,(short)0,(short)0,(short)1 ,(short)500,(short)0}; + maxCapArray = new short[]{(short)1,(short)1,(short)1,(short)1,(short)1,(short)1,(short)1,(short)1,(short)400,(short)500,(short)1}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(158, resourceRoot); + yavinPool4Roots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("energy_renewable_unlimited_solar_corellia"); + resourceRoot.setResourceClass("Solar Renewable Energy"); + resourceRoot.setResourceType("Corellian"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_SOLAR); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_ENERGY_LIQUID); + minCapArray = new short[]{(short)0,(short)0,(short)0,(short)0,(short)0,(short)0,(short)0,(short)0,(short)200,(short)500,(short)0}; + maxCapArray = new short[]{(short)1,(short)1,(short)1,(short)1,(short)1,(short)1,(short)1,(short)1,(short)600,(short)500,(short)1}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(159, resourceRoot); + corelliaPool4Roots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("energy_renewable_unlimited_solar_dantooine"); + resourceRoot.setResourceClass("Solar Renewable Energy"); + resourceRoot.setResourceType("Dantoine"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_SOLAR); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_ENERGY_LIQUID); + minCapArray = new short[]{(short)0,(short)0,(short)0,(short)0,(short)0,(short)0,(short)0,(short)0,(short)200,(short)500,(short)0}; + maxCapArray = new short[]{(short)1,(short)1,(short)1,(short)1,(short)1,(short)1,(short)1,(short)1,(short)600,(short)500,(short)1}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(160, resourceRoot); + dantooinePool4Roots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("energy_renewable_unlimited_solar_dathomir"); + resourceRoot.setResourceClass("Solar Renewable Energy"); + resourceRoot.setResourceType("Dathomirian"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_SOLAR); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_ENERGY_LIQUID); + minCapArray = new short[]{(short)0,(short)0,(short)0,(short)0,(short)0,(short)0,(short)0,(short)0,(short)200,(short)500,(short)0}; + maxCapArray = new short[]{(short)1,(short)1,(short)1,(short)1,(short)1,(short)1,(short)1,(short)1,(short)600,(short)500,(short)1}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(161, resourceRoot); + dathomirPool4Roots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("energy_renewable_unlimited_solar_endor"); + resourceRoot.setResourceClass("Solar Renewable Energy"); + resourceRoot.setResourceType("Endorian"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_SOLAR); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_ENERGY_LIQUID); + minCapArray = new short[]{(short)0,(short)0,(short)0,(short)0,(short)0,(short)0,(short)0,(short)0,(short)200,(short)500,(short)0}; + maxCapArray = new short[]{(short)1,(short)1,(short)1,(short)1,(short)1,(short)1,(short)1,(short)1,(short)600,(short)500,(short)1}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(162, resourceRoot); + endorPool4Roots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("energy_renewable_unlimited_solar_lok"); + resourceRoot.setResourceClass("Solar Renewable Energy"); + resourceRoot.setResourceType("Lokian"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_SOLAR); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_ENERGY_LIQUID); + minCapArray = new short[]{(short)0,(short)0,(short)0,(short)0,(short)0,(short)0,(short)0,(short)0,(short)200,(short)500,(short)0}; + maxCapArray = new short[]{(short)1,(short)1,(short)1,(short)1,(short)1,(short)1,(short)1,(short)1,(short)600,(short)500,(short)1}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(163, resourceRoot); + lokPool4Roots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("energy_renewable_unlimited_solar_naboo"); + resourceRoot.setResourceClass("Solar Renewable Energy"); + resourceRoot.setResourceType("Nabooian"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_SOLAR); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_ENERGY_LIQUID); + minCapArray = new short[]{(short)0,(short)0,(short)0,(short)0,(short)0,(short)0,(short)0,(short)0,(short)200,(short)500,(short)0}; + maxCapArray = new short[]{(short)1,(short)1,(short)1,(short)1,(short)1,(short)1,(short)1,(short)1,(short)600,(short)500,(short)1}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(164, resourceRoot); + nabooPool4Roots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("energy_renewable_unlimited_solar_rori"); + resourceRoot.setResourceClass("Solar Renewable Energy"); + resourceRoot.setResourceType("Rori"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_SOLAR); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_ENERGY_LIQUID); + minCapArray = new short[]{(short)0,(short)0,(short)0,(short)0,(short)0,(short)0,(short)0,(short)0,(short)200,(short)500,(short)0}; + maxCapArray = new short[]{(short)1,(short)1,(short)1,(short)1,(short)1,(short)1,(short)1,(short)1,(short)600,(short)500,(short)1}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(165, resourceRoot); + roriPool4Roots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("energy_renewable_unlimited_solar_talus"); + resourceRoot.setResourceClass("Solar Renewable Energy"); + resourceRoot.setResourceType("Talusian"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_SOLAR); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_ENERGY_LIQUID); + minCapArray = new short[]{(short)0,(short)0,(short)0,(short)0,(short)0,(short)0,(short)0,(short)0,(short)200,(short)500,(short)0}; + maxCapArray = new short[]{(short)1,(short)1,(short)1,(short)1,(short)1,(short)1,(short)1,(short)1,(short)600,(short)500,(short)1}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(166, resourceRoot); + talusPool4Roots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("energy_renewable_unlimited_solar_tatooine"); + resourceRoot.setResourceClass("Solar Renewable Energy"); + resourceRoot.setResourceType("Tatooinian"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_SOLAR); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_ENERGY_LIQUID); + minCapArray = new short[]{(short)0,(short)0,(short)0,(short)0,(short)0,(short)0,(short)0,(short)0,(short)200,(short)500,(short)0}; + maxCapArray = new short[]{(short)1,(short)1,(short)1,(short)1,(short)1,(short)1,(short)1,(short)1,(short)600,(short)500,(short)1}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(167, resourceRoot); + tattoinePool4Roots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("energy_renewable_unlimited_solar_yavin4"); + resourceRoot.setResourceClass("Solar Renewable Energy"); + resourceRoot.setResourceType("Yavinian"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_SOLAR); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_ENERGY_LIQUID); + minCapArray = new short[]{(short)0,(short)0,(short)0,(short)0,(short)0,(short)0,(short)0,(short)0,(short)200,(short)500,(short)0}; + maxCapArray = new short[]{(short)1,(short)1,(short)1,(short)1,(short)1,(short)1,(short)1,(short)1,(short)600,(short)500,(short)1}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(168, resourceRoot); + yavinPool4Roots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("energy_renewable_site_limited_tidal_corellia"); + resourceRoot.setResourceClass("Tidal Renewable Energy"); + resourceRoot.setResourceType("Corellian"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_TIDAL); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_ENERGY_LIQUID); + // not sure about these + minCapArray = new short[]{(short)0,(short)0,(short)0,(short)0,(short)0,(short)0,(short)0,(short)0,(short)200 ,(short)500 ,(short)0}; + maxCapArray = new short[]{(short)1,(short)1,(short)1,(short)1,(short)1,(short)1,(short)1,(short)1,(short)1000,(short)1000,(short)1}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(169, resourceRoot); + corelliaPool4Roots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("energy_renewable_site_limited_tidal_dantooine"); + resourceRoot.setResourceClass("Tidal Renewable Energy"); + resourceRoot.setResourceType("Dantoine"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_TIDAL); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_ENERGY_LIQUID); + minCapArray = new short[]{(short)0,(short)0,(short)0,(short)0,(short)0,(short)0,(short)0,(short)0,(short)200 ,(short)500 ,(short)0}; + maxCapArray = new short[]{(short)1,(short)1,(short)1,(short)1,(short)1,(short)1,(short)1,(short)1,(short)1000,(short)1000,(short)1}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(170, resourceRoot); + dantooinePool4Roots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("energy_renewable_site_limited_tidal_dathomir"); + resourceRoot.setResourceClass("Tidal Renewable Energy"); + resourceRoot.setResourceType("Dathomirian"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_TIDAL); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_ENERGY_LIQUID); + minCapArray = new short[]{(short)0,(short)0,(short)0,(short)0,(short)0,(short)0,(short)0,(short)0,(short)200 ,(short)500 ,(short)0}; + maxCapArray = new short[]{(short)1,(short)1,(short)1,(short)1,(short)1,(short)1,(short)1,(short)1,(short)1000,(short)1000,(short)1}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(171, resourceRoot); + dathomirPool4Roots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("energy_renewable_site_limited_tidal_endor"); + resourceRoot.setResourceClass("Tidal Renewable Energy"); + resourceRoot.setResourceType("Endorian"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_TIDAL); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_ENERGY_LIQUID); + minCapArray = new short[]{(short)0,(short)0,(short)0,(short)0,(short)0,(short)0,(short)0,(short)0,(short)200 ,(short)500 ,(short)0}; + maxCapArray = new short[]{(short)1,(short)1,(short)1,(short)1,(short)1,(short)1,(short)1,(short)1,(short)1000,(short)1000,(short)1}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(172, resourceRoot); + endorPool4Roots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("energy_renewable_site_limited_tidal_lok"); + resourceRoot.setResourceClass("Tidal Renewable Energy"); + resourceRoot.setResourceType("Lokian"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_TIDAL); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_ENERGY_LIQUID); + minCapArray = new short[]{(short)0,(short)0,(short)0,(short)0,(short)0,(short)0,(short)0,(short)0,(short)200 ,(short)500 ,(short)0}; + maxCapArray = new short[]{(short)1,(short)1,(short)1,(short)1,(short)1,(short)1,(short)1,(short)1,(short)1000,(short)1000,(short)1}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(173, resourceRoot); + lokPool4Roots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("energy_renewable_site_limited_tidal_naboo"); + resourceRoot.setResourceClass("Tidal Renewable Energy"); + resourceRoot.setResourceType("Nabooian"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_TIDAL); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_ENERGY_LIQUID); + minCapArray = new short[]{(short)0,(short)0,(short)0,(short)0,(short)0,(short)0,(short)0,(short)0,(short)200 ,(short)500 ,(short)0}; + maxCapArray = new short[]{(short)1,(short)1,(short)1,(short)1,(short)1,(short)1,(short)1,(short)1,(short)1000,(short)1000,(short)1}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(174, resourceRoot); + nabooPool4Roots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("energy_renewable_site_limited_tidal_rori"); + resourceRoot.setResourceClass("Tidal Renewable Energy"); + resourceRoot.setResourceType("Rori"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_TIDAL); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_ENERGY_LIQUID); + minCapArray = new short[]{(short)0,(short)0,(short)0,(short)0,(short)0,(short)0,(short)0,(short)0,(short)200 ,(short)500 ,(short)0}; + maxCapArray = new short[]{(short)1,(short)1,(short)1,(short)1,(short)1,(short)1,(short)1,(short)1,(short)1000,(short)1000,(short)1}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(175, resourceRoot); + roriPool4Roots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("energy_renewable_site_limited_tidal_talus"); + resourceRoot.setResourceClass("Tidal Renewable Energy"); + resourceRoot.setResourceType("Talusian"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_TIDAL); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_ENERGY_LIQUID); + minCapArray = new short[]{(short)0,(short)0,(short)0,(short)0,(short)0,(short)0,(short)0,(short)0,(short)200 ,(short)500 ,(short)0}; + maxCapArray = new short[]{(short)1,(short)1,(short)1,(short)1,(short)1,(short)1,(short)1,(short)1,(short)1000,(short)1000,(short)1}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(176, resourceRoot); + talusPool4Roots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("energy_renewable_site_limited_tidal_tatooine"); + resourceRoot.setResourceClass("Tidal Renewable Energy"); + resourceRoot.setResourceType("Tatooinian"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_TIDAL); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_ENERGY_LIQUID); + minCapArray = new short[]{(short)0,(short)0,(short)0,(short)0,(short)0,(short)0,(short)0,(short)0,(short)200 ,(short)500 ,(short)0}; + maxCapArray = new short[]{(short)1,(short)1,(short)1,(short)1,(short)1,(short)1,(short)1,(short)1,(short)1000,(short)1000,(short)1}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(177, resourceRoot); + tattoinePool4Roots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("energy_renewable_site_limited_tidal_yavin4"); + resourceRoot.setResourceClass("Tidal Renewable Energy"); + resourceRoot.setResourceType("Yavinian"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_TIDAL); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_ENERGY_LIQUID); + minCapArray = new short[]{(short)0,(short)0,(short)0,(short)0,(short)0,(short)0,(short)0,(short)0,(short)200 ,(short)500 ,(short)0}; + maxCapArray = new short[]{(short)1,(short)1,(short)1,(short)1,(short)1,(short)1,(short)1,(short)1,(short)1000,(short)1000,(short)1}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(178, resourceRoot); + yavinPool4Roots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("energy_renewable_site_limited_hydron3_corellia"); + resourceRoot.setResourceClass("Hydron-3 Renewable Energy"); + resourceRoot.setResourceType("Corellian"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_HYDRON); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_ENERGY_GAS); + minCapArray = new short[]{(short)0,(short)0,(short)0,(short)0,(short)0,(short)0,(short)0,(short)0,(short)200 ,(short)500 ,(short)0}; + maxCapArray = new short[]{(short)1,(short)1,(short)1,(short)1,(short)1,(short)1,(short)1,(short)1,(short)1000,(short)1000,(short)1}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(179, resourceRoot); + corelliaPool4Roots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("energy_renewable_site_limited_hydron3_dantooine"); + resourceRoot.setResourceClass("Hydron-3 Renewable Energy"); + resourceRoot.setResourceType("Dantoine"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_HYDRON); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_ENERGY_GAS); + minCapArray = new short[]{(short)0,(short)0,(short)0,(short)0,(short)0,(short)0,(short)0,(short)0,(short)200 ,(short)500 ,(short)0}; + maxCapArray = new short[]{(short)1,(short)1,(short)1,(short)1,(short)1,(short)1,(short)1,(short)1,(short)1000,(short)1000,(short)1}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(180, resourceRoot); + dantooinePool4Roots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("energy_renewable_site_limited_hydron3_dathomir"); + resourceRoot.setResourceClass("Hydron-3 Renewable Energy"); + resourceRoot.setResourceType("Dathomirian"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_HYDRON); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_ENERGY_GAS); + minCapArray = new short[]{(short)0,(short)0,(short)0,(short)0,(short)0,(short)0,(short)0,(short)0,(short)200 ,(short)500 ,(short)0}; + maxCapArray = new short[]{(short)1,(short)1,(short)1,(short)1,(short)1,(short)1,(short)1,(short)1,(short)1000,(short)1000,(short)1}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(181, resourceRoot); + dathomirPool4Roots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("energy_renewable_site_limited_hydron3_endor"); + resourceRoot.setResourceClass("Hydron-3 Renewable Energy"); + resourceRoot.setResourceType("Endorian"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_HYDRON); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_ENERGY_GAS); + minCapArray = new short[]{(short)0,(short)0,(short)0,(short)0,(short)0,(short)0,(short)0,(short)0,(short)200 ,(short)500 ,(short)0}; + maxCapArray = new short[]{(short)1,(short)1,(short)1,(short)1,(short)1,(short)1,(short)1,(short)1,(short)1000,(short)1000,(short)1}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(182, resourceRoot); + endorPool4Roots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("energy_renewable_site_limited_hydron3_lok"); + resourceRoot.setResourceClass("Hydron-3 Renewable Energy"); + resourceRoot.setResourceType("Lokian"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_HYDRON); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_ENERGY_GAS); + minCapArray = new short[]{(short)0,(short)0,(short)0,(short)0,(short)0,(short)0,(short)0,(short)0,(short)200 ,(short)500 ,(short)0}; + maxCapArray = new short[]{(short)1,(short)1,(short)1,(short)1,(short)1,(short)1,(short)1,(short)1,(short)1000,(short)1000,(short)1}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(183, resourceRoot); + lokPool4Roots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("energy_renewable_site_limited_hydron3_naboo"); + resourceRoot.setResourceClass("Hydron-3 Renewable Energy"); + resourceRoot.setResourceType("Nabooian"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_HYDRON); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_ENERGY_GAS); + minCapArray = new short[]{(short)0,(short)0,(short)0,(short)0,(short)0,(short)0,(short)0,(short)0,(short)200 ,(short)500 ,(short)0}; + maxCapArray = new short[]{(short)1,(short)1,(short)1,(short)1,(short)1,(short)1,(short)1,(short)1,(short)1000,(short)1000,(short)1}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(184, resourceRoot); + nabooPool4Roots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("energy_renewable_site_limited_hydron3_rori"); + resourceRoot.setResourceClass("Hydron-3 Renewable Energy"); + resourceRoot.setResourceType("Rori"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_HYDRON); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_ENERGY_GAS); + minCapArray = new short[]{(short)0,(short)0,(short)0,(short)0,(short)0,(short)0,(short)0,(short)0,(short)200 ,(short)500 ,(short)0}; + maxCapArray = new short[]{(short)1,(short)1,(short)1,(short)1,(short)1,(short)1,(short)1,(short)1,(short)1000,(short)1000,(short)1}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(185, resourceRoot); + roriPool4Roots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("energy_renewable_site_limited_hydron3_talus"); + resourceRoot.setResourceClass("Hydron-3 Renewable Energy"); + resourceRoot.setResourceType("Talusian"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_HYDRON); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_ENERGY_GAS); + minCapArray = new short[]{(short)0,(short)0,(short)0,(short)0,(short)0,(short)0,(short)0,(short)0,(short)200 ,(short)500 ,(short)0}; + maxCapArray = new short[]{(short)1,(short)1,(short)1,(short)1,(short)1,(short)1,(short)1,(short)1,(short)1000,(short)1000,(short)1}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(186, resourceRoot); + talusPool4Roots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("energy_renewable_site_limited_hydron3_tatooine"); + resourceRoot.setResourceClass("Hydron-3 Renewable Energy"); + resourceRoot.setResourceType("Tatooinian"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_HYDRON); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_ENERGY_GAS); + minCapArray = new short[]{(short)0,(short)0,(short)0,(short)0,(short)0,(short)0,(short)0,(short)0,(short)200 ,(short)500 ,(short)0}; + maxCapArray = new short[]{(short)1,(short)1,(short)1,(short)1,(short)1,(short)1,(short)1,(short)1,(short)1000,(short)1000,(short)1}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(187, resourceRoot); + tattoinePool4Roots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("energy_renewable_site_limited_hydron3_yavin4"); + resourceRoot.setResourceClass("Hydron-3 Renewable Energy"); + resourceRoot.setResourceType("Yavinian"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_HYDRON); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_ENERGY_GAS); + minCapArray = new short[]{(short)0,(short)0,(short)0,(short)0,(short)0,(short)0,(short)0,(short)0,(short)200 ,(short)500 ,(short)0}; + maxCapArray = new short[]{(short)1,(short)1,(short)1,(short)1,(short)1,(short)1,(short)1,(short)1,(short)1000,(short)1000,(short)1}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(188, resourceRoot); + yavinPool4Roots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("energy_renewable_site_limited_geothermal_corellia"); + resourceRoot.setResourceClass("Geothermal Renewable Energy"); + resourceRoot.setResourceType("Corellian"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_GEOTHERM); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_ENERGY_LIQUID); + minCapArray = new short[]{(short)0,(short)0,(short)0,(short)0,(short)0,(short)0,(short)0,(short)0,(short)200 ,(short)500 ,(short)0}; + maxCapArray = new short[]{(short)1,(short)1,(short)1,(short)1,(short)1,(short)1,(short)1,(short)1,(short)1000,(short)1000,(short)1}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(189, resourceRoot); + corelliaPool4Roots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("energy_renewable_site_limited_geothermal_dantooine"); + resourceRoot.setResourceClass("Geothermal Renewable Energy"); + resourceRoot.setResourceType("Dantoine"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_GEOTHERM); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_ENERGY_LIQUID); + minCapArray = new short[]{(short)0,(short)0,(short)0,(short)0,(short)0,(short)0,(short)0,(short)0,(short)200 ,(short)500 ,(short)0}; + maxCapArray = new short[]{(short)1,(short)1,(short)1,(short)1,(short)1,(short)1,(short)1,(short)1,(short)1000,(short)1000,(short)1}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(190, resourceRoot); + dantooinePool4Roots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("energy_renewable_site_limited_geothermal_dathomir"); + resourceRoot.setResourceClass("Geothermal Renewable Energy"); + resourceRoot.setResourceType("Dathomirian"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_GEOTHERM); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_ENERGY_LIQUID); + minCapArray = new short[]{(short)0,(short)0,(short)0,(short)0,(short)0,(short)0,(short)0,(short)0,(short)200 ,(short)500 ,(short)0}; + maxCapArray = new short[]{(short)1,(short)1,(short)1,(short)1,(short)1,(short)1,(short)1,(short)1,(short)1000,(short)1000,(short)1}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(191, resourceRoot); + dathomirPool4Roots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("energy_renewable_site_limited_geothermal_endor"); + resourceRoot.setResourceClass("Geothermal Renewable Energy"); + resourceRoot.setResourceType("Endorian"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_GEOTHERM); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_ENERGY_LIQUID); + minCapArray = new short[]{(short)0,(short)0,(short)0,(short)0,(short)0,(short)0,(short)0,(short)0,(short)200 ,(short)500 ,(short)0}; + maxCapArray = new short[]{(short)1,(short)1,(short)1,(short)1,(short)1,(short)1,(short)1,(short)1,(short)1000,(short)1000,(short)1}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(192, resourceRoot); + endorPool4Roots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("energy_renewable_site_limited_geothermal_lok"); + resourceRoot.setResourceClass("Geothermal Renewable Energy"); + resourceRoot.setResourceType("Lokian"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_GEOTHERM); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_ENERGY_LIQUID); + minCapArray = new short[]{(short)0,(short)0,(short)0,(short)0,(short)0,(short)0,(short)0,(short)0,(short)200 ,(short)500 ,(short)0}; + maxCapArray = new short[]{(short)1,(short)1,(short)1,(short)1,(short)1,(short)1,(short)1,(short)1,(short)1000,(short)1000,(short)1}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(193, resourceRoot); + lokPool4Roots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("energy_renewable_site_limited_geothermal_naboo"); + resourceRoot.setResourceClass("Geothermal Renewable Energy"); + resourceRoot.setResourceType("Nabooian"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_GEOTHERM); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_ENERGY_LIQUID); + minCapArray = new short[]{(short)0,(short)0,(short)0,(short)0,(short)0,(short)0,(short)0,(short)0,(short)200 ,(short)500 ,(short)0}; + maxCapArray = new short[]{(short)1,(short)1,(short)1,(short)1,(short)1,(short)1,(short)1,(short)1,(short)1000,(short)1000,(short)1}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(194, resourceRoot); + nabooPool4Roots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("energy_renewable_site_limited_geothermal_rori"); + resourceRoot.setResourceClass("Geothermal Renewable Energy"); + resourceRoot.setResourceType("Rori"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_GEOTHERM); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_ENERGY_LIQUID); + minCapArray = new short[]{(short)0,(short)0,(short)0,(short)0,(short)0,(short)0,(short)0,(short)0,(short)200 ,(short)500 ,(short)0}; + maxCapArray = new short[]{(short)1,(short)1,(short)1,(short)1,(short)1,(short)1,(short)1,(short)1,(short)1000,(short)1000,(short)1}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(195, resourceRoot); + roriPool4Roots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("energy_renewable_site_limited_geothermal_talus"); + resourceRoot.setResourceClass("Geothermal Renewable Energy"); + resourceRoot.setResourceType("Talusian"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_GEOTHERM); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_ENERGY_LIQUID); + minCapArray = new short[]{(short)0,(short)0,(short)0,(short)0,(short)0,(short)0,(short)0,(short)0,(short)200 ,(short)500 ,(short)0}; + maxCapArray = new short[]{(short)1,(short)1,(short)1,(short)1,(short)1,(short)1,(short)1,(short)1,(short)1000,(short)1000,(short)1}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(196, resourceRoot); + talusPool4Roots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("energy_renewable_site_limited_geothermal_tatooine"); + resourceRoot.setResourceClass("Geothermal Renewable Energy"); + resourceRoot.setResourceType("Tatooinian"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_GEOTHERM); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_ENERGY_LIQUID); + minCapArray = new short[]{(short)0,(short)0,(short)0,(short)0,(short)0,(short)0,(short)0,(short)0,(short)200 ,(short)500 ,(short)0}; + maxCapArray = new short[]{(short)1,(short)1,(short)1,(short)1,(short)1,(short)1,(short)1,(short)1,(short)1000,(short)1000,(short)1}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(197, resourceRoot); + tattoinePool4Roots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("energy_renewable_site_limited_geothermal_yavin4"); + resourceRoot.setResourceClass("Geothermal Renewable Energy"); + resourceRoot.setResourceType("Yavinian"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_GEOTHERM); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_ENERGY_LIQUID); + minCapArray = new short[]{(short)0,(short)0,(short)0,(short)0,(short)0,(short)0,(short)0,(short)0,(short)200 ,(short)500 ,(short)0}; + maxCapArray = new short[]{(short)1,(short)1,(short)1,(short)1,(short)1,(short)1,(short)1,(short)1,(short)1000,(short)1000,(short)1}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(198, resourceRoot); + yavinPool4Roots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("softwood_conifer_corellia"); + resourceRoot.setResourceClass("Conifer Wood"); + resourceRoot.setResourceType("Corellian"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_FLORA); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_ORGANIC_FOOD); + //"Cold Res","Cond","Decay Res","Heat Res","Malle","Shock Res","Unit Tough","Entangle Res","Pot E","OQ","Flavor" + //Conifer Wood: DR 1 - 600, MA 600 - 1000, SR 100 - 400, UT 1 - 300 + minCapArray = new short[]{(short)0,(short)0,(short)1 ,(short)0,(short)600 ,(short)100,(short)1 ,(short)0,(short)0,(short)1 ,(short)0}; + maxCapArray = new short[]{(short)1,(short)1,(short)600,(short)1,(short)1000,(short)400,(short)300,(short)1,(short)1,(short)1000,(short)1}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(199, resourceRoot); + corelliaPool4Roots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("softwood_conifer_dantooine"); + resourceRoot.setResourceClass("Conifer Wood"); + resourceRoot.setResourceType("Dantooine"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_FLORA); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_ORGANIC_FOOD); + minCapArray = new short[]{(short)0,(short)0,(short)1 ,(short)0,(short)600 ,(short)100,(short)1 ,(short)0,(short)0,(short)1 ,(short)0}; + maxCapArray = new short[]{(short)1,(short)1,(short)600,(short)1,(short)1000,(short)400,(short)300,(short)1,(short)1,(short)1000,(short)1}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(200, resourceRoot); + dantooinePool4Roots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("softwood_conifer_dathomir"); + resourceRoot.setResourceClass("Conifer Wood"); + resourceRoot.setResourceType("Dathomirian"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_FLORA); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_ORGANIC_FOOD); + minCapArray = new short[]{(short)0,(short)0,(short)1 ,(short)0,(short)600 ,(short)100,(short)1 ,(short)0,(short)0,(short)1 ,(short)0}; + maxCapArray = new short[]{(short)1,(short)1,(short)600,(short)1,(short)1000,(short)400,(short)300,(short)1,(short)1,(short)1000,(short)1}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(201, resourceRoot); + dathomirPool4Roots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("softwood_conifer_endor"); + resourceRoot.setResourceClass("Conifer Wood"); + resourceRoot.setResourceType("Endorian"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_FLORA); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_ORGANIC_FOOD); + minCapArray = new short[]{(short)0,(short)0,(short)1 ,(short)0,(short)600 ,(short)100,(short)1 ,(short)0,(short)0,(short)1 ,(short)0}; + maxCapArray = new short[]{(short)1,(short)1,(short)600,(short)1,(short)1000,(short)400,(short)300,(short)1,(short)1,(short)1000,(short)1}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(202, resourceRoot); + endorPool4Roots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("softwood_conifer_lok"); + resourceRoot.setResourceClass("Conifer Wood"); + resourceRoot.setResourceType("Lokian"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_FLORA); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_ORGANIC_FOOD); + minCapArray = new short[]{(short)0,(short)0,(short)1 ,(short)0,(short)600 ,(short)100,(short)1 ,(short)0,(short)0,(short)1 ,(short)0}; + maxCapArray = new short[]{(short)1,(short)1,(short)600,(short)1,(short)1000,(short)400,(short)300,(short)1,(short)1,(short)1000,(short)1}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(203, resourceRoot); + lokPool4Roots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("softwood_conifer_naboo"); + resourceRoot.setResourceClass("Conifer Wood"); + resourceRoot.setResourceType("Nabooian"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_FLORA); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_ORGANIC_FOOD); + minCapArray = new short[]{(short)0,(short)0,(short)1 ,(short)0,(short)600 ,(short)100,(short)1 ,(short)0,(short)0,(short)1 ,(short)0}; + maxCapArray = new short[]{(short)1,(short)1,(short)600,(short)1,(short)1000,(short)400,(short)300,(short)1,(short)1,(short)1000,(short)1}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(204, resourceRoot); + nabooPool4Roots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("softwood_conifer_rori"); + resourceRoot.setResourceClass("Conifer Wood"); + resourceRoot.setResourceType("Rori"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_FLORA); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_ORGANIC_FOOD); + minCapArray = new short[]{(short)0,(short)0,(short)1 ,(short)0,(short)600 ,(short)100,(short)1 ,(short)0,(short)0,(short)1 ,(short)0}; + maxCapArray = new short[]{(short)1,(short)1,(short)600,(short)1,(short)1000,(short)400,(short)300,(short)1,(short)1,(short)1000,(short)1}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(205, resourceRoot); + roriPool4Roots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("softwood_conifer_talus"); + resourceRoot.setResourceClass("Conifer Wood"); + resourceRoot.setResourceType("Talusian"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_FLORA); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_ORGANIC_FOOD); + minCapArray = new short[]{(short)0,(short)0,(short)1 ,(short)0,(short)600 ,(short)100,(short)1 ,(short)0,(short)0,(short)1 ,(short)0}; + maxCapArray = new short[]{(short)1,(short)1,(short)600,(short)1,(short)1000,(short)400,(short)300,(short)1,(short)1,(short)1000,(short)1}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(206, resourceRoot); + talusPool4Roots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("softwood_conifer_tatooine"); + resourceRoot.setResourceClass("Conifer Wood"); + resourceRoot.setResourceType("Tatooinian"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_FLORA); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_ORGANIC_FOOD); + minCapArray = new short[]{(short)0,(short)0,(short)1 ,(short)0,(short)600 ,(short)100,(short)1 ,(short)0,(short)0,(short)1 ,(short)0}; + maxCapArray = new short[]{(short)1,(short)1,(short)600,(short)1,(short)1000,(short)400,(short)300,(short)1,(short)1,(short)1000,(short)1}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(207, resourceRoot); + tattoinePool4Roots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("softwood_conifer_yavin4"); + resourceRoot.setResourceClass("Conifer Wood"); + resourceRoot.setResourceType("Yavinian"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_FLORA); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_ORGANIC_FOOD); + minCapArray = new short[]{(short)0,(short)0,(short)1 ,(short)0,(short)600 ,(short)100,(short)1 ,(short)0,(short)0,(short)1 ,(short)0}; + maxCapArray = new short[]{(short)1,(short)1,(short)600,(short)1,(short)1000,(short)400,(short)300,(short)1,(short)1,(short)1000,(short)1}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(208, resourceRoot); + yavinPool4Roots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("softwood_evergreen_corellia"); + resourceRoot.setResourceClass("Evergreen Wood"); + resourceRoot.setResourceType("Corellian"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_FLORA); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_ORGANIC_FOOD); + //Evergreen Wood: DR 1 - 500, MA 800 - 1000, SR 1 - 400, UT 1 - 300 + minCapArray = new short[]{(short)0,(short)0,(short)1 ,(short)0,(short)800 ,(short)1 ,(short)1 ,(short)0,(short)0,(short)1 ,(short)0}; + maxCapArray = new short[]{(short)1,(short)1,(short)500,(short)1,(short)1000,(short)400,(short)300,(short)1,(short)1,(short)1000,(short)1}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(209, resourceRoot); + corelliaPool4Roots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("softwood_evergreen_dantooine"); + resourceRoot.setResourceClass("Evergreen Wood"); + resourceRoot.setResourceType("Dantooine"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_FLORA); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_ORGANIC_FOOD); + minCapArray = new short[]{(short)0,(short)0,(short)1 ,(short)0,(short)800 ,(short)1 ,(short)1 ,(short)0,(short)0,(short)1 ,(short)0}; + maxCapArray = new short[]{(short)1,(short)1,(short)500,(short)1,(short)1000,(short)400,(short)300,(short)1,(short)1,(short)1000,(short)1}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(210, resourceRoot); + dantooinePool4Roots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("softwood_evergreen_dathomir"); + resourceRoot.setResourceClass("Evergreen Wood"); + resourceRoot.setResourceType("Dathomirian"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_FLORA); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_ORGANIC_FOOD); + minCapArray = new short[]{(short)0,(short)0,(short)1 ,(short)0,(short)800 ,(short)1 ,(short)1 ,(short)0,(short)0,(short)1 ,(short)0}; + maxCapArray = new short[]{(short)1,(short)1,(short)500,(short)1,(short)1000,(short)400,(short)300,(short)1,(short)1,(short)1000,(short)1}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(211, resourceRoot); + dathomirPool4Roots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("softwood_evergreen_endor"); + resourceRoot.setResourceClass("Evergreen Wood"); + resourceRoot.setResourceType("Endorian"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_FLORA); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_ORGANIC_FOOD); + minCapArray = new short[]{(short)0,(short)0,(short)1 ,(short)0,(short)800 ,(short)1 ,(short)1 ,(short)0,(short)0,(short)1 ,(short)0}; + maxCapArray = new short[]{(short)1,(short)1,(short)500,(short)1,(short)1000,(short)400,(short)300,(short)1,(short)1,(short)1000,(short)1}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(212, resourceRoot); + endorPool4Roots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("softwood_evergreen_lok"); + resourceRoot.setResourceClass("Evergreen Wood"); + resourceRoot.setResourceType("Lokian"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_FLORA); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_ORGANIC_FOOD); + minCapArray = new short[]{(short)0,(short)0,(short)1 ,(short)0,(short)800 ,(short)1 ,(short)1 ,(short)0,(short)0,(short)1 ,(short)0}; + maxCapArray = new short[]{(short)1,(short)1,(short)500,(short)1,(short)1000,(short)400,(short)300,(short)1,(short)1,(short)1000,(short)1}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(213, resourceRoot); + lokPool4Roots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("softwood_evergreen_naboo"); + resourceRoot.setResourceClass("Evergreen Wood"); + resourceRoot.setResourceType("Nabooian"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_FLORA); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_ORGANIC_FOOD); + minCapArray = new short[]{(short)0,(short)0,(short)1 ,(short)0,(short)800 ,(short)1 ,(short)1 ,(short)0,(short)0,(short)1 ,(short)0}; + maxCapArray = new short[]{(short)1,(short)1,(short)500,(short)1,(short)1000,(short)400,(short)300,(short)1,(short)1,(short)1000,(short)1}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(214, resourceRoot); + nabooPool4Roots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("softwood_evergreen_rori"); + resourceRoot.setResourceClass("Evergreen Wood"); + resourceRoot.setResourceType("Rori"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_FLORA); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_ORGANIC_FOOD); + minCapArray = new short[]{(short)0,(short)0,(short)1 ,(short)0,(short)800 ,(short)1 ,(short)1 ,(short)0,(short)0,(short)1 ,(short)0}; + maxCapArray = new short[]{(short)1,(short)1,(short)500,(short)1,(short)1000,(short)400,(short)300,(short)1,(short)1,(short)1000,(short)1}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(215, resourceRoot); + roriPool4Roots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("softwood_evergreen_talus"); + resourceRoot.setResourceClass("Evergreen Wood"); + resourceRoot.setResourceType("Talusian"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_FLORA); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_ORGANIC_FOOD); + minCapArray = new short[]{(short)0,(short)0,(short)1 ,(short)0,(short)800 ,(short)1 ,(short)1 ,(short)0,(short)0,(short)1 ,(short)0}; + maxCapArray = new short[]{(short)1,(short)1,(short)500,(short)1,(short)1000,(short)400,(short)300,(short)1,(short)1,(short)1000,(short)1}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(216, resourceRoot); + talusPool4Roots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("softwood_evergreen_tatooine"); + resourceRoot.setResourceClass("Evergreen Wood"); + resourceRoot.setResourceType("Tatooinian"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_FLORA); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_ORGANIC_FOOD); + minCapArray = new short[]{(short)0,(short)0,(short)1 ,(short)0,(short)800 ,(short)1 ,(short)1 ,(short)0,(short)0,(short)1 ,(short)0}; + maxCapArray = new short[]{(short)1,(short)1,(short)500,(short)1,(short)1000,(short)400,(short)300,(short)1,(short)1,(short)1000,(short)1}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(217, resourceRoot); + tattoinePool4Roots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("softwood_evergreen_yavin4"); + resourceRoot.setResourceClass("Evergreen Wood"); + resourceRoot.setResourceType("Yavinian"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_FLORA); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_ORGANIC_FOOD); + minCapArray = new short[]{(short)0,(short)0,(short)1 ,(short)0,(short)800 ,(short)1 ,(short)1 ,(short)0,(short)0,(short)1 ,(short)0}; + maxCapArray = new short[]{(short)1,(short)1,(short)500,(short)1,(short)1000,(short)400,(short)300,(short)1,(short)1,(short)1000,(short)1}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(218, resourceRoot); + yavinPool4Roots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("wood_deciduous_corellia"); + resourceRoot.setResourceClass("Deciduous Wood"); + resourceRoot.setResourceType("Corellian"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_FLORA); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_ORGANIC_FOOD); + //Decidious Wood: DR 1 - 800, MA 400 - 800, SR 300 - 700, UT 1 - 800 + minCapArray = new short[]{(short)0,(short)0,(short)1 ,(short)0,(short)400 ,(short)300,(short)1 ,(short)0,(short)0,(short)1 ,(short)0}; + maxCapArray = new short[]{(short)1,(short)1,(short)800,(short)1,(short)1000,(short)400,(short)800,(short)1,(short)1,(short)1000,(short)1}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(219, resourceRoot); + corelliaPool4Roots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("wood_deciduous_dantooine"); + resourceRoot.setResourceClass("Deciduous Wood"); + resourceRoot.setResourceType("Dantooine"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_FLORA); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_ORGANIC_FOOD); + minCapArray = new short[]{(short)0,(short)0,(short)1 ,(short)0,(short)400 ,(short)300,(short)1 ,(short)0,(short)0,(short)1 ,(short)0}; + maxCapArray = new short[]{(short)1,(short)1,(short)800,(short)1,(short)1000,(short)400,(short)800,(short)1,(short)1,(short)1000,(short)1}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(220, resourceRoot); + dantooinePool4Roots.addElement(resourceRoot); + + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("wood_deciduous_dathomir"); + resourceRoot.setResourceClass("Deciduous Wood"); + resourceRoot.setResourceType("Dathomirian"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_FLORA); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_ORGANIC_FOOD); + minCapArray = new short[]{(short)0,(short)0,(short)1 ,(short)0,(short)400 ,(short)300,(short)1 ,(short)0,(short)0,(short)1 ,(short)0}; + maxCapArray = new short[]{(short)1,(short)1,(short)800,(short)1,(short)1000,(short)400,(short)800,(short)1,(short)1,(short)1000,(short)1}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(221, resourceRoot); + dathomirPool4Roots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("wood_deciduous_endor"); + resourceRoot.setResourceClass("Deciduous Wood"); + resourceRoot.setResourceType("Endorian"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_FLORA); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_ORGANIC_FOOD); + minCapArray = new short[]{(short)0,(short)0,(short)1 ,(short)0,(short)400 ,(short)300,(short)1 ,(short)0,(short)0,(short)1 ,(short)0}; + maxCapArray = new short[]{(short)1,(short)1,(short)800,(short)1,(short)1000,(short)400,(short)800,(short)1,(short)1,(short)1000,(short)1}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(222, resourceRoot); + endorPool4Roots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("wood_deciduous_lok"); + resourceRoot.setResourceClass("Deciduous Wood"); + resourceRoot.setResourceType("Lokian"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_FLORA); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_ORGANIC_FOOD); + minCapArray = new short[]{(short)0,(short)0,(short)1 ,(short)0,(short)400 ,(short)300,(short)1 ,(short)0,(short)0,(short)1 ,(short)0}; + maxCapArray = new short[]{(short)1,(short)1,(short)800,(short)1,(short)1000,(short)400,(short)800,(short)1,(short)1,(short)1000,(short)1}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(223, resourceRoot); + lokPool4Roots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("wood_deciduous_naboo"); + resourceRoot.setResourceClass("Deciduous Wood"); + resourceRoot.setResourceType("Nabooian"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_FLORA); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_ORGANIC_FOOD); + minCapArray = new short[]{(short)0,(short)0,(short)1 ,(short)0,(short)400 ,(short)300,(short)1 ,(short)0,(short)0,(short)1 ,(short)0}; + maxCapArray = new short[]{(short)1,(short)1,(short)800,(short)1,(short)1000,(short)400,(short)800,(short)1,(short)1,(short)1000,(short)1}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(224, resourceRoot); + nabooPool4Roots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("wood_deciduous_rori"); + resourceRoot.setResourceClass("Deciduous Wood"); + resourceRoot.setResourceType("Rori"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_FLORA); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_ORGANIC_FOOD); + minCapArray = new short[]{(short)0,(short)0,(short)1 ,(short)0,(short)400 ,(short)300,(short)1 ,(short)0,(short)0,(short)1 ,(short)0}; + maxCapArray = new short[]{(short)1,(short)1,(short)800,(short)1,(short)1000,(short)400,(short)800,(short)1,(short)1,(short)1000,(short)1}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(225, resourceRoot); + roriPool4Roots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("wood_deciduous_talus"); + resourceRoot.setResourceClass("Deciduous Wood"); + resourceRoot.setResourceType("Talusian"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_FLORA); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_ORGANIC_FOOD); + minCapArray = new short[]{(short)0,(short)0,(short)1 ,(short)0,(short)400 ,(short)300,(short)1 ,(short)0,(short)0,(short)1 ,(short)0}; + maxCapArray = new short[]{(short)1,(short)1,(short)800,(short)1,(short)1000,(short)400,(short)800,(short)1,(short)1,(short)1000,(short)1}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(226, resourceRoot); + talusPool4Roots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("wood_deciduous_tatooine"); + resourceRoot.setResourceClass("Deciduous Wood"); + resourceRoot.setResourceType("Tatooinian"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_FLORA); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_ORGANIC_FOOD); + minCapArray = new short[]{(short)0,(short)0,(short)1 ,(short)0,(short)400 ,(short)300,(short)1 ,(short)0,(short)0,(short)1 ,(short)0}; + maxCapArray = new short[]{(short)1,(short)1,(short)800,(short)1,(short)1000,(short)400,(short)800,(short)1,(short)1,(short)1000,(short)1}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(227, resourceRoot); + tattoinePool4Roots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("wood_deciduous_yavin4"); + resourceRoot.setResourceClass("Deciduous Wood"); + resourceRoot.setResourceType("Yavinian"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_FLORA); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_ORGANIC_FOOD); + minCapArray = new short[]{(short)0,(short)0,(short)1 ,(short)0,(short)400 ,(short)300,(short)1 ,(short)0,(short)0,(short)1 ,(short)0}; + maxCapArray = new short[]{(short)1,(short)1,(short)800,(short)1,(short)1000,(short)400,(short)800,(short)1,(short)1,(short)1000,(short)1}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(228, resourceRoot); + yavinPool4Roots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("fruit_fruits_corellia"); + resourceRoot.setResourceClass("Fruit"); + resourceRoot.setResourceType("Corellian"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_FLORA); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_ORGANIC_FRUIT); + //DR FL PE OQ + minCapArray = new short[]{(short)0,(short)0,(short)1 ,(short)0,(short)0,(short)0,(short)0,(short)0,(short)1 ,(short)1 ,(short)1}; + maxCapArray = new short[]{(short)1,(short)1,(short)1000,(short)1,(short)1,(short)1,(short)1,(short)1,(short)1000,(short)1000,(short)1000}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(229, resourceRoot); + corelliaPool4Roots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("fruit_fruits_dantooine"); + resourceRoot.setResourceClass("Fruit"); + resourceRoot.setResourceType("Dantooine"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_FLORA); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_ORGANIC_FRUIT); + minCapArray = new short[]{(short)0,(short)0,(short)1 ,(short)0,(short)0,(short)0,(short)0,(short)0,(short)1 ,(short)1 ,(short)1}; + maxCapArray = new short[]{(short)1,(short)1,(short)1000,(short)1,(short)1,(short)1,(short)1,(short)1,(short)1000,(short)1000,(short)1000}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(230, resourceRoot); + dantooinePool4Roots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("fruit_fruits_dathomir"); + resourceRoot.setResourceClass("Fruit"); + resourceRoot.setResourceType("Dathomirian"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_FLORA); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_ORGANIC_FRUIT); + minCapArray = new short[]{(short)0,(short)0,(short)1 ,(short)0,(short)0,(short)0,(short)0,(short)0,(short)1 ,(short)1 ,(short)1}; + maxCapArray = new short[]{(short)1,(short)1,(short)1000,(short)1,(short)1,(short)1,(short)1,(short)1,(short)1000,(short)1000,(short)1000}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(231, resourceRoot); + dathomirPool4Roots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("fruit_fruits_endor"); + resourceRoot.setResourceClass("Fruit"); + resourceRoot.setResourceType("Endorian"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_FLORA); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_ORGANIC_FRUIT); + minCapArray = new short[]{(short)0,(short)0,(short)1 ,(short)0,(short)0,(short)0,(short)0,(short)0,(short)1 ,(short)1 ,(short)1}; + maxCapArray = new short[]{(short)1,(short)1,(short)1000,(short)1,(short)1,(short)1,(short)1,(short)1,(short)1000,(short)1000,(short)1000}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(232, resourceRoot); + endorPool4Roots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("fruit_fruits_lok"); + resourceRoot.setResourceClass("Fruit"); + resourceRoot.setResourceType("Lokian"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_FLORA); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_ORGANIC_FRUIT); + minCapArray = new short[]{(short)0,(short)0,(short)1 ,(short)0,(short)0,(short)0,(short)0,(short)0,(short)1 ,(short)1 ,(short)1}; + maxCapArray = new short[]{(short)1,(short)1,(short)1000,(short)1,(short)1,(short)1,(short)1,(short)1,(short)1000,(short)1000,(short)1000}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(233, resourceRoot); + lokPool4Roots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("fruit_fruits_naboo"); + resourceRoot.setResourceClass("Fruit"); + resourceRoot.setResourceType("Nabooian"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_FLORA); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_ORGANIC_FRUIT); + minCapArray = new short[]{(short)0,(short)0,(short)1 ,(short)0,(short)0,(short)0,(short)0,(short)0,(short)1 ,(short)1 ,(short)1}; + maxCapArray = new short[]{(short)1,(short)1,(short)1000,(short)1,(short)1,(short)1,(short)1,(short)1,(short)1000,(short)1000,(short)1000}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(234, resourceRoot); + nabooPool4Roots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("fruit_fruits_rori"); + resourceRoot.setResourceClass("Fruit"); + resourceRoot.setResourceType("Rori"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_FLORA); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_ORGANIC_FRUIT); + minCapArray = new short[]{(short)0,(short)0,(short)1 ,(short)0,(short)0,(short)0,(short)0,(short)0,(short)1 ,(short)1 ,(short)1}; + maxCapArray = new short[]{(short)1,(short)1,(short)1000,(short)1,(short)1,(short)1,(short)1,(short)1,(short)1000,(short)1000,(short)1000}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(235, resourceRoot); + roriPool4Roots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("fruit_fruits_talus"); + resourceRoot.setResourceClass("Fruit"); + resourceRoot.setResourceType("Talusian"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_FLORA); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_ORGANIC_FRUIT); + minCapArray = new short[]{(short)0,(short)0,(short)1 ,(short)0,(short)0,(short)0,(short)0,(short)0,(short)1 ,(short)1 ,(short)1}; + maxCapArray = new short[]{(short)1,(short)1,(short)1000,(short)1,(short)1,(short)1,(short)1,(short)1,(short)1000,(short)1000,(short)1000}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(236, resourceRoot); + talusPool4Roots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("fruit_fruits_tatooine"); + resourceRoot.setResourceClass("Fruit"); + resourceRoot.setResourceType("Tatooinian"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_FLORA); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_ORGANIC_FRUIT); + minCapArray = new short[]{(short)0,(short)0,(short)1 ,(short)0,(short)0,(short)0,(short)0,(short)0,(short)1 ,(short)1 ,(short)1}; + maxCapArray = new short[]{(short)1,(short)1,(short)1000,(short)1,(short)1,(short)1,(short)1,(short)1,(short)1000,(short)1000,(short)1000}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(237, resourceRoot); + tattoinePool4Roots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("fruit_fruits_yavin4"); + resourceRoot.setResourceClass("Fruit"); + resourceRoot.setResourceType("Yavinian"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_FLORA); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_ORGANIC_FRUIT); + minCapArray = new short[]{(short)0,(short)0,(short)1 ,(short)0,(short)0,(short)0,(short)0,(short)0,(short)1 ,(short)1 ,(short)1}; + maxCapArray = new short[]{(short)1,(short)1,(short)1000,(short)1,(short)1,(short)1,(short)1,(short)1,(short)1000,(short)1000,(short)1000}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(238, resourceRoot); + yavinPool4Roots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("fruit_flowers_corellia"); + resourceRoot.setResourceClass("Flower Fruit"); + resourceRoot.setResourceType("Corellian"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_FLORA); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_ORGANIC_FRUIT); + //"Cold Res","Cond","Decay Res","Heat Res","Malle","Shock Res","Unit Tough","Entangle Res","Pot E","OQ","Flavor" + //Flowers: PE 1 - 700 + minCapArray = new short[]{(short)0,(short)0,(short)1 ,(short)0,(short)0,(short)0,(short)0,(short)0,(short)1 ,(short)1 ,(short)1}; + maxCapArray = new short[]{(short)1,(short)1,(short)1000,(short)1,(short)1,(short)1,(short)1,(short)1,(short)700,(short)1000,(short)1000}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(239, resourceRoot); + corelliaPool4Roots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("fruit_flowers_dantooine"); + resourceRoot.setResourceClass("Flower Fruit"); + resourceRoot.setResourceType("Dantooine"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_FLORA); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_ORGANIC_FRUIT); + minCapArray = new short[]{(short)0,(short)0,(short)1 ,(short)0,(short)0,(short)0,(short)0,(short)0,(short)1 ,(short)1 ,(short)1}; + maxCapArray = new short[]{(short)1,(short)1,(short)1000,(short)1,(short)1,(short)1,(short)1,(short)1,(short)700,(short)1000,(short)1000}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(240, resourceRoot); + dantooinePool4Roots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("fruit_flowers_dathomir"); + resourceRoot.setResourceClass("Flower Fruit"); + resourceRoot.setResourceType("Dathomirian"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_FLORA); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_ORGANIC_FRUIT); + minCapArray = new short[]{(short)0,(short)0,(short)1 ,(short)0,(short)0,(short)0,(short)0,(short)0,(short)1 ,(short)1 ,(short)1}; + maxCapArray = new short[]{(short)1,(short)1,(short)1000,(short)1,(short)1,(short)1,(short)1,(short)1,(short)700,(short)1000,(short)1000}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(241, resourceRoot); + dathomirPool4Roots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("fruit_flowers_endor"); + resourceRoot.setResourceClass("Flower Fruit"); + resourceRoot.setResourceType("Endorian"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_FLORA); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_ORGANIC_FRUIT); + minCapArray = new short[]{(short)0,(short)0,(short)1 ,(short)0,(short)0,(short)0,(short)0,(short)0,(short)1 ,(short)1 ,(short)1}; + maxCapArray = new short[]{(short)1,(short)1,(short)1000,(short)1,(short)1,(short)1,(short)1,(short)1,(short)700,(short)1000,(short)1000}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(242, resourceRoot); + endorPool4Roots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("fruit_flowers_lok"); + resourceRoot.setResourceClass("Flower Fruit"); + resourceRoot.setResourceType("Lokian"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_FLORA); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_ORGANIC_FRUIT); + minCapArray = new short[]{(short)0,(short)0,(short)1 ,(short)0,(short)0,(short)0,(short)0,(short)0,(short)1 ,(short)1 ,(short)1}; + maxCapArray = new short[]{(short)1,(short)1,(short)1000,(short)1,(short)1,(short)1,(short)1,(short)1,(short)700,(short)1000,(short)1000}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(243, resourceRoot); + lokPool4Roots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("fruit_flowers_naboo"); + resourceRoot.setResourceClass("Flower Fruit"); + resourceRoot.setResourceType("Nabooian"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_FLORA); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_ORGANIC_FRUIT); + minCapArray = new short[]{(short)0,(short)0,(short)1 ,(short)0,(short)0,(short)0,(short)0,(short)0,(short)1 ,(short)1 ,(short)1}; + maxCapArray = new short[]{(short)1,(short)1,(short)1000,(short)1,(short)1,(short)1,(short)1,(short)1,(short)700,(short)1000,(short)1000}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(244, resourceRoot); + nabooPool4Roots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("fruit_flowers_rori"); + resourceRoot.setResourceClass("Flower Fruit"); + resourceRoot.setResourceType("Rori"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_FLORA); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_ORGANIC_FRUIT); + minCapArray = new short[]{(short)0,(short)0,(short)1 ,(short)0,(short)0,(short)0,(short)0,(short)0,(short)1 ,(short)1 ,(short)1}; + maxCapArray = new short[]{(short)1,(short)1,(short)1000,(short)1,(short)1,(short)1,(short)1,(short)1,(short)700,(short)1000,(short)1000}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(245, resourceRoot); + roriPool4Roots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("fruit_flowers_talus"); + resourceRoot.setResourceClass("Flower Fruit"); + resourceRoot.setResourceType("Talusian"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_FLORA); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_ORGANIC_FRUIT); + minCapArray = new short[]{(short)0,(short)0,(short)1 ,(short)0,(short)0,(short)0,(short)0,(short)0,(short)1 ,(short)1 ,(short)1}; + maxCapArray = new short[]{(short)1,(short)1,(short)1000,(short)1,(short)1,(short)1,(short)1,(short)1,(short)700,(short)1000,(short)1000}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(246, resourceRoot); + talusPool4Roots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("fruit_flowers_tatooine"); + resourceRoot.setResourceClass("Flower Fruit"); + resourceRoot.setResourceType("Tatooinian"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_FLORA); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_ORGANIC_FRUIT); + minCapArray = new short[]{(short)0,(short)0,(short)1 ,(short)0,(short)0,(short)0,(short)0,(short)0,(short)1 ,(short)1 ,(short)1}; + maxCapArray = new short[]{(short)1,(short)1,(short)1000,(short)1,(short)1,(short)1,(short)1,(short)1,(short)700,(short)1000,(short)1000}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(247, resourceRoot); + tattoinePool4Roots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("fruit_flowers_yavin4"); + resourceRoot.setResourceClass("Flower Fruit"); + resourceRoot.setResourceType("Yavinian"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_FLORA); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_ORGANIC_FRUIT); + minCapArray = new short[]{(short)0,(short)0,(short)1 ,(short)0,(short)0,(short)0,(short)0,(short)0,(short)1 ,(short)1 ,(short)1}; + maxCapArray = new short[]{(short)1,(short)1,(short)1000,(short)1,(short)1,(short)1,(short)1,(short)1,(short)700,(short)1000,(short)1000}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(248, resourceRoot); + yavinPool4Roots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("corn_domesticated_corellia"); + resourceRoot.setResourceClass("Domesticated Corn"); + resourceRoot.setResourceType("Corellian"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_FLORA); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_ORGANIC_CORN); + //Domesticated Corn: FL 1 - 700, PE 300 - 1000 + minCapArray = new short[]{(short)0,(short)0,(short)1 ,(short)0,(short)0,(short)0,(short)0,(short)0,(short)300 ,(short)1 ,(short)1}; + maxCapArray = new short[]{(short)1,(short)1,(short)1000,(short)1,(short)1,(short)1,(short)1,(short)1,(short)1000,(short)1000,(short)700}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(249, resourceRoot); + corelliaPool4Roots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("corn_domesticated_dantooine"); + resourceRoot.setResourceClass("Domesticated Corn"); + resourceRoot.setResourceType("Dantooine"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_FLORA); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_ORGANIC_CORN); + minCapArray = new short[]{(short)0,(short)0,(short)1 ,(short)0,(short)0,(short)0,(short)0,(short)0,(short)300 ,(short)1 ,(short)1}; + maxCapArray = new short[]{(short)1,(short)1,(short)1000,(short)1,(short)1,(short)1,(short)1,(short)1,(short)1000,(short)1000,(short)700}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(250, resourceRoot); + dantooinePool4Roots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("corn_domesticated_dathomir"); + resourceRoot.setResourceClass("Domesticated Corn"); + resourceRoot.setResourceType("Dathomirian"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_FLORA); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_ORGANIC_CORN); + minCapArray = new short[]{(short)0,(short)0,(short)1 ,(short)0,(short)0,(short)0,(short)0,(short)0,(short)300 ,(short)1 ,(short)1}; + maxCapArray = new short[]{(short)1,(short)1,(short)1000,(short)1,(short)1,(short)1,(short)1,(short)1,(short)1000,(short)1000,(short)700}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(251, resourceRoot); + dathomirPool4Roots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("corn_domesticated_endor"); + resourceRoot.setResourceClass("Domesticated Corn"); + resourceRoot.setResourceType("Endorian"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_FLORA); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_ORGANIC_CORN); + minCapArray = new short[]{(short)0,(short)0,(short)1 ,(short)0,(short)0,(short)0,(short)0,(short)0,(short)300 ,(short)1 ,(short)1}; + maxCapArray = new short[]{(short)1,(short)1,(short)1000,(short)1,(short)1,(short)1,(short)1,(short)1,(short)1000,(short)1000,(short)700}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(252, resourceRoot); + endorPool4Roots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("corn_domesticated_lok"); + resourceRoot.setResourceClass("Domesticated Corn"); + resourceRoot.setResourceType("Lokian"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_FLORA); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_ORGANIC_CORN); + minCapArray = new short[]{(short)0,(short)0,(short)1 ,(short)0,(short)0,(short)0,(short)0,(short)0,(short)300 ,(short)1 ,(short)1}; + maxCapArray = new short[]{(short)1,(short)1,(short)1000,(short)1,(short)1,(short)1,(short)1,(short)1,(short)1000,(short)1000,(short)700}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(253, resourceRoot); + lokPool4Roots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("corn_domesticated_naboo"); + resourceRoot.setResourceClass("Domesticated Corn"); + resourceRoot.setResourceType("Nabooian"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_FLORA); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_ORGANIC_CORN); + minCapArray = new short[]{(short)0,(short)0,(short)1 ,(short)0,(short)0,(short)0,(short)0,(short)0,(short)300 ,(short)1 ,(short)1}; + maxCapArray = new short[]{(short)1,(short)1,(short)1000,(short)1,(short)1,(short)1,(short)1,(short)1,(short)1000,(short)1000,(short)700}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(254, resourceRoot); + nabooPool4Roots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("corn_domesticated_rori"); + resourceRoot.setResourceClass("Domesticated Corn"); + resourceRoot.setResourceType("Rori"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_FLORA); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_ORGANIC_CORN); + minCapArray = new short[]{(short)0,(short)0,(short)1 ,(short)0,(short)0,(short)0,(short)0,(short)0,(short)300 ,(short)1 ,(short)1}; + maxCapArray = new short[]{(short)1,(short)1,(short)1000,(short)1,(short)1,(short)1,(short)1,(short)1,(short)1000,(short)1000,(short)700}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(255, resourceRoot); + roriPool4Roots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("corn_domesticated_talus"); + resourceRoot.setResourceClass("Domesticated Corn"); + resourceRoot.setResourceType("Talusian"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_FLORA); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_ORGANIC_CORN); + minCapArray = new short[]{(short)0,(short)0,(short)1 ,(short)0,(short)0,(short)0,(short)0,(short)0,(short)300 ,(short)1 ,(short)1}; + maxCapArray = new short[]{(short)1,(short)1,(short)1000,(short)1,(short)1,(short)1,(short)1,(short)1,(short)1000,(short)1000,(short)700}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(256, resourceRoot); + talusPool4Roots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("corn_domesticated_tatooine"); + resourceRoot.setResourceClass("Domesticated Corn"); + resourceRoot.setResourceType("Tatooinian"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_FLORA); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_ORGANIC_CORN); + minCapArray = new short[]{(short)0,(short)0,(short)1 ,(short)0,(short)0,(short)0,(short)0,(short)0,(short)300 ,(short)1 ,(short)1}; + maxCapArray = new short[]{(short)1,(short)1,(short)1000,(short)1,(short)1,(short)1,(short)1,(short)1,(short)1000,(short)1000,(short)700}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(257, resourceRoot); + tattoinePool4Roots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("corn_domesticated_yavin4"); + resourceRoot.setResourceClass("Domesticated Corn"); + resourceRoot.setResourceType("Yavinian"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_FLORA); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_ORGANIC_CORN); + minCapArray = new short[]{(short)0,(short)0,(short)1 ,(short)0,(short)0,(short)0,(short)0,(short)0,(short)300 ,(short)1 ,(short)1}; + maxCapArray = new short[]{(short)1,(short)1,(short)1000,(short)1,(short)1,(short)1,(short)1,(short)1,(short)1000,(short)1000,(short)700}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(258, resourceRoot); + yavinPool4Roots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("oats_domesticated_corellia"); + resourceRoot.setResourceClass("Domesticated Oats"); + resourceRoot.setResourceType("Corellian"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_FLORA); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_ORGANIC_OATS); + //Domesticated Oats: FL 1 - 700, PE 300 - 1000 + minCapArray = new short[]{(short)0,(short)0,(short)1 ,(short)0,(short)0,(short)0,(short)0,(short)0,(short)300 ,(short)1 ,(short)1}; + maxCapArray = new short[]{(short)1,(short)1,(short)1000,(short)1,(short)1,(short)1,(short)1,(short)1,(short)1000,(short)1000,(short)700}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(259, resourceRoot); + corelliaPool4Roots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("oats_domesticated_dantooine"); + resourceRoot.setResourceClass("Domesticated Oats"); + resourceRoot.setResourceType("Dantooine"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_FLORA); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_ORGANIC_OATS); + minCapArray = new short[]{(short)0,(short)0,(short)1 ,(short)0,(short)0,(short)0,(short)0,(short)0,(short)300 ,(short)1 ,(short)1}; + maxCapArray = new short[]{(short)1,(short)1,(short)1000,(short)1,(short)1,(short)1,(short)1,(short)1,(short)1000,(short)1000,(short)700}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(260, resourceRoot); + dantooinePool4Roots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("oats_domesticated_dathomir"); + resourceRoot.setResourceClass("Domesticated Oats"); + resourceRoot.setResourceType("Dathomirian"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_FLORA); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_ORGANIC_OATS); + minCapArray = new short[]{(short)0,(short)0,(short)1 ,(short)0,(short)0,(short)0,(short)0,(short)0,(short)300 ,(short)1 ,(short)1}; + maxCapArray = new short[]{(short)1,(short)1,(short)1000,(short)1,(short)1,(short)1,(short)1,(short)1,(short)1000,(short)1000,(short)700}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(261, resourceRoot); + dathomirPool4Roots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("oats_domesticated_endor"); + resourceRoot.setResourceClass("Domesticated Oats"); + resourceRoot.setResourceType("Endorian"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_FLORA); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_ORGANIC_OATS); + minCapArray = new short[]{(short)0,(short)0,(short)1 ,(short)0,(short)0,(short)0,(short)0,(short)0,(short)300 ,(short)1 ,(short)1}; + maxCapArray = new short[]{(short)1,(short)1,(short)1000,(short)1,(short)1,(short)1,(short)1,(short)1,(short)1000,(short)1000,(short)700}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(262, resourceRoot); + endorPool4Roots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("oats_domesticated_lok"); + resourceRoot.setResourceClass("Domesticated Oats"); + resourceRoot.setResourceType("Lokian"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_FLORA); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_ORGANIC_OATS); + minCapArray = new short[]{(short)0,(short)0,(short)1 ,(short)0,(short)0,(short)0,(short)0,(short)0,(short)300 ,(short)1 ,(short)1}; + maxCapArray = new short[]{(short)1,(short)1,(short)1000,(short)1,(short)1,(short)1,(short)1,(short)1,(short)1000,(short)1000,(short)700}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(263, resourceRoot); + lokPool4Roots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("oats_domesticated_naboo"); + resourceRoot.setResourceClass("Domesticated Oats"); + resourceRoot.setResourceType("Nabooian"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_FLORA); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_ORGANIC_OATS); + minCapArray = new short[]{(short)0,(short)0,(short)1 ,(short)0,(short)0,(short)0,(short)0,(short)0,(short)300 ,(short)1 ,(short)1}; + maxCapArray = new short[]{(short)1,(short)1,(short)1000,(short)1,(short)1,(short)1,(short)1,(short)1,(short)1000,(short)1000,(short)700}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(264, resourceRoot); + nabooPool4Roots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("oats_domesticated_rori"); + resourceRoot.setResourceClass("Domesticated Oats"); + resourceRoot.setResourceType("Rori"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_FLORA); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_ORGANIC_OATS); + minCapArray = new short[]{(short)0,(short)0,(short)1 ,(short)0,(short)0,(short)0,(short)0,(short)0,(short)300 ,(short)1 ,(short)1}; + maxCapArray = new short[]{(short)1,(short)1,(short)1000,(short)1,(short)1,(short)1,(short)1,(short)1,(short)1000,(short)1000,(short)700}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(265, resourceRoot); + roriPool4Roots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("oats_domesticated_talus"); + resourceRoot.setResourceClass("Domesticated Oats"); + resourceRoot.setResourceType("Talusian"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_FLORA); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_ORGANIC_OATS); + minCapArray = new short[]{(short)0,(short)0,(short)1 ,(short)0,(short)0,(short)0,(short)0,(short)0,(short)300 ,(short)1 ,(short)1}; + maxCapArray = new short[]{(short)1,(short)1,(short)1000,(short)1,(short)1,(short)1,(short)1,(short)1,(short)1000,(short)1000,(short)700}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(266, resourceRoot); + talusPool4Roots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("oats_domesticated_tatooine"); + resourceRoot.setResourceClass("Domesticated Oats"); + resourceRoot.setResourceType("Tatooinian"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_FLORA); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_ORGANIC_OATS); + minCapArray = new short[]{(short)0,(short)0,(short)1 ,(short)0,(short)0,(short)0,(short)0,(short)0,(short)300 ,(short)1 ,(short)1}; + maxCapArray = new short[]{(short)1,(short)1,(short)1000,(short)1,(short)1,(short)1,(short)1,(short)1,(short)1000,(short)1000,(short)700}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(267, resourceRoot); + tattoinePool4Roots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("oats_domesticated_yavin4"); + resourceRoot.setResourceClass("Domesticated Oats"); + resourceRoot.setResourceType("Yavinian"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_FLORA); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_ORGANIC_OATS); + minCapArray = new short[]{(short)0,(short)0,(short)1 ,(short)0,(short)0,(short)0,(short)0,(short)0,(short)300 ,(short)1 ,(short)1}; + maxCapArray = new short[]{(short)1,(short)1,(short)1000,(short)1,(short)1,(short)1,(short)1,(short)1,(short)1000,(short)1000,(short)700}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(268, resourceRoot); + yavinPool4Roots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("rice_domesticated_corellia"); + resourceRoot.setResourceClass("Domesticated Rice"); + resourceRoot.setResourceType("Corellian"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_FLORA); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_ORGANIC_RICE); + minCapArray = new short[]{(short)0,(short)0,(short)1 ,(short)0,(short)0,(short)0,(short)0,(short)0,(short)300 ,(short)1 ,(short)1}; + maxCapArray = new short[]{(short)1,(short)1,(short)1000,(short)1,(short)1,(short)1,(short)1,(short)1,(short)1000,(short)1000,(short)700}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(269, resourceRoot); + corelliaPool4Roots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("rice_domesticated_dantooine"); + resourceRoot.setResourceClass("Domesticated Rice"); + resourceRoot.setResourceType("Dantooine"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_FLORA); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_ORGANIC_RICE); + minCapArray = new short[]{(short)0,(short)0,(short)1 ,(short)0,(short)0,(short)0,(short)0,(short)0,(short)300 ,(short)1 ,(short)1}; + maxCapArray = new short[]{(short)1,(short)1,(short)1000,(short)1,(short)1,(short)1,(short)1,(short)1,(short)1000,(short)1000,(short)700}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(270, resourceRoot); + dantooinePool4Roots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("rice_domesticated_dathomir"); + resourceRoot.setResourceClass("Domesticated Rice"); + resourceRoot.setResourceType("Dathomirian"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_FLORA); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_ORGANIC_RICE); + minCapArray = new short[]{(short)0,(short)0,(short)1 ,(short)0,(short)0,(short)0,(short)0,(short)0,(short)300 ,(short)1 ,(short)1}; + maxCapArray = new short[]{(short)1,(short)1,(short)1000,(short)1,(short)1,(short)1,(short)1,(short)1,(short)1000,(short)1000,(short)700}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(271, resourceRoot); + dathomirPool4Roots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("rice_domesticated_endor"); + resourceRoot.setResourceClass("Domesticated Rice"); + resourceRoot.setResourceType("Endorian"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_FLORA); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_ORGANIC_RICE); + minCapArray = new short[]{(short)0,(short)0,(short)1 ,(short)0,(short)0,(short)0,(short)0,(short)0,(short)300 ,(short)1 ,(short)1}; + maxCapArray = new short[]{(short)1,(short)1,(short)1000,(short)1,(short)1,(short)1,(short)1,(short)1,(short)1000,(short)1000,(short)700}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(272, resourceRoot); + endorPool4Roots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("rice_domesticated_lok"); + resourceRoot.setResourceClass("Domesticated Rice"); + resourceRoot.setResourceType("Lokian"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_FLORA); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_ORGANIC_RICE); + minCapArray = new short[]{(short)0,(short)0,(short)1 ,(short)0,(short)0,(short)0,(short)0,(short)0,(short)300 ,(short)1 ,(short)1}; + maxCapArray = new short[]{(short)1,(short)1,(short)1000,(short)1,(short)1,(short)1,(short)1,(short)1,(short)1000,(short)1000,(short)700}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(273, resourceRoot); + lokPool4Roots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("rice_domesticated_naboo"); + resourceRoot.setResourceClass("Domesticated Rice"); + resourceRoot.setResourceType("Nabooian"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_FLORA); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_ORGANIC_RICE); + minCapArray = new short[]{(short)0,(short)0,(short)1 ,(short)0,(short)0,(short)0,(short)0,(short)0,(short)300 ,(short)1 ,(short)1}; + maxCapArray = new short[]{(short)1,(short)1,(short)1000,(short)1,(short)1,(short)1,(short)1,(short)1,(short)1000,(short)1000,(short)700}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(274, resourceRoot); + nabooPool4Roots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("rice_domesticated_rori"); + resourceRoot.setResourceClass("Domesticated Rice"); + resourceRoot.setResourceType("Rori"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_FLORA); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_ORGANIC_RICE); + minCapArray = new short[]{(short)0,(short)0,(short)1 ,(short)0,(short)0,(short)0,(short)0,(short)0,(short)300 ,(short)1 ,(short)1}; + maxCapArray = new short[]{(short)1,(short)1,(short)1000,(short)1,(short)1,(short)1,(short)1,(short)1,(short)1000,(short)1000,(short)700}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(275, resourceRoot); + roriPool4Roots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("rice_domesticated_talus"); + resourceRoot.setResourceClass("Domesticated Rice"); + resourceRoot.setResourceType("Talusian"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_FLORA); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_ORGANIC_RICE); + minCapArray = new short[]{(short)0,(short)0,(short)1 ,(short)0,(short)0,(short)0,(short)0,(short)0,(short)300 ,(short)1 ,(short)1}; + maxCapArray = new short[]{(short)1,(short)1,(short)1000,(short)1,(short)1,(short)1,(short)1,(short)1,(short)1000,(short)1000,(short)700}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(276, resourceRoot); + talusPool4Roots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("rice_domesticated_tatooine"); + resourceRoot.setResourceClass("Domesticated Rice"); + resourceRoot.setResourceType("Tatooinian"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_FLORA); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_ORGANIC_RICE); + minCapArray = new short[]{(short)0,(short)0,(short)1 ,(short)0,(short)0,(short)0,(short)0,(short)0,(short)300 ,(short)1 ,(short)1}; + maxCapArray = new short[]{(short)1,(short)1,(short)1000,(short)1,(short)1,(short)1,(short)1,(short)1,(short)1000,(short)1000,(short)700}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(277, resourceRoot); + tattoinePool4Roots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("rice_domesticated_yavin4"); + resourceRoot.setResourceClass("Domesticated Rice"); + resourceRoot.setResourceType("Yavinian"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_FLORA); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_ORGANIC_RICE); + minCapArray = new short[]{(short)0,(short)0,(short)1 ,(short)0,(short)0,(short)0,(short)0,(short)0,(short)300 ,(short)1 ,(short)1}; + maxCapArray = new short[]{(short)1,(short)1,(short)1000,(short)1,(short)1,(short)1,(short)1,(short)1,(short)1000,(short)1000,(short)700}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(278, resourceRoot); + yavinPool4Roots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("wheat_domesticated_corellia"); + resourceRoot.setResourceClass("Domesticated Wheat"); + resourceRoot.setResourceType("Corellian"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_FLORA); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_ORGANIC_WHEAT); + minCapArray = new short[]{(short)0,(short)0,(short)1 ,(short)0,(short)0,(short)0,(short)0,(short)0,(short)300 ,(short)1 ,(short)1}; + maxCapArray = new short[]{(short)1,(short)1,(short)1000,(short)1,(short)1,(short)1,(short)1,(short)1,(short)1000,(short)1000,(short)700}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(279, resourceRoot); + corelliaPool4Roots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("wheat_domesticated_dantooine"); + resourceRoot.setResourceClass("Domesticated Wheat"); + resourceRoot.setResourceType("Dantooine"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_FLORA); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_ORGANIC_WHEAT); + minCapArray = new short[]{(short)0,(short)0,(short)1 ,(short)0,(short)0,(short)0,(short)0,(short)0,(short)300 ,(short)1 ,(short)1}; + maxCapArray = new short[]{(short)1,(short)1,(short)1000,(short)1,(short)1,(short)1,(short)1,(short)1,(short)1000,(short)1000,(short)700}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(280, resourceRoot); + dantooinePool4Roots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("wheat_domesticated_dathomir"); + resourceRoot.setResourceClass("Domesticated Wheat"); + resourceRoot.setResourceType("Dathomirian"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_FLORA); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_ORGANIC_WHEAT); + minCapArray = new short[]{(short)0,(short)0,(short)1 ,(short)0,(short)0,(short)0,(short)0,(short)0,(short)300 ,(short)1 ,(short)1}; + maxCapArray = new short[]{(short)1,(short)1,(short)1000,(short)1,(short)1,(short)1,(short)1,(short)1,(short)1000,(short)1000,(short)700}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(281, resourceRoot); + dathomirPool4Roots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("wheat_domesticated_endor"); + resourceRoot.setResourceClass("Domesticated Wheat"); + resourceRoot.setResourceType("Endorian"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_FLORA); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_ORGANIC_WHEAT); + minCapArray = new short[]{(short)0,(short)0,(short)1 ,(short)0,(short)0,(short)0,(short)0,(short)0,(short)300 ,(short)1 ,(short)1}; + maxCapArray = new short[]{(short)1,(short)1,(short)1000,(short)1,(short)1,(short)1,(short)1,(short)1,(short)1000,(short)1000,(short)700}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(282, resourceRoot); + endorPool4Roots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("wheat_domesticated_lok"); + resourceRoot.setResourceClass("Domesticated Wheat"); + resourceRoot.setResourceType("Lokian"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_FLORA); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_ORGANIC_WHEAT); + minCapArray = new short[]{(short)0,(short)0,(short)1 ,(short)0,(short)0,(short)0,(short)0,(short)0,(short)300 ,(short)1 ,(short)1}; + maxCapArray = new short[]{(short)1,(short)1,(short)1000,(short)1,(short)1,(short)1,(short)1,(short)1,(short)1000,(short)1000,(short)700}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(283, resourceRoot); + lokPool4Roots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("wheat_domesticated_naboo"); + resourceRoot.setResourceClass("Domesticated Wheat"); + resourceRoot.setResourceType("Nabooian"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_FLORA); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_ORGANIC_WHEAT); + minCapArray = new short[]{(short)0,(short)0,(short)1 ,(short)0,(short)0,(short)0,(short)0,(short)0,(short)300 ,(short)1 ,(short)1}; + maxCapArray = new short[]{(short)1,(short)1,(short)1000,(short)1,(short)1,(short)1,(short)1,(short)1,(short)1000,(short)1000,(short)700}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(284, resourceRoot); + nabooPool4Roots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("wheat_domesticated_rori"); + resourceRoot.setResourceClass("Domesticated Wheat"); + resourceRoot.setResourceType("Rori"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_FLORA); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_ORGANIC_WHEAT); + minCapArray = new short[]{(short)0,(short)0,(short)1 ,(short)0,(short)0,(short)0,(short)0,(short)0,(short)300 ,(short)1 ,(short)1}; + maxCapArray = new short[]{(short)1,(short)1,(short)1000,(short)1,(short)1,(short)1,(short)1,(short)1,(short)1000,(short)1000,(short)700}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(285, resourceRoot); + roriPool4Roots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("wheat_domesticated_talus"); + resourceRoot.setResourceClass("Domesticated Wheat"); + resourceRoot.setResourceType("Talusian"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_FLORA); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_ORGANIC_WHEAT); + minCapArray = new short[]{(short)0,(short)0,(short)1 ,(short)0,(short)0,(short)0,(short)0,(short)0,(short)300 ,(short)1 ,(short)1}; + maxCapArray = new short[]{(short)1,(short)1,(short)1000,(short)1,(short)1,(short)1,(short)1,(short)1,(short)1000,(short)1000,(short)700}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(286, resourceRoot); + talusPool4Roots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("wheat_domesticated_tatooine"); + resourceRoot.setResourceClass("Domesticated Wheat"); + resourceRoot.setResourceType("Tatooinian"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_FLORA); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_ORGANIC_WHEAT); + minCapArray = new short[]{(short)0,(short)0,(short)1 ,(short)0,(short)0,(short)0,(short)0,(short)0,(short)300 ,(short)1 ,(short)1}; + maxCapArray = new short[]{(short)1,(short)1,(short)1000,(short)1,(short)1,(short)1,(short)1,(short)1,(short)1000,(short)1000,(short)700}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(287, resourceRoot); + tattoinePool4Roots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("wheat_domesticated_yavin4"); + resourceRoot.setResourceClass("Domesticated Wheat"); + resourceRoot.setResourceType("Yavinian"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_FLORA); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_ORGANIC_WHEAT); + minCapArray = new short[]{(short)0,(short)0,(short)1 ,(short)0,(short)0,(short)0,(short)0,(short)0,(short)300 ,(short)1 ,(short)1}; + maxCapArray = new short[]{(short)1,(short)1,(short)1000,(short)1,(short)1,(short)1,(short)1,(short)1,(short)1000,(short)1000,(short)700}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(288, resourceRoot); + yavinPool4Roots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("corn_wild_corellia"); + resourceRoot.setResourceClass("Wild Corn"); + resourceRoot.setResourceType("Corellian"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_FLORA); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_ORGANIC_CORN); + //Wild Corn: FL 300 - 1000, PE 1 - 700 + minCapArray = new short[]{(short)0,(short)0,(short)1 ,(short)0,(short)0,(short)0,(short)0,(short)0,(short)1 ,(short)1 ,(short)300}; + maxCapArray = new short[]{(short)1,(short)1,(short)1000,(short)1,(short)1,(short)1,(short)1,(short)1,(short)700,(short)1000,(short)1000}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(289, resourceRoot); + corelliaPool4Roots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("corn_wild_dantooine"); + resourceRoot.setResourceClass("Wild Corn"); + resourceRoot.setResourceType("Dantooine"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_FLORA); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_ORGANIC_CORN); + minCapArray = new short[]{(short)0,(short)0,(short)1 ,(short)0,(short)0,(short)0,(short)0,(short)0,(short)1 ,(short)1 ,(short)300}; + maxCapArray = new short[]{(short)1,(short)1,(short)1000,(short)1,(short)1,(short)1,(short)1,(short)1,(short)700,(short)1000,(short)1000}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(290, resourceRoot); + dantooinePool4Roots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("corn_wild_dathomir"); + resourceRoot.setResourceClass("Wild Corn"); + resourceRoot.setResourceType("Dathomirian"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_FLORA); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_ORGANIC_CORN); + minCapArray = new short[]{(short)0,(short)0,(short)1 ,(short)0,(short)0,(short)0,(short)0,(short)0,(short)1 ,(short)1 ,(short)300}; + maxCapArray = new short[]{(short)1,(short)1,(short)1000,(short)1,(short)1,(short)1,(short)1,(short)1,(short)700,(short)1000,(short)1000}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(291, resourceRoot); + dathomirPool4Roots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("corn_wild_endor"); + resourceRoot.setResourceClass("Wild Corn"); + resourceRoot.setResourceType("Endorian"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_FLORA); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_ORGANIC_CORN); + minCapArray = new short[]{(short)0,(short)0,(short)1 ,(short)0,(short)0,(short)0,(short)0,(short)0,(short)1 ,(short)1 ,(short)300}; + maxCapArray = new short[]{(short)1,(short)1,(short)1000,(short)1,(short)1,(short)1,(short)1,(short)1,(short)700,(short)1000,(short)1000}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(292, resourceRoot); + endorPool4Roots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("corn_wild_lok"); + resourceRoot.setResourceClass("Wild Corn"); + resourceRoot.setResourceType("Lokian"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_FLORA); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_ORGANIC_CORN); + minCapArray = new short[]{(short)0,(short)0,(short)1 ,(short)0,(short)0,(short)0,(short)0,(short)0,(short)1 ,(short)1 ,(short)300}; + maxCapArray = new short[]{(short)1,(short)1,(short)1000,(short)1,(short)1,(short)1,(short)1,(short)1,(short)700,(short)1000,(short)1000}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(293, resourceRoot); + lokPool4Roots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("corn_wild_naboo"); + resourceRoot.setResourceClass("Wild Corn"); + resourceRoot.setResourceType("Nabooian"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_FLORA); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_ORGANIC_CORN); + minCapArray = new short[]{(short)0,(short)0,(short)1 ,(short)0,(short)0,(short)0,(short)0,(short)0,(short)1 ,(short)1 ,(short)300}; + maxCapArray = new short[]{(short)1,(short)1,(short)1000,(short)1,(short)1,(short)1,(short)1,(short)1,(short)700,(short)1000,(short)1000}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(294, resourceRoot); + nabooPool4Roots.addElement(resourceRoot); + + } + //checked until here + public void createCollections2(){ + + ResourceRoot resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("corn_wild_rori"); + resourceRoot.setResourceClass("Wild Corn"); + resourceRoot.setResourceType("Rori"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_FLORA); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_ORGANIC_CORN); + minCapArray = new short[]{(short)0,(short)0,(short)1 ,(short)0,(short)0,(short)0,(short)0,(short)0,(short)1 ,(short)1 ,(short)300}; + maxCapArray = new short[]{(short)1,(short)1,(short)1000,(short)1,(short)1,(short)1,(short)1,(short)1,(short)700,(short)1000,(short)1000}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(295, resourceRoot); + roriPool4Roots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("corn_wild_talus"); + resourceRoot.setResourceClass("Wild Corn"); + resourceRoot.setResourceType("Talusian"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_FLORA); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_ORGANIC_CORN); + minCapArray = new short[]{(short)0,(short)0,(short)1 ,(short)0,(short)0,(short)0,(short)0,(short)0,(short)1 ,(short)1 ,(short)300}; + maxCapArray = new short[]{(short)1,(short)1,(short)1000,(short)1,(short)1,(short)1,(short)1,(short)1,(short)700,(short)1000,(short)1000}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(296, resourceRoot); + talusPool4Roots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("corn_wild_tatooine"); + resourceRoot.setResourceClass("Wild Corn"); + resourceRoot.setResourceType("Tatooinian"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_FLORA); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_ORGANIC_CORN); + minCapArray = new short[]{(short)0,(short)0,(short)1 ,(short)0,(short)0,(short)0,(short)0,(short)0,(short)1 ,(short)1 ,(short)300}; + maxCapArray = new short[]{(short)1,(short)1,(short)1000,(short)1,(short)1,(short)1,(short)1,(short)1,(short)700,(short)1000,(short)1000}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(297, resourceRoot); + tattoinePool4Roots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("corn_wild_yavin4"); + resourceRoot.setResourceClass("Wild Corn"); + resourceRoot.setResourceType("Yavinian"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_FLORA); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_ORGANIC_CORN); + minCapArray = new short[]{(short)0,(short)0,(short)1 ,(short)0,(short)0,(short)0,(short)0,(short)0,(short)1 ,(short)1 ,(short)300}; + maxCapArray = new short[]{(short)1,(short)1,(short)1000,(short)1,(short)1,(short)1,(short)1,(short)1,(short)700,(short)1000,(short)1000}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(298, resourceRoot); + yavinPool4Roots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("oats_wild_corellia"); + resourceRoot.setResourceClass("Wild Oats"); + resourceRoot.setResourceType("Corellian"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_FLORA); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_ORGANIC_OATS); + minCapArray = new short[]{(short)0,(short)0,(short)1 ,(short)0,(short)0,(short)0,(short)0,(short)0,(short)1 ,(short)1 ,(short)300}; + maxCapArray = new short[]{(short)1,(short)1,(short)1000,(short)1,(short)1,(short)1,(short)1,(short)1,(short)700,(short)1000,(short)1000}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(299, resourceRoot); + corelliaPool4Roots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("oats_wild_dantooine"); + resourceRoot.setResourceClass("Wild Oats"); + resourceRoot.setResourceType("Dantooine"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_FLORA); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_ORGANIC_OATS); + minCapArray = new short[]{(short)0,(short)0,(short)1 ,(short)0,(short)0,(short)0,(short)0,(short)0,(short)1 ,(short)1 ,(short)300}; + maxCapArray = new short[]{(short)1,(short)1,(short)1000,(short)1,(short)1,(short)1,(short)1,(short)1,(short)700,(short)1000,(short)1000}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(300, resourceRoot); + dantooinePool4Roots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("oats_wild_dathomir"); + resourceRoot.setResourceClass("Wild Oats"); + resourceRoot.setResourceType("Dathomirian"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_FLORA); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_ORGANIC_OATS); + minCapArray = new short[]{(short)0,(short)0,(short)1 ,(short)0,(short)0,(short)0,(short)0,(short)0,(short)1 ,(short)1 ,(short)300}; + maxCapArray = new short[]{(short)1,(short)1,(short)1000,(short)1,(short)1,(short)1,(short)1,(short)1,(short)700,(short)1000,(short)1000}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(301, resourceRoot); + dathomirPool4Roots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("oats_wild_endor"); + resourceRoot.setResourceClass("Wild Oats"); + resourceRoot.setResourceType("Endorian"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_FLORA); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_ORGANIC_OATS); + minCapArray = new short[]{(short)0,(short)0,(short)1 ,(short)0,(short)0,(short)0,(short)0,(short)0,(short)1 ,(short)1 ,(short)300}; + maxCapArray = new short[]{(short)1,(short)1,(short)1000,(short)1,(short)1,(short)1,(short)1,(short)1,(short)700,(short)1000,(short)1000}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(302, resourceRoot); + endorPool4Roots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("oats_wild_lok"); + resourceRoot.setResourceClass("Wild Oats"); + resourceRoot.setResourceType("Lokian"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_FLORA); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_ORGANIC_OATS); + minCapArray = new short[]{(short)0,(short)0,(short)1 ,(short)0,(short)0,(short)0,(short)0,(short)0,(short)1 ,(short)1 ,(short)300}; + maxCapArray = new short[]{(short)1,(short)1,(short)1000,(short)1,(short)1,(short)1,(short)1,(short)1,(short)700,(short)1000,(short)1000}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(303, resourceRoot); + lokPool4Roots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("oats_wild_naboo"); + resourceRoot.setResourceClass("Wild Oats"); + resourceRoot.setResourceType("Nabooian"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_FLORA); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_ORGANIC_OATS); + minCapArray = new short[]{(short)0,(short)0,(short)1 ,(short)0,(short)0,(short)0,(short)0,(short)0,(short)1 ,(short)1 ,(short)300}; + maxCapArray = new short[]{(short)1,(short)1,(short)1000,(short)1,(short)1,(short)1,(short)1,(short)1,(short)700,(short)1000,(short)1000}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(304, resourceRoot); + nabooPool4Roots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("oats_wild_rori"); + resourceRoot.setResourceClass("Wild Oats"); + resourceRoot.setResourceType("Rori"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_FLORA); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_ORGANIC_OATS); + minCapArray = new short[]{(short)0,(short)0,(short)1 ,(short)0,(short)0,(short)0,(short)0,(short)0,(short)1 ,(short)1 ,(short)300}; + maxCapArray = new short[]{(short)1,(short)1,(short)1000,(short)1,(short)1,(short)1,(short)1,(short)1,(short)700,(short)1000,(short)1000}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(305, resourceRoot); + roriPool4Roots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("oats_wild_talus"); + resourceRoot.setResourceClass("Wild Oats"); + resourceRoot.setResourceType("Talusian"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_FLORA); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_ORGANIC_OATS); + minCapArray = new short[]{(short)0,(short)0,(short)1 ,(short)0,(short)0,(short)0,(short)0,(short)0,(short)1 ,(short)1 ,(short)300}; + maxCapArray = new short[]{(short)1,(short)1,(short)1000,(short)1,(short)1,(short)1,(short)1,(short)1,(short)700,(short)1000,(short)1000}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(306, resourceRoot); + talusPool4Roots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("oats_wild_tatooine"); + resourceRoot.setResourceClass("Wild Oats"); + resourceRoot.setResourceType("Tatooinian"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_FLORA); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_ORGANIC_OATS); + minCapArray = new short[]{(short)0,(short)0,(short)1 ,(short)0,(short)0,(short)0,(short)0,(short)0,(short)1 ,(short)1 ,(short)300}; + maxCapArray = new short[]{(short)1,(short)1,(short)1000,(short)1,(short)1,(short)1,(short)1,(short)1,(short)700,(short)1000,(short)1000}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(307, resourceRoot); + tattoinePool4Roots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("oats_wild_yavin4"); + resourceRoot.setResourceClass("Wild Oats"); + resourceRoot.setResourceType("Yavinian"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_FLORA); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_ORGANIC_OATS); + minCapArray = new short[]{(short)0,(short)0,(short)1 ,(short)0,(short)0,(short)0,(short)0,(short)0,(short)1 ,(short)1 ,(short)300}; + maxCapArray = new short[]{(short)1,(short)1,(short)1000,(short)1,(short)1,(short)1,(short)1,(short)1,(short)700,(short)1000,(short)1000}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(308, resourceRoot); + yavinPool4Roots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("rice_wild_corellia"); + resourceRoot.setResourceClass("Wild Rice"); + resourceRoot.setResourceType("Corellian"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_FLORA); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_ORGANIC_RICE); + minCapArray = new short[]{(short)0,(short)0,(short)0 ,(short)0,(short)0,(short)0,(short)0,(short)0,(short)1 ,(short)1 ,(short)300}; + maxCapArray = new short[]{(short)1,(short)1,(short)1000,(short)1,(short)1,(short)1,(short)1,(short)1,(short)700,(short)1000,(short)1000}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(309, resourceRoot); + corelliaPool4Roots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("rice_wild_dantooine"); + resourceRoot.setResourceClass("Wild Rice"); + resourceRoot.setResourceType("Dantooine"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_FLORA); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_ORGANIC_RICE); + minCapArray = new short[]{(short)0,(short)0,(short)0 ,(short)0,(short)0,(short)0,(short)0,(short)0,(short)1 ,(short)1 ,(short)300}; + maxCapArray = new short[]{(short)1,(short)1,(short)1000,(short)1,(short)1,(short)1,(short)1,(short)1,(short)700,(short)1000,(short)1000}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(310, resourceRoot); + dantooinePool4Roots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("rice_wild_dathomir"); + resourceRoot.setResourceClass("Wild Rice"); + resourceRoot.setResourceType("Dathomirian"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_FLORA); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_ORGANIC_RICE); + minCapArray = new short[]{(short)0,(short)0,(short)0 ,(short)0,(short)0,(short)0,(short)0,(short)0,(short)1 ,(short)1 ,(short)300}; + maxCapArray = new short[]{(short)1,(short)1,(short)1000,(short)1,(short)1,(short)1,(short)1,(short)1,(short)700,(short)1000,(short)1000}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(311, resourceRoot); + dathomirPool4Roots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("rice_wild_endor"); + resourceRoot.setResourceClass("Wild Rice"); + resourceRoot.setResourceType("Endorian"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_FLORA); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_ORGANIC_RICE); + minCapArray = new short[]{(short)0,(short)0,(short)0 ,(short)0,(short)0,(short)0,(short)0,(short)0,(short)1 ,(short)1 ,(short)300}; + maxCapArray = new short[]{(short)1,(short)1,(short)1000,(short)1,(short)1,(short)1,(short)1,(short)1,(short)700,(short)1000,(short)1000}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(312, resourceRoot); + endorPool4Roots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("rice_wild_lok"); + resourceRoot.setResourceClass("Wild Rice"); + resourceRoot.setResourceType("Lokian"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_FLORA); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_ORGANIC_RICE); + minCapArray = new short[]{(short)0,(short)0,(short)0 ,(short)0,(short)0,(short)0,(short)0,(short)0,(short)1 ,(short)1 ,(short)300}; + maxCapArray = new short[]{(short)1,(short)1,(short)1000,(short)1,(short)1,(short)1,(short)1,(short)1,(short)700,(short)1000,(short)1000}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(313, resourceRoot); + lokPool4Roots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("rice_wild_naboo"); + resourceRoot.setResourceClass("Wild Rice"); + resourceRoot.setResourceType("Nabooian"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_FLORA); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_ORGANIC_RICE); + minCapArray = new short[]{(short)0,(short)0,(short)0 ,(short)0,(short)0,(short)0,(short)0,(short)0,(short)1 ,(short)1 ,(short)300}; + maxCapArray = new short[]{(short)1,(short)1,(short)1000,(short)1,(short)1,(short)1,(short)1,(short)1,(short)700,(short)1000,(short)1000}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(314, resourceRoot); + nabooPool4Roots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("rice_wild_rori"); + resourceRoot.setResourceClass("Wild Rice"); + resourceRoot.setResourceType("Rori"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_FLORA); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_ORGANIC_RICE); + minCapArray = new short[]{(short)0,(short)0,(short)0 ,(short)0,(short)0,(short)0,(short)0,(short)0,(short)1 ,(short)1 ,(short)300}; + maxCapArray = new short[]{(short)1,(short)1,(short)1000,(short)1,(short)1,(short)1,(short)1,(short)1,(short)700,(short)1000,(short)1000}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(315, resourceRoot); + roriPool4Roots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("rice_wild_talus"); + resourceRoot.setResourceClass("Wild Rice"); + resourceRoot.setResourceType("Talusian"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_FLORA); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_ORGANIC_RICE); + minCapArray = new short[]{(short)0,(short)0,(short)0 ,(short)0,(short)0,(short)0,(short)0,(short)0,(short)1 ,(short)1 ,(short)300}; + maxCapArray = new short[]{(short)1,(short)1,(short)1000,(short)1,(short)1,(short)1,(short)1,(short)1,(short)700,(short)1000,(short)1000}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(316, resourceRoot); + talusPool4Roots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("rice_wild_tatooine"); + resourceRoot.setResourceClass("Wild Rice"); + resourceRoot.setResourceType("Tatooinian"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_FLORA); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_ORGANIC_RICE); + minCapArray = new short[]{(short)0,(short)0,(short)0 ,(short)0,(short)0,(short)0,(short)0,(short)0,(short)1 ,(short)1 ,(short)300}; + maxCapArray = new short[]{(short)1,(short)1,(short)1000,(short)1,(short)1,(short)1,(short)1,(short)1,(short)700,(short)1000,(short)1000}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(317, resourceRoot); + tattoinePool4Roots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("rice_wild_yavin4"); + resourceRoot.setResourceClass("Wild Rice"); + resourceRoot.setResourceType("Yavinian"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_FLORA); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_ORGANIC_RICE); + minCapArray = new short[]{(short)0,(short)0,(short)0 ,(short)0,(short)0,(short)0,(short)0,(short)0,(short)1 ,(short)1 ,(short)300}; + maxCapArray = new short[]{(short)1,(short)1,(short)1000,(short)1,(short)1,(short)1,(short)1,(short)1,(short)700,(short)1000,(short)1000}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(318, resourceRoot); + yavinPool4Roots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("wheat_wild_corellia"); + resourceRoot.setResourceClass("Wild Wheat"); + resourceRoot.setResourceType("Corellian"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_FLORA); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_ORGANIC_WHEAT); + minCapArray = new short[]{(short)0,(short)0,(short)1 ,(short)0,(short)0,(short)0,(short)0,(short)0,(short)1 ,(short)1 ,(short)300}; + maxCapArray = new short[]{(short)1,(short)1,(short)1000,(short)1,(short)1,(short)1,(short)1,(short)1,(short)700,(short)1000,(short)1000}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(319, resourceRoot); + corelliaPool4Roots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("wheat_wild_dantooine"); + resourceRoot.setResourceClass("Wild Wheat"); + resourceRoot.setResourceType("Dantooine"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_FLORA); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_ORGANIC_WHEAT); + minCapArray = new short[]{(short)0,(short)0,(short)1 ,(short)0,(short)0,(short)0,(short)0,(short)0,(short)1 ,(short)1 ,(short)300}; + maxCapArray = new short[]{(short)1,(short)1,(short)1000,(short)1,(short)1,(short)1,(short)1,(short)1,(short)700,(short)1000,(short)1000}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(320, resourceRoot); + dantooinePool4Roots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("wheat_wild_dathomir"); + resourceRoot.setResourceClass("Wild Wheat"); + resourceRoot.setResourceType("Dathomirian"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_FLORA); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_ORGANIC_WHEAT); + minCapArray = new short[]{(short)0,(short)0,(short)1 ,(short)0,(short)0,(short)0,(short)0,(short)0,(short)1 ,(short)1 ,(short)300}; + maxCapArray = new short[]{(short)1,(short)1,(short)1000,(short)1,(short)1,(short)1,(short)1,(short)1,(short)700,(short)1000,(short)1000}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(321, resourceRoot); + dathomirPool4Roots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("wheat_wild_endor"); + resourceRoot.setResourceClass("Wild Wheat"); + resourceRoot.setResourceType("Endorian"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_FLORA); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_ORGANIC_WHEAT); + minCapArray = new short[]{(short)0,(short)0,(short)1 ,(short)0,(short)0,(short)0,(short)0,(short)0,(short)1 ,(short)1 ,(short)300}; + maxCapArray = new short[]{(short)1,(short)1,(short)1000,(short)1,(short)1,(short)1,(short)1,(short)1,(short)700,(short)1000,(short)1000}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(322, resourceRoot); + endorPool4Roots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("wheat_wild_lok"); + resourceRoot.setResourceClass("Wild Wheat"); + resourceRoot.setResourceType("Lokian"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_FLORA); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_ORGANIC_WHEAT); + minCapArray = new short[]{(short)0,(short)0,(short)1 ,(short)0,(short)0,(short)0,(short)0,(short)0,(short)1 ,(short)1 ,(short)300}; + maxCapArray = new short[]{(short)1,(short)1,(short)1000,(short)1,(short)1,(short)1,(short)1,(short)1,(short)700,(short)1000,(short)1000}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(323, resourceRoot); + lokPool4Roots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("wheat_wild_naboo"); + resourceRoot.setResourceClass("Wild Wheat"); + resourceRoot.setResourceType("Nabooian"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_FLORA); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_ORGANIC_WHEAT); + minCapArray = new short[]{(short)0,(short)0,(short)1 ,(short)0,(short)0,(short)0,(short)0,(short)0,(short)1 ,(short)1 ,(short)300}; + maxCapArray = new short[]{(short)1,(short)1,(short)1000,(short)1,(short)1,(short)1,(short)1,(short)1,(short)700,(short)1000,(short)1000}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(324, resourceRoot); + nabooPool4Roots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("wheat_wild_rori"); + resourceRoot.setResourceClass("Wild Wheat"); + resourceRoot.setResourceType("Rori"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_FLORA); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_ORGANIC_WHEAT); + minCapArray = new short[]{(short)0,(short)0,(short)1 ,(short)0,(short)0,(short)0,(short)0,(short)0,(short)1 ,(short)1 ,(short)300}; + maxCapArray = new short[]{(short)1,(short)1,(short)1000,(short)1,(short)1,(short)1,(short)1,(short)1,(short)700,(short)1000,(short)1000}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(325, resourceRoot); + roriPool4Roots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("wheat_wild_talus"); + resourceRoot.setResourceClass("Wild Wheat"); + resourceRoot.setResourceType("Talusian"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_FLORA); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_ORGANIC_WHEAT); + minCapArray = new short[]{(short)0,(short)0,(short)1 ,(short)0,(short)0,(short)0,(short)0,(short)0,(short)1 ,(short)1 ,(short)300}; + maxCapArray = new short[]{(short)1,(short)1,(short)1000,(short)1,(short)1,(short)1,(short)1,(short)1,(short)700,(short)1000,(short)1000}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(326, resourceRoot); + talusPool4Roots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("wheat_wild_tatooine"); + resourceRoot.setResourceClass("Wild Wheat"); + resourceRoot.setResourceType("Tatooinian"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_FLORA); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_ORGANIC_WHEAT); + minCapArray = new short[]{(short)0,(short)0,(short)1 ,(short)0,(short)0,(short)0,(short)0,(short)0,(short)1 ,(short)1 ,(short)300}; + maxCapArray = new short[]{(short)1,(short)1,(short)1000,(short)1,(short)1,(short)1,(short)1,(short)1,(short)700,(short)1000,(short)1000}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(327, resourceRoot); + tattoinePool4Roots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("wheat_wild_yavin4"); + resourceRoot.setResourceClass("Wild Wheat"); + resourceRoot.setResourceType("Yavinian"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_FLORA); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_ORGANIC_WHEAT); + minCapArray = new short[]{(short)0,(short)0,(short)1 ,(short)0,(short)0,(short)0,(short)0,(short)0,(short)1 ,(short)1 ,(short)300}; + maxCapArray = new short[]{(short)1,(short)1,(short)1000,(short)1,(short)1,(short)1,(short)1,(short)1,(short)700,(short)1000,(short)1000}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(328, resourceRoot); + yavinPool4Roots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("vegetable_beans_corellia"); + resourceRoot.setResourceClass("Vegetable Beans"); + resourceRoot.setResourceType("Corellian"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_FLORA); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_ORGANIC_BEAN); + // DR FL PE OQ + minCapArray = new short[]{(short)0,(short)0,(short)1 ,(short)0,(short)0,(short)0,(short)0,(short)0,(short)1 ,(short)1 ,(short)1}; + maxCapArray = new short[]{(short)1,(short)1,(short)1000,(short)1,(short)1,(short)1,(short)1,(short)1,(short)1000,(short)1000,(short)1000}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(329, resourceRoot); + corelliaPool4Roots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("vegetable_beans_dantooine"); + resourceRoot.setResourceClass("Vegetable Beans"); + resourceRoot.setResourceType("Dantooine"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_FLORA); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_ORGANIC_BEAN); + minCapArray = new short[]{(short)0,(short)0,(short)1 ,(short)0,(short)0,(short)0,(short)0,(short)0,(short)1 ,(short)1 ,(short)1}; + maxCapArray = new short[]{(short)1,(short)1,(short)1000,(short)1,(short)1,(short)1,(short)1,(short)1,(short)1000,(short)1000,(short)1000}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(330, resourceRoot); + dantooinePool4Roots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("vegetable_beans_dathomir"); + resourceRoot.setResourceClass("Vegetable Beans"); + resourceRoot.setResourceType("Dathomirian"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_FLORA); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_ORGANIC_BEAN); + minCapArray = new short[]{(short)0,(short)0,(short)1 ,(short)0,(short)0,(short)0,(short)0,(short)0,(short)1 ,(short)1 ,(short)1}; + maxCapArray = new short[]{(short)1,(short)1,(short)1000,(short)1,(short)1,(short)1,(short)1,(short)1,(short)1000,(short)1000,(short)1000}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(331, resourceRoot); + dathomirPool4Roots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("vegetable_beans_endor"); + resourceRoot.setResourceClass("Vegetable Beans"); + resourceRoot.setResourceType("Endorian"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_FLORA); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_ORGANIC_BEAN); + minCapArray = new short[]{(short)0,(short)0,(short)1 ,(short)0,(short)0,(short)0,(short)0,(short)0,(short)1 ,(short)1 ,(short)1}; + maxCapArray = new short[]{(short)1,(short)1,(short)1000,(short)1,(short)1,(short)1,(short)1,(short)1,(short)1000,(short)1000,(short)1000}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(332, resourceRoot); + endorPool4Roots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("vegetable_beans_lok"); + resourceRoot.setResourceClass("Vegetable Beans"); + resourceRoot.setResourceType("Lokian"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_FLORA); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_ORGANIC_BEAN); + minCapArray = new short[]{(short)0,(short)0,(short)1 ,(short)0,(short)0,(short)0,(short)0,(short)0,(short)1 ,(short)1 ,(short)1}; + maxCapArray = new short[]{(short)1,(short)1,(short)1000,(short)1,(short)1,(short)1,(short)1,(short)1,(short)1000,(short)1000,(short)1000}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(333, resourceRoot); + lokPool4Roots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("vegetable_beans_naboo"); + resourceRoot.setResourceClass("Vegetable Beans"); + resourceRoot.setResourceType("Nabooian"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_FLORA); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_ORGANIC_BEAN); + minCapArray = new short[]{(short)0,(short)0,(short)1 ,(short)0,(short)0,(short)0,(short)0,(short)0,(short)1 ,(short)1 ,(short)1}; + maxCapArray = new short[]{(short)1,(short)1,(short)1000,(short)1,(short)1,(short)1,(short)1,(short)1,(short)1000,(short)1000,(short)1000}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(334, resourceRoot); + nabooPool4Roots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("vegetable_beans_rori"); + resourceRoot.setResourceClass("Vegetable Beans"); + resourceRoot.setResourceType("Rori"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_FLORA); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_ORGANIC_BEAN); + minCapArray = new short[]{(short)0,(short)0,(short)1 ,(short)0,(short)0,(short)0,(short)0,(short)0,(short)1 ,(short)1 ,(short)1}; + maxCapArray = new short[]{(short)1,(short)1,(short)1000,(short)1,(short)1,(short)1,(short)1,(short)1,(short)1000,(short)1000,(short)1000}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(335, resourceRoot); + roriPool4Roots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("vegetable_beans_talus"); + resourceRoot.setResourceClass("Vegetable Beans"); + resourceRoot.setResourceType("Talusian"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_FLORA); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_ORGANIC_BEAN); + minCapArray = new short[]{(short)0,(short)0,(short)1 ,(short)0,(short)0,(short)0,(short)0,(short)0,(short)1 ,(short)1 ,(short)1}; + maxCapArray = new short[]{(short)1,(short)1,(short)1000,(short)1,(short)1,(short)1,(short)1,(short)1,(short)1000,(short)1000,(short)1000}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(336, resourceRoot); + talusPool4Roots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("vegetable_beans_tatooine"); + resourceRoot.setResourceClass("Vegetable Beans"); + resourceRoot.setResourceType("Tatooinian"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_FLORA); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_ORGANIC_BEAN); + minCapArray = new short[]{(short)0,(short)0,(short)1 ,(short)0,(short)0,(short)0,(short)0,(short)0,(short)1 ,(short)1 ,(short)1}; + maxCapArray = new short[]{(short)1,(short)1,(short)1000,(short)1,(short)1,(short)1,(short)1,(short)1,(short)1000,(short)1000,(short)1000}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(337, resourceRoot); + tattoinePool4Roots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("vegetable_beans_yavin4"); + resourceRoot.setResourceClass("Vegetable Beans"); + resourceRoot.setResourceType("Yavinian"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_FLORA); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_ORGANIC_BEAN); + minCapArray = new short[]{(short)0,(short)0,(short)1 ,(short)0,(short)0,(short)0,(short)0,(short)0,(short)1 ,(short)1 ,(short)1}; + maxCapArray = new short[]{(short)1,(short)1,(short)1000,(short)1,(short)1,(short)1,(short)1,(short)1,(short)1000,(short)1000,(short)1000}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(338, resourceRoot); + yavinPool4Roots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("fruit_berries_corellia"); + resourceRoot.setResourceClass("Berry Fruit"); + resourceRoot.setResourceType("Corellian"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_FLORA); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_ORGANIC_FRUIT); + minCapArray = new short[]{(short)0,(short)0,(short)1 ,(short)0,(short)0,(short)0,(short)0,(short)0,(short)1 ,(short)1 ,(short)1}; + maxCapArray = new short[]{(short)1,(short)1,(short)1000,(short)1,(short)1,(short)1,(short)1,(short)1,(short)1000,(short)1000,(short)1000}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(339, resourceRoot); + corelliaPool4Roots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("fruit_berries_dantooine"); + resourceRoot.setResourceClass("Berry Fruit"); + resourceRoot.setResourceType("Dantooine"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_FLORA); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_ORGANIC_FRUIT); + minCapArray = new short[]{(short)0,(short)0,(short)1 ,(short)0,(short)0,(short)0,(short)0,(short)0,(short)1 ,(short)1 ,(short)1}; + maxCapArray = new short[]{(short)1,(short)1,(short)1000,(short)1,(short)1,(short)1,(short)1,(short)1,(short)1000,(short)1000,(short)1000}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(340, resourceRoot); + dantooinePool4Roots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("fruit_berries_dathomir"); + resourceRoot.setResourceClass("Berry Fruit"); + resourceRoot.setResourceType("Dathomirian"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_FLORA); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_ORGANIC_FRUIT); + minCapArray = new short[]{(short)0,(short)0,(short)1 ,(short)0,(short)0,(short)0,(short)0,(short)0,(short)1 ,(short)1 ,(short)1}; + maxCapArray = new short[]{(short)1,(short)1,(short)1000,(short)1,(short)1,(short)1,(short)1,(short)1,(short)1000,(short)1000,(short)1000}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(341, resourceRoot); + dathomirPool4Roots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("fruit_berries_endor"); + resourceRoot.setResourceClass("Berry Fruit"); + resourceRoot.setResourceType("Endorian"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_FLORA); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_ORGANIC_FRUIT); + minCapArray = new short[]{(short)0,(short)0,(short)1 ,(short)0,(short)0,(short)0,(short)0,(short)0,(short)1 ,(short)1 ,(short)1}; + maxCapArray = new short[]{(short)1,(short)1,(short)1000,(short)1,(short)1,(short)1,(short)1,(short)1,(short)1000,(short)1000,(short)1000}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(342, resourceRoot); + endorPool4Roots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("fruit_berries_lok"); + resourceRoot.setResourceClass("Berry Fruit"); + resourceRoot.setResourceType("Lokian"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_FLORA); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_ORGANIC_FRUIT); + minCapArray = new short[]{(short)0,(short)0,(short)1 ,(short)0,(short)0,(short)0,(short)0,(short)0,(short)1 ,(short)1 ,(short)1}; + maxCapArray = new short[]{(short)1,(short)1,(short)1000,(short)1,(short)1,(short)1,(short)1,(short)1,(short)1000,(short)1000,(short)1000}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(343, resourceRoot); + lokPool4Roots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("fruit_berries_naboo"); + resourceRoot.setResourceClass("Berry Fruit"); + resourceRoot.setResourceType("Nabooian"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_FLORA); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_ORGANIC_FRUIT); + minCapArray = new short[]{(short)0,(short)0,(short)1 ,(short)0,(short)0,(short)0,(short)0,(short)0,(short)1 ,(short)1 ,(short)1}; + maxCapArray = new short[]{(short)1,(short)1,(short)1000,(short)1,(short)1,(short)1,(short)1,(short)1,(short)1000,(short)1000,(short)1000}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(344, resourceRoot); + nabooPool4Roots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("fruit_berries_rori"); + resourceRoot.setResourceClass("Berry Fruit"); + resourceRoot.setResourceType("Rori"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_FLORA); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_ORGANIC_FRUIT); + minCapArray = new short[]{(short)0,(short)0,(short)1 ,(short)0,(short)0,(short)0,(short)0,(short)0,(short)1 ,(short)1 ,(short)1}; + maxCapArray = new short[]{(short)1,(short)1,(short)1000,(short)1,(short)1,(short)1,(short)1,(short)1,(short)1000,(short)1000,(short)1000}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(345, resourceRoot); + roriPool4Roots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("fruit_berries_talus"); + resourceRoot.setResourceClass("Berry Fruit"); + resourceRoot.setResourceType("Talusian"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_FLORA); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_ORGANIC_FRUIT); + minCapArray = new short[]{(short)0,(short)0,(short)1 ,(short)0,(short)0,(short)0,(short)0,(short)0,(short)1 ,(short)1 ,(short)1}; + maxCapArray = new short[]{(short)1,(short)1,(short)1000,(short)1,(short)1,(short)1,(short)1,(short)1,(short)1000,(short)1000,(short)1000}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(346, resourceRoot); + talusPool4Roots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("fruit_berries_tatooine"); + resourceRoot.setResourceClass("Berry Fruit"); + resourceRoot.setResourceType("Tatooinian"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_FLORA); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_ORGANIC_FRUIT); + minCapArray = new short[]{(short)0,(short)0,(short)1 ,(short)0,(short)0,(short)0,(short)0,(short)0,(short)1 ,(short)1 ,(short)1}; + maxCapArray = new short[]{(short)1,(short)1,(short)1000,(short)1,(short)1,(short)1,(short)1,(short)1,(short)1000,(short)1000,(short)1000}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(347, resourceRoot); + tattoinePool4Roots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("fruit_berries_yavin4"); + resourceRoot.setResourceClass("Berry Fruit"); + resourceRoot.setResourceType("Yavinian"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_FLORA); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_ORGANIC_FRUIT); + minCapArray = new short[]{(short)0,(short)0,(short)1 ,(short)0,(short)0,(short)0,(short)0,(short)0,(short)1 ,(short)1 ,(short)1}; + maxCapArray = new short[]{(short)1,(short)1,(short)1000,(short)1,(short)1,(short)1,(short)1,(short)1,(short)1000,(short)1000,(short)1000}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(348, resourceRoot); + yavinPool4Roots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("vegetable_fungi_corellia"); + resourceRoot.setResourceClass("Vegetable Fungus"); + resourceRoot.setResourceType("Corellian"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_FLORA); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_ORGANIC_FUNGI); + minCapArray = new short[]{(short)0,(short)0,(short)1 ,(short)0,(short)0,(short)0,(short)0,(short)0,(short)1 ,(short)1 ,(short)1}; + maxCapArray = new short[]{(short)1,(short)1,(short)1000,(short)1,(short)1,(short)1,(short)1,(short)1,(short)1000,(short)1000,(short)1000}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(349, resourceRoot); + corelliaPool4Roots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("vegetable_fungi_dantooine"); + resourceRoot.setResourceClass("Vegetable Fungus"); + resourceRoot.setResourceType("Dantooine"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_FLORA); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_ORGANIC_FUNGI); + minCapArray = new short[]{(short)0,(short)0,(short)1 ,(short)0,(short)0,(short)0,(short)0,(short)0,(short)1 ,(short)1 ,(short)1}; + maxCapArray = new short[]{(short)1,(short)1,(short)1000,(short)1,(short)1,(short)1,(short)1,(short)1,(short)1000,(short)1000,(short)1000}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(350, resourceRoot); + dantooinePool4Roots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("vegetable_fungi_dathomir"); + resourceRoot.setResourceClass("Vegetable Fungus"); + resourceRoot.setResourceType("Dathomirian"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_FLORA); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_ORGANIC_FUNGI); + minCapArray = new short[]{(short)0,(short)0,(short)1 ,(short)0,(short)0,(short)0,(short)0,(short)0,(short)1 ,(short)1 ,(short)1}; + maxCapArray = new short[]{(short)1,(short)1,(short)1000,(short)1,(short)1,(short)1,(short)1,(short)1,(short)1000,(short)1000,(short)1000}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(351, resourceRoot); + dathomirPool4Roots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("vegetable_fungi_endor"); + resourceRoot.setResourceClass("Vegetable Fungus"); + resourceRoot.setResourceType("Endorian"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_FLORA); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_ORGANIC_FUNGI); + minCapArray = new short[]{(short)0,(short)0,(short)1 ,(short)0,(short)0,(short)0,(short)0,(short)0,(short)1 ,(short)1 ,(short)1}; + maxCapArray = new short[]{(short)1,(short)1,(short)1000,(short)1,(short)1,(short)1,(short)1,(short)1,(short)1000,(short)1000,(short)1000}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(352, resourceRoot); + endorPool4Roots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("vegetable_fungi_lok"); + resourceRoot.setResourceClass("Vegetable Fungus"); + resourceRoot.setResourceType("Lokian"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_FLORA); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_ORGANIC_FUNGI); + minCapArray = new short[]{(short)0,(short)0,(short)1 ,(short)0,(short)0,(short)0,(short)0,(short)0,(short)1 ,(short)1 ,(short)1}; + maxCapArray = new short[]{(short)1,(short)1,(short)1000,(short)1,(short)1,(short)1,(short)1,(short)1,(short)1000,(short)1000,(short)1000}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(353, resourceRoot); + lokPool4Roots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("vegetable_fungi_naboo"); + resourceRoot.setResourceClass("Vegetable Fungus"); + resourceRoot.setResourceType("Nabooian"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_FLORA); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_ORGANIC_FUNGI); + minCapArray = new short[]{(short)0,(short)0,(short)1 ,(short)0,(short)0,(short)0,(short)0,(short)0,(short)1 ,(short)1 ,(short)1}; + maxCapArray = new short[]{(short)1,(short)1,(short)1000,(short)1,(short)1,(short)1,(short)1,(short)1,(short)1000,(short)1000,(short)1000}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(354, resourceRoot); + nabooPool4Roots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("vegetable_fungi_rori"); + resourceRoot.setResourceClass("Vegetable Fungus"); + resourceRoot.setResourceType("Rori"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_FLORA); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_ORGANIC_FUNGI); + minCapArray = new short[]{(short)0,(short)0,(short)1 ,(short)0,(short)0,(short)0,(short)0,(short)0,(short)1 ,(short)1 ,(short)1}; + maxCapArray = new short[]{(short)1,(short)1,(short)1000,(short)1,(short)1,(short)1,(short)1,(short)1,(short)1000,(short)1000,(short)1000}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(355, resourceRoot); + roriPool4Roots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("vegetable_fungi_talus"); + resourceRoot.setResourceClass("Vegetable Fungus"); + resourceRoot.setResourceType("Talusian"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_FLORA); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_ORGANIC_FUNGI); + minCapArray = new short[]{(short)0,(short)0,(short)1 ,(short)0,(short)0,(short)0,(short)0,(short)0,(short)1 ,(short)1 ,(short)1}; + maxCapArray = new short[]{(short)1,(short)1,(short)1000,(short)1,(short)1,(short)1,(short)1,(short)1,(short)1000,(short)1000,(short)1000}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(356, resourceRoot); + talusPool4Roots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("vegetable_fungi_tatooine"); + resourceRoot.setResourceClass("Vegetable Fungus"); + resourceRoot.setResourceType("Tatooinian"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_FLORA); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_ORGANIC_FUNGI); + minCapArray = new short[]{(short)0,(short)0,(short)1 ,(short)0,(short)0,(short)0,(short)0,(short)0,(short)1 ,(short)1 ,(short)1}; + maxCapArray = new short[]{(short)1,(short)1,(short)1000,(short)1,(short)1,(short)1,(short)1,(short)1,(short)1000,(short)1000,(short)1000}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(357, resourceRoot); + tattoinePool4Roots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("vegetable_fungi_yavin4"); + resourceRoot.setResourceClass("Vegetable Fungus"); + resourceRoot.setResourceType("Yavinian"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_FLORA); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_ORGANIC_FUNGI); + minCapArray = new short[]{(short)0,(short)0,(short)1 ,(short)0,(short)0,(short)0,(short)0,(short)0,(short)1 ,(short)1 ,(short)1}; + maxCapArray = new short[]{(short)1,(short)1,(short)1000,(short)1,(short)1,(short)1,(short)1,(short)1,(short)1000,(short)1000,(short)1000}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(358, resourceRoot); + yavinPool4Roots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("vegetable_greens_corellia"); + resourceRoot.setResourceClass("Vegetable Greens"); + resourceRoot.setResourceType("Corellian"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_FLORA); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_ORGANIC_GREEN_VEGETABLES); + minCapArray = new short[]{(short)0,(short)0,(short)1 ,(short)0,(short)0,(short)0,(short)0,(short)0,(short)1 ,(short)1 ,(short)1}; + maxCapArray = new short[]{(short)1,(short)1,(short)1000,(short)1,(short)1,(short)1,(short)1,(short)1,(short)1000,(short)1000,(short)1000}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(359, resourceRoot); + corelliaPool4Roots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("vegetable_greens_dantooine"); + resourceRoot.setResourceClass("Vegetable Greens"); + resourceRoot.setResourceType("Dantooine"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_FLORA); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_ORGANIC_GREEN_VEGETABLES); + minCapArray = new short[]{(short)0,(short)0,(short)1 ,(short)0,(short)0,(short)0,(short)0,(short)0,(short)1 ,(short)1 ,(short)1}; + maxCapArray = new short[]{(short)1,(short)1,(short)1000,(short)1,(short)1,(short)1,(short)1,(short)1,(short)1000,(short)1000,(short)1000}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(360, resourceRoot); + dantooinePool4Roots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("vegetable_greens_dathomir"); + resourceRoot.setResourceClass("Vegetable Greens"); + resourceRoot.setResourceType("Dathomirian"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_FLORA); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_ORGANIC_GREEN_VEGETABLES); + minCapArray = new short[]{(short)0,(short)0,(short)1 ,(short)0,(short)0,(short)0,(short)0,(short)0,(short)1 ,(short)1 ,(short)1}; + maxCapArray = new short[]{(short)1,(short)1,(short)1000,(short)1,(short)1,(short)1,(short)1,(short)1,(short)1000,(short)1000,(short)1000}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(361, resourceRoot); + dathomirPool4Roots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("vegetable_greens_endor"); + resourceRoot.setResourceClass("Vegetable Greens"); + resourceRoot.setResourceType("Endorian"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_FLORA); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_ORGANIC_GREEN_VEGETABLES); + minCapArray = new short[]{(short)0,(short)0,(short)1 ,(short)0,(short)0,(short)0,(short)0,(short)0,(short)1 ,(short)1 ,(short)1}; + maxCapArray = new short[]{(short)1,(short)1,(short)1000,(short)1,(short)1,(short)1,(short)1,(short)1,(short)1000,(short)1000,(short)1000}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(362, resourceRoot); + endorPool4Roots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("vegetable_greens_lok"); + resourceRoot.setResourceClass("Vegetable Greens"); + resourceRoot.setResourceType("Lokian"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_FLORA); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_ORGANIC_GREEN_VEGETABLES); + minCapArray = new short[]{(short)0,(short)0,(short)1 ,(short)0,(short)0,(short)0,(short)0,(short)0,(short)1 ,(short)1 ,(short)1}; + maxCapArray = new short[]{(short)1,(short)1,(short)1000,(short)1,(short)1,(short)1,(short)1,(short)1,(short)1000,(short)1000,(short)1000}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(363, resourceRoot); + lokPool4Roots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("vegetable_greens_naboo"); + resourceRoot.setResourceClass("Vegetable Greens"); + resourceRoot.setResourceType("Nabooian"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_FLORA); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_ORGANIC_GREEN_VEGETABLES); + minCapArray = new short[]{(short)0,(short)0,(short)1 ,(short)0,(short)0,(short)0,(short)0,(short)0,(short)1 ,(short)1 ,(short)1}; + maxCapArray = new short[]{(short)1,(short)1,(short)1000,(short)1,(short)1,(short)1,(short)1,(short)1,(short)1000,(short)1000,(short)1000}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(364, resourceRoot); + nabooPool4Roots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("vegetable_greens_rori"); + resourceRoot.setResourceClass("Vegetable Greens"); + resourceRoot.setResourceType("Rori"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_FLORA); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_ORGANIC_GREEN_VEGETABLES); + minCapArray = new short[]{(short)0,(short)0,(short)1 ,(short)0,(short)0,(short)0,(short)0,(short)0,(short)1 ,(short)1 ,(short)1}; + maxCapArray = new short[]{(short)1,(short)1,(short)1000,(short)1,(short)1,(short)1,(short)1,(short)1,(short)1000,(short)1000,(short)1000}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(365, resourceRoot); + roriPool4Roots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("vegetable_greens_talus"); + resourceRoot.setResourceClass("Vegetable Greens"); + resourceRoot.setResourceType("Talusian"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_FLORA); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_ORGANIC_GREEN_VEGETABLES); + minCapArray = new short[]{(short)0,(short)0,(short)1 ,(short)0,(short)0,(short)0,(short)0,(short)0,(short)1 ,(short)1 ,(short)1}; + maxCapArray = new short[]{(short)1,(short)1,(short)1000,(short)1,(short)1,(short)1,(short)1,(short)1,(short)1000,(short)1000,(short)1000}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(366, resourceRoot); + talusPool4Roots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("vegetable_greens_tatooine"); + resourceRoot.setResourceClass("Vegetable Greens"); + resourceRoot.setResourceType("Tatooinian"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_FLORA); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_ORGANIC_GREEN_VEGETABLES); + minCapArray = new short[]{(short)0,(short)0,(short)1 ,(short)0,(short)0,(short)0,(short)0,(short)0,(short)1 ,(short)1 ,(short)1}; + maxCapArray = new short[]{(short)1,(short)1,(short)1000,(short)1,(short)1,(short)1,(short)1,(short)1,(short)1000,(short)1000,(short)1000}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(367, resourceRoot); + tattoinePool4Roots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("vegetable_greens_yavin4"); + resourceRoot.setResourceClass("Vegetable Greens"); + resourceRoot.setResourceType("Yavinian"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_FLORA); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_ORGANIC_GREEN_VEGETABLES); + minCapArray = new short[]{(short)0,(short)0,(short)1 ,(short)0,(short)0,(short)0,(short)0,(short)0,(short)1 ,(short)1 ,(short)1}; + maxCapArray = new short[]{(short)1,(short)1,(short)1000,(short)1,(short)1,(short)1,(short)1,(short)1,(short)1000,(short)1000,(short)1000}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(368, resourceRoot); + yavinPool4Roots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("vegetable_tubers_corellia"); + resourceRoot.setResourceClass("Vegetable Tubers"); + resourceRoot.setResourceType("Corellian"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_FLORA); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_ORGANIC_TUBER); + minCapArray = new short[]{(short)0,(short)0,(short)1 ,(short)0,(short)0,(short)0,(short)0,(short)0,(short)1 ,(short)1 ,(short)1}; + maxCapArray = new short[]{(short)1,(short)1,(short)1000,(short)1,(short)1,(short)1,(short)1,(short)1,(short)1000,(short)1000,(short)1000}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(369, resourceRoot); + corelliaPool4Roots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("vegetable_tubers_dantooine"); + resourceRoot.setResourceClass("Vegetable Tubers"); + resourceRoot.setResourceType("Dantooine"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_FLORA); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_ORGANIC_TUBER); + minCapArray = new short[]{(short)0,(short)0,(short)1 ,(short)0,(short)0,(short)0,(short)0,(short)0,(short)1 ,(short)1 ,(short)1}; + maxCapArray = new short[]{(short)1,(short)1,(short)1000,(short)1,(short)1,(short)1,(short)1,(short)1,(short)1000,(short)1000,(short)1000}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(370, resourceRoot); + dantooinePool4Roots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("vegetable_tubers_dathomir"); + resourceRoot.setResourceClass("Vegetable Tubers"); + resourceRoot.setResourceType("Dathomirian"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_FLORA); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_ORGANIC_TUBER); + minCapArray = new short[]{(short)0,(short)0,(short)1 ,(short)0,(short)0,(short)0,(short)0,(short)0,(short)1 ,(short)1 ,(short)1}; + maxCapArray = new short[]{(short)1,(short)1,(short)1000,(short)1,(short)1,(short)1,(short)1,(short)1,(short)1000,(short)1000,(short)1000}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(371, resourceRoot); + dathomirPool4Roots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("vegetable_tubers_endor"); + resourceRoot.setResourceClass("Vegetable Tubers"); + resourceRoot.setResourceType("Endorian"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_FLORA); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_ORGANIC_TUBER); + minCapArray = new short[]{(short)0,(short)0,(short)1 ,(short)0,(short)0,(short)0,(short)0,(short)0,(short)1 ,(short)1 ,(short)1}; + maxCapArray = new short[]{(short)1,(short)1,(short)1000,(short)1,(short)1,(short)1,(short)1,(short)1,(short)1000,(short)1000,(short)1000}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(372, resourceRoot); + endorPool4Roots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("vegetable_tubers_lok"); + resourceRoot.setResourceClass("Vegetable Tubers"); + resourceRoot.setResourceType("Lokian"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_FLORA); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_ORGANIC_TUBER); + minCapArray = new short[]{(short)0,(short)0,(short)1 ,(short)0,(short)0,(short)0,(short)0,(short)0,(short)1 ,(short)1 ,(short)1}; + maxCapArray = new short[]{(short)1,(short)1,(short)1000,(short)1,(short)1,(short)1,(short)1,(short)1,(short)1000,(short)1000,(short)1000}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(373, resourceRoot); + lokPool4Roots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("vegetable_tubers_naboo"); + resourceRoot.setResourceClass("Vegetable Tubers"); + resourceRoot.setResourceType("Nabooian"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_FLORA); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_ORGANIC_TUBER); + minCapArray = new short[]{(short)0,(short)0,(short)1 ,(short)0,(short)0,(short)0,(short)0,(short)0,(short)1 ,(short)1 ,(short)1}; + maxCapArray = new short[]{(short)1,(short)1,(short)1000,(short)1,(short)1,(short)1,(short)1,(short)1,(short)1000,(short)1000,(short)1000}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(374, resourceRoot); + nabooPool4Roots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("vegetable_tubers_rori"); + resourceRoot.setResourceClass("Vegetable Tubers"); + resourceRoot.setResourceType("Rori"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_FLORA); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_ORGANIC_TUBER); + minCapArray = new short[]{(short)0,(short)0,(short)1 ,(short)0,(short)0,(short)0,(short)0,(short)0,(short)1 ,(short)1 ,(short)1}; + maxCapArray = new short[]{(short)1,(short)1,(short)1000,(short)1,(short)1,(short)1,(short)1,(short)1,(short)1000,(short)1000,(short)1000}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(375, resourceRoot); + roriPool4Roots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("vegetable_tubers_talus"); + resourceRoot.setResourceClass("Vegetable Tubers"); + resourceRoot.setResourceType("Talusian"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_FLORA); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_ORGANIC_TUBER); + minCapArray = new short[]{(short)0,(short)0,(short)1 ,(short)0,(short)0,(short)0,(short)0,(short)0,(short)1 ,(short)1 ,(short)1}; + maxCapArray = new short[]{(short)1,(short)1,(short)1000,(short)1,(short)1,(short)1,(short)1,(short)1,(short)1000,(short)1000,(short)1000}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(376, resourceRoot); + talusPool4Roots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("vegetable_tubers_tatooine"); + resourceRoot.setResourceClass("Vegetable Tubers"); + resourceRoot.setResourceType("Tatooinian"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_FLORA); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_ORGANIC_TUBER); + minCapArray = new short[]{(short)0,(short)0,(short)1 ,(short)0,(short)0,(short)0,(short)0,(short)0,(short)1 ,(short)1 ,(short)1}; + maxCapArray = new short[]{(short)1,(short)1,(short)1000,(short)1,(short)1,(short)1,(short)1,(short)1,(short)1000,(short)1000,(short)1000}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(377, resourceRoot); + tattoinePool4Roots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("vegetable_tubers_yavin4"); + resourceRoot.setResourceClass("Vegetable Tubers"); + resourceRoot.setResourceType("Yavinian"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_FLORA); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_ORGANIC_TUBER); + minCapArray = new short[]{(short)0,(short)0,(short)1 ,(short)0,(short)0,(short)0,(short)0,(short)0,(short)1 ,(short)1 ,(short)1}; + maxCapArray = new short[]{(short)1,(short)1,(short)1000,(short)1,(short)1,(short)1,(short)1,(short)1,(short)1000,(short)1000,(short)1000}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(378, resourceRoot); + yavinPool4Roots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("bone_mammal_corellia"); + resourceRoot.setResourceClass("Animal Bones"); + resourceRoot.setResourceType("Corellian"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_BONES); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_ORGANIC_STRUCTURE); + //"Cold Res","Cond","Decay Res","Heat Res","Malle","Shock Res","Unit Tough","Entangle Res","Pot E","OQ","Flavor" + //Animal Bone: DR 300 - 1000, MA 1 - 500, SR 400 - 1000 + minCapArray = new short[]{(short)0,(short)0,(short)300 ,(short)0,(short)1 ,(short)400 ,(short)1 ,(short)0,(short)0,(short)1 ,(short)0}; + maxCapArray = new short[]{(short)1,(short)1,(short)1000,(short)1,(short)500,(short)1000,(short)1000,(short)1,(short)1,(short)1000,(short)1}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(379, resourceRoot); + corelliaPool4Roots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("bone_mammal_dantooine"); + resourceRoot.setResourceClass("Animal Bones"); + resourceRoot.setResourceType("Dantooine"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_BONES); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_ORGANIC_STRUCTURE); + minCapArray = new short[]{(short)0,(short)0,(short)300 ,(short)0,(short)1 ,(short)400 ,(short)1 ,(short)0,(short)0,(short)1 ,(short)0}; + maxCapArray = new short[]{(short)1,(short)1,(short)1000,(short)1,(short)500,(short)1000,(short)1000,(short)1,(short)1,(short)1000,(short)1}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(380, resourceRoot); + dantooinePool4Roots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("bone_mammal_dathomir"); + resourceRoot.setResourceClass("Animal Bones"); + resourceRoot.setResourceType("Dathomirian"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_BONES); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_ORGANIC_STRUCTURE); + minCapArray = new short[]{(short)0,(short)0,(short)300 ,(short)0,(short)1 ,(short)400 ,(short)1 ,(short)0,(short)0,(short)1 ,(short)0}; + maxCapArray = new short[]{(short)1,(short)1,(short)1000,(short)1,(short)500,(short)1000,(short)1000,(short)1,(short)1,(short)1000,(short)1}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(381, resourceRoot); + dathomirPool4Roots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("bone_mammal_endor"); + resourceRoot.setResourceClass("Animal Bones"); + resourceRoot.setResourceType("Endorian"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_BONES); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_ORGANIC_STRUCTURE); + minCapArray = new short[]{(short)0,(short)0,(short)300 ,(short)0,(short)1 ,(short)400 ,(short)1 ,(short)0,(short)0,(short)1 ,(short)0}; + maxCapArray = new short[]{(short)1,(short)1,(short)1000,(short)1,(short)500,(short)1000,(short)1000,(short)1,(short)1,(short)1000,(short)1}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(382, resourceRoot); + endorPool4Roots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("bone_mammal_lok"); + resourceRoot.setResourceClass("Animal Bones"); + resourceRoot.setResourceType("Lokian"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_BONES); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_ORGANIC_STRUCTURE); + minCapArray = new short[]{(short)0,(short)0,(short)300 ,(short)0,(short)1 ,(short)400 ,(short)1 ,(short)0,(short)0,(short)1 ,(short)0}; + maxCapArray = new short[]{(short)1,(short)1,(short)1000,(short)1,(short)500,(short)1000,(short)1000,(short)1,(short)1,(short)1000,(short)1}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(383, resourceRoot); + lokPool4Roots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("bone_mammal_naboo"); + resourceRoot.setResourceClass("Animal Bones"); + resourceRoot.setResourceType("Nabooian"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_BONES); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_ORGANIC_STRUCTURE); + minCapArray = new short[]{(short)0,(short)0,(short)300 ,(short)0,(short)1 ,(short)400 ,(short)1 ,(short)0,(short)0,(short)1 ,(short)0}; + maxCapArray = new short[]{(short)1,(short)1,(short)1000,(short)1,(short)500,(short)1000,(short)1000,(short)1,(short)1,(short)1000,(short)1}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(384, resourceRoot); + nabooPool4Roots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("bone_mammal_rori"); + resourceRoot.setResourceClass("Animal Bones"); + resourceRoot.setResourceType("Rori"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_BONES); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_ORGANIC_STRUCTURE); + minCapArray = new short[]{(short)0,(short)0,(short)300 ,(short)0,(short)1 ,(short)400 ,(short)1 ,(short)0,(short)0,(short)1 ,(short)0}; + maxCapArray = new short[]{(short)1,(short)1,(short)1000,(short)1,(short)500,(short)1000,(short)1000,(short)1,(short)1,(short)1000,(short)1}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(385, resourceRoot); + roriPool4Roots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("bone_mammal_talus"); + resourceRoot.setResourceClass("Animal Bones"); + resourceRoot.setResourceType("Talusian"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_BONES); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_ORGANIC_STRUCTURE); + minCapArray = new short[]{(short)0,(short)0,(short)300 ,(short)0,(short)1 ,(short)400 ,(short)1 ,(short)0,(short)0,(short)1 ,(short)0}; + maxCapArray = new short[]{(short)1,(short)1,(short)1000,(short)1,(short)500,(short)1000,(short)1000,(short)1,(short)1,(short)1000,(short)1}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(386, resourceRoot); + talusPool4Roots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("bone_mammal_tatooine"); + resourceRoot.setResourceClass("Animal Bones"); + resourceRoot.setResourceType("Tatooinian"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_BONES); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_ORGANIC_STRUCTURE); + minCapArray = new short[]{(short)0,(short)0,(short)300 ,(short)0,(short)1 ,(short)400 ,(short)1 ,(short)0,(short)0,(short)1 ,(short)0}; + maxCapArray = new short[]{(short)1,(short)1,(short)1000,(short)1,(short)500,(short)1000,(short)1000,(short)1,(short)1,(short)1000,(short)1}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(387, resourceRoot); + tattoinePool4Roots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("bone_mammal_yavin4"); + resourceRoot.setResourceClass("Animal Bones"); + resourceRoot.setResourceType("Yavinian"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_BONES); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_ORGANIC_STRUCTURE); + minCapArray = new short[]{(short)0,(short)0,(short)300 ,(short)0,(short)1 ,(short)400 ,(short)1 ,(short)0,(short)0,(short)1 ,(short)0}; + maxCapArray = new short[]{(short)1,(short)1,(short)1000,(short)1,(short)500,(short)1000,(short)1000,(short)1,(short)1,(short)1000,(short)1}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(388, resourceRoot); + yavinPool4Roots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("bone_avian_corellia"); + resourceRoot.setResourceClass("Avian Bones"); + resourceRoot.setResourceType("Corellian"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_BONES); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_ORGANIC_STRUCTURE); + //"Cold Res","Cond","Decay Res","Heat Res","Malle","Shock Res","Unit Tough","Entangle Res","Pot E","OQ","Flavor" + // Avian Bone: DR 1 - 700, MA 1 - 600, SR 100 - 500, UT 1 - 500 + minCapArray = new short[]{(short)0,(short)0,(short)1 ,(short)0,(short)1 ,(short)100,(short)1 ,(short)0,(short)0,(short)1 ,(short)0}; + maxCapArray = new short[]{(short)1,(short)1,(short)700,(short)1,(short)600,(short)500,(short)500,(short)1,(short)1,(short)1000,(short)1}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(389, resourceRoot); + corelliaPool4Roots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("bone_avian_dantooine"); + resourceRoot.setResourceClass("Avian Bones"); + resourceRoot.setResourceType("Dantooine"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_BONES); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_ORGANIC_STRUCTURE); + minCapArray = new short[]{(short)0,(short)0,(short)1 ,(short)0,(short)1 ,(short)100,(short)1 ,(short)0,(short)0,(short)1 ,(short)0}; + maxCapArray = new short[]{(short)1,(short)1,(short)700,(short)1,(short)600,(short)500,(short)500,(short)1,(short)1,(short)1000,(short)1}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(390, resourceRoot); + dantooinePool4Roots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("bone_avian_dathomir"); + resourceRoot.setResourceClass("Avian Bones"); + resourceRoot.setResourceType("Dathomirian"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_BONES); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_ORGANIC_STRUCTURE); + minCapArray = new short[]{(short)0,(short)0,(short)1 ,(short)0,(short)1 ,(short)100,(short)1 ,(short)0,(short)0,(short)1 ,(short)0}; + maxCapArray = new short[]{(short)1,(short)1,(short)700,(short)1,(short)600,(short)500,(short)500,(short)1,(short)1,(short)1000,(short)1}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(391, resourceRoot); + dathomirPool4Roots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("bone_avian_endor"); + resourceRoot.setResourceClass("Avian Bones"); + resourceRoot.setResourceType("Endorian"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_BONES); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_ORGANIC_STRUCTURE); + minCapArray = new short[]{(short)0,(short)0,(short)1 ,(short)0,(short)1 ,(short)100,(short)1 ,(short)0,(short)0,(short)1 ,(short)0}; + maxCapArray = new short[]{(short)1,(short)1,(short)700,(short)1,(short)600,(short)500,(short)500,(short)1,(short)1,(short)1000,(short)1}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(392, resourceRoot); + endorPool4Roots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("bone_avian_lok"); + resourceRoot.setResourceClass("Avian Bones"); + resourceRoot.setResourceType("Lokian"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_BONES); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_ORGANIC_STRUCTURE); + minCapArray = new short[]{(short)0,(short)0,(short)1 ,(short)0,(short)1 ,(short)100,(short)1 ,(short)0,(short)0,(short)1 ,(short)0}; + maxCapArray = new short[]{(short)1,(short)1,(short)700,(short)1,(short)600,(short)500,(short)500,(short)1,(short)1,(short)1000,(short)1}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(393, resourceRoot); + lokPool4Roots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("bone_avian_naboo"); + resourceRoot.setResourceClass("Avian Bones"); + resourceRoot.setResourceType("Nabooian"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_BONES); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_ORGANIC_STRUCTURE); + minCapArray = new short[]{(short)0,(short)0,(short)1 ,(short)0,(short)1 ,(short)100,(short)1 ,(short)0,(short)0,(short)1 ,(short)0}; + maxCapArray = new short[]{(short)1,(short)1,(short)700,(short)1,(short)600,(short)500,(short)500,(short)1,(short)1,(short)1000,(short)1}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(394, resourceRoot); + nabooPool4Roots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("bone_avian_rori"); + resourceRoot.setResourceClass("Avian Bones"); + resourceRoot.setResourceType("Rori"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_BONES); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_ORGANIC_STRUCTURE); + minCapArray = new short[]{(short)0,(short)0,(short)1 ,(short)0,(short)1 ,(short)100,(short)1 ,(short)0,(short)0,(short)1 ,(short)0}; + maxCapArray = new short[]{(short)1,(short)1,(short)700,(short)1,(short)600,(short)500,(short)500,(short)1,(short)1,(short)1000,(short)1}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(395, resourceRoot); + roriPool4Roots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("bone_avian_talus"); + resourceRoot.setResourceClass("Avian Bones"); + resourceRoot.setResourceType("Talusian"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_BONES); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_ORGANIC_STRUCTURE); + minCapArray = new short[]{(short)0,(short)0,(short)1 ,(short)0,(short)1 ,(short)100,(short)1 ,(short)0,(short)0,(short)1 ,(short)0}; + maxCapArray = new short[]{(short)1,(short)1,(short)700,(short)1,(short)600,(short)500,(short)500,(short)1,(short)1,(short)1000,(short)1}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(396, resourceRoot); + talusPool4Roots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("bone_avian_tatooine"); + resourceRoot.setResourceClass("Avian Bones"); + resourceRoot.setResourceType("Tatooinian"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_BONES); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_ORGANIC_STRUCTURE); + minCapArray = new short[]{(short)0,(short)0,(short)1 ,(short)0,(short)1 ,(short)100,(short)1 ,(short)0,(short)0,(short)1 ,(short)0}; + maxCapArray = new short[]{(short)1,(short)1,(short)700,(short)1,(short)600,(short)500,(short)500,(short)1,(short)1,(short)1000,(short)1}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(397, resourceRoot); + tattoinePool4Roots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("bone_avian_yavin4"); + resourceRoot.setResourceClass("Avian Bones"); + resourceRoot.setResourceType("Yavinian"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_BONES); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_ORGANIC_STRUCTURE); + minCapArray = new short[]{(short)0,(short)0,(short)1 ,(short)0,(short)1 ,(short)100,(short)1 ,(short)0,(short)0,(short)1 ,(short)0}; + maxCapArray = new short[]{(short)1,(short)1,(short)700,(short)1,(short)600,(short)500,(short)500,(short)1,(short)1,(short)1000,(short)1}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(398, resourceRoot); + yavinPool4Roots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("bone_horn_corellia"); + resourceRoot.setResourceClass("Horn"); + resourceRoot.setResourceType("Corellian"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_HORN); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_ORGANIC_STRUCTURE); + //Horns: DR 200 - 1000, MA 1 - 500, SR 300 - 700, UT 1 - 500 + minCapArray = new short[]{(short)0,(short)0,(short)200 ,(short)0,(short)1 ,(short)300,(short)1 ,(short)0,(short)0,(short)1 ,(short)0}; + maxCapArray = new short[]{(short)1,(short)1,(short)1000,(short)1,(short)500,(short)700,(short)500,(short)1,(short)1,(short)1000,(short)1}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(399, resourceRoot); + corelliaPool4Roots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("bone_horn_dantooine"); + resourceRoot.setResourceClass("Horn"); + resourceRoot.setResourceType("Dantooine"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_HORN); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_ORGANIC_STRUCTURE); + minCapArray = new short[]{(short)0,(short)0,(short)200 ,(short)0,(short)1 ,(short)300,(short)1 ,(short)0,(short)0,(short)1 ,(short)0}; + maxCapArray = new short[]{(short)1,(short)1,(short)1000,(short)1,(short)500,(short)700,(short)500,(short)1,(short)1,(short)1000,(short)1}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(400, resourceRoot); + dantooinePool4Roots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("bone_horn_dathomir"); + resourceRoot.setResourceClass("Horn"); + resourceRoot.setResourceType("Dathomirian"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_HORN); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_ORGANIC_STRUCTURE); + minCapArray = new short[]{(short)0,(short)0,(short)200 ,(short)0,(short)1 ,(short)300,(short)1 ,(short)0,(short)0,(short)1 ,(short)0}; + maxCapArray = new short[]{(short)1,(short)1,(short)1000,(short)1,(short)500,(short)700,(short)500,(short)1,(short)1,(short)1000,(short)1}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(401, resourceRoot); + dathomirPool4Roots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("bone_horn_endor"); + resourceRoot.setResourceClass("Horn"); + resourceRoot.setResourceType("Endorian"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_HORN); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_ORGANIC_STRUCTURE); + minCapArray = new short[]{(short)0,(short)0,(short)200 ,(short)0,(short)1 ,(short)300,(short)1 ,(short)0,(short)0,(short)1 ,(short)0}; + maxCapArray = new short[]{(short)1,(short)1,(short)1000,(short)1,(short)500,(short)700,(short)500,(short)1,(short)1,(short)1000,(short)1}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(402, resourceRoot); + endorPool4Roots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("bone_horn_lok"); + resourceRoot.setResourceClass("Horn"); + resourceRoot.setResourceType("Lokian"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_HORN); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_ORGANIC_STRUCTURE); + minCapArray = new short[]{(short)0,(short)0,(short)200 ,(short)0,(short)1 ,(short)300,(short)1 ,(short)0,(short)0,(short)1 ,(short)0}; + maxCapArray = new short[]{(short)1,(short)1,(short)1000,(short)1,(short)500,(short)700,(short)500,(short)1,(short)1,(short)1000,(short)1}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(403, resourceRoot); + lokPool4Roots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("bone_horn_naboo"); + resourceRoot.setResourceClass("Horn"); + resourceRoot.setResourceType("Nabooian"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_HORN); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_ORGANIC_STRUCTURE); + minCapArray = new short[]{(short)0,(short)0,(short)200 ,(short)0,(short)1 ,(short)300,(short)1 ,(short)0,(short)0,(short)1 ,(short)0}; + maxCapArray = new short[]{(short)1,(short)1,(short)1000,(short)1,(short)500,(short)700,(short)500,(short)1,(short)1,(short)1000,(short)1}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(404, resourceRoot); + nabooPool4Roots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("bone_horn_rori"); + resourceRoot.setResourceClass("Horn"); + resourceRoot.setResourceType("Rori"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_HORN); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_ORGANIC_STRUCTURE); + minCapArray = new short[]{(short)0,(short)0,(short)200 ,(short)0,(short)1 ,(short)300,(short)1 ,(short)0,(short)0,(short)1 ,(short)0}; + maxCapArray = new short[]{(short)1,(short)1,(short)1000,(short)1,(short)500,(short)700,(short)500,(short)1,(short)1,(short)1000,(short)1}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(405, resourceRoot); + roriPool4Roots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("bone_horn_talus"); + resourceRoot.setResourceClass("Horn"); + resourceRoot.setResourceType("Talusian"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_HORN); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_ORGANIC_STRUCTURE); + minCapArray = new short[]{(short)0,(short)0,(short)200 ,(short)0,(short)1 ,(short)300,(short)1 ,(short)0,(short)0,(short)1 ,(short)0}; + maxCapArray = new short[]{(short)1,(short)1,(short)1000,(short)1,(short)500,(short)700,(short)500,(short)1,(short)1,(short)1000,(short)1}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(406, resourceRoot); + talusPool4Roots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("bone_horn_tatooine"); + resourceRoot.setResourceClass("Horn"); + resourceRoot.setResourceType("Tatooinian"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_HORN); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_ORGANIC_STRUCTURE); + minCapArray = new short[]{(short)0,(short)0,(short)200 ,(short)0,(short)1 ,(short)300,(short)1 ,(short)0,(short)0,(short)1 ,(short)0}; + maxCapArray = new short[]{(short)1,(short)1,(short)1000,(short)1,(short)500,(short)700,(short)500,(short)1,(short)1,(short)1000,(short)1}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(407, resourceRoot); + tattoinePool4Roots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("bone_horn_yavin4"); + resourceRoot.setResourceClass("Horn"); + resourceRoot.setResourceType("Yavinian"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_HORN); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_ORGANIC_STRUCTURE); + minCapArray = new short[]{(short)0,(short)0,(short)200 ,(short)0,(short)1 ,(short)300,(short)1 ,(short)0,(short)0,(short)1 ,(short)0}; + maxCapArray = new short[]{(short)1,(short)1,(short)1000,(short)1,(short)500,(short)700,(short)500,(short)1,(short)1,(short)1000,(short)1}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(408, resourceRoot); + yavinPool4Roots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("hide_bristley_corellia"); + resourceRoot.setResourceClass("Bristley Hide"); + resourceRoot.setResourceType("Corellian"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_HIDE); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_ORGANIC_BRISTLEY_HIDE); + minCapArray = new short[]{(short)0,(short)0,(short)1 ,(short)0,(short)1 ,(short)1 ,(short)1 ,(short)0,(short)0,(short)1 ,(short)0}; + maxCapArray = new short[]{(short)1,(short)1,(short)1000,(short)1,(short)1000,(short)1000,(short)1000,(short)1,(short)1,(short)1000,(short)1}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(409, resourceRoot); + corelliaPool4Roots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("hide_bristley_dantooine"); + resourceRoot.setResourceClass("Bristley Hide"); + resourceRoot.setResourceType("Dantooine"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_HIDE); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_ORGANIC_BRISTLEY_HIDE); + minCapArray = new short[]{(short)0,(short)0,(short)1 ,(short)0,(short)1 ,(short)1 ,(short)1 ,(short)0,(short)0,(short)1 ,(short)0}; + maxCapArray = new short[]{(short)1,(short)1,(short)1000,(short)1,(short)1000,(short)1000,(short)1000,(short)1,(short)1,(short)1000,(short)1}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(410, resourceRoot); + dantooinePool4Roots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("hide_bristley_dathomir"); + resourceRoot.setResourceClass("Bristley Hide"); + resourceRoot.setResourceType("Dathomirian"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_HIDE); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_ORGANIC_BRISTLEY_HIDE); + minCapArray = new short[]{(short)0,(short)0,(short)1 ,(short)0,(short)1 ,(short)1 ,(short)1 ,(short)0,(short)0,(short)1 ,(short)0}; + maxCapArray = new short[]{(short)1,(short)1,(short)1000,(short)1,(short)1000,(short)1000,(short)1000,(short)1,(short)1,(short)1000,(short)1}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(411, resourceRoot); + dathomirPool4Roots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("hide_bristley_endor"); + resourceRoot.setResourceClass("Bristley Hide"); + resourceRoot.setResourceType("Endorian"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_HIDE); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_ORGANIC_BRISTLEY_HIDE); + minCapArray = new short[]{(short)0,(short)0,(short)1 ,(short)0,(short)1 ,(short)1 ,(short)1 ,(short)0,(short)0,(short)1 ,(short)0}; + maxCapArray = new short[]{(short)1,(short)1,(short)1000,(short)1,(short)1000,(short)1000,(short)1000,(short)1,(short)1,(short)1000,(short)1}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(412, resourceRoot); + endorPool4Roots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("hide_bristley_lok"); + resourceRoot.setResourceClass("Bristley Hide"); + resourceRoot.setResourceType("Lokian"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_HIDE); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_ORGANIC_BRISTLEY_HIDE); + minCapArray = new short[]{(short)0,(short)0,(short)1 ,(short)0,(short)1 ,(short)1 ,(short)1 ,(short)0,(short)0,(short)1 ,(short)0}; + maxCapArray = new short[]{(short)1,(short)1,(short)1000,(short)1,(short)1000,(short)1000,(short)1000,(short)1,(short)1,(short)1000,(short)1}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(413, resourceRoot); + lokPool4Roots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("hide_bristley_naboo"); + resourceRoot.setResourceClass("Bristley Hide"); + resourceRoot.setResourceType("Nabooian"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_HIDE); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_ORGANIC_BRISTLEY_HIDE); + minCapArray = new short[]{(short)0,(short)0,(short)1 ,(short)0,(short)1 ,(short)1 ,(short)1 ,(short)0,(short)0,(short)1 ,(short)0}; + maxCapArray = new short[]{(short)1,(short)1,(short)1000,(short)1,(short)1000,(short)1000,(short)1000,(short)1,(short)1,(short)1000,(short)1}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(414, resourceRoot); + nabooPool4Roots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("hide_bristley_rori"); + resourceRoot.setResourceClass("Bristley Hide"); + resourceRoot.setResourceType("Rori"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_HIDE); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_ORGANIC_BRISTLEY_HIDE); + minCapArray = new short[]{(short)0,(short)0,(short)1 ,(short)0,(short)1 ,(short)1 ,(short)1 ,(short)0,(short)0,(short)1 ,(short)0}; + maxCapArray = new short[]{(short)1,(short)1,(short)1000,(short)1,(short)1000,(short)1000,(short)1000,(short)1,(short)1,(short)1000,(short)1}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(415, resourceRoot); + roriPool4Roots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("hide_bristley_talus"); + resourceRoot.setResourceClass("Bristley Hide"); + resourceRoot.setResourceType("Talusian"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_HIDE); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_ORGANIC_BRISTLEY_HIDE); + minCapArray = new short[]{(short)0,(short)0,(short)1 ,(short)0,(short)1 ,(short)1 ,(short)1 ,(short)0,(short)0,(short)1 ,(short)0}; + maxCapArray = new short[]{(short)1,(short)1,(short)1000,(short)1,(short)1000,(short)1000,(short)1000,(short)1,(short)1,(short)1000,(short)1}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(416, resourceRoot); + talusPool4Roots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("hide_bristley_tatooine"); + resourceRoot.setResourceClass("Bristley Hide"); + resourceRoot.setResourceType("Tatooinian"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_HIDE); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_ORGANIC_BRISTLEY_HIDE); + minCapArray = new short[]{(short)0,(short)0,(short)1 ,(short)0,(short)1 ,(short)1 ,(short)1 ,(short)0,(short)0,(short)1 ,(short)0}; + maxCapArray = new short[]{(short)1,(short)1,(short)1000,(short)1,(short)1000,(short)1000,(short)1000,(short)1,(short)1,(short)1000,(short)1}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(417, resourceRoot); + tattoinePool4Roots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("hide_bristley_yavin4"); + resourceRoot.setResourceClass("Bristley Hide"); + resourceRoot.setResourceType("Yavinian"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_HIDE); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_ORGANIC_BRISTLEY_HIDE); + minCapArray = new short[]{(short)0,(short)0,(short)1 ,(short)0,(short)1 ,(short)1 ,(short)1 ,(short)0,(short)0,(short)1 ,(short)0}; + maxCapArray = new short[]{(short)1,(short)1,(short)1000,(short)1,(short)1000,(short)1000,(short)1000,(short)1,(short)1,(short)1000,(short)1}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(418, resourceRoot); + yavinPool4Roots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("hide_leathery_corellia"); + resourceRoot.setResourceClass("Leathery Hide"); + resourceRoot.setResourceType("Corellian"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_HIDE); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_ORGANIC_LEATHERY_HIDE); + minCapArray = new short[]{(short)0,(short)0,(short)1 ,(short)0,(short)1 ,(short)1 ,(short)1 ,(short)0,(short)0,(short)1 ,(short)0}; + maxCapArray = new short[]{(short)1,(short)1,(short)1000,(short)1,(short)1000,(short)1000,(short)1000,(short)1,(short)1,(short)1000,(short)1}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(419, resourceRoot); + corelliaPool4Roots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("hide_leathery_dantooine"); + resourceRoot.setResourceClass("Leathery Hide"); + resourceRoot.setResourceType("Dantooine"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_HIDE); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_ORGANIC_LEATHERY_HIDE); + minCapArray = new short[]{(short)0,(short)0,(short)1 ,(short)0,(short)1 ,(short)1 ,(short)1 ,(short)0,(short)0,(short)1 ,(short)0}; + maxCapArray = new short[]{(short)1,(short)1,(short)1000,(short)1,(short)1000,(short)1000,(short)1000,(short)1,(short)1,(short)1000,(short)1}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(420, resourceRoot); + dantooinePool4Roots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("hide_leathery_dathomir"); + resourceRoot.setResourceClass("Leathery Hide"); + resourceRoot.setResourceType("Dathomirian"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_HIDE); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_ORGANIC_LEATHERY_HIDE); + minCapArray = new short[]{(short)0,(short)0,(short)1 ,(short)0,(short)1 ,(short)1 ,(short)1 ,(short)0,(short)0,(short)1 ,(short)0}; + maxCapArray = new short[]{(short)1,(short)1,(short)1000,(short)1,(short)1000,(short)1000,(short)1000,(short)1,(short)1,(short)1000,(short)1}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(421, resourceRoot); + dathomirPool4Roots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("hide_leathery_endor"); + resourceRoot.setResourceClass("Leathery Hide"); + resourceRoot.setResourceType("Endorian"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_HIDE); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_ORGANIC_LEATHERY_HIDE); + minCapArray = new short[]{(short)0,(short)0,(short)1 ,(short)0,(short)1 ,(short)1 ,(short)1 ,(short)0,(short)0,(short)1 ,(short)0}; + maxCapArray = new short[]{(short)1,(short)1,(short)1000,(short)1,(short)1000,(short)1000,(short)1000,(short)1,(short)1,(short)1000,(short)1}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(422, resourceRoot); + endorPool4Roots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("hide_leathery_lok"); + resourceRoot.setResourceClass("Leathery Hide"); + resourceRoot.setResourceType("Lokian"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_HIDE); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_ORGANIC_LEATHERY_HIDE); + minCapArray = new short[]{(short)0,(short)0,(short)1 ,(short)0,(short)1 ,(short)1 ,(short)1 ,(short)0,(short)0,(short)1 ,(short)0}; + maxCapArray = new short[]{(short)1,(short)1,(short)1000,(short)1,(short)1000,(short)1000,(short)1000,(short)1,(short)1,(short)1000,(short)1}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(423, resourceRoot); + lokPool4Roots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("hide_leathery_naboo"); + resourceRoot.setResourceClass("Leathery Hide"); + resourceRoot.setResourceType("Nabooian"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_HIDE); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_ORGANIC_LEATHERY_HIDE); + minCapArray = new short[]{(short)0,(short)0,(short)1 ,(short)0,(short)1 ,(short)1 ,(short)1 ,(short)0,(short)0,(short)1 ,(short)0}; + maxCapArray = new short[]{(short)1,(short)1,(short)1000,(short)1,(short)1000,(short)1000,(short)1000,(short)1,(short)1,(short)1000,(short)1}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(424, resourceRoot); + nabooPool4Roots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("hide_leathery_rori"); + resourceRoot.setResourceClass("Leathery Hide"); + resourceRoot.setResourceType("Rori"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_HIDE); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_ORGANIC_LEATHERY_HIDE); + minCapArray = new short[]{(short)0,(short)0,(short)1 ,(short)0,(short)1 ,(short)1 ,(short)1 ,(short)0,(short)0,(short)1 ,(short)0}; + maxCapArray = new short[]{(short)1,(short)1,(short)1000,(short)1,(short)1000,(short)1000,(short)1000,(short)1,(short)1,(short)1000,(short)1}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(425, resourceRoot); + roriPool4Roots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("hide_leathery_talus"); + resourceRoot.setResourceClass("Leathery Hide"); + resourceRoot.setResourceType("Talusian"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_HIDE); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_ORGANIC_LEATHERY_HIDE); + minCapArray = new short[]{(short)0,(short)0,(short)1 ,(short)0,(short)1 ,(short)1 ,(short)1 ,(short)0,(short)0,(short)1 ,(short)0}; + maxCapArray = new short[]{(short)1,(short)1,(short)1000,(short)1,(short)1000,(short)1000,(short)1000,(short)1,(short)1,(short)1000,(short)1}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(426, resourceRoot); + talusPool4Roots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("hide_leathery_tatooine"); + resourceRoot.setResourceClass("Leathery Hide"); + resourceRoot.setResourceType("Tatooinian"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_HIDE); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_ORGANIC_LEATHERY_HIDE); + minCapArray = new short[]{(short)0,(short)0,(short)1 ,(short)0,(short)1 ,(short)1 ,(short)1 ,(short)0,(short)0,(short)1 ,(short)0}; + maxCapArray = new short[]{(short)1,(short)1,(short)1000,(short)1,(short)1000,(short)1000,(short)1000,(short)1,(short)1,(short)1000,(short)1}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(427, resourceRoot); + tattoinePool4Roots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("hide_leathery_yavin4"); + resourceRoot.setResourceClass("Leathery Hide"); + resourceRoot.setResourceType("Yavinian"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_HIDE); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_ORGANIC_LEATHERY_HIDE); + minCapArray = new short[]{(short)0,(short)0,(short)1 ,(short)0,(short)1 ,(short)1 ,(short)1 ,(short)0,(short)0,(short)1 ,(short)0}; + maxCapArray = new short[]{(short)1,(short)1,(short)1000,(short)1,(short)1000,(short)1000,(short)1000,(short)1,(short)1,(short)1000,(short)1}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(428, resourceRoot); + yavinPool4Roots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("hide_scaley_corellia"); + resourceRoot.setResourceClass("Scaley Hide"); + resourceRoot.setResourceType("Corellian"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_HIDE); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_ORGANIC_SCALEY_HIDE); + minCapArray = new short[]{(short)0,(short)0,(short)1 ,(short)0,(short)1 ,(short)1 ,(short)1 ,(short)0,(short)0,(short)1 ,(short)0}; + maxCapArray = new short[]{(short)1,(short)1,(short)1000,(short)1,(short)1000,(short)1000,(short)1000,(short)1,(short)1,(short)1000,(short)1}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(429, resourceRoot); + corelliaPool4Roots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("hide_scaley_dantooine"); + resourceRoot.setResourceClass("Scaley Hide"); + resourceRoot.setResourceType("Dantooine"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_HIDE); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_ORGANIC_SCALEY_HIDE); + minCapArray = new short[]{(short)0,(short)0,(short)1 ,(short)0,(short)1 ,(short)1 ,(short)1 ,(short)0,(short)0,(short)1 ,(short)0}; + maxCapArray = new short[]{(short)1,(short)1,(short)1000,(short)1,(short)1000,(short)1000,(short)1000,(short)1,(short)1,(short)1000,(short)1}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(430, resourceRoot); + dantooinePool4Roots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("hide_scaley_dathomir"); + resourceRoot.setResourceClass("Scaley Hide"); + resourceRoot.setResourceType("Dathomirian"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_HIDE); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_ORGANIC_SCALEY_HIDE); + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(431, resourceRoot); + dathomirPool4Roots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("hide_scaley_endor"); + resourceRoot.setResourceClass("Scaley Hide"); + resourceRoot.setResourceType("Endorian"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_HIDE); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_ORGANIC_SCALEY_HIDE); + minCapArray = new short[]{(short)0,(short)0,(short)1 ,(short)0,(short)1 ,(short)1 ,(short)1 ,(short)0,(short)0,(short)1 ,(short)0}; + maxCapArray = new short[]{(short)1,(short)1,(short)1000,(short)1,(short)1000,(short)1000,(short)1000,(short)1,(short)1,(short)1000,(short)1}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(432, resourceRoot); + endorPool4Roots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("hide_scaley_lok"); + resourceRoot.setResourceClass("Scaley Hide"); + resourceRoot.setResourceType("Lokian"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_HIDE); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_ORGANIC_SCALEY_HIDE); + minCapArray = new short[]{(short)0,(short)0,(short)1 ,(short)0,(short)1 ,(short)1 ,(short)1 ,(short)0,(short)0,(short)1 ,(short)0}; + maxCapArray = new short[]{(short)1,(short)1,(short)1000,(short)1,(short)1000,(short)1000,(short)1000,(short)1,(short)1,(short)1000,(short)1}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(433, resourceRoot); + lokPool4Roots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("hide_scaley_naboo"); + resourceRoot.setResourceClass("Scaley Hide"); + resourceRoot.setResourceType("Nabooian"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_HIDE); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_ORGANIC_SCALEY_HIDE); + minCapArray = new short[]{(short)0,(short)0,(short)1 ,(short)0,(short)1 ,(short)1 ,(short)1 ,(short)0,(short)0,(short)1 ,(short)0}; + maxCapArray = new short[]{(short)1,(short)1,(short)1000,(short)1,(short)1000,(short)1000,(short)1000,(short)1,(short)1,(short)1000,(short)1}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(434, resourceRoot); + nabooPool4Roots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("hide_scaley_rori"); + resourceRoot.setResourceClass("Scaley Hide"); + resourceRoot.setResourceType("Rori"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_HIDE); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_ORGANIC_SCALEY_HIDE); + minCapArray = new short[]{(short)0,(short)0,(short)1 ,(short)0,(short)1 ,(short)1 ,(short)1 ,(short)0,(short)0,(short)1 ,(short)0}; + maxCapArray = new short[]{(short)1,(short)1,(short)1000,(short)1,(short)1000,(short)1000,(short)1000,(short)1,(short)1,(short)1000,(short)1}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(435, resourceRoot); + roriPool4Roots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("hide_scaley_talus"); + resourceRoot.setResourceClass("Scaley Hide"); + resourceRoot.setResourceType("Talusian"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_HIDE); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_ORGANIC_SCALEY_HIDE); + minCapArray = new short[]{(short)0,(short)0,(short)1 ,(short)0,(short)1 ,(short)1 ,(short)1 ,(short)0,(short)0,(short)1 ,(short)0}; + maxCapArray = new short[]{(short)1,(short)1,(short)1000,(short)1,(short)1000,(short)1000,(short)1000,(short)1,(short)1,(short)1000,(short)1}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(436, resourceRoot); + talusPool4Roots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("hide_scaley_tatooine"); + resourceRoot.setResourceClass("Scaley Hide"); + resourceRoot.setResourceType("Tatooinian"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_HIDE); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_ORGANIC_SCALEY_HIDE); + minCapArray = new short[]{(short)0,(short)0,(short)1 ,(short)0,(short)1 ,(short)1 ,(short)1 ,(short)0,(short)0,(short)1 ,(short)0}; + maxCapArray = new short[]{(short)1,(short)1,(short)1000,(short)1,(short)1000,(short)1000,(short)1000,(short)1,(short)1,(short)1000,(short)1}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(437, resourceRoot); + tattoinePool4Roots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("hide_scaley_yavin4"); + resourceRoot.setResourceClass("Scaley Hide"); + resourceRoot.setResourceType("Yavinian"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_HIDE); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_ORGANIC_SCALEY_HIDE); + minCapArray = new short[]{(short)0,(short)0,(short)1 ,(short)0,(short)1 ,(short)1 ,(short)1 ,(short)0,(short)0,(short)1 ,(short)0}; + maxCapArray = new short[]{(short)1,(short)1,(short)1000,(short)1,(short)1000,(short)1000,(short)1000,(short)1,(short)1,(short)1000,(short)1}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(438, resourceRoot); + yavinPool4Roots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("hide_wooly_corellia"); + resourceRoot.setResourceClass("Wooly Hide"); + resourceRoot.setResourceType("Corellian"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_HIDE); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_ORGANIC_WOOLY_HIDE); + minCapArray = new short[]{(short)0,(short)0,(short)1 ,(short)0,(short)1 ,(short)1 ,(short)1 ,(short)0,(short)0,(short)1 ,(short)0}; + maxCapArray = new short[]{(short)1,(short)1,(short)1000,(short)1,(short)1000,(short)1000,(short)1000,(short)1,(short)1,(short)1000,(short)1}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(439, resourceRoot); + corelliaPool4Roots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("hide_wooly_dantooine"); + resourceRoot.setResourceClass("Wooly Hide"); + resourceRoot.setResourceType("Dantooine"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_HIDE); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_ORGANIC_WOOLY_HIDE); + minCapArray = new short[]{(short)0,(short)0,(short)1 ,(short)0,(short)1 ,(short)1 ,(short)1 ,(short)0,(short)0,(short)1 ,(short)0}; + maxCapArray = new short[]{(short)1,(short)1,(short)1000,(short)1,(short)1000,(short)1000,(short)1000,(short)1,(short)1,(short)1000,(short)1}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(440, resourceRoot); + dantooinePool4Roots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("hide_wooly_dathomir"); + resourceRoot.setResourceClass("Wooly Hide"); + resourceRoot.setResourceType("Dathomirian"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_HIDE); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_ORGANIC_WOOLY_HIDE); + minCapArray = new short[]{(short)0,(short)0,(short)1 ,(short)0,(short)1 ,(short)1 ,(short)1 ,(short)0,(short)0,(short)1 ,(short)0}; + maxCapArray = new short[]{(short)1,(short)1,(short)1000,(short)1,(short)1000,(short)1000,(short)1000,(short)1,(short)1,(short)1000,(short)1}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(441, resourceRoot); + dathomirPool4Roots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("hide_wooly_endor"); + resourceRoot.setResourceClass("Wooly Hide"); + resourceRoot.setResourceType("Endorian"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_HIDE); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_ORGANIC_WOOLY_HIDE); + minCapArray = new short[]{(short)0,(short)0,(short)1 ,(short)0,(short)1 ,(short)1 ,(short)1 ,(short)0,(short)0,(short)1 ,(short)0}; + maxCapArray = new short[]{(short)1,(short)1,(short)1000,(short)1,(short)1000,(short)1000,(short)1000,(short)1,(short)1,(short)1000,(short)1}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(442, resourceRoot); + endorPool4Roots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("hide_wooly_lok"); + resourceRoot.setResourceClass("Wooly Hide"); + resourceRoot.setResourceType("Lokian"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_HIDE); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_ORGANIC_WOOLY_HIDE); + minCapArray = new short[]{(short)0,(short)0,(short)1 ,(short)0,(short)1 ,(short)1 ,(short)1 ,(short)0,(short)0,(short)1 ,(short)0}; + maxCapArray = new short[]{(short)1,(short)1,(short)1000,(short)1,(short)1000,(short)1000,(short)1000,(short)1,(short)1,(short)1000,(short)1}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(443, resourceRoot); + lokPool4Roots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("hide_wooly_naboo"); + resourceRoot.setResourceClass("Wooly Hide"); + resourceRoot.setResourceType("Nabooian"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_HIDE); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_ORGANIC_WOOLY_HIDE); + minCapArray = new short[]{(short)0,(short)0,(short)1 ,(short)0,(short)1 ,(short)1 ,(short)1 ,(short)0,(short)0,(short)1 ,(short)0}; + maxCapArray = new short[]{(short)1,(short)1,(short)1000,(short)1,(short)1000,(short)1000,(short)1000,(short)1,(short)1,(short)1000,(short)1}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(444, resourceRoot); + nabooPool4Roots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("hide_wooly_rori"); + resourceRoot.setResourceClass("Wooly Hide"); + resourceRoot.setResourceType("Rori"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_HIDE); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_ORGANIC_WOOLY_HIDE); + minCapArray = new short[]{(short)0,(short)0,(short)1 ,(short)0,(short)1 ,(short)1 ,(short)1 ,(short)0,(short)0,(short)1 ,(short)0}; + maxCapArray = new short[]{(short)1,(short)1,(short)1000,(short)1,(short)1000,(short)1000,(short)1000,(short)1,(short)1,(short)1000,(short)1}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(445, resourceRoot); + roriPool4Roots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("hide_wooly_talus"); + resourceRoot.setResourceClass("Wooly Hide"); + resourceRoot.setResourceType("Talusian"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_HIDE); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_ORGANIC_WOOLY_HIDE); + minCapArray = new short[]{(short)0,(short)0,(short)1 ,(short)0,(short)1 ,(short)1 ,(short)1 ,(short)0,(short)0,(short)1 ,(short)0}; + maxCapArray = new short[]{(short)1,(short)1,(short)1000,(short)1,(short)1000,(short)1000,(short)1000,(short)1,(short)1,(short)1000,(short)1}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(446, resourceRoot); + talusPool4Roots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("hide_wooly_tatooine"); + resourceRoot.setResourceClass("Wooly Hide"); + resourceRoot.setResourceType("Tatooinian"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_HIDE); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_ORGANIC_WOOLY_HIDE); + minCapArray = new short[]{(short)0,(short)0,(short)1 ,(short)0,(short)1 ,(short)1 ,(short)1 ,(short)0,(short)0,(short)1 ,(short)0}; + maxCapArray = new short[]{(short)1,(short)1,(short)1000,(short)1,(short)1000,(short)1000,(short)1000,(short)1,(short)1,(short)1000,(short)1}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(447, resourceRoot); + tattoinePool4Roots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("hide_wooly_yavin4"); + resourceRoot.setResourceClass("Wooly Hide"); + resourceRoot.setResourceType("Yavinian"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_HIDE); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_ORGANIC_WOOLY_HIDE); + minCapArray = new short[]{(short)0,(short)0,(short)1 ,(short)0,(short)1 ,(short)1 ,(short)1 ,(short)0,(short)0,(short)1 ,(short)0}; + maxCapArray = new short[]{(short)1,(short)1,(short)1000,(short)1,(short)1000,(short)1000,(short)1000,(short)1,(short)1,(short)1000,(short)1}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(448, resourceRoot); + yavinPool4Roots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("meat_avian_corellia"); + resourceRoot.setResourceClass("Avian Meat"); + resourceRoot.setResourceType("Corellian"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_MEAT); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_ORGANIC_FOOD); + // Avian Meat: FL 1 - 700, PE 300 - 1000 + minCapArray = new short[]{(short)0,(short)0,(short)1 ,(short)0,(short)0,(short)0,(short)0,(short)0,(short)300 ,(short)1 ,(short)1}; + maxCapArray = new short[]{(short)1,(short)1,(short)1000,(short)1,(short)1,(short)1,(short)1,(short)1,(short)1000,(short)1000,(short)700}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(449, resourceRoot); + corelliaPool4Roots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("meat_avian_dantooine"); + resourceRoot.setResourceClass("Avian Meat"); + resourceRoot.setResourceType("Dantooine"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_MEAT); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_ORGANIC_FOOD); + minCapArray = new short[]{(short)0,(short)0,(short)1 ,(short)0,(short)0,(short)0,(short)0,(short)0,(short)300 ,(short)1 ,(short)1}; + maxCapArray = new short[]{(short)1,(short)1,(short)1000,(short)1,(short)1,(short)1,(short)1,(short)1,(short)1000,(short)1000,(short)700}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(450, resourceRoot); + dantooinePool4Roots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("meat_avian_dathomir"); + resourceRoot.setResourceClass("Avian Meat"); + resourceRoot.setResourceType("Dathomirian"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_MEAT); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_ORGANIC_FOOD); + minCapArray = new short[]{(short)0,(short)0,(short)1 ,(short)0,(short)0,(short)0,(short)0,(short)0,(short)300 ,(short)1 ,(short)1}; + maxCapArray = new short[]{(short)1,(short)1,(short)1000,(short)1,(short)1,(short)1,(short)1,(short)1,(short)1000,(short)1000,(short)700}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(451, resourceRoot); + dathomirPool4Roots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("meat_avian_endor"); + resourceRoot.setResourceClass("Avian Meat"); + resourceRoot.setResourceType("Endorian"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_MEAT); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_ORGANIC_FOOD); + minCapArray = new short[]{(short)0,(short)0,(short)1 ,(short)0,(short)0,(short)0,(short)0,(short)0,(short)300 ,(short)1 ,(short)1}; + maxCapArray = new short[]{(short)1,(short)1,(short)1000,(short)1,(short)1,(short)1,(short)1,(short)1,(short)1000,(short)1000,(short)700}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(452, resourceRoot); + endorPool4Roots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("meat_avian_lok"); + resourceRoot.setResourceClass("Avian Meat"); + resourceRoot.setResourceType("Lokian"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_MEAT); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_ORGANIC_FOOD); + minCapArray = new short[]{(short)0,(short)0,(short)1 ,(short)0,(short)0,(short)0,(short)0,(short)0,(short)300 ,(short)1 ,(short)1}; + maxCapArray = new short[]{(short)1,(short)1,(short)1000,(short)1,(short)1,(short)1,(short)1,(short)1,(short)1000,(short)1000,(short)700}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(453, resourceRoot); + lokPool4Roots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("meat_avian_naboo"); + resourceRoot.setResourceClass("Avian Meat"); + resourceRoot.setResourceType("Nabooian"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_MEAT); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_ORGANIC_FOOD); + minCapArray = new short[]{(short)0,(short)0,(short)1 ,(short)0,(short)0,(short)0,(short)0,(short)0,(short)300 ,(short)1 ,(short)1}; + maxCapArray = new short[]{(short)1,(short)1,(short)1000,(short)1,(short)1,(short)1,(short)1,(short)1,(short)1000,(short)1000,(short)700}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(454, resourceRoot); + nabooPool4Roots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("meat_avian_rori"); + resourceRoot.setResourceClass("Avian Meat"); + resourceRoot.setResourceType("Rori"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_MEAT); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_ORGANIC_FOOD); + minCapArray = new short[]{(short)0,(short)0,(short)1 ,(short)0,(short)0,(short)0,(short)0,(short)0,(short)300 ,(short)1 ,(short)1}; + maxCapArray = new short[]{(short)1,(short)1,(short)1000,(short)1,(short)1,(short)1,(short)1,(short)1,(short)1000,(short)1000,(short)700}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(455, resourceRoot); + roriPool4Roots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("meat_avian_talus"); + resourceRoot.setResourceClass("Avian Meat"); + resourceRoot.setResourceType("Talusian"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_MEAT); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_ORGANIC_FOOD); + minCapArray = new short[]{(short)0,(short)0,(short)1 ,(short)0,(short)0,(short)0,(short)0,(short)0,(short)300 ,(short)1 ,(short)1}; + maxCapArray = new short[]{(short)1,(short)1,(short)1000,(short)1,(short)1,(short)1,(short)1,(short)1,(short)1000,(short)1000,(short)700}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(456, resourceRoot); + talusPool4Roots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("meat_avian_tatooine"); + resourceRoot.setResourceClass("Avian Meat"); + resourceRoot.setResourceType("Tatooinian"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_MEAT); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_ORGANIC_FOOD); + minCapArray = new short[]{(short)0,(short)0,(short)1 ,(short)0,(short)0,(short)0,(short)0,(short)0,(short)300 ,(short)1 ,(short)1}; + maxCapArray = new short[]{(short)1,(short)1,(short)1000,(short)1,(short)1,(short)1,(short)1,(short)1,(short)1000,(short)1000,(short)700}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(457, resourceRoot); + tattoinePool4Roots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("meat_avian_yavin4"); + resourceRoot.setResourceClass("Avian Meat"); + resourceRoot.setResourceType("Yavinian"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_MEAT); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_ORGANIC_FOOD); + minCapArray = new short[]{(short)0,(short)0,(short)1 ,(short)0,(short)0,(short)0,(short)0,(short)0,(short)300 ,(short)1 ,(short)1}; + maxCapArray = new short[]{(short)1,(short)1,(short)1000,(short)1,(short)1,(short)1,(short)1,(short)1,(short)1000,(short)1000,(short)700}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(458, resourceRoot); + yavinPool4Roots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("meat_carnivore_corellia"); + resourceRoot.setResourceClass("Carnivore Meat"); + resourceRoot.setResourceType("Corellian"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_MEAT); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_ORGANIC_FOOD); + // Carnivore Meat: FL 300 - 1000, PE 300 - 1000 + minCapArray = new short[]{(short)0,(short)0,(short)1 ,(short)0,(short)0,(short)0,(short)0,(short)0,(short)300 ,(short)1 ,(short)300}; + maxCapArray = new short[]{(short)1,(short)1,(short)1000,(short)1,(short)1,(short)1,(short)1,(short)1,(short)1000,(short)1000,(short)1000}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(459, resourceRoot); + corelliaPool4Roots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("meat_carnivore_dantooine"); + resourceRoot.setResourceClass("Carnivore Meat"); + resourceRoot.setResourceType("Dantooine"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_MEAT); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_ORGANIC_FOOD); + minCapArray = new short[]{(short)0,(short)0,(short)1 ,(short)0,(short)0,(short)0,(short)0,(short)0,(short)300 ,(short)1 ,(short)300}; + maxCapArray = new short[]{(short)1,(short)1,(short)1000,(short)1,(short)1,(short)1,(short)1,(short)1,(short)1000,(short)1000,(short)1000}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(460, resourceRoot); + dantooinePool4Roots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("meat_carnivore_dathomir"); + resourceRoot.setResourceClass("Carnivore Meat"); + resourceRoot.setResourceType("Dathomirian"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_MEAT); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_ORGANIC_FOOD); + minCapArray = new short[]{(short)0,(short)0,(short)1 ,(short)0,(short)0,(short)0,(short)0,(short)0,(short)300 ,(short)1 ,(short)300}; + maxCapArray = new short[]{(short)1,(short)1,(short)1000,(short)1,(short)1,(short)1,(short)1,(short)1,(short)1000,(short)1000,(short)1000}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(461, resourceRoot); + dathomirPool4Roots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("meat_carnivore_endor"); + resourceRoot.setResourceClass("Carnivore Meat"); + resourceRoot.setResourceType("Endorian"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_MEAT); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_ORGANIC_FOOD); + minCapArray = new short[]{(short)0,(short)0,(short)1 ,(short)0,(short)0,(short)0,(short)0,(short)0,(short)300 ,(short)1 ,(short)300}; + maxCapArray = new short[]{(short)1,(short)1,(short)1000,(short)1,(short)1,(short)1,(short)1,(short)1,(short)1000,(short)1000,(short)1000}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(462, resourceRoot); + endorPool4Roots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("meat_carnivore_lok"); + resourceRoot.setResourceClass("Carnivore Meat"); + resourceRoot.setResourceType("Lokian"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_MEAT); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_ORGANIC_FOOD); + minCapArray = new short[]{(short)0,(short)0,(short)1 ,(short)0,(short)0,(short)0,(short)0,(short)0,(short)300 ,(short)1 ,(short)300}; + maxCapArray = new short[]{(short)1,(short)1,(short)1000,(short)1,(short)1,(short)1,(short)1,(short)1,(short)1000,(short)1000,(short)1000}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(463, resourceRoot); + lokPool4Roots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("meat_carnivore_naboo"); + resourceRoot.setResourceClass("Carnivore Meat"); + resourceRoot.setResourceType("Nabooian"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_MEAT); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_ORGANIC_FOOD); + minCapArray = new short[]{(short)0,(short)0,(short)1 ,(short)0,(short)0,(short)0,(short)0,(short)0,(short)300 ,(short)1 ,(short)300}; + maxCapArray = new short[]{(short)1,(short)1,(short)1000,(short)1,(short)1,(short)1,(short)1,(short)1,(short)1000,(short)1000,(short)1000}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(464, resourceRoot); + nabooPool4Roots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("meat_carnivore_rori"); + resourceRoot.setResourceClass("Carnivore Meat"); + resourceRoot.setResourceType("Rori"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_MEAT); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_ORGANIC_FOOD); + minCapArray = new short[]{(short)0,(short)0,(short)1 ,(short)0,(short)0,(short)0,(short)0,(short)0,(short)300 ,(short)1 ,(short)300}; + maxCapArray = new short[]{(short)1,(short)1,(short)1000,(short)1,(short)1,(short)1,(short)1,(short)1,(short)1000,(short)1000,(short)1000}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(465, resourceRoot); + roriPool4Roots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("meat_carnivore_talus"); + resourceRoot.setResourceClass("Carnivore Meat"); + resourceRoot.setResourceType("Talusian"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_MEAT); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_ORGANIC_FOOD); + minCapArray = new short[]{(short)0,(short)0,(short)1 ,(short)0,(short)0,(short)0,(short)0,(short)0,(short)300 ,(short)1 ,(short)300}; + maxCapArray = new short[]{(short)1,(short)1,(short)1000,(short)1,(short)1,(short)1,(short)1,(short)1,(short)1000,(short)1000,(short)1000}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(466, resourceRoot); + talusPool4Roots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("meat_carnivore_tatooine"); + resourceRoot.setResourceClass("Carnivore Meat"); + resourceRoot.setResourceType("Tatooinian"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_MEAT); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_ORGANIC_FOOD); + minCapArray = new short[]{(short)0,(short)0,(short)1 ,(short)0,(short)0,(short)0,(short)0,(short)0,(short)300 ,(short)1 ,(short)300}; + maxCapArray = new short[]{(short)1,(short)1,(short)1000,(short)1,(short)1,(short)1,(short)1,(short)1,(short)1000,(short)1000,(short)1000}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(467, resourceRoot); + tattoinePool4Roots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("meat_carnivore_yavin4"); + resourceRoot.setResourceClass("Carnivore Meat"); + resourceRoot.setResourceType("Yavinian"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_MEAT); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_ORGANIC_FOOD); + minCapArray = new short[]{(short)0,(short)0,(short)1 ,(short)0,(short)0,(short)0,(short)0,(short)0,(short)300 ,(short)1 ,(short)300}; + maxCapArray = new short[]{(short)1,(short)1,(short)1000,(short)1,(short)1,(short)1,(short)1,(short)1,(short)1000,(short)1000,(short)1000}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(468, resourceRoot); + yavinPool4Roots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("meat_domesticated_corellia"); + resourceRoot.setResourceClass("Domesticated Meat"); + resourceRoot.setResourceType("Corellian"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_MEAT); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_ORGANIC_FOOD); + //Domesticated Meat: FL 300 - 1000, PE 1 - 700 + minCapArray = new short[]{(short)0,(short)0,(short)1 ,(short)0,(short)0,(short)0,(short)0,(short)0,(short)1 ,(short)1 ,(short)300}; + maxCapArray = new short[]{(short)1,(short)1,(short)1000,(short)1,(short)1,(short)1,(short)1,(short)1,(short)700,(short)1000,(short)1000}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(469, resourceRoot); + corelliaPool4Roots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("meat_domesticated_dantooine"); + resourceRoot.setResourceClass("Domesticated Meat"); + resourceRoot.setResourceType("Dantooine"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_MEAT); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_ORGANIC_FOOD); + minCapArray = new short[]{(short)0,(short)0,(short)1 ,(short)0,(short)0,(short)0,(short)0,(short)0,(short)1 ,(short)1 ,(short)300}; + maxCapArray = new short[]{(short)1,(short)1,(short)1000,(short)1,(short)1,(short)1,(short)1,(short)1,(short)700,(short)1000,(short)1000}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(470, resourceRoot); + dantooinePool4Roots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("meat_domesticated_dathomir"); + resourceRoot.setResourceClass("Domesticated Meat"); + resourceRoot.setResourceType("Dathomirian"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_MEAT); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_ORGANIC_FOOD); + minCapArray = new short[]{(short)0,(short)0,(short)1 ,(short)0,(short)0,(short)0,(short)0,(short)0,(short)1 ,(short)1 ,(short)300}; + maxCapArray = new short[]{(short)1,(short)1,(short)1000,(short)1,(short)1,(short)1,(short)1,(short)1,(short)700,(short)1000,(short)1000}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(471, resourceRoot); + dathomirPool4Roots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("meat_domesticated_endor"); + resourceRoot.setResourceClass("Domesticated Meat"); + resourceRoot.setResourceType("Endorian"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_MEAT); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_ORGANIC_FOOD); + minCapArray = new short[]{(short)0,(short)0,(short)1 ,(short)0,(short)0,(short)0,(short)0,(short)0,(short)1 ,(short)1 ,(short)300}; + maxCapArray = new short[]{(short)1,(short)1,(short)1000,(short)1,(short)1,(short)1,(short)1,(short)1,(short)700,(short)1000,(short)1000}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(472, resourceRoot); + endorPool4Roots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("meat_domesticated_lok"); + resourceRoot.setResourceClass("Domesticated Meat"); + resourceRoot.setResourceType("Lokian"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_MEAT); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_ORGANIC_FOOD); + minCapArray = new short[]{(short)0,(short)0,(short)1 ,(short)0,(short)0,(short)0,(short)0,(short)0,(short)1 ,(short)1 ,(short)300}; + maxCapArray = new short[]{(short)1,(short)1,(short)1000,(short)1,(short)1,(short)1,(short)1,(short)1,(short)700,(short)1000,(short)1000}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(473, resourceRoot); + lokPool4Roots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("meat_domesticated_naboo"); + resourceRoot.setResourceClass("Domesticated Meat"); + resourceRoot.setResourceType("Nabooian"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_MEAT); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_ORGANIC_FOOD); + minCapArray = new short[]{(short)0,(short)0,(short)1 ,(short)0,(short)0,(short)0,(short)0,(short)0,(short)1 ,(short)1 ,(short)300}; + maxCapArray = new short[]{(short)1,(short)1,(short)1000,(short)1,(short)1,(short)1,(short)1,(short)1,(short)700,(short)1000,(short)1000}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(474, resourceRoot); + nabooPool4Roots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("meat_domesticated_rori"); + resourceRoot.setResourceClass("Domesticated Meat"); + resourceRoot.setResourceType("Rori"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_MEAT); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_ORGANIC_FOOD); + minCapArray = new short[]{(short)0,(short)0,(short)1 ,(short)0,(short)0,(short)0,(short)0,(short)0,(short)1 ,(short)1 ,(short)300}; + maxCapArray = new short[]{(short)1,(short)1,(short)1000,(short)1,(short)1,(short)1,(short)1,(short)1,(short)700,(short)1000,(short)1000}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(475, resourceRoot); + roriPool4Roots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("meat_domesticated_talus"); + resourceRoot.setResourceClass("Domesticated Meat"); + resourceRoot.setResourceType("Talusian"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_MEAT); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_ORGANIC_FOOD); + minCapArray = new short[]{(short)0,(short)0,(short)1 ,(short)0,(short)0,(short)0,(short)0,(short)0,(short)1 ,(short)1 ,(short)300}; + maxCapArray = new short[]{(short)1,(short)1,(short)1000,(short)1,(short)1,(short)1,(short)1,(short)1,(short)700,(short)1000,(short)1000}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(476, resourceRoot); + talusPool4Roots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("meat_domesticated_tatooine"); + resourceRoot.setResourceClass("Domesticated Meat"); + resourceRoot.setResourceType("Tatooinian"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_MEAT); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_ORGANIC_FOOD); + minCapArray = new short[]{(short)0,(short)0,(short)1 ,(short)0,(short)0,(short)0,(short)0,(short)0,(short)1 ,(short)1 ,(short)300}; + maxCapArray = new short[]{(short)1,(short)1,(short)1000,(short)1,(short)1,(short)1,(short)1,(short)1,(short)700,(short)1000,(short)1000}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(477, resourceRoot); + tattoinePool4Roots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("meat_domesticated_yavin4"); + resourceRoot.setResourceClass("Domesticated Meat"); + resourceRoot.setResourceType("Yavinian"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_MEAT); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_ORGANIC_FOOD); + minCapArray = new short[]{(short)0,(short)0,(short)1 ,(short)0,(short)0,(short)0,(short)0,(short)0,(short)1 ,(short)1 ,(short)300}; + maxCapArray = new short[]{(short)1,(short)1,(short)1000,(short)1,(short)1,(short)1,(short)1,(short)1,(short)700,(short)1000,(short)1000}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(478, resourceRoot); + yavinPool4Roots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("meat_herbivore_corellia"); + resourceRoot.setResourceClass("Herbivore Meat"); + resourceRoot.setResourceType("Corellian"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_MEAT); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_ORGANIC_FOOD); + // Herbivore Meat: FL 1 - 700, PE 1 - 700 + minCapArray = new short[]{(short)0,(short)0,(short)1 ,(short)0,(short)0,(short)0,(short)0,(short)0,(short)1 ,(short)1 ,(short)1}; + maxCapArray = new short[]{(short)1,(short)1,(short)1000,(short)1,(short)1,(short)1,(short)1,(short)1,(short)700,(short)1000,(short)700}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(479, resourceRoot); + corelliaPool4Roots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("meat_herbivore_dantooine"); + resourceRoot.setResourceClass("Herbivore Meat"); + resourceRoot.setResourceType("Dantooine"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_MEAT); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_ORGANIC_FOOD); + minCapArray = new short[]{(short)0,(short)0,(short)1 ,(short)0,(short)0,(short)0,(short)0,(short)0,(short)1 ,(short)1 ,(short)1}; + maxCapArray = new short[]{(short)1,(short)1,(short)1000,(short)1,(short)1,(short)1,(short)1,(short)1,(short)700,(short)1000,(short)700}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(480, resourceRoot); + dantooinePool4Roots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("meat_herbivore_dathomir"); + resourceRoot.setResourceClass("Herbivore Meat"); + resourceRoot.setResourceType("Dathomirian"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_MEAT); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_ORGANIC_FOOD); + minCapArray = new short[]{(short)0,(short)0,(short)1 ,(short)0,(short)0,(short)0,(short)0,(short)0,(short)1 ,(short)1 ,(short)1}; + maxCapArray = new short[]{(short)1,(short)1,(short)1000,(short)1,(short)1,(short)1,(short)1,(short)1,(short)700,(short)1000,(short)700}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(481, resourceRoot); + dathomirPool4Roots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("meat_herbivore_endor"); + resourceRoot.setResourceClass("Herbivore Meat"); + resourceRoot.setResourceType("Endorian"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_MEAT); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_ORGANIC_FOOD); + minCapArray = new short[]{(short)0,(short)0,(short)1 ,(short)0,(short)0,(short)0,(short)0,(short)0,(short)1 ,(short)1 ,(short)1}; + maxCapArray = new short[]{(short)1,(short)1,(short)1000,(short)1,(short)1,(short)1,(short)1,(short)1,(short)700,(short)1000,(short)700}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(482, resourceRoot); + endorPool4Roots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("meat_herbivore_lok"); + resourceRoot.setResourceClass("Herbivore Meat"); + resourceRoot.setResourceType("Lokian"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_MEAT); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_ORGANIC_FOOD); + minCapArray = new short[]{(short)0,(short)0,(short)1 ,(short)0,(short)0,(short)0,(short)0,(short)0,(short)1 ,(short)1 ,(short)1}; + maxCapArray = new short[]{(short)1,(short)1,(short)1000,(short)1,(short)1,(short)1,(short)1,(short)1,(short)700,(short)1000,(short)700}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(483, resourceRoot); + lokPool4Roots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("meat_herbivore_naboo"); + resourceRoot.setResourceClass("Herbivore Meat"); + resourceRoot.setResourceType("Nabooian"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_MEAT); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_ORGANIC_FOOD); + minCapArray = new short[]{(short)0,(short)0,(short)1 ,(short)0,(short)0,(short)0,(short)0,(short)0,(short)1 ,(short)1 ,(short)1}; + maxCapArray = new short[]{(short)1,(short)1,(short)1000,(short)1,(short)1,(short)1,(short)1,(short)1,(short)700,(short)1000,(short)700}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(484, resourceRoot); + nabooPool4Roots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("meat_herbivore_rori"); + resourceRoot.setResourceClass("Herbivore Meat"); + resourceRoot.setResourceType("Rori"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_MEAT); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_ORGANIC_FOOD); + minCapArray = new short[]{(short)0,(short)0,(short)1 ,(short)0,(short)0,(short)0,(short)0,(short)0,(short)1 ,(short)1 ,(short)1}; + maxCapArray = new short[]{(short)1,(short)1,(short)1000,(short)1,(short)1,(short)1,(short)1,(short)1,(short)700,(short)1000,(short)700}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(485, resourceRoot); + roriPool4Roots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("meat_herbivore_talus"); + resourceRoot.setResourceClass("Herbivore Meat"); + resourceRoot.setResourceType("Talusian"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_MEAT); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_ORGANIC_FOOD); + minCapArray = new short[]{(short)0,(short)0,(short)1 ,(short)0,(short)0,(short)0,(short)0,(short)0,(short)1 ,(short)1 ,(short)1}; + maxCapArray = new short[]{(short)1,(short)1,(short)1000,(short)1,(short)1,(short)1,(short)1,(short)1,(short)700,(short)1000,(short)700}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(486, resourceRoot); + talusPool4Roots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("meat_herbivore_tatooine"); + resourceRoot.setResourceClass("Herbivore Meat"); + resourceRoot.setResourceType("Tatooinian"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_MEAT); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_ORGANIC_FOOD); + minCapArray = new short[]{(short)0,(short)0,(short)1 ,(short)0,(short)0,(short)0,(short)0,(short)0,(short)1 ,(short)1 ,(short)1}; + maxCapArray = new short[]{(short)1,(short)1,(short)1000,(short)1,(short)1,(short)1,(short)1,(short)1,(short)700,(short)1000,(short)700}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(487, resourceRoot); + tattoinePool4Roots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("meat_herbivore_yavin4"); + resourceRoot.setResourceClass("Herbivore Meat"); + resourceRoot.setResourceType("Yavinian"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_MEAT); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_ORGANIC_FOOD); + minCapArray = new short[]{(short)0,(short)0,(short)1 ,(short)0,(short)0,(short)0,(short)0,(short)0,(short)1 ,(short)1 ,(short)1}; + maxCapArray = new short[]{(short)1,(short)1,(short)1000,(short)1,(short)1,(short)1,(short)1,(short)1,(short)700,(short)1000,(short)700}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(488, resourceRoot); + yavinPool4Roots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("meat_insect_corellia"); + resourceRoot.setResourceClass("Insect Meat"); + resourceRoot.setResourceType("Corellian"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_MEAT); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_ORGANIC_FOOD); + //Insect Meat: PE 300 - 1000 + minCapArray = new short[]{(short)0,(short)0,(short)1 ,(short)0,(short)0,(short)0,(short)0,(short)0,(short)300 ,(short)1 ,(short)1}; + maxCapArray = new short[]{(short)1,(short)1,(short)1000,(short)1,(short)1,(short)1,(short)1,(short)1,(short)1000,(short)1000,(short)1000}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(489, resourceRoot); + corelliaPool4Roots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("meat_insect_dantooine"); + resourceRoot.setResourceClass("Insect Meat"); + resourceRoot.setResourceType("Dantooine"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_MEAT); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_ORGANIC_FOOD); + minCapArray = new short[]{(short)0,(short)0,(short)1 ,(short)0,(short)0,(short)0,(short)0,(short)0,(short)300 ,(short)1 ,(short)1}; + maxCapArray = new short[]{(short)1,(short)1,(short)1000,(short)1,(short)1,(short)1,(short)1,(short)1,(short)1000,(short)1000,(short)1000}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(490, resourceRoot); + dantooinePool4Roots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("meat_insect_dathomir"); + resourceRoot.setResourceClass("Insect Meat"); + resourceRoot.setResourceType("Dathomirian"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_MEAT); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_ORGANIC_FOOD); + minCapArray = new short[]{(short)0,(short)0,(short)1 ,(short)0,(short)0,(short)0,(short)0,(short)0,(short)300 ,(short)1 ,(short)1}; + maxCapArray = new short[]{(short)1,(short)1,(short)1000,(short)1,(short)1,(short)1,(short)1,(short)1,(short)1000,(short)1000,(short)1000}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(491, resourceRoot); + dathomirPool4Roots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("meat_insect_endor"); + resourceRoot.setResourceClass("Insect Meat"); + resourceRoot.setResourceType("Endorian"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_MEAT); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_ORGANIC_FOOD); + minCapArray = new short[]{(short)0,(short)0,(short)1 ,(short)0,(short)0,(short)0,(short)0,(short)0,(short)300 ,(short)1 ,(short)1}; + maxCapArray = new short[]{(short)1,(short)1,(short)1000,(short)1,(short)1,(short)1,(short)1,(short)1,(short)1000,(short)1000,(short)1000}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(492, resourceRoot); + endorPool4Roots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("meat_insect_lok"); + resourceRoot.setResourceClass("Insect Meat"); + resourceRoot.setResourceType("Lokian"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_MEAT); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_ORGANIC_FOOD); + minCapArray = new short[]{(short)0,(short)0,(short)1 ,(short)0,(short)0,(short)0,(short)0,(short)0,(short)300 ,(short)1 ,(short)1}; + maxCapArray = new short[]{(short)1,(short)1,(short)1000,(short)1,(short)1,(short)1,(short)1,(short)1,(short)1000,(short)1000,(short)1000}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(493, resourceRoot); + lokPool4Roots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("meat_insect_naboo"); + resourceRoot.setResourceClass("Insect Meat"); + resourceRoot.setResourceType("Nabooian"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_MEAT); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_ORGANIC_FOOD); + minCapArray = new short[]{(short)0,(short)0,(short)1 ,(short)0,(short)0,(short)0,(short)0,(short)0,(short)300 ,(short)1 ,(short)1}; + maxCapArray = new short[]{(short)1,(short)1,(short)1000,(short)1,(short)1,(short)1,(short)1,(short)1,(short)1000,(short)1000,(short)1000}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(494, resourceRoot); + nabooPool4Roots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("meat_insect_rori"); + resourceRoot.setResourceClass("Insect Meat"); + resourceRoot.setResourceType("Rori"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_MEAT); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_ORGANIC_FOOD); + minCapArray = new short[]{(short)0,(short)0,(short)1 ,(short)0,(short)0,(short)0,(short)0,(short)0,(short)300 ,(short)1 ,(short)1}; + maxCapArray = new short[]{(short)1,(short)1,(short)1000,(short)1,(short)1,(short)1,(short)1,(short)1,(short)1000,(short)1000,(short)1000}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(495, resourceRoot); + roriPool4Roots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("meat_insect_talus"); + resourceRoot.setResourceClass("Insect Meat"); + resourceRoot.setResourceType("Talusian"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_MEAT); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_ORGANIC_FOOD); + minCapArray = new short[]{(short)0,(short)0,(short)1 ,(short)0,(short)0,(short)0,(short)0,(short)0,(short)300 ,(short)1 ,(short)1}; + maxCapArray = new short[]{(short)1,(short)1,(short)1000,(short)1,(short)1,(short)1,(short)1,(short)1,(short)1000,(short)1000,(short)1000}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(496, resourceRoot); + talusPool4Roots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("meat_insect_tatooine"); + resourceRoot.setResourceClass("Insect Meat"); + resourceRoot.setResourceType("Tatooinian"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_MEAT); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_ORGANIC_FOOD); + minCapArray = new short[]{(short)0,(short)0,(short)1 ,(short)0,(short)0,(short)0,(short)0,(short)0,(short)300 ,(short)1 ,(short)1}; + maxCapArray = new short[]{(short)1,(short)1,(short)1000,(short)1,(short)1,(short)1,(short)1,(short)1,(short)1000,(short)1000,(short)1000}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(497, resourceRoot); + tattoinePool4Roots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("meat_insect_yavin4"); + resourceRoot.setResourceClass("Insect Meat"); + resourceRoot.setResourceType("Yavinian"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_MEAT); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_ORGANIC_FOOD); + minCapArray = new short[]{(short)0,(short)0,(short)1 ,(short)0,(short)0,(short)0,(short)0,(short)0,(short)300 ,(short)1 ,(short)1}; + maxCapArray = new short[]{(short)1,(short)1,(short)1000,(short)1,(short)1,(short)1,(short)1,(short)1,(short)1000,(short)1000,(short)1000}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(498, resourceRoot); + yavinPool4Roots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("meat_wild_corellia"); + resourceRoot.setResourceClass("Wild Meat"); + resourceRoot.setResourceType("Corellian"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_MEAT); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_ORGANIC_FOOD); + // Wild Meat: FL 1 - 700, PE 300 - 1000 + minCapArray = new short[]{(short)0,(short)0,(short)1 ,(short)0,(short)0,(short)0,(short)0,(short)0,(short)300 ,(short)1 ,(short)1}; + maxCapArray = new short[]{(short)1,(short)1,(short)1000,(short)1,(short)1,(short)1,(short)1,(short)1,(short)1000,(short)1000,(short)700}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(499, resourceRoot); + corelliaPool4Roots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("meat_wild_dantooine"); + resourceRoot.setResourceClass("Wild Meat"); + resourceRoot.setResourceType("Dantooine"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_MEAT); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_ORGANIC_FOOD); + minCapArray = new short[]{(short)0,(short)0,(short)1 ,(short)0,(short)0,(short)0,(short)0,(short)0,(short)300 ,(short)1 ,(short)1}; + maxCapArray = new short[]{(short)1,(short)1,(short)1000,(short)1,(short)1,(short)1,(short)1,(short)1,(short)1000,(short)1000,(short)700}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(500, resourceRoot); + dantooinePool4Roots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("meat_wild_dathomir"); + resourceRoot.setResourceClass("Wild Meat"); + resourceRoot.setResourceType("Dathomirian"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_MEAT); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_ORGANIC_FOOD); + minCapArray = new short[]{(short)0,(short)0,(short)1 ,(short)0,(short)0,(short)0,(short)0,(short)0,(short)300 ,(short)1 ,(short)1}; + maxCapArray = new short[]{(short)1,(short)1,(short)1000,(short)1,(short)1,(short)1,(short)1,(short)1,(short)1000,(short)1000,(short)700}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(501, resourceRoot); + dathomirPool4Roots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("meat_wild_endor"); + resourceRoot.setResourceClass("Wild Meat"); + resourceRoot.setResourceType("Endorian"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_MEAT); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_ORGANIC_FOOD); + minCapArray = new short[]{(short)0,(short)0,(short)1 ,(short)0,(short)0,(short)0,(short)0,(short)0,(short)300 ,(short)1 ,(short)1}; + maxCapArray = new short[]{(short)1,(short)1,(short)1000,(short)1,(short)1,(short)1,(short)1,(short)1,(short)1000,(short)1000,(short)700}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(502, resourceRoot); + endorPool4Roots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("meat_wild_lok"); + resourceRoot.setResourceClass("Wild Meat"); + resourceRoot.setResourceType("Lokian"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_MEAT); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_ORGANIC_FOOD); + minCapArray = new short[]{(short)0,(short)0,(short)1 ,(short)0,(short)0,(short)0,(short)0,(short)0,(short)300 ,(short)1 ,(short)1}; + maxCapArray = new short[]{(short)1,(short)1,(short)1000,(short)1,(short)1,(short)1,(short)1,(short)1,(short)1000,(short)1000,(short)700}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(503, resourceRoot); + lokPool4Roots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("meat_wild_naboo"); + resourceRoot.setResourceClass("Wild Meat"); + resourceRoot.setResourceType("Nabooian"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_MEAT); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_ORGANIC_FOOD); + minCapArray = new short[]{(short)0,(short)0,(short)1 ,(short)0,(short)0,(short)0,(short)0,(short)0,(short)300 ,(short)1 ,(short)1}; + maxCapArray = new short[]{(short)1,(short)1,(short)1000,(short)1,(short)1,(short)1,(short)1,(short)1,(short)1000,(short)1000,(short)700}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(504, resourceRoot); + nabooPool4Roots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("meat_wild_rori"); + resourceRoot.setResourceClass("Wild Meat"); + resourceRoot.setResourceType("Rori"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_MEAT); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_ORGANIC_FOOD); + minCapArray = new short[]{(short)0,(short)0,(short)1 ,(short)0,(short)0,(short)0,(short)0,(short)0,(short)300 ,(short)1 ,(short)1}; + maxCapArray = new short[]{(short)1,(short)1,(short)1000,(short)1,(short)1,(short)1,(short)1,(short)1,(short)1000,(short)1000,(short)700}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(505, resourceRoot); + roriPool4Roots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("meat_wild_talus"); + resourceRoot.setResourceClass("Wild Meat"); + resourceRoot.setResourceType("Talusian"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_MEAT); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_ORGANIC_FOOD); + minCapArray = new short[]{(short)0,(short)0,(short)1 ,(short)0,(short)0,(short)0,(short)0,(short)0,(short)300 ,(short)1 ,(short)1}; + maxCapArray = new short[]{(short)1,(short)1,(short)1000,(short)1,(short)1,(short)1,(short)1,(short)1,(short)1000,(short)1000,(short)700}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(506, resourceRoot); + talusPool4Roots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("meat_wild_tatooine"); + resourceRoot.setResourceClass("Wild Meat"); + resourceRoot.setResourceType("Tatooinian"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_MEAT); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_ORGANIC_FOOD); + minCapArray = new short[]{(short)0,(short)0,(short)1 ,(short)0,(short)0,(short)0,(short)0,(short)0,(short)300 ,(short)1 ,(short)1}; + maxCapArray = new short[]{(short)1,(short)1,(short)1000,(short)1,(short)1,(short)1,(short)1,(short)1,(short)1000,(short)1000,(short)700}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(507, resourceRoot); + tattoinePool4Roots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("meat_wild_yavin4"); + resourceRoot.setResourceClass("Wild Meat"); + resourceRoot.setResourceType("Yavinian"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_MEAT); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_ORGANIC_FOOD); + minCapArray = new short[]{(short)0,(short)0,(short)1 ,(short)0,(short)0,(short)0,(short)0,(short)0,(short)300 ,(short)1 ,(short)1}; + maxCapArray = new short[]{(short)1,(short)1,(short)1000,(short)1,(short)1,(short)1,(short)1,(short)1,(short)1000,(short)1000,(short)700}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(508, resourceRoot); + yavinPool4Roots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("milk_domesticated_corellia"); + resourceRoot.setResourceClass("Domesticated Milk"); + resourceRoot.setResourceType("Corellian"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_MILK); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_ORGANIC_BOTTLE_MILK); + // Domesticated Milk: FL 1 - 700, PE 300 - 1000 + minCapArray = new short[]{(short)0,(short)0,(short)1 ,(short)0,(short)0,(short)0,(short)0,(short)0,(short)300 ,(short)1 ,(short)1}; + maxCapArray = new short[]{(short)1,(short)1,(short)1000,(short)1,(short)1,(short)1,(short)1,(short)1,(short)1000,(short)1000,(short)700}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(509, resourceRoot); + corelliaPool4Roots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("milk_domesticated_dantooine"); + resourceRoot.setResourceClass("Domesticated Milk"); + resourceRoot.setResourceType("Dantooine"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_MILK); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_ORGANIC_BOTTLE_MILK); + minCapArray = new short[]{(short)0,(short)0,(short)1 ,(short)0,(short)0,(short)0,(short)0,(short)0,(short)300 ,(short)1 ,(short)1}; + maxCapArray = new short[]{(short)1,(short)1,(short)1000,(short)1,(short)1,(short)1,(short)1,(short)1,(short)1000,(short)1000,(short)700}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(510, resourceRoot); + dantooinePool4Roots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("milk_domesticated_dathomir"); + resourceRoot.setResourceClass("Domesticated Milk"); + resourceRoot.setResourceType("Dathomirian"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_MILK); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_ORGANIC_BOTTLE_MILK); + minCapArray = new short[]{(short)0,(short)0,(short)1 ,(short)0,(short)0,(short)0,(short)0,(short)0,(short)300 ,(short)1 ,(short)1}; + maxCapArray = new short[]{(short)1,(short)1,(short)1000,(short)1,(short)1,(short)1,(short)1,(short)1,(short)1000,(short)1000,(short)700}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(511, resourceRoot); + dathomirPool4Roots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("milk_domesticated_endor"); + resourceRoot.setResourceClass("Domesticated Milk"); + resourceRoot.setResourceType("Endorian"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_MILK); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_ORGANIC_BOTTLE_MILK); + minCapArray = new short[]{(short)0,(short)0,(short)1 ,(short)0,(short)0,(short)0,(short)0,(short)0,(short)300 ,(short)1 ,(short)1}; + maxCapArray = new short[]{(short)1,(short)1,(short)1000,(short)1,(short)1,(short)1,(short)1,(short)1,(short)1000,(short)1000,(short)700}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(512, resourceRoot); + endorPool4Roots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("milk_domesticated_lok"); + resourceRoot.setResourceClass("Domesticated Milk"); + resourceRoot.setResourceType("Lokian"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_MILK); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_ORGANIC_BOTTLE_MILK); + minCapArray = new short[]{(short)0,(short)0,(short)1 ,(short)0,(short)0,(short)0,(short)0,(short)0,(short)300 ,(short)1 ,(short)1}; + maxCapArray = new short[]{(short)1,(short)1,(short)1000,(short)1,(short)1,(short)1,(short)1,(short)1,(short)1000,(short)1000,(short)700}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(513, resourceRoot); + lokPool4Roots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("milk_domesticated_naboo"); + resourceRoot.setResourceClass("Domesticated Milk"); + resourceRoot.setResourceType("Nabooian"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_MILK); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_ORGANIC_BOTTLE_MILK); + minCapArray = new short[]{(short)0,(short)0,(short)1 ,(short)0,(short)0,(short)0,(short)0,(short)0,(short)300 ,(short)1 ,(short)1}; + maxCapArray = new short[]{(short)1,(short)1,(short)1000,(short)1,(short)1,(short)1,(short)1,(short)1,(short)1000,(short)1000,(short)700}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(514, resourceRoot); + nabooPool4Roots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("milk_domesticated_rori"); + resourceRoot.setResourceClass("Domesticated Milk"); + resourceRoot.setResourceType("Rori"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_MILK); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_ORGANIC_BOTTLE_MILK); + minCapArray = new short[]{(short)0,(short)0,(short)1 ,(short)0,(short)0,(short)0,(short)0,(short)0,(short)300 ,(short)1 ,(short)1}; + maxCapArray = new short[]{(short)1,(short)1,(short)1000,(short)1,(short)1,(short)1,(short)1,(short)1,(short)1000,(short)1000,(short)700}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(515, resourceRoot); + roriPool4Roots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("milk_domesticated_talus"); + resourceRoot.setResourceClass("Domesticated Milk"); + resourceRoot.setResourceType("Talusian"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_MILK); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_ORGANIC_BOTTLE_MILK); + minCapArray = new short[]{(short)0,(short)0,(short)1 ,(short)0,(short)0,(short)0,(short)0,(short)0,(short)300 ,(short)1 ,(short)1}; + maxCapArray = new short[]{(short)1,(short)1,(short)1000,(short)1,(short)1,(short)1,(short)1,(short)1,(short)1000,(short)1000,(short)700}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(516, resourceRoot); + talusPool4Roots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("milk_domesticated_tatooine"); + resourceRoot.setResourceClass("Domesticated Milk"); + resourceRoot.setResourceType("Tatooinian"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_MILK); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_ORGANIC_BOTTLE_MILK); + minCapArray = new short[]{(short)0,(short)0,(short)1 ,(short)0,(short)0,(short)0,(short)0,(short)0,(short)300 ,(short)1 ,(short)1}; + maxCapArray = new short[]{(short)1,(short)1,(short)1000,(short)1,(short)1,(short)1,(short)1,(short)1,(short)1000,(short)1000,(short)700}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(517, resourceRoot); + tattoinePool4Roots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("milk_domesticated_yavin4"); + resourceRoot.setResourceClass("Domesticated Milk"); + resourceRoot.setResourceType("Yavinian"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_MILK); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_ORGANIC_BOTTLE_MILK); + minCapArray = new short[]{(short)0,(short)0,(short)1 ,(short)0,(short)0,(short)0,(short)0,(short)0,(short)300 ,(short)1 ,(short)1}; + maxCapArray = new short[]{(short)1,(short)1,(short)1000,(short)1,(short)1,(short)1,(short)1,(short)1,(short)1000,(short)1000,(short)700}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(518, resourceRoot); + yavinPool4Roots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("milk_wild_corellia"); + resourceRoot.setResourceClass("Wild Milk"); + resourceRoot.setResourceType("Corellian"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_MILK); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_ORGANIC_BOTTLE_MILK); + // Wild Milk: PE 1 - 700 + minCapArray = new short[]{(short)0,(short)0,(short)1 ,(short)0,(short)0,(short)0,(short)0,(short)0,(short)1 ,(short)1 ,(short)1}; + maxCapArray = new short[]{(short)1,(short)1,(short)1000,(short)1,(short)1,(short)1,(short)1,(short)1,(short)700,(short)1000,(short)1000}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(519, resourceRoot); + corelliaPool4Roots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("milk_wild_dantooine"); + resourceRoot.setResourceClass("Wild Milk"); + resourceRoot.setResourceType("Dantooine"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_MILK); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_ORGANIC_BOTTLE_MILK); + minCapArray = new short[]{(short)0,(short)0,(short)1 ,(short)0,(short)0,(short)0,(short)0,(short)0,(short)1 ,(short)1 ,(short)1}; + maxCapArray = new short[]{(short)1,(short)1,(short)1000,(short)1,(short)1,(short)1,(short)1,(short)1,(short)700,(short)1000,(short)1000}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(520, resourceRoot); + dantooinePool4Roots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("milk_wild_dathomir"); + resourceRoot.setResourceClass("Wild Milk"); + resourceRoot.setResourceType("Dathomirian"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_MILK); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_ORGANIC_BOTTLE_MILK); + minCapArray = new short[]{(short)0,(short)0,(short)1 ,(short)0,(short)0,(short)0,(short)0,(short)0,(short)1 ,(short)1 ,(short)1}; + maxCapArray = new short[]{(short)1,(short)1,(short)1000,(short)1,(short)1,(short)1,(short)1,(short)1,(short)700,(short)1000,(short)1000}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(521, resourceRoot); + dathomirPool4Roots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("milk_wild_endor"); + resourceRoot.setResourceClass("Wild Milk"); + resourceRoot.setResourceType("Endorian"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_MILK); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_ORGANIC_BOTTLE_MILK); + minCapArray = new short[]{(short)0,(short)0,(short)1 ,(short)0,(short)0,(short)0,(short)0,(short)0,(short)1 ,(short)1 ,(short)1}; + maxCapArray = new short[]{(short)1,(short)1,(short)1000,(short)1,(short)1,(short)1,(short)1,(short)1,(short)700,(short)1000,(short)1000}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(522, resourceRoot); + endorPool4Roots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("milk_wild_lok"); + resourceRoot.setResourceClass("Wild Milk"); + resourceRoot.setResourceType("Lokian"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_MILK); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_ORGANIC_BOTTLE_MILK); + minCapArray = new short[]{(short)0,(short)0,(short)1 ,(short)0,(short)0,(short)0,(short)0,(short)0,(short)1 ,(short)1 ,(short)1}; + maxCapArray = new short[]{(short)1,(short)1,(short)1000,(short)1,(short)1,(short)1,(short)1,(short)1,(short)700,(short)1000,(short)1000}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(523, resourceRoot); + lokPool4Roots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("milk_wild_naboo"); + resourceRoot.setResourceClass("Wild Milk"); + resourceRoot.setResourceType("Nabooian"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_MILK); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_ORGANIC_BOTTLE_MILK); + minCapArray = new short[]{(short)0,(short)0,(short)1 ,(short)0,(short)0,(short)0,(short)0,(short)0,(short)1 ,(short)1 ,(short)1}; + maxCapArray = new short[]{(short)1,(short)1,(short)1000,(short)1,(short)1,(short)1,(short)1,(short)1,(short)700,(short)1000,(short)1000}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(524, resourceRoot); + nabooPool4Roots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("milk_wild_rori"); + resourceRoot.setResourceClass("Wild Milk"); + resourceRoot.setResourceType("Rori"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_MILK); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_ORGANIC_BOTTLE_MILK); + minCapArray = new short[]{(short)0,(short)0,(short)1 ,(short)0,(short)0,(short)0,(short)0,(short)0,(short)1 ,(short)1 ,(short)1}; + maxCapArray = new short[]{(short)1,(short)1,(short)1000,(short)1,(short)1,(short)1,(short)1,(short)1,(short)700,(short)1000,(short)1000}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(525, resourceRoot); + roriPool4Roots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("milk_wild_talus"); + resourceRoot.setResourceClass("Wild Milk"); + resourceRoot.setResourceType("Talusian"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_MILK); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_ORGANIC_BOTTLE_MILK); + minCapArray = new short[]{(short)0,(short)0,(short)1 ,(short)0,(short)0,(short)0,(short)0,(short)0,(short)1 ,(short)1 ,(short)1}; + maxCapArray = new short[]{(short)1,(short)1,(short)1000,(short)1,(short)1,(short)1,(short)1,(short)1,(short)700,(short)1000,(short)1000}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(526, resourceRoot); + talusPool4Roots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("milk_wild_tatooine"); + resourceRoot.setResourceClass("Wild Milk"); + resourceRoot.setResourceType("Tatooinian"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_MILK); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_ORGANIC_BOTTLE_MILK); + minCapArray = new short[]{(short)0,(short)0,(short)1 ,(short)0,(short)0,(short)0,(short)0,(short)0,(short)1 ,(short)1 ,(short)1}; + maxCapArray = new short[]{(short)1,(short)1,(short)1000,(short)1,(short)1,(short)1,(short)1,(short)1,(short)700,(short)1000,(short)1000}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(527, resourceRoot); + tattoinePool4Roots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("milk_wild_yavin4"); + resourceRoot.setResourceClass("Wild Milk"); + resourceRoot.setResourceType("Yavinian"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_MILK); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_ORGANIC_BOTTLE_MILK); + minCapArray = new short[]{(short)0,(short)0,(short)1 ,(short)0,(short)0,(short)0,(short)0,(short)0,(short)1 ,(short)1 ,(short)1}; + maxCapArray = new short[]{(short)1,(short)1,(short)1000,(short)1,(short)1,(short)1,(short)1,(short)1,(short)700,(short)1000,(short)1000}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(528, resourceRoot); + yavinPool4Roots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("seafood_crustacean_corellia"); + resourceRoot.setResourceClass("Crustacean Meat"); + resourceRoot.setResourceType("Corellian"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_MEAT); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_ORGANIC_FOOD); + minCapArray = new short[]{(short)0,(short)0,(short)1 ,(short)0,(short)0,(short)0,(short)0,(short)0,(short)1 ,(short)1 ,(short)1}; + maxCapArray = new short[]{(short)1,(short)1,(short)1000,(short)1,(short)1,(short)1,(short)1,(short)1,(short)1000,(short)1000,(short)1000}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(529, resourceRoot); + corelliaPool4Roots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("seafood_crustacean_dantooine"); + resourceRoot.setResourceClass("Crustacean Meat"); + resourceRoot.setResourceType("Dantooine"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_MEAT); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_ORGANIC_FOOD); + minCapArray = new short[]{(short)0,(short)0,(short)1 ,(short)0,(short)0,(short)0,(short)0,(short)0,(short)1 ,(short)1 ,(short)1}; + maxCapArray = new short[]{(short)1,(short)1,(short)1000,(short)1,(short)1,(short)1,(short)1,(short)1,(short)1000,(short)1000,(short)1000}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(530, resourceRoot); + dantooinePool4Roots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("seafood_crustacean_dathomir"); + resourceRoot.setResourceClass("Crustacean Meat"); + resourceRoot.setResourceType("Dathomirian"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_MEAT); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_ORGANIC_FOOD); + minCapArray = new short[]{(short)0,(short)0,(short)1 ,(short)0,(short)0,(short)0,(short)0,(short)0,(short)1 ,(short)1 ,(short)1}; + maxCapArray = new short[]{(short)1,(short)1,(short)1000,(short)1,(short)1,(short)1,(short)1,(short)1,(short)1000,(short)1000,(short)1000}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(531, resourceRoot); + dathomirPool4Roots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("seafood_crustacean_endor"); + resourceRoot.setResourceClass("Crustacean Meat"); + resourceRoot.setResourceType("Endorian"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_MEAT); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_ORGANIC_FOOD); + minCapArray = new short[]{(short)0,(short)0,(short)1 ,(short)0,(short)0,(short)0,(short)0,(short)0,(short)1 ,(short)1 ,(short)1}; + maxCapArray = new short[]{(short)1,(short)1,(short)1000,(short)1,(short)1,(short)1,(short)1,(short)1,(short)1000,(short)1000,(short)1000}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(532, resourceRoot); + endorPool4Roots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("seafood_crustacean_lok"); + resourceRoot.setResourceClass("Crustacean Meat"); + resourceRoot.setResourceType("Lokian"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_MEAT); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_ORGANIC_FOOD); + minCapArray = new short[]{(short)0,(short)0,(short)1 ,(short)0,(short)0,(short)0,(short)0,(short)0,(short)1 ,(short)1 ,(short)1}; + maxCapArray = new short[]{(short)1,(short)1,(short)1000,(short)1,(short)1,(short)1,(short)1,(short)1,(short)1000,(short)1000,(short)1000}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(533, resourceRoot); + lokPool4Roots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("seafood_crustacean_naboo"); + resourceRoot.setResourceClass("Crustacean Meat"); + resourceRoot.setResourceType("Nabooian"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_MEAT); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_ORGANIC_FOOD); + minCapArray = new short[]{(short)0,(short)0,(short)1 ,(short)0,(short)0,(short)0,(short)0,(short)0,(short)1 ,(short)1 ,(short)1}; + maxCapArray = new short[]{(short)1,(short)1,(short)1000,(short)1,(short)1,(short)1,(short)1,(short)1,(short)1000,(short)1000,(short)1000}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(534, resourceRoot); + nabooPool4Roots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("seafood_crustacean_rori"); + resourceRoot.setResourceClass("Crustacean Meat"); + resourceRoot.setResourceType("Rori"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_MEAT); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_ORGANIC_FOOD); + minCapArray = new short[]{(short)0,(short)0,(short)1 ,(short)0,(short)0,(short)0,(short)0,(short)0,(short)1 ,(short)1 ,(short)1}; + maxCapArray = new short[]{(short)1,(short)1,(short)1000,(short)1,(short)1,(short)1,(short)1,(short)1,(short)1000,(short)1000,(short)1000}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(535, resourceRoot); + roriPool4Roots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("seafood_crustacean_talus"); + resourceRoot.setResourceClass("Crustacean Meat"); + resourceRoot.setResourceType("Talusian"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_MEAT); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_ORGANIC_FOOD); + minCapArray = new short[]{(short)0,(short)0,(short)1 ,(short)0,(short)0,(short)0,(short)0,(short)0,(short)1 ,(short)1 ,(short)1}; + maxCapArray = new short[]{(short)1,(short)1,(short)1000,(short)1,(short)1,(short)1,(short)1,(short)1,(short)1000,(short)1000,(short)1000}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(536, resourceRoot); + talusPool4Roots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("seafood_crustacean_tatooine"); + resourceRoot.setResourceClass("Crustacean Meat"); + resourceRoot.setResourceType("Tatooinian"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_MEAT); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_ORGANIC_FOOD); + minCapArray = new short[]{(short)0,(short)0,(short)1 ,(short)0,(short)0,(short)0,(short)0,(short)0,(short)1 ,(short)1 ,(short)1}; + maxCapArray = new short[]{(short)1,(short)1,(short)1000,(short)1,(short)1,(short)1,(short)1,(short)1,(short)1000,(short)1000,(short)1000}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(537, resourceRoot); + tattoinePool4Roots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("seafood_crustacean_yavin4"); + resourceRoot.setResourceClass("Crustacean Meat"); + resourceRoot.setResourceType("Yavinian"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_MEAT); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_ORGANIC_FOOD); + minCapArray = new short[]{(short)0,(short)0,(short)1 ,(short)0,(short)0,(short)0,(short)0,(short)0,(short)1 ,(short)1 ,(short)1}; + maxCapArray = new short[]{(short)1,(short)1,(short)1000,(short)1,(short)1,(short)1,(short)1,(short)1,(short)1000,(short)1000,(short)1000}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(538, resourceRoot); + yavinPool4Roots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("seafood_fish_corellia"); + resourceRoot.setResourceClass("Fish Meat"); + resourceRoot.setResourceType("Corellian"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_MEAT); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_ORGANIC_FOOD); + minCapArray = new short[]{(short)0,(short)0,(short)1 ,(short)0,(short)0,(short)0,(short)0,(short)0,(short)1 ,(short)1 ,(short)1}; + maxCapArray = new short[]{(short)1,(short)1,(short)1000,(short)1,(short)1,(short)1,(short)1,(short)1,(short)1000,(short)1000,(short)1000}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(539, resourceRoot); + corelliaPool4Roots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("seafood_fish_dantooine"); + resourceRoot.setResourceClass("Fish Meat"); + resourceRoot.setResourceType("Dantooine"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_MEAT); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_ORGANIC_FOOD); + minCapArray = new short[]{(short)0,(short)0,(short)1 ,(short)0,(short)0,(short)0,(short)0,(short)0,(short)1 ,(short)1 ,(short)1}; + maxCapArray = new short[]{(short)1,(short)1,(short)1000,(short)1,(short)1,(short)1,(short)1,(short)1,(short)1000,(short)1000,(short)1000}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(540, resourceRoot); + dantooinePool4Roots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("seafood_fish_dathomir"); + resourceRoot.setResourceClass("Fish Meat"); + resourceRoot.setResourceType("Dathomirian"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_MEAT); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_ORGANIC_FOOD); + minCapArray = new short[]{(short)0,(short)0,(short)1 ,(short)0,(short)0,(short)0,(short)0,(short)0,(short)1 ,(short)1 ,(short)1}; + maxCapArray = new short[]{(short)1,(short)1,(short)1000,(short)1,(short)1,(short)1,(short)1,(short)1,(short)1000,(short)1000,(short)1000}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(541, resourceRoot); + dathomirPool4Roots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("seafood_fish_endor"); + resourceRoot.setResourceClass("Fish Meat"); + resourceRoot.setResourceType("Endorian"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_MEAT); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_ORGANIC_FOOD); + minCapArray = new short[]{(short)0,(short)0,(short)1 ,(short)0,(short)0,(short)0,(short)0,(short)0,(short)1 ,(short)1 ,(short)1}; + maxCapArray = new short[]{(short)1,(short)1,(short)1000,(short)1,(short)1,(short)1,(short)1,(short)1,(short)1000,(short)1000,(short)1000}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(542, resourceRoot); + endorPool4Roots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("seafood_fish_lok"); + resourceRoot.setResourceClass("Fish Meat"); + resourceRoot.setResourceType("Lokian"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_MEAT); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_ORGANIC_FOOD); + minCapArray = new short[]{(short)0,(short)0,(short)1 ,(short)0,(short)0,(short)0,(short)0,(short)0,(short)1 ,(short)1 ,(short)1}; + maxCapArray = new short[]{(short)1,(short)1,(short)1000,(short)1,(short)1,(short)1,(short)1,(short)1,(short)1000,(short)1000,(short)1000}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(543, resourceRoot); + lokPool4Roots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("seafood_fish_naboo"); + resourceRoot.setResourceClass("Fish Meat"); + resourceRoot.setResourceType("Nabooian"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_MEAT); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_ORGANIC_FOOD); + minCapArray = new short[]{(short)0,(short)0,(short)1 ,(short)0,(short)0,(short)0,(short)0,(short)0,(short)1 ,(short)1 ,(short)1}; + maxCapArray = new short[]{(short)1,(short)1,(short)1000,(short)1,(short)1,(short)1,(short)1,(short)1,(short)1000,(short)1000,(short)1000}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(544, resourceRoot); + nabooPool4Roots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("seafood_fish_rori"); + resourceRoot.setResourceClass("Fish Meat"); + resourceRoot.setResourceType("Rori"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_MEAT); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_ORGANIC_FOOD); + minCapArray = new short[]{(short)0,(short)0,(short)1 ,(short)0,(short)0,(short)0,(short)0,(short)0,(short)1 ,(short)1 ,(short)1}; + maxCapArray = new short[]{(short)1,(short)1,(short)1000,(short)1,(short)1,(short)1,(short)1,(short)1,(short)1000,(short)1000,(short)1000}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(545, resourceRoot); + roriPool4Roots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("seafood_fish_talus"); + resourceRoot.setResourceClass("Fish Meat"); + resourceRoot.setResourceType("Talusian"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_MEAT); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_ORGANIC_FOOD); + minCapArray = new short[]{(short)0,(short)0,(short)1 ,(short)0,(short)0,(short)0,(short)0,(short)0,(short)1 ,(short)1 ,(short)1}; + maxCapArray = new short[]{(short)1,(short)1,(short)1000,(short)1,(short)1,(short)1,(short)1,(short)1,(short)1000,(short)1000,(short)1000}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(546, resourceRoot); + talusPool4Roots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("seafood_fish_tatooine"); + resourceRoot.setResourceClass("Fish Meat"); + resourceRoot.setResourceType("Tatooinian"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_MEAT); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_ORGANIC_FOOD); + minCapArray = new short[]{(short)0,(short)0,(short)1 ,(short)0,(short)0,(short)0,(short)0,(short)0,(short)1 ,(short)1 ,(short)1}; + maxCapArray = new short[]{(short)1,(short)1,(short)1000,(short)1,(short)1,(short)1,(short)1,(short)1,(short)1000,(short)1000,(short)1000}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(547, resourceRoot); + tattoinePool4Roots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("seafood_fish_yavin4"); + resourceRoot.setResourceClass("Fish Meat"); + resourceRoot.setResourceType("Yavinian"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_MEAT); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_ORGANIC_FOOD); + minCapArray = new short[]{(short)0,(short)0,(short)1 ,(short)0,(short)0,(short)0,(short)0,(short)0,(short)1 ,(short)1 ,(short)1}; + maxCapArray = new short[]{(short)1,(short)1,(short)1000,(short)1,(short)1,(short)1,(short)1,(short)1,(short)1000,(short)1000,(short)1000}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(548, resourceRoot); + yavinPool4Roots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("seafood_mollusk_corellia"); + resourceRoot.setResourceClass("Mollusk Meat"); + resourceRoot.setResourceType("Corellia"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_MEAT); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_ORGANIC_FOOD); + minCapArray = new short[]{(short)0,(short)0,(short)1 ,(short)0,(short)0,(short)0,(short)0,(short)0,(short)1 ,(short)1 ,(short)1}; + maxCapArray = new short[]{(short)1,(short)1,(short)1000,(short)1,(short)1,(short)1,(short)1,(short)1,(short)1000,(short)1000,(short)1000}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(549, resourceRoot); + corelliaPool4Roots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("seafood_mollusk_dantooine"); + resourceRoot.setResourceClass("Mollusk Meat"); + resourceRoot.setResourceType("Dantooine"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_MEAT); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_ORGANIC_FOOD); + minCapArray = new short[]{(short)0,(short)0,(short)1 ,(short)0,(short)0,(short)0,(short)0,(short)0,(short)1 ,(short)1 ,(short)1}; + maxCapArray = new short[]{(short)1,(short)1,(short)1000,(short)1,(short)1,(short)1,(short)1,(short)1,(short)1000,(short)1000,(short)1000}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(550, resourceRoot); + dantooinePool4Roots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("seafood_mollusk_dathomir"); + resourceRoot.setResourceClass("Mollusk Meat"); + resourceRoot.setResourceType("Dathomirian"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_MEAT); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_ORGANIC_FOOD); + minCapArray = new short[]{(short)0,(short)0,(short)1 ,(short)0,(short)0,(short)0,(short)0,(short)0,(short)1 ,(short)1 ,(short)1}; + maxCapArray = new short[]{(short)1,(short)1,(short)1000,(short)1,(short)1,(short)1,(short)1,(short)1,(short)1000,(short)1000,(short)1000}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(551, resourceRoot); + dathomirPool4Roots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("seafood_mollusk_endor"); + resourceRoot.setResourceClass("Mollusk Meat"); + resourceRoot.setResourceType("Endorian"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_MEAT); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_ORGANIC_FOOD); + minCapArray = new short[]{(short)0,(short)0,(short)1 ,(short)0,(short)0,(short)0,(short)0,(short)0,(short)1 ,(short)1 ,(short)1}; + maxCapArray = new short[]{(short)1,(short)1,(short)1000,(short)1,(short)1,(short)1,(short)1,(short)1,(short)1000,(short)1000,(short)1000}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(552, resourceRoot); + endorPool4Roots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("seafood_mollusk_lok"); + resourceRoot.setResourceClass("Mollusk Meat"); + resourceRoot.setResourceType("Lokian"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_MEAT); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_ORGANIC_FOOD); + minCapArray = new short[]{(short)0,(short)0,(short)1 ,(short)0,(short)0,(short)0,(short)0,(short)0,(short)1 ,(short)1 ,(short)1}; + maxCapArray = new short[]{(short)1,(short)1,(short)1000,(short)1,(short)1,(short)1,(short)1,(short)1,(short)1000,(short)1000,(short)1000}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(553, resourceRoot); + lokPool4Roots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("seafood_mollusk_naboo"); + resourceRoot.setResourceClass("Mollusk Meat"); + resourceRoot.setResourceType("Nabooian"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_MEAT); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_ORGANIC_FOOD); + minCapArray = new short[]{(short)0,(short)0,(short)1 ,(short)0,(short)0,(short)0,(short)0,(short)0,(short)1 ,(short)1 ,(short)1}; + maxCapArray = new short[]{(short)1,(short)1,(short)1000,(short)1,(short)1,(short)1,(short)1,(short)1,(short)1000,(short)1000,(short)1000}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(554, resourceRoot); + nabooPool4Roots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("seafood_mollusk_rori"); + resourceRoot.setResourceClass("Mollusk Meat"); + resourceRoot.setResourceType("Rori"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_MEAT); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_ORGANIC_FOOD); + minCapArray = new short[]{(short)0,(short)0,(short)1 ,(short)0,(short)0,(short)0,(short)0,(short)0,(short)1 ,(short)1 ,(short)1}; + maxCapArray = new short[]{(short)1,(short)1,(short)1000,(short)1,(short)1,(short)1,(short)1,(short)1,(short)1000,(short)1000,(short)1000}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(555, resourceRoot); + roriPool4Roots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("seafood_mollusk_talus"); + resourceRoot.setResourceClass("Mollusk Meat"); + resourceRoot.setResourceType("Talusian"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_MEAT); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_ORGANIC_FOOD); + minCapArray = new short[]{(short)0,(short)0,(short)1 ,(short)0,(short)0,(short)0,(short)0,(short)0,(short)1 ,(short)1 ,(short)1}; + maxCapArray = new short[]{(short)1,(short)1,(short)1000,(short)1,(short)1,(short)1,(short)1,(short)1,(short)1000,(short)1000,(short)1000}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(556, resourceRoot); + talusPool4Roots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("seafood_mollusk_tatooine"); + resourceRoot.setResourceClass("Mollusk Meat"); + resourceRoot.setResourceType("Tatooinian"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_MEAT); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_ORGANIC_FOOD); + minCapArray = new short[]{(short)0,(short)0,(short)1 ,(short)0,(short)0,(short)0,(short)0,(short)0,(short)1 ,(short)1 ,(short)1}; + maxCapArray = new short[]{(short)1,(short)1,(short)1000,(short)1,(short)1,(short)1,(short)1,(short)1,(short)1000,(short)1000,(short)1000}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(557, resourceRoot); + tattoinePool4Roots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("seafood_mollusk_yavin4"); + resourceRoot.setResourceClass("Mollusk Meat"); + resourceRoot.setResourceType("Yavinian"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_MEAT); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_ORGANIC_FOOD); + minCapArray = new short[]{(short)0,(short)0,(short)1 ,(short)0,(short)0,(short)0,(short)0,(short)0,(short)1 ,(short)1 ,(short)1}; + maxCapArray = new short[]{(short)1,(short)1,(short)1000,(short)1,(short)1,(short)1,(short)1,(short)1,(short)1000,(short)1000,(short)1000}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(558, resourceRoot); + yavinPool4Roots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("meat_reptilian_corellia"); + resourceRoot.setResourceClass("Reptilian Meat"); + resourceRoot.setResourceType("Corellian"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_MEAT); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_ORGANIC_FOOD); + minCapArray = new short[]{(short)0,(short)0,(short)1 ,(short)0,(short)0,(short)0,(short)0,(short)0,(short)1 ,(short)1 ,(short)1}; + maxCapArray = new short[]{(short)1,(short)1,(short)1000,(short)1,(short)1,(short)1,(short)1,(short)1,(short)1000,(short)1000,(short)1000}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(559, resourceRoot); + corelliaPool4Roots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("meat_reptilian_dantooine"); + resourceRoot.setResourceClass("Reptilian Meat"); + resourceRoot.setResourceType("Dantooine"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_MEAT); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_ORGANIC_FOOD); + minCapArray = new short[]{(short)0,(short)0,(short)1 ,(short)0,(short)0,(short)0,(short)0,(short)0,(short)1 ,(short)1 ,(short)1}; + maxCapArray = new short[]{(short)1,(short)1,(short)1000,(short)1,(short)1,(short)1,(short)1,(short)1,(short)1000,(short)1000,(short)1000}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(560, resourceRoot); + dantooinePool4Roots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("meat_reptilian_dathomir"); + resourceRoot.setResourceClass("Reptilian Meat"); + resourceRoot.setResourceType("Dathomirian"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_MEAT); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_ORGANIC_FOOD); + minCapArray = new short[]{(short)0,(short)0,(short)1 ,(short)0,(short)0,(short)0,(short)0,(short)0,(short)1 ,(short)1 ,(short)1}; + maxCapArray = new short[]{(short)1,(short)1,(short)1000,(short)1,(short)1,(short)1,(short)1,(short)1,(short)1000,(short)1000,(short)1000}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(561, resourceRoot); + dathomirPool4Roots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("meat_reptilian_endor"); + resourceRoot.setResourceClass("Reptilian Meat"); + resourceRoot.setResourceType("Endorian"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_MEAT); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_ORGANIC_FOOD); + minCapArray = new short[]{(short)0,(short)0,(short)1 ,(short)0,(short)0,(short)0,(short)0,(short)0,(short)1 ,(short)1 ,(short)1}; + maxCapArray = new short[]{(short)1,(short)1,(short)1000,(short)1,(short)1,(short)1,(short)1,(short)1,(short)1000,(short)1000,(short)1000}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(562, resourceRoot); + endorPool4Roots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("meat_reptilian_lok"); + resourceRoot.setResourceClass("Reptilian Meat"); + resourceRoot.setResourceType("Lokian"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_MEAT); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_ORGANIC_FOOD); + minCapArray = new short[]{(short)0,(short)0,(short)1 ,(short)0,(short)0,(short)0,(short)0,(short)0,(short)1 ,(short)1 ,(short)1}; + maxCapArray = new short[]{(short)1,(short)1,(short)1000,(short)1,(short)1,(short)1,(short)1,(short)1,(short)1000,(short)1000,(short)1000}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(563, resourceRoot); + lokPool4Roots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("meat_reptilian_naboo"); + resourceRoot.setResourceClass("Reptilian Meat"); + resourceRoot.setResourceType("Nabooian"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_MEAT); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_ORGANIC_FOOD); + minCapArray = new short[]{(short)0,(short)0,(short)1 ,(short)0,(short)0,(short)0,(short)0,(short)0,(short)1 ,(short)1 ,(short)1}; + maxCapArray = new short[]{(short)1,(short)1,(short)1000,(short)1,(short)1,(short)1,(short)1,(short)1,(short)1000,(short)1000,(short)1000}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(564, resourceRoot); + nabooPool4Roots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("meat_reptilian_rori"); + resourceRoot.setResourceClass("Reptilian Meat"); + resourceRoot.setResourceType("Rori"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_MEAT); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_ORGANIC_FOOD); + minCapArray = new short[]{(short)0,(short)0,(short)1 ,(short)0,(short)0,(short)0,(short)0,(short)0,(short)1 ,(short)1 ,(short)1}; + maxCapArray = new short[]{(short)1,(short)1,(short)1000,(short)1,(short)1,(short)1,(short)1,(short)1,(short)1000,(short)1000,(short)1000}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(565, resourceRoot); + roriPool4Roots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("meat_reptilian_talus"); + resourceRoot.setResourceClass("Reptilian Meat"); + resourceRoot.setResourceType("Talusian"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_MEAT); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_ORGANIC_FOOD); + minCapArray = new short[]{(short)0,(short)0,(short)1 ,(short)0,(short)0,(short)0,(short)0,(short)0,(short)1 ,(short)1 ,(short)1}; + maxCapArray = new short[]{(short)1,(short)1,(short)1000,(short)1,(short)1,(short)1,(short)1,(short)1,(short)1000,(short)1000,(short)1000}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(566, resourceRoot); + talusPool4Roots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("meat_reptilian_tatooine"); + resourceRoot.setResourceClass("Reptilian Meat"); + resourceRoot.setResourceType("Tatooinian"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_MEAT); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_ORGANIC_FOOD); + minCapArray = new short[]{(short)0,(short)0,(short)1 ,(short)0,(short)0,(short)0,(short)0,(short)0,(short)1 ,(short)1 ,(short)1}; + maxCapArray = new short[]{(short)1,(short)1,(short)1000,(short)1,(short)1,(short)1,(short)1,(short)1,(short)1000,(short)1000,(short)1000}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(567, resourceRoot); + tattoinePool4Roots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("meat_reptilian_yavin4"); + resourceRoot.setResourceClass("Reptilian Meat"); + resourceRoot.setResourceType("Yavinian"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_MEAT); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_ORGANIC_FOOD); + minCapArray = new short[]{(short)0,(short)0,(short)1 ,(short)0,(short)0,(short)0,(short)0,(short)0,(short)1 ,(short)1 ,(short)1}; + maxCapArray = new short[]{(short)1,(short)1,(short)1000,(short)1,(short)1,(short)1,(short)1,(short)1,(short)1000,(short)1000,(short)1000}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(568, resourceRoot); + yavinPool4Roots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("meat_egg_corellia"); + resourceRoot.setResourceClass("Egg"); + resourceRoot.setResourceType("Corellian"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_MEAT); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_ORGANIC_FOOD); + minCapArray = new short[]{(short)0,(short)0,(short)1 ,(short)0,(short)0,(short)0,(short)0,(short)0,(short)1 ,(short)1 ,(short)1}; + maxCapArray = new short[]{(short)1,(short)1,(short)1000,(short)1,(short)1,(short)1,(short)1,(short)1,(short)1000,(short)1000,(short)1000}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(569, resourceRoot); + corelliaPool4Roots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("meat_egg_dantooine"); + resourceRoot.setResourceClass("Egg"); + resourceRoot.setResourceType("Dantooine"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_MEAT); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_ORGANIC_FOOD); + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(570, resourceRoot); + dantooinePool4Roots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("meat_egg_dathomir"); + resourceRoot.setResourceClass("Egg"); + resourceRoot.setResourceType("Dathomirian"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_MEAT); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_ORGANIC_FOOD); + minCapArray = new short[]{(short)0,(short)0,(short)1 ,(short)0,(short)0,(short)0,(short)0,(short)0,(short)1 ,(short)1 ,(short)1}; + maxCapArray = new short[]{(short)1,(short)1,(short)1000,(short)1,(short)1,(short)1,(short)1,(short)1,(short)1000,(short)1000,(short)1000}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(571, resourceRoot); + dathomirPool4Roots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("meat_egg_endor"); + resourceRoot.setResourceClass("Egg"); + resourceRoot.setResourceType("Endorian"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_MEAT); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_ORGANIC_FOOD); + minCapArray = new short[]{(short)0,(short)0,(short)1 ,(short)0,(short)0,(short)0,(short)0,(short)0,(short)1 ,(short)1 ,(short)1}; + maxCapArray = new short[]{(short)1,(short)1,(short)1000,(short)1,(short)1,(short)1,(short)1,(short)1,(short)1000,(short)1000,(short)1000}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(572, resourceRoot); + endorPool4Roots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("meat_egg_lok"); + resourceRoot.setResourceClass("Egg"); + resourceRoot.setResourceType("Lokian"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_MEAT); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_ORGANIC_FOOD); + minCapArray = new short[]{(short)0,(short)0,(short)1 ,(short)0,(short)0,(short)0,(short)0,(short)0,(short)1 ,(short)1 ,(short)1}; + maxCapArray = new short[]{(short)1,(short)1,(short)1000,(short)1,(short)1,(short)1,(short)1,(short)1,(short)1000,(short)1000,(short)1000}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(573, resourceRoot); + lokPool4Roots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("meat_egg_naboo"); + resourceRoot.setResourceClass("Egg"); + resourceRoot.setResourceType("Nabooian"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_MEAT); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_ORGANIC_FOOD); + minCapArray = new short[]{(short)0,(short)0,(short)1 ,(short)0,(short)0,(short)0,(short)0,(short)0,(short)1 ,(short)1 ,(short)1}; + maxCapArray = new short[]{(short)1,(short)1,(short)1000,(short)1,(short)1,(short)1,(short)1,(short)1,(short)1000,(short)1000,(short)1000}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(574, resourceRoot); + nabooPool4Roots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("meat_egg_rori"); + resourceRoot.setResourceClass("Egg"); + resourceRoot.setResourceType("Rori"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_MEAT); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_ORGANIC_FOOD); + minCapArray = new short[]{(short)0,(short)0,(short)1 ,(short)0,(short)0,(short)0,(short)0,(short)0,(short)1 ,(short)1 ,(short)1}; + maxCapArray = new short[]{(short)1,(short)1,(short)1000,(short)1,(short)1,(short)1,(short)1,(short)1,(short)1000,(short)1000,(short)1000}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(575, resourceRoot); + roriPool4Roots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("meat_egg_talus"); + resourceRoot.setResourceClass("Egg"); + resourceRoot.setResourceType("Talusian"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_MEAT); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_ORGANIC_FOOD); + minCapArray = new short[]{(short)0,(short)0,(short)1 ,(short)0,(short)0,(short)0,(short)0,(short)0,(short)1 ,(short)1 ,(short)1}; + maxCapArray = new short[]{(short)1,(short)1,(short)1000,(short)1,(short)1,(short)1,(short)1,(short)1,(short)1000,(short)1000,(short)1000}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(576, resourceRoot); + talusPool4Roots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("meat_egg_tatooine"); + resourceRoot.setResourceClass("Egg"); + resourceRoot.setResourceType("Tatooinian"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_MEAT); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_ORGANIC_FOOD); + minCapArray = new short[]{(short)0,(short)0,(short)1 ,(short)0,(short)0,(short)0,(short)0,(short)0,(short)1 ,(short)1 ,(short)1}; + maxCapArray = new short[]{(short)1,(short)1,(short)1000,(short)1,(short)1,(short)1,(short)1,(short)1,(short)1000,(short)1000,(short)1000}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(577, resourceRoot); + tattoinePool4Roots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("meat_egg_yavin4"); + resourceRoot.setResourceClass("Egg"); + resourceRoot.setResourceType("Yavinian"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_MEAT); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_ORGANIC_FOOD); + minCapArray = new short[]{(short)0,(short)0,(short)1 ,(short)0,(short)0,(short)0,(short)0,(short)0,(short)1 ,(short)1 ,(short)1}; + maxCapArray = new short[]{(short)1,(short)1,(short)1000,(short)1,(short)1,(short)1,(short)1,(short)1,(short)1000,(short)1000,(short)1000}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(578, resourceRoot); + yavinPool4Roots.addElement(resourceRoot); + } + // checked + public void createCollections3(){ + ResourceRoot resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("fiberplast_corellia"); + resourceRoot.setResourceClass("Fiberplast"); + resourceRoot.setResourceType("Corellian"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_CHEMICAL); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_INORGANIC_CHEMICALS); + // DR MA OQ SR UT + minCapArray = new short[]{(short)0,(short)0,(short)1 ,(short)0,(short)1 ,(short)1 ,(short)1 ,(short)0,(short)0,(short)1 ,(short)0}; + maxCapArray = new short[]{(short)1,(short)1,(short)1000,(short)1,(short)1000,(short)1000,(short)1000,(short)1,(short)1,(short)1000,(short)1}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(579, resourceRoot); + corelliaPool4Roots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("fiberplast_dantooine"); + resourceRoot.setResourceClass("Fiberplast"); + resourceRoot.setResourceType("Dantooine"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_CHEMICAL); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_INORGANIC_CHEMICALS); + minCapArray = new short[]{(short)0,(short)0,(short)1 ,(short)0,(short)1 ,(short)1 ,(short)1 ,(short)0,(short)0,(short)1 ,(short)0}; + maxCapArray = new short[]{(short)1,(short)1,(short)1000,(short)1,(short)1000,(short)1000,(short)1000,(short)1,(short)1,(short)1000,(short)1}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(580, resourceRoot); + dantooinePool4Roots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("fiberplast_dathomir"); + resourceRoot.setResourceClass("Fiberplast"); + resourceRoot.setResourceType("Dathomirian"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_CHEMICAL); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_INORGANIC_CHEMICALS); + minCapArray = new short[]{(short)0,(short)0,(short)1 ,(short)0,(short)1 ,(short)1 ,(short)1 ,(short)0,(short)0,(short)1 ,(short)0}; + maxCapArray = new short[]{(short)1,(short)1,(short)1000,(short)1,(short)1000,(short)1000,(short)1000,(short)1,(short)1,(short)1000,(short)1}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(581, resourceRoot); + dathomirPool4Roots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("fiberplast_endor"); + resourceRoot.setResourceClass("Fiberplast"); + resourceRoot.setResourceType("Endorian"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_CHEMICAL); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_INORGANIC_CHEMICALS); + minCapArray = new short[]{(short)0,(short)0,(short)1 ,(short)0,(short)1 ,(short)1 ,(short)1 ,(short)0,(short)0,(short)1 ,(short)0}; + maxCapArray = new short[]{(short)1,(short)1,(short)1000,(short)1,(short)1000,(short)1000,(short)1000,(short)1,(short)1,(short)1000,(short)1}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(582, resourceRoot); + endorPool4Roots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("fiberplast_lok"); + resourceRoot.setResourceClass("Fiberplast"); + resourceRoot.setResourceType("Lokian"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_CHEMICAL); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_INORGANIC_CHEMICALS); + minCapArray = new short[]{(short)0,(short)0,(short)1 ,(short)0,(short)1 ,(short)1 ,(short)1 ,(short)0,(short)0,(short)1 ,(short)0}; + maxCapArray = new short[]{(short)1,(short)1,(short)1000,(short)1,(short)1000,(short)1000,(short)1000,(short)1,(short)1,(short)1000,(short)1}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(583, resourceRoot); + lokPool4Roots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("fiberplast_naboo"); + resourceRoot.setResourceClass("Fiberplast"); + resourceRoot.setResourceType("Nabooian"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_CHEMICAL); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_INORGANIC_CHEMICALS); + minCapArray = new short[]{(short)0,(short)0,(short)1 ,(short)0,(short)1 ,(short)1 ,(short)1 ,(short)0,(short)0,(short)1 ,(short)0}; + maxCapArray = new short[]{(short)1,(short)1,(short)1000,(short)1,(short)1000,(short)1000,(short)1000,(short)1,(short)1,(short)1000,(short)1}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(584, resourceRoot); + nabooPool4Roots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("fiberplast_rori"); + resourceRoot.setResourceClass("Fiberplast"); + resourceRoot.setResourceType("Rori"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_CHEMICAL); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_INORGANIC_CHEMICALS); + minCapArray = new short[]{(short)0,(short)0,(short)1 ,(short)0,(short)1 ,(short)1 ,(short)1 ,(short)0,(short)0,(short)1 ,(short)0}; + maxCapArray = new short[]{(short)1,(short)1,(short)1000,(short)1,(short)1000,(short)1000,(short)1000,(short)1,(short)1,(short)1000,(short)1}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(585, resourceRoot); + roriPool4Roots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("fiberplast_talus"); + resourceRoot.setResourceClass("Fiberplast"); + resourceRoot.setResourceType("Talusian"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_CHEMICAL); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_INORGANIC_CHEMICALS); + minCapArray = new short[]{(short)0,(short)0,(short)1 ,(short)0,(short)1 ,(short)1 ,(short)1 ,(short)0,(short)0,(short)1 ,(short)0}; + maxCapArray = new short[]{(short)1,(short)1,(short)1000,(short)1,(short)1000,(short)1000,(short)1000,(short)1,(short)1,(short)1000,(short)1}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(586, resourceRoot); + talusPool4Roots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("fiberplast_tatooine"); + resourceRoot.setResourceClass("Fiberplast"); + resourceRoot.setResourceType("Tatooinian"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_CHEMICAL); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_INORGANIC_CHEMICALS); + minCapArray = new short[]{(short)0,(short)0,(short)1 ,(short)0,(short)1 ,(short)1 ,(short)1 ,(short)0,(short)0,(short)1 ,(short)0}; + maxCapArray = new short[]{(short)1,(short)1,(short)1000,(short)1,(short)1000,(short)1000,(short)1000,(short)1,(short)1,(short)1000,(short)1}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(587, resourceRoot); + tattoinePool4Roots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("fiberplast_yavin4"); + resourceRoot.setResourceClass("Fiberplast"); + resourceRoot.setResourceType("Yavinian"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_CHEMICAL); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_INORGANIC_CHEMICALS); + minCapArray = new short[]{(short)0,(short)0,(short)1 ,(short)0,(short)1 ,(short)1 ,(short)1 ,(short)0,(short)0,(short)1 ,(short)0}; + maxCapArray = new short[]{(short)1,(short)1,(short)1000,(short)1,(short)1000,(short)1000,(short)1000,(short)1,(short)1,(short)1000,(short)1}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(588, resourceRoot); + yavinPool4Roots.addElement(resourceRoot); + + // Kashyyyk resources + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("fiberplast_kashyyyk"); + resourceRoot.setResourceClass("Fiberplast"); + resourceRoot.setResourceType("Kashyyykian"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_CHEMICAL); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_INORGANIC_CHEMICALS); + minCapArray = new short[]{(short)0,(short)0,(short)1 ,(short)0,(short)1 ,(short)1 ,(short)1 ,(short)0,(short)0,(short)1 ,(short)0}; + maxCapArray = new short[]{(short)1,(short)1,(short)1000,(short)1,(short)1000,(short)1000,(short)1000,(short)1,(short)1,(short)1000,(short)1}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(589, resourceRoot); + kashyyykPool4Roots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("water_vapor_kashyyyk"); + resourceRoot.setResourceClass("Water Vapor"); + resourceRoot.setResourceType("Kashyyykian"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_WATER); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_INORGANIC_WATER); + minCapArray = new short[]{(short)0,(short)0,(short)1 ,(short)0,(short)0,(short)0,(short)0,(short)0,(short)0,(short)600 ,(short)0}; + maxCapArray = new short[]{(short)1,(short)1,(short)1000,(short)1,(short)1,(short)1,(short)1,(short)1,(short)1,(short)1000,(short)1}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(590, resourceRoot); + kashyyykPool4Roots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("energy_renewable_site_limited_tidal_kashyyyk"); + resourceRoot.setResourceClass("Tidal Renewable Energy"); + resourceRoot.setResourceType("Kashyyykian"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_TIDAL); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_ENERGY_LIQUID); + minCapArray = new short[]{(short)0,(short)0,(short)0,(short)0,(short)0,(short)0,(short)0,(short)0,(short)200 ,(short)500 ,(short)0}; + maxCapArray = new short[]{(short)1,(short)1,(short)1,(short)1,(short)1,(short)1,(short)1,(short)1,(short)1000,(short)1000,(short)1}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(591, resourceRoot); + kashyyykPool4Roots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("milk_domesticated_kashyyyk"); + resourceRoot.setResourceClass("Domesticated Milk"); + resourceRoot.setResourceType("Kashyyykian"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_MILK); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_ORGANIC_BOTTLE_MILK); + minCapArray = new short[]{(short)0,(short)0,(short)1 ,(short)0,(short)0,(short)0,(short)0,(short)0,(short)300 ,(short)1 ,(short)1}; + maxCapArray = new short[]{(short)1,(short)1,(short)1000,(short)1,(short)1,(short)1,(short)1,(short)1,(short)1000,(short)1000,(short)700}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(592, resourceRoot); + kashyyykPool4Roots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("milk_wild_kashyyyk"); + resourceRoot.setResourceClass("Wild Milk"); + resourceRoot.setResourceType("Kashyyykian"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_MILK); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_ORGANIC_BOTTLE_MILK); + minCapArray = new short[]{(short)0,(short)0,(short)1 ,(short)0,(short)0,(short)0,(short)0,(short)0,(short)1 ,(short)1 ,(short)1}; + maxCapArray = new short[]{(short)1,(short)1,(short)1000,(short)1,(short)1,(short)1,(short)1,(short)1,(short)700,(short)1000,(short)1000}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(593, resourceRoot); + kashyyykPool4Roots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("meat_domesticated_kashyyyk"); + resourceRoot.setResourceClass("Domesticated Meat"); + resourceRoot.setResourceType("Kashyyykian"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_MEAT); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_ORGANIC_FOOD); + minCapArray = new short[]{(short)0,(short)0,(short)1 ,(short)0,(short)0,(short)0,(short)0,(short)0,(short)1 ,(short)1 ,(short)300}; + maxCapArray = new short[]{(short)1,(short)1,(short)1000,(short)1,(short)1,(short)1,(short)1,(short)1,(short)700,(short)1000,(short)1000}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(594, resourceRoot); + kashyyykPool4Roots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("meat_wild_kashyyyk"); + resourceRoot.setResourceClass("Wild Meat"); + resourceRoot.setResourceType("Kashyyykian"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_MEAT); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_ORGANIC_FOOD); + minCapArray = new short[]{(short)0,(short)0,(short)1 ,(short)0,(short)0,(short)0,(short)0,(short)0,(short)300 ,(short)1 ,(short)1}; + maxCapArray = new short[]{(short)1,(short)1,(short)1000,(short)1,(short)1,(short)1,(short)1,(short)1,(short)1000,(short)1000,(short)700}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(595, resourceRoot); + kashyyykPool4Roots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("meat_herbivore_kashyyyk"); + resourceRoot.setResourceClass("Herbivore Meat"); + resourceRoot.setResourceType("Kashyyykian"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_MEAT); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_ORGANIC_FOOD); + minCapArray = new short[]{(short)0,(short)0,(short)1 ,(short)0,(short)0,(short)0,(short)0,(short)0,(short)1 ,(short)1 ,(short)1}; + maxCapArray = new short[]{(short)1,(short)1,(short)1000,(short)1,(short)1,(short)1,(short)1,(short)1,(short)700,(short)1000,(short)700}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(596, resourceRoot); + kashyyykPool4Roots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("meat_carnivore_kashyyyk"); + resourceRoot.setResourceClass("Carnivore Meat"); + resourceRoot.setResourceType("Kashyyykian"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_MEAT); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_ORGANIC_FOOD); + minCapArray = new short[]{(short)0,(short)0,(short)1 ,(short)0,(short)0,(short)0,(short)0,(short)0,(short)300 ,(short)1 ,(short)300}; + maxCapArray = new short[]{(short)1,(short)1,(short)1000,(short)1,(short)1,(short)1,(short)1,(short)1,(short)1000,(short)1000,(short)1000}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(597, resourceRoot); + kashyyykPool4Roots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("meat_reptilian_kashyyyk"); + resourceRoot.setResourceClass("Reptilian Meat"); + resourceRoot.setResourceType("Kashyyykian"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_MEAT); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_ORGANIC_FOOD); + minCapArray = new short[]{(short)0,(short)0,(short)1 ,(short)0,(short)0,(short)0,(short)0,(short)0,(short)1 ,(short)1 ,(short)1}; + maxCapArray = new short[]{(short)1,(short)1,(short)1000,(short)1,(short)1,(short)1,(short)1,(short)1,(short)1000,(short)1000,(short)1000}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(598, resourceRoot); + kashyyykPool4Roots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("meat_avian_kashyyyk"); + resourceRoot.setResourceClass("Avian Meat"); + resourceRoot.setResourceType("Kashyyykian"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_MEAT); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_ORGANIC_FOOD); + minCapArray = new short[]{(short)0,(short)0,(short)1 ,(short)0,(short)0,(short)0,(short)0,(short)0,(short)300 ,(short)1 ,(short)1}; + maxCapArray = new short[]{(short)1,(short)1,(short)1000,(short)1,(short)1,(short)1,(short)1,(short)1,(short)1000,(short)1000,(short)700}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(599, resourceRoot); + kashyyykPool4Roots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("meat_egg_kashyyyk"); + resourceRoot.setResourceClass("Egg Meat"); + resourceRoot.setResourceType("Kashyyykian"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_MEAT); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_ORGANIC_FOOD); + minCapArray = new short[]{(short)0,(short)0,(short)1 ,(short)0,(short)0,(short)0,(short)0,(short)0,(short)1 ,(short)1 ,(short)1}; + maxCapArray = new short[]{(short)1,(short)1,(short)1000,(short)1,(short)1,(short)1,(short)1,(short)1,(short)1000,(short)1000,(short)1000}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(600, resourceRoot); + kashyyykPool4Roots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("meat_insect_kashyyyk"); + resourceRoot.setResourceClass("Insect Meat"); + resourceRoot.setResourceType("Kashyyykian"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_MEAT); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_ORGANIC_FOOD); + minCapArray = new short[]{(short)0,(short)0,(short)1 ,(short)0,(short)0,(short)0,(short)0,(short)0,(short)300 ,(short)1 ,(short)1}; + maxCapArray = new short[]{(short)1,(short)1,(short)1000,(short)1,(short)1,(short)1,(short)1,(short)1,(short)1000,(short)1000,(short)1000}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(601, resourceRoot); + kashyyykPool4Roots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("seafood_fish_kashyyyk"); + resourceRoot.setResourceClass("Fish Meat"); + resourceRoot.setResourceType("Kashyyykian"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_MEAT); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_ORGANIC_FOOD); + minCapArray = new short[]{(short)0,(short)0,(short)1 ,(short)0,(short)0,(short)0,(short)0,(short)0,(short)1 ,(short)1 ,(short)1}; + maxCapArray = new short[]{(short)1,(short)1,(short)1000,(short)1,(short)1,(short)1,(short)1,(short)1,(short)1000,(short)1000,(short)1000}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(602, resourceRoot); + kashyyykPool4Roots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("seafood_crustacean_kashyyyk"); + resourceRoot.setResourceClass("Crustacean Meat"); + resourceRoot.setResourceType("Kashyyykian"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_MEAT); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_ORGANIC_FOOD); + minCapArray = new short[]{(short)0,(short)0,(short)1 ,(short)0,(short)0,(short)0,(short)0,(short)0,(short)1 ,(short)1 ,(short)1}; + maxCapArray = new short[]{(short)1,(short)1,(short)1000,(short)1,(short)1,(short)1,(short)1,(short)1,(short)1000,(short)1000,(short)1000}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(603, resourceRoot); + kashyyykPool4Roots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("seafood_mollusk_kashyyyk"); + resourceRoot.setResourceClass("Mollusk Meat"); + resourceRoot.setResourceType("Kashyyykian"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_MEAT); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_ORGANIC_FOOD); + minCapArray = new short[]{(short)0,(short)0,(short)1 ,(short)0,(short)0,(short)0,(short)0,(short)0,(short)1 ,(short)1 ,(short)1}; + maxCapArray = new short[]{(short)1,(short)1,(short)1000,(short)1,(short)1,(short)1,(short)1,(short)1,(short)1000,(short)1000,(short)1000}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(604, resourceRoot); + kashyyykPool4Roots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("bone_mammal_kashyyyk"); + resourceRoot.setResourceClass("Animal Bones"); + resourceRoot.setResourceType("Kashyyykian"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_BONES); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_ORGANIC_STRUCTURE); + minCapArray = new short[]{(short)0,(short)0,(short)300 ,(short)0,(short)1 ,(short)400 ,(short)1 ,(short)0,(short)0,(short)1 ,(short)0}; + maxCapArray = new short[]{(short)1,(short)1,(short)1000,(short)1,(short)500,(short)1000,(short)1000,(short)1,(short)1,(short)1000,(short)1}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(605, resourceRoot); + kashyyykPool4Roots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("bone_avian_kashyyyk"); + resourceRoot.setResourceClass("Avian Bones"); + resourceRoot.setResourceType("Kashyyykian"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_BONES); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_ORGANIC_STRUCTURE); + minCapArray = new short[]{(short)0,(short)0,(short)1 ,(short)0,(short)1 ,(short)100,(short)1 ,(short)0,(short)0,(short)1 ,(short)0}; + maxCapArray = new short[]{(short)1,(short)1,(short)700,(short)1,(short)600,(short)500,(short)500,(short)1,(short)1,(short)1000,(short)1}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(606, resourceRoot); + kashyyykPool4Roots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("bone_horn_kashyyyk"); + resourceRoot.setResourceClass("Horn"); + resourceRoot.setResourceType("Kashyyykian"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_HORN); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_ORGANIC_STRUCTURE); + minCapArray = new short[]{(short)0,(short)0,(short)200 ,(short)0,(short)1 ,(short)300,(short)1 ,(short)0,(short)0,(short)1 ,(short)0}; + maxCapArray = new short[]{(short)1,(short)1,(short)1000,(short)1,(short)500,(short)700,(short)500,(short)1,(short)1,(short)1000,(short)1}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(607, resourceRoot); + kashyyykPool4Roots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("hide_bristley_kashyyyk"); + resourceRoot.setResourceClass("Bristley Hide"); + resourceRoot.setResourceType("Kashyyykian"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_HIDE); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_ORGANIC_BRISTLEY_HIDE); + minCapArray = new short[]{(short)0,(short)0,(short)1 ,(short)0,(short)1 ,(short)1 ,(short)1 ,(short)0,(short)0,(short)1 ,(short)0}; + maxCapArray = new short[]{(short)1,(short)1,(short)1000,(short)1,(short)1000,(short)1000,(short)1000,(short)1,(short)1,(short)1000,(short)1}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(608, resourceRoot); + kashyyykPool4Roots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("hide_leathery_kashyyyk"); + resourceRoot.setResourceClass("Leathery Hide"); + resourceRoot.setResourceType("Kashyyykian"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_HIDE); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_ORGANIC_LEATHERY_HIDE); + minCapArray = new short[]{(short)0,(short)0,(short)1 ,(short)0,(short)1 ,(short)1 ,(short)1 ,(short)0,(short)0,(short)1 ,(short)0}; + maxCapArray = new short[]{(short)1,(short)1,(short)1000,(short)1,(short)1000,(short)1000,(short)1000,(short)1,(short)1,(short)1000,(short)1}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(609, resourceRoot); + kashyyykPool4Roots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("hide_wooly_kashyyyk"); + resourceRoot.setResourceClass("Wooly Hide"); + resourceRoot.setResourceType("Kashyyykian"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_HIDE); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_ORGANIC_WOOLY_HIDE); + minCapArray = new short[]{(short)0,(short)0,(short)1 ,(short)0,(short)1 ,(short)1 ,(short)1 ,(short)0,(short)0,(short)1 ,(short)0}; + maxCapArray = new short[]{(short)1,(short)1,(short)1000,(short)1,(short)1000,(short)1000,(short)1000,(short)1,(short)1,(short)1000,(short)1}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(610, resourceRoot); + kashyyykPool4Roots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("hide_scaley_kashyyyk"); + resourceRoot.setResourceClass("Scaley Hide"); + resourceRoot.setResourceType("Kashyyykian"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_HIDE); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_ORGANIC_SCALEY_HIDE); + minCapArray = new short[]{(short)0,(short)0,(short)1 ,(short)0,(short)1 ,(short)1 ,(short)1 ,(short)0,(short)0,(short)1 ,(short)0}; + maxCapArray = new short[]{(short)1,(short)1,(short)1000,(short)1,(short)1000,(short)1000,(short)1000,(short)1,(short)1,(short)1000,(short)1}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(611, resourceRoot); + kashyyykPool4Roots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("corn_domesticated_kashyyyk"); + resourceRoot.setResourceClass("Domesticated Corn"); + resourceRoot.setResourceType("Kashyyykian"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_FLORA); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_ORGANIC_CORN); + minCapArray = new short[]{(short)0,(short)0,(short)1 ,(short)0,(short)0,(short)0,(short)0,(short)0,(short)300 ,(short)1 ,(short)1}; + maxCapArray = new short[]{(short)1,(short)1,(short)1000,(short)1,(short)1,(short)1,(short)1,(short)1,(short)1000,(short)1000,(short)700}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(612, resourceRoot); + kashyyykPool4Roots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("corn_wild_kashyyyk"); + resourceRoot.setResourceClass("Wild Corn"); + resourceRoot.setResourceType("Kashyyykian"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_FLORA); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_ORGANIC_CORN); + minCapArray = new short[]{(short)0,(short)0,(short)1 ,(short)0,(short)0,(short)0,(short)0,(short)0,(short)1 ,(short)1 ,(short)300}; + maxCapArray = new short[]{(short)1,(short)1,(short)1000,(short)1,(short)1,(short)1,(short)1,(short)1,(short)700,(short)1000,(short)1000}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(613, resourceRoot); + kashyyykPool4Roots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("rice_domesticated_kashyyyk"); + resourceRoot.setResourceClass("Domesticated Rice"); + resourceRoot.setResourceType("Kashyyykian"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_FLORA); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_ORGANIC_RICE); + minCapArray = new short[]{(short)0,(short)0,(short)1 ,(short)0,(short)0,(short)0,(short)0,(short)0,(short)300 ,(short)1 ,(short)1}; + maxCapArray = new short[]{(short)1,(short)1,(short)1000,(short)1,(short)1,(short)1,(short)1,(short)1,(short)1000,(short)1000,(short)700}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(614, resourceRoot); + kashyyykPool4Roots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("rice_wild_kashyyyk"); + resourceRoot.setResourceClass("Wild Rice"); + resourceRoot.setResourceType("Kashyyykian"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_FLORA); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_ORGANIC_RICE); + minCapArray = new short[]{(short)0,(short)0,(short)0 ,(short)0,(short)0,(short)0,(short)0,(short)0,(short)1 ,(short)1 ,(short)300}; + maxCapArray = new short[]{(short)1,(short)1,(short)1000,(short)1,(short)1,(short)1,(short)1,(short)1,(short)700,(short)1000,(short)1000}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(615, resourceRoot); + kashyyykPool4Roots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("oats_domesticated_kashyyyk"); + resourceRoot.setResourceClass("Domesticated Oats"); + resourceRoot.setResourceType("Kashyyykian"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_FLORA); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_ORGANIC_OATS); + minCapArray = new short[]{(short)0,(short)0,(short)1 ,(short)0,(short)0,(short)0,(short)0,(short)0,(short)300 ,(short)1 ,(short)1}; + maxCapArray = new short[]{(short)1,(short)1,(short)1000,(short)1,(short)1,(short)1,(short)1,(short)1,(short)1000,(short)1000,(short)700}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(616, resourceRoot); + kashyyykPool4Roots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("oats_wild_kashyyyk"); + resourceRoot.setResourceClass("Wild Oats"); + resourceRoot.setResourceType("Kashyyykian"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_FLORA); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_ORGANIC_OATS); + minCapArray = new short[]{(short)0,(short)0,(short)1 ,(short)0,(short)0,(short)0,(short)0,(short)0,(short)1 ,(short)1 ,(short)300}; + maxCapArray = new short[]{(short)1,(short)1,(short)1000,(short)1,(short)1,(short)1,(short)1,(short)1,(short)700,(short)1000,(short)1000}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(617, resourceRoot); + kashyyykPool4Roots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("wheat_domesticated_kashyyyk"); + resourceRoot.setResourceClass("Domesticated Wheat"); + resourceRoot.setResourceType("Kashyyykian"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_FLORA); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_ORGANIC_WHEAT); + minCapArray = new short[]{(short)0,(short)0,(short)1 ,(short)0,(short)0,(short)0,(short)0,(short)0,(short)300 ,(short)1 ,(short)1}; + maxCapArray = new short[]{(short)1,(short)1,(short)1000,(short)1,(short)1,(short)1,(short)1,(short)1,(short)1000,(short)1000,(short)700}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(618, resourceRoot); + kashyyykPool4Roots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("wheat_wild_kashyyyk"); + resourceRoot.setResourceClass("Wild Wheat"); + resourceRoot.setResourceType("Kashyyykian"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_FLORA); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_ORGANIC_WHEAT); + minCapArray = new short[]{(short)0,(short)0,(short)1 ,(short)0,(short)0,(short)0,(short)0,(short)0,(short)1 ,(short)1 ,(short)300}; + maxCapArray = new short[]{(short)1,(short)1,(short)1000,(short)1,(short)1,(short)1,(short)1,(short)1,(short)700,(short)1000,(short)1000}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(619, resourceRoot); + kashyyykPool4Roots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("vegetable_greens_kashyyyk"); + resourceRoot.setResourceClass("Vegetable Greens"); + resourceRoot.setResourceType("Kashyyykian"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_FLORA); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_ORGANIC_GREEN_VEGETABLES); + minCapArray = new short[]{(short)0,(short)0,(short)1 ,(short)0,(short)0,(short)0,(short)0,(short)0,(short)1 ,(short)1 ,(short)1}; + maxCapArray = new short[]{(short)1,(short)1,(short)1000,(short)1,(short)1,(short)1,(short)1,(short)1,(short)1000,(short)1000,(short)1000}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(620, resourceRoot); + kashyyykPool4Roots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("vegetable_beans_kashyyyk"); + resourceRoot.setResourceClass("Vegetable Beans"); + resourceRoot.setResourceType("Kashyyykian"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_FLORA); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_ORGANIC_BEAN); + minCapArray = new short[]{(short)0,(short)0,(short)1 ,(short)0,(short)0,(short)0,(short)0,(short)0,(short)1 ,(short)1 ,(short)1}; + maxCapArray = new short[]{(short)1,(short)1,(short)1000,(short)1,(short)1,(short)1,(short)1,(short)1,(short)1000,(short)1000,(short)1000}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(621, resourceRoot); + kashyyykPool4Roots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("vegetable_tubers_kashyyyk"); + resourceRoot.setResourceClass("Vegetable Tubers"); + resourceRoot.setResourceType("Kashyyykian"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_FLORA); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_ORGANIC_TUBER); + minCapArray = new short[]{(short)0,(short)0,(short)1 ,(short)0,(short)0,(short)0,(short)0,(short)0,(short)1 ,(short)1 ,(short)1}; + maxCapArray = new short[]{(short)1,(short)1,(short)1000,(short)1,(short)1,(short)1,(short)1,(short)1,(short)1000,(short)1000,(short)1000}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(622, resourceRoot); + kashyyykPool4Roots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("vegetable_fungi_kashyyyk"); + resourceRoot.setResourceClass("Vegetable Fungi"); + resourceRoot.setResourceType("Kashyyykian"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_FLORA); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_ORGANIC_FUNGI); + minCapArray = new short[]{(short)0,(short)0,(short)1 ,(short)0,(short)0,(short)0,(short)0,(short)0,(short)1 ,(short)1 ,(short)1}; + maxCapArray = new short[]{(short)1,(short)1,(short)1000,(short)1,(short)1,(short)1,(short)1,(short)1,(short)1000,(short)1000,(short)1000}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(623, resourceRoot); + kashyyykPool4Roots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("fruit_fruits_kashyyyk"); + resourceRoot.setResourceClass("Vegetable Fruits"); + resourceRoot.setResourceType("Kashyyykian"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_FLORA); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_ORGANIC_FRUIT); + minCapArray = new short[]{(short)0,(short)0,(short)1 ,(short)0,(short)0,(short)0,(short)0,(short)0,(short)1 ,(short)1 ,(short)1}; + maxCapArray = new short[]{(short)1,(short)1,(short)1000,(short)1,(short)1,(short)1,(short)1,(short)1,(short)1000,(short)1000,(short)1000}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(624, resourceRoot); + kashyyykPool4Roots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("fruit_berries_kashyyyk"); + resourceRoot.setResourceClass("Vegetable Berries"); + resourceRoot.setResourceType("Kashyyykian"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_FLORA); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_ORGANIC_FRUIT); + minCapArray = new short[]{(short)0,(short)0,(short)1 ,(short)0,(short)0,(short)0,(short)0,(short)0,(short)1 ,(short)1 ,(short)1}; + maxCapArray = new short[]{(short)1,(short)1,(short)1000,(short)1,(short)1,(short)1,(short)1,(short)1,(short)1000,(short)1000,(short)1000}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(625, resourceRoot); + kashyyykPool4Roots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("fruit_flowers_kashyyyk"); + resourceRoot.setResourceClass("Flower Fruit"); + resourceRoot.setResourceType("Kashyyykian"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_FLORA); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_ORGANIC_FRUIT); + minCapArray = new short[]{(short)0,(short)0,(short)1 ,(short)0,(short)0,(short)0,(short)0,(short)0,(short)1 ,(short)1 ,(short)1}; + maxCapArray = new short[]{(short)1,(short)1,(short)1000,(short)1,(short)1,(short)1,(short)1,(short)1,(short)700,(short)1000,(short)1000}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(626, resourceRoot); + kashyyykPool4Roots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("wood_deciduous_kashyyyk"); + resourceRoot.setResourceClass("Deciduous Wood"); + resourceRoot.setResourceType("Kashyyykian"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_FLORA); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_ORGANIC_FOOD); + minCapArray = new short[]{(short)0,(short)0,(short)1 ,(short)0,(short)400 ,(short)300,(short)1 ,(short)0,(short)0,(short)1 ,(short)0}; + maxCapArray = new short[]{(short)1,(short)1,(short)800,(short)1,(short)1000,(short)400,(short)800,(short)1,(short)1,(short)1000,(short)1}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(627, resourceRoot); + kashyyykPool4Roots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("softwood_conifer_kashyyyk"); + resourceRoot.setResourceClass("Conifer Wood"); + resourceRoot.setResourceType("Kashyyykian"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_FLORA); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_ORGANIC_FOOD); + minCapArray = new short[]{(short)0,(short)0,(short)1 ,(short)0,(short)600 ,(short)100,(short)1 ,(short)0,(short)0,(short)1 ,(short)0}; + maxCapArray = new short[]{(short)1,(short)1,(short)600,(short)1,(short)1000,(short)400,(short)300,(short)1,(short)1,(short)1000,(short)1}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(628, resourceRoot); + kashyyykPool4Roots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("softwood_evergreen_kashyyyk"); + resourceRoot.setResourceClass("Evergreen Wood"); + resourceRoot.setResourceType("Kashyyykian"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_FLORA); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_ORGANIC_FOOD); + minCapArray = new short[]{(short)0,(short)0,(short)1 ,(short)0,(short)800 ,(short)1 ,(short)1 ,(short)0,(short)0,(short)1 ,(short)0}; + maxCapArray = new short[]{(short)1,(short)1,(short)500,(short)1,(short)1000,(short)400,(short)300,(short)1,(short)1,(short)1000,(short)1}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(629, resourceRoot); + kashyyykPool4Roots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("energy_renewable_unlimited_wind_kashyyyk"); + resourceRoot.setResourceClass("Wind Renewable Energy"); + resourceRoot.setResourceType("Kashyyykian"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_WIND); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_ENERGY_LIQUID); + minCapArray = new short[]{(short)0,(short)0,(short)0,(short)0,(short)0,(short)0,(short)0,(short)0,(short)1 ,(short)500,(short)0}; + maxCapArray = new short[]{(short)1,(short)1,(short)1,(short)1,(short)1,(short)1,(short)1,(short)1,(short)400,(short)500,(short)1}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(630, resourceRoot); + kashyyykPool4Roots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("energy_renewable_unlimited_solar_kashyyyk"); + resourceRoot.setResourceClass("Solar Renewable Energy"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_SOLAR); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_ENERGY_LIQUID); + minCapArray = new short[]{(short)0,(short)0,(short)0,(short)0,(short)0,(short)0,(short)0,(short)0,(short)200,(short)500,(short)0}; + maxCapArray = new short[]{(short)1,(short)1,(short)1,(short)1,(short)1,(short)1,(short)1,(short)1,(short)600,(short)500,(short)1}; + resourceRoot.setResourceType("Kashyyykian"); + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(631, resourceRoot); + kashyyykPool4Roots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("energy_renewable_site_limited_hydron3_kashyyyk"); + resourceRoot.setResourceClass("Hydron-3 Renewable Energy"); + resourceRoot.setResourceType("Kashyyykian"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_HYDRON); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_ENERGY_LIQUID); + minCapArray = new short[]{(short)0,(short)0,(short)0,(short)0,(short)0,(short)0,(short)0,(short)0,(short)200 ,(short)500 ,(short)0}; + maxCapArray = new short[]{(short)1,(short)1,(short)1,(short)1,(short)1,(short)1,(short)1,(short)1,(short)1000,(short)1000,(short)1}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(632, resourceRoot); + kashyyykPool4Roots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("energy_renewable_site_limited_geothermal_kashyyyk"); + resourceRoot.setResourceClass("Geothermal Renewable Energy"); + resourceRoot.setResourceType("Kashyyykian"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_GEOTHERM); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_ENERGY_LIQUID); + minCapArray = new short[]{(short)0,(short)0,(short)0,(short)0,(short)0,(short)0,(short)0,(short)0,(short)200 ,(short)500 ,(short)0}; + maxCapArray = new short[]{(short)1,(short)1,(short)1,(short)1,(short)1,(short)1,(short)1,(short)1,(short)1000,(short)1000,(short)1}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(633, resourceRoot); + kashyyykPool4Roots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("milk_domesticated_mustafar"); + resourceRoot.setResourceClass("Domesticated Milk"); + resourceRoot.setResourceType("Mustafarian"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_MILK); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_ORGANIC_BOTTLE_MILK); + minCapArray = new short[]{(short)0,(short)0,(short)1 ,(short)0,(short)0,(short)0,(short)0,(short)0,(short)300 ,(short)1 ,(short)1}; + maxCapArray = new short[]{(short)1,(short)1,(short)1000,(short)1,(short)1,(short)1,(short)1,(short)1,(short)1000,(short)1000,(short)700}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(634, resourceRoot); + mustafarPool4Roots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("milk_wild_mustafar"); + resourceRoot.setResourceClass("Wild Milk"); + resourceRoot.setResourceType("Mustafarian"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_MILK); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_ORGANIC_BOTTLE_MILK); + minCapArray = new short[]{(short)0,(short)0,(short)1 ,(short)0,(short)0,(short)0,(short)0,(short)0,(short)1 ,(short)1 ,(short)1}; + maxCapArray = new short[]{(short)1,(short)1,(short)1000,(short)1,(short)1,(short)1,(short)1,(short)1,(short)700,(short)1000,(short)1000}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(635, resourceRoot); + mustafarPool4Roots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("meat_domesticated_mustafar"); + resourceRoot.setResourceClass("Domesticated Meat"); + resourceRoot.setResourceType("Mustafarian"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_MEAT); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_ORGANIC_FOOD); + minCapArray = new short[]{(short)0,(short)0,(short)1 ,(short)0,(short)0,(short)0,(short)0,(short)0,(short)1 ,(short)1 ,(short)300}; + maxCapArray = new short[]{(short)1,(short)1,(short)1000,(short)1,(short)1,(short)1,(short)1,(short)1,(short)700,(short)1000,(short)1000}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(636, resourceRoot); + mustafarPool4Roots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("meat_wild_mustafar"); + resourceRoot.setResourceClass("Wild Meat"); + resourceRoot.setResourceType("Mustafarian"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_MEAT); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_ORGANIC_FOOD); + minCapArray = new short[]{(short)0,(short)0,(short)1 ,(short)0,(short)0,(short)0,(short)0,(short)0,(short)300 ,(short)1 ,(short)1}; + maxCapArray = new short[]{(short)1,(short)1,(short)1000,(short)1,(short)1,(short)1,(short)1,(short)1,(short)1000,(short)1000,(short)700}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(637, resourceRoot); + mustafarPool4Roots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("meat_herbivore_mustafar"); + resourceRoot.setResourceClass("Herbivore Meat"); + resourceRoot.setResourceType("Mustafarian"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_MEAT); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_ORGANIC_FOOD); + minCapArray = new short[]{(short)0,(short)0,(short)1 ,(short)0,(short)0,(short)0,(short)0,(short)0,(short)1 ,(short)1 ,(short)1}; + maxCapArray = new short[]{(short)1,(short)1,(short)1000,(short)1,(short)1,(short)1,(short)1,(short)1,(short)700,(short)1000,(short)700}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(638, resourceRoot); + mustafarPool4Roots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("meat_carnivore_mustafar"); + resourceRoot.setResourceClass("Carnivore Meat"); + resourceRoot.setResourceType("Mustafarian"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_MEAT); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_ORGANIC_FOOD); + minCapArray = new short[]{(short)0,(short)0,(short)1 ,(short)0,(short)0,(short)0,(short)0,(short)0,(short)300 ,(short)1 ,(short)300}; + maxCapArray = new short[]{(short)1,(short)1,(short)1000,(short)1,(short)1,(short)1,(short)1,(short)1,(short)1000,(short)1000,(short)1000}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(639, resourceRoot); + mustafarPool4Roots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("meat_avian_mustafar"); + resourceRoot.setResourceClass("Avian Meat"); + resourceRoot.setResourceType("Mustafarian"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_MEAT); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_ORGANIC_FOOD); + minCapArray = new short[]{(short)0,(short)0,(short)1 ,(short)0,(short)0,(short)0,(short)0,(short)0,(short)300 ,(short)1 ,(short)1}; + maxCapArray = new short[]{(short)1,(short)1,(short)1000,(short)1,(short)1,(short)1,(short)1,(short)1,(short)1000,(short)1000,(short)700}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(640, resourceRoot); + mustafarPool4Roots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("meat_egg_mustafar"); + resourceRoot.setResourceClass("Egg Meat"); + resourceRoot.setResourceType("Mustafarian"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_MEAT); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_ORGANIC_FOOD); + minCapArray = new short[]{(short)0,(short)0,(short)1 ,(short)0,(short)0,(short)0,(short)0,(short)0,(short)1 ,(short)1 ,(short)1}; + maxCapArray = new short[]{(short)1,(short)1,(short)1000,(short)1,(short)1,(short)1,(short)1,(short)1,(short)1000,(short)1000,(short)1000}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(641, resourceRoot); + mustafarPool4Roots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("meat_insect_mustafar"); + resourceRoot.setResourceClass("Insect Meat"); + resourceRoot.setResourceType("Mustafarian"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_MEAT); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_ORGANIC_FOOD); + minCapArray = new short[]{(short)0,(short)0,(short)1 ,(short)0,(short)0,(short)0,(short)0,(short)0,(short)300 ,(short)1 ,(short)1}; + maxCapArray = new short[]{(short)1,(short)1,(short)1000,(short)1,(short)1,(short)1,(short)1,(short)1,(short)1000,(short)1000,(short)1000}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(642, resourceRoot); + mustafarPool4Roots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("seafood_fish_mustafar"); + resourceRoot.setResourceClass("Fish Meat"); + resourceRoot.setResourceType("Mustafarian"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_MEAT); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_ORGANIC_FOOD); + minCapArray = new short[]{(short)0,(short)0,(short)1 ,(short)0,(short)0,(short)0,(short)0,(short)0,(short)1 ,(short)1 ,(short)1}; + maxCapArray = new short[]{(short)1,(short)1,(short)1000,(short)1,(short)1,(short)1,(short)1,(short)1,(short)1000,(short)1000,(short)1000}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(643, resourceRoot); + mustafarPool4Roots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("seafood_crustacean_mustafar"); + resourceRoot.setResourceClass("Crustacean Meat"); + resourceRoot.setResourceType("Mustafarian"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_MEAT); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_ORGANIC_FOOD); + minCapArray = new short[]{(short)0,(short)0,(short)1 ,(short)0,(short)0,(short)0,(short)0,(short)0,(short)1 ,(short)1 ,(short)1}; + maxCapArray = new short[]{(short)1,(short)1,(short)1000,(short)1,(short)1,(short)1,(short)1,(short)1,(short)1000,(short)1000,(short)1000}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(644, resourceRoot); + mustafarPool4Roots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("seafood_mollusk_mustafar"); + resourceRoot.setResourceClass("Mollusk Meat"); + resourceRoot.setResourceType("Mustafarian"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_MEAT); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_ORGANIC_FOOD); + minCapArray = new short[]{(short)0,(short)0,(short)1 ,(short)0,(short)0,(short)0,(short)0,(short)0,(short)1 ,(short)1 ,(short)1}; + maxCapArray = new short[]{(short)1,(short)1,(short)1000,(short)1,(short)1,(short)1,(short)1,(short)1,(short)1000,(short)1000,(short)1000}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(645, resourceRoot); + mustafarPool4Roots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("bone_mammal_mustafar"); + resourceRoot.setResourceClass("Animal Bones"); + resourceRoot.setResourceType("Mustafarian"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_BONES); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_ORGANIC_STRUCTURE); + minCapArray = new short[]{(short)0,(short)0,(short)300 ,(short)0,(short)1 ,(short)400 ,(short)1 ,(short)0,(short)0,(short)1 ,(short)0}; + maxCapArray = new short[]{(short)1,(short)1,(short)1000,(short)1,(short)500,(short)1000,(short)1000,(short)1,(short)1,(short)1000,(short)1}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(646, resourceRoot); + mustafarPool4Roots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("bone_avian_mustafar"); + resourceRoot.setResourceClass("Avian Bones"); + resourceRoot.setResourceType("Mustafarian"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_BONES); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_ORGANIC_STRUCTURE); + minCapArray = new short[]{(short)0,(short)0,(short)1 ,(short)0,(short)1 ,(short)100,(short)1 ,(short)0,(short)0,(short)1 ,(short)0}; + maxCapArray = new short[]{(short)1,(short)1,(short)700,(short)1,(short)600,(short)500,(short)500,(short)1,(short)1,(short)1000,(short)1}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(647, resourceRoot); + mustafarPool4Roots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("bone_horn_mustafar"); + resourceRoot.setResourceClass("Horn"); + resourceRoot.setResourceType("Mustafarian"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_HORN); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_ORGANIC_STRUCTURE); + minCapArray = new short[]{(short)0,(short)0,(short)200 ,(short)0,(short)1 ,(short)300,(short)1 ,(short)0,(short)0,(short)1 ,(short)0}; + maxCapArray = new short[]{(short)1,(short)1,(short)1000,(short)1,(short)500,(short)700,(short)500,(short)1,(short)1,(short)1000,(short)1}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(648, resourceRoot); + mustafarPool4Roots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("hide_wooly_mustafar"); + resourceRoot.setResourceClass("Wooly Hide"); + resourceRoot.setResourceType("Mustafarian"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_HIDE); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_ORGANIC_WOOLY_HIDE); + minCapArray = new short[]{(short)0,(short)0,(short)1 ,(short)0,(short)1 ,(short)1 ,(short)1 ,(short)0,(short)0,(short)1 ,(short)0}; + maxCapArray = new short[]{(short)1,(short)1,(short)1000,(short)1,(short)1000,(short)1000,(short)1000,(short)1,(short)1,(short)1000,(short)1}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(649, resourceRoot); + mustafarPool4Roots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("hide_bristley_mustafar"); + resourceRoot.setResourceClass("Bristley Hide"); + resourceRoot.setResourceType("Mustafarian"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_HIDE); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_ORGANIC_BRISTLEY_HIDE); + minCapArray = new short[]{(short)0,(short)0,(short)1 ,(short)0,(short)1 ,(short)1 ,(short)1 ,(short)0,(short)0,(short)1 ,(short)0}; + maxCapArray = new short[]{(short)1,(short)1,(short)1000,(short)1,(short)1000,(short)1000,(short)1000,(short)1,(short)1,(short)1000,(short)1}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(650, resourceRoot); + mustafarPool4Roots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("hide_leathery_mustafar"); + resourceRoot.setResourceClass("Leathery Hide"); + resourceRoot.setResourceType("Mustafarian"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_HIDE); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_ORGANIC_LEATHERY_HIDE); + minCapArray = new short[]{(short)0,(short)0,(short)1 ,(short)0,(short)1 ,(short)1 ,(short)1 ,(short)0,(short)0,(short)1 ,(short)0}; + maxCapArray = new short[]{(short)1,(short)1,(short)1000,(short)1,(short)1000,(short)1000,(short)1000,(short)1,(short)1,(short)1000,(short)1}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(651, resourceRoot); + mustafarPool4Roots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("hide_scaley_mustafar"); + resourceRoot.setResourceClass("Scaley Hide"); + resourceRoot.setResourceType("Mustafarian"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_HIDE); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_ORGANIC_SCALEY_HIDE); + minCapArray = new short[]{(short)0,(short)0,(short)1 ,(short)0,(short)1 ,(short)1 ,(short)1 ,(short)0,(short)0,(short)1 ,(short)0}; + maxCapArray = new short[]{(short)1,(short)1,(short)1000,(short)1,(short)1000,(short)1000,(short)1000,(short)1,(short)1,(short)1000,(short)1}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(652, resourceRoot); + mustafarPool4Roots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("corn_domesticated_mustafar"); + resourceRoot.setResourceClass("Domesticated Corn"); + resourceRoot.setResourceType("Mustafarian"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_FLORA); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_ORGANIC_CORN); + minCapArray = new short[]{(short)0,(short)0,(short)1 ,(short)0,(short)0,(short)0,(short)0,(short)0,(short)300 ,(short)1 ,(short)1}; + maxCapArray = new short[]{(short)1,(short)1,(short)1000,(short)1,(short)1,(short)1,(short)1,(short)1,(short)1000,(short)1000,(short)700}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(653, resourceRoot); + mustafarPool4Roots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("corn_wild_mustafar"); + resourceRoot.setResourceClass("Wild Corn"); + resourceRoot.setResourceType("Mustafarian"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_FLORA); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_ORGANIC_CORN); + minCapArray = new short[]{(short)0,(short)0,(short)1 ,(short)0,(short)0,(short)0,(short)0,(short)0,(short)1 ,(short)1 ,(short)300}; + maxCapArray = new short[]{(short)1,(short)1,(short)1000,(short)1,(short)1,(short)1,(short)1,(short)1,(short)700,(short)1000,(short)1000}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(654, resourceRoot); + mustafarPool4Roots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("rice_domesticated_mustafar"); + resourceRoot.setResourceClass("Domesticated Rice"); + resourceRoot.setResourceType("Mustafarian"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_FLORA); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_ORGANIC_RICE); + minCapArray = new short[]{(short)0,(short)0,(short)1 ,(short)0,(short)0,(short)0,(short)0,(short)0,(short)300 ,(short)1 ,(short)1}; + maxCapArray = new short[]{(short)1,(short)1,(short)1000,(short)1,(short)1,(short)1,(short)1,(short)1,(short)1000,(short)1000,(short)700}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(655, resourceRoot); + mustafarPool4Roots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("rice_wild_mustafar"); + resourceRoot.setResourceClass("Wild Rice"); + resourceRoot.setResourceType("Mustafarian"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_FLORA); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_ORGANIC_RICE); + minCapArray = new short[]{(short)0,(short)0,(short)0 ,(short)0,(short)0,(short)0,(short)0,(short)0,(short)1 ,(short)1 ,(short)300}; + maxCapArray = new short[]{(short)1,(short)1,(short)1000,(short)1,(short)1,(short)1,(short)1,(short)1,(short)700,(short)1000,(short)1000}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(656, resourceRoot); + mustafarPool4Roots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("oats_domesticated_mustafar"); + resourceRoot.setResourceClass("Domesticated Oats"); + resourceRoot.setResourceType("Mustafarian"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_FLORA); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_ORGANIC_OATS); + minCapArray = new short[]{(short)0,(short)0,(short)1 ,(short)0,(short)0,(short)0,(short)0,(short)0,(short)300 ,(short)1 ,(short)1}; + maxCapArray = new short[]{(short)1,(short)1,(short)1000,(short)1,(short)1,(short)1,(short)1,(short)1,(short)1000,(short)1000,(short)700}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(657, resourceRoot); + mustafarPool4Roots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("oats_wild_mustafar"); + resourceRoot.setResourceClass("Wild Oats"); + resourceRoot.setResourceType("Mustafarian"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_FLORA); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_ORGANIC_OATS); + minCapArray = new short[]{(short)0,(short)0,(short)1 ,(short)0,(short)0,(short)0,(short)0,(short)0,(short)1 ,(short)1 ,(short)300}; + maxCapArray = new short[]{(short)1,(short)1,(short)1000,(short)1,(short)1,(short)1,(short)1,(short)1,(short)700,(short)1000,(short)1000}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(658, resourceRoot); + mustafarPool4Roots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("wheat_domesticated_mustafar"); + resourceRoot.setResourceClass("Domesticated Wheat"); + resourceRoot.setResourceType("Mustafarian"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_FLORA); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_ORGANIC_WHEAT); + minCapArray = new short[]{(short)0,(short)0,(short)1 ,(short)0,(short)0,(short)0,(short)0,(short)0,(short)300 ,(short)1 ,(short)1}; + maxCapArray = new short[]{(short)1,(short)1,(short)1000,(short)1,(short)1,(short)1,(short)1,(short)1,(short)1000,(short)1000,(short)700}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(659, resourceRoot); + mustafarPool4Roots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("wheat_wild_mustafar"); + resourceRoot.setResourceClass("Wild Wheat"); + resourceRoot.setResourceType("Mustafarian"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_FLORA); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_ORGANIC_WHEAT); + minCapArray = new short[]{(short)0,(short)0,(short)1 ,(short)0,(short)0,(short)0,(short)0,(short)0,(short)1 ,(short)1 ,(short)300}; + maxCapArray = new short[]{(short)1,(short)1,(short)1000,(short)1,(short)1,(short)1,(short)1,(short)1,(short)700,(short)1000,(short)1000}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(660, resourceRoot); + mustafarPool4Roots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("vegetable_greens_mustafar"); + resourceRoot.setResourceClass("Vegetable Greens"); + resourceRoot.setResourceType("Mustafarian"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_FLORA); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_ORGANIC_GREEN_VEGETABLES); + minCapArray = new short[]{(short)0,(short)0,(short)1 ,(short)0,(short)0,(short)0,(short)0,(short)0,(short)1 ,(short)1 ,(short)1}; + maxCapArray = new short[]{(short)1,(short)1,(short)1000,(short)1,(short)1,(short)1,(short)1,(short)1,(short)1000,(short)1000,(short)1000}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(661, resourceRoot); + mustafarPool4Roots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("vegetable_beans_mustafar"); + resourceRoot.setResourceClass("Vegetable Beans"); + resourceRoot.setResourceType("Mustafarian"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_FLORA); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_ORGANIC_BEAN); + minCapArray = new short[]{(short)0,(short)0,(short)1 ,(short)0,(short)0,(short)0,(short)0,(short)0,(short)1 ,(short)1 ,(short)1}; + maxCapArray = new short[]{(short)1,(short)1,(short)1000,(short)1,(short)1,(short)1,(short)1,(short)1,(short)1000,(short)1000,(short)1000}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(662, resourceRoot); + mustafarPool4Roots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("vegetable_tubers_mustafar"); + resourceRoot.setResourceClass("Vegetable Tubers"); + resourceRoot.setResourceType("Mustafarian"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_FLORA); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_ORGANIC_TUBER); + minCapArray = new short[]{(short)0,(short)0,(short)1 ,(short)0,(short)0,(short)0,(short)0,(short)0,(short)1 ,(short)1 ,(short)1}; + maxCapArray = new short[]{(short)1,(short)1,(short)1000,(short)1,(short)1,(short)1,(short)1,(short)1,(short)1000,(short)1000,(short)1000}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(663, resourceRoot); + mustafarPool4Roots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("vegetable_fungi_mustafar"); + resourceRoot.setResourceClass("Vegetable Fungi"); + resourceRoot.setResourceType("Mustafarian"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_FLORA); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_ORGANIC_FUNGI); + minCapArray = new short[]{(short)0,(short)0,(short)1 ,(short)0,(short)0,(short)0,(short)0,(short)0,(short)1 ,(short)1 ,(short)1}; + maxCapArray = new short[]{(short)1,(short)1,(short)1000,(short)1,(short)1,(short)1,(short)1,(short)1,(short)1000,(short)1000,(short)1000}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(664, resourceRoot); + mustafarPool4Roots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("fruit_fruits_mustafar"); + resourceRoot.setResourceClass("Vegetable Fungi"); + resourceRoot.setResourceType("Mustafarian"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_FLORA); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_ORGANIC_FUNGI); + minCapArray = new short[]{(short)0,(short)0,(short)1 ,(short)0,(short)0,(short)0,(short)0,(short)0,(short)1 ,(short)1 ,(short)1}; + maxCapArray = new short[]{(short)1,(short)1,(short)1000,(short)1,(short)1,(short)1,(short)1,(short)1,(short)1000,(short)1000,(short)1000}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(665, resourceRoot); + mustafarPool4Roots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("fruit_berries_mustafar"); + resourceRoot.setResourceClass("Vegetable Fungi"); + resourceRoot.setResourceType("Mustafarian"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_FLORA); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_ORGANIC_FUNGI); + minCapArray = new short[]{(short)0,(short)0,(short)1 ,(short)0,(short)0,(short)0,(short)0,(short)0,(short)1 ,(short)1 ,(short)1}; + maxCapArray = new short[]{(short)1,(short)1,(short)1000,(short)1,(short)1,(short)1,(short)1,(short)1,(short)1000,(short)1000,(short)1000}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(666, resourceRoot); + mustafarPool4Roots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("fruit_flowers_mustafar"); + resourceRoot.setResourceClass("Flower Fruit"); + resourceRoot.setResourceType("Mustafarian"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_FLORA); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_ORGANIC_FUNGI); + minCapArray = new short[]{(short)0,(short)0,(short)1 ,(short)0,(short)0,(short)0,(short)0,(short)0,(short)1 ,(short)1 ,(short)1}; + maxCapArray = new short[]{(short)1,(short)1,(short)1000,(short)1,(short)1,(short)1,(short)1,(short)1,(short)700,(short)1000,(short)1000}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(667, resourceRoot); + mustafarPool4Roots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("wood_deciduous_mustafar"); + resourceRoot.setResourceClass("Deciduous Wood"); + resourceRoot.setResourceType("Mustafarian"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_FLORA); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_ORGANIC_FOOD); + minCapArray = new short[]{(short)0,(short)0,(short)1 ,(short)0,(short)400 ,(short)300,(short)1 ,(short)0,(short)0,(short)1 ,(short)0}; + maxCapArray = new short[]{(short)1,(short)1,(short)800,(short)1,(short)1000,(short)400,(short)800,(short)1,(short)1,(short)1000,(short)1}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(668, resourceRoot); + mustafarPool4Roots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("softwood_conifer_mustafar"); + resourceRoot.setResourceClass("Conifer Wood"); + resourceRoot.setResourceType("Mustafarian"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_FLORA); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_ORGANIC_FOOD); + minCapArray = new short[]{(short)0,(short)0,(short)1 ,(short)0,(short)600 ,(short)100,(short)1 ,(short)0,(short)0,(short)1 ,(short)0}; + maxCapArray = new short[]{(short)1,(short)1,(short)600,(short)1,(short)1000,(short)400,(short)300,(short)1,(short)1,(short)1000,(short)1}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(669, resourceRoot); + mustafarPool4Roots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("softwood_evergreen_mustafar"); + resourceRoot.setResourceClass("Evergreen Wood"); + resourceRoot.setResourceType("Mustafarian"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_FLORA); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_ORGANIC_FOOD); + minCapArray = new short[]{(short)0,(short)0,(short)1 ,(short)0,(short)800 ,(short)1 ,(short)1 ,(short)0,(short)0,(short)1 ,(short)0}; + maxCapArray = new short[]{(short)1,(short)1,(short)500,(short)1,(short)1000,(short)400,(short)300,(short)1,(short)1,(short)1000,(short)1}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(670, resourceRoot); + mustafarPool4Roots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("petrochem_fuel_liquid_mustafar"); + resourceRoot.setResourceClass("Liquid Petro Fuel"); + resourceRoot.setResourceType("Mustafarian"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_CHEMICAL); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_INORGANIC_PETROCHEM_LIQUID); + minCapArray = new short[]{(short)0,(short)0,(short)1 ,(short)0,(short)0,(short)0,(short)0,(short)0,(short)1 ,(short)1 ,(short)0}; + maxCapArray = new short[]{(short)1,(short)1,(short)600,(short)1,(short)1,(short)1,(short)1,(short)1,(short)1000,(short)1000,(short)1}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(671, resourceRoot); + mustafarPool4Roots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("fiberplast_mustafar"); + resourceRoot.setResourceClass("Fiberplast"); + resourceRoot.setResourceType("Mustafarian"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_CHEMICAL); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_INORGANIC_CHEMICALS); + minCapArray = new short[]{(short)0,(short)0,(short)1 ,(short)0,(short)1 ,(short)1 ,(short)1 ,(short)0,(short)0,(short)1 ,(short)0}; + maxCapArray = new short[]{(short)1,(short)1,(short)1000,(short)1,(short)1000,(short)1000,(short)1000,(short)1,(short)1,(short)1000,(short)1}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(672, resourceRoot); + mustafarPool4Roots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("water_vapor_mustafar"); + resourceRoot.setResourceClass("Water Vapor"); + resourceRoot.setResourceType("Mustafarian"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_WATER); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_INORGANIC_WATER); + minCapArray = new short[]{(short)0,(short)0,(short)1 ,(short)0,(short)0,(short)0,(short)0,(short)0,(short)0,(short)600 ,(short)0}; + maxCapArray = new short[]{(short)1,(short)1,(short)1000,(short)1,(short)1,(short)1,(short)1,(short)1,(short)1,(short)1000,(short)1}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(673, resourceRoot); + mustafarPool4Roots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("petrochem_fuel_solid_mustafar"); + resourceRoot.setResourceClass("Solid Petro Fuel"); + resourceRoot.setResourceType("Mustafarian"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_CHEMICAL); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_INORGANIC_CHEMICALS); + minCapArray = new short[]{(short)0,(short)0,(short)750,(short)0,(short)0,(short)0,(short)0,(short)0,(short)870 ,(short)500 ,(short)0}; + maxCapArray = new short[]{(short)1,(short)1,(short)800,(short)1,(short)1,(short)1,(short)1,(short)1,(short)1000,(short)1000,(short)1}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(674, resourceRoot); + mustafarPool4Roots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("radioactive_mustafar"); + resourceRoot.setResourceClass("Radioactive"); + resourceRoot.setResourceType("Mustafarian"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_MINERAL); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_ENERGY_RADIOACTIVE); + minCapArray = new short[]{(short)0,(short)0,(short)900 ,(short)0,(short)0,(short)0,(short)0,(short)0,(short)907 ,(short)500 ,(short)0}; + maxCapArray = new short[]{(short)1,(short)1,(short)1000,(short)1,(short)1,(short)1,(short)1,(short)1,(short)1000,(short)1000,(short)1}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(675, resourceRoot); + mustafarPool4Roots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("steel_mustafar"); + resourceRoot.setResourceClass("Steel"); + resourceRoot.setResourceType("Mustafarian"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_MINERAL); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_INORGANIC_MINERALS); + minCapArray = new short[]{(short)750,(short)600,(short)935 ,(short)948 ,(short)350,(short)935 ,(short)922 ,(short)0,(short)0,(short)1 ,(short)0}; + maxCapArray = new short[]{(short)800,(short)650,(short)1000,(short)1000,(short)400,(short)1000,(short)1000,(short)1,(short)1,(short)1000,(short)1}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(676, resourceRoot); + mustafarPool4Roots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("iron_mustafar"); + resourceRoot.setResourceClass("Iron"); + resourceRoot.setResourceType("Mustafarian"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_MINERAL); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_INORGANIC_MINERALS); + minCapArray = new short[]{(short)750,(short)450,(short)886 ,(short)919 ,(short)550,(short)903 ,(short)903 ,(short)0,(short)0,(short)1 ,(short)0}; + maxCapArray = new short[]{(short)800,(short)500,(short)1000,(short)1000,(short)600,(short)1000,(short)1000,(short)1,(short)1,(short)1000,(short)1}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(677, resourceRoot); + mustafarPool4Roots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("aluminum_mustafar"); + resourceRoot.setResourceClass("Aluminum"); + resourceRoot.setResourceType("Mustafarian"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_MINERAL); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_INORGANIC_MINERALS); + minCapArray = new short[]{(short)750,(short)750,(short)800,(short)750,(short)848 ,(short)800,(short)800,(short)0,(short)0,(short)500 ,(short)0}; + maxCapArray = new short[]{(short)800,(short)800,(short)800,(short)800,(short)1000,(short)900,(short)900,(short)1,(short)1,(short)1000,(short)1}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(678, resourceRoot); + mustafarPool4Roots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("copper_mustafar"); + resourceRoot.setResourceClass("Copper"); + resourceRoot.setResourceType("Mustafarian"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_MINERAL); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_INORGANIC_MINERALS); + minCapArray = new short[]{(short)750,(short)500 ,(short)650,(short)600,(short)500 ,(short)750,(short)750,(short)0,(short)0,(short)500 ,(short)0}; + maxCapArray = new short[]{(short)800,(short)1000,(short)700,(short)650,(short)1000,(short)800,(short)800,(short)1,(short)1,(short)1000,(short)1}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(679, resourceRoot); + mustafarPool4Roots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("ore_extrusive_mustafar"); + resourceRoot.setResourceClass("Extrusive Ore"); + resourceRoot.setResourceType("Mustafarian"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_MINERAL); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_INORGANIC_MINERALS); + minCapArray = new short[]{(short)896 ,(short)0,(short)909 ,(short)922 ,(short)550,(short)922 ,(short)922 ,(short)0,(short)0,(short)500 ,(short)0}; + maxCapArray = new short[]{(short)1000,(short)1,(short)1000,(short)1000,(short)600,(short)1000,(short)1000,(short)1,(short)1,(short)1000,(short)1}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(680, resourceRoot); + mustafarPool4Roots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("ore_intrusive_mustafar"); + resourceRoot.setResourceClass("Intrusive Ore"); + resourceRoot.setResourceType("Mustafarian"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_MINERAL); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_INORGANIC_MINERALS); + minCapArray = new short[]{(short)200 ,(short)0,(short)300 ,(short)700 ,(short)1 ,(short)500 ,(short)400 ,(short)0,(short)0,(short)1 ,(short)0}; + maxCapArray = new short[]{(short)1000,(short)1,(short)1000,(short)1000,(short)600,(short)1000,(short)1000,(short)1,(short)1,(short)1000,(short)1}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(681, resourceRoot); + mustafarPool4Roots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("armophous_mustafar_1"); + resourceRoot.setResourceClass("Type 1 Crystal Amorphous Gem"); + resourceRoot.setResourceType("Mustafarian"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_MINERAL); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_INORGANIC_MINERALS); + minCapArray = new short[]{(short)870 ,(short)0,(short)870 ,(short)948 ,(short)550,(short)870 ,(short)870 ,(short)0,(short)750,(short)1 ,(short)0}; + maxCapArray = new short[]{(short)1000,(short)1,(short)1000,(short)1000,(short)600,(short)1000,(short)1000,(short)1,(short)800,(short)1000,(short)1}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(682, resourceRoot); + mustafarPool4Roots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("armophous_mustafar_2"); + resourceRoot.setResourceClass("Type 2 Crystal Amorphous Gem"); + resourceRoot.setResourceType("Mustafarian"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_MINERAL); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_INORGANIC_MINERALS); + minCapArray = new short[]{(short)870 ,(short)0,(short)870 ,(short)948 ,(short)550,(short)870 ,(short)870 ,(short)0,(short)750,(short)1 ,(short)0}; + maxCapArray = new short[]{(short)1000,(short)1,(short)1000,(short)1000,(short)600,(short)1000,(short)1000,(short)1,(short)800,(short)1000,(short)1}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(683, resourceRoot); + mustafarPool4Roots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("crystalline_mustafar_1"); + resourceRoot.setResourceClass("Type 1 Crystalline Gem"); + resourceRoot.setResourceType("Mustafarian"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_MINERAL); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_INORGANIC_MINERALS); + minCapArray = new short[]{(short)838 ,(short)0,(short)838 ,(short)951 ,(short)350,(short)886 ,(short)886 ,(short)0,(short)919 ,(short)500 ,(short)0}; + maxCapArray = new short[]{(short)1000,(short)1,(short)1000,(short)1000,(short)400,(short)1000,(short)1000,(short)1,(short)1000,(short)1000,(short)1}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(684, resourceRoot); + mustafarPool4Roots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("crystalline_mustafar_2"); + resourceRoot.setResourceClass("Type 2 Crystalline Gem"); + resourceRoot.setResourceType("Mustafarian"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_MINERAL); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_INORGANIC_MINERALS); + minCapArray = new short[]{(short)838 ,(short)0,(short)838 ,(short)951 ,(short)350,(short)886 ,(short)886 ,(short)0,(short)919 ,(short)500 ,(short)0}; + maxCapArray = new short[]{(short)1000,(short)1,(short)1000,(short)1000,(short)400,(short)1000,(short)1000,(short)1,(short)1000,(short)1000,(short)1}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(685, resourceRoot); + mustafarPool4Roots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("gas_reactive_mustafar"); + resourceRoot.setResourceClass("Reactive Gas"); + resourceRoot.setResourceType("Mustafarian"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_GAS); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_INORGANIC_GAS); + minCapArray = new short[]{(short)0,(short)0,(short)800 ,(short)0,(short)0,(short)0,(short)0,(short)0,(short)0,(short)500 ,(short)0}; + maxCapArray = new short[]{(short)1,(short)1,(short)1000,(short)1,(short)1,(short)1,(short)1,(short)1,(short)1,(short)1000,(short)1}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(686, resourceRoot); + mustafarPool4Roots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("aluminum_perovskitic"); + resourceRoot.setResourceClass("Aluminum"); + resourceRoot.setResourceType("Perovskitic"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_JTL); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_INORGANIC_MINERALS); + minCapArray = new short[]{(short)1 ,(short)1 ,(short)1 ,(short)1 ,(short)1 ,(short)1 ,(short)1 ,(short)0,(short)0,(short)1 ,(short)0}; + maxCapArray = new short[]{(short)1000,(short)1000,(short)1000,(short)1000,(short)1000,(short)1000,(short)1000,(short)1,(short)1,(short)1000,(short)1}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(687, resourceRoot); + JTLRoots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("copper_borcarbantium"); + resourceRoot.setResourceClass("Copper"); + resourceRoot.setResourceType("Borcarbantium"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_JTL); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_INORGANIC_MINERALS); + minCapArray = new short[]{(short)1 ,(short)1 ,(short)1 ,(short)1 ,(short)1 ,(short)1 ,(short)1 ,(short)0,(short)0,(short)1 ,(short)0}; + maxCapArray = new short[]{(short)1000,(short)1000,(short)1000,(short)1000,(short)1000,(short)1000,(short)1000,(short)1,(short)1,(short)1000,(short)1}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(688, resourceRoot); + JTLRoots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("steel_bicorbantium"); + resourceRoot.setResourceClass("Steel"); + resourceRoot.setResourceType("Bicorbantium"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_JTL); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_INORGANIC_MINERALS); + minCapArray = new short[]{(short)1 ,(short)1 ,(short)1 ,(short)1 ,(short)1 ,(short)1 ,(short)1 ,(short)0,(short)0,(short)1 ,(short)0}; + maxCapArray = new short[]{(short)1000,(short)1000,(short)1000,(short)1000,(short)1000,(short)1000,(short)1000,(short)1,(short)1,(short)1000,(short)1}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(689, resourceRoot); + JTLRoots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("steel_arveshian"); + resourceRoot.setResourceClass("Steel"); + resourceRoot.setResourceType("Hardened Arveshium"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_JTL); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_INORGANIC_MINERALS); + minCapArray = new short[]{(short)1 ,(short)1 ,(short)1 ,(short)1 ,(short)1 ,(short)1 ,(short)1 ,(short)0,(short)0,(short)1 ,(short)0}; + maxCapArray = new short[]{(short)1000,(short)1000,(short)1000,(short)1000,(short)1000,(short)1000,(short)1000,(short)1,(short)1,(short)1000,(short)1}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(690, resourceRoot); + JTLRoots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("radioactive_polymetric"); + resourceRoot.setResourceClass("Radioactive"); + resourceRoot.setResourceType("High Grade Polymetric"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_JTL); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_INORGANIC_MINERALS); + minCapArray = new short[]{(short)1 ,(short)1 ,(short)1 ,(short)1 ,(short)1 ,(short)1 ,(short)1 ,(short)0,(short)0,(short)1 ,(short)0}; + maxCapArray = new short[]{(short)1000,(short)1000,(short)1000,(short)1000,(short)1000,(short)1000,(short)1000,(short)1,(short)1,(short)1000,(short)1}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(691, resourceRoot); + JTLRoots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("gas_reactive_organometallic"); + resourceRoot.setResourceClass("Reactive Gas"); + resourceRoot.setResourceType("Unstable Organometallic"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_JTL); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_INORGANIC_GAS); + minCapArray = new short[]{(short)1 ,(short)1 ,(short)1 ,(short)1 ,(short)1 ,(short)1 ,(short)1 ,(short)0,(short)0,(short)1 ,(short)0}; + maxCapArray = new short[]{(short)1000,(short)1000,(short)1000,(short)1000,(short)1000,(short)1000,(short)1000,(short)1,(short)1,(short)1000,(short)1}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(692, resourceRoot); + JTLRoots.addElement(resourceRoot); + + resourceRoot = new ResourceRoot(); + resourceRoot.setResourceFileName("ore_siliclastic_fermionic"); + resourceRoot.setResourceClass("Siliclastic Ore"); + resourceRoot.setResourceType("Fermionic"); + resourceRoot.setgeneralType((byte) GalacticResource.GENERAL_JTL); + resourceRoot.setContainerType((byte) ResourceRoot.CONTAINER_TYPE_INORGANIC_MINERALS); + minCapArray = new short[]{(short)1 ,(short)1 ,(short)1 ,(short)1 ,(short)1 ,(short)1 ,(short)1 ,(short)0,(short)0,(short)1 ,(short)0}; + maxCapArray = new short[]{(short)1000,(short)1000,(short)1000,(short)1000,(short)1000,(short)1000,(short)1000,(short)1,(short)1,(short)1000,(short)1}; + resourceRoot.setResourceMinCaps(minCapArray); + resourceRoot.setResourceMaxCaps(maxCapArray); + resourceRoot.setMinimalLifeTime(10000000L); + resourceRoot.setMaximalLifeTime(10080000L); + resourceRootTable.put(693, resourceRoot); + JTLRoots.addElement(resourceRoot); + + planetaryPool4Roots.addAll(corelliaPool4Roots); + planetaryPool4Roots.addAll(dantooinePool4Roots); + planetaryPool4Roots.addAll(dathomirPool4Roots); + planetaryPool4Roots.addAll(endorPool4Roots); + planetaryPool4Roots.addAll(kashyyykPool4Roots); + planetaryPool4Roots.addAll(lokPool4Roots); + planetaryPool4Roots.addAll(mustafarPool4Roots); + planetaryPool4Roots.addAll(nabooPool4Roots); + planetaryPool4Roots.addAll(roriPool4Roots); + planetaryPool4Roots.addAll(talusPool4Roots); + planetaryPool4Roots.addAll(tattoinePool4Roots); + planetaryPool4Roots.addAll(yavinPool4Roots); +// planetaryPool4Roots.addAll(NEWPLANETPool4Roots); + + + + //persist all ResourceRoots + int indices = resourceRootTable.size(); + for (int i=0;i swgOpcodes, Map objControllerOpcodes) { + + } + + @Override + public void shutdown() { + + } + + public Vector getAllSpawnedResources() { + return allSpawnedResources; + } + +// public void setAllSpawnedResources(Vector loadedResources) { +// allSpawnedResources = loadedResources; +// } + + public void addSpawnedResource(GalacticResource loadedResource) { + allSpawnedResources.add(loadedResource); + } + + public Vector getSpawnedResourcesByPlanet(int planetId) { + Vector planetResourceList = new Vector(); + for (GalacticResource gal : allSpawnedResources){ + if (gal.isSpawnedOn(planetId)) + planetResourceList.add(gal); + } + return planetResourceList; + } + + public Vector getSpawnedResourcesByPlanetAndType(int planetId, byte generalType) { + Vector planetResourceList = new Vector(); + for (GalacticResource gal : allSpawnedResources){ + if (gal.isSpawnedOn(planetId) && gal.getGeneralType()==generalType) + planetResourceList.add(gal); + } + return planetResourceList; + } + + public int getResourceSampleQuantity(CreatureObject crafter, GalacticResource sampleResource) { + if (crafter.getContainer()!=null) { // No indoor sampling + System.out.println("Indoor sampling attempt"); + return 0; + } + int skillMod=crafter.getSkillModBase("surveying"); + core.skillModService.addSkillMod(crafter, "surveying",100); + skillMod=(int)(Math.round(crafter.getSkillMod("surveying").getModifier())); + skillMod=35; // TEST! + float concentration=sampleResource.deliverConcentrationForSurvey(crafter.getPlanetId(), crafter.getPosition().x, crafter.getPosition().z); + float concentrationPercentage=0.01F*concentration; + int randomSample=new Random().nextInt(100); + float skillFactor=skillMod; + skillFactor=skillFactor/80.0F; + float quantity=skillFactor*concentrationPercentage*new Random().nextInt(25); + int SkillModAdapted=skillMod; + if (SkillModAdapted<=35) + SkillModAdapted=(3*skillMod)/2; + else if (SkillModAdapted<=20) + SkillModAdapted=2*skillMod; + if (randomSample<=SkillModAdapted) { + + } else if (randomSample<=(2*SkillModAdapted)) { + quantity=0.5F*quantity; + } else { + quantity=0; + } + if ((quantity>0)&&(quantity<1.0f)) { + quantity=1.0f+quantity; + quantity=Math.min(quantity,20); + } + //System.out.println("(int)amount" + (int)quantity); + return (int)quantity; + } + + public void kickOffBigBang(){ + bigBangSpawn(); + String[] PlanetTempArr = new String[] {"","Tattoine","Naboo","Corellia","Rori","Lok","Dantooine","Talus","Yavin4","Endor","Dathomir","Mustafar","Kashyyyk"}; + for (GalacticResource res : allSpawnedResources){ + System.out.println("res.getName() : " + res.getName()); + System.out.println("Resource Class : " + res.getResourceRoot().getResourceType() + " " + res.getResourceRoot().getResourceClass()); + Vector pln = res.getAllSpawnedPlanetIds(); + System.out.println("Spawned on :"); + for (Integer n : pln){ + System.out.print(PlanetTempArr[n]+", "); + } + System.out.println(""); + } + } + + + public void start(){ + + // bigBangSpawn(); + // String[] PlanetTempArr = new String[] {"","Tattoine","Naboo","Corellia","Rori","Lok","Dantooine","Talus","Yavin4","Endor","Dathomir","Mustafar","Kashyyyk"}; + // for (GalacticResource res : allSpawnedResources){ + // System.out.println("res.getName() : " + res.getName()); + // System.out.println("Resource Class : " + res.getResourceRoot().getResourceType() + " " + res.getResourceRoot().getResourceClass()); + // Vector pln = res.getAllSpawnedPlanetIds(); + // System.out.println("Spawned on :"); + // for (Integer n : pln){ + // System.out.print(PlanetTempArr[n]+", "); + // } + // System.out.println(""); + // } + + +// scheduler.scheduleAtFixedRate(new Runnable() { +// +// @Override +// public void run() { +// +// // Resource shift +// bigBangSpawn(); +// Vector removeResources = new Vector(); +// for (GalacticResource checkedResource : allSpawnedResources){ +// System.out.println("checkedResource.getName() : " + checkedResource.getName()); +// +// // Check despawn +// if (checkedResource.getVanishTime() < System.currentTimeMillis()){ +// byte pool = checkedResource.getPoolNumber(); +// ResourceRoot root = checkedResource.getResourceRoot(); +// switch (pool) { +// case 1: +// System.out.println("Pool 1 respawn"); +// spawnResourcePool1(root); +// break; +// case 2: +// System.out.println("Pool 2 respawn"); +// spawnResourcePool2(root); +// break; +// case 3: +// System.out.println("Pool 3 respawn"); +// spawnResourcePool3(root); +// break; +// case 4: +// System.out.println("Pool 4 respawn"); +// +// if (corelliaPool4Roots.contains(checkedResource)){ +// spawnResourcePool4(root,3); +// } +// if (dantooinePool4Roots.contains(checkedResource)){ +// spawnResourcePool4(root,6); +// } +// if (dathomirPool4Roots.contains(checkedResource)){ +// spawnResourcePool4(root,10); +// } +// if (endorPool4Roots.contains(checkedResource)){ +// spawnResourcePool4(root,9); +// } +// if (lokPool4Roots.contains(checkedResource)){ +// spawnResourcePool4(root,5); +// } +// if (nabooPool4Roots.contains(checkedResource)){ +// spawnResourcePool4(root,2); +// } +// if (roriPool4Roots.contains(checkedResource)){ +// spawnResourcePool4(root,4); +// } +// if (talusPool4Roots.contains(checkedResource)){ +// spawnResourcePool4(root,7); +// } +// if (tattoinePool4Roots.contains(checkedResource)){ +// spawnResourcePool4(root,1); +// } +// if (yavinPool4Roots.contains(checkedResource)){ +// spawnResourcePool4(root,8); +// } +// if (kashyyykPool4Roots.contains(checkedResource)){ +// spawnResourcePool4(root,12); +// } +// if (mustafarPool4Roots.contains(checkedResource)){ +// spawnResourcePool4(root,11); +// } +//// if (NEWPLANETPool4Roots.contains(checkedResource)){ +//// spawnResourcePool4(root,NEWPLANET_ID); +//// } +// break; +// default: +// System.err.println("Error, despawning resource had no pool assigned!"); +// } +// removeResources.add(checkedResource); +// } +// +// } +// +// allSpawnedResources.removeAll(removeResources); // remove the resource from the main resource collection +// for (GalacticResource removeResource : removeResources){ +// //We simple do not explicitely dereference the resource +// //but will take care that all references will be terminated +// //removeResource=null; // dereference +// // alternatively store the despawning resources in a collection +// // and despawn then during next server restart. That way +// // nullpointer exceptions can be better prevented +// } +// } +// +// }, 0, 600, TimeUnit.SECONDS); + + } + + // Never call this except once upon first server resource datatable creation !!! + private boolean bigBangSpawn(){ + + if (bigBangOccured) + return false; + bigBangOccured = true; + + System.out.println("Persisting resources..."); + // Database table ResourceRootData + + // ID + // 1 String Name + // 2 int ID + // 3 String Class + // 4 String General Name + // 5 RootID + // 6 MaxSpawnTime + // 7 MinSpawnTime + // CAPS + // 8 Short Cold_Resistance_Cap_Min + // 9 Short Cold_Resistance_Cap_Max + // 10 Short Conductivity_Cap_Min + // 11 Short Conductivity_Cap_Max + // 12 Short Decay_Res_Cap_Min + // 13 Short Decay_Res_Cap_Max + // 14 Short Heat_Res_Cap_Min + // 15 Short Heat_Res_Cap_Max + // 16 Short Malleability_Cap_Min + // 17 Short Malleability_Cap_Max + // 18 Short Shock_Res_Cap_Min + // 19 Short Shock_Res_Cap_Max + // 20 Short Unit_Toughness_Cap_Min + // 21 Short Unit_Toughness_Cap_Max + // 22 Short Entangle_Res_Cap_Min + // 23 Short Entangle_Res_Cap_Max + // 24 Short Potential_Energy_Cap_Min + // 25 Short Potential_Energy_Cap_Max + // 26 Short Flavor_Cap_Min + // 27 Short Flavor_Cap_Max + // 28 Short Overall_Quality_Cap_Min + // 29 Short Overall_Quality_Cap_Max + + +// Publish 15: Basis for ProjectSWG + +// - Total: 61, Minimum pool: 15, Random pool: 24 (3 was removed), Fixed pool: 22. +// - Possible spawns for rare non-Iron resources: 39. +// - Indoor concentrations were fixed for creature harvesting. + + // There are some resource classes that always spawn: + + // Steel + ResourceRoot root = steelRoots.get((int) new Random().nextInt(steelRoots.size()-1)); + spawnResourcePool1(root); + // Aluminum + root = aluminumRoots.get((int) new Random().nextInt(aluminumRoots.size()-1)); + spawnResourcePool1(root); + // Copper + root = copperRoots.get((int) new Random().nextInt(copperRoots.size()-1)); + spawnResourcePool1(root); + // Iron + root = ironRoots.get((int) new Random().nextInt(ironRoots.size()-1)); + spawnResourcePool1(root); + // Amorphous Gemstone + root = amorphousGemstoneRoots.get((int) new Random().nextInt(amorphousGemstoneRoots.size()-1)); + spawnResourcePool1(root); + // Crystalline Gemstone + root = crystallineGemstoneRoots.get((int) new Random().nextInt(crystallineGemstoneRoots.size()-1)); + spawnResourcePool1(root); + // Intrusive Ore + root = oreIntrusiveRoots.get((int) new Random().nextInt(oreIntrusiveRoots.size()-1)); + spawnResourcePool1(root); + // Carbonate Ore + root = oreCarbonateRoots.get((int) new Random().nextInt(oreCarbonateRoots.size()-1)); + spawnResourcePool1(root); + // Extrusive Ore + root = oreExtrusiveRoots.get((int) new Random().nextInt(oreExtrusiveRoots.size()-1)); + spawnResourcePool1(root); + // Radioactive + root = radioactiveRoots.get((int) new Random().nextInt(radioactiveRoots.size()-1)); + spawnResourcePool1(root); + // Liquid Petrochemical + root = petrochemicalLiquidRoots.get((int) new Random().nextInt(petrochemicalLiquidRoots.size()-1)); + spawnResourcePool1(root); + // Solid Petrochemical + root = petrochemicalSolidRoots.get((int) new Random().nextInt(petrochemicalSolidRoots.size()-1)); + spawnResourcePool1(root); + // Polymer + root = polymerRoots.get(0); + spawnResourcePool1(root); + root = polymerRoots.get(0); + spawnResourcePool1(root); + //Lubricating oil + root = lubricatingOilRoots.get(0); + spawnResourcePool1(root); + root = lubricatingOilRoots.get(0); + spawnResourcePool1(root); + + // Random pool: 24 + for (int i=0;i<24;i++){ + root = resourceRootTable.get(new Random().nextInt(136)); + spawnResourcePool2(root); + } + + // Fixed pool: 22 -> 8 are JTL resources + for (int i=0;i<8;i++) { + root = JTLRoots.get((int) new Random().nextInt(JTLRoots.size()-1)); + spawnResourcePool3(root); + } + + // and 16 are irons + for (int i=0;i<16;i++) { + root = ironRoots.get((int) new Random().nextInt(ironRoots.size()-1)); + spawnResourcePool3(root); + } + + for (ResourceRoot rootElement : corelliaPool4Roots){ + spawnResourcePool4(rootElement,3); + } + for (ResourceRoot rootElement : dantooinePool4Roots){ + spawnResourcePool4(rootElement,6); + } + for (ResourceRoot rootElement : dathomirPool4Roots){ + spawnResourcePool4(rootElement,10); + } + for (ResourceRoot rootElement : endorPool4Roots){ + spawnResourcePool4(rootElement,9); + } + for (ResourceRoot rootElement : lokPool4Roots){ + spawnResourcePool4(rootElement,5); + } + for (ResourceRoot rootElement : nabooPool4Roots){ + spawnResourcePool4(rootElement,2); + } + for (ResourceRoot rootElement : roriPool4Roots){ + spawnResourcePool4(rootElement,4); + } + for (ResourceRoot rootElement : talusPool4Roots){ + spawnResourcePool4(rootElement,7); + } + for (ResourceRoot rootElement : tattoinePool4Roots){ + spawnResourcePool4(rootElement,1); + } + for (ResourceRoot rootElement : yavinPool4Roots){ + spawnResourcePool4(rootElement,8); + } + for (ResourceRoot rootElement : kashyyykPool4Roots){ + spawnResourcePool4(rootElement,12); + } + for (ResourceRoot rootElement : mustafarPool4Roots){ + spawnResourcePool4(rootElement,11); + } +// for (ResourceRoot rootElement : NEWPLANETPool4Roots){ +// spawnResourcePool4(rootElement,NEWPLANET_ID); +// } + + System.out.println(allSpawnedResources.size() + " RESOURCES SPAWNED."); + System.out.println("Finished persisting resources."); + return true; + } + + public GalacticResource spawnResourcePool1(ResourceRoot root){ + + GalacticResource resource = (GalacticResource) createResource(); + try { + resource.setResourceRoot(root); + resource.setPoolNumber((byte)1); + resource.initializeNewGalaxyResource(completeResourceNameHistory); + + core.getResourcesODB().put(resource.getObjectID(), resource); + + if (enableResourceHistory){ + GalacticResource historicResource = resource.convertToHistoricResource(); + core.getResourceHistoryODB().put(historicResource.getObjectID(), historicResource); + } + + completeResourceNameHistory.add(resource.getName()); + spawnedResourcesPool1.add(resource); + allSpawnedResources.add(resource); + totalSpawnedResourcesNumber++; + } catch (Exception e){ + System.err.println("Exception in spawnResourcePool1 root "+ root); + } + return resource; + } + + public GalacticResource spawnResourcePool2(ResourceRoot root){ + + GalacticResource resource = (GalacticResource) createResource(); + try { + resource.setResourceRoot(root); + resource.setPoolNumber((byte)2); + resource.initializeNewGalaxyResource(completeResourceNameHistory); + + core.getResourcesODB().put(resource.getObjectID(), resource); + + if (enableResourceHistory){ + GalacticResource historicResource = resource.convertToHistoricResource(); + core.getResourceHistoryODB().put(historicResource.getObjectID(), historicResource); + } + + completeResourceNameHistory.add(resource.getName()); + spawnedResourcesPool2.add(resource); + allSpawnedResources.add(resource); + totalSpawnedResourcesNumber++; + } catch (Exception e){ + System.err.println("Exception in spawnResourcePool2 root "+ root); + } + return resource; + } + + public GalacticResource spawnResourcePool3(ResourceRoot root){ + + GalacticResource resource = (GalacticResource) createResource(); + try { + resource.setResourceRoot(root); + resource.setPoolNumber((byte)3); + resource.initializeNewGalaxyResource(completeResourceNameHistory); + + core.getResourcesODB().put(resource.getObjectID(), resource); + + if (enableResourceHistory){ + GalacticResource historicResource = resource.convertToHistoricResource(); + core.getResourceHistoryODB().put(historicResource.getObjectID(), historicResource); + } + + completeResourceNameHistory.add(resource.getName()); + spawnedResourcesPool3.add(resource); + allSpawnedResources.add(resource); + totalSpawnedResourcesNumber++; + } catch (Exception e){ + System.err.println("Exception in spawnResourcePool3 root "+ root); + } + return resource; + } + + public GalacticResource spawnResourcePool4(ResourceRoot root,int planetID){ + + GalacticResource resource = (GalacticResource) createResource(); + try { + resource.setResourceRoot(root); + resource.setPoolNumber((byte)4); + resource.setPlanetID(planetID); + resource.initializeNewGalaxyResource(completeResourceNameHistory); + + core.getResourcesODB().put(resource.getObjectID(), resource); + + if (enableResourceHistory){ + GalacticResource historicResource = resource.convertToHistoricResource(); + core.getResourceHistoryODB().put(historicResource.getObjectID(), historicResource); + } + + completeResourceNameHistory.add(resource.getName()); + spawnedResourcesPool4.add(resource); + allSpawnedResources.add(resource); + totalSpawnedResourcesNumber++; + } catch (Exception e){ + System.err.println("Exception in spawnResourcePool4 root "+ root.getResourceFileName() + " e: " + e.getMessage()); + System.err.println("planetID "+ planetID); + } + return resource; + } + + public Vector pickPool4ResourceRoots(int planetId){ + Vector picked = new Vector(); + switch(planetId){ + case 0: + picked = corelliaPool4Roots; + break; + case 1: + picked = dantooinePool4Roots; + break; + case 2: + picked = dathomirPool4Roots; + break; + case 3: + picked = endorPool4Roots; + break; + case 4: + picked = kashyyykPool4Roots; + break; + case 5: + picked = lokPool4Roots; + break; + case 6: + picked = mustafarPool4Roots; + break; + case 7: + picked = nabooPool4Roots; + break; + case 8: + picked = roriPool4Roots; + break; + case 9: + picked = talusPool4Roots; + break; + case 10: + picked = tattoinePool4Roots; + break; + case 11: + picked = yavinPool4Roots; + break; +// case 12: +// picked = NEWPLANETNAMEPool4Roots; +// break; + + default: + picked = nabooPool4Roots; + } + return picked; + } + + public void add_spawnedResourcesPool1(GalacticResource resource){ + spawnedResourcesPool1.add(resource); + } + + public void add_spawnedResourcesPool2(GalacticResource resource){ + spawnedResourcesPool2.add(resource); + } + + public void add_spawnedResourcesPool3(GalacticResource resource){ + spawnedResourcesPool3.add(resource); + } + + public void add_spawnedResourcesPool4(GalacticResource resource){ + spawnedResourcesPool4.add(resource); + } + + public void add_resourceRoot(ResourceRoot resourceRoot){ + int rootId = resourceRoot.getResourceRootID(); + resourceRootTable.put(rootId, resourceRoot); + } + + public ResourceRoot retrieveResourceRootReference(int resourceRootID){ + ResourceRoot resourceRootreference = null; + resourceRootreference = resourceRootTable.get(new Integer(resourceRootID)); + return resourceRootreference; + } + + public GalacticResource grabResourceByName(String searchName){ + GalacticResource resource = null; + Vector allResources = core.resourceService.getAllSpawnedResources(); + for (GalacticResource res : allResources){ + if (res.getName().equals(searchName)){ + resource = res; + } + } + return resource; + } + + public GalacticResource grabResourceByFileName(String searchName){ + GalacticResource resource = null; + Vector allResources = core.resourceService.getAllSpawnedResources(); + for (GalacticResource res : allResources){ + if (res.getResourceRoot().getResourceFileName().equals(searchName)){ + resource = res; // resourceFileName= "meat_insect_mustafar" i.e. + } + } + return resource; + } + + public GalacticResource grabResourceByClass(String searchName,int planetId){ + GalacticResource resource = null; + Vector allResources = core.resourceService.getAllSpawnedResources(); + for (GalacticResource res : allResources){ + Vector spawnedPlanets = res.getAllSpawnedPlanetIds(); + if (spawnedPlanets.contains(planetId) && res.getResourceRoot().getResourceClass().equals(searchName)){ + resource = res; // resourceClass= "Insect Meat" i.e. + } + } + return resource; + } + + public Vector getSpawnedResourcesByPlanetAndHarvesterType(int planetId, byte harvesterType) { + Vector planetResourceList = new Vector(); + byte searchtype = harvesterType; + if (harvesterType==7) searchtype = (byte) 0; + for (GalacticResource gal : allSpawnedResources){ + if (gal.isSpawnedOn(planetId) && gal.getGeneralType()==searchtype) + if (harvesterType!=HarvesterObject.HARVESTER_TYPE_FUSION) + planetResourceList.add(gal); + else if (harvesterType==HarvesterObject.HARVESTER_TYPE_FUSION) { + System.err.println("gal.getContainerType() " + gal.getContainerType()); + if (gal.getResourceRoot().getContainerType()==ResourceRoot.CONTAINER_TYPE_ENERGY_RADIOACTIVE) + planetResourceList.add(gal); + } else if (harvesterType==HarvesterObject.HARVESTER_TYPE_GEO) { + System.err.println("gal.getContainerType() " + gal.getContainerType()); + if (gal.getGeneralType()==GalacticResource.GENERAL_GEOTHERM) + planetResourceList.add(gal); + } + } + return planetResourceList; + } + + public GalacticResource findResourceById(long id){ + GalacticResource resource = new GalacticResource(); + for (GalacticResource sampleResource : allSpawnedResources){ + if (sampleResource.getId()==id) + return sampleResource; + } + return resource; + } + + // ToDo: Improve + public GalacticResource grabMeatForCreature(CreatureObject corpse){ + GalacticResource resource = null; + int planetId = corpse.getPlanetId(); + String meatName = corpse.getStfName(); // placeholder + Vector allResources = core.resourceService.getAllSpawnedResources(); + for (GalacticResource res : allResources){ + Vector spawnedPlanets = res.getAllSpawnedPlanetIds(); + if (spawnedPlanets.contains(planetId) && res.getResourceRoot().getResourceClass().equals(meatName)){ + resource = res; + } + } + return resource; + } + + // Utility method to quickly spawn resource containers into the inventory + public ResourceContainerObject spawnSpecificResourceContainer(String spawnType, CreatureObject crafter,int stackCount){ + ResourceContainerObject containerObject = null; + for (GalacticResource sampleResource : allSpawnedResources){ + if (sampleResource.getResourceRoot().getResourceClass().contains(spawnType)){ + String resourceContainerIFF = ResourceRoot.CONTAINER_TYPE_IFF_SIGNIFIER[sampleResource.getResourceRoot().getContainerType()]; + containerObject = (ResourceContainerObject) core.objectService.createObject(resourceContainerIFF, crafter.getPlanet()); + containerObject.setProprietor(crafter); + containerObject.setStackCount(stackCount,false); + //int stackCount = core.resourceService.getResourceSampleQuantity(crafter, sampleResource); + containerObject.initializeStats(sampleResource); + containerObject.setIffFileName(resourceContainerIFF); + SWGObject crafterInventory = crafter.getSlottedObject("inventory"); + crafterInventory.add(containerObject); + return containerObject; + } + } + return containerObject; + } + + public void giveResource(CreatureObject actor, GalacticResource res, int amount) { + + ResourceContainerObject foundContainer = core.surveyService.findResourceContainerInInventory(actor, res); + + if(foundContainer != null && amount < ResourceContainerObject.maximalStackCapacity - foundContainer.getStackCount()) { + foundContainer.setStackCount(foundContainer.getStackCount() + amount, actor); + } else { + SWGObject inventory = actor.getSlottedObject("inventory"); + String resourceContainerIFF = ResourceRoot.CONTAINER_TYPE_IFF_SIGNIFIER[res.getResourceRoot().getContainerType()]; + ResourceContainerObject containerObject = (ResourceContainerObject) core.objectService.createObject(resourceContainerIFF, actor.getPlanet()); + containerObject.initializeStats(res); + containerObject.setProprietor(actor); + containerObject.setStackCount(amount, actor); + inventory.add(containerObject); + } + + } + + public boolean canMilk(CreatureObject actor, CreatureObject target) { + + if(target.getPosture() == 14 || !actor.inRange(target.getWorldPosition(), 5) || actor.isInCombat() || target.isInCombat()) + return false; + + AIActor ai = (AIActor) target.getAttachment("AI"); + + if(ai.getMobileTemplate().getMilkAmount() <= 0 || ai.getMobileTemplate().getMilkType() == null || ai.getMilkState() == MilkState.MILKED || ai.getMilkState() == MilkState.MILKINGINPROGRESS) + return false; + + return true; + + } + + public boolean canHarvest(CreatureObject actor, CreatureObject target) { + + if(target.getPosture() != 14) + return false; + + AIActor ai = (AIActor) target.getAttachment("AI"); + + if(ai.getMobileTemplate().getMeatAmount() <= 0 && ai.getMobileTemplate().getBoneAmount() <= 0 && ai.getMobileTemplate().getHideAmount() <= 0) + return false; + + if(target.getKiller() != actor && !(actor.getGroupId() == target.getGroupId() && actor.getGroupId() != 0)) + return false; + + return true; + + } + + public void doHarvest(CreatureObject actor, CreatureObject target, String type) { + + AIActor ai = (AIActor) target.getAttachment("AI"); + + if(!actor.inRange(target.getWorldPosition(), 7)) { + actor.sendSystemMessage("You are too far away to harvest the creature.", (byte) 0); + return; + } + + if(ai.hasBeenHarvested()) { + actor.sendSystemMessage("@skl_use:nothing_to_harvest", (byte) 0); + return; + } + + ai.setHasBeenHarvested(true); + + String resType = ""; + int resAmount = 0; + + switch(type) { + + case "hide": + resType = ai.getMobileTemplate().getHideType(); + resAmount = ai.getMobileTemplate().getHideAmount(); + break; + case "meat": + resType = ai.getMobileTemplate().getMeatType(); + resAmount = ai.getMobileTemplate().getMeatAmount(); + break; + case "bone": + resType = ai.getMobileTemplate().getBoneType(); + resAmount = ai.getMobileTemplate().getBoneAmount(); + break; + + } + + resAmount += (resAmount * (actor.getSkillModBase("creature_harvesting") / 100)); + GalacticResource res = grabResourceByClass(resType, target.getPlanetId()); + + if(res == null) { + actor.sendSystemMessage("@skl_use:nothing_to_harvest", (byte) 0); + ai.setHasBeenHarvested(false); + return; + } + + float density = res.deliverConcentrationForSurvey(target.getPlanetId(), target.getWorldPosition().x, target.getWorldPosition().z); + + if(density >= 0.8f) { + resAmount *= 1.25f; + } else if(density >= 0.6f) { + resAmount *= 1.f; + } else if(density >= 0.4f) { + resAmount *= 0.75f; + } else { + resAmount *= 0.5f; + } + + giveResource(actor, res, resAmount); + actor.sendSystemMessage("@skl_use:corpse_harvest_success", (byte) 0); + + } + + public void doMilk(CreatureObject actor, CreatureObject target) { + + AIActor ai = (AIActor) target.getAttachment("AI"); + ai.setMilkState(MilkState.MILKINGINPROGRESS); + actor.sendSystemMessage("@skl_use:milk_begin", (byte) 0); + + scheduler.schedule(() -> { + + if(actor.getInventoryItemCount() >= 80) { + actor.sendSystemMessage("@skl_use:milk_inventory_full", (byte) 0); + ai.setMilkState(MilkState.NOTYETMILKED); + return; + } + + if(target.getPosture() == 14) { + actor.sendSystemMessage("@skl_use:milk_cant_milk_the_dead", (byte) 0); + ai.setMilkState(MilkState.NOTYETMILKED); + return; + } + + if(!actor.inRange(target.getWorldPosition(), 5)) { + actor.sendSystemMessage("@skl_use:milk_too_far", (byte) 0); + ai.setMilkState(MilkState.NOTYETMILKED); + return; + } + + if(actor.isInCombat()) { + actor.sendSystemMessage("@skl_use:milk_combat", (byte) 0); + ai.setMilkState(MilkState.NOTYETMILKED); + return; + } + + if(new Random().nextFloat() <= 0.05f) { + actor.sendSystemMessage("@skl_use:milk_not_hidden", (byte) 0); + ai.setMilkState(MilkState.NOTYETMILKED); + ai.addDefender(actor); + return; + } + + giveMilk(actor, target); + + }, 10000, TimeUnit.MILLISECONDS); + + } + + public void giveMilk(CreatureObject actor, CreatureObject target) { + + AIActor ai = (AIActor) target.getAttachment("AI"); + String milkType = ai.getMobileTemplate().getMilkType(); + int milkAmount = ai.getMobileTemplate().getMilkAmount(); + + GalacticResource res = grabResourceByClass(milkType, target.getPlanetId()); + + if(res == null) { + actor.sendSystemMessage("Can't find milk resource.", (byte) 0); + ai.setMilkState(MilkState.NOTYETMILKED); + return; + } + + float density = res.deliverConcentrationForSurvey(target.getPlanetId(), target.getWorldPosition().x, target.getWorldPosition().z); + + if(density >= 0.8f) { + milkAmount *= 1.25f; + } else if(density >= 0.6f) { + milkAmount *= 1.f; + } else if(density >= 0.4f) { + milkAmount *= 0.75f; + } else { + milkAmount *= 0.5f; + } + + giveResource(actor, res, milkAmount); + ai.setMilkState(MilkState.MILKED); + actor.sendSystemMessage("@skl_use:milk_success", (byte) 0); + + } + + public Vector getCompleteResourceNameHistory() { + return completeResourceNameHistory; + } +} diff --git a/src/services/retro/IRetroModification.java b/src/services/retro/IRetroModification.java new file mode 100644 index 00000000..8af86790 --- /dev/null +++ b/src/services/retro/IRetroModification.java @@ -0,0 +1,30 @@ +/******************************************************************************* + * Copyright (c) 2013 + * + * This File is part of NGECore2. + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see . + * + * Using NGEngine to work with NGECore2 is making a combined work based on NGEngine. + * Therefore all terms and conditions of the GNU Lesser General Public License cover the combination. + ******************************************************************************/ +package services.retro; + +import main.NGECore; + +public interface IRetroModification { + + public void modify(NGECore core); + +} diff --git a/src/services/retro/RetroService.java b/src/services/retro/RetroService.java new file mode 100644 index 00000000..cb23e6cb --- /dev/null +++ b/src/services/retro/RetroService.java @@ -0,0 +1,78 @@ +/******************************************************************************* + * Copyright (c) 2013 + * + * This File is part of NGECore2. + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see . + * + * Using NGEngine to work with NGECore2 is making a combined work based on NGEngine. + * Therefore all terms and conditions of the GNU Lesser General Public License cover the combination. + ******************************************************************************/ +package services.retro; + +import java.util.ArrayList; +import java.util.List; +import java.util.Map; + +import engine.resources.service.INetworkDispatch; +import engine.resources.service.INetworkRemoteEvent; +import main.NGECore; + +/* + * Very often we will need to make changes to existing objects when the server + * boots up. This is especially the case when fixes or new features are + * added that affect already-existing objects. To make the changes retroactive + * we can use this service to make it more tidy. Add to the list of + * modifications in the relevant service's constructor, or in this one. + */ +public class RetroService implements INetworkDispatch { + + private NGECore core; + + private List modifications; + + public RetroService(NGECore core) { + this.core = core; + modifications = new ArrayList(); + + /* + core.retroService.addModification(new IRetroModification() { + + public void modify(NGECore core) { + + } + + }); + */ + } + + public void addModification(IRetroModification modification) { + modifications.add(modification); + } + + public void run() { + for (IRetroModification modification : modifications) { + modification.modify(core); + } + } + + public void insertOpcodes(Map swgOpcodes, Map objControllerOpcodes) { + + } + + public void shutdown() { + + } + +} diff --git a/src/services/spawn/DynamicSpawnArea.java b/src/services/spawn/DynamicSpawnArea.java new file mode 100644 index 00000000..81635232 --- /dev/null +++ b/src/services/spawn/DynamicSpawnArea.java @@ -0,0 +1,335 @@ +/******************************************************************************* + * Copyright (c) 2013 + * + * This File is part of NGECore2. + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see . + * + * Using NGEngine to work with NGECore2 is making a combined work based on NGEngine. + * Therefore all terms and conditions of the GNU Lesser General Public License cover the combination. + ******************************************************************************/ +package services.spawn; + +import java.util.Collections; +import java.util.Random; +import java.util.Vector; + +import resources.datatables.Options; +import resources.datatables.Posture; +import main.NGECore; +import net.engio.mbassy.listener.Handler; +import resources.common.collidables.AbstractCollidable; +import resources.common.collidables.AbstractCollidable.EnterEvent; +import resources.common.collidables.AbstractCollidable.ExitEvent; +import resources.objects.creature.CreatureObject; +import services.TerrainService; +import services.SimulationService.MoveEvent; +import engine.resources.objects.SWGObject; +import engine.resources.scene.Planet; +import engine.resources.scene.Point3D; + +public class DynamicSpawnArea extends SpawnArea { + + private DynamicSpawnGroup spawnGroup; + private Vector spawnGroups; + private Vector mobiles = new Vector(); + + public DynamicSpawnArea(Planet planet, AbstractCollidable area, DynamicSpawnGroup spawnGroup) { + super(planet, area); + this.spawnGroup = spawnGroup; + } + + public DynamicSpawnArea(Planet planet, AbstractCollidable area, Vector spawnGroups) { + super(planet, area); + this.spawnGroups = spawnGroups; + } + + @Override + @Handler + public void onEnter(EnterEvent event) { + + SWGObject object = event.object; + // ToDo: Mounted players must be handled too + //System.out.println("Entering object " + object.getClass().getName()); + if(object == null || !(object instanceof CreatureObject)) + return; + + + CreatureObject creature = (CreatureObject) object; + + if(creature.getSlottedObject("ghost") == null && !creature.getOption(Options.MOUNT)) + return; + + creature.getEventBus().subscribe(this); + // spawn some creatures + if (spawnGroups==null){ + if (spawnGroup.getGroupMembersNumber()==-1){ + for(int i = 0; i < 5; i++) + spawnCreature(creature); + } else { + Vector groupMembers = new Vector(); + Point3D randomGroupPosition = getRandomPosition(creature.getWorldPosition(), 32, 100); + for(int i = 0; i < spawnGroup.getGroupMembersNumber(); i++) {// A group with a specified number of members + CreatureObject spawnedCreature = spawnCreatureMember(creature, groupMembers, randomGroupPosition, i); + if (spawnedCreature!=null) + groupMembers.add(spawnedCreature); + } + } + } else { + // select randomly one of the spawngroups -> minimizes number of collidables for areas with multiple different NPC groups + // One spawnarea -> many NPC groups + int index = new Random().nextInt(spawnGroups.size()); + this.spawnGroup = spawnGroups.get(index); + Vector groupMembers = new Vector(); + Point3D randomGroupPosition = getRandomPosition(creature.getWorldPosition(), 32, 100); + int spawnCount = spawnGroup.getGroupMembersNumber(); + if (spawnCount<0){ + int spawnCount2 = 1; + if (Math.abs(spawnCount) groupMembers = new Vector(); + Point3D randomGroupPosition = getRandomPosition(creature.getWorldPosition(), 32, 100); + for(int i = 0; i < spawnGroup.getGroupMembersNumber(); i++) {// A group with a specified number of members + CreatureObject spawnedCreature = spawnCreatureMember(creature, groupMembers, randomGroupPosition, i); + if (spawnedCreature!=null) + groupMembers.add(spawnedCreature); + } + } + } else { + // select randomly one of the spawngroups -> minimizes number of collidables for areas with multiple different NPC groups + // One spawnarea -> many NPC groups + int index = new Random().nextInt(spawnGroups.size()); + this.spawnGroup = spawnGroups.get(index); + + Vector groupMembers = new Vector(); + //Point3D randomGroupPosition = getRandomPosition(creature.getWorldPosition(), 32, 100); + Point3D randomGroupPosition = getRandomPosition(creature.getWorldPosition(), 32, spawnGroup.getMinSpawnDistance()+10); + int spawnCount = spawnGroup.getGroupMembersNumber(); + if (spawnCount<0){ + int spawnCount2 = 1; + if (Math.abs(spawnCount) it = mobiles.iterator(); // This stops further execution of this method for some reason +// it.forEachRemaining(mobile -> { +// if(mobile.getPosture() == Posture.Dead) +// it.remove(); +// }); + + mobiles.removeAll(Collections.singleton(null)); + Vector removers = new Vector(); + for (CreatureObject ob : mobiles){ + if (ob.getPosture() == Posture.Dead) + removers.add(ob); + } + mobiles.removeAll(removers); + + if(mobiles.size() >= spawnGroup.getMaxSpawns()) + return; + + boolean foundPos = false; + int tries = 0; + Point3D randomPosition = null; + + while(!foundPos && ++tries < 10) { + + randomPosition = getRandomPosition(creature.getWorldPosition(), 32.f, 200.f); + + if(randomPosition == null) + return; + + TerrainService terrainSvc = core.terrainService; + + float height = terrainSvc.getHeight(getPlanet().getID(), randomPosition.x, randomPosition.z); + randomPosition.y = height; + + if (mobiles.size()>0){ // Fix, mobiles must be filled first, before doing this check + for(CreatureObject mobile : mobiles) { + if(mobile.getWorldPosition().getDistance(randomPosition) > spawnGroup.getMinSpawnDistance()) + foundPos = true; + } + } else {foundPos = true;} + + if(!terrainSvc.canBuildAtPosition(creature, randomPosition.x, randomPosition.z)) + foundPos = false; + + } + + if(!foundPos) + return; + + Random random = new Random(); + + String mobileTemplate = spawnGroup.getMobiles().get(random.nextInt(spawnGroup.getMobiles().size())); + CreatureObject spawnedCreature = core.spawnService.spawnCreature(mobileTemplate, getPlanet().getName(), 0, randomPosition.x, randomPosition.y, randomPosition.z); + if(spawnedCreature != null){ + mobiles.add(spawnedCreature); + } + + } + + + private CreatureObject spawnCreatureMember(CreatureObject creature, Vector groupMembers, Point3D randomGroupPosition, int spawnIndex) { + + NGECore core = NGECore.getInstance(); + +// Iterator it = mobiles.iterator(); // This stops further execution of this method for some reason +// it.forEachRemaining(mobile -> { +// if(mobile.getPosture() == Posture.Dead) +// it.remove(); +// }); + + mobiles.removeAll(Collections.singleton(null)); + Vector removers = new Vector(); + for (CreatureObject ob : mobiles){ + if (ob.getPosture() == Posture.Dead) + removers.add(ob); + } + mobiles.removeAll(removers); + +// if(mobiles.size() >= spawnGroup.getMaxSpawns()) +// return; + + boolean foundPos = false; + int tries = 0; + Point3D randomPosition = null; + String template = spawnGroup.getMobiles().get(spawnIndex); + MobileTemplate mobileTemplate = NGECore.getInstance().spawnService.getMobileTemplate(template); + if (mobileTemplate==null){ + System.out.println("mobileTemplate==null for template " + template); + return null; + } + + while(!foundPos && ++tries < 30) { + + randomPosition = getRandomPosition(randomGroupPosition, mobileTemplate.getMinSpawnDistance(), mobileTemplate.getMaxSpawnDistance()); + + if(randomPosition == null){ + //System.out.println("randomPosition == null"); + return null; + } + + TerrainService terrainSvc = core.terrainService; + + float height = terrainSvc.getHeight(getPlanet().getID(), randomPosition.x, randomPosition.z); + randomPosition.y = height; + + if (mobiles.size()>0){ // Fix, mobiles must be filled first, before doing this check + boolean minDistViolated = false; + for(CreatureObject mobile : mobiles) { + if(mobile.getWorldPosition().getDistance(randomPosition) < spawnGroup.getMinSpawnDistance() && ! groupMembers.contains(mobile)){ + minDistViolated = true; // Distance to other nearby groups + //System.out.println("minDistViolated " + mobile.getWorldPosition().getDistance(randomPosition) + "mobile: " + mobile.getTemplate()); + } + } + if (minDistViolated) + foundPos = false; + else + foundPos = true; + } else {foundPos = true;} + + if(!terrainSvc.canBuildAtPosition(creature, randomPosition.x, randomPosition.z)) + foundPos = false; + + } + + if(!foundPos){ + //System.out.println("mobileTemplate pos not found " + mobileTemplate.getCreatureName()); + return null; + } + //System.out.println("mobileTemplate pos found " + mobileTemplate.getCreatureName()); + + CreatureObject spawnedCreature = core.spawnService.spawnCreature(template, getPlanet().getName(), 0, randomPosition.x, randomPosition.y, randomPosition.z); + if(spawnedCreature != null){ + mobiles.add(spawnedCreature); + //System.err.println("Creature ADDED " + spawnedCreature.getTemplate()); + } else + { + //System.out.println("Creature not spawned" + template); + } + + return spawnedCreature; + } +} diff --git a/src/services/spawn/DynamicSpawnGroup.java b/src/services/spawn/DynamicSpawnGroup.java new file mode 100644 index 00000000..ceaed7d1 --- /dev/null +++ b/src/services/spawn/DynamicSpawnGroup.java @@ -0,0 +1,74 @@ +/******************************************************************************* + * Copyright (c) 2013 + * + * This File is part of NGECore2. + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see . + * + * Using NGEngine to work with NGECore2 is making a combined work based on NGEngine. + * Therefore all terms and conditions of the GNU Lesser General Public License cover the combination. + ******************************************************************************/ +package services.spawn; + +import java.util.Vector; + +public class DynamicSpawnGroup extends SpawnGroup { + + private Vector mobiles; + private String name; + private int maxSpawns; + private int minSpawnDistance; + private int groupMembersNumber = -1; + + public Vector getMobiles() { + return mobiles; + } + + public void setMobiles(Vector mobiles) { + this.mobiles = mobiles; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public int getMaxSpawns() { + return maxSpawns; + } + + public void setMaxSpawns(int maxSpawns) { + this.maxSpawns = maxSpawns; + } + + public int getMinSpawnDistance() { + return minSpawnDistance; + } + + public void setMinSpawnDistance(int minSpawnDistance) { + this.minSpawnDistance = minSpawnDistance; + } + + public int getGroupMembersNumber() { + return groupMembersNumber; + } + + public void setGroupMembersNumber(int groupMembersNumber) { + this.groupMembersNumber = groupMembersNumber; + } + +} diff --git a/src/services/spawn/LairGroupTemplate.java b/src/services/spawn/LairGroupTemplate.java new file mode 100644 index 00000000..49e816ba --- /dev/null +++ b/src/services/spawn/LairGroupTemplate.java @@ -0,0 +1,31 @@ +package services.spawn; + +import java.util.Vector; + +public class LairGroupTemplate extends SpawnGroup{ + + private Vector lairSpawnTemplates; + private String name; + + public LairGroupTemplate(String name, Vector lairSpawnTemplates) { + this.name = name; + this.lairSpawnTemplates = lairSpawnTemplates; + } + + public Vector getLairSpawnTemplates() { + return lairSpawnTemplates; + } + + public void setLairSpawnTemplates(Vector lairSpawnTemplates) { + this.lairSpawnTemplates = lairSpawnTemplates; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + +} diff --git a/src/services/spawn/LairSpawnArea.java b/src/services/spawn/LairSpawnArea.java new file mode 100644 index 00000000..165c53b8 --- /dev/null +++ b/src/services/spawn/LairSpawnArea.java @@ -0,0 +1,175 @@ +/******************************************************************************* + * Copyright (c) 2013 + * + * This File is part of NGECore2. + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see . + * + * Using NGEngine to work with NGECore2 is making a combined work based on NGEngine. + * Therefore all terms and conditions of the GNU Lesser General Public License cover the combination. + ******************************************************************************/ +package services.spawn; + +import java.util.Random; +import java.util.Vector; + +import main.NGECore; +import net.engio.mbassy.listener.Handler; +import resources.common.collidables.AbstractCollidable; +import resources.common.collidables.AbstractCollidable.EnterEvent; +import resources.common.collidables.AbstractCollidable.ExitEvent; +import resources.datatables.Options; +import resources.objects.creature.CreatureObject; +import services.SimulationService.MoveEvent; +import services.TerrainService; +import services.ai.LairActor; +import engine.resources.objects.SWGObject; +import engine.resources.scene.Planet; +import engine.resources.scene.Point3D; + +public class LairSpawnArea extends SpawnArea { + + private LairGroupTemplate lairGroup; + private long lastSpawnTime = 0; + private Vector lairs = new Vector(); + + public LairSpawnArea(Planet planet, AbstractCollidable area, LairGroupTemplate lairGroup) { + super(planet, area); + this.lairGroup = lairGroup; + } + + public LairGroupTemplate getLairGroup() { + return lairGroup; + } + + public void setLairGroup(LairGroupTemplate lairGroup) { + this.lairGroup = lairGroup; + } + + public void spawnLair(CreatureObject object) { + + NGECore core = NGECore.getInstance(); + + Vector lairTemplates = lairGroup.getLairSpawnTemplates(); + + if(lairGroup == null || lairTemplates.isEmpty()) + return; + + if((System.currentTimeMillis() - lastSpawnTime) < 10000) + return; + + Point3D randomPosition = getRandomPosition(object.getWorldPosition(), 32.f, 200.f); + + if(randomPosition == null) + return; + + TerrainService terrainSvc = core.terrainService; + + float height = terrainSvc.getHeight(getPlanet().getID(), randomPosition.x, randomPosition.z); + randomPosition.y = height; + + for(LairActor otherLair : lairs) { + if(otherLair.getLairObject().getWorldPosition().getDistance(randomPosition) < 30) + return; + } + + if(!terrainSvc.canBuildAtPosition(object, randomPosition.x, randomPosition.z)) + return; + + Random random = new Random(); + + LairSpawnTemplate lairSpawn = lairTemplates.get(random.nextInt(lairTemplates.size())); + + int level = -1; // If level equals -1 then the mobile template CL will be used! + if (lairSpawn.getMinLevel() != -1 && lairSpawn.getMaxLevel()!=-1) + level = random.nextInt((int) (lairSpawn.getMaxLevel() - lairSpawn.getMinLevel()) + 1) + lairSpawn.getMinLevel(); + + + + LairActor lairActor = core.spawnService.spawnLair(lairSpawn.getLairTemplate(), getPlanet(), randomPosition, (short) level); + if(lairActor == null) + return; + lairs.add(lairActor); + lastSpawnTime = System.currentTimeMillis(); + + } + + @Override + @Handler + public void onEnter(EnterEvent event) { + + SWGObject object = event.object; + + if(object == null || !(object instanceof CreatureObject)) + return; + + CreatureObject creature = (CreatureObject) object; + + if(creature.getSlottedObject("ghost") == null && !creature.getOption(Options.MOUNT)) + return; + + spawnLair(creature); + creature.getEventBus().subscribe(this); + + } + + @Override + @Handler + public void onExit(ExitEvent event) { + + SWGObject object = event.object; + + if(object == null || !(object instanceof CreatureObject)) + return; + + CreatureObject creature = (CreatureObject) object; + + if(creature.getSlottedObject("ghost") == null && !creature.getOption(Options.MOUNT)) + return; + + creature.getEventBus().unsubscribe(this); + + } + + @Handler + public void onMove(MoveEvent event) { + + SWGObject object = event.object; + + //if(object == null || !(object instanceof CreatureObject) || object.getContainer() != null) + // return; + + if(object == null || !(object instanceof CreatureObject)) + return; + + CreatureObject creature = (CreatureObject) object; + + if(creature.getSlottedObject("ghost") == null && !creature.getOption(Options.MOUNT)) + return; + + if(new Random().nextFloat() <= 0.05) + spawnLair(creature); + + } + + public long getLastSpawnTime() { + return lastSpawnTime; + } + + public void setLastSpawnTime(long lastSpawnTime) { + this.lastSpawnTime = lastSpawnTime; + } + + +} diff --git a/src/services/spawn/LairSpawnTemplate.java b/src/services/spawn/LairSpawnTemplate.java new file mode 100644 index 00000000..74844770 --- /dev/null +++ b/src/services/spawn/LairSpawnTemplate.java @@ -0,0 +1,72 @@ +/******************************************************************************* + * Copyright (c) 2013 + * + * This File is part of NGECore2. + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see . + * + * Using NGEngine to work with NGECore2 is making a combined work based on NGEngine. + * Therefore all terms and conditions of the GNU Lesser General Public License cover the combination. + ******************************************************************************/ +package services.spawn; + +public class LairSpawnTemplate { + + private int maxSpawnLimit; + private String lairTemplate; + private int minLevel; + private int maxLevel; + + public LairSpawnTemplate(int maxSpawnLimit, String lairTemplate, int minLevel, int maxLevel) { + this.maxSpawnLimit = maxSpawnLimit; + this.lairTemplate = lairTemplate; + this.minLevel = minLevel; + this.maxLevel = maxLevel; + } + + public int getMaxSpawnLimit() { + return maxSpawnLimit; + } + + public void setMaxSpawnLimit(int maxSpawnLimit) { + this.maxSpawnLimit = maxSpawnLimit; + } + + public String getLairTemplate() { + return lairTemplate; + } + + public void setLairTemplate(String lairTemplate) { + this.lairTemplate = lairTemplate; + } + + public int getMinLevel() { + return minLevel; + } + + public void setMinLevel(int minLevel) { + this.minLevel = minLevel; + } + + public int getMaxLevel() { + return maxLevel; + } + + public void setMaxLevel(int maxLevel) { + this.maxLevel = maxLevel; + } + + + +} diff --git a/src/services/spawn/LairTemplate.java b/src/services/spawn/LairTemplate.java new file mode 100644 index 00000000..04741351 --- /dev/null +++ b/src/services/spawn/LairTemplate.java @@ -0,0 +1,88 @@ +/******************************************************************************* + * Copyright (c) 2013 + * + * This File is part of NGECore2. + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see . + * + * Using NGEngine to work with NGECore2 is making a combined work based on NGEngine. + * Therefore all terms and conditions of the GNU Lesser General Public License cover the combination. + ******************************************************************************/ +package services.spawn; + +import java.util.Vector; + +public class LairTemplate { + + private String name; + private String lairCRC; + private String mobileName; + private Vector mobiles; + private int mobileLimit; + + public LairTemplate(String name, String mobile, int mobileLimit, String lairCRC) { + this.name = name; + this.mobileName = mobile; + this.mobileLimit = mobileLimit; + this.lairCRC = lairCRC; + } + + public LairTemplate(String name, Vector mobiles, int mobileLimit, String lairCRC) { + this.name = name; + this.mobiles = mobiles; + this.mobileLimit = mobileLimit; + this.lairCRC = lairCRC; + } + + public String getLairCRC() { + return lairCRC; + } + + public void setLairCRC(String lairCRC) { + this.lairCRC = lairCRC; + } + + public String getMobileName() { + return mobileName; + } + + public void setMobileName(String mobileName) { + this.mobileName = mobileName; + } + + public int getMobileLimit() { + return mobileLimit; + } + + public void setMobileLimit(int mobileLimit) { + this.mobileLimit = mobileLimit; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public Vector getMobiles() { + return mobiles; + } + + public void setMobiles(Vector mobiles) { + this.mobiles = mobiles; + } + +} diff --git a/src/services/spawn/MixedSpawnArea.java b/src/services/spawn/MixedSpawnArea.java new file mode 100644 index 00000000..e0b0a68b --- /dev/null +++ b/src/services/spawn/MixedSpawnArea.java @@ -0,0 +1,430 @@ +/******************************************************************************* + * Copyright (c) 2013 + * + * This File is part of NGECore2. + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see . + * + * Using NGEngine to work with NGECore2 is making a combined work based on NGEngine. + * Therefore all terms and conditions of the GNU Lesser General Public License cover the combination. + ******************************************************************************/ +package services.spawn; + +import java.util.Collections; +import java.util.Random; +import java.util.Vector; + +import resources.datatables.Options; +import resources.datatables.Posture; +import main.NGECore; +import net.engio.mbassy.listener.Handler; +import resources.common.collidables.AbstractCollidable; +import resources.common.collidables.AbstractCollidable.EnterEvent; +import resources.common.collidables.AbstractCollidable.ExitEvent; +import resources.objects.creature.CreatureObject; +import services.TerrainService; +import services.SimulationService.MoveEvent; +import services.ai.LairActor; +import engine.resources.objects.SWGObject; +import engine.resources.scene.Planet; +import engine.resources.scene.Point3D; + +public class MixedSpawnArea extends SpawnArea { + + private SpawnGroup spawnGroup; + private Vector spawnGroups; + private Vector mobiles = new Vector(); + private Vector lairs = new Vector(); + private long lastSpawnTime = 0; + + public MixedSpawnArea(Planet planet, AbstractCollidable area, SpawnGroup spawnGroup) { + super(planet, area); + this.spawnGroup = spawnGroup; + } + + public MixedSpawnArea(Planet planet, AbstractCollidable area, Vector spawnGroups) { + super(planet, area); + this.spawnGroups = spawnGroups; + } + + @Override + @Handler + public void onEnter(EnterEvent event) { + + SWGObject object = event.object; + // ToDo: Mounted players must be handled too + //System.out.println("Entering object " + object.getClass().getName()); + if(object == null || !(object instanceof CreatureObject)) + return; + + + CreatureObject creature = (CreatureObject) object; + + if(creature.getSlottedObject("ghost") == null && !creature.getOption(Options.MOUNT)) + return; + + creature.getEventBus().subscribe(this); + // spawn some creatures + if (spawnGroups==null){ + if (spawnGroup.getGroupMembersNumber()==-1){ + for(int i = 0; i < 5; i++) + spawnCreature(creature); + } else { + Vector groupMembers = new Vector(); + Point3D randomGroupPosition = getRandomPosition(creature.getWorldPosition(), 32, 100); + for(int i = 0; i < spawnGroup.getGroupMembersNumber(); i++) {// A group with a specified number of members + CreatureObject spawnedCreature = spawnCreatureMember(creature, groupMembers, randomGroupPosition, i); + if (spawnedCreature!=null) + groupMembers.add(spawnedCreature); + } + } + } else { + // select randomly one of the spawngroups -> minimizes number of collidables for areas with multiple different NPC groups + // One spawnarea -> many NPC groups + + + int index = new Random().nextInt(spawnGroups.size()); + this.spawnGroup = spawnGroups.get(index); + if (this.spawnGroup instanceof DynamicSpawnGroup){ + Vector groupMembers = new Vector(); + Point3D randomGroupPosition = getRandomPosition(creature.getWorldPosition(), 32, 100); + int spawnCount = spawnGroup.getGroupMembersNumber(); + if (spawnCount<0){ + int spawnCount2 = 1; + if (Math.abs(spawnCount) groupMembers = new Vector(); + Point3D randomGroupPosition = getRandomPosition(creature.getWorldPosition(), 32, 100); + for(int i = 0; i < spawnGroup.getGroupMembersNumber(); i++) {// A group with a specified number of members + CreatureObject spawnedCreature = spawnCreatureMember(creature, groupMembers, randomGroupPosition, i); + if (spawnedCreature!=null) + groupMembers.add(spawnedCreature); + } + } + } else { + // select randomly one of the spawngroups -> minimizes number of collidables for areas with multiple different NPC groups + // One spawnarea -> many NPC groups + int index = new Random().nextInt(spawnGroups.size()); + this.spawnGroup = spawnGroups.get(index); + if (this.spawnGroup instanceof DynamicSpawnGroup){ + Vector groupMembers = new Vector(); + //Point3D randomGroupPosition = getRandomPosition(creature.getWorldPosition(), 32, 100); + Point3D randomGroupPosition = getRandomPosition(creature.getWorldPosition(), 32, spawnGroup.getMinSpawnDistance()+10); + int spawnCount = spawnGroup.getGroupMembersNumber(); + if (spawnCount<0){ + int spawnCount2 = 1; + if (Math.abs(spawnCount) it = mobiles.iterator(); // This stops further execution of this method for some reason +// it.forEachRemaining(mobile -> { +// if(mobile.getPosture() == Posture.Dead) +// it.remove(); +// }); + + mobiles.removeAll(Collections.singleton(null)); + Vector removers = new Vector(); + for (CreatureObject ob : mobiles){ + if (ob.getPosture() == Posture.Dead) + removers.add(ob); + } + mobiles.removeAll(removers); + + if(mobiles.size() >= spawnGroup.getMaxSpawns()) + return; + + boolean foundPos = false; + int tries = 0; + Point3D randomPosition = null; + + while(!foundPos && ++tries < 10) { + + randomPosition = getRandomPosition(creature.getWorldPosition(), 32.f, 200.f); + + if(randomPosition == null) + return; + + TerrainService terrainSvc = core.terrainService; + + float height = terrainSvc.getHeight(getPlanet().getID(), randomPosition.x, randomPosition.z); + randomPosition.y = height; + + if (mobiles.size()>0){ // Fix, mobiles must be filled first, before doing this check + for(CreatureObject mobile : mobiles) { + if(mobile.getWorldPosition().getDistance(randomPosition) > spawnGroup.getMinSpawnDistance()) + foundPos = true; + } + } else {foundPos = true;} + + if(!terrainSvc.canBuildAtPosition(creature, randomPosition.x, randomPosition.z)) + foundPos = false; + + } + + if(!foundPos) + return; + + Random random = new Random(); + + String mobileTemplate = spawnGroup.getMobiles().get(random.nextInt(spawnGroup.getMobiles().size())); + CreatureObject spawnedCreature = core.spawnService.spawnCreature(mobileTemplate, getPlanet().getName(), 0, randomPosition.x, randomPosition.y, randomPosition.z); + if(spawnedCreature != null){ + mobiles.add(spawnedCreature); + } + + } + + + private CreatureObject spawnCreatureMember(CreatureObject creature, Vector groupMembers, Point3D randomGroupPosition, int spawnIndex) { + + NGECore core = NGECore.getInstance(); + +// Iterator it = mobiles.iterator(); // This stops further execution of this method for some reason +// it.forEachRemaining(mobile -> { +// if(mobile.getPosture() == Posture.Dead) +// it.remove(); +// }); + + mobiles.removeAll(Collections.singleton(null)); + Vector removers = new Vector(); + for (CreatureObject ob : mobiles){ + if (ob.getPosture() == Posture.Dead) + removers.add(ob); + } + mobiles.removeAll(removers); + +// if(mobiles.size() >= spawnGroup.getMaxSpawns()) +// return; + + boolean foundPos = false; + int tries = 0; + Point3D randomPosition = null; + String template = spawnGroup.getMobiles().get(spawnIndex); + MobileTemplate mobileTemplate = NGECore.getInstance().spawnService.getMobileTemplate(template); + if (mobileTemplate==null){ + System.out.println("mobileTemplate==null for template " + template); + return null; + } + + while(!foundPos && ++tries < 30) { + + randomPosition = getRandomPosition(randomGroupPosition, mobileTemplate.getMinSpawnDistance(), mobileTemplate.getMaxSpawnDistance()); + + if(randomPosition == null){ + //System.out.println("randomPosition == null"); + return null; + } + + TerrainService terrainSvc = core.terrainService; + + float height = terrainSvc.getHeight(getPlanet().getID(), randomPosition.x, randomPosition.z); + randomPosition.y = height; + + if (mobiles.size()>0){ // Fix, mobiles must be filled first, before doing this check + boolean minDistViolated = false; + for(CreatureObject mobile : mobiles) { + if(mobile.getWorldPosition().getDistance(randomPosition) < spawnGroup.getMinSpawnDistance() && ! groupMembers.contains(mobile)){ + minDistViolated = true; // Distance to other nearby groups + //System.out.println("minDistViolated " + mobile.getWorldPosition().getDistance(randomPosition) + "mobile: " + mobile.getTemplate()); + } + } + for (LairActor actor : lairs){ + if(actor.getLairObject().getWorldPosition().getDistance(randomPosition) < spawnGroup.getMinSpawnDistance()){ + minDistViolated = true; // Distance to other nearby lairs! + //System.out.println("minDistViolated " + mobile.getWorldPosition().getDistance(randomPosition) + "mobile: " + mobile.getTemplate()); + } + } + if (minDistViolated) + foundPos = false; + else + foundPos = true; + } else {foundPos = true;} + + if(!terrainSvc.canBuildAtPosition(creature, randomPosition.x, randomPosition.z)) + foundPos = false; + + } + + if(!foundPos){ + //System.out.println("mobileTemplate pos not found " + mobileTemplate.getCreatureName()); + return null; + } + //System.out.println("mobileTemplate pos found " + mobileTemplate.getCreatureName()); + + CreatureObject spawnedCreature = core.spawnService.spawnCreature(template, getPlanet().getName(), 0, randomPosition.x, randomPosition.y, randomPosition.z); + if(spawnedCreature != null){ + mobiles.add(spawnedCreature); + //System.err.println("Creature ADDED " + spawnedCreature.getTemplate()); + } else + { + //System.out.println("Creature not spawned" + template); + } + + return spawnedCreature; + } + + // LairSpawnArea class methods + public void spawnLair(CreatureObject object) { + + NGECore core = NGECore.getInstance(); + + LairGroupTemplate lairGroup = (LairGroupTemplate)this.spawnGroup; + + Vector lairTemplates = lairGroup.getLairSpawnTemplates(); + + if(lairGroup == null || lairTemplates.isEmpty()) + return; + + if((System.currentTimeMillis() - lastSpawnTime) < 10000) + return; + + Point3D randomPosition = getRandomPosition(object.getWorldPosition(), 32.f, 200.f); + + if(randomPosition == null) + return; + + TerrainService terrainSvc = core.terrainService; + + float height = terrainSvc.getHeight(getPlanet().getID(), randomPosition.x, randomPosition.z); + randomPosition.y = height; + + for(LairActor otherLair : lairs) { + if(otherLair.getLairObject().getWorldPosition().getDistance(randomPosition) < 30) + return; + } + + if(!terrainSvc.canBuildAtPosition(object, randomPosition.x, randomPosition.z)) + return; + + Random random = new Random(); + + LairSpawnTemplate lairSpawn = lairTemplates.get(random.nextInt(lairTemplates.size())); + + int level = -1; // If level equals -1 then the mobile template CL will be used! + if (lairSpawn.getMinLevel() != -1 && lairSpawn.getMaxLevel()!=-1) + level = random.nextInt((int) (lairSpawn.getMaxLevel() - lairSpawn.getMinLevel()) + 1) + lairSpawn.getMinLevel(); + + + + LairActor lairActor = core.spawnService.spawnLair(lairSpawn.getLairTemplate(), getPlanet(), randomPosition, (short) level); + if(lairActor == null) + return; + lairs.add(lairActor); + lastSpawnTime = System.currentTimeMillis(); + + } + +} diff --git a/src/services/spawn/MobileTemplate.java b/src/services/spawn/MobileTemplate.java new file mode 100644 index 00000000..169c08b7 --- /dev/null +++ b/src/services/spawn/MobileTemplate.java @@ -0,0 +1,383 @@ +/******************************************************************************* + * Copyright (c) 2013 + * + * This File is part of NGECore2. + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see . + * + * Using NGEngine to work with NGECore2 is making a combined work based on NGEngine. + * Therefore all terms and conditions of the GNU Lesser General Public License cover the combination. + ******************************************************************************/ +package services.spawn; + +import java.util.ArrayList; +import java.util.List; +import java.util.Vector; + +import resources.datatables.Options; +import resources.datatables.PvpStatus; +import resources.datatables.FactionStatus; +import resources.loot.LootGroup; + +public class MobileTemplate implements Cloneable { + + private Vector templates; + private int optionsBitmask = Options.ATTACKABLE; + private int pvpBitmask = PvpStatus.Attackable; + private int factionstatus = FactionStatus.OnLeave; + private String faction = ""; + private short level; + private short minLevel; + private short maxLevel; + private Vector attacks; + private String defaultAttack; + private int minDamage = 0; + private int maxDamage = 0; + private float attackSpeed = 0; + private int weaponType = 0; + private int difficulty = 0; + private int health, action; + private String creatureName; + private float scale = 1; + // this is a custom attack Range setting to use for large mobs like krayts + private int attackRange; + private Vector weaponTemplates = new Vector(); + private Vector weaponTemplateVector = new Vector(); + private int minSpawnDistance = 0; + private int maxSpawnDistance = 0; + private boolean deathblow = false; + private String socialGroup = ""; // see prima guide + private int assistRange; // use prima guide for ranges + private boolean isStalker = false; + private String meatType, milkType, boneType, hideType; + private int meatAmount, milkAmount, boneAmount, hideAmount; + private int respawnTime = 0; + private List lootGroups = new ArrayList(); + + + public Vector getTemplates() { + return templates; + } + + public void setTemplates(Vector templates) { + this.templates = templates; + } + + public int getOptionsBitmask() { + return optionsBitmask; + } + + public void setOptionsBitmask(int optionsBitmask) { + this.optionsBitmask = optionsBitmask; + } + + public int getPvpBitmask() { + return pvpBitmask; + } + + public String getFaction(){ + return faction; + } + + public void setFaction(String faction){ + this.faction = faction; + } + + public int getFactionStatus(){ + return factionstatus; + } + + public void setFactionStatus(int factionstatus){ + this.factionstatus = factionstatus; + } + + public void setPvpBitmask(int pvpBitmask) { + this.pvpBitmask = pvpBitmask; + } + + public short getLevel() { + return level; + } + + public void setLevel(short level) { + this.level = level; + } + + public Vector getAttacks() { + return attacks; + } + + public void setAttacks(Vector attacks) { + this.attacks = attacks; + } + + public int getMinDamage() { + return minDamage; + } + + public void setMinDamage(int minDamage) { + this.minDamage = minDamage; + } + + public int getMaxDamage() { + return maxDamage; + } + + public void setMaxDamage(int maxDamage) { + this.maxDamage = maxDamage; + } + + public int getDifficulty() { + return difficulty; + } + + public void setDifficulty(int difficulty) { + this.difficulty = difficulty; + } + + public int getHealth() { + return health; + } + + public void setHealth(int health) { + this.health = health; + } + + public int getAction() { + return action; + } + + public void setAction(int action) { + this.action = action; + } + + public String getDefaultAttack() { + return defaultAttack; + } + + public void setDefaultAttack(String defaultAttack) { + this.defaultAttack = defaultAttack; + } + + public String getCreatureName() { + return creatureName; + } + + public void setCreatureName(String creatureName) { + this.creatureName = creatureName; + } + + public float getScale() { + return scale; + } + + public void setScale(float scale) { + this.scale = scale; + } + + public int getAttackRange() { + return attackRange; + } + + public void setAttackRange(int attackRange) { + this.attackRange = attackRange; + } + + public Vector getWeaponTemplates() { + return weaponTemplates; + } + + public void setWeaponTemplates(Vector weaponTemplates) { + this.weaponTemplates = weaponTemplates; + } + + public float getAttackSpeed() { + return attackSpeed; + } + + public void setAttackSpeed(float attackSpeed) { + this.attackSpeed = attackSpeed; + } + + public int getWeaponType() { + return weaponType; + } + + public void setWeaponType(int weaponType) { + this.weaponType = weaponType; + } + + public Vector getWeaponTemplateVector() { + return weaponTemplateVector; + } + + public void setWeaponTemplateVector(Vector weaponTemplateVector) { + this.weaponTemplateVector = weaponTemplateVector; + } + + public int getMinSpawnDistance() { + return minSpawnDistance; + } + + public void setMinSpawnDistance(int minSpawnDistance) { + this.minSpawnDistance = minSpawnDistance; + } + + public int getMaxSpawnDistance() { + return maxSpawnDistance; + } + + public void setMaxSpawnDistance(int maxSpawnDistance) { + this.maxSpawnDistance = maxSpawnDistance; + } + + public short getMinLevel() { + return minLevel; + } + + public void setMinLevel(short minLevel) { + this.minLevel = minLevel; + } + + public short getMaxLevel() { + return maxLevel; + } + + public void setMaxLevel(short maxLevel) { + this.maxLevel = maxLevel; + } + + public boolean isDeathblow() { + return deathblow; + } + + public void setDeathblow(boolean deathblow) { + this.deathblow = deathblow; + } + + public String getSocialGroup() { + return socialGroup; + } + + public void setSocialGroup(String socialGroup) { + this.socialGroup = socialGroup; + } + + public int getAssistRange() { + return assistRange; + } + + public void setAssistRange(int assistRange) { + this.assistRange = assistRange; + } + + public boolean isStalker() { + return isStalker; + } + + public void setStalker(boolean isStalker) { + this.isStalker = isStalker; + } + + public String getMeatType() { + return meatType; + } + + public void setMeatType(String meatType) { + this.meatType = meatType; + } + + public String getMilkType() { + return milkType; + } + + public void setMilkType(String milkType) { + this.milkType = milkType; + } + + public String getBoneType() { + return boneType; + } + + public void setBoneType(String boneType) { + this.boneType = boneType; + } + + public String getHideType() { + return hideType; + } + + public void setHideType(String hideType) { + this.hideType = hideType; + } + + public int getMeatAmount() { + return meatAmount; + } + + public void setMeatAmount(int meatAmount) { + this.meatAmount = meatAmount; + } + + public int getMilkAmount() { + return milkAmount; + } + + public void setMilkAmount(int milkAmount) { + this.milkAmount = milkAmount; + } + + public int getBoneAmount() { + return boneAmount; + } + + public void setBoneAmount(int boneAmount) { + this.boneAmount = boneAmount; + } + + public int getHideAmount() { + return hideAmount; + } + + public void setHideAmount(int hideAmount) { + this.hideAmount = hideAmount; + } + + public int getRespawnTime() { + return respawnTime; + } + + public void setRespawnTime(int respawnTime) { + this.respawnTime = respawnTime; + } + + public List getLootGroups() { + return lootGroups; + } + + public void setLootGroups(List lootGroups) { + this.lootGroups = lootGroups; + } + + public void addToLootGroups(String[] lootPoolNames, double[] lootPoolChances, double lootGroupChance) { + //System.out.println("lootPoolNames[0] " + lootPoolNames[0]); + LootGroup lootGroup = new LootGroup(lootPoolNames, lootPoolChances, lootGroupChance); + this.lootGroups.add(lootGroup); + } + + public Object clone() throws CloneNotSupportedException { + return super.clone(); + } + +} diff --git a/src/services/spawn/SpawnArea.java b/src/services/spawn/SpawnArea.java new file mode 100644 index 00000000..2d64c576 --- /dev/null +++ b/src/services/spawn/SpawnArea.java @@ -0,0 +1,111 @@ +/******************************************************************************* + * Copyright (c) 2013 + * + * This File is part of NGECore2. + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see . + * + * Using NGEngine to work with NGECore2 is making a combined work based on NGEngine. + * Therefore all terms and conditions of the GNU Lesser General Public License cover the combination. + ******************************************************************************/ +package services.spawn; + +import java.util.Vector; + +import net.engio.mbassy.listener.Handler; + +import resources.common.collidables.AbstractCollidable; +import resources.common.collidables.AbstractCollidable.EnterEvent; +import resources.common.collidables.AbstractCollidable.ExitEvent; + +import engine.resources.objects.SWGObject; +import engine.resources.scene.Planet; +import engine.resources.scene.Point3D; + +public abstract class SpawnArea { + + private Planet planet; + private Vector templates; + private AbstractCollidable area; + private Vector observers = new Vector(); + + public SpawnArea(Planet planet, AbstractCollidable area) { + this.planet = planet; + this.area = area; + area.getEventBus().subscribe(this); + } + + public Planet getPlanet() { + return planet; + } + + public void setPlanet(Planet planet) { + this.planet = planet; + } + + public Vector getTemplates() { + return templates; + } + + public void setTemplates(Vector templates) { + this.templates = templates; + } + + public AbstractCollidable getArea() { + return area; + } + + public void setArea(AbstractCollidable area) { + this.area = area; + } + + @Handler + public abstract void onEnter(EnterEvent event); + @Handler + public abstract void onExit(ExitEvent event); + + public Vector getObservers() { + return observers; + } + + public Point3D getRandomPosition() { + + int tries = 0; + + while(tries++ < 10) { + Point3D randomPos = area.getRandomPosition(); + if(area.doesCollide(randomPos)) + return randomPos; + } + + return null; + + } + + public Point3D getRandomPosition(Point3D origin, float minDistance, float maxDistance) { + + int tries = 0; + + while(tries++ < 10) { + Point3D randomPos = area.getRandomPosition(origin, minDistance, maxDistance); + if(area.doesCollide(randomPos)) + return randomPos; + } + + return null; + + } + + +} diff --git a/src/services/spawn/SpawnGroup.java b/src/services/spawn/SpawnGroup.java new file mode 100644 index 00000000..b0d62402 --- /dev/null +++ b/src/services/spawn/SpawnGroup.java @@ -0,0 +1,46 @@ +/******************************************************************************* + * Copyright (c) 2013 + * + * This File is part of NGECore2. + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see . + * + * Using NGEngine to work with NGECore2 is making a combined work based on NGEngine. + * Therefore all terms and conditions of the GNU Lesser General Public License cover the combination. + ******************************************************************************/ +package services.spawn; + +import java.util.Vector; + +// Making this an abstract class, not having to implement unused methods in either spawn group classes +public abstract class SpawnGroup { + + public SpawnGroup() {} + + public int getGroupMembersNumber(){ + return 0; + } + + public Vector getMobiles() { + return new Vector(); + } + + public int getMinSpawnDistance(){ + return 0; + } + + public int getMaxSpawns(){ + return 0; + } +} diff --git a/src/services/spawn/SpawnService.java b/src/services/spawn/SpawnService.java new file mode 100644 index 00000000..4d6c4084 --- /dev/null +++ b/src/services/spawn/SpawnService.java @@ -0,0 +1,452 @@ +/******************************************************************************* + * Copyright (c) 2013 + * + * This File is part of NGECore2. + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see . + * + * Using NGEngine to work with NGECore2 is making a combined work based on NGEngine. + * Therefore all terms and conditions of the GNU Lesser General Public License cover the combination. + ******************************************************************************/ +package services.spawn; + +import java.io.IOException; +import java.nio.file.FileVisitResult; +import java.nio.file.FileVisitor; +import java.nio.file.Files; +import java.nio.file.Path; +import java.nio.file.Paths; +import java.nio.file.SimpleFileVisitor; +import java.nio.file.attribute.BasicFileAttributes; +import java.util.ArrayList; +import java.util.List; +import java.util.Map; +import java.util.Random; +import java.util.Vector; +import java.util.concurrent.ConcurrentHashMap; +import java.util.concurrent.Executors; +import java.util.concurrent.ScheduledExecutorService; + +import resources.common.collidables.CollidableCircle; +import resources.datatables.Options; +import resources.datatables.PvpStatus; +import resources.objects.cell.CellObject; +import resources.objects.creature.CreatureObject; +import resources.objects.tangible.TangibleObject; +import resources.objects.weapon.WeaponObject; +import services.ai.AIActor; +import services.ai.LairActor; +import engine.resources.container.StaticContainerPermissions; +import engine.resources.scene.Planet; +import engine.resources.scene.Point3D; +import engine.resources.scene.Quaternion; +import main.NGECore; + +public class SpawnService { + + private NGECore core; + private Map> spawnAreas = new ConcurrentHashMap>(); + private Map mobileTemplates = new ConcurrentHashMap(); + private Map lairGroupTemplates = new ConcurrentHashMap(); + private Map lairTemplates = new ConcurrentHashMap(); + private final ScheduledExecutorService scheduler = Executors.newScheduledThreadPool(4); + private Map dynamicGroupTemplates = new ConcurrentHashMap(); + + public SpawnService(NGECore core) { + this.core = core; + for(Planet planet : core.terrainService.getPlanetList()) { + spawnAreas.put(planet, new ArrayList()); + } + } + + public CreatureObject spawnCreature(String template, long objectId, String planetName, long cellId, float x, float y, float z, float qW, float qX, float qY, float qZ, short level) { + + Planet planet = core.terrainService.getPlanetByName(planetName); + MobileTemplate mobileTemplate = mobileTemplates.get(template); + if(planet == null || mobileTemplate == null) + return null; + + CellObject cell = null; + + if(cellId != 0) { + cell = (CellObject) core.objectService.getObject(cellId); + if(cell == null) + return null; + } + + CreatureObject creature = (CreatureObject) core.objectService.createObject(mobileTemplate.getTemplates().get(new Random().nextInt(mobileTemplate.getTemplates().size())), objectId, planet, new Point3D(x, y, z), new Quaternion(qW, qX, qY, qZ), null, (objectId > 0), true); + + if(creature == null) + return null; + + TangibleObject inventory = (TangibleObject) core.objectService.createObject("object/tangible/inventory/shared_character_inventory.iff", creature.getPlanet()); + inventory.setContainerPermissions(StaticContainerPermissions.STATIC_CONTAINER_PERMISSIONS); + + + /*if(mobileTemplate.getCustomWeapon() != null) { + creature.addObjectToEquipList(mobileTemplate.getCustomWeapon()); + creature.add(mobileTemplate.getCustomWeapon()); + creature.setWeaponId(mobileTemplate.getCustomWeapon().getObjectID()); + }*/ + + if(mobileTemplate.getLootGroups() != null && !mobileTemplate.getLootGroups().isEmpty()) + creature.setLootGroups(mobileTemplate.getLootGroups()); + + creature.setOptionsBitmask(mobileTemplate.getOptionsBitmask()); + creature.setFaction(mobileTemplate.getFaction()); + creature.setFactionStatus(mobileTemplate.getFactionStatus()); + creature.setPvpBitmask(mobileTemplate.getPvpBitmask()); + creature.setStfFilename("mob/creature_names"); // TODO: set other STFs for NPCs other than creatures + creature.setStfName(mobileTemplate.getCreatureName()); + creature.setHeight(mobileTemplate.getScale()); + int difficulty = mobileTemplate.getDifficulty(); + creature.setDifficulty((byte) difficulty); + + if(level != -1) + creature.setLevel(level); + else { + if (mobileTemplate.getLevel()!=0){ + level = mobileTemplate.getLevel(); + creature.setLevel(level); + } else { + level = -1; + } + } + + if (mobileTemplate.getMinLevel()!=0 && mobileTemplate.getMaxLevel()!=0 && level == -1){ + level = (short) (mobileTemplate.getMinLevel() + (new Random().nextInt(mobileTemplate.getMaxLevel()-mobileTemplate.getMinLevel()))); + creature.setLevel(level); + } + + + //WeaponObject defaultWeapon = (mobileTemplate.getWeaponTemplates().size() > 0) ? (WeaponObject) core.objectService.createObject(mobileTemplate.getWeaponTemplates().get(new Random().nextInt(mobileTemplate.getWeaponTemplates().size())), creature.getPlanet()) : (WeaponObject) core.objectService.createObject("object/weapon/creature/shared_creature_default_weapon.iff", creature.getPlanet()); + + WeaponObject defaultWeapon = null; + Vector weaponTemplates = mobileTemplate.getWeaponTemplateVector(); + if (weaponTemplates.size()==0){ + defaultWeapon = (WeaponObject) core.objectService.createObject("object/weapon/creature/shared_creature_default_weapon.iff", creature.getPlanet()); + defaultWeapon.setAttackSpeed(1.0F); + defaultWeapon.setWeaponType(6); + } else { + int rnd = new Random().nextInt(weaponTemplates.size()); + defaultWeapon = (WeaponObject) core.objectService.createObject(weaponTemplates.get(rnd).getTemplate(), creature.getPlanet()); + defaultWeapon.setAttackSpeed(weaponTemplates.get(rnd).getAttackSpeed()); + defaultWeapon.setWeaponType(weaponTemplates.get(rnd).getWeaponType()); + } + + + // QA + if (mobileTemplate.getAttackSpeed()==0) + System.err.println("Error in mobile spawn template for " + mobileTemplate.getCreatureName() + ". Missing attackspeed parameter"); + if (mobileTemplate.getAttackRange()==0) + System.err.println("Error in mobile spawn template for " + mobileTemplate.getCreatureName() + ". Missing attackrange parameter"); + + defaultWeapon.setAttackSpeed(mobileTemplate.getAttackSpeed()); + defaultWeapon.setWeaponType(mobileTemplate.getWeaponType()); + defaultWeapon.setDamageType("@obj_attr_n:armor_eff_kinetic"); + defaultWeapon.setStringAttribute("cat_wpn_damage.damage", "0-0"); + if(mobileTemplate.getAttackRange() > 0) + defaultWeapon.setMaxRange(mobileTemplate.getAttackRange()); + if(mobileTemplate.getMaxDamage() != 0) { + defaultWeapon.setMaxDamage(mobileTemplate.getMaxDamage()); + defaultWeapon.setMinDamage(mobileTemplate.getMinDamage()); + } else { + defaultWeapon.setMaxDamage(creature.getLevel() * 24); + defaultWeapon.setMinDamage(creature.getLevel() * 22); + } + creature.addObjectToEquipList(defaultWeapon); + creature.add(defaultWeapon); + creature.setWeaponId(defaultWeapon.getObjectID()); + creature.addObjectToEquipList(inventory); + creature.add(inventory); + + int customHealth = mobileTemplate.getHealth(); + if(difficulty > 0 && customHealth == 0) { + if(difficulty == 1) { + creature.setMaxHealth((int) (400 + level * 134 * 2.5)); + creature.setHealth((int) (400 + level * 134 * 2.5)); + creature.setMaxAction((int) (400 + level * 134 * 2.5)); + creature.setAction((int) (400 + level * 134 * 2.5)); + } else if(difficulty == 2) { + creature.setMaxHealth((int) (400 + level * 134 * 10)); + creature.setHealth((int) (400 + level * 134 * 10)); + creature.setMaxAction((int) (400 + level * 134 * 10)); + creature.setAction((int) (400 + level * 134 * 10)); + } + } else if(difficulty <= 0 && customHealth == 0) { + creature.setMaxHealth((int) (400 + level * 134)); + creature.setHealth((int) (400 + level * 134)); + creature.setMaxAction((int) (400 + level * 134)); + creature.setAction((int) (400 + level * 134)); + } else { + System.out.println("HERE"); + creature.setMaxHealth(customHealth); + creature.setHealth(customHealth); + creature.setMaxAction((int) (level * 128)); + creature.setAction((int) (level * 128)); + } + + if(creature.getLevel() > 16) { + int armor = (creature.getLevel() - 16) * 87; + if(armor > 6000) + armor = 6000; + core.skillModService.addSkillMod(creature, "expertise_innate_protection_all", armor); + } + + AIActor actor = new AIActor(creature, creature.getPosition(), scheduler); + creature.setAttachment("AI", actor); + creature.setAttachment("radial_filename", "npc/mobile"); + actor.setMobileTemplate(mobileTemplate); + + + + if(cell == null) { + core.simulationService.add(creature, x, z, true); + } else { + creature.getPosition().setCell(cell); + cell.add(creature); + } + return creature; + } + + public CreatureObject spawnCreature(String template, String planetName, long cellId, float x, float y, float z, float qW, float qX, float qY, float qZ, short level) { + return spawnCreature(template, 0L, planetName, cellId, x, y, z, qW, qX, qY, qZ, level); + } + + public CreatureObject spawnCreature(String mobileTemplate, String planetName, long cellId, float x, float y, float z, float qW, float qX, float qY, float qZ, int level) { + return spawnCreature(mobileTemplate, planetName, cellId, x, y, z, 1, 0, 0, 0, (short) level); + } + + public CreatureObject spawnCreature(String mobileTemplate, String planetName, long cellId, float x, float y, float z) { + return spawnCreature(mobileTemplate, planetName, cellId, x, y, z, 1, 0, 0, 0, (short) -1); + } + + public CreatureObject spawnCreature(String mobileTemplate, String planetName, long cellId, float x, float y, float z, short level) { + return spawnCreature(mobileTemplate, planetName, cellId, x, y, z, 1, 0, 0, 0, level); + } + + public CreatureObject spawnCreature(String mobileTemplate, String planetName, long cellId, float x, float z) { + Planet planet = core.terrainService.getPlanetByName(planetName); + return spawnCreature(mobileTemplate, planetName, cellId, x, core.terrainService.getHeight(planet.getID(), x, z), z, 1, 0, 0, 0, (short) -1); + } + + public CreatureObject spawnCreature(String mobileTemplate, String planetName, long cellId, float x, float z, short level) { + Planet planet = core.terrainService.getPlanetByName(planetName); + return spawnCreature(mobileTemplate, planetName, cellId, x, core.terrainService.getHeight(planet.getID(), x, z), z, 1, 0, 0, 0, level); + } + + + public LairActor spawnLair(String lairSpawnTemplate, Planet planet, Point3D position, short level) { + + LairTemplate lairTemplate = lairTemplates.get(lairSpawnTemplate); + if(lairTemplate == null) + return null; + TangibleObject lairObject = (TangibleObject) core.objectService.createObject(lairTemplate.getLairCRC(), 0, planet, position, new Quaternion(1, 0, 0, 0)); + + if(lairObject == null) + return null; + + lairObject.setOptionsBitmask(Options.ATTACKABLE); + lairObject.setPvpBitmask(PvpStatus.Attackable); + lairObject.setMaximumCondition(1000 * level); + + LairActor lairActor = new LairActor(lairObject, lairTemplate.getMobileName(), 10, level); + + if (lairTemplate.getMobiles()!=null) + lairActor = new LairActor(lairObject, lairTemplate.getMobiles(), 10, level); + + lairObject.setAttachment("AI", lairActor); + + core.simulationService.add(lairObject, position.x, position.z, true); + lairActor.spawnNewCreatures(); + + return lairActor; + + } + + public void loadMobileTemplates() { + Path p = Paths.get("scripts/mobiles"); + FileVisitor fv = new SimpleFileVisitor() { + @Override + public FileVisitResult visitFile(Path file, BasicFileAttributes attrs) throws IOException { + if(!file.toString().contains("lairs") && !file.toString().contains("spawnareas") + && !file.toString().contains("lairgroups") && !file.toString().contains("dynamicgroups")) + core.scriptService.callScript(file.toString().replace(file.getFileName().toString(), ""), file.getFileName().toString().replace(".py", ""), "addTemplate", core); + return FileVisitResult.CONTINUE; + } + }; + try { + Files.walkFileTree(p, fv); + } catch (IOException e) { + e.printStackTrace(); + } + + } + + public void addMobileTemplate(String template, MobileTemplate mobileTemplate) { + mobileTemplates.put(template, mobileTemplate); + } + + public void loadLairTemplates() { + Path p = Paths.get("scripts/mobiles/lairs"); + FileVisitor fv = new SimpleFileVisitor() { + @Override + public FileVisitResult visitFile(Path file, BasicFileAttributes attrs) throws IOException { + core.scriptService.callScript("scripts/mobiles/lairs/", file.getFileName().toString().replace(".py", ""), "addTemplate", core); + return FileVisitResult.CONTINUE; + } + }; + try { + Files.walkFileTree(p, fv); + } catch (IOException e) { + e.printStackTrace(); + } + } + + public void addLairTemplate(String name, String mobile, int mobileLimit, String lairCRC) { + lairTemplates.put(name, new LairTemplate(name, mobile, mobileLimit, lairCRC)); + } + + public void addLairTemplate(String name, Vector mobiles, int mobileLimit, String lairCRC) { + lairTemplates.put(name, new LairTemplate(name, mobiles, mobileLimit, lairCRC)); + } + + public void loadLairGroups() { + Path p = Paths.get("scripts/mobiles/lairgroups"); + FileVisitor fv = new SimpleFileVisitor() { + @Override + public FileVisitResult visitFile(Path file, BasicFileAttributes attrs) throws IOException { + core.scriptService.callScript("scripts/mobiles/lairgroups/", file.getFileName().toString().replace(".py", ""), "addLairGroup", core); + return FileVisitResult.CONTINUE; + } + }; + try { + Files.walkFileTree(p, fv); + } catch (IOException e) { + e.printStackTrace(); + } + } + + public void loadDynamicGroups() { + Path p = Paths.get("scripts/mobiles/dynamicgroups"); + FileVisitor fv = new SimpleFileVisitor() { + @Override + public FileVisitResult visitFile(Path file, BasicFileAttributes attrs) throws IOException { + core.scriptService.callScript("scripts/mobiles/dynamicgroups/", file.getFileName().toString().replace(".py", ""), "addDynamicGroup", core); + return FileVisitResult.CONTINUE; + } + }; + try { + Files.walkFileTree(p, fv); + } catch (IOException e) { + e.printStackTrace(); + } + } + + public void addDynamicGroup(String name, DynamicSpawnGroup dynamicSpawnGroup) { + dynamicGroupTemplates.put(name, dynamicSpawnGroup); + } + + public void addLairGroup(String name, Vector lairSpawnTemplates) { + lairGroupTemplates.put(name, new LairGroupTemplate(name, lairSpawnTemplates)); + } + + public void loadSpawnAreas() { + Path p = Paths.get("scripts/mobiles/spawnareas"); + FileVisitor fv = new SimpleFileVisitor() { + @Override + public FileVisitResult visitFile(Path file, BasicFileAttributes attrs) throws IOException { + core.scriptService.callScript("scripts/mobiles/spawnareas/", file.getFileName().toString().replace(".py", ""), "addSpawnArea", core); + return FileVisitResult.CONTINUE; + } + }; + try { + Files.walkFileTree(p, fv); + } catch (IOException e) { + e.printStackTrace(); + } + } + + public void addLairSpawnArea(String lairGroup, float x, float z, float radius, String planetName) { + LairGroupTemplate lairGroupTemplate = lairGroupTemplates.get(lairGroup); + Planet planet = core.terrainService.getPlanetByName(planetName); + if(lairGroupTemplate == null || planet == null) + return; + CollidableCircle collidableCircle = new CollidableCircle(new Point3D(x, 0, z), radius, planet); + LairSpawnArea lairSpawnArea = new LairSpawnArea(planet, collidableCircle, lairGroupTemplate); + spawnAreas.get(planet).add(lairSpawnArea); + core.simulationService.addCollidable(collidableCircle, x, z); + } + + public void addDynamicSpawnArea(String dynamicGroup, float x, float z, float radius, String planetName) { + DynamicSpawnGroup dynamicGroupTemplate = dynamicGroupTemplates.get(dynamicGroup); + Planet planet = core.terrainService.getPlanetByName(planetName); + if(dynamicGroupTemplate == null || planet == null) + return; + CollidableCircle collidableCircle = new CollidableCircle(new Point3D(x, 0, z), radius, planet); + DynamicSpawnArea dynamicSpawnArea = new DynamicSpawnArea(planet, collidableCircle, dynamicGroupTemplate); + spawnAreas.get(planet).add(dynamicSpawnArea); + core.simulationService.addCollidable(collidableCircle, x, z); + } + + public void addDynamicSpawnArea(Vector dynamicGroups, float x, float z, float radius, String planetName) { + Vector dynamicSpawnGroups = new Vector(); + for (String template : dynamicGroups){ + if (dynamicGroupTemplates.get(template)==null){ + System.err.println("Dynamic Group template " + template +" not found in spawnservice collection!"); + return; + } + dynamicSpawnGroups.add(dynamicGroupTemplates.get(template)); + } + + Planet planet = core.terrainService.getPlanetByName(planetName); + if(dynamicSpawnGroups == null || dynamicSpawnGroups.size() == 0 || planet == null) + return; + CollidableCircle collidableCircle = new CollidableCircle(new Point3D(x, 0, z), radius, planet); + DynamicSpawnArea dynamicSpawnArea = new DynamicSpawnArea(planet, collidableCircle, dynamicSpawnGroups); + spawnAreas.get(planet).add(dynamicSpawnArea); + core.simulationService.addCollidable(collidableCircle, x, z); + } + + public void addMixedSpawnArea(Vector passedGroups, float x, float z, float radius, String planetName) { + Vector mixedSpawnGroups = new Vector(); + for (String template : passedGroups){ + if (dynamicGroupTemplates.get(template)!=null){ + mixedSpawnGroups.add(dynamicGroupTemplates.get(template)); + } + if (lairGroupTemplates.get(template)!=null){ + mixedSpawnGroups.add(lairGroupTemplates.get(template)); + } + if(dynamicGroupTemplates.get(template) == null && lairGroupTemplates.get(template)==null) + return; + } + + Planet planet = core.terrainService.getPlanetByName(planetName); + if(mixedSpawnGroups == null || mixedSpawnGroups.size() == 0 || planet == null) + return; + CollidableCircle collidableCircle = new CollidableCircle(new Point3D(x, 0, z), radius, planet); + MixedSpawnArea dynamicSpawnArea = new MixedSpawnArea(planet, collidableCircle, mixedSpawnGroups); + spawnAreas.get(planet).add(dynamicSpawnArea); + core.simulationService.addCollidable(collidableCircle, x, z); + } + + public Map getMobileTemplates() { + return mobileTemplates; + } + + public MobileTemplate getMobileTemplate(String template) { + return mobileTemplates.get(template); + } + +} diff --git a/src/services/spawn/StaticSpawnArea.java b/src/services/spawn/StaticSpawnArea.java new file mode 100644 index 00000000..64de8d63 --- /dev/null +++ b/src/services/spawn/StaticSpawnArea.java @@ -0,0 +1,48 @@ +/******************************************************************************* + * Copyright (c) 2013 + * + * This File is part of NGECore2. + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see . + * + * Using NGEngine to work with NGECore2 is making a combined work based on NGEngine. + * Therefore all terms and conditions of the GNU Lesser General Public License cover the combination. + ******************************************************************************/ +package services.spawn; + +import net.engio.mbassy.listener.Handler; +import resources.common.collidables.AbstractCollidable; +import resources.common.collidables.AbstractCollidable.EnterEvent; +import resources.common.collidables.AbstractCollidable.ExitEvent; +import engine.resources.scene.Planet; + +public class StaticSpawnArea extends SpawnArea { + + public StaticSpawnArea(Planet planet, AbstractCollidable area) { + super(planet, area); + } + + @Override + @Handler + public void onEnter(EnterEvent event) { + + } + + @Override + @Handler + public void onExit(ExitEvent event) { + + } + +} diff --git a/src/services/spawn/WeaponTemplate.java b/src/services/spawn/WeaponTemplate.java new file mode 100644 index 00000000..6e35498b --- /dev/null +++ b/src/services/spawn/WeaponTemplate.java @@ -0,0 +1,42 @@ +package services.spawn; + +public class WeaponTemplate { + + private String template=""; + private float attackSpeed=0; + private int weaponType=0; + + public WeaponTemplate(){ + + } + + public WeaponTemplate(String template, int weaponType, float attackSpeed){ + this.template = template; + this.weaponType = weaponType; + this.attackSpeed = attackSpeed; + } + + public String getTemplate() { + return template; + } + + public void setTemplate(String template) { + this.template = template; + } + + public float getAttackSpeed() { + return attackSpeed; + } + + public void setAttackSpeed(float attackSpeed) { + this.attackSpeed = attackSpeed; + } + + public int getWeaponType() { + return weaponType; + } + + public void setWeaponType(int weaponType) { + this.weaponType = weaponType; + } +} diff --git a/src/services/sui/SUIService.java b/src/services/sui/SUIService.java index 9722b691..662ec843 100644 --- a/src/services/sui/SUIService.java +++ b/src/services/sui/SUIService.java @@ -23,7 +23,6 @@ package services.sui; import java.nio.ByteOrder; import java.util.Map; -import java.util.Map.Entry; import java.util.Random; import java.util.Vector; import java.util.concurrent.ConcurrentHashMap; @@ -36,19 +35,22 @@ import org.python.core.Py; import org.python.core.PyObject; import protocol.swg.ObjControllerMessage; -import protocol.swg.ObjectMenuSelect; +import protocol.swg.ObjectMenuSelectMessage; import protocol.swg.SUICreatePageMessage; import protocol.swg.SUIEventNotification; import protocol.swg.SUIForceClosePageMessage; import protocol.swg.SUIUpdatePageMessage; import protocol.swg.objectControllerObjects.ObjectMenuRequest; import protocol.swg.objectControllerObjects.ObjectMenuResponse; - +import resources.common.FileUtilities; import resources.common.ObjControllerOpcodes; import resources.common.Opcodes; import resources.common.RadialOptions; +import resources.loot.LootRollSession; +import resources.objects.creature.CreatureObject; +import resources.objects.harvester.HarvesterObject; import services.sui.SUIWindow.SUICallback; - +import services.sui.SUIWindow.Trigger; import engine.clients.Client; import engine.resources.objects.SWGObject; import engine.resources.service.INetworkDispatch; @@ -75,13 +77,77 @@ public class SUIService implements INetworkDispatch { ObjectMenuRequest request = new ObjectMenuRequest(); request.deserialize(data); - + SWGObject target = core.objectService.getObject(request.getTargetId()); SWGObject owner = core.objectService.getObject(request.getCharacterId()); if(target == null || owner == null) return; - + + if (target instanceof HarvesterObject){ + HarvesterObject harvester = (HarvesterObject) target; + Vector admins = harvester.getAdminList(); + Vector hoppers = harvester.getHopperList(); + CreatureObject creature = (CreatureObject) core.objectService.getObject(harvester.getOwner()); + if (creature == owner && !admins.contains(owner.getCustomName())){ + admins.add(owner.getCustomName()); + } + + if (! admins.contains(owner.getCustomName()) && ! hoppers.contains(owner.getCustomName())){ + return; // Completely unauthorized + } + + if (! admins.contains(owner.getCustomName()) && hoppers.contains(owner.getCustomName())){ + // authorized for hopper + // change radialOptions to hopper access + core.scriptService.callScript("scripts/radial/", "structure/harvesterHopper", "createRadial", core, owner, target, request.getRadialOptions()); + sendRadial(owner, target, request.getRadialOptions(), request.getRadialCount()); + return; + } + } + + if (target instanceof CreatureObject){ + //System.out.println("SUI target is creatureobject"); + CreatureObject creature = (CreatureObject) target; + if (!creature.isPlayer() && creature.isLootLock()){ + LootRollSession lootRollSession = (LootRollSession )creature.getAttachment("LootSession"); + if (lootRollSession!=null) { + if (lootRollSession.getRequester()!=owner){ + + // ToDo: RADIALS MUST BE DISABLED HERE FOR THE CORPSE, BUT HOW? + target.setAttachment("radial_filename", "npc/noloot"); + core.scriptService.callScript("scripts/radial/npc/noloot", "", "createRadial", core, owner, target, request.getRadialOptions()); + sendRadial(owner, target, request.getRadialOptions(), request.getRadialCount()); + return; + } else { + // Note: Bugged NPC corpses never make it through here, they are not sent from client at all it seems + target.setAttachment("radial_filename", "npc/corpse"); + core.scriptService.callScript("scripts/radial/npc/corpse", "", "createRadial", core, owner, target, request.getRadialOptions()); + sendRadial(owner, target, request.getRadialOptions(), request.getRadialCount()); + //((CreatureObject)owner).sendSystemMessage("Radial set from suiservice", (byte)0); + return; + } + } + } + } else { + //System.out.println("SUI target is NOT creatureobject " + target.getTemplate()); + } + + if(target.getAttachment("isVendor") != null && (Boolean) target.getAttachment("isVendor") && (long) target.getAttachment("vendorOwner") == owner.getObjectID()) { + core.scriptService.callScript("scripts/radial/", "terminal/vendor", "createRadial", core, owner, target, request.getRadialOptions()); + sendRadial(owner, target, request.getRadialOptions(), request.getRadialCount()); + return; + } + + if(target.getGrandparent() != null && target.getGrandparent().getAttachment("structureAdmins") != null) + { + if(core.housingService.getPermissions(owner, target.getContainer()) && !getRadialFilename(target).equals("structure/structure_management_terminal")) + { + core.scriptService.callScript("scripts/radial/", "structure/moveable", "createRadial", core, owner, target, request.getRadialOptions()); + sendRadial(owner, target, request.getRadialOptions(), request.getRadialCount()); + return; + } + } core.scriptService.callScript("scripts/radial/", getRadialFilename(target), "createRadial", core, owner, target, request.getRadialOptions()); if(getRadialFilename(target).equals("default")) @@ -93,7 +159,7 @@ public class SUIService implements INetworkDispatch { }); - swgOpcodes.put(Opcodes.ObjectSelectMenuMessage, new INetworkRemoteEvent() { + swgOpcodes.put(Opcodes.ObjectMenuSelectMessage, new INetworkRemoteEvent() { @Override public void handlePacket(IoSession session, IoBuffer data) throws Exception { @@ -101,11 +167,10 @@ public class SUIService implements INetworkDispatch { data.order(ByteOrder.LITTLE_ENDIAN); data.position(0); - ObjectMenuSelect objMenuSelect = new ObjectMenuSelect(); + ObjectMenuSelectMessage objMenuSelect = new ObjectMenuSelectMessage(); objMenuSelect.deserialize(data); - Client client = core.getClient((Integer) session.getAttribute("connectionId")); - + Client client = core.getClient(session); if(client == null || client.getSession() == null) return; @@ -114,6 +179,11 @@ public class SUIService implements INetworkDispatch { if(target == null || owner == null) return; + + if(target.getAttachment("isVendor") != null && (Boolean) target.getAttachment("isVendor") && (long) target.getAttachment("vendorOwner") == owner.getObjectID()) { + core.scriptService.callScript("scripts/radial/", "terminal/vendor", "handleSelection", core, owner, target, objMenuSelect.getSelection()); + return; + } core.scriptService.callScript("scripts/radial/", getRadialFilename(target), "handleSelection", core, owner, target, objMenuSelect.getSelection()); @@ -137,7 +207,7 @@ public class SUIService implements INetworkDispatch { if(window == null) return; - Client client = core.getClient((Integer) session.getAttribute("connectionId")); + Client client = core.getClient(session); if(client == null || client.getSession() == null) return; @@ -171,12 +241,26 @@ public class SUIService implements INetworkDispatch { } public String getRadialFilename(SWGObject object) { + String serverTemplate = ("scripts/" + object.getTemplate().split("shared_" , 2)[0].replace("shared_", "") + object.getTemplate().split("shared_" , 2)[1] + ".py"); + String radialFilename = "default"; - if(object.getAttachment("radial_filename") != null) - return (String) object.getAttachment("radial_filename"); - else - return "default"; + if (FileUtilities.doesFileExist(serverTemplate)) { + PyObject method = core.scriptService.getMethod("scripts/" + object.getTemplate().split("shared_" , 2)[0].replace("shared_", ""), object.getTemplate().split("shared_" , 2)[1].replace(".iff", ""), "getRadialFilename"); + + if (method != null && method.isCallable()) { + radialFilename = method.__call__().asString(); + + if (radialFilename == null || radialFilename.equals("")) { + radialFilename = "default"; + } + } + } + if (radialFilename.equals("default") && object.getAttachment("radial_filename") != null) { + radialFilename = (String) object.getAttachment("radial_filename"); + } + + return radialFilename; } public void sendRadial(SWGObject owner, SWGObject target, Vector radialOptions, byte radialCount) { @@ -245,19 +329,7 @@ public class SUIService implements INetworkDispatch { window.clearDataSource("List.dataList"); - //int index = 0; - - for(Entry e : cloneData.entrySet()) { - - /*window.addDataItem("List.dataList:Name", String.valueOf(index)); - - window.setProperty("List.dataList." + index + ":Text", string); - - ++index;*/ - - window.addListBoxMenuItem(e.getValue(), e.getKey()); - - } + cloneData.entrySet().forEach(e -> window.addListBoxMenuItem(e.getValue(), (long) e.getKey())); return window; @@ -321,6 +393,34 @@ public class SUIService implements INetworkDispatch { return window; } + /** + * Creates an Input Box SUIWindow and adds a handler that will return text inputed into text box with the callback as the specified PyObject. + * @param PyObject Definition that will be run when user clicks on "OK" + * @return SUIWindow + * @author Waverunner + */ + public SUIWindow createInputBox(int type, String title, String promptText, SWGObject owner, SWGObject rangeObject, float maxDistance, PyObject handleFunc) { + SUIWindow window = createInputBox(type, title, promptText, owner, rangeObject, maxDistance); + Vector returnParams = new Vector(); + returnParams.add("txtInput:LocalText"); + window.addHandler(0, "", Trigger.TRIGGER_OK, returnParams, handleFunc); + return window; + } + + /** + * Creates an Input Box SUIWindow and adds a handler that will return text inputed into text box with the callback as the specified PyObject. + * @param SUICallback Callback that will be ran when user clicks on "OK" + * @return SUIWindow + * @author Waverunner + */ + public SUIWindow createInputBox(int type, String title, String promptText, SWGObject owner, SWGObject rangeObject, float maxDistance, SUICallback handleFunc) { + SUIWindow window = createInputBox(type, title, promptText, owner, rangeObject, maxDistance); + Vector returnParams = new Vector(); + returnParams.add("txtInput:LocalText"); + window.addHandler(0, "", Trigger.TRIGGER_OK, returnParams, handleFunc); + return window; + } + public void closeSUIWindow(SWGObject owner, int id) { if(owner.getClient() == null || owner.getClient().getSession() == null) diff --git a/src/services/sui/SUITableCell.java b/src/services/sui/SUITableCell.java new file mode 100644 index 00000000..d5c759b1 --- /dev/null +++ b/src/services/sui/SUITableCell.java @@ -0,0 +1,58 @@ +/******************************************************************************* + * Copyright (c) 2013 + * + * This File is part of NGECore2. + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see . + * + * Using NGEngine to work with NGECore2 is making a combined work based on NGEngine. + * Therefore all terms and conditions of the GNU Lesser General Public License cover the combination. + ******************************************************************************/ +package services.sui; + +public class SUITableCell { + private String name; + private long objectId; + private int cellId; + + public SUITableCell(String name, long objectId, int cellId) { + this.name = name; + this.objectId = objectId; + this.cellId = cellId; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public long getObjectId() { + return objectId; + } + + public void setObjectId(long objectId) { + this.objectId = objectId; + } + + public int getCellId() { + return cellId; + } + + public void setCellId(int cellId) { + this.cellId = cellId; + } +} diff --git a/src/services/sui/SUITableItem.java b/src/services/sui/SUITableItem.java new file mode 100644 index 00000000..5da4130b --- /dev/null +++ b/src/services/sui/SUITableItem.java @@ -0,0 +1,58 @@ +/******************************************************************************* + * Copyright (c) 2013 + * + * This File is part of NGECore2. + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see . + * + * Using NGEngine to work with NGECore2 is making a combined work based on NGEngine. + * Therefore all terms and conditions of the GNU Lesser General Public License cover the combination. + ******************************************************************************/ +package services.sui; + +import java.util.Vector; + +public class SUITableItem { + private Vector cells = new Vector(); + private String itemName; + private int index; + + public SUITableItem() { } + + public SUITableItem(String itemName, int index) { + this.itemName = itemName; + this.setIndex(index); + } + + public Vector getCells() { + return cells; + } + public void setCells(Vector cells) { + this.cells = cells; + } + public String getItemName() { + return itemName; + } + public void setItemName(String itemName) { + this.itemName = itemName; + } + + public int getIndex() { + return index; + } + + public void setIndex(int index) { + this.index = index; + } +} diff --git a/src/services/sui/SUIWindow.java b/src/services/sui/SUIWindow.java index dd256ae2..2f1c8a11 100644 --- a/src/services/sui/SUIWindow.java +++ b/src/services/sui/SUIWindow.java @@ -40,6 +40,7 @@ public class SUIWindow { private Map callbacks = new ConcurrentHashMap(); private Map javaCallbacks = new ConcurrentHashMap(); private Vector menuItems = new Vector(); + private Vector tableItems = new Vector(); public SUIWindow(String script, SWGObject owner, int windowId, SWGObject rangeObject, float maxDistance) { @@ -154,6 +155,21 @@ public class SUIWindow { } + public void addTableDataSource(String name, String value) { + + SUIWindowComponent component = new SUIWindowComponent(); + component.setType((byte) 8); // using 6 (addDataSource) doesn't allow setting of column titles in tables + + for(String str : name.split(":")) { + component.getNarrowParams().add(str); + } + + component.getWideParams().add(value); + + components.add(component); + + } + public void addListBoxMenuItem(String itemName, long objectId) { SUIListBoxItem menuItem = new SUIListBoxItem(itemName, objectId); @@ -164,8 +180,30 @@ public class SUIWindow { menuItems.add(menuItem); } + + public void addTableColumn(String itemName, String type) { + int index = tableItems.size(); + SUITableItem item = new SUITableItem(itemName, index); + addTableDataSource("comp.TablePage.dataTable:Name", String.valueOf(index)); + setProperty("comp.TablePage.dataTable." + index + ":Label", itemName); + setProperty("comp.TablePage.dataTable." + index + ":Type", type); + + tableItems.add(item); + } + + public void addTableCell(String cellName, long cellObjId, int columnIndex) { + tableItems.forEach(column -> { + if (column.getIndex() == columnIndex) { + SUITableCell cell = new SUITableCell(cellName, cellObjId, column.getCells().size()); + addDataItem("comp.TablePage.dataTable." + columnIndex + ":Name", "data" + cell.getCellId()); + setProperty("comp.TablePage.dataTable." + columnIndex + ".data" + cell.getCellId() + ":Value", cellName); + column.getCells().add(cell); + } + }); + } + public int getWindowId() { return windowId; } @@ -234,6 +272,22 @@ public class SUIWindow { return 0; } + + public long getTableObjIdByRow(int row) { + SUITableItem item = getTableItems().get(0); + + if (item != null) + return item.getCells().get(row).getObjectId(); + return 0; + } + + public Vector getTableItems() { + return tableItems; + } + + public void setTableItems(Vector tableItems) { + this.tableItems = tableItems; + } public enum Trigger {; public static byte TRIGGER_UPDATE = 4; diff --git a/src/services/trade/TradeService.java b/src/services/trade/TradeService.java index 06100d90..2b18e7b9 100644 --- a/src/services/trade/TradeService.java +++ b/src/services/trade/TradeService.java @@ -25,6 +25,7 @@ import resources.objects.creature.CreatureObject; import engine.clients.Client; import engine.resources.container.AllPermissions; import engine.resources.container.CreatureContainerPermissions; +import engine.resources.container.CreaturePermissions; import engine.resources.objects.SWGObject; import engine.resources.service.INetworkDispatch; import engine.resources.service.INetworkRemoteEvent; @@ -98,10 +99,13 @@ public class TradeService implements INetworkDispatch{ // creates a new trade session for the user who sent the request. It's given the objectID // that the player wants to trade with. - senderClient.getSession().setAttribute("tradeSession", recieverID); - - recieverObject.sendSystemMessage(senderObject.getCustomName() + " wants to trade with you.", (byte) 0); - + if (!senderObject.isInCombat() && !recieverObject.isInCombat()) { + senderClient.getSession().setAttribute("tradeSession", recieverID); + + recieverObject.sendSystemMessage(senderObject.getCustomName() + " wants to trade with you.", (byte) 0); + } else { + senderObject.sendSystemMessage("You can't send a trade request while you or your target is in combat.", (byte) 0); + } } } @@ -114,7 +118,7 @@ public class TradeService implements INetworkDispatch{ data.order(ByteOrder.LITTLE_ENDIAN); data.position(0); - Client client = core.getClient((Integer) session.getAttribute("connectionId")); + Client client = core.getClient(session); if (client == null) return; @@ -185,7 +189,7 @@ public class TradeService implements INetworkDispatch{ AddItemMessage addItem = new AddItemMessage(); addItem.deserialize(data); - Client client = core.getClient((Integer) session.getAttribute("connectionId")); + Client client = core.getClient(session); if (client == null) return; @@ -202,11 +206,13 @@ public class TradeService implements INetworkDispatch{ } else { + if(objectToTrade.getAttributes().containsKey("no_trade") || !objectToTrade.getPermissions().canRemove(client.getParent(), objectToTrade.getContainer()) || (objectToTrade.getContainer() instanceof CreatureObject)) { + return; + } addItemForTrade(objectToTrade, tradingWithClient); - System.out.println("Trading item: " + objectToTrade.getCustomName() + " detail: " + objectToTrade.getDetailFilename()); - - System.out.println("tradingObjectTable: " + tradingObjectsTable.toString()); + //System.out.println("Trading item: " + objectToTrade.getCustomName() + " detail: " + objectToTrade.getDetailFilename()); + tradee.makeAware(objectToTrade); AddItemMessage tradeeResponse = new AddItemMessage(); tradeeResponse.setTradeObjectID(tradeItemID); @@ -226,7 +232,7 @@ public class TradeService implements INetworkDispatch{ data.order(ByteOrder.LITTLE_ENDIAN); data.position(0); - Client client = core.getClient((Integer) session.getAttribute("connectionId")); + Client client = core.getClient(session); long tradingWithClient = (long) client.getSession().getAttribute("tradeSession"); CreatureObject tradingPartner = (CreatureObject) core.objectService.getObject(tradingWithClient); @@ -263,7 +269,7 @@ public class TradeService implements INetworkDispatch{ long objectToKeepID = request.getObjectID(); - Client client = core.getClient((Integer) session.getAttribute("connectionId")); + Client client = core.getClient(session); long tradingWithClient = (long) client.getSession().getAttribute("tradeSession"); CreatureObject tradePartner = (CreatureObject) core.objectService.getObject(tradingWithClient); @@ -284,7 +290,7 @@ public class TradeService implements INetworkDispatch{ // client sends this packet to the server and then the server sends it to client. - Client client = core.getClient((Integer) session.getAttribute("connectionId")); + Client client = core.getClient(session); long tradingWithClient = (long) client.getSession().getAttribute("tradeSession"); CreatureObject tradePartner = (CreatureObject) core.objectService.getObject(tradingWithClient); @@ -301,7 +307,7 @@ public class TradeService implements INetworkDispatch{ @Override public void handlePacket(IoSession session, IoBuffer buffer) throws Exception { - Client client = core.getClient((Integer) session.getAttribute("connectionId")); + Client client = core.getClient(session); long tradingWithClient = (long) client.getSession().getAttribute("tradeSession"); CreatureObject tradePartner = (CreatureObject) core.objectService.getObject(tradingWithClient); @@ -310,20 +316,6 @@ public class TradeService implements INetworkDispatch{ tradePartner.getClient().getSession().write(undoAccept.serialize()); } - }); - // not used, but just in case.... VerifyTradeMessage is sent instead when a user - // hits the Accept button. Can use this as an additional check if need to. - swgOpcodes.put(TradeOpcodes.BeginVerificationMessage, new INetworkRemoteEvent() { - - @Override - public void handlePacket(IoSession session, IoBuffer buffer) throws Exception { - System.out.println("Got BeginVerificationMessage"); - Client client = core.getClient((Integer) session.getAttribute("connectionId")); - client.getSession().setAttribute("tradeSessionIsVerified"); - System.out.println("Verified client"); - - } - }); swgOpcodes.put(TradeOpcodes.VerifyTradeMessage, new INetworkRemoteEvent() { @@ -333,12 +325,12 @@ public class TradeService implements INetworkDispatch{ // Sent first! - Client client = core.getClient((Integer) session.getAttribute("connectionId")); + Client client = core.getClient(session); long tradingWithClient = (long) getTradeAttribute(client); CreatureObject tradePartner = (CreatureObject) core.objectService.getObject(tradingWithClient); CreatureObject actingTrader = (CreatureObject) client.getParent(); - CreatureObject tradePartnerContainer = (CreatureObject) tradePartner.getContainer(); + SWGObject tradePartnerContainer = tradePartner.getContainer(); SWGObject tradePartnerInventory = tradePartner.getSlottedObject("inventory"); SWGObject actingTraderInventory = actingTrader.getSlottedObject("inventory"); @@ -402,12 +394,7 @@ public class TradeService implements INetworkDispatch{ actingTrader.setCashCredits(tradePartnerCredits - moneyToGive); tradePartner.setCashCredits(tradePartnerCredits + moneyToGive); } - - - System.out.println("Finished trading items/credits"); - cleanTradeSession(client, tradePartner.getClient()); - } } diff --git a/src/services/travel/TravelPoint.java b/src/services/travel/TravelPoint.java index c6f58870..98dd1930 100644 --- a/src/services/travel/TravelPoint.java +++ b/src/services/travel/TravelPoint.java @@ -21,6 +21,10 @@ ******************************************************************************/ package services.travel; +import java.util.concurrent.ExecutorService; +import java.util.concurrent.Executors; + +import resources.common.Console; import resources.common.SpawnPoint; import resources.objects.creature.CreatureObject; import engine.resources.scene.Point3D; @@ -34,6 +38,11 @@ public class TravelPoint { private int ticketPrice; private CreatureObject shuttle; private boolean shuttleAvailable; + private boolean shuttleLanding; + private int secondsRemaining; + private boolean shuttleDeparting; + private ExecutorService scheduler = Executors.newFixedThreadPool(1); + private long departureTimestamp; public TravelPoint() { } @@ -43,6 +52,8 @@ public class TravelPoint { this.location = new Point3D(x, y, z); this.spawnLocation = new SpawnPoint(this.location, 0, 1); this.shuttleAvailable = false; + this.shuttleLanding = false; + this.secondsRemaining = 0; } public String getName() { @@ -91,7 +102,11 @@ public class TravelPoint { public void setShuttle(CreatureObject shuttleObj) { this.shuttle = shuttleObj; - this.shuttleAvailable = true; + if (shuttleObj == null) { + Console.println("NULL SHUTTLE SET FOR: " + getName()); + } + //System.out.println("Shuttle obj " + shuttleObj.getTemplate() + " set for travelpoint " + getName()); + startShuttleSchedule(); } public boolean isShuttleAvailable() { @@ -101,4 +116,89 @@ public class TravelPoint { public void setShuttleAvailable(boolean shuttleAvailable) { this.shuttleAvailable = shuttleAvailable; } + + public boolean isShuttleLanding() { + return shuttleLanding; + } + + public void setShuttleLanding(boolean shuttleLanding) { + this.shuttleLanding = shuttleLanding; + } + + public int getSecondsRemaining() { + long currentTime = System.currentTimeMillis() / 1000; + long diff = currentTime - getDepartureTimestamp(); + + return (int) (60 - diff); + } + + public void setSecondsRemaining(int secondsRemaining) { + this.secondsRemaining = secondsRemaining; + System.out.println(secondsRemaining); + } + + public boolean isShuttleDeparting() { + return shuttleDeparting; + } + + public void setShuttleDeparting(boolean shuttleDeparting) { + this.shuttleDeparting = shuttleDeparting; + } + + public boolean isStarport() { + if(getShuttle() != null) { + return (getShuttle().getTemplate().equals("object/creature/npc/theme_park/shared_player_transport.iff") || getShuttle().getTemplate().equals("object/creature/npc/theme_park/shared_player_transport_theed_hangar.iff")); + } else { + // TODO: Null shuttles currently at: Mensix Mining Facility, Kachirho Starport, Quarantine Zone, Theed Spaceport, Restuss Shuttleport + //System.out.println("null shuttle at: " + getName()); + return false; + } + } + + private void startShuttleSchedule() { + + scheduler.execute(new Runnable() { + @Override + public void run() { + while(getShuttle() != null) { + + try { + setShuttleAvailable(true); + setShuttleLanding(false); + Thread.sleep(120000); + setShuttleAvailable(false); + setShuttleDeparting(true); + setDepartureTimestamp(System.currentTimeMillis() / 1000); + getShuttle().setPosture((byte) 2); + setShuttleDeparting(false); + Thread.sleep(60000); + setShuttleLanding(true); + getShuttle().setPosture((byte) 0); + if(isStarport()) + Thread.sleep(21000); + else + Thread.sleep(17000); + + + } catch (InterruptedException e) { + e.printStackTrace(); + } + + } + } + + }); + + + + + } + + public long getDepartureTimestamp() { + return departureTimestamp; + } + + public void setDepartureTimestamp(long depatureTimestamp) { + this.departureTimestamp = depatureTimestamp; + } } diff --git a/src/services/travel/TravelService.java b/src/services/travel/TravelService.java index 5408a92d..74310bf3 100644 --- a/src/services/travel/TravelService.java +++ b/src/services/travel/TravelService.java @@ -25,34 +25,31 @@ import java.nio.ByteOrder; import java.util.HashMap; import java.util.List; import java.util.Map; -import java.util.Map.Entry; import java.util.Vector; import java.util.concurrent.ConcurrentHashMap; -import java.util.concurrent.Executors; -import java.util.concurrent.ScheduledExecutorService; -import java.util.concurrent.TimeUnit; - import org.apache.commons.lang3.text.WordUtils; import org.apache.mina.core.buffer.IoBuffer; import org.apache.mina.core.session.IoSession; import protocol.swg.PlanetTravelPointListRequest; import protocol.swg.PlanetTravelPointListResponse; +import engine.clientdata.ClientFileManager; +import engine.clientdata.visitors.DatatableVisitor; import engine.clients.Client; import engine.resources.container.Traverser; import engine.resources.objects.SWGObject; import engine.resources.scene.Planet; import engine.resources.scene.Point3D; import engine.resources.scene.Quaternion; -import engine.resources.scene.quadtree.QuadTree; import engine.resources.service.INetworkDispatch; import engine.resources.service.INetworkRemoteEvent; import main.NGECore; +import resources.common.Console; import resources.common.Opcodes; +import resources.common.SpawnPoint; import resources.objects.creature.CreatureObject; -import resources.objects.player.PlayerObject; import resources.objects.tangible.TangibleObject; -import services.map.*; +import services.playercities.PlayerCity; import services.sui.SUIService.ListBoxType; import services.sui.SUIService.MessageBoxType; import services.sui.SUIWindow.SUICallback; @@ -63,7 +60,7 @@ public class TravelService implements INetworkDispatch { private NGECore core; private Map> travelMap = new ConcurrentHashMap>(); - private final ScheduledExecutorService scheduler = Executors.newScheduledThreadPool(1); + private Map> fareMap = new ConcurrentHashMap>(); public TravelService(NGECore core) { this.core = core; @@ -81,7 +78,7 @@ public class TravelService implements INetworkDispatch { PlanetTravelPointListRequest request = new PlanetTravelPointListRequest(); request.deserialize(data); - Client client = core.getClient((Integer) session.getAttribute("connectionId")); + Client client = core.getClient(session); if(client == null || client.getSession() == null) return; @@ -91,71 +88,85 @@ public class TravelService implements INetworkDispatch { if(object == null) return; - List planetList = core.terrainService.getPlanetList(); + TravelPoint travelPoint = getNearestTravelPoint(object); - for (Planet planet : planetList) { - String planetString = planet.getName(); + if(travelPoint == null) + return; + + if(travelPoint.isStarport()) { + + List planetList = core.terrainService.getPlanetList(); - if (request.getPlanet().equals(planetString)) { - - PlanetTravelPointListResponse response = new PlanetTravelPointListResponse(planetString, travelMap.get(planet), planetList); - client.getSession().write(response.serialize()); - break; + for (Planet planet : planetList) { + String planetString = planet.getName(); + if (request.getPlanet().equals(planetString)) { + + Vector correctTravelPoints = new Vector(); + + for(TravelPoint tp : travelMap.get(planet)) { + if(tp.isStarport() || tp.getPlanetName().equalsIgnoreCase(object.getPlanet().getName())) { + correctTravelPoints.add(tp); + } + } + PlanetTravelPointListResponse response = new PlanetTravelPointListResponse(planetString, correctTravelPoints); + client.getSession().write(response.serialize()); + + break; + + } } + + } else { + + Planet planet = object.getPlanet(); + + PlanetTravelPointListResponse response = new PlanetTravelPointListResponse(planet.getName(), travelMap.get(planet)); + client.getSession().write(response.serialize()); + } + } }); } - public void startShuttleSchedule() { - final Runnable shuttleRun = new Runnable() { - - @Override - public void run() { - - for (Entry> entry : travelMap.entrySet()) { - for(TravelPoint tp : entry.getValue()) { - if (tp.getShuttle() == null) - continue; - else { - if (tp.isShuttleAvailable() == false) { - tp.getShuttle().setPosture((byte) 0); - tp.setShuttleAvailable(true); - System.out.println("Shuttle is available"); - } - else { - tp.getShuttle().setPosture((byte) 2); - tp.setShuttleAvailable(false); - System.out.println("Shuttle is not available."); - } - } - } - } - - } - - }; - - scheduler.scheduleAtFixedRate(shuttleRun, 60, 60, TimeUnit.SECONDS); - } - public TravelPoint getNearestTravelPoint(SWGObject obj) { + + public TravelPoint getNearestTravelPoint(SWGObject obj, int distance) { TravelPoint returnedPoint = null; Vector planetTp = travelMap.get(obj.getPlanet()); - - for (TravelPoint tp : planetTp) { - //System.out.println("Distance for point " + tp.getName() + " is " + tp.getLocation().getDistance2D(obj.getWorldPosition())); - if (tp.getLocation().getDistance2D(obj.getWorldPosition()) <= 70) { - returnedPoint = tp; + + synchronized(travelMap) { + for (TravelPoint tp : planetTp) { + //System.out.println("Distance for point " + tp.getName() + " is " + tp.getLocation().getDistance2D(obj.getWorldPosition())); + if (tp.getLocation().getDistance2D(obj.getWorldPosition()) <= distance) { + if (returnedPoint != null) { + float returnPointDistance = returnedPoint.getLocation().getDistance2D(obj.getWorldPosition()); + float tpDistance = tp.getLocation().getDistance2D(obj.getWorldPosition()); + //Console.println("Current point: " + returnedPoint.getName()); + //Console.println("Return point distance: " + returnPointDistance + " for " + returnedPoint.getName()); + //Console.println("tp point distance: " + tpDistance + " for " + tp.getName()); + if (tpDistance < returnPointDistance) { + returnedPoint = tp; + } + } else { + returnedPoint = tp; + } + } } } - - if (returnedPoint == null) { - System.out.println("NULL TravelPoint!"); - } + // Some transport obj's were used as deco (ex: ACLO bunker on Talus shared_player_transport). A null check should be performed before tp is used. + /*if (returnedPoint == null) { + //System.out.println("Could not find travel point for " + obj.getTemplate() + " at " + obj.getPlanet().name + " Position: " + obj.getPosition().x + " " + obj.getPosition().z); + //Console.println("Travel Point NULL: " + returnedPoint.getName()); + }*/ + return returnedPoint; } + public TravelPoint getNearestTravelPoint(SWGObject obj) { + return getNearestTravelPoint(obj, 125); + } + public TravelPoint getTravelPointByName(String planet, String tpName) { Planet planetObj = core.terrainService.getPlanetByName(planet.toLowerCase()); @@ -163,11 +174,14 @@ public class TravelService implements INetworkDispatch { TravelPoint returnedPoint = null; - for (TravelPoint tp : tpMap) { - if (tp.getName().equals(tpName)) { - returnedPoint = tp; + synchronized(travelMap) { + for (TravelPoint tp : tpMap) { + if (tp.getName().equals(tpName)) { + returnedPoint = tp; + } } } + if (returnedPoint == null) { System.out.println("Couldn't find a travelpoint w/ name " + tpName); } return returnedPoint; } @@ -175,26 +189,28 @@ public class TravelService implements INetworkDispatch { public void addPlanet(Planet planet) { Vector travelPointVector = new Vector(); travelMap.put(planet, travelPointVector); - core.scriptService.callScript("scripts/", "addPoints", "static_travel_points", core, planet); + core.scriptService.callScript("scripts/", "static_travel_points", "addPoints", core, planet); } public void addTravelPoint(Planet planet, String name, float x, float y, float z) { // z should be y for 2d map - TravelPoint travelPoint = new TravelPoint(name, x, y, z, 100); + TravelPoint travelPoint = new TravelPoint(name, x, y, z, 150); travelPoint.setPlanetName(WordUtils.capitalize(planet.getName())); - if (travelMap.containsKey(planet)) { - - travelMap.get(planet).add(travelPoint); - System.out.println("Added travel point " + travelPoint.getName()); - - } else { - Vector travelPointVector = new Vector(); - travelMap.put(planet, travelPointVector); - travelMap.get(planet).add(travelPoint); - System.out.println("Added planet " + planet.getName() + " to TravelMap."); - System.out.println("Added travel point " + travelPoint.getName()); + synchronized(travelMap) { + if (travelMap.containsKey(planet)) { + + travelMap.get(planet).add(travelPoint); + System.out.println("Added travel point " + travelPoint.getName()); + + } else { + Vector travelPointVector = new Vector(); + travelMap.put(planet, travelPointVector); + travelMap.get(planet).add(travelPoint); + System.out.println("Added planet " + planet.getName() + " to TravelMap."); + System.out.println("Added travel point " + travelPoint.getName()); + } } } @@ -213,16 +229,15 @@ public class TravelService implements INetworkDispatch { public void loadTravelPoints() { List planetList = core.terrainService.getPlanetList(); - for (Planet planet : planetList) { - addPlanet(planet); - } + planetList.forEach(this::addPlanet); + populateTravelFares(); } public SWGObject createTravelTicket(String departurePlanet, String departureLoc, String arrivalPlanet, String arrivalLoc) { Planet planet = core.terrainService.getPlanetByName(departurePlanet.toLowerCase()); SWGObject travelTicket = core.objectService.createObject("object/tangible/travel/travel_ticket/base/shared_base_travel_ticket.iff", planet); - + travelTicket.setStringAttribute("@obj_attr_n:travel_departure_planet", WordUtils.capitalize(departurePlanet)); travelTicket.setStringAttribute("@obj_attr_n:travel_departure_point", departureLoc); @@ -230,23 +245,53 @@ public class TravelService implements INetworkDispatch { travelTicket.setStringAttribute("@obj_attr_n:travel_arrival_point", arrivalLoc); travelTicket.setAttachment("objType", "ticket"); - System.out.println("Object type: " + travelTicket.getAttachment("objType")); return travelTicket; } - public void purchaseTravelTicket(SWGObject player, String departurePlanet, String departureLoc, String arrivalPlanet, String arrivalLoc, String cost) { + public void purchaseTravelTicket(SWGObject player, String departurePlanet, String departureLoc, String arrivalPlanet, String arrivalLoc, String roundTrip) { CreatureObject creatureObj = (CreatureObject) player; + int fare = fareMap.get(player.getPlanet()).get(arrivalPlanet); + int tax = 0; + if (roundTrip.equals("1")) { + fare += fareMap.get(player.getPlanet()).get(arrivalPlanet); + } + PlayerCity city = core.playerCityService.getCityObjectIsIn(player); + if (city != null && city.getTravelTax() != 0) { tax = city.getTravelTax(); fare += tax;} + + int playerBankCredits = creatureObj.getBankCredits(); + if (playerBankCredits < fare) { + int cashDifference = fare - playerBankCredits; + + if (cashDifference > creatureObj.getCashCredits()) { + SUIWindow window = core.suiService.createMessageBox(MessageBoxType.MESSAGE_BOX_OK, "STAR WARS GALAXIES", "You do not have enough to purchase that." + , player, null, 0); + core.suiService.openSUIWindow(window); + return; + } + + creatureObj.setBankCredits(0); + creatureObj.setCashCredits(creatureObj.getCashCredits() - cashDifference); + + } else { + creatureObj.setBankCredits(playerBankCredits - fare); + + } + if (tax != 0) { city.addToTreasury(tax);} + + if (roundTrip.equals("1")) { + SWGObject tripTicket = createTravelTicket(arrivalPlanet, arrivalLoc, departurePlanet, departureLoc); + creatureObj.getSlottedObject("inventory").add(tripTicket); + } SWGObject travelTicket = createTravelTicket(departurePlanet, departureLoc, arrivalPlanet, arrivalLoc); creatureObj.getSlottedObject("inventory").add(travelTicket); - travelTicket.isSubChildOf(player); - - SUIWindow window = core.suiService.createMessageBox(MessageBoxType.MESSAGE_BOX_OK, "STAR WARS GALAXIES", "Ticket purchase complete.", player, null, 0); + //Console.println("Total cost: " + fare); + SUIWindow window = core.suiService.createMessageBox(MessageBoxType.MESSAGE_BOX_OK, "STAR WARS GALAXIES", "@travel:ticket_purchase_complete", player, null, 0); core.suiService.openSUIWindow(window); - creatureObj.sendSystemMessage("You successfully make a payment of " + cost + "credits to the Galactic Travel Commission.", (byte) 0); + creatureObj.sendSystemMessage("You successfully make a payment of " + fare + " credits to the Galactic Travel Commission.", (byte) 0); } // This returns all ticket objects in a players inventory @@ -265,7 +310,7 @@ public class TravelService implements INetworkDispatch { if (obj.getAttachment("objType") != null) { String objType = (String) obj.getAttachment("objType"); String ticket = "ticket"; - System.out.println("Nearest Point: " + nearestPoint.getName()); + //System.out.println("Nearest Point: " + nearestPoint.getName()); if (objType.equals(ticket) && obj.getStringAttribute("@obj_attr_n:travel_departure_point").equals(nearestPoint.getName())) { ticketList.add(obj); } @@ -278,11 +323,10 @@ public class TravelService implements INetworkDispatch { // TravelPoint = the travelpoint player is going to travel to! public void doTransport(SWGObject actor, TravelPoint tp) { - if (tp.getPlanetName().toLowerCase().equals(actor.getPlanet().name)) { - core.simulationService.teleport(actor, tp.getSpawnLocation().getPosition(), tp.getSpawnLocation().getOrientation(), 0); - } + Planet planet = core.terrainService.getPlanetByName(tp.getPlanetName()); + Point3D spawnLocation = SpawnPoint.getRandomPosition(tp.getLocation(), 5, 20, actor.getPlanetId()); + core.simulationService.transferToPlanet(actor, planet, spawnLocation, new Quaternion(0, 0, 0, 0), null); - else { core.simulationService.transferToPlanet(actor, core.terrainService.getPlanetByName(tp.getPlanetName()), tp.getSpawnLocation().getPosition(), tp.getSpawnLocation().getOrientation(), actor); } } @@ -311,7 +355,6 @@ public class TravelService implements INetworkDispatch { int index = Integer.parseInt(returnList.get(0)); SWGObject selectedTicket = core.objectService.getObject(window.getObjectIdByIndex(index)); - System.out.println("Selected ticket obj: " + window.getObjectIdByIndex(index)); TravelPoint arrivalPoint = getTravelPointByName(selectedTicket.getStringAttribute("@obj_attr_n:travel_arrival_planet").toLowerCase(), selectedTicket.getStringAttribute("@obj_attr_n:travel_arrival_point")); @@ -322,6 +365,8 @@ public class TravelService implements INetworkDispatch { selectedTicket.getContainer().remove(selectedTicket); core.objectService.destroyObject(selectedTicket); doTransport(creature, arrivalPoint); + } else { + creature.sendSystemMessage("@travel:shuttle_not_available ", (byte) 0); } } }); @@ -330,6 +375,55 @@ public class TravelService implements INetworkDispatch { } + private void populateTravelFares() { + try { + DatatableVisitor travelFares = ClientFileManager.loadFile("datatables/travel/travel.iff", DatatableVisitor.class); + + for (int f = 0; f < travelFares.getRowCount(); f++) { + Planet planet = core.terrainService.getPlanetByName((String) travelFares.getObject(f, 0)); + if (travelMap.containsKey(planet)) { + int corellia = ((int) travelFares.getObject(f, 1)); + int dantooine = ((int) travelFares.getObject(f, 2)); + int dathomir = ((int) travelFares.getObject(f, 3)); + int endor = ((int) travelFares.getObject(f, 4)); + int lok = ((int) travelFares.getObject(f, 5)); + int naboo = ((int) travelFares.getObject(f, 6)); + int rori = ((int) travelFares.getObject(f, 7)); + int talus = ((int) travelFares.getObject(f, 8)); + int tatooine = ((int) travelFares.getObject(f, 9)); + int yavin4 = ((int) travelFares.getObject(f, 10)); + int mustafar = ((int) travelFares.getObject(f, 11)); + int kashyyyk_main = ((int) travelFares.getObject(f, 12)); + + Map planetFares = new ConcurrentHashMap(); + + planetFares.put("corellia", corellia); + planetFares.put("dantooine", dantooine); + planetFares.put("dathomir", dathomir); + planetFares.put("endor", endor); + planetFares.put("lok", lok); + planetFares.put("naboo", naboo); + planetFares.put("rori", rori); + planetFares.put("talus", talus); + planetFares.put("tatooine", tatooine); + planetFares.put("yavin4", yavin4); + planetFares.put("mustafar", mustafar); + planetFares.put("kashyyyk_main", kashyyyk_main); + + fareMap.put(planet, planetFares); + Console.println("Loaded the travel fares for " + planet.getName()); + } + } + } + catch (InstantiationException | IllegalAccessException e) { + e.printStackTrace(); + } + } + + public Map> getTravelMap() { + return this.travelMap; + } + @Override public void shutdown() { diff --git a/src/tools/CharonPacketUtils.java b/src/tools/CharonPacketUtils.java new file mode 100644 index 00000000..7c091133 --- /dev/null +++ b/src/tools/CharonPacketUtils.java @@ -0,0 +1,103 @@ +package tools; + +import java.io.UnsupportedEncodingException; + +import main.NGECore; + +import org.apache.mina.core.buffer.IoBuffer; + +/** + * @author Charon + */ + +public class CharonPacketUtils { + + private final static char[] HEX = { + '0', '1', '2', '3', '4', '5', '6', '7', + '8', '9', 'A', 'B', 'C', 'D', 'E', 'F' + }; + + public static String fromLong(long value) { + char[] hexs; + int i; + int c; + + hexs = new char[16]; + for (i = 0; i < 16; i++) { + c = (int)(value & 0xf); + hexs[16-i-1] = HEX[c]; + value = value >> 4; + } + return new String(hexs); + } + + final protected static char[] hexArray = "0123456789ABCDEF".toCharArray(); + public static String bytesToHex(byte[] bytes) { + char[] hexChars = new char[bytes.length * 2]; + int v; + for ( int j = 0; j < bytes.length; j++ ) { + v = bytes[j] & 0xFF; + hexChars[j * 2] = hexArray[v >>> 4]; + hexChars[j * 2 + 1] = hexArray[v & 0x0F]; + } + return new String(hexChars); + } + + public static String byteToHex(byte bytes) { + char[] hexChars = new char[2]; + int v; + + v = bytes & 0xFF; + hexChars[2] = hexArray[v >>> 4]; + hexChars[2 + 1] = hexArray[v & 0x0F]; + + return new String(hexChars); + } + + public static void printAnalysis(IoBuffer pack){ + + if (!NGECore.PACKET_DEBUG) + return; + + byte[] packArray = pack.array(); + int lineCount = packArray.length/16; + int actualIndex = 0; + String buffString = ""; + String asciiString = ""; + for (int lineIndex = 0; lineIndex <= lineCount; lineIndex++) + { + byte[] ASCIIArray = new byte[16]; + buffString = ""; + asciiString = ""; + // remaining bytes per line + int remaining = packArray.length - actualIndex; + int byteColumnSize = 0; + if (remaining < 16) byteColumnSize = remaining; + else byteColumnSize = 16; + for (int byteColumnIndex = 0; byteColumnIndex < byteColumnSize; byteColumnIndex++) + { + if (byteColumnIndex == 8) + buffString += " "; + else buffString += " "; + + buffString += ((Integer.toString( ( packArray[actualIndex] & 0xff ) + 0x100, 16).substring( 1 )).toUpperCase() + ""); + if (packArray[actualIndex] < 31 || packArray[actualIndex] == 13) + ASCIIArray[byteColumnIndex] = 32; + else + ASCIIArray[byteColumnIndex] = packArray[actualIndex]; + + actualIndex++; + } + try { + asciiString += new String(ASCIIArray, "US-ASCII"); + } catch (UnsupportedEncodingException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + System.out.println(buffString + " " + asciiString); + + + } + System.out.println("------------------------------------------------------------------------"); + } +}